From 9f1c28d4c888fcb982b3ee846578ecb1d74a6fb7 Mon Sep 17 00:00:00 2001 From: mawalou14 Date: Sun, 13 Oct 2024 00:39:03 +0100 Subject: [PATCH 1/5] Updated contact Management app UI and styling --- .../cache/18.2.8/contact-manager/.tsbuildinfo | 1 + .../vite/deps/@angular_common.js | 200 + .../vite/deps/@angular_common.js.map | 7 + .../vite/deps/@angular_common_http.js | 84 + .../vite/deps/@angular_common_http.js.map | 7 + .../vite/deps/@angular_core.js | 931 + .../vite/deps/@angular_core.js.map | 7 + .../vite/deps/@angular_forms.js | 6508 ++++ .../vite/deps/@angular_forms.js.map | 7 + .../vite/deps/@angular_platform-browser.js | 83 + .../deps/@angular_platform-browser.js.map | 7 + .../vite/deps/@angular_router.js | 5698 ++++ .../vite/deps/@angular_router.js.map | 7 + .../contact-manager/vite/deps/_metadata.json | 58 + .../vite/deps/chunk-2B55IDV7.js | 1937 ++ .../vite/deps/chunk-2B55IDV7.js.map | 7 + .../vite/deps/chunk-6RVO5VK4.js | 27574 ++++++++++++++++ .../vite/deps/chunk-6RVO5VK4.js.map | 7 + .../vite/deps/chunk-PYKYRQFQ.js | 2372 ++ .../vite/deps/chunk-PYKYRQFQ.js.map | 7 + .../vite/deps/chunk-RPEJTJF5.js | 5147 +++ .../vite/deps/chunk-RPEJTJF5.js.map | 7 + .../contact-manager/vite/deps/package.json | 3 + .../Advanced/Contact-Manager/db.json | 33 +- .../Contact-Manager/package-lock.json | 15651 +++++++++ .../src/app/app.component.html | 27 +- .../Contact-Manager/src/app/app.component.ts | 22 +- .../contact-list/contact-list.component.html | 96 +- .../contact-list/contact-list.component.ts | 81 +- .../edit-contact/edit-contact.component.html | 141 +- .../components/header/header.component.html | 36 +- .../app/components/header/header.component.ts | 25 +- .../new-contact/new-contact.component.html | 143 +- .../src/assets/images/bg-2.jpeg | Bin 0 -> 20325 bytes .../Advanced/Contact-Manager/src/styles.css | 23 + .../Contact-Manager/tailwind.config.js | 15 +- 36 files changed, 66739 insertions(+), 220 deletions(-) create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/.tsbuildinfo create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_platform-browser.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_platform-browser.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_router.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_router.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/_metadata.json create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-2B55IDV7.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-2B55IDV7.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-6RVO5VK4.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-6RVO5VK4.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-PYKYRQFQ.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-PYKYRQFQ.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-RPEJTJF5.js create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/chunk-RPEJTJF5.js.map create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/package.json create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/package-lock.json create mode 100644 Angular-JS-Projects/Advanced/Contact-Manager/src/assets/images/bg-2.jpeg diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/.tsbuildinfo b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/.tsbuildinfo new file mode 100644 index 00000000..ce1a9243 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../../node_modules/typescript/lib/lib.dom.d.ts","../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../node_modules/tslib/tslib.d.ts","../../../../node_modules/tslib/modules/index.d.ts","../../../../src/main.ngtypecheck.ts","../../../../node_modules/rxjs/dist/types/internal/subscription.d.ts","../../../../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../../../../node_modules/rxjs/dist/types/internal/operator.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable.d.ts","../../../../node_modules/rxjs/dist/types/internal/types.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../../../../node_modules/rxjs/dist/types/internal/subject.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../../../../node_modules/rxjs/dist/types/internal/notification.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../../../../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../../../../node_modules/rxjs/dist/types/operators/index.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../../../../node_modules/rxjs/dist/types/testing/index.d.ts","../../../../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../../../../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../../../../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../../../../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../../../../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../../../../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../../../../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../../../../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../../../../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../../../../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../../../../node_modules/rxjs/dist/types/internal/config.d.ts","../../../../node_modules/rxjs/dist/types/index.d.ts","../../../../node_modules/@angular/core/primitives/event-dispatch/index.d.ts","../../../../node_modules/@angular/core/primitives/signals/index.d.ts","../../../../node_modules/@angular/core/index.d.ts","../../../../node_modules/@angular/common/index.d.ts","../../../../node_modules/@angular/common/http/index.d.ts","../../../../node_modules/@angular/platform-browser/index.d.ts","../../../../src/app/app.config.ngtypecheck.ts","../../../../node_modules/@angular/router/index.d.ts","../../../../src/app/app.routes.ngtypecheck.ts","../../../../src/app/app.routes.ts","../../../../src/app/app.config.ts","../../../../node_modules/@angular/forms/index.d.ts","../../../../src/app/components/new-contact/new-contact.component.ngtypecheck.ts","../../../../src/app/models/contact.ngtypecheck.ts","../../../../src/app/models/contact.ts","../../../../src/app/services/contact.service.ngtypecheck.ts","../../../../src/app/services/contact.service.ts","../../../../src/app/components/new-contact/new-contact.component.ts","../../../../src/app/components/header/header.component.ngtypecheck.ts","../../../../src/app/components/header/header.component.ts","../../../../src/app/components/edit-contact/edit-contact.component.ngtypecheck.ts","../../../../src/app/components/edit-contact/edit-contact.component.ts","../../../../src/app/components/contact-list/contact-list.component.ngtypecheck.ts","../../../../src/app/components/contact-list/contact-list.component.ts","../../../../src/app/app.component.ngtypecheck.ts","../../../../src/app/app.component.ts","../../../../src/main.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"4af6b0c727b7a2896463d512fafd23634229adf69ac7c00e2ae15a09cb084fad","affectsGlobalScope":true},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"4a882ffbb4ed09d9b7734f784aebb1dfe488d63725c40759165c5d9c657ca029","31973b272be35eab5ecf20a38ea54bec84cdc0317117590cb813c72fe0ef75b3","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","ecf5cb089ea438f2545e04b6c52828c68d0b0f4bfaa661986faf36da273e9892","95444fb6292d5e2f7050d7021383b719c0252bf5f88854973977db9e3e3d8006","241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","06540a9f3f2f88375ada0b89712de1c4310f7398d821c4c10ab5c6477dafb4bc",{"version":"de2d3120ed0989dbc776de71e6c0e8a6b4bf1935760cf468ff9d0e9986ef4c09","affectsGlobalScope":true},"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","97bdf234f5db52085d99c6842db560bca133f8a0413ff76bf830f5f38f088ce3","a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","b493ff8a5175cbbb4e6e8bcfa9506c08f5a7318b2278365cfca3b397c9710ebc","e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","303ee143a869e8f605e7b1d12be6c7269d4cab90d230caba792495be595d4f56","89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","a5eb4835ab561c140ffc4634bb039387d5d0cceebb86918f1696c7ac156d26fd","c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","4252b852dd791305da39f6e1242694c2e560d5e46f9bb26e2aca77252057c026","0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","ba13c7d46a560f3d4df8ffb1110e2bbec5801449af3b1240a718514b5576156e","6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","05c4e2a992bb83066a3a648bad1c310cecd4d0628d7e19545bb107ac9596103a","b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","dd6c3362aaaec60be028b4ba292806da8e7020eef7255c7414ce4a5c3a7138ef","8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","3114b315cd0687aad8b57cff36f9c8c51f5b1bc6254f1b1e8446ae583d8e2474","0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","af733cb878419f3012f0d4df36f918a69ba38d73f3232ba1ab46ef9ede6cb29c","cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","0a01b0b5a9e87d04737084731212106add30f63ec640169f1462ba2e44b6b3a8","06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","e07d62a8a9a3bb65433a62e9bbf400c6bfd2df4de60652af4d738303ee3670a1","bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","851e8d57d6dd17c71e9fa0319abd20ab2feb3fb674d0801611a09b7a25fd281c","c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","748e79252a7f476f8f28923612d7696b214e270cc909bc685afefaac8f052af0","9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","c3f32a185cd27ac232d3428a8d9b362c3f7b4892a58adaaa022828a7dcd13eed","3139c3e5e09251feec7a87f457084bee383717f3626a7f1459d053db2f34eb76","4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","3be870c8e17ec14f1c18fc248f5d2c4669e576404744ff5c63e6dafcf05b97ea","56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","6ab380571d87bd1d6f644fb6ab7837239d54b59f07dc84347b1341f866194214","547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","7c9ed7ffdc6f843ab69e5b2a3e7f667b050dd8d24d0052db81e35480f6d4e15d","7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","3656f0584d5a7ee0d0f2cc2b9cffbb43af92e80186b2ce160ebd4421d1506655","a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","90f690a1c5fcb4c2d19c80fea05c8ab590d8f6534c4c296d70af6293ede67366","be95e987818530082c43909be722a838315a0fc5deb6043de0a76f5221cbad24","9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","1f6058d60eaa8825f59d4b76bbf6cc0e6ad9770948be58de68587b0931da00cc","5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","50100b1a91f61d81ca3329a98e64b7f05cddc5e3cb26b3411adc137c9c631aca","11aceaee5663b4ed597544567d6e6a5a94b66857d7ebd62a9875ea061018cd2c","6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","669b754ec246dd7471e19b655b73bda6c2ca5bb7ccb1a4dff44a9ae45b6a716a","4bb6035e906946163ecfaec982389d0247ceeac6bdee7f1d07c03d9c224db3aa","8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","c82857a876075e665bbcc78213abfe9e9b0206d502379576d7abd481ade3a569","4f71d883ed6f398ba8fe11fcd003b44bb5f220f840b3eac3c395ad91304e4620","5229c3934f58413f34f1b26c01323c93a5a65a2d9f2a565f216590dfbed1fe32","9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","4c754b03f36ff35fc539f9ebb5f024adbb73ec2d3e4bfb35b385a05abb36a50e","59507446213e73654d6979f3b82dadc4efb0ed177425ae052d96a3f5a5be0d35","a914be97ca7a5be670d1545fc0691ac3fbabd023d7d084b338f6934349798a1f","8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","87437ca9dabab3a41d483441696ff9220a19e713f58e0b6a99f1731af10776d7","26c5dfa9aa4e6428f4bb7d14cbf72917ace69f738fa92480b9749eebce933370","8e94328e7ca1a7a517d1aa3c569eac0f6a44f67473f6e22c2c4aff5f9f4a9b38","d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","299f0af797897d77685d606502be72846b3d1f0dc6a2d8c964e9ea3ccbacf5bc","12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","3c97b5ea66276cf463525a6aa9d5bb086bf5e05beac70a0597cda2575503b57b","b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","a31383256374723b47d8b5497a9558bbbcf95bcecfb586a36caf7bfd3693eb0e","06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","64aa66c7458cbfd0f48f88070b08c2f66ae94aba099dac981f17c2322d147c06","11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","9814545517193cf51127d7fbdc3b7335688206ec04ee3a46bba2ee036bd0dcac","0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","0224aa9b03628dbfd90792ffc18f7291e89720e5648a3273b85925bad9cfd167","e632e8248e6ee1eb3081f57a3e8d89389f5a5228e12aa78573f278cec4e6d698","a27e450d19eeece3291d53b995f401582a98bfe84a9c19d5b1309dbfc5d84efa","95fb47603a09648fa8d80bb05eaafec8b58ce0f42e9ec45c9a732a4cfe3dc872","da14ab982515870b0042dd4bce514198c519d29e69c504eb97ef42dc7841b9d4","fa6fdba35259695468a7aa45e903d109fa1c187c701ff30ba73e6fbb391ca660","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","e1dc0f8fe897748289c59ce6f47b99c1d82a6b43a3705f85af086375b2242613","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","e9dae25e22d9fe37472c3d164f53e36ea1eb00ffe8fe2e5d5a0225b927d86e46","b19dbcff340d586222d278f370d739c29de1a886fea4ef4d23a9ec5c3f59c37e","85596fa939d17ecc333e94e9966e371b9eb641a9434a0eebce1cbd8205936ef3",{"version":"083a8104c684d840c1f8cee84119dfbd44a119552dfa6ac472507eb7fbfb926a","signature":"b52dcd199c97746007e4589749483d8b943e6bac0bbf6a90c0b9c7be86f9b793"},"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","4784813bbbdfa6b1054b25b2c6f14420e930c3b490dd5b7ba79e3617241144bb","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","a4641a0209d3b21dc55028966715544679127fafa14f20d7ab157bc9cb216d47",{"version":"39c0b1e3eea6076d4dc590abf6fe47013d768d528b3f0c988cff667466ff528b","signature":"8f8947eebaae968749fad5f312aa04c5647617f9a479b8ae14e1a49e5e845628"},{"version":"bd8106c05f88ab867bff7e2c2387c6097929f681d798c1ba7690f411cfbd2f9e","signature":"b52dcd199c97746007e4589749483d8b943e6bac0bbf6a90c0b9c7be86f9b793"},{"version":"5831c9791e184cab7d5cb57c20a79612ed11ea7455fa7bdb5eec99eceb660675","signature":"f0bc43eee5c80065f2e3179810c5399b1417af515408adfabeac85d66a01cdd0"},{"version":"741750635f13b7c95bf554d57dbfb177398f860cdd7614998c26f5c76412e787","signature":"b52dcd199c97746007e4589749483d8b943e6bac0bbf6a90c0b9c7be86f9b793"},{"version":"5f6fa25831abab65b78d95f7050062f3525c87766a5f8d89cd504fa6e5f1f3fa","signature":"02a4508b0f4f3e7965fade6bddefe2f6c4f8ef19478879a6395f9fb891e0f361"},{"version":"7cae5232beb6548efc743d040e5f4dfd7af4b9ff43564ced2981f010b8a597a7","signature":"b52dcd199c97746007e4589749483d8b943e6bac0bbf6a90c0b9c7be86f9b793"},{"version":"99af4e60d4a646b74508752651818318663a41886d2d46890ebd84d402550395","signature":"16a44816941f2520f1fbc6a75366e601f2fc4a2aa469d0d3ffb2e0b20d7115a4"},{"version":"f961f9b5cf776682db85496ccea108ef36f02b1b153713f0824cf8711b3ab714","signature":"b52dcd199c97746007e4589749483d8b943e6bac0bbf6a90c0b9c7be86f9b793"},{"version":"62148b61e2400f7ee6fcd60e82184771854fad7b0b835095034e936beb0c6a57","signature":"43d13241956264f7f76acc34e18e3c6b800e6a968b9a196e48f9c580bd4fb228"},"abed2fcecfc488c97265276567a7eaeac7acb0abf954ab6fd6ccfbab2243b3e5"],"root":[61,277],"options":{"declaration":false,"declarationMap":false,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":true,"inlineSources":true,"module":7,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noPropertyAccessFromIndexSignature":true,"outDir":"../../../..","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"fileIdsList":[[250,253,254],[250,253],[250,251,252,253],[253,254,255],[250,253,254,256,258],[62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,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,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,181,182,183,185,194,196,197,198,199,200,201,203,204,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249],[107],[63,66],[65],[65,66],[62,63,64,66],[63,65,66,223],[66],[62,65,107],[65,66,223],[65,231],[63,65,66],[75],[98],[119],[65,66,107],[66,114],[65,66,107,125],[65,66,125],[66,166],[66,107],[62,66,184],[62,66,185],[207],[191,193],[202],[191],[62,66,184,191,192],[184,185,193],[205],[62,66,191,192,193],[64,65,66],[62,66],[63,65,185,186,187,188],[107,185,186,187,188],[185,187],[65,186,187,189,190,194],[62,65],[66,209],[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,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,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,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182],[195],[59],[60,253,270,274,276],[60,253,258,270,274,275],[60],[60,253,255,257,258,260],[60,258,259],[60,253,254,272,274],[60,253,254,265,267,272,273],[60,253,262,272],[60,253,262,265,267,271],[60,253,254,262,268,270],[60,253,254,262,268,269],[60,253,262,268],[60,253,254,262,263,265,267],[60,264],[60,250,253,255,265,266],[60,61,256,261,276]],"referencedMap":[[255,1],[254,2],[253,3],[262,2],[256,4],[258,5],[250,6],[201,7],[199,7],[249,8],[214,9],[213,9],[114,10],[65,11],[221,10],[222,10],[224,12],[225,10],[226,13],[125,14],[227,10],[198,10],[228,10],[229,15],[230,10],[231,9],[232,16],[233,10],[234,10],[235,10],[236,10],[237,9],[238,10],[239,10],[240,10],[241,10],[242,17],[243,10],[244,10],[245,10],[246,10],[247,10],[64,8],[67,13],[68,13],[69,13],[70,13],[71,13],[72,13],[73,13],[74,10],[76,18],[77,13],[75,13],[78,13],[79,13],[80,13],[81,13],[82,13],[83,13],[84,10],[85,13],[86,13],[87,13],[88,13],[89,13],[90,10],[91,13],[92,13],[93,13],[94,13],[95,13],[96,13],[97,10],[99,19],[98,13],[100,13],[101,13],[102,13],[103,13],[104,17],[105,10],[106,10],[120,20],[108,21],[109,13],[110,13],[111,10],[112,13],[113,13],[115,22],[116,13],[117,13],[118,13],[119,13],[121,13],[122,13],[123,13],[124,13],[126,23],[127,13],[128,13],[129,13],[130,10],[131,13],[132,24],[133,24],[134,24],[135,10],[136,13],[137,13],[138,13],[143,13],[139,13],[140,10],[141,13],[142,10],[144,13],[145,13],[146,13],[147,13],[148,13],[149,13],[150,10],[151,13],[152,13],[153,13],[154,13],[155,13],[156,13],[157,13],[158,13],[159,13],[160,13],[161,13],[162,13],[163,13],[164,13],[165,13],[166,13],[167,25],[168,13],[169,13],[170,13],[171,13],[172,13],[173,13],[174,10],[175,10],[176,10],[177,10],[178,10],[179,13],[180,13],[181,13],[182,13],[200,26],[248,10],[185,27],[184,28],[208,29],[207,30],[203,31],[202,30],[204,32],[193,33],[191,34],[206,35],[205,32],[194,36],[107,37],[63,38],[62,13],[189,39],[190,40],[188,41],[186,13],[195,42],[66,43],[212,9],[210,44],[183,45],[196,46],[60,47],[275,48],[276,49],[257,50],[261,51],[259,50],[260,52],[273,53],[274,54],[271,55],[272,56],[269,57],[270,58],[263,59],[268,60],[264,50],[265,61],[266,50],[267,62],[61,50],[277,63]],"semanticDiagnosticsPerFile":[61,257,259,263,264,266,269,271,273,275]},"version":"5.5.4"} \ No newline at end of file diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js new file mode 100644 index 00000000..06e5a6a3 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js @@ -0,0 +1,200 @@ +import { + APP_BASE_HREF, + AsyncPipe, + BrowserPlatformLocation, + CommonModule, + CurrencyPipe, + DATE_PIPE_DEFAULT_OPTIONS, + DATE_PIPE_DEFAULT_TIMEZONE, + DOCUMENT, + DatePipe, + DecimalPipe, + DomAdapter, + FormStyle, + FormatWidth, + HashLocationStrategy, + I18nPluralPipe, + I18nSelectPipe, + IMAGE_LOADER, + JsonPipe, + KeyValuePipe, + LOCATION_INITIALIZED, + Location, + LocationStrategy, + LowerCasePipe, + NgClass, + NgComponentOutlet, + NgForOf, + NgForOfContext, + NgIf, + NgIfContext, + NgLocaleLocalization, + NgLocalization, + NgOptimizedImage, + NgPlural, + NgPluralCase, + NgStyle, + NgSwitch, + NgSwitchCase, + NgSwitchDefault, + NgTemplateOutlet, + NullViewportScroller, + NumberFormatStyle, + NumberSymbol, + PLATFORM_BROWSER_ID, + PLATFORM_SERVER_ID, + PRECONNECT_CHECK_BLOCKLIST, + PathLocationStrategy, + PercentPipe, + PlatformLocation, + PlatformNavigation, + Plural, + SlicePipe, + TitleCasePipe, + TranslationWidth, + UpperCasePipe, + VERSION, + ViewportScroller, + WeekDay, + XhrFactory, + formatCurrency, + formatDate, + formatNumber, + formatPercent, + getCurrencySymbol, + getDOM, + getLocaleCurrencyCode, + getLocaleCurrencyName, + getLocaleCurrencySymbol, + getLocaleDateFormat, + getLocaleDateTimeFormat, + getLocaleDayNames, + getLocaleDayPeriods, + getLocaleDirection, + getLocaleEraNames, + getLocaleExtraDayPeriodRules, + getLocaleExtraDayPeriods, + getLocaleFirstDayOfWeek, + getLocaleId, + getLocaleMonthNames, + getLocaleNumberFormat, + getLocaleNumberSymbol, + getLocalePluralCase, + getLocaleTimeFormat, + getLocaleWeekEndRange, + getNumberOfCurrencyDigits, + isPlatformBrowser, + isPlatformServer, + normalizeQueryParams, + parseCookieValue, + provideCloudflareLoader, + provideCloudinaryLoader, + provideImageKitLoader, + provideImgixLoader, + provideNetlifyLoader, + registerLocaleData, + setRootDomAdapter +} from "./chunk-RPEJTJF5.js"; +import { + IMAGE_CONFIG +} from "./chunk-6RVO5VK4.js"; +export { + APP_BASE_HREF, + AsyncPipe, + BrowserPlatformLocation, + CommonModule, + CurrencyPipe, + DATE_PIPE_DEFAULT_OPTIONS, + DATE_PIPE_DEFAULT_TIMEZONE, + DOCUMENT, + DatePipe, + DecimalPipe, + FormStyle, + FormatWidth, + HashLocationStrategy, + I18nPluralPipe, + I18nSelectPipe, + IMAGE_CONFIG, + IMAGE_LOADER, + JsonPipe, + KeyValuePipe, + LOCATION_INITIALIZED, + Location, + LocationStrategy, + LowerCasePipe, + NgClass, + NgComponentOutlet, + NgForOf as NgFor, + NgForOf, + NgForOfContext, + NgIf, + NgIfContext, + NgLocaleLocalization, + NgLocalization, + NgOptimizedImage, + NgPlural, + NgPluralCase, + NgStyle, + NgSwitch, + NgSwitchCase, + NgSwitchDefault, + NgTemplateOutlet, + NumberFormatStyle, + NumberSymbol, + PRECONNECT_CHECK_BLOCKLIST, + PathLocationStrategy, + PercentPipe, + PlatformLocation, + Plural, + SlicePipe, + TitleCasePipe, + TranslationWidth, + UpperCasePipe, + VERSION, + ViewportScroller, + WeekDay, + XhrFactory, + formatCurrency, + formatDate, + formatNumber, + formatPercent, + getCurrencySymbol, + getLocaleCurrencyCode, + getLocaleCurrencyName, + getLocaleCurrencySymbol, + getLocaleDateFormat, + getLocaleDateTimeFormat, + getLocaleDayNames, + getLocaleDayPeriods, + getLocaleDirection, + getLocaleEraNames, + getLocaleExtraDayPeriodRules, + getLocaleExtraDayPeriods, + getLocaleFirstDayOfWeek, + getLocaleId, + getLocaleMonthNames, + getLocaleNumberFormat, + getLocaleNumberSymbol, + getLocalePluralCase, + getLocaleTimeFormat, + getLocaleWeekEndRange, + getNumberOfCurrencyDigits, + isPlatformBrowser, + isPlatformServer, + provideCloudflareLoader, + provideCloudinaryLoader, + provideImageKitLoader, + provideImgixLoader, + provideNetlifyLoader, + registerLocaleData, + DomAdapter as ɵDomAdapter, + NullViewportScroller as ɵNullViewportScroller, + PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, + PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, + PlatformNavigation as ɵPlatformNavigation, + getDOM as ɵgetDOM, + normalizeQueryParams as ɵnormalizeQueryParams, + parseCookieValue as ɵparseCookieValue, + setRootDomAdapter as ɵsetRootDomAdapter +}; +//# sourceMappingURL=@angular_common.js.map diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js.map b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js new file mode 100644 index 00000000..66cfd48c --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js @@ -0,0 +1,84 @@ +import { + FetchBackend, + HTTP_INTERCEPTORS, + HTTP_ROOT_INTERCEPTOR_FNS, + HTTP_TRANSFER_CACHE_ORIGIN_MAP, + HttpBackend, + HttpClient, + HttpClientJsonpModule, + HttpClientModule, + HttpClientXsrfModule, + HttpContext, + HttpContextToken, + HttpErrorResponse, + HttpEventType, + HttpFeatureKind, + HttpHandler, + HttpHeaderResponse, + HttpHeaders, + HttpInterceptorHandler, + HttpParams, + HttpRequest, + HttpResponse, + HttpResponseBase, + HttpStatusCode, + HttpUrlEncodingCodec, + HttpXhrBackend, + HttpXsrfTokenExtractor, + JsonpClientBackend, + JsonpInterceptor, + REQUESTS_CONTRIBUTE_TO_STABILITY, + provideHttpClient, + withFetch, + withHttpTransferCache, + withInterceptors, + withInterceptorsFromDi, + withJsonpSupport, + withNoXsrfProtection, + withRequestsMadeViaParent, + withXsrfConfiguration +} from "./chunk-PYKYRQFQ.js"; +import "./chunk-RPEJTJF5.js"; +import "./chunk-6RVO5VK4.js"; +export { + FetchBackend, + HTTP_INTERCEPTORS, + HTTP_TRANSFER_CACHE_ORIGIN_MAP, + HttpBackend, + HttpClient, + HttpClientJsonpModule, + HttpClientModule, + HttpClientXsrfModule, + HttpContext, + HttpContextToken, + HttpErrorResponse, + HttpEventType, + HttpFeatureKind, + HttpHandler, + HttpHeaderResponse, + HttpHeaders, + HttpParams, + HttpRequest, + HttpResponse, + HttpResponseBase, + HttpStatusCode, + HttpUrlEncodingCodec, + HttpXhrBackend, + HttpXsrfTokenExtractor, + JsonpClientBackend, + JsonpInterceptor, + provideHttpClient, + withFetch, + withInterceptors, + withInterceptorsFromDi, + withJsonpSupport, + withNoXsrfProtection, + withRequestsMadeViaParent, + withXsrfConfiguration, + HTTP_ROOT_INTERCEPTOR_FNS as ɵHTTP_ROOT_INTERCEPTOR_FNS, + HttpInterceptorHandler as ɵHttpInterceptingHandler, + HttpInterceptorHandler as ɵHttpInterceptorHandler, + REQUESTS_CONTRIBUTE_TO_STABILITY as ɵREQUESTS_CONTRIBUTE_TO_STABILITY, + withHttpTransferCache as ɵwithHttpTransferCache +}; +//# sourceMappingURL=@angular_common_http.js.map diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js.map b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_common_http.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js new file mode 100644 index 00000000..3dd9d048 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js @@ -0,0 +1,931 @@ +import { + ALLOW_MULTIPLE_PLATFORMS, + ANIMATION_MODULE_TYPE, + APP_BOOTSTRAP_LISTENER, + APP_ID, + APP_INITIALIZER, + AfterRenderManager, + AfterRenderPhase, + ApplicationInitStatus, + ApplicationModule, + ApplicationRef, + Attribute, + COMPILER_OPTIONS, + CONTAINER_HEADER_OFFSET, + CSP_NONCE, + CUSTOM_ELEMENTS_SCHEMA, + ChangeDetectionScheduler, + ChangeDetectionSchedulerImpl, + ChangeDetectionStrategy, + ChangeDetectorRef, + Compiler, + CompilerFactory, + Component, + ComponentFactory, + ComponentFactory$1, + ComponentFactoryResolver$1, + ComponentRef, + ComponentRef$1, + Console, + ContentChild, + ContentChildren, + DEFAULT_CURRENCY_CODE, + DEFAULT_LOCALE_ID, + DEFER_BLOCK_CONFIG, + DEFER_BLOCK_DEPENDENCY_INTERCEPTOR, + DebugElement, + DebugEventListener, + DebugNode, + DefaultIterableDiffer, + DeferBlockBehavior, + DeferBlockState, + DestroyRef, + Directive, + ENVIRONMENT_INITIALIZER, + EffectScheduler, + ElementRef, + EmbeddedViewRef, + EnvironmentInjector, + ErrorHandler, + EventEmitter, + ExperimentalPendingTasks, + FactoryTarget, + HOST_TAG_NAME, + Host, + HostAttributeToken, + HostBinding, + HostListener, + IMAGE_CONFIG, + IMAGE_CONFIG_DEFAULTS, + INJECTOR$1, + INJECTOR_SCOPE, + INTERNAL_APPLICATION_ERROR_HANDLER, + IS_HYDRATION_DOM_REUSE_ENABLED, + Inject, + InjectFlags, + Injectable, + InjectionToken, + Injector, + Input, + IterableDiffers, + JSACTION_EVENT_CONTRACT, + KeyValueDiffers, + LContext, + LOCALE_ID, + LifecycleHooksFeature, + LocaleDataIndex, + MissingTranslationStrategy, + ModuleWithComponentFactories, + NG_COMP_DEF, + NG_DIR_DEF, + NG_ELEMENT_ID, + NG_INJ_DEF, + NG_MOD_DEF, + NG_PIPE_DEF, + NG_PROV_DEF, + NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, + NO_CHANGE, + NO_ERRORS_SCHEMA, + NgModule, + NgModuleFactory, + NgModuleFactory$1, + NgModuleRef, + NgModuleRef$1, + NgProbeToken, + NgZone, + NoopNgZone, + Optional, + Output, + OutputEmitterRef, + PACKAGE_ROOT_URL, + PLATFORM_ID, + PLATFORM_INITIALIZER, + PROVIDED_NG_ZONE, + PendingTasks, + Pipe, + PlatformRef, + Query, + QueryList, + ReflectionCapabilities, + Renderer2, + RendererFactory2, + RendererStyleFlags2, + RuntimeError, + SIGNAL, + SSR_CONTENT_INTEGRITY_MARKER, + Sanitizer, + SecurityContext, + Self, + SimpleChange, + SkipSelf, + TESTABILITY, + TESTABILITY_GETTER, + TRANSLATIONS, + TRANSLATIONS_FORMAT, + TemplateRef, + Testability, + TestabilityRegistry, + TransferState, + Type, + USE_RUNTIME_DEPS_TRACKER_FOR_JIT, + VERSION, + Version, + ViewChild, + ViewChildren, + ViewContainerRef, + ViewEncapsulation$1, + ViewRef, + ViewRef$1, + XSS_SECURITY_URL, + ZONELESS_ENABLED, + _global, + _sanitizeHtml, + _sanitizeUrl, + afterNextRender, + afterRender, + allowSanitizationBypassAndThrow, + annotateForHydration, + asNativeElements, + assertInInjectionContext, + assertNotInReactiveContext, + assertPlatform, + booleanAttribute, + bypassSanitizationTrustHtml, + bypassSanitizationTrustResourceUrl, + bypassSanitizationTrustScript, + bypassSanitizationTrustStyle, + bypassSanitizationTrustUrl, + clearResolutionOfComponentResourcesQueue, + compileComponent, + compileDirective, + compileNgModule, + compileNgModuleDefs, + compileNgModuleFactory, + compilePipe, + computed, + contentChild, + contentChildren, + convertToBitFlags, + createComponent, + createEnvironmentInjector, + createInjector, + createNgModule, + createNgModuleRef, + createPlatform, + createPlatformFactory, + defaultIterableDiffers, + defaultKeyValueDiffers, + defineInjectable, + depsTracker, + destroyPlatform, + detectChangesInViewIfRequired, + devModeEqual, + effect, + enableProdMode, + findLocaleData, + flushModuleScopingQueueAsMuchAsPossible, + formatRuntimeError, + forwardRef, + generateStandaloneInDeclarationsError, + getAsyncClassMetadataFn, + getDebugNode, + getDeferBlocks, + getDirectives, + getHostElement, + getInjectableDef, + getLContext, + getLocaleCurrencyCode, + getLocalePluralCase, + getModuleFactory, + getNgModuleById, + getOutputDestroyRef, + getPlatform, + getSanitizationBypassType, + importProvidersFrom, + inject, + injectChangeDetectorRef, + input, + internalCreateApplication, + internalProvideZoneChangeDetection, + isBoundToModule, + isComponentDefPendingResolution, + isDevMode, + isEnvironmentProviders, + isInjectable, + isNgModule, + isPromise, + isSignal, + isStandalone, + isSubscribable, + makeEnvironmentProviders, + makeStateKey, + mergeApplicationConfig, + model, + noSideEffects, + numberAttribute, + output, + patchComponentDefWithScope, + performanceMarkFeature, + platformCore, + provideExperimentalCheckNoChangesForDebug, + provideExperimentalZonelessChangeDetection, + provideZoneChangeDetection, + readHydrationInfo, + reflectComponentType, + registerLocaleData, + registerNgModuleType, + renderDeferBlockState, + resetCompiledComponents, + resetJitOptions, + resolveComponentResources, + resolveForwardRef, + restoreComponentResolutionQueue, + runInInjectionContext, + setAllowDuplicateNgModuleIdsForTest, + setAlternateWeakRefImpl, + setClassMetadata, + setClassMetadataAsync, + setCurrentInjector, + setDocument, + setInjectorProfilerContext, + setLocaleId, + setTestabilityGetter, + signal, + store, + stringify, + transitiveScopesFor, + triggerResourceLoading, + truncateMiddle, + unregisterAllLocaleData, + untracked, + unwrapSafeValue, + viewChild, + viewChildren, + whenStable, + withDomHydration, + withEventReplay, + withI18nSupport, + ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, + ɵgetUnknownElementStrictMode, + ɵgetUnknownPropertyStrictMode, + ɵsetClassDebugInfo, + ɵsetUnknownElementStrictMode, + ɵsetUnknownPropertyStrictMode, + ɵunwrapWritableSignal, + ɵɵCopyDefinitionFeature, + ɵɵHostDirectivesFeature, + ɵɵInheritDefinitionFeature, + ɵɵInputTransformsFeature, + ɵɵNgOnChangesFeature, + ɵɵProvidersFeature, + ɵɵStandaloneFeature, + ɵɵadvance, + ɵɵattribute, + ɵɵattributeInterpolate1, + ɵɵattributeInterpolate2, + ɵɵattributeInterpolate3, + ɵɵattributeInterpolate4, + ɵɵattributeInterpolate5, + ɵɵattributeInterpolate6, + ɵɵattributeInterpolate7, + ɵɵattributeInterpolate8, + ɵɵattributeInterpolateV, + ɵɵclassMap, + ɵɵclassMapInterpolate1, + ɵɵclassMapInterpolate2, + ɵɵclassMapInterpolate3, + ɵɵclassMapInterpolate4, + ɵɵclassMapInterpolate5, + ɵɵclassMapInterpolate6, + ɵɵclassMapInterpolate7, + ɵɵclassMapInterpolate8, + ɵɵclassMapInterpolateV, + ɵɵclassProp, + ɵɵcomponentInstance, + ɵɵconditional, + ɵɵcontentQuery, + ɵɵcontentQuerySignal, + ɵɵdeclareLet, + ɵɵdefer, + ɵɵdeferEnableTimerScheduling, + ɵɵdeferOnHover, + ɵɵdeferOnIdle, + ɵɵdeferOnImmediate, + ɵɵdeferOnInteraction, + ɵɵdeferOnTimer, + ɵɵdeferOnViewport, + ɵɵdeferPrefetchOnHover, + ɵɵdeferPrefetchOnIdle, + ɵɵdeferPrefetchOnImmediate, + ɵɵdeferPrefetchOnInteraction, + ɵɵdeferPrefetchOnTimer, + ɵɵdeferPrefetchOnViewport, + ɵɵdeferPrefetchWhen, + ɵɵdeferWhen, + ɵɵdefineComponent, + ɵɵdefineDirective, + ɵɵdefineInjectable, + ɵɵdefineInjector, + ɵɵdefineNgModule, + ɵɵdefinePipe, + ɵɵdirectiveInject, + ɵɵdisableBindings, + ɵɵelement, + ɵɵelementContainer, + ɵɵelementContainerEnd, + ɵɵelementContainerStart, + ɵɵelementEnd, + ɵɵelementStart, + ɵɵenableBindings, + ɵɵgetComponentDepsFactory, + ɵɵgetCurrentView, + ɵɵgetInheritedFactory, + ɵɵhostProperty, + ɵɵi18n, + ɵɵi18nApply, + ɵɵi18nAttributes, + ɵɵi18nEnd, + ɵɵi18nExp, + ɵɵi18nPostprocess, + ɵɵi18nStart, + ɵɵinject, + ɵɵinjectAttribute, + ɵɵinvalidFactory, + ɵɵinvalidFactoryDep, + ɵɵlistener, + ɵɵloadQuery, + ɵɵnamespaceHTML, + ɵɵnamespaceMathML, + ɵɵnamespaceSVG, + ɵɵnextContext, + ɵɵngDeclareClassMetadata, + ɵɵngDeclareClassMetadataAsync, + ɵɵngDeclareComponent, + ɵɵngDeclareDirective, + ɵɵngDeclareFactory, + ɵɵngDeclareInjectable, + ɵɵngDeclareInjector, + ɵɵngDeclareNgModule, + ɵɵngDeclarePipe, + ɵɵpipe, + ɵɵpipeBind1, + ɵɵpipeBind2, + ɵɵpipeBind3, + ɵɵpipeBind4, + ɵɵpipeBindV, + ɵɵprojection, + ɵɵprojectionDef, + ɵɵproperty, + ɵɵpropertyInterpolate, + ɵɵpropertyInterpolate1, + ɵɵpropertyInterpolate2, + ɵɵpropertyInterpolate3, + ɵɵpropertyInterpolate4, + ɵɵpropertyInterpolate5, + ɵɵpropertyInterpolate6, + ɵɵpropertyInterpolate7, + ɵɵpropertyInterpolate8, + ɵɵpropertyInterpolateV, + ɵɵpureFunction0, + ɵɵpureFunction1, + ɵɵpureFunction2, + ɵɵpureFunction3, + ɵɵpureFunction4, + ɵɵpureFunction5, + ɵɵpureFunction6, + ɵɵpureFunction7, + ɵɵpureFunction8, + ɵɵpureFunctionV, + ɵɵqueryAdvance, + ɵɵqueryRefresh, + ɵɵreadContextLet, + ɵɵreference, + ɵɵrepeater, + ɵɵrepeaterCreate, + ɵɵrepeaterTrackByIdentity, + ɵɵrepeaterTrackByIndex, + ɵɵresetView, + ɵɵresolveBody, + ɵɵresolveDocument, + ɵɵresolveWindow, + ɵɵrestoreView, + ɵɵsanitizeHtml, + ɵɵsanitizeResourceUrl, + ɵɵsanitizeScript, + ɵɵsanitizeStyle, + ɵɵsanitizeUrl, + ɵɵsanitizeUrlOrResourceUrl, + ɵɵsetComponentScope, + ɵɵsetNgModuleScope, + ɵɵstoreLet, + ɵɵstyleMap, + ɵɵstyleMapInterpolate1, + ɵɵstyleMapInterpolate2, + ɵɵstyleMapInterpolate3, + ɵɵstyleMapInterpolate4, + ɵɵstyleMapInterpolate5, + ɵɵstyleMapInterpolate6, + ɵɵstyleMapInterpolate7, + ɵɵstyleMapInterpolate8, + ɵɵstyleMapInterpolateV, + ɵɵstyleProp, + ɵɵstylePropInterpolate1, + ɵɵstylePropInterpolate2, + ɵɵstylePropInterpolate3, + ɵɵstylePropInterpolate4, + ɵɵstylePropInterpolate5, + ɵɵstylePropInterpolate6, + ɵɵstylePropInterpolate7, + ɵɵstylePropInterpolate8, + ɵɵstylePropInterpolateV, + ɵɵsyntheticHostListener, + ɵɵsyntheticHostProperty, + ɵɵtemplate, + ɵɵtemplateRefExtractor, + ɵɵtext, + ɵɵtextInterpolate, + ɵɵtextInterpolate1, + ɵɵtextInterpolate2, + ɵɵtextInterpolate3, + ɵɵtextInterpolate4, + ɵɵtextInterpolate5, + ɵɵtextInterpolate6, + ɵɵtextInterpolate7, + ɵɵtextInterpolate8, + ɵɵtextInterpolateV, + ɵɵtrustConstantHtml, + ɵɵtrustConstantResourceUrl, + ɵɵtwoWayBindingSet, + ɵɵtwoWayListener, + ɵɵtwoWayProperty, + ɵɵvalidateIframeAttribute, + ɵɵviewQuery, + ɵɵviewQuerySignal +} from "./chunk-6RVO5VK4.js"; +export { + ANIMATION_MODULE_TYPE, + APP_BOOTSTRAP_LISTENER, + APP_ID, + APP_INITIALIZER, + AfterRenderPhase, + ApplicationInitStatus, + ApplicationModule, + ApplicationRef, + Attribute, + COMPILER_OPTIONS, + CSP_NONCE, + CUSTOM_ELEMENTS_SCHEMA, + ChangeDetectionStrategy, + ChangeDetectorRef, + Compiler, + CompilerFactory, + Component, + ComponentFactory$1 as ComponentFactory, + ComponentFactoryResolver$1 as ComponentFactoryResolver, + ComponentRef$1 as ComponentRef, + ContentChild, + ContentChildren, + DEFAULT_CURRENCY_CODE, + DebugElement, + DebugEventListener, + DebugNode, + DefaultIterableDiffer, + DestroyRef, + Directive, + ENVIRONMENT_INITIALIZER, + ElementRef, + EmbeddedViewRef, + EnvironmentInjector, + ErrorHandler, + EventEmitter, + ExperimentalPendingTasks, + HOST_TAG_NAME, + Host, + HostAttributeToken, + HostBinding, + HostListener, + INJECTOR$1 as INJECTOR, + Inject, + InjectFlags, + Injectable, + InjectionToken, + Injector, + Input, + IterableDiffers, + KeyValueDiffers, + LOCALE_ID, + MissingTranslationStrategy, + ModuleWithComponentFactories, + NO_ERRORS_SCHEMA, + NgModule, + NgModuleFactory$1 as NgModuleFactory, + NgModuleRef$1 as NgModuleRef, + NgProbeToken, + NgZone, + Optional, + Output, + OutputEmitterRef, + PACKAGE_ROOT_URL, + PLATFORM_ID, + PLATFORM_INITIALIZER, + Pipe, + PlatformRef, + Query, + QueryList, + Renderer2, + RendererFactory2, + RendererStyleFlags2, + Sanitizer, + SecurityContext, + Self, + SimpleChange, + SkipSelf, + TRANSLATIONS, + TRANSLATIONS_FORMAT, + TemplateRef, + Testability, + TestabilityRegistry, + TransferState, + Type, + VERSION, + Version, + ViewChild, + ViewChildren, + ViewContainerRef, + ViewEncapsulation$1 as ViewEncapsulation, + ViewRef, + afterNextRender, + afterRender, + asNativeElements, + assertInInjectionContext, + assertNotInReactiveContext, + assertPlatform, + booleanAttribute, + computed, + contentChild, + contentChildren, + createComponent, + createEnvironmentInjector, + createNgModule, + createNgModuleRef, + createPlatform, + createPlatformFactory, + defineInjectable, + destroyPlatform, + effect, + enableProdMode, + forwardRef, + getDebugNode, + getModuleFactory, + getNgModuleById, + getPlatform, + importProvidersFrom, + inject, + input, + isDevMode, + isSignal, + isStandalone, + makeEnvironmentProviders, + makeStateKey, + mergeApplicationConfig, + model, + numberAttribute, + output, + platformCore, + provideExperimentalCheckNoChangesForDebug, + provideExperimentalZonelessChangeDetection, + provideZoneChangeDetection, + reflectComponentType, + resolveForwardRef, + runInInjectionContext, + setTestabilityGetter, + signal, + untracked, + viewChild, + viewChildren, + ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, + AfterRenderManager as ɵAfterRenderManager, + CONTAINER_HEADER_OFFSET as ɵCONTAINER_HEADER_OFFSET, + ChangeDetectionScheduler as ɵChangeDetectionScheduler, + ChangeDetectionSchedulerImpl as ɵChangeDetectionSchedulerImpl, + ComponentFactory$1 as ɵComponentFactory, + Console as ɵConsole, + DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, + DEFER_BLOCK_CONFIG as ɵDEFER_BLOCK_CONFIG, + DEFER_BLOCK_DEPENDENCY_INTERCEPTOR as ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR, + DeferBlockBehavior as ɵDeferBlockBehavior, + DeferBlockState as ɵDeferBlockState, + EffectScheduler as ɵEffectScheduler, + IMAGE_CONFIG as ɵIMAGE_CONFIG, + IMAGE_CONFIG_DEFAULTS as ɵIMAGE_CONFIG_DEFAULTS, + INJECTOR_SCOPE as ɵINJECTOR_SCOPE, + ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, + INTERNAL_APPLICATION_ERROR_HANDLER as ɵINTERNAL_APPLICATION_ERROR_HANDLER, + IS_HYDRATION_DOM_REUSE_ENABLED as ɵIS_HYDRATION_DOM_REUSE_ENABLED, + JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, + LContext as ɵLContext, + LifecycleHooksFeature as ɵLifecycleHooksFeature, + LocaleDataIndex as ɵLocaleDataIndex, + NG_COMP_DEF as ɵNG_COMP_DEF, + NG_DIR_DEF as ɵNG_DIR_DEF, + NG_ELEMENT_ID as ɵNG_ELEMENT_ID, + NG_INJ_DEF as ɵNG_INJ_DEF, + NG_MOD_DEF as ɵNG_MOD_DEF, + NG_PIPE_DEF as ɵNG_PIPE_DEF, + NG_PROV_DEF as ɵNG_PROV_DEF, + NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, + NO_CHANGE as ɵNO_CHANGE, + NgModuleFactory as ɵNgModuleFactory, + NoopNgZone as ɵNoopNgZone, + PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, + PendingTasks as ɵPendingTasks, + ReflectionCapabilities as ɵReflectionCapabilities, + ComponentFactory as ɵRender3ComponentFactory, + ComponentRef as ɵRender3ComponentRef, + NgModuleRef as ɵRender3NgModuleRef, + RuntimeError as ɵRuntimeError, + SIGNAL as ɵSIGNAL, + SSR_CONTENT_INTEGRITY_MARKER as ɵSSR_CONTENT_INTEGRITY_MARKER, + TESTABILITY as ɵTESTABILITY, + TESTABILITY_GETTER as ɵTESTABILITY_GETTER, + USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, + ViewRef$1 as ɵViewRef, + XSS_SECURITY_URL as ɵXSS_SECURITY_URL, + ZONELESS_ENABLED as ɵZONELESS_ENABLED, + _sanitizeHtml as ɵ_sanitizeHtml, + _sanitizeUrl as ɵ_sanitizeUrl, + allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, + annotateForHydration as ɵannotateForHydration, + bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, + bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, + bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, + bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, + bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, + clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, + compileComponent as ɵcompileComponent, + compileDirective as ɵcompileDirective, + compileNgModule as ɵcompileNgModule, + compileNgModuleDefs as ɵcompileNgModuleDefs, + compileNgModuleFactory as ɵcompileNgModuleFactory, + compilePipe as ɵcompilePipe, + convertToBitFlags as ɵconvertToBitFlags, + createInjector as ɵcreateInjector, + defaultIterableDiffers as ɵdefaultIterableDiffers, + defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, + depsTracker as ɵdepsTracker, + detectChangesInViewIfRequired as ɵdetectChangesInViewIfRequired, + devModeEqual as ɵdevModeEqual, + findLocaleData as ɵfindLocaleData, + flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, + formatRuntimeError as ɵformatRuntimeError, + generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, + getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, + getDebugNode as ɵgetDebugNode, + getDeferBlocks as ɵgetDeferBlocks, + getDirectives as ɵgetDirectives, + getHostElement as ɵgetHostElement, + getInjectableDef as ɵgetInjectableDef, + getLContext as ɵgetLContext, + getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, + getLocalePluralCase as ɵgetLocalePluralCase, + getOutputDestroyRef as ɵgetOutputDestroyRef, + getSanitizationBypassType as ɵgetSanitizationBypassType, + ɵgetUnknownElementStrictMode, + ɵgetUnknownPropertyStrictMode, + _global as ɵglobal, + injectChangeDetectorRef as ɵinjectChangeDetectorRef, + internalCreateApplication as ɵinternalCreateApplication, + internalProvideZoneChangeDetection as ɵinternalProvideZoneChangeDetection, + isBoundToModule as ɵisBoundToModule, + isComponentDefPendingResolution as ɵisComponentDefPendingResolution, + isEnvironmentProviders as ɵisEnvironmentProviders, + isInjectable as ɵisInjectable, + isNgModule as ɵisNgModule, + isPromise as ɵisPromise, + isSubscribable as ɵisSubscribable, + noSideEffects as ɵnoSideEffects, + patchComponentDefWithScope as ɵpatchComponentDefWithScope, + performanceMarkFeature as ɵperformanceMarkFeature, + readHydrationInfo as ɵreadHydrationInfo, + registerLocaleData as ɵregisterLocaleData, + renderDeferBlockState as ɵrenderDeferBlockState, + resetCompiledComponents as ɵresetCompiledComponents, + resetJitOptions as ɵresetJitOptions, + resolveComponentResources as ɵresolveComponentResources, + restoreComponentResolutionQueue as ɵrestoreComponentResolutionQueue, + setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, + setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, + ɵsetClassDebugInfo, + setClassMetadata as ɵsetClassMetadata, + setClassMetadataAsync as ɵsetClassMetadataAsync, + setCurrentInjector as ɵsetCurrentInjector, + setDocument as ɵsetDocument, + setInjectorProfilerContext as ɵsetInjectorProfilerContext, + setLocaleId as ɵsetLocaleId, + ɵsetUnknownElementStrictMode, + ɵsetUnknownPropertyStrictMode, + store as ɵstore, + stringify as ɵstringify, + transitiveScopesFor as ɵtransitiveScopesFor, + triggerResourceLoading as ɵtriggerResourceLoading, + truncateMiddle as ɵtruncateMiddle, + unregisterAllLocaleData as ɵunregisterLocaleData, + unwrapSafeValue as ɵunwrapSafeValue, + ɵunwrapWritableSignal, + whenStable as ɵwhenStable, + withDomHydration as ɵwithDomHydration, + withEventReplay as ɵwithEventReplay, + withI18nSupport as ɵwithI18nSupport, + ɵɵCopyDefinitionFeature, + FactoryTarget as ɵɵFactoryTarget, + ɵɵHostDirectivesFeature, + ɵɵInheritDefinitionFeature, + ɵɵInputTransformsFeature, + ɵɵNgOnChangesFeature, + ɵɵProvidersFeature, + ɵɵStandaloneFeature, + ɵɵadvance, + ɵɵattribute, + ɵɵattributeInterpolate1, + ɵɵattributeInterpolate2, + ɵɵattributeInterpolate3, + ɵɵattributeInterpolate4, + ɵɵattributeInterpolate5, + ɵɵattributeInterpolate6, + ɵɵattributeInterpolate7, + ɵɵattributeInterpolate8, + ɵɵattributeInterpolateV, + ɵɵclassMap, + ɵɵclassMapInterpolate1, + ɵɵclassMapInterpolate2, + ɵɵclassMapInterpolate3, + ɵɵclassMapInterpolate4, + ɵɵclassMapInterpolate5, + ɵɵclassMapInterpolate6, + ɵɵclassMapInterpolate7, + ɵɵclassMapInterpolate8, + ɵɵclassMapInterpolateV, + ɵɵclassProp, + ɵɵcomponentInstance, + ɵɵconditional, + ɵɵcontentQuery, + ɵɵcontentQuerySignal, + ɵɵdeclareLet, + ɵɵdefer, + ɵɵdeferEnableTimerScheduling, + ɵɵdeferOnHover, + ɵɵdeferOnIdle, + ɵɵdeferOnImmediate, + ɵɵdeferOnInteraction, + ɵɵdeferOnTimer, + ɵɵdeferOnViewport, + ɵɵdeferPrefetchOnHover, + ɵɵdeferPrefetchOnIdle, + ɵɵdeferPrefetchOnImmediate, + ɵɵdeferPrefetchOnInteraction, + ɵɵdeferPrefetchOnTimer, + ɵɵdeferPrefetchOnViewport, + ɵɵdeferPrefetchWhen, + ɵɵdeferWhen, + ɵɵdefineComponent, + ɵɵdefineDirective, + ɵɵdefineInjectable, + ɵɵdefineInjector, + ɵɵdefineNgModule, + ɵɵdefinePipe, + ɵɵdirectiveInject, + ɵɵdisableBindings, + ɵɵelement, + ɵɵelementContainer, + ɵɵelementContainerEnd, + ɵɵelementContainerStart, + ɵɵelementEnd, + ɵɵelementStart, + ɵɵenableBindings, + ɵɵgetComponentDepsFactory, + ɵɵgetCurrentView, + ɵɵgetInheritedFactory, + ɵɵhostProperty, + ɵɵi18n, + ɵɵi18nApply, + ɵɵi18nAttributes, + ɵɵi18nEnd, + ɵɵi18nExp, + ɵɵi18nPostprocess, + ɵɵi18nStart, + ɵɵinject, + ɵɵinjectAttribute, + ɵɵinvalidFactory, + ɵɵinvalidFactoryDep, + ɵɵlistener, + ɵɵloadQuery, + ɵɵnamespaceHTML, + ɵɵnamespaceMathML, + ɵɵnamespaceSVG, + ɵɵnextContext, + ɵɵngDeclareClassMetadata, + ɵɵngDeclareClassMetadataAsync, + ɵɵngDeclareComponent, + ɵɵngDeclareDirective, + ɵɵngDeclareFactory, + ɵɵngDeclareInjectable, + ɵɵngDeclareInjector, + ɵɵngDeclareNgModule, + ɵɵngDeclarePipe, + ɵɵpipe, + ɵɵpipeBind1, + ɵɵpipeBind2, + ɵɵpipeBind3, + ɵɵpipeBind4, + ɵɵpipeBindV, + ɵɵprojection, + ɵɵprojectionDef, + ɵɵproperty, + ɵɵpropertyInterpolate, + ɵɵpropertyInterpolate1, + ɵɵpropertyInterpolate2, + ɵɵpropertyInterpolate3, + ɵɵpropertyInterpolate4, + ɵɵpropertyInterpolate5, + ɵɵpropertyInterpolate6, + ɵɵpropertyInterpolate7, + ɵɵpropertyInterpolate8, + ɵɵpropertyInterpolateV, + ɵɵpureFunction0, + ɵɵpureFunction1, + ɵɵpureFunction2, + ɵɵpureFunction3, + ɵɵpureFunction4, + ɵɵpureFunction5, + ɵɵpureFunction6, + ɵɵpureFunction7, + ɵɵpureFunction8, + ɵɵpureFunctionV, + ɵɵqueryAdvance, + ɵɵqueryRefresh, + ɵɵreadContextLet, + ɵɵreference, + registerNgModuleType as ɵɵregisterNgModuleType, + ɵɵrepeater, + ɵɵrepeaterCreate, + ɵɵrepeaterTrackByIdentity, + ɵɵrepeaterTrackByIndex, + ɵɵresetView, + ɵɵresolveBody, + ɵɵresolveDocument, + ɵɵresolveWindow, + ɵɵrestoreView, + ɵɵsanitizeHtml, + ɵɵsanitizeResourceUrl, + ɵɵsanitizeScript, + ɵɵsanitizeStyle, + ɵɵsanitizeUrl, + ɵɵsanitizeUrlOrResourceUrl, + ɵɵsetComponentScope, + ɵɵsetNgModuleScope, + ɵɵstoreLet, + ɵɵstyleMap, + ɵɵstyleMapInterpolate1, + ɵɵstyleMapInterpolate2, + ɵɵstyleMapInterpolate3, + ɵɵstyleMapInterpolate4, + ɵɵstyleMapInterpolate5, + ɵɵstyleMapInterpolate6, + ɵɵstyleMapInterpolate7, + ɵɵstyleMapInterpolate8, + ɵɵstyleMapInterpolateV, + ɵɵstyleProp, + ɵɵstylePropInterpolate1, + ɵɵstylePropInterpolate2, + ɵɵstylePropInterpolate3, + ɵɵstylePropInterpolate4, + ɵɵstylePropInterpolate5, + ɵɵstylePropInterpolate6, + ɵɵstylePropInterpolate7, + ɵɵstylePropInterpolate8, + ɵɵstylePropInterpolateV, + ɵɵsyntheticHostListener, + ɵɵsyntheticHostProperty, + ɵɵtemplate, + ɵɵtemplateRefExtractor, + ɵɵtext, + ɵɵtextInterpolate, + ɵɵtextInterpolate1, + ɵɵtextInterpolate2, + ɵɵtextInterpolate3, + ɵɵtextInterpolate4, + ɵɵtextInterpolate5, + ɵɵtextInterpolate6, + ɵɵtextInterpolate7, + ɵɵtextInterpolate8, + ɵɵtextInterpolateV, + ɵɵtrustConstantHtml, + ɵɵtrustConstantResourceUrl, + ɵɵtwoWayBindingSet, + ɵɵtwoWayListener, + ɵɵtwoWayProperty, + ɵɵvalidateIframeAttribute, + ɵɵviewQuery, + ɵɵviewQuerySignal +}; +//# sourceMappingURL=@angular_core.js.map diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js.map b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_core.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js new file mode 100644 index 00000000..e1333897 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js @@ -0,0 +1,6508 @@ +import { + getDOM +} from "./chunk-RPEJTJF5.js"; +import { + ChangeDetectorRef, + Directive, + ElementRef, + EventEmitter, + Host, + Inject, + Injectable, + InjectionToken, + Injector, + Input, + NgModule, + Optional, + Output, + Renderer2, + RuntimeError, + Self, + SkipSelf, + Subject, + Version, + __spreadProps, + __spreadValues, + booleanAttribute, + computed, + forkJoin, + forwardRef, + from, + inject, + isPromise, + isSubscribable, + map, + setClassMetadata, + signal, + untracked, + ɵɵInheritDefinitionFeature, + ɵɵNgOnChangesFeature, + ɵɵProvidersFeature, + ɵɵattribute, + ɵɵclassProp, + ɵɵdefineDirective, + ɵɵdefineInjectable, + ɵɵdefineInjector, + ɵɵdefineNgModule, + ɵɵdirectiveInject, + ɵɵgetInheritedFactory, + ɵɵlistener +} from "./chunk-6RVO5VK4.js"; + +// node_modules/@angular/forms/fesm2022/forms.mjs +var BaseControlValueAccessor = class _BaseControlValueAccessor { + constructor(_renderer, _elementRef) { + this._renderer = _renderer; + this._elementRef = _elementRef; + this.onChange = (_) => { + }; + this.onTouched = () => { + }; + } + /** + * Helper method that sets a property on a target element using the current Renderer + * implementation. + * @nodoc + */ + setProperty(key, value) { + this._renderer.setProperty(this._elementRef.nativeElement, key, value); + } + /** + * Registers a function called when the control is touched. + * @nodoc + */ + registerOnTouched(fn) { + this.onTouched = fn; + } + /** + * Registers a function called when the control value changes. + * @nodoc + */ + registerOnChange(fn) { + this.onChange = fn; + } + /** + * Sets the "disabled" property on the range input element. + * @nodoc + */ + setDisabledState(isDisabled) { + this.setProperty("disabled", isDisabled); + } + static { + this.ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _BaseControlValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _BaseControlValueAccessor + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BaseControlValueAccessor, [{ + type: Directive + }], () => [{ + type: Renderer2 + }, { + type: ElementRef + }], null); +})(); +var BuiltInControlValueAccessor = class _BuiltInControlValueAccessor extends BaseControlValueAccessor { + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵBuiltInControlValueAccessor_BaseFactory; + return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵBuiltInControlValueAccessor_BaseFactory || (ɵBuiltInControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_BuiltInControlValueAccessor)))(__ngFactoryType__ || _BuiltInControlValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _BuiltInControlValueAccessor, + features: [ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BuiltInControlValueAccessor, [{ + type: Directive + }], null, null); +})(); +var NG_VALUE_ACCESSOR = new InjectionToken(ngDevMode ? "NgValueAccessor" : ""); +var CHECKBOX_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => CheckboxControlValueAccessor), + multi: true +}; +var CheckboxControlValueAccessor = class _CheckboxControlValueAccessor extends BuiltInControlValueAccessor { + /** + * Sets the "checked" property on the input element. + * @nodoc + */ + writeValue(value) { + this.setProperty("checked", value); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵCheckboxControlValueAccessor_BaseFactory; + return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵCheckboxControlValueAccessor_BaseFactory || (ɵCheckboxControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_CheckboxControlValueAccessor)))(__ngFactoryType__ || _CheckboxControlValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _CheckboxControlValueAccessor, + selectors: [["input", "type", "checkbox", "formControlName", ""], ["input", "type", "checkbox", "formControl", ""], ["input", "type", "checkbox", "ngModel", ""]], + hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("change", function CheckboxControlValueAccessor_change_HostBindingHandler($event) { + return ctx.onChange($event.target.checked); + })("blur", function CheckboxControlValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + features: [ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CheckboxControlValueAccessor, [{ + type: Directive, + args: [{ + selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]", + host: { + "(change)": "onChange($event.target.checked)", + "(blur)": "onTouched()" + }, + providers: [CHECKBOX_VALUE_ACCESSOR] + }] + }], null, null); +})(); +var DEFAULT_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => DefaultValueAccessor), + multi: true +}; +function _isAndroid() { + const userAgent = getDOM() ? getDOM().getUserAgent() : ""; + return /android (\d+)/.test(userAgent.toLowerCase()); +} +var COMPOSITION_BUFFER_MODE = new InjectionToken(ngDevMode ? "CompositionEventMode" : ""); +var DefaultValueAccessor = class _DefaultValueAccessor extends BaseControlValueAccessor { + constructor(renderer, elementRef, _compositionMode) { + super(renderer, elementRef); + this._compositionMode = _compositionMode; + this._composing = false; + if (this._compositionMode == null) { + this._compositionMode = !_isAndroid(); + } + } + /** + * Sets the "value" property on the input element. + * @nodoc + */ + writeValue(value) { + const normalizedValue = value == null ? "" : value; + this.setProperty("value", normalizedValue); + } + /** @internal */ + _handleInput(value) { + if (!this._compositionMode || this._compositionMode && !this._composing) { + this.onChange(value); + } + } + /** @internal */ + _compositionStart() { + this._composing = true; + } + /** @internal */ + _compositionEnd(value) { + this._composing = false; + this._compositionMode && this.onChange(value); + } + static { + this.ɵfac = function DefaultValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _DefaultValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(COMPOSITION_BUFFER_MODE, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _DefaultValueAccessor, + selectors: [["input", "formControlName", "", 3, "type", "checkbox"], ["textarea", "formControlName", ""], ["input", "formControl", "", 3, "type", "checkbox"], ["textarea", "formControl", ""], ["input", "ngModel", "", 3, "type", "checkbox"], ["textarea", "ngModel", ""], ["", "ngDefaultControl", ""]], + hostBindings: function DefaultValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("input", function DefaultValueAccessor_input_HostBindingHandler($event) { + return ctx._handleInput($event.target.value); + })("blur", function DefaultValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + })("compositionstart", function DefaultValueAccessor_compositionstart_HostBindingHandler() { + return ctx._compositionStart(); + })("compositionend", function DefaultValueAccessor_compositionend_HostBindingHandler($event) { + return ctx._compositionEnd($event.target.value); + }); + } + }, + features: [ɵɵProvidersFeature([DEFAULT_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(DefaultValueAccessor, [{ + type: Directive, + args: [{ + selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]", + // TODO: vsavkin replace the above selector with the one below it once + // https://github.com/angular/angular/issues/3011 is implemented + // selector: '[ngModel],[formControl],[formControlName]', + host: { + "(input)": "$any(this)._handleInput($event.target.value)", + "(blur)": "onTouched()", + "(compositionstart)": "$any(this)._compositionStart()", + "(compositionend)": "$any(this)._compositionEnd($event.target.value)" + }, + providers: [DEFAULT_VALUE_ACCESSOR] + }] + }], () => [{ + type: Renderer2 + }, { + type: ElementRef + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [COMPOSITION_BUFFER_MODE] + }] + }], null); +})(); +function isEmptyInputValue(value) { + return value == null || (typeof value === "string" || Array.isArray(value)) && value.length === 0; +} +function hasValidLength(value) { + return value != null && typeof value.length === "number"; +} +var NG_VALIDATORS = new InjectionToken(ngDevMode ? "NgValidators" : ""); +var NG_ASYNC_VALIDATORS = new InjectionToken(ngDevMode ? "NgAsyncValidators" : ""); +var 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])?)*$/; +var Validators = class { + /** + * @description + * Validator that requires the control's value to be greater than or equal to the provided number. + * + * @usageNotes + * + * ### Validate against a minimum of 3 + * + * ```typescript + * const control = new FormControl(2, Validators.min(3)); + * + * console.log(control.errors); // {min: {min: 3, actual: 2}} + * ``` + * + * @returns A validator function that returns an error map with the + * `min` property if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static min(min) { + return minValidator(min); + } + /** + * @description + * Validator that requires the control's value to be less than or equal to the provided number. + * + * @usageNotes + * + * ### Validate against a maximum of 15 + * + * ```typescript + * const control = new FormControl(16, Validators.max(15)); + * + * console.log(control.errors); // {max: {max: 15, actual: 16}} + * ``` + * + * @returns A validator function that returns an error map with the + * `max` property if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static max(max) { + return maxValidator(max); + } + /** + * @description + * Validator that requires the control have a non-empty value. + * + * @usageNotes + * + * ### Validate that the field is non-empty + * + * ```typescript + * const control = new FormControl('', Validators.required); + * + * console.log(control.errors); // {required: true} + * ``` + * + * @returns An error map with the `required` property + * if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static required(control) { + return requiredValidator(control); + } + /** + * @description + * Validator that requires the control's value be true. This validator is commonly + * used for required checkboxes. + * + * @usageNotes + * + * ### Validate that the field value is true + * + * ```typescript + * const control = new FormControl('some value', Validators.requiredTrue); + * + * console.log(control.errors); // {required: true} + * ``` + * + * @returns An error map that contains the `required` property + * set to `true` if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static requiredTrue(control) { + return requiredTrueValidator(control); + } + /** + * @description + * Validator that requires the control's value pass an email validation test. + * + * Tests the value using a [regular + * expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) + * pattern suitable for common use cases. The pattern is based on the definition of a valid email + * address in the [WHATWG HTML + * specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) with + * some enhancements to incorporate more RFC rules (such as rules related to domain names and the + * lengths of different parts of the address). + * + * The differences from the WHATWG version include: + * - Disallow `local-part` (the part before the `@` symbol) to begin or end with a period (`.`). + * - Disallow `local-part` to be longer than 64 characters. + * - Disallow the whole address to be longer than 254 characters. + * + * If this pattern does not satisfy your business needs, you can use `Validators.pattern()` to + * validate the value against a different pattern. + * + * @usageNotes + * + * ### Validate that the field matches a valid email pattern + * + * ```typescript + * const control = new FormControl('bad@', Validators.email); + * + * console.log(control.errors); // {email: true} + * ``` + * + * @returns An error map with the `email` property + * if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static email(control) { + return emailValidator(control); + } + /** + * @description + * Validator that requires the length of the control's value to be greater than or equal + * to the provided minimum length. This validator is also provided by default if you use the + * the HTML5 `minlength` attribute. Note that the `minLength` validator is intended to be used + * only for types that have a numeric `length` property, such as strings or arrays. The + * `minLength` validator logic is also not invoked for values when their `length` property is 0 + * (for example in case of an empty string or an empty array), to support optional controls. You + * can use the standard `required` validator if empty values should not be considered valid. + * + * @usageNotes + * + * ### Validate that the field has a minimum of 3 characters + * + * ```typescript + * const control = new FormControl('ng', Validators.minLength(3)); + * + * console.log(control.errors); // {minlength: {requiredLength: 3, actualLength: 2}} + * ``` + * + * ```html + * + * ``` + * + * @returns A validator function that returns an error map with the + * `minlength` property if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static minLength(minLength) { + return minLengthValidator(minLength); + } + /** + * @description + * Validator that requires the length of the control's value to be less than or equal + * to the provided maximum length. This validator is also provided by default if you use the + * the HTML5 `maxlength` attribute. Note that the `maxLength` validator is intended to be used + * only for types that have a numeric `length` property, such as strings or arrays. + * + * @usageNotes + * + * ### Validate that the field has maximum of 5 characters + * + * ```typescript + * const control = new FormControl('Angular', Validators.maxLength(5)); + * + * console.log(control.errors); // {maxlength: {requiredLength: 5, actualLength: 7}} + * ``` + * + * ```html + * + * ``` + * + * @returns A validator function that returns an error map with the + * `maxlength` property if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static maxLength(maxLength) { + return maxLengthValidator(maxLength); + } + /** + * @description + * Validator that requires the control's value to match a regex pattern. This validator is also + * provided by default if you use the HTML5 `pattern` attribute. + * + * @usageNotes + * + * ### Validate that the field only contains letters or spaces + * + * ```typescript + * const control = new FormControl('1', Validators.pattern('[a-zA-Z ]*')); + * + * console.log(control.errors); // {pattern: {requiredPattern: '^[a-zA-Z ]*$', actualValue: '1'}} + * ``` + * + * ```html + * + * ``` + * + * ### Pattern matching with the global or sticky flag + * + * `RegExp` objects created with the `g` or `y` flags that are passed into `Validators.pattern` + * can produce different results on the same input when validations are run consecutively. This is + * due to how the behavior of `RegExp.prototype.test` is + * specified in [ECMA-262](https://tc39.es/ecma262/#sec-regexpbuiltinexec) + * (`RegExp` preserves the index of the last match when the global or sticky flag is used). + * Due to this behavior, it is recommended that when using + * `Validators.pattern` you **do not** pass in a `RegExp` object with either the global or sticky + * flag enabled. + * + * ```typescript + * // Not recommended (since the `g` flag is used) + * const controlOne = new FormControl('1', Validators.pattern(/foo/g)); + * + * // Good + * const controlTwo = new FormControl('1', Validators.pattern(/foo/)); + * ``` + * + * @param pattern A regular expression to be used as is to test the values, or a string. + * If a string is passed, the `^` character is prepended and the `$` character is + * appended to the provided string (if not already present), and the resulting regular + * expression is used to test the values. + * + * @returns A validator function that returns an error map with the + * `pattern` property if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static pattern(pattern) { + return patternValidator(pattern); + } + /** + * @description + * Validator that performs no operation. + * + * @see {@link updateValueAndValidity()} + * + */ + static nullValidator(control) { + return nullValidator(control); + } + static compose(validators) { + return compose(validators); + } + /** + * @description + * Compose multiple async validators into a single function that returns the union + * of the individual error objects for the provided control. + * + * @returns A validator function that returns an error map with the + * merged error objects of the async validators if the validation check fails, otherwise `null`. + * + * @see {@link updateValueAndValidity()} + * + */ + static composeAsync(validators) { + return composeAsync(validators); + } +}; +function minValidator(min) { + return (control) => { + if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) { + return null; + } + const value = parseFloat(control.value); + return !isNaN(value) && value < min ? { + "min": { + "min": min, + "actual": control.value + } + } : null; + }; +} +function maxValidator(max) { + return (control) => { + if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) { + return null; + } + const value = parseFloat(control.value); + return !isNaN(value) && value > max ? { + "max": { + "max": max, + "actual": control.value + } + } : null; + }; +} +function requiredValidator(control) { + return isEmptyInputValue(control.value) ? { + "required": true + } : null; +} +function requiredTrueValidator(control) { + return control.value === true ? null : { + "required": true + }; +} +function emailValidator(control) { + if (isEmptyInputValue(control.value)) { + return null; + } + return EMAIL_REGEXP.test(control.value) ? null : { + "email": true + }; +} +function minLengthValidator(minLength) { + return (control) => { + if (isEmptyInputValue(control.value) || !hasValidLength(control.value)) { + return null; + } + return control.value.length < minLength ? { + "minlength": { + "requiredLength": minLength, + "actualLength": control.value.length + } + } : null; + }; +} +function maxLengthValidator(maxLength) { + return (control) => { + return hasValidLength(control.value) && control.value.length > maxLength ? { + "maxlength": { + "requiredLength": maxLength, + "actualLength": control.value.length + } + } : null; + }; +} +function patternValidator(pattern) { + if (!pattern) return nullValidator; + let regex; + let regexStr; + if (typeof pattern === "string") { + regexStr = ""; + if (pattern.charAt(0) !== "^") regexStr += "^"; + regexStr += pattern; + if (pattern.charAt(pattern.length - 1) !== "$") regexStr += "$"; + regex = new RegExp(regexStr); + } else { + regexStr = pattern.toString(); + regex = pattern; + } + return (control) => { + if (isEmptyInputValue(control.value)) { + return null; + } + const value = control.value; + return regex.test(value) ? null : { + "pattern": { + "requiredPattern": regexStr, + "actualValue": value + } + }; + }; +} +function nullValidator(control) { + return null; +} +function isPresent(o) { + return o != null; +} +function toObservable(value) { + const obs = isPromise(value) ? from(value) : value; + if ((typeof ngDevMode === "undefined" || ngDevMode) && !isSubscribable(obs)) { + let errorMessage = `Expected async validator to return Promise or Observable.`; + if (typeof value === "object") { + errorMessage += " Are you using a synchronous validator where an async validator is expected?"; + } + throw new RuntimeError(-1101, errorMessage); + } + return obs; +} +function mergeErrors(arrayOfErrors) { + let res = {}; + arrayOfErrors.forEach((errors) => { + res = errors != null ? __spreadValues(__spreadValues({}, res), errors) : res; + }); + return Object.keys(res).length === 0 ? null : res; +} +function executeValidators(control, validators) { + return validators.map((validator) => validator(control)); +} +function isValidatorFn(validator) { + return !validator.validate; +} +function normalizeValidators(validators) { + return validators.map((validator) => { + return isValidatorFn(validator) ? validator : (c) => validator.validate(c); + }); +} +function compose(validators) { + if (!validators) return null; + const presentValidators = validators.filter(isPresent); + if (presentValidators.length == 0) return null; + return function(control) { + return mergeErrors(executeValidators(control, presentValidators)); + }; +} +function composeValidators(validators) { + return validators != null ? compose(normalizeValidators(validators)) : null; +} +function composeAsync(validators) { + if (!validators) return null; + const presentValidators = validators.filter(isPresent); + if (presentValidators.length == 0) return null; + return function(control) { + const observables = executeValidators(control, presentValidators).map(toObservable); + return forkJoin(observables).pipe(map(mergeErrors)); + }; +} +function composeAsyncValidators(validators) { + return validators != null ? composeAsync(normalizeValidators(validators)) : null; +} +function mergeValidators(controlValidators, dirValidator) { + if (controlValidators === null) return [dirValidator]; + return Array.isArray(controlValidators) ? [...controlValidators, dirValidator] : [controlValidators, dirValidator]; +} +function getControlValidators(control) { + return control._rawValidators; +} +function getControlAsyncValidators(control) { + return control._rawAsyncValidators; +} +function makeValidatorsArray(validators) { + if (!validators) return []; + return Array.isArray(validators) ? validators : [validators]; +} +function hasValidator(validators, validator) { + return Array.isArray(validators) ? validators.includes(validator) : validators === validator; +} +function addValidators(validators, currentValidators) { + const current = makeValidatorsArray(currentValidators); + const validatorsToAdd = makeValidatorsArray(validators); + validatorsToAdd.forEach((v) => { + if (!hasValidator(current, v)) { + current.push(v); + } + }); + return current; +} +function removeValidators(validators, currentValidators) { + return makeValidatorsArray(currentValidators).filter((v) => !hasValidator(validators, v)); +} +var AbstractControlDirective = class { + constructor() { + this._rawValidators = []; + this._rawAsyncValidators = []; + this._onDestroyCallbacks = []; + } + /** + * @description + * Reports the value of the control if it is present, otherwise null. + */ + get value() { + return this.control ? this.control.value : null; + } + /** + * @description + * Reports whether the control is valid. A control is considered valid if no + * validation errors exist with the current value. + * If the control is not present, null is returned. + */ + get valid() { + return this.control ? this.control.valid : null; + } + /** + * @description + * Reports whether the control is invalid, meaning that an error exists in the input value. + * If the control is not present, null is returned. + */ + get invalid() { + return this.control ? this.control.invalid : null; + } + /** + * @description + * Reports whether a control is pending, meaning that async validation is occurring and + * errors are not yet available for the input value. If the control is not present, null is + * returned. + */ + get pending() { + return this.control ? this.control.pending : null; + } + /** + * @description + * Reports whether the control is disabled, meaning that the control is disabled + * in the UI and is exempt from validation checks and excluded from aggregate + * values of ancestor controls. If the control is not present, null is returned. + */ + get disabled() { + return this.control ? this.control.disabled : null; + } + /** + * @description + * Reports whether the control is enabled, meaning that the control is included in ancestor + * calculations of validity or value. If the control is not present, null is returned. + */ + get enabled() { + return this.control ? this.control.enabled : null; + } + /** + * @description + * Reports the control's validation errors. If the control is not present, null is returned. + */ + get errors() { + return this.control ? this.control.errors : null; + } + /** + * @description + * Reports whether the control is pristine, meaning that the user has not yet changed + * the value in the UI. If the control is not present, null is returned. + */ + get pristine() { + return this.control ? this.control.pristine : null; + } + /** + * @description + * Reports whether the control is dirty, meaning that the user has changed + * the value in the UI. If the control is not present, null is returned. + */ + get dirty() { + return this.control ? this.control.dirty : null; + } + /** + * @description + * Reports whether the control is touched, meaning that the user has triggered + * a `blur` event on it. If the control is not present, null is returned. + */ + get touched() { + return this.control ? this.control.touched : null; + } + /** + * @description + * Reports the validation status of the control. Possible values include: + * 'VALID', 'INVALID', 'DISABLED', and 'PENDING'. + * If the control is not present, null is returned. + */ + get status() { + return this.control ? this.control.status : null; + } + /** + * @description + * Reports whether the control is untouched, meaning that the user has not yet triggered + * a `blur` event on it. If the control is not present, null is returned. + */ + get untouched() { + return this.control ? this.control.untouched : null; + } + /** + * @description + * Returns a multicasting observable that emits a validation status whenever it is + * calculated for the control. If the control is not present, null is returned. + */ + get statusChanges() { + return this.control ? this.control.statusChanges : null; + } + /** + * @description + * Returns a multicasting observable of value changes for the control that emits every time the + * value of the control changes in the UI or programmatically. + * If the control is not present, null is returned. + */ + get valueChanges() { + return this.control ? this.control.valueChanges : null; + } + /** + * @description + * Returns an array that represents the path from the top-level form to this control. + * Each index is the string name of the control on that level. + */ + get path() { + return null; + } + /** + * Sets synchronous validators for this directive. + * @internal + */ + _setValidators(validators) { + this._rawValidators = validators || []; + this._composedValidatorFn = composeValidators(this._rawValidators); + } + /** + * Sets asynchronous validators for this directive. + * @internal + */ + _setAsyncValidators(validators) { + this._rawAsyncValidators = validators || []; + this._composedAsyncValidatorFn = composeAsyncValidators(this._rawAsyncValidators); + } + /** + * @description + * Synchronous validator function composed of all the synchronous validators registered with this + * directive. + */ + get validator() { + return this._composedValidatorFn || null; + } + /** + * @description + * Asynchronous validator function composed of all the asynchronous validators registered with + * this directive. + */ + get asyncValidator() { + return this._composedAsyncValidatorFn || null; + } + /** + * Internal function to register callbacks that should be invoked + * when directive instance is being destroyed. + * @internal + */ + _registerOnDestroy(fn) { + this._onDestroyCallbacks.push(fn); + } + /** + * Internal function to invoke all registered "on destroy" callbacks. + * Note: calling this function also clears the list of callbacks. + * @internal + */ + _invokeOnDestroyCallbacks() { + this._onDestroyCallbacks.forEach((fn) => fn()); + this._onDestroyCallbacks = []; + } + /** + * @description + * Resets the control with the provided value if the control is present. + */ + reset(value = void 0) { + if (this.control) this.control.reset(value); + } + /** + * @description + * Reports whether the control with the given path has the error specified. + * + * @param errorCode The code of the error to check + * @param path A list of control names that designates how to move from the current control + * to the control that should be queried for errors. + * + * @usageNotes + * For example, for the following `FormGroup`: + * + * ``` + * form = new FormGroup({ + * address: new FormGroup({ street: new FormControl() }) + * }); + * ``` + * + * The path to the 'street' control from the root form would be 'address' -> 'street'. + * + * It can be provided to this method in one of two formats: + * + * 1. An array of string control names, e.g. `['address', 'street']` + * 1. A period-delimited list of control names in one string, e.g. `'address.street'` + * + * If no path is given, this method checks for the error on the current control. + * + * @returns whether the given error is present in the control at the given path. + * + * If the control is not present, false is returned. + */ + hasError(errorCode, path) { + return this.control ? this.control.hasError(errorCode, path) : false; + } + /** + * @description + * Reports error data for the control with the given path. + * + * @param errorCode The code of the error to check + * @param path A list of control names that designates how to move from the current control + * to the control that should be queried for errors. + * + * @usageNotes + * For example, for the following `FormGroup`: + * + * ``` + * form = new FormGroup({ + * address: new FormGroup({ street: new FormControl() }) + * }); + * ``` + * + * The path to the 'street' control from the root form would be 'address' -> 'street'. + * + * It can be provided to this method in one of two formats: + * + * 1. An array of string control names, e.g. `['address', 'street']` + * 1. A period-delimited list of control names in one string, e.g. `'address.street'` + * + * @returns error data for that particular error. If the control or error is not present, + * null is returned. + */ + getError(errorCode, path) { + return this.control ? this.control.getError(errorCode, path) : null; + } +}; +var ControlContainer = class extends AbstractControlDirective { + /** + * @description + * The top-level form directive for the control. + */ + get formDirective() { + return null; + } + /** + * @description + * The path to this group. + */ + get path() { + return null; + } +}; +var NgControl = class extends AbstractControlDirective { + constructor() { + super(...arguments); + this._parent = null; + this.name = null; + this.valueAccessor = null; + } +}; +var AbstractControlStatus = class { + constructor(cd) { + this._cd = cd; + } + get isTouched() { + this._cd?.control?._touched?.(); + return !!this._cd?.control?.touched; + } + get isUntouched() { + return !!this._cd?.control?.untouched; + } + get isPristine() { + this._cd?.control?._pristine?.(); + return !!this._cd?.control?.pristine; + } + get isDirty() { + return !!this._cd?.control?.dirty; + } + get isValid() { + this._cd?.control?._status?.(); + return !!this._cd?.control?.valid; + } + get isInvalid() { + return !!this._cd?.control?.invalid; + } + get isPending() { + return !!this._cd?.control?.pending; + } + get isSubmitted() { + this._cd?._submitted?.(); + return !!this._cd?.submitted; + } +}; +var ngControlStatusHost = { + "[class.ng-untouched]": "isUntouched", + "[class.ng-touched]": "isTouched", + "[class.ng-pristine]": "isPristine", + "[class.ng-dirty]": "isDirty", + "[class.ng-valid]": "isValid", + "[class.ng-invalid]": "isInvalid", + "[class.ng-pending]": "isPending" +}; +var ngGroupStatusHost = __spreadProps(__spreadValues({}, ngControlStatusHost), { + "[class.ng-submitted]": "isSubmitted" +}); +var NgControlStatus = class _NgControlStatus extends AbstractControlStatus { + constructor(cd) { + super(cd); + } + static { + this.ɵfac = function NgControlStatus_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgControlStatus)(ɵɵdirectiveInject(NgControl, 2)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgControlStatus, + selectors: [["", "formControlName", ""], ["", "ngModel", ""], ["", "formControl", ""]], + hostVars: 14, + hostBindings: function NgControlStatus_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵ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); + } + }, + features: [ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgControlStatus, [{ + type: Directive, + args: [{ + selector: "[formControlName],[ngModel],[formControl]", + host: ngControlStatusHost + }] + }], () => [{ + type: NgControl, + decorators: [{ + type: Self + }] + }], null); +})(); +var NgControlStatusGroup = class _NgControlStatusGroup extends AbstractControlStatus { + constructor(cd) { + super(cd); + } + static { + this.ɵfac = function NgControlStatusGroup_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgControlStatusGroup)(ɵɵdirectiveInject(ControlContainer, 10)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgControlStatusGroup, + selectors: [["", "formGroupName", ""], ["", "formArrayName", ""], ["", "ngModelGroup", ""], ["", "formGroup", ""], ["form", 3, "ngNoForm", ""], ["", "ngForm", ""]], + hostVars: 16, + hostBindings: function NgControlStatusGroup_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵ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); + } + }, + features: [ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgControlStatusGroup, [{ + type: Directive, + args: [{ + selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]", + host: ngGroupStatusHost + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Optional + }, { + type: Self + }] + }], null); +})(); +var formControlNameExample = ` +
+ +
+ + In your class: + + this.myGroup = new FormGroup({ + firstName: new FormControl() + });`; +var formGroupNameExample = ` +
+
+ +
+
+ + In your class: + + this.myGroup = new FormGroup({ + person: new FormGroup({ firstName: new FormControl() }) + });`; +var formArrayNameExample = ` +
+
+
+ +
+
+
+ + In your class: + + this.cityArray = new FormArray([new FormControl('SF')]); + this.myGroup = new FormGroup({ + cities: this.cityArray + });`; +var ngModelGroupExample = ` +
+
+ +
+
`; +var ngModelWithFormGroupExample = ` +
+ + +
+`; +function controlParentException(nameOrIndex) { + return new RuntimeError(1050, `formControlName must be used with a parent formGroup directive. You'll want to add a formGroup + directive and pass it an existing FormGroup instance (you can create one in your class). + + ${describeFormControl(nameOrIndex)} + + Example: + + ${formControlNameExample}`); +} +function describeFormControl(nameOrIndex) { + if (nameOrIndex == null || nameOrIndex === "") { + return ""; + } + const valueType = typeof nameOrIndex === "string" ? "name" : "index"; + return `Affected Form Control ${valueType}: "${nameOrIndex}"`; +} +function ngModelGroupException() { + return new RuntimeError(1051, `formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents + that also have a "form" prefix: formGroupName, formArrayName, or formGroup. + + Option 1: Update the parent to be formGroupName (reactive form strategy) + + ${formGroupNameExample} + + Option 2: Use ngModel instead of formControlName (template-driven strategy) + + ${ngModelGroupExample}`); +} +function missingFormException() { + return new RuntimeError(1052, `formGroup expects a FormGroup instance. Please pass one in. + + Example: + + ${formControlNameExample}`); +} +function groupParentException() { + return new RuntimeError(1053, `formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup + directive and pass it an existing FormGroup instance (you can create one in your class). + + Example: + + ${formGroupNameExample}`); +} +function arrayParentException() { + return new RuntimeError(1054, `formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup + directive and pass it an existing FormGroup instance (you can create one in your class). + + Example: + + ${formArrayNameExample}`); +} +var disabledAttrWarning = ` + It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true + when you set up this control in your component class, the disabled attribute will actually be set in the DOM for + you. We recommend using this approach to avoid 'changed after checked' errors. + + Example: + // Specify the \`disabled\` property at control creation time: + form = new FormGroup({ + first: new FormControl({value: 'Nancy', disabled: true}, Validators.required), + last: new FormControl('Drew', Validators.required) + }); + + // Controls can also be enabled/disabled after creation: + form.get('first')?.enable(); + form.get('last')?.disable(); +`; +var asyncValidatorsDroppedWithOptsWarning = ` + It looks like you're constructing using a FormControl with both an options argument and an + async validators argument. Mixing these arguments will cause your async validators to be dropped. + You should either put all your validators in the options object, or in separate validators + arguments. For example: + + // Using validators arguments + fc = new FormControl(42, Validators.required, myAsyncValidator); + + // Using AbstractControlOptions + fc = new FormControl(42, {validators: Validators.required, asyncValidators: myAV}); + + // Do NOT mix them: async validators will be dropped! + fc = new FormControl(42, {validators: Validators.required}, /* Oops! */ myAsyncValidator); +`; +function ngModelWarning(directiveName) { + return ` + It looks like you're using ngModel on the same form field as ${directiveName}. + Support for using the ngModel input property and ngModelChange event with + reactive form directives has been deprecated in Angular v6 and will be removed + in a future version of Angular. + + For more information on this, see our API docs here: + https://angular.io/api/forms/${directiveName === "formControl" ? "FormControlDirective" : "FormControlName"}#use-with-ngmodel + `; +} +function describeKey(isFormGroup2, key) { + return isFormGroup2 ? `with name: '${key}'` : `at index: ${key}`; +} +function noControlsError(isFormGroup2) { + return ` + There are no form controls registered with this ${isFormGroup2 ? "group" : "array"} yet. If you're using ngModel, + you may want to check next tick (e.g. use setTimeout). + `; +} +function missingControlError(isFormGroup2, key) { + return `Cannot find form control ${describeKey(isFormGroup2, key)}`; +} +function missingControlValueError(isFormGroup2, key) { + return `Must supply a value for form control ${describeKey(isFormGroup2, key)}`; +} +var VALID = "VALID"; +var INVALID = "INVALID"; +var PENDING = "PENDING"; +var DISABLED = "DISABLED"; +var ControlEvent = class { +}; +var ValueChangeEvent = class extends ControlEvent { + constructor(value, source) { + super(); + this.value = value; + this.source = source; + } +}; +var PristineChangeEvent = class extends ControlEvent { + constructor(pristine, source) { + super(); + this.pristine = pristine; + this.source = source; + } +}; +var TouchedChangeEvent = class extends ControlEvent { + constructor(touched, source) { + super(); + this.touched = touched; + this.source = source; + } +}; +var StatusChangeEvent = class extends ControlEvent { + constructor(status, source) { + super(); + this.status = status; + this.source = source; + } +}; +var FormSubmittedEvent = class extends ControlEvent { + constructor(source) { + super(); + this.source = source; + } +}; +var FormResetEvent = class extends ControlEvent { + constructor(source) { + super(); + this.source = source; + } +}; +function pickValidators(validatorOrOpts) { + return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts) || null; +} +function coerceToValidator(validator) { + return Array.isArray(validator) ? composeValidators(validator) : validator || null; +} +function pickAsyncValidators(asyncValidator, validatorOrOpts) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + if (isOptionsObj(validatorOrOpts) && asyncValidator) { + console.warn(asyncValidatorsDroppedWithOptsWarning); + } + } + return (isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator) || null; +} +function coerceToAsyncValidator(asyncValidator) { + return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) : asyncValidator || null; +} +function isOptionsObj(validatorOrOpts) { + return validatorOrOpts != null && !Array.isArray(validatorOrOpts) && typeof validatorOrOpts === "object"; +} +function assertControlPresent(parent, isGroup, key) { + const controls = parent.controls; + const collection = isGroup ? Object.keys(controls) : controls; + if (!collection.length) { + throw new RuntimeError(1e3, typeof ngDevMode === "undefined" || ngDevMode ? noControlsError(isGroup) : ""); + } + if (!controls[key]) { + throw new RuntimeError(1001, typeof ngDevMode === "undefined" || ngDevMode ? missingControlError(isGroup, key) : ""); + } +} +function assertAllValuesPresent(control, isGroup, value) { + control._forEachChild((_, key) => { + if (value[key] === void 0) { + throw new RuntimeError(1002, typeof ngDevMode === "undefined" || ngDevMode ? missingControlValueError(isGroup, key) : ""); + } + }); +} +var AbstractControl = class { + /** + * Initialize the AbstractControl instance. + * + * @param validators The function or array of functions that is used to determine the validity of + * this control synchronously. + * @param asyncValidators The function or array of functions that is used to determine validity of + * this control asynchronously. + */ + constructor(validators, asyncValidators) { + this._pendingDirty = false; + this._hasOwnPendingAsyncValidator = null; + this._pendingTouched = false; + this._onCollectionChange = () => { + }; + this._parent = null; + this._status = computed(() => this.statusReactive()); + this.statusReactive = signal(void 0); + this._pristine = computed(() => this.pristineReactive()); + this.pristineReactive = signal(true); + this._touched = computed(() => this.touchedReactive()); + this.touchedReactive = signal(false); + this._events = new Subject(); + this.events = this._events.asObservable(); + this._onDisabledChange = []; + this._assignValidators(validators); + this._assignAsyncValidators(asyncValidators); + } + /** + * Returns the function that is used to determine the validity of this control synchronously. + * If multiple validators have been added, this will be a single composed function. + * See `Validators.compose()` for additional information. + */ + get validator() { + return this._composedValidatorFn; + } + set validator(validatorFn) { + this._rawValidators = this._composedValidatorFn = validatorFn; + } + /** + * Returns the function that is used to determine the validity of this control asynchronously. + * If multiple validators have been added, this will be a single composed function. + * See `Validators.compose()` for additional information. + */ + get asyncValidator() { + return this._composedAsyncValidatorFn; + } + set asyncValidator(asyncValidatorFn) { + this._rawAsyncValidators = this._composedAsyncValidatorFn = asyncValidatorFn; + } + /** + * The parent control. + */ + get parent() { + return this._parent; + } + /** + * The validation status of the control. + * + * @see {@link FormControlStatus} + * + * These status values are mutually exclusive, so a control cannot be + * both valid AND invalid or invalid AND disabled. + */ + get status() { + return untracked(this.statusReactive); + } + set status(v) { + untracked(() => this.statusReactive.set(v)); + } + /** + * A control is `valid` when its `status` is `VALID`. + * + * @see {@link AbstractControl.status} + * + * @returns True if the control has passed all of its validation tests, + * false otherwise. + */ + get valid() { + return this.status === VALID; + } + /** + * A control is `invalid` when its `status` is `INVALID`. + * + * @see {@link AbstractControl.status} + * + * @returns True if this control has failed one or more of its validation checks, + * false otherwise. + */ + get invalid() { + return this.status === INVALID; + } + /** + * A control is `pending` when its `status` is `PENDING`. + * + * @see {@link AbstractControl.status} + * + * @returns True if this control is in the process of conducting a validation check, + * false otherwise. + */ + get pending() { + return this.status == PENDING; + } + /** + * A control is `disabled` when its `status` is `DISABLED`. + * + * Disabled controls are exempt from validation checks and + * are not included in the aggregate value of their ancestor + * controls. + * + * @see {@link AbstractControl.status} + * + * @returns True if the control is disabled, false otherwise. + */ + get disabled() { + return this.status === DISABLED; + } + /** + * A control is `enabled` as long as its `status` is not `DISABLED`. + * + * @returns True if the control has any status other than 'DISABLED', + * false if the status is 'DISABLED'. + * + * @see {@link AbstractControl.status} + * + */ + get enabled() { + return this.status !== DISABLED; + } + /** + * A control is `pristine` if the user has not yet changed + * the value in the UI. + * + * @returns True if the user has not yet changed the value in the UI; compare `dirty`. + * Programmatic changes to a control's value do not mark it dirty. + */ + get pristine() { + return untracked(this.pristineReactive); + } + set pristine(v) { + untracked(() => this.pristineReactive.set(v)); + } + /** + * A control is `dirty` if the user has changed the value + * in the UI. + * + * @returns True if the user has changed the value of this control in the UI; compare `pristine`. + * Programmatic changes to a control's value do not mark it dirty. + */ + get dirty() { + return !this.pristine; + } + /** + * True if the control is marked as `touched`. + * + * A control is marked `touched` once the user has triggered + * a `blur` event on it. + */ + get touched() { + return untracked(this.touchedReactive); + } + set touched(v) { + untracked(() => this.touchedReactive.set(v)); + } + /** + * True if the control has not been marked as touched + * + * A control is `untouched` if the user has not yet triggered + * a `blur` event on it. + */ + get untouched() { + return !this.touched; + } + /** + * Reports the update strategy of the `AbstractControl` (meaning + * the event on which the control updates itself). + * Possible values: `'change'` | `'blur'` | `'submit'` + * Default value: `'change'` + */ + get updateOn() { + return this._updateOn ? this._updateOn : this.parent ? this.parent.updateOn : "change"; + } + /** + * Sets the synchronous validators that are active on this control. Calling + * this overwrites any existing synchronous validators. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * If you want to add a new validator without affecting existing ones, consider + * using `addValidators()` method instead. + */ + setValidators(validators) { + this._assignValidators(validators); + } + /** + * Sets the asynchronous validators that are active on this control. Calling this + * overwrites any existing asynchronous validators. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * If you want to add a new validator without affecting existing ones, consider + * using `addAsyncValidators()` method instead. + */ + setAsyncValidators(validators) { + this._assignAsyncValidators(validators); + } + /** + * Add a synchronous validator or validators to this control, without affecting other validators. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * Adding a validator that already exists will have no effect. If duplicate validator functions + * are present in the `validators` array, only the first instance would be added to a form + * control. + * + * @param validators The new validator function or functions to add to this control. + */ + addValidators(validators) { + this.setValidators(addValidators(validators, this._rawValidators)); + } + /** + * Add an asynchronous validator or validators to this control, without affecting other + * validators. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * Adding a validator that already exists will have no effect. + * + * @param validators The new asynchronous validator function or functions to add to this control. + */ + addAsyncValidators(validators) { + this.setAsyncValidators(addValidators(validators, this._rawAsyncValidators)); + } + /** + * Remove a synchronous validator from this control, without affecting other validators. + * Validators are compared by function reference; you must pass a reference to the exact same + * validator function as the one that was originally set. If a provided validator is not found, + * it is ignored. + * + * @usageNotes + * + * ### Reference to a ValidatorFn + * + * ``` + * // Reference to the RequiredValidator + * const ctrl = new FormControl('', Validators.required); + * ctrl.removeValidators(Validators.required); + * + * // Reference to anonymous function inside MinValidator + * const minValidator = Validators.min(3); + * const ctrl = new FormControl('', minValidator); + * expect(ctrl.hasValidator(minValidator)).toEqual(true) + * expect(ctrl.hasValidator(Validators.min(3))).toEqual(false) + * + * ctrl.removeValidators(minValidator); + * ``` + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * @param validators The validator or validators to remove. + */ + removeValidators(validators) { + this.setValidators(removeValidators(validators, this._rawValidators)); + } + /** + * Remove an asynchronous validator from this control, without affecting other validators. + * Validators are compared by function reference; you must pass a reference to the exact same + * validator function as the one that was originally set. If a provided validator is not found, it + * is ignored. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + * @param validators The asynchronous validator or validators to remove. + */ + removeAsyncValidators(validators) { + this.setAsyncValidators(removeValidators(validators, this._rawAsyncValidators)); + } + /** + * Check whether a synchronous validator function is present on this control. The provided + * validator must be a reference to the exact same function that was provided. + * + * @usageNotes + * + * ### Reference to a ValidatorFn + * + * ``` + * // Reference to the RequiredValidator + * const ctrl = new FormControl(0, Validators.required); + * expect(ctrl.hasValidator(Validators.required)).toEqual(true) + * + * // Reference to anonymous function inside MinValidator + * const minValidator = Validators.min(3); + * const ctrl = new FormControl(0, minValidator); + * expect(ctrl.hasValidator(minValidator)).toEqual(true) + * expect(ctrl.hasValidator(Validators.min(3))).toEqual(false) + * ``` + * + * @param validator The validator to check for presence. Compared by function reference. + * @returns Whether the provided validator was found on this control. + */ + hasValidator(validator) { + return hasValidator(this._rawValidators, validator); + } + /** + * Check whether an asynchronous validator function is present on this control. The provided + * validator must be a reference to the exact same function that was provided. + * + * @param validator The asynchronous validator to check for presence. Compared by function + * reference. + * @returns Whether the provided asynchronous validator was found on this control. + */ + hasAsyncValidator(validator) { + return hasValidator(this._rawAsyncValidators, validator); + } + /** + * Empties out the synchronous validator list. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + */ + clearValidators() { + this.validator = null; + } + /** + * Empties out the async validator list. + * + * When you add or remove a validator at run time, you must call + * `updateValueAndValidity()` for the new validation to take effect. + * + */ + clearAsyncValidators() { + this.asyncValidator = null; + } + markAsTouched(opts = {}) { + const changed = this.touched === false; + this.touched = true; + const sourceControl = opts.sourceControl ?? this; + if (this._parent && !opts.onlySelf) { + this._parent.markAsTouched(__spreadProps(__spreadValues({}, opts), { + sourceControl + })); + } + if (changed && opts.emitEvent !== false) { + this._events.next(new TouchedChangeEvent(true, sourceControl)); + } + } + /** + * Marks the control and all its descendant controls as `touched`. + * @see {@link markAsTouched()} + * + * @param opts Configuration options that determine how the control propagates changes + * and emits events after marking is applied. + * * `emitEvent`: When true or not supplied (the default), the `events` + * observable emits a `TouchedChangeEvent` with the `touched` property being `true`. + * When false, no events are emitted. + */ + markAllAsTouched(opts = {}) { + this.markAsTouched({ + onlySelf: true, + emitEvent: opts.emitEvent, + sourceControl: this + }); + this._forEachChild((control) => control.markAllAsTouched(opts)); + } + markAsUntouched(opts = {}) { + const changed = this.touched === true; + this.touched = false; + this._pendingTouched = false; + const sourceControl = opts.sourceControl ?? this; + this._forEachChild((control) => { + control.markAsUntouched({ + onlySelf: true, + emitEvent: opts.emitEvent, + sourceControl + }); + }); + if (this._parent && !opts.onlySelf) { + this._parent._updateTouched(opts, sourceControl); + } + if (changed && opts.emitEvent !== false) { + this._events.next(new TouchedChangeEvent(false, sourceControl)); + } + } + markAsDirty(opts = {}) { + const changed = this.pristine === true; + this.pristine = false; + const sourceControl = opts.sourceControl ?? this; + if (this._parent && !opts.onlySelf) { + this._parent.markAsDirty(__spreadProps(__spreadValues({}, opts), { + sourceControl + })); + } + if (changed && opts.emitEvent !== false) { + this._events.next(new PristineChangeEvent(false, sourceControl)); + } + } + markAsPristine(opts = {}) { + const changed = this.pristine === false; + this.pristine = true; + this._pendingDirty = false; + const sourceControl = opts.sourceControl ?? this; + this._forEachChild((control) => { + control.markAsPristine({ + onlySelf: true, + emitEvent: opts.emitEvent + }); + }); + if (this._parent && !opts.onlySelf) { + this._parent._updatePristine(opts, sourceControl); + } + if (changed && opts.emitEvent !== false) { + this._events.next(new PristineChangeEvent(true, sourceControl)); + } + } + markAsPending(opts = {}) { + this.status = PENDING; + const sourceControl = opts.sourceControl ?? this; + if (opts.emitEvent !== false) { + this._events.next(new StatusChangeEvent(this.status, sourceControl)); + this.statusChanges.emit(this.status); + } + if (this._parent && !opts.onlySelf) { + this._parent.markAsPending(__spreadProps(__spreadValues({}, opts), { + sourceControl + })); + } + } + disable(opts = {}) { + const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf); + this.status = DISABLED; + this.errors = null; + this._forEachChild((control) => { + control.disable(__spreadProps(__spreadValues({}, opts), { + onlySelf: true + })); + }); + this._updateValue(); + const sourceControl = opts.sourceControl ?? this; + if (opts.emitEvent !== false) { + this._events.next(new ValueChangeEvent(this.value, sourceControl)); + this._events.next(new StatusChangeEvent(this.status, sourceControl)); + this.valueChanges.emit(this.value); + this.statusChanges.emit(this.status); + } + this._updateAncestors(__spreadProps(__spreadValues({}, opts), { + skipPristineCheck + }), this); + this._onDisabledChange.forEach((changeFn) => changeFn(true)); + } + /** + * Enables the control. This means the control is included in validation checks and + * the aggregate value of its parent. Its status recalculates based on its value and + * its validators. + * + * By default, if the control has children, all children are enabled. + * + * @see {@link AbstractControl.status} + * + * @param opts Configure options that control how the control propagates changes and + * emits events when marked as untouched + * * `onlySelf`: When true, mark only this control. When false or not supplied, + * marks all direct ancestors. Default is false. + * * `emitEvent`: When true or not supplied (the default), the `statusChanges`, + * `valueChanges` and `events` + * observables emit events with the latest status and value when the control is enabled. + * When false, no events are emitted. + */ + enable(opts = {}) { + const skipPristineCheck = this._parentMarkedDirty(opts.onlySelf); + this.status = VALID; + this._forEachChild((control) => { + control.enable(__spreadProps(__spreadValues({}, opts), { + onlySelf: true + })); + }); + this.updateValueAndValidity({ + onlySelf: true, + emitEvent: opts.emitEvent + }); + this._updateAncestors(__spreadProps(__spreadValues({}, opts), { + skipPristineCheck + }), this); + this._onDisabledChange.forEach((changeFn) => changeFn(false)); + } + _updateAncestors(opts, sourceControl) { + if (this._parent && !opts.onlySelf) { + this._parent.updateValueAndValidity(opts); + if (!opts.skipPristineCheck) { + this._parent._updatePristine({}, sourceControl); + } + this._parent._updateTouched({}, sourceControl); + } + } + /** + * Sets the parent of the control + * + * @param parent The new parent. + */ + setParent(parent) { + this._parent = parent; + } + /** + * The raw value of this control. For most control implementations, the raw value will include + * disabled children. + */ + getRawValue() { + return this.value; + } + updateValueAndValidity(opts = {}) { + this._setInitialStatus(); + this._updateValue(); + if (this.enabled) { + const shouldHaveEmitted = this._cancelExistingSubscription(); + this.errors = this._runValidator(); + this.status = this._calculateStatus(); + if (this.status === VALID || this.status === PENDING) { + this._runAsyncValidator(shouldHaveEmitted, opts.emitEvent); + } + } + const sourceControl = opts.sourceControl ?? this; + if (opts.emitEvent !== false) { + this._events.next(new ValueChangeEvent(this.value, sourceControl)); + this._events.next(new StatusChangeEvent(this.status, sourceControl)); + this.valueChanges.emit(this.value); + this.statusChanges.emit(this.status); + } + if (this._parent && !opts.onlySelf) { + this._parent.updateValueAndValidity(__spreadProps(__spreadValues({}, opts), { + sourceControl + })); + } + } + /** @internal */ + _updateTreeValidity(opts = { + emitEvent: true + }) { + this._forEachChild((ctrl) => ctrl._updateTreeValidity(opts)); + this.updateValueAndValidity({ + onlySelf: true, + emitEvent: opts.emitEvent + }); + } + _setInitialStatus() { + this.status = this._allControlsDisabled() ? DISABLED : VALID; + } + _runValidator() { + return this.validator ? this.validator(this) : null; + } + _runAsyncValidator(shouldHaveEmitted, emitEvent) { + if (this.asyncValidator) { + this.status = PENDING; + this._hasOwnPendingAsyncValidator = { + emitEvent: emitEvent !== false + }; + const obs = toObservable(this.asyncValidator(this)); + this._asyncValidationSubscription = obs.subscribe((errors) => { + this._hasOwnPendingAsyncValidator = null; + this.setErrors(errors, { + emitEvent, + shouldHaveEmitted + }); + }); + } + } + _cancelExistingSubscription() { + if (this._asyncValidationSubscription) { + this._asyncValidationSubscription.unsubscribe(); + const shouldHaveEmitted = this._hasOwnPendingAsyncValidator?.emitEvent ?? false; + this._hasOwnPendingAsyncValidator = null; + return shouldHaveEmitted; + } + return false; + } + setErrors(errors, opts = {}) { + this.errors = errors; + this._updateControlsErrors(opts.emitEvent !== false, this, opts.shouldHaveEmitted); + } + /** + * Retrieves a child control given the control's name or path. + * + * @param path A dot-delimited string or array of string/number values that define the path to the + * control. If a string is provided, passing it as a string literal will result in improved type + * information. Likewise, if an array is provided, passing it `as const` will cause improved type + * information to be available. + * + * @usageNotes + * ### Retrieve a nested control + * + * For example, to get a `name` control nested within a `person` sub-group: + * + * * `this.form.get('person.name');` + * + * -OR- + * + * * `this.form.get(['person', 'name'] as const);` // `as const` gives improved typings + * + * ### Retrieve a control in a FormArray + * + * When accessing an element inside a FormArray, you can use an element index. + * For example, to get a `price` control from the first element in an `items` array you can use: + * + * * `this.form.get('items.0.price');` + * + * -OR- + * + * * `this.form.get(['items', 0, 'price']);` + */ + get(path) { + let currPath = path; + if (currPath == null) return null; + if (!Array.isArray(currPath)) currPath = currPath.split("."); + if (currPath.length === 0) return null; + return currPath.reduce((control, name) => control && control._find(name), this); + } + /** + * @description + * Reports error data for the control with the given path. + * + * @param errorCode The code of the error to check + * @param path A list of control names that designates how to move from the current control + * to the control that should be queried for errors. + * + * @usageNotes + * For example, for the following `FormGroup`: + * + * ``` + * form = new FormGroup({ + * address: new FormGroup({ street: new FormControl() }) + * }); + * ``` + * + * The path to the 'street' control from the root form would be 'address' -> 'street'. + * + * It can be provided to this method in one of two formats: + * + * 1. An array of string control names, e.g. `['address', 'street']` + * 1. A period-delimited list of control names in one string, e.g. `'address.street'` + * + * @returns error data for that particular error. If the control or error is not present, + * null is returned. + */ + getError(errorCode, path) { + const control = path ? this.get(path) : this; + return control && control.errors ? control.errors[errorCode] : null; + } + /** + * @description + * Reports whether the control with the given path has the error specified. + * + * @param errorCode The code of the error to check + * @param path A list of control names that designates how to move from the current control + * to the control that should be queried for errors. + * + * @usageNotes + * For example, for the following `FormGroup`: + * + * ``` + * form = new FormGroup({ + * address: new FormGroup({ street: new FormControl() }) + * }); + * ``` + * + * The path to the 'street' control from the root form would be 'address' -> 'street'. + * + * It can be provided to this method in one of two formats: + * + * 1. An array of string control names, e.g. `['address', 'street']` + * 1. A period-delimited list of control names in one string, e.g. `'address.street'` + * + * If no path is given, this method checks for the error on the current control. + * + * @returns whether the given error is present in the control at the given path. + * + * If the control is not present, false is returned. + */ + hasError(errorCode, path) { + return !!this.getError(errorCode, path); + } + /** + * Retrieves the top-level ancestor of this control. + */ + get root() { + let x = this; + while (x._parent) { + x = x._parent; + } + return x; + } + /** @internal */ + _updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted) { + this.status = this._calculateStatus(); + if (emitEvent) { + this.statusChanges.emit(this.status); + } + if (emitEvent || shouldHaveEmitted) { + this._events.next(new StatusChangeEvent(this.status, changedControl)); + } + if (this._parent) { + this._parent._updateControlsErrors(emitEvent, changedControl, shouldHaveEmitted); + } + } + /** @internal */ + _initObservables() { + this.valueChanges = new EventEmitter(); + this.statusChanges = new EventEmitter(); + } + _calculateStatus() { + if (this._allControlsDisabled()) return DISABLED; + if (this.errors) return INVALID; + if (this._hasOwnPendingAsyncValidator || this._anyControlsHaveStatus(PENDING)) return PENDING; + if (this._anyControlsHaveStatus(INVALID)) return INVALID; + return VALID; + } + /** @internal */ + _anyControlsHaveStatus(status) { + return this._anyControls((control) => control.status === status); + } + /** @internal */ + _anyControlsDirty() { + return this._anyControls((control) => control.dirty); + } + /** @internal */ + _anyControlsTouched() { + return this._anyControls((control) => control.touched); + } + /** @internal */ + _updatePristine(opts, changedControl) { + const newPristine = !this._anyControlsDirty(); + const changed = this.pristine !== newPristine; + this.pristine = newPristine; + if (this._parent && !opts.onlySelf) { + this._parent._updatePristine(opts, changedControl); + } + if (changed) { + this._events.next(new PristineChangeEvent(this.pristine, changedControl)); + } + } + /** @internal */ + _updateTouched(opts = {}, changedControl) { + this.touched = this._anyControlsTouched(); + this._events.next(new TouchedChangeEvent(this.touched, changedControl)); + if (this._parent && !opts.onlySelf) { + this._parent._updateTouched(opts, changedControl); + } + } + /** @internal */ + _registerOnCollectionChange(fn) { + this._onCollectionChange = fn; + } + /** @internal */ + _setUpdateStrategy(opts) { + if (isOptionsObj(opts) && opts.updateOn != null) { + this._updateOn = opts.updateOn; + } + } + /** + * Check to see if parent has been marked artificially dirty. + * + * @internal + */ + _parentMarkedDirty(onlySelf) { + const parentDirty = this._parent && this._parent.dirty; + return !onlySelf && !!parentDirty && !this._parent._anyControlsDirty(); + } + /** @internal */ + _find(name) { + return null; + } + /** + * Internal implementation of the `setValidators` method. Needs to be separated out into a + * different method, because it is called in the constructor and it can break cases where + * a control is extended. + */ + _assignValidators(validators) { + this._rawValidators = Array.isArray(validators) ? validators.slice() : validators; + this._composedValidatorFn = coerceToValidator(this._rawValidators); + } + /** + * Internal implementation of the `setAsyncValidators` method. Needs to be separated out into a + * different method, because it is called in the constructor and it can break cases where + * a control is extended. + */ + _assignAsyncValidators(validators) { + this._rawAsyncValidators = Array.isArray(validators) ? validators.slice() : validators; + this._composedAsyncValidatorFn = coerceToAsyncValidator(this._rawAsyncValidators); + } +}; +var FormGroup = class extends AbstractControl { + /** + * Creates a new `FormGroup` instance. + * + * @param controls A collection of child controls. The key for each child is the name + * under which it is registered. + * + * @param validatorOrOpts A synchronous validator function, or an array of + * such functions, or an `AbstractControlOptions` object that contains validation functions + * and a validation trigger. + * + * @param asyncValidator A single async validator or array of async validator functions + * + */ + constructor(controls, validatorOrOpts, asyncValidator) { + super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts)); + (typeof ngDevMode === "undefined" || ngDevMode) && validateFormGroupControls(controls); + this.controls = controls; + this._initObservables(); + this._setUpdateStrategy(validatorOrOpts); + this._setUpControls(); + this.updateValueAndValidity({ + onlySelf: true, + // If `asyncValidator` is present, it will trigger control status change from `PENDING` to + // `VALID` or `INVALID`. The status should be broadcasted via the `statusChanges` observable, + // so we set `emitEvent` to `true` to allow that during the control creation process. + emitEvent: !!this.asyncValidator + }); + } + registerControl(name, control) { + if (this.controls[name]) return this.controls[name]; + this.controls[name] = control; + control.setParent(this); + control._registerOnCollectionChange(this._onCollectionChange); + return control; + } + addControl(name, control, options = {}) { + this.registerControl(name, control); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + this._onCollectionChange(); + } + /** + * Remove a control from this group. In a strongly-typed group, required controls cannot be + * removed. + * + * This method also updates the value and validity of the control. + * + * @param name The control name to remove from the collection + * @param options Specifies whether this FormGroup instance should emit events after a + * control is removed. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control is + * removed. When false, no events are emitted. + */ + removeControl(name, options = {}) { + if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => { + }); + delete this.controls[name]; + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + this._onCollectionChange(); + } + setControl(name, control, options = {}) { + if (this.controls[name]) this.controls[name]._registerOnCollectionChange(() => { + }); + delete this.controls[name]; + if (control) this.registerControl(name, control); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + this._onCollectionChange(); + } + contains(controlName) { + return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled; + } + /** + * Sets the value of the `FormGroup`. It accepts an object that matches + * the structure of the group, with control names as keys. + * + * @usageNotes + * ### Set the complete value for the form group + * + * ``` + * const form = new FormGroup({ + * first: new FormControl(), + * last: new FormControl() + * }); + * + * console.log(form.value); // {first: null, last: null} + * + * form.setValue({first: 'Nancy', last: 'Drew'}); + * console.log(form.value); // {first: 'Nancy', last: 'Drew'} + * ``` + * + * @throws When strict checks fail, such as setting the value of a control + * that doesn't exist or if you exclude a value of a control that does exist. + * + * @param value The new value for the control that matches the structure of the group. + * @param options Configuration options that determine how the control propagates changes + * and emits events after the value changes. + * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity + * updateValueAndValidity} method. + * + * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is + * false. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` + * observables emit events with the latest status and value when the control value is updated. + * When false, no events are emitted. + */ + setValue(value, options = {}) { + assertAllValuesPresent(this, true, value); + Object.keys(value).forEach((name) => { + assertControlPresent(this, true, name); + this.controls[name].setValue(value[name], { + onlySelf: true, + emitEvent: options.emitEvent + }); + }); + this.updateValueAndValidity(options); + } + /** + * Patches the value of the `FormGroup`. It accepts an object with control + * names as keys, and does its best to match the values to the correct controls + * in the group. + * + * It accepts both super-sets and sub-sets of the group without throwing an error. + * + * @usageNotes + * ### Patch the value for a form group + * + * ``` + * const form = new FormGroup({ + * first: new FormControl(), + * last: new FormControl() + * }); + * console.log(form.value); // {first: null, last: null} + * + * form.patchValue({first: 'Nancy'}); + * console.log(form.value); // {first: 'Nancy', last: null} + * ``` + * + * @param value The object that matches the structure of the group. + * @param options Configuration options that determine how the control propagates changes and + * emits events after the value is patched. + * * `onlySelf`: When true, each change only affects this control and not its parent. Default is + * true. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control value + * is updated. When false, no events are emitted. The configuration options are passed to + * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method. + */ + patchValue(value, options = {}) { + if (value == null) return; + Object.keys(value).forEach((name) => { + const control = this.controls[name]; + if (control) { + control.patchValue( + /* Guaranteed to be present, due to the outer forEach. */ + value[name], + { + onlySelf: true, + emitEvent: options.emitEvent + } + ); + } + }); + this.updateValueAndValidity(options); + } + /** + * Resets the `FormGroup`, marks all descendants `pristine` and `untouched` and sets + * the value of all descendants to their default values, or null if no defaults were provided. + * + * You reset to a specific form state by passing in a map of states + * that matches the structure of your form, with control names as keys. The state + * is a standalone value or a form state object with both a value and a disabled + * status. + * + * @param value Resets the control with an initial value, + * or an object that defines the initial value and disabled state. + * + * @param options Configuration options that determine how the control propagates changes + * and emits events when the group is reset. + * * `onlySelf`: When true, each change only affects this control, and not its parent. Default is + * false. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` + * observables emit events with the latest status and value when the control is reset. + * When false, no events are emitted. + * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity + * updateValueAndValidity} method. + * + * @usageNotes + * + * ### Reset the form group values + * + * ```ts + * const form = new FormGroup({ + * first: new FormControl('first name'), + * last: new FormControl('last name') + * }); + * + * console.log(form.value); // {first: 'first name', last: 'last name'} + * + * form.reset({ first: 'name', last: 'last name' }); + * + * console.log(form.value); // {first: 'name', last: 'last name'} + * ``` + * + * ### Reset the form group values and disabled status + * + * ``` + * const form = new FormGroup({ + * first: new FormControl('first name'), + * last: new FormControl('last name') + * }); + * + * form.reset({ + * first: {value: 'name', disabled: true}, + * last: 'last' + * }); + * + * console.log(form.value); // {last: 'last'} + * console.log(form.get('first').status); // 'DISABLED' + * ``` + */ + reset(value = {}, options = {}) { + this._forEachChild((control, name) => { + control.reset(value ? value[name] : null, { + onlySelf: true, + emitEvent: options.emitEvent + }); + }); + this._updatePristine(options, this); + this._updateTouched(options, this); + this.updateValueAndValidity(options); + } + /** + * The aggregate value of the `FormGroup`, including any disabled controls. + * + * Retrieves all values regardless of disabled status. + */ + getRawValue() { + return this._reduceChildren({}, (acc, control, name) => { + acc[name] = control.getRawValue(); + return acc; + }); + } + /** @internal */ + _syncPendingControls() { + let subtreeUpdated = this._reduceChildren(false, (updated, child) => { + return child._syncPendingControls() ? true : updated; + }); + if (subtreeUpdated) this.updateValueAndValidity({ + onlySelf: true + }); + return subtreeUpdated; + } + /** @internal */ + _forEachChild(cb) { + Object.keys(this.controls).forEach((key) => { + const control = this.controls[key]; + control && cb(control, key); + }); + } + /** @internal */ + _setUpControls() { + this._forEachChild((control) => { + control.setParent(this); + control._registerOnCollectionChange(this._onCollectionChange); + }); + } + /** @internal */ + _updateValue() { + this.value = this._reduceValue(); + } + /** @internal */ + _anyControls(condition) { + for (const [controlName, control] of Object.entries(this.controls)) { + if (this.contains(controlName) && condition(control)) { + return true; + } + } + return false; + } + /** @internal */ + _reduceValue() { + let acc = {}; + return this._reduceChildren(acc, (acc2, control, name) => { + if (control.enabled || this.disabled) { + acc2[name] = control.value; + } + return acc2; + }); + } + /** @internal */ + _reduceChildren(initValue, fn) { + let res = initValue; + this._forEachChild((control, name) => { + res = fn(res, control, name); + }); + return res; + } + /** @internal */ + _allControlsDisabled() { + for (const controlName of Object.keys(this.controls)) { + if (this.controls[controlName].enabled) { + return false; + } + } + return Object.keys(this.controls).length > 0 || this.disabled; + } + /** @internal */ + _find(name) { + return this.controls.hasOwnProperty(name) ? this.controls[name] : null; + } +}; +function validateFormGroupControls(controls) { + const invalidKeys = Object.keys(controls).filter((key) => key.includes(".")); + if (invalidKeys.length > 0) { + console.warn(`FormGroup keys cannot include \`.\`, please replace the keys for: ${invalidKeys.join(",")}.`); + } +} +var UntypedFormGroup = FormGroup; +var isFormGroup = (control) => control instanceof FormGroup; +var FormRecord = class extends FormGroup { +}; +var isFormRecord = (control) => control instanceof FormRecord; +var CALL_SET_DISABLED_STATE = new InjectionToken("CallSetDisabledState", { + providedIn: "root", + factory: () => setDisabledStateDefault +}); +var setDisabledStateDefault = "always"; +function controlPath(name, parent) { + return [...parent.path, name]; +} +function setUpControl(control, dir, callSetDisabledState = setDisabledStateDefault) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + if (!control) _throwError(dir, "Cannot find control with"); + if (!dir.valueAccessor) _throwMissingValueAccessorError(dir); + } + setUpValidators(control, dir); + dir.valueAccessor.writeValue(control.value); + if (control.disabled || callSetDisabledState === "always") { + dir.valueAccessor.setDisabledState?.(control.disabled); + } + setUpViewChangePipeline(control, dir); + setUpModelChangePipeline(control, dir); + setUpBlurPipeline(control, dir); + setUpDisabledChangeHandler(control, dir); +} +function cleanUpControl(control, dir, validateControlPresenceOnChange = true) { + const noop = () => { + if (validateControlPresenceOnChange && (typeof ngDevMode === "undefined" || ngDevMode)) { + _noControlError(dir); + } + }; + if (dir.valueAccessor) { + dir.valueAccessor.registerOnChange(noop); + dir.valueAccessor.registerOnTouched(noop); + } + cleanUpValidators(control, dir); + if (control) { + dir._invokeOnDestroyCallbacks(); + control._registerOnCollectionChange(() => { + }); + } +} +function registerOnValidatorChange(validators, onChange) { + validators.forEach((validator) => { + if (validator.registerOnValidatorChange) validator.registerOnValidatorChange(onChange); + }); +} +function setUpDisabledChangeHandler(control, dir) { + if (dir.valueAccessor.setDisabledState) { + const onDisabledChange = (isDisabled) => { + dir.valueAccessor.setDisabledState(isDisabled); + }; + control.registerOnDisabledChange(onDisabledChange); + dir._registerOnDestroy(() => { + control._unregisterOnDisabledChange(onDisabledChange); + }); + } +} +function setUpValidators(control, dir) { + const validators = getControlValidators(control); + if (dir.validator !== null) { + control.setValidators(mergeValidators(validators, dir.validator)); + } else if (typeof validators === "function") { + control.setValidators([validators]); + } + const asyncValidators = getControlAsyncValidators(control); + if (dir.asyncValidator !== null) { + control.setAsyncValidators(mergeValidators(asyncValidators, dir.asyncValidator)); + } else if (typeof asyncValidators === "function") { + control.setAsyncValidators([asyncValidators]); + } + const onValidatorChange = () => control.updateValueAndValidity(); + registerOnValidatorChange(dir._rawValidators, onValidatorChange); + registerOnValidatorChange(dir._rawAsyncValidators, onValidatorChange); +} +function cleanUpValidators(control, dir) { + let isControlUpdated = false; + if (control !== null) { + if (dir.validator !== null) { + const validators = getControlValidators(control); + if (Array.isArray(validators) && validators.length > 0) { + const updatedValidators = validators.filter((validator) => validator !== dir.validator); + if (updatedValidators.length !== validators.length) { + isControlUpdated = true; + control.setValidators(updatedValidators); + } + } + } + if (dir.asyncValidator !== null) { + const asyncValidators = getControlAsyncValidators(control); + if (Array.isArray(asyncValidators) && asyncValidators.length > 0) { + const updatedAsyncValidators = asyncValidators.filter((asyncValidator) => asyncValidator !== dir.asyncValidator); + if (updatedAsyncValidators.length !== asyncValidators.length) { + isControlUpdated = true; + control.setAsyncValidators(updatedAsyncValidators); + } + } + } + } + const noop = () => { + }; + registerOnValidatorChange(dir._rawValidators, noop); + registerOnValidatorChange(dir._rawAsyncValidators, noop); + return isControlUpdated; +} +function setUpViewChangePipeline(control, dir) { + dir.valueAccessor.registerOnChange((newValue) => { + control._pendingValue = newValue; + control._pendingChange = true; + control._pendingDirty = true; + if (control.updateOn === "change") updateControl(control, dir); + }); +} +function setUpBlurPipeline(control, dir) { + dir.valueAccessor.registerOnTouched(() => { + control._pendingTouched = true; + if (control.updateOn === "blur" && control._pendingChange) updateControl(control, dir); + if (control.updateOn !== "submit") control.markAsTouched(); + }); +} +function updateControl(control, dir) { + if (control._pendingDirty) control.markAsDirty(); + control.setValue(control._pendingValue, { + emitModelToViewChange: false + }); + dir.viewToModelUpdate(control._pendingValue); + control._pendingChange = false; +} +function setUpModelChangePipeline(control, dir) { + const onChange = (newValue, emitModelEvent) => { + dir.valueAccessor.writeValue(newValue); + if (emitModelEvent) dir.viewToModelUpdate(newValue); + }; + control.registerOnChange(onChange); + dir._registerOnDestroy(() => { + control._unregisterOnChange(onChange); + }); +} +function setUpFormContainer(control, dir) { + if (control == null && (typeof ngDevMode === "undefined" || ngDevMode)) _throwError(dir, "Cannot find control with"); + setUpValidators(control, dir); +} +function cleanUpFormContainer(control, dir) { + return cleanUpValidators(control, dir); +} +function _noControlError(dir) { + return _throwError(dir, "There is no FormControl instance attached to form control element with"); +} +function _throwError(dir, message) { + const messageEnd = _describeControlLocation(dir); + throw new Error(`${message} ${messageEnd}`); +} +function _describeControlLocation(dir) { + const path = dir.path; + if (path && path.length > 1) return `path: '${path.join(" -> ")}'`; + if (path?.[0]) return `name: '${path}'`; + return "unspecified name attribute"; +} +function _throwMissingValueAccessorError(dir) { + const loc = _describeControlLocation(dir); + throw new RuntimeError(-1203, `No value accessor for form control ${loc}.`); +} +function _throwInvalidValueAccessorError(dir) { + const loc = _describeControlLocation(dir); + throw new RuntimeError(1200, `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.`); +} +function isPropertyUpdated(changes, viewModel) { + if (!changes.hasOwnProperty("model")) return false; + const change = changes["model"]; + if (change.isFirstChange()) return true; + return !Object.is(viewModel, change.currentValue); +} +function isBuiltInAccessor(valueAccessor) { + return Object.getPrototypeOf(valueAccessor.constructor) === BuiltInControlValueAccessor; +} +function syncPendingControls(form, directives) { + form._syncPendingControls(); + directives.forEach((dir) => { + const control = dir.control; + if (control.updateOn === "submit" && control._pendingChange) { + dir.viewToModelUpdate(control._pendingValue); + control._pendingChange = false; + } + }); +} +function selectValueAccessor(dir, valueAccessors) { + if (!valueAccessors) return null; + if (!Array.isArray(valueAccessors) && (typeof ngDevMode === "undefined" || ngDevMode)) _throwInvalidValueAccessorError(dir); + let defaultAccessor = void 0; + let builtinAccessor = void 0; + let customAccessor = void 0; + valueAccessors.forEach((v) => { + if (v.constructor === DefaultValueAccessor) { + defaultAccessor = v; + } else if (isBuiltInAccessor(v)) { + if (builtinAccessor && (typeof ngDevMode === "undefined" || ngDevMode)) _throwError(dir, "More than one built-in value accessor matches form control with"); + builtinAccessor = v; + } else { + if (customAccessor && (typeof ngDevMode === "undefined" || ngDevMode)) _throwError(dir, "More than one custom value accessor matches form control with"); + customAccessor = v; + } + }); + if (customAccessor) return customAccessor; + if (builtinAccessor) return builtinAccessor; + if (defaultAccessor) return defaultAccessor; + if (typeof ngDevMode === "undefined" || ngDevMode) { + _throwError(dir, "No valid value accessor for form control with"); + } + return null; +} +function removeListItem$1(list, el) { + const index = list.indexOf(el); + if (index > -1) list.splice(index, 1); +} +function _ngModelWarning(name, type, instance, warningConfig) { + if (warningConfig === "never") return; + if ((warningConfig === null || warningConfig === "once") && !type._ngModelWarningSentOnce || warningConfig === "always" && !instance._ngModelWarningSent) { + console.warn(ngModelWarning(name)); + type._ngModelWarningSentOnce = true; + instance._ngModelWarningSent = true; + } +} +var formDirectiveProvider$1 = { + provide: ControlContainer, + useExisting: forwardRef(() => NgForm) +}; +var resolvedPromise$1 = (() => Promise.resolve())(); +var NgForm = class _NgForm extends ControlContainer { + /** + * @description + * Returns whether the form submission has been triggered. + */ + get submitted() { + return untracked(this.submittedReactive); + } + constructor(validators, asyncValidators, callSetDisabledState) { + super(); + this.callSetDisabledState = callSetDisabledState; + this._submitted = computed(() => this.submittedReactive()); + this.submittedReactive = signal(false); + this._directives = /* @__PURE__ */ new Set(); + this.ngSubmit = new EventEmitter(); + this.form = new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators)); + } + /** @nodoc */ + ngAfterViewInit() { + this._setUpdateStrategy(); + } + /** + * @description + * The directive instance. + */ + get formDirective() { + return this; + } + /** + * @description + * The internal `FormGroup` instance. + */ + get control() { + return this.form; + } + /** + * @description + * Returns an array representing the path to this group. Because this directive + * always lives at the top level of a form, it is always an empty array. + */ + get path() { + return []; + } + /** + * @description + * Returns a map of the controls in this group. + */ + get controls() { + return this.form.controls; + } + /** + * @description + * Method that sets up the control directive in this group, re-calculates its value + * and validity, and adds the instance to the internal list of directives. + * + * @param dir The `NgModel` directive instance. + */ + addControl(dir) { + resolvedPromise$1.then(() => { + const container = this._findContainer(dir.path); + dir.control = container.registerControl(dir.name, dir.control); + setUpControl(dir.control, dir, this.callSetDisabledState); + dir.control.updateValueAndValidity({ + emitEvent: false + }); + this._directives.add(dir); + }); + } + /** + * @description + * Retrieves the `FormControl` instance from the provided `NgModel` directive. + * + * @param dir The `NgModel` directive instance. + */ + getControl(dir) { + return this.form.get(dir.path); + } + /** + * @description + * Removes the `NgModel` instance from the internal list of directives + * + * @param dir The `NgModel` directive instance. + */ + removeControl(dir) { + resolvedPromise$1.then(() => { + const container = this._findContainer(dir.path); + if (container) { + container.removeControl(dir.name); + } + this._directives.delete(dir); + }); + } + /** + * @description + * Adds a new `NgModelGroup` directive instance to the form. + * + * @param dir The `NgModelGroup` directive instance. + */ + addFormGroup(dir) { + resolvedPromise$1.then(() => { + const container = this._findContainer(dir.path); + const group = new FormGroup({}); + setUpFormContainer(group, dir); + container.registerControl(dir.name, group); + group.updateValueAndValidity({ + emitEvent: false + }); + }); + } + /** + * @description + * Removes the `NgModelGroup` directive instance from the form. + * + * @param dir The `NgModelGroup` directive instance. + */ + removeFormGroup(dir) { + resolvedPromise$1.then(() => { + const container = this._findContainer(dir.path); + if (container) { + container.removeControl(dir.name); + } + }); + } + /** + * @description + * Retrieves the `FormGroup` for a provided `NgModelGroup` directive instance + * + * @param dir The `NgModelGroup` directive instance. + */ + getFormGroup(dir) { + return this.form.get(dir.path); + } + /** + * Sets the new value for the provided `NgControl` directive. + * + * @param dir The `NgControl` directive instance. + * @param value The new value for the directive's control. + */ + updateModel(dir, value) { + resolvedPromise$1.then(() => { + const ctrl = this.form.get(dir.path); + ctrl.setValue(value); + }); + } + /** + * @description + * Sets the value for this `FormGroup`. + * + * @param value The new value + */ + setValue(value) { + this.control.setValue(value); + } + /** + * @description + * Method called when the "submit" event is triggered on the form. + * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload. + * + * @param $event The "submit" event object + */ + onSubmit($event) { + this.submittedReactive.set(true); + syncPendingControls(this.form, this._directives); + this.ngSubmit.emit($event); + return $event?.target?.method === "dialog"; + } + /** + * @description + * Method called when the "reset" event is triggered on the form. + */ + onReset() { + this.resetForm(); + } + /** + * @description + * Resets the form to an initial value and resets its submitted status. + * + * @param value The new value for the form. + */ + resetForm(value = void 0) { + this.form.reset(value); + this.submittedReactive.set(false); + } + _setUpdateStrategy() { + if (this.options && this.options.updateOn != null) { + this.form._updateOn = this.options.updateOn; + } + } + _findContainer(path) { + path.pop(); + return path.length ? this.form.get(path) : this.form; + } + static { + this.ɵfac = function NgForm_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgForm)(ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgForm, + selectors: [["form", 3, "ngNoForm", "", 3, "formGroup", ""], ["ng-form"], ["", "ngForm", ""]], + hostBindings: function NgForm_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("submit", function NgForm_submit_HostBindingHandler($event) { + return ctx.onSubmit($event); + })("reset", function NgForm_reset_HostBindingHandler() { + return ctx.onReset(); + }); + } + }, + inputs: { + options: [0, "ngFormOptions", "options"] + }, + outputs: { + ngSubmit: "ngSubmit" + }, + exportAs: ["ngForm"], + features: [ɵɵProvidersFeature([formDirectiveProvider$1]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgForm, [{ + type: Directive, + args: [{ + selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", + providers: [formDirectiveProvider$1], + host: { + "(submit)": "onSubmit($event)", + "(reset)": "onReset()" + }, + outputs: ["ngSubmit"], + exportAs: "ngForm" + }] + }], () => [{ + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [CALL_SET_DISABLED_STATE] + }] + }], { + options: [{ + type: Input, + args: ["ngFormOptions"] + }] + }); +})(); +function removeListItem(list, el) { + const index = list.indexOf(el); + if (index > -1) list.splice(index, 1); +} +function isFormControlState(formState) { + return typeof formState === "object" && formState !== null && Object.keys(formState).length === 2 && "value" in formState && "disabled" in formState; +} +var FormControl = class FormControl2 extends AbstractControl { + constructor(formState = null, validatorOrOpts, asyncValidator) { + super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts)); + this.defaultValue = null; + this._onChange = []; + this._pendingChange = false; + this._applyFormState(formState); + this._setUpdateStrategy(validatorOrOpts); + this._initObservables(); + this.updateValueAndValidity({ + onlySelf: true, + // If `asyncValidator` is present, it will trigger control status change from `PENDING` to + // `VALID` or `INVALID`. + // The status should be broadcasted via the `statusChanges` observable, so we set + // `emitEvent` to `true` to allow that during the control creation process. + emitEvent: !!this.asyncValidator + }); + if (isOptionsObj(validatorOrOpts) && (validatorOrOpts.nonNullable || validatorOrOpts.initialValueIsDefault)) { + if (isFormControlState(formState)) { + this.defaultValue = formState.value; + } else { + this.defaultValue = formState; + } + } + } + setValue(value, options = {}) { + this.value = this._pendingValue = value; + if (this._onChange.length && options.emitModelToViewChange !== false) { + this._onChange.forEach((changeFn) => changeFn(this.value, options.emitViewToModelChange !== false)); + } + this.updateValueAndValidity(options); + } + patchValue(value, options = {}) { + this.setValue(value, options); + } + reset(formState = this.defaultValue, options = {}) { + this._applyFormState(formState); + this.markAsPristine(options); + this.markAsUntouched(options); + this.setValue(this.value, options); + this._pendingChange = false; + } + /** @internal */ + _updateValue() { + } + /** @internal */ + _anyControls(condition) { + return false; + } + /** @internal */ + _allControlsDisabled() { + return this.disabled; + } + registerOnChange(fn) { + this._onChange.push(fn); + } + /** @internal */ + _unregisterOnChange(fn) { + removeListItem(this._onChange, fn); + } + registerOnDisabledChange(fn) { + this._onDisabledChange.push(fn); + } + /** @internal */ + _unregisterOnDisabledChange(fn) { + removeListItem(this._onDisabledChange, fn); + } + /** @internal */ + _forEachChild(cb) { + } + /** @internal */ + _syncPendingControls() { + if (this.updateOn === "submit") { + if (this._pendingDirty) this.markAsDirty(); + if (this._pendingTouched) this.markAsTouched(); + if (this._pendingChange) { + this.setValue(this._pendingValue, { + onlySelf: true, + emitModelToViewChange: false + }); + return true; + } + } + return false; + } + _applyFormState(formState) { + if (isFormControlState(formState)) { + this.value = this._pendingValue = formState.value; + formState.disabled ? this.disable({ + onlySelf: true, + emitEvent: false + }) : this.enable({ + onlySelf: true, + emitEvent: false + }); + } else { + this.value = this._pendingValue = formState; + } + } +}; +var UntypedFormControl = FormControl; +var isFormControl = (control) => control instanceof FormControl; +var AbstractFormGroupDirective = class _AbstractFormGroupDirective extends ControlContainer { + /** @nodoc */ + ngOnInit() { + this._checkParentType(); + this.formDirective.addFormGroup(this); + } + /** @nodoc */ + ngOnDestroy() { + if (this.formDirective) { + this.formDirective.removeFormGroup(this); + } + } + /** + * @description + * The `FormGroup` bound to this directive. + */ + get control() { + return this.formDirective.getFormGroup(this); + } + /** + * @description + * The path to this group from the top-level directive. + */ + get path() { + return controlPath(this.name == null ? this.name : this.name.toString(), this._parent); + } + /** + * @description + * The top-level directive for this group if present, otherwise null. + */ + get formDirective() { + return this._parent ? this._parent.formDirective : null; + } + /** @internal */ + _checkParentType() { + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵAbstractFormGroupDirective_BaseFactory; + return function AbstractFormGroupDirective_Factory(__ngFactoryType__) { + return (ɵAbstractFormGroupDirective_BaseFactory || (ɵAbstractFormGroupDirective_BaseFactory = ɵɵgetInheritedFactory(_AbstractFormGroupDirective)))(__ngFactoryType__ || _AbstractFormGroupDirective); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _AbstractFormGroupDirective, + features: [ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AbstractFormGroupDirective, [{ + type: Directive + }], null, null); +})(); +function modelParentException() { + return new RuntimeError(1350, ` + ngModel cannot be used to register form controls with a parent formGroup directive. Try using + formGroup's partner directive "formControlName" instead. Example: + + ${formControlNameExample} + + Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions: + + Example: + + ${ngModelWithFormGroupExample}`); +} +function formGroupNameException() { + return new RuntimeError(1351, ` + ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive. + + Option 1: Use formControlName instead of ngModel (reactive strategy): + + ${formGroupNameExample} + + Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy): + + ${ngModelGroupExample}`); +} +function missingNameException() { + return new RuntimeError(1352, `If ngModel is used within a form tag, either the name attribute must be set or the form + control must be defined as 'standalone' in ngModelOptions. + + Example 1: + Example 2: `); +} +function modelGroupParentException() { + return new RuntimeError(1353, ` + ngModelGroup cannot be used with a parent formGroup directive. + + Option 1: Use formGroupName instead of ngModelGroup (reactive strategy): + + ${formGroupNameExample} + + Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy): + + ${ngModelGroupExample}`); +} +var modelGroupProvider = { + provide: ControlContainer, + useExisting: forwardRef(() => NgModelGroup) +}; +var NgModelGroup = class _NgModelGroup extends AbstractFormGroupDirective { + constructor(parent, validators, asyncValidators) { + super(); + this.name = ""; + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + } + /** @internal */ + _checkParentType() { + if (!(this._parent instanceof _NgModelGroup) && !(this._parent instanceof NgForm) && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw modelGroupParentException(); + } + } + static { + this.ɵfac = function NgModelGroup_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgModelGroup)(ɵɵdirectiveInject(ControlContainer, 5), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgModelGroup, + selectors: [["", "ngModelGroup", ""]], + inputs: { + name: [0, "ngModelGroup", "name"] + }, + exportAs: ["ngModelGroup"], + features: [ɵɵProvidersFeature([modelGroupProvider]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgModelGroup, [{ + type: Directive, + args: [{ + selector: "[ngModelGroup]", + providers: [modelGroupProvider], + exportAs: "ngModelGroup" + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Host + }, { + type: SkipSelf + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }], { + name: [{ + type: Input, + args: ["ngModelGroup"] + }] + }); +})(); +var formControlBinding$1 = { + provide: NgControl, + useExisting: forwardRef(() => NgModel) +}; +var resolvedPromise = (() => Promise.resolve())(); +var NgModel = class _NgModel extends NgControl { + constructor(parent, validators, asyncValidators, valueAccessors, _changeDetectorRef, callSetDisabledState) { + super(); + this._changeDetectorRef = _changeDetectorRef; + this.callSetDisabledState = callSetDisabledState; + this.control = new FormControl(); + this._registered = false; + this.name = ""; + this.update = new EventEmitter(); + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + this.valueAccessor = selectValueAccessor(this, valueAccessors); + } + /** @nodoc */ + ngOnChanges(changes) { + this._checkForErrors(); + if (!this._registered || "name" in changes) { + if (this._registered) { + this._checkName(); + if (this.formDirective) { + const oldName = changes["name"].previousValue; + this.formDirective.removeControl({ + name: oldName, + path: this._getPath(oldName) + }); + } + } + this._setUpControl(); + } + if ("isDisabled" in changes) { + this._updateDisabled(changes); + } + if (isPropertyUpdated(changes, this.viewModel)) { + this._updateValue(this.model); + this.viewModel = this.model; + } + } + /** @nodoc */ + ngOnDestroy() { + this.formDirective && this.formDirective.removeControl(this); + } + /** + * @description + * Returns an array that represents the path from the top-level form to this control. + * Each index is the string name of the control on that level. + */ + get path() { + return this._getPath(this.name); + } + /** + * @description + * The top-level directive for this control if present, otherwise null. + */ + get formDirective() { + return this._parent ? this._parent.formDirective : null; + } + /** + * @description + * Sets the new value for the view model and emits an `ngModelChange` event. + * + * @param newValue The new value emitted by `ngModelChange`. + */ + viewToModelUpdate(newValue) { + this.viewModel = newValue; + this.update.emit(newValue); + } + _setUpControl() { + this._setUpdateStrategy(); + this._isStandalone() ? this._setUpStandalone() : this.formDirective.addControl(this); + this._registered = true; + } + _setUpdateStrategy() { + if (this.options && this.options.updateOn != null) { + this.control._updateOn = this.options.updateOn; + } + } + _isStandalone() { + return !this._parent || !!(this.options && this.options.standalone); + } + _setUpStandalone() { + setUpControl(this.control, this, this.callSetDisabledState); + this.control.updateValueAndValidity({ + emitEvent: false + }); + } + _checkForErrors() { + if (!this._isStandalone()) { + this._checkParentType(); + } + this._checkName(); + } + _checkParentType() { + if (typeof ngDevMode === "undefined" || ngDevMode) { + if (!(this._parent instanceof NgModelGroup) && this._parent instanceof AbstractFormGroupDirective) { + throw formGroupNameException(); + } else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) { + throw modelParentException(); + } + } + } + _checkName() { + if (this.options && this.options.name) this.name = this.options.name; + if (!this._isStandalone() && !this.name && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw missingNameException(); + } + } + _updateValue(value) { + resolvedPromise.then(() => { + this.control.setValue(value, { + emitViewToModelChange: false + }); + this._changeDetectorRef?.markForCheck(); + }); + } + _updateDisabled(changes) { + const disabledValue = changes["isDisabled"].currentValue; + const isDisabled = disabledValue !== 0 && booleanAttribute(disabledValue); + resolvedPromise.then(() => { + if (isDisabled && !this.control.disabled) { + this.control.disable(); + } else if (!isDisabled && this.control.disabled) { + this.control.enable(); + } + this._changeDetectorRef?.markForCheck(); + }); + } + _getPath(controlName) { + return this._parent ? controlPath(controlName, this._parent) : [controlName]; + } + static { + this.ɵfac = function NgModel_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgModel)(ɵɵdirectiveInject(ControlContainer, 9), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), ɵɵdirectiveInject(ChangeDetectorRef, 8), ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgModel, + selectors: [["", "ngModel", "", 3, "formControlName", "", 3, "formControl", ""]], + inputs: { + name: "name", + isDisabled: [0, "disabled", "isDisabled"], + model: [0, "ngModel", "model"], + options: [0, "ngModelOptions", "options"] + }, + outputs: { + update: "ngModelChange" + }, + exportAs: ["ngModel"], + features: [ɵɵProvidersFeature([formControlBinding$1]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgModel, [{ + type: Directive, + args: [{ + selector: "[ngModel]:not([formControlName]):not([formControl])", + providers: [formControlBinding$1], + exportAs: "ngModel" + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Optional + }, { + type: Host + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALUE_ACCESSOR] + }] + }, { + type: ChangeDetectorRef, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [ChangeDetectorRef] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [CALL_SET_DISABLED_STATE] + }] + }], { + name: [{ + type: Input + }], + isDisabled: [{ + type: Input, + args: ["disabled"] + }], + model: [{ + type: Input, + args: ["ngModel"] + }], + options: [{ + type: Input, + args: ["ngModelOptions"] + }], + update: [{ + type: Output, + args: ["ngModelChange"] + }] + }); +})(); +var ɵNgNoValidate = class _ɵNgNoValidate { + static { + this.ɵfac = function ɵNgNoValidate_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵNgNoValidate)(); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _ɵNgNoValidate, + selectors: [["form", 3, "ngNoForm", "", 3, "ngNativeValidate", ""]], + hostAttrs: ["novalidate", ""] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵNgNoValidate, [{ + type: Directive, + args: [{ + selector: "form:not([ngNoForm]):not([ngNativeValidate])", + host: { + "novalidate": "" + } + }] + }], null, null); +})(); +var NUMBER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => NumberValueAccessor), + multi: true +}; +var NumberValueAccessor = class _NumberValueAccessor extends BuiltInControlValueAccessor { + /** + * Sets the "value" property on the input element. + * @nodoc + */ + writeValue(value) { + const normalizedValue = value == null ? "" : value; + this.setProperty("value", normalizedValue); + } + /** + * Registers a function called when the control value changes. + * @nodoc + */ + registerOnChange(fn) { + this.onChange = (value) => { + fn(value == "" ? null : parseFloat(value)); + }; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵNumberValueAccessor_BaseFactory; + return function NumberValueAccessor_Factory(__ngFactoryType__) { + return (ɵNumberValueAccessor_BaseFactory || (ɵNumberValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_NumberValueAccessor)))(__ngFactoryType__ || _NumberValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NumberValueAccessor, + selectors: [["input", "type", "number", "formControlName", ""], ["input", "type", "number", "formControl", ""], ["input", "type", "number", "ngModel", ""]], + hostBindings: function NumberValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("input", function NumberValueAccessor_input_HostBindingHandler($event) { + return ctx.onChange($event.target.value); + })("blur", function NumberValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + features: [ɵɵProvidersFeature([NUMBER_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NumberValueAccessor, [{ + type: Directive, + args: [{ + selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]", + host: { + "(input)": "onChange($event.target.value)", + "(blur)": "onTouched()" + }, + providers: [NUMBER_VALUE_ACCESSOR] + }] + }], null, null); +})(); +var RADIO_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => RadioControlValueAccessor), + multi: true +}; +function throwNameError() { + throw new RuntimeError(1202, ` + If you define both a name and a formControlName attribute on your radio button, their values + must match. Ex: + `); +} +var RadioControlRegistry = class _RadioControlRegistry { + constructor() { + this._accessors = []; + } + /** + * @description + * Adds a control to the internal registry. For internal use only. + */ + add(control, accessor) { + this._accessors.push([control, accessor]); + } + /** + * @description + * Removes a control from the internal registry. For internal use only. + */ + remove(accessor) { + for (let i = this._accessors.length - 1; i >= 0; --i) { + if (this._accessors[i][1] === accessor) { + this._accessors.splice(i, 1); + return; + } + } + } + /** + * @description + * Selects a radio button. For internal use only. + */ + select(accessor) { + this._accessors.forEach((c) => { + if (this._isSameGroup(c, accessor) && c[1] !== accessor) { + c[1].fireUncheck(accessor.value); + } + }); + } + _isSameGroup(controlPair, accessor) { + if (!controlPair[0].control) return false; + return controlPair[0]._parent === accessor._control._parent && controlPair[1].name === accessor.name; + } + static { + this.ɵfac = function RadioControlRegistry_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _RadioControlRegistry)(); + }; + } + static { + this.ɵprov = ɵɵdefineInjectable({ + token: _RadioControlRegistry, + factory: _RadioControlRegistry.ɵfac, + providedIn: "root" + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RadioControlRegistry, [{ + type: Injectable, + args: [{ + providedIn: "root" + }] + }], null, null); +})(); +var RadioControlValueAccessor = class _RadioControlValueAccessor extends BuiltInControlValueAccessor { + constructor(renderer, elementRef, _registry, _injector) { + super(renderer, elementRef); + this._registry = _registry; + this._injector = _injector; + this.setDisabledStateFired = false; + this.onChange = () => { + }; + this.callSetDisabledState = inject(CALL_SET_DISABLED_STATE, { + optional: true + }) ?? setDisabledStateDefault; + } + /** @nodoc */ + ngOnInit() { + this._control = this._injector.get(NgControl); + this._checkName(); + this._registry.add(this._control, this); + } + /** @nodoc */ + ngOnDestroy() { + this._registry.remove(this); + } + /** + * Sets the "checked" property value on the radio input element. + * @nodoc + */ + writeValue(value) { + this._state = value === this.value; + this.setProperty("checked", this._state); + } + /** + * Registers a function called when the control value changes. + * @nodoc + */ + registerOnChange(fn) { + this._fn = fn; + this.onChange = () => { + fn(this.value); + this._registry.select(this); + }; + } + /** @nodoc */ + setDisabledState(isDisabled) { + if (this.setDisabledStateFired || isDisabled || this.callSetDisabledState === "whenDisabledForLegacyCode") { + this.setProperty("disabled", isDisabled); + } + this.setDisabledStateFired = true; + } + /** + * Sets the "value" on the radio input element and unchecks it. + * + * @param value + */ + fireUncheck(value) { + this.writeValue(value); + } + _checkName() { + if (this.name && this.formControlName && this.name !== this.formControlName && (typeof ngDevMode === "undefined" || ngDevMode)) { + throwNameError(); + } + if (!this.name && this.formControlName) this.name = this.formControlName; + } + static { + this.ɵfac = function RadioControlValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _RadioControlValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(RadioControlRegistry), ɵɵdirectiveInject(Injector)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _RadioControlValueAccessor, + selectors: [["input", "type", "radio", "formControlName", ""], ["input", "type", "radio", "formControl", ""], ["input", "type", "radio", "ngModel", ""]], + hostBindings: function RadioControlValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("change", function RadioControlValueAccessor_change_HostBindingHandler() { + return ctx.onChange(); + })("blur", function RadioControlValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + inputs: { + name: "name", + formControlName: "formControlName", + value: "value" + }, + features: [ɵɵProvidersFeature([RADIO_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RadioControlValueAccessor, [{ + type: Directive, + args: [{ + selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", + host: { + "(change)": "onChange()", + "(blur)": "onTouched()" + }, + providers: [RADIO_VALUE_ACCESSOR] + }] + }], () => [{ + type: Renderer2 + }, { + type: ElementRef + }, { + type: RadioControlRegistry + }, { + type: Injector + }], { + name: [{ + type: Input + }], + formControlName: [{ + type: Input + }], + value: [{ + type: Input + }] + }); +})(); +var RANGE_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => RangeValueAccessor), + multi: true +}; +var RangeValueAccessor = class _RangeValueAccessor extends BuiltInControlValueAccessor { + /** + * Sets the "value" property on the input element. + * @nodoc + */ + writeValue(value) { + this.setProperty("value", parseFloat(value)); + } + /** + * Registers a function called when the control value changes. + * @nodoc + */ + registerOnChange(fn) { + this.onChange = (value) => { + fn(value == "" ? null : parseFloat(value)); + }; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵRangeValueAccessor_BaseFactory; + return function RangeValueAccessor_Factory(__ngFactoryType__) { + return (ɵRangeValueAccessor_BaseFactory || (ɵRangeValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_RangeValueAccessor)))(__ngFactoryType__ || _RangeValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _RangeValueAccessor, + selectors: [["input", "type", "range", "formControlName", ""], ["input", "type", "range", "formControl", ""], ["input", "type", "range", "ngModel", ""]], + hostBindings: function RangeValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("change", function RangeValueAccessor_change_HostBindingHandler($event) { + return ctx.onChange($event.target.value); + })("input", function RangeValueAccessor_input_HostBindingHandler($event) { + return ctx.onChange($event.target.value); + })("blur", function RangeValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + features: [ɵɵProvidersFeature([RANGE_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RangeValueAccessor, [{ + type: Directive, + args: [{ + selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]", + host: { + "(change)": "onChange($event.target.value)", + "(input)": "onChange($event.target.value)", + "(blur)": "onTouched()" + }, + providers: [RANGE_VALUE_ACCESSOR] + }] + }], null, null); +})(); +var NG_MODEL_WITH_FORM_CONTROL_WARNING = new InjectionToken(ngDevMode ? "NgModelWithFormControlWarning" : ""); +var formControlBinding = { + provide: NgControl, + useExisting: forwardRef(() => FormControlDirective) +}; +var FormControlDirective = class _FormControlDirective extends NgControl { + /** + * @description + * Triggers a warning in dev mode that this input should not be used with reactive forms. + */ + set isDisabled(isDisabled) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + console.warn(disabledAttrWarning); + } + } + static { + this._ngModelWarningSentOnce = false; + } + constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig, callSetDisabledState) { + super(); + this._ngModelWarningConfig = _ngModelWarningConfig; + this.callSetDisabledState = callSetDisabledState; + this.update = new EventEmitter(); + this._ngModelWarningSent = false; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + this.valueAccessor = selectValueAccessor(this, valueAccessors); + } + /** @nodoc */ + ngOnChanges(changes) { + if (this._isControlChanged(changes)) { + const previousForm = changes["form"].previousValue; + if (previousForm) { + cleanUpControl( + previousForm, + this, + /* validateControlPresenceOnChange */ + false + ); + } + setUpControl(this.form, this, this.callSetDisabledState); + this.form.updateValueAndValidity({ + emitEvent: false + }); + } + if (isPropertyUpdated(changes, this.viewModel)) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + _ngModelWarning("formControl", _FormControlDirective, this, this._ngModelWarningConfig); + } + this.form.setValue(this.model); + this.viewModel = this.model; + } + } + /** @nodoc */ + ngOnDestroy() { + if (this.form) { + cleanUpControl( + this.form, + this, + /* validateControlPresenceOnChange */ + false + ); + } + } + /** + * @description + * Returns an array that represents the path from the top-level form to this control. + * Each index is the string name of the control on that level. + */ + get path() { + return []; + } + /** + * @description + * The `FormControl` bound to this directive. + */ + get control() { + return this.form; + } + /** + * @description + * Sets the new value for the view model and emits an `ngModelChange` event. + * + * @param newValue The new value for the view model. + */ + viewToModelUpdate(newValue) { + this.viewModel = newValue; + this.update.emit(newValue); + } + _isControlChanged(changes) { + return changes.hasOwnProperty("form"); + } + static { + this.ɵfac = function FormControlDirective_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormControlDirective)(ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8), ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _FormControlDirective, + selectors: [["", "formControl", ""]], + inputs: { + form: [0, "formControl", "form"], + isDisabled: [0, "disabled", "isDisabled"], + model: [0, "ngModel", "model"] + }, + outputs: { + update: "ngModelChange" + }, + exportAs: ["ngForm"], + features: [ɵɵProvidersFeature([formControlBinding]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormControlDirective, [{ + type: Directive, + args: [{ + selector: "[formControl]", + providers: [formControlBinding], + exportAs: "ngForm" + }] + }], () => [{ + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALUE_ACCESSOR] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [NG_MODEL_WITH_FORM_CONTROL_WARNING] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [CALL_SET_DISABLED_STATE] + }] + }], { + form: [{ + type: Input, + args: ["formControl"] + }], + isDisabled: [{ + type: Input, + args: ["disabled"] + }], + model: [{ + type: Input, + args: ["ngModel"] + }], + update: [{ + type: Output, + args: ["ngModelChange"] + }] + }); +})(); +var formDirectiveProvider = { + provide: ControlContainer, + useExisting: forwardRef(() => FormGroupDirective) +}; +var FormGroupDirective = class _FormGroupDirective extends ControlContainer { + /** + * @description + * Reports whether the form submission has been triggered. + */ + get submitted() { + return untracked(this._submittedReactive); + } + // TODO(atscott): Remove once invalid API usage is cleaned up internally + set submitted(value) { + this._submittedReactive.set(value); + } + constructor(validators, asyncValidators, callSetDisabledState) { + super(); + this.callSetDisabledState = callSetDisabledState; + this._submitted = computed(() => this._submittedReactive()); + this._submittedReactive = signal(false); + this._onCollectionChange = () => this._updateDomValue(); + this.directives = []; + this.form = null; + this.ngSubmit = new EventEmitter(); + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + } + /** @nodoc */ + ngOnChanges(changes) { + this._checkFormPresent(); + if (changes.hasOwnProperty("form")) { + this._updateValidators(); + this._updateDomValue(); + this._updateRegistrations(); + this._oldForm = this.form; + } + } + /** @nodoc */ + ngOnDestroy() { + if (this.form) { + cleanUpValidators(this.form, this); + if (this.form._onCollectionChange === this._onCollectionChange) { + this.form._registerOnCollectionChange(() => { + }); + } + } + } + /** + * @description + * Returns this directive's instance. + */ + get formDirective() { + return this; + } + /** + * @description + * Returns the `FormGroup` bound to this directive. + */ + get control() { + return this.form; + } + /** + * @description + * Returns an array representing the path to this group. Because this directive + * always lives at the top level of a form, it always an empty array. + */ + get path() { + return []; + } + /** + * @description + * Method that sets up the control directive in this group, re-calculates its value + * and validity, and adds the instance to the internal list of directives. + * + * @param dir The `FormControlName` directive instance. + */ + addControl(dir) { + const ctrl = this.form.get(dir.path); + setUpControl(ctrl, dir, this.callSetDisabledState); + ctrl.updateValueAndValidity({ + emitEvent: false + }); + this.directives.push(dir); + return ctrl; + } + /** + * @description + * Retrieves the `FormControl` instance from the provided `FormControlName` directive + * + * @param dir The `FormControlName` directive instance. + */ + getControl(dir) { + return this.form.get(dir.path); + } + /** + * @description + * Removes the `FormControlName` instance from the internal list of directives + * + * @param dir The `FormControlName` directive instance. + */ + removeControl(dir) { + cleanUpControl( + dir.control || null, + dir, + /* validateControlPresenceOnChange */ + false + ); + removeListItem$1(this.directives, dir); + } + /** + * Adds a new `FormGroupName` directive instance to the form. + * + * @param dir The `FormGroupName` directive instance. + */ + addFormGroup(dir) { + this._setUpFormContainer(dir); + } + /** + * Performs the necessary cleanup when a `FormGroupName` directive instance is removed from the + * view. + * + * @param dir The `FormGroupName` directive instance. + */ + removeFormGroup(dir) { + this._cleanUpFormContainer(dir); + } + /** + * @description + * Retrieves the `FormGroup` for a provided `FormGroupName` directive instance + * + * @param dir The `FormGroupName` directive instance. + */ + getFormGroup(dir) { + return this.form.get(dir.path); + } + /** + * Performs the necessary setup when a `FormArrayName` directive instance is added to the view. + * + * @param dir The `FormArrayName` directive instance. + */ + addFormArray(dir) { + this._setUpFormContainer(dir); + } + /** + * Performs the necessary cleanup when a `FormArrayName` directive instance is removed from the + * view. + * + * @param dir The `FormArrayName` directive instance. + */ + removeFormArray(dir) { + this._cleanUpFormContainer(dir); + } + /** + * @description + * Retrieves the `FormArray` for a provided `FormArrayName` directive instance. + * + * @param dir The `FormArrayName` directive instance. + */ + getFormArray(dir) { + return this.form.get(dir.path); + } + /** + * Sets the new value for the provided `FormControlName` directive. + * + * @param dir The `FormControlName` directive instance. + * @param value The new value for the directive's control. + */ + updateModel(dir, value) { + const ctrl = this.form.get(dir.path); + ctrl.setValue(value); + } + /** + * @description + * Method called with the "submit" event is triggered on the form. + * Triggers the `ngSubmit` emitter to emit the "submit" event as its payload. + * + * @param $event The "submit" event object + */ + onSubmit($event) { + this._submittedReactive.set(true); + syncPendingControls(this.form, this.directives); + this.ngSubmit.emit($event); + this.form._events.next(new FormSubmittedEvent(this.control)); + return $event?.target?.method === "dialog"; + } + /** + * @description + * Method called when the "reset" event is triggered on the form. + */ + onReset() { + this.resetForm(); + } + /** + * @description + * Resets the form to an initial value and resets its submitted status. + * + * @param value The new value for the form. + */ + resetForm(value = void 0) { + this.form.reset(value); + this._submittedReactive.set(false); + this.form._events.next(new FormResetEvent(this.form)); + } + /** @internal */ + _updateDomValue() { + this.directives.forEach((dir) => { + const oldCtrl = dir.control; + const newCtrl = this.form.get(dir.path); + if (oldCtrl !== newCtrl) { + cleanUpControl(oldCtrl || null, dir); + if (isFormControl(newCtrl)) { + setUpControl(newCtrl, dir, this.callSetDisabledState); + dir.control = newCtrl; + } + } + }); + this.form._updateTreeValidity({ + emitEvent: false + }); + } + _setUpFormContainer(dir) { + const ctrl = this.form.get(dir.path); + setUpFormContainer(ctrl, dir); + ctrl.updateValueAndValidity({ + emitEvent: false + }); + } + _cleanUpFormContainer(dir) { + if (this.form) { + const ctrl = this.form.get(dir.path); + if (ctrl) { + const isControlUpdated = cleanUpFormContainer(ctrl, dir); + if (isControlUpdated) { + ctrl.updateValueAndValidity({ + emitEvent: false + }); + } + } + } + } + _updateRegistrations() { + this.form._registerOnCollectionChange(this._onCollectionChange); + if (this._oldForm) { + this._oldForm._registerOnCollectionChange(() => { + }); + } + } + _updateValidators() { + setUpValidators(this.form, this); + if (this._oldForm) { + cleanUpValidators(this._oldForm, this); + } + } + _checkFormPresent() { + if (!this.form && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw missingFormException(); + } + } + static { + this.ɵfac = function FormGroupDirective_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormGroupDirective)(ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), ɵɵdirectiveInject(CALL_SET_DISABLED_STATE, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _FormGroupDirective, + selectors: [["", "formGroup", ""]], + hostBindings: function FormGroupDirective_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("submit", function FormGroupDirective_submit_HostBindingHandler($event) { + return ctx.onSubmit($event); + })("reset", function FormGroupDirective_reset_HostBindingHandler() { + return ctx.onReset(); + }); + } + }, + inputs: { + form: [0, "formGroup", "form"] + }, + outputs: { + ngSubmit: "ngSubmit" + }, + exportAs: ["ngForm"], + features: [ɵɵProvidersFeature([formDirectiveProvider]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormGroupDirective, [{ + type: Directive, + args: [{ + selector: "[formGroup]", + providers: [formDirectiveProvider], + host: { + "(submit)": "onSubmit($event)", + "(reset)": "onReset()" + }, + exportAs: "ngForm" + }] + }], () => [{ + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [CALL_SET_DISABLED_STATE] + }] + }], { + form: [{ + type: Input, + args: ["formGroup"] + }], + ngSubmit: [{ + type: Output + }] + }); +})(); +var formGroupNameProvider = { + provide: ControlContainer, + useExisting: forwardRef(() => FormGroupName) +}; +var FormGroupName = class _FormGroupName extends AbstractFormGroupDirective { + constructor(parent, validators, asyncValidators) { + super(); + this.name = null; + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + } + /** @internal */ + _checkParentType() { + if (_hasInvalidParent(this._parent) && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw groupParentException(); + } + } + static { + this.ɵfac = function FormGroupName_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormGroupName)(ɵɵdirectiveInject(ControlContainer, 13), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _FormGroupName, + selectors: [["", "formGroupName", ""]], + inputs: { + name: [0, "formGroupName", "name"] + }, + features: [ɵɵProvidersFeature([formGroupNameProvider]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormGroupName, [{ + type: Directive, + args: [{ + selector: "[formGroupName]", + providers: [formGroupNameProvider] + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Optional + }, { + type: Host + }, { + type: SkipSelf + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }], { + name: [{ + type: Input, + args: ["formGroupName"] + }] + }); +})(); +var formArrayNameProvider = { + provide: ControlContainer, + useExisting: forwardRef(() => FormArrayName) +}; +var FormArrayName = class _FormArrayName extends ControlContainer { + constructor(parent, validators, asyncValidators) { + super(); + this.name = null; + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + } + /** + * A lifecycle method called when the directive's inputs are initialized. For internal use only. + * @throws If the directive does not have a valid parent. + * @nodoc + */ + ngOnInit() { + this._checkParentType(); + this.formDirective.addFormArray(this); + } + /** + * A lifecycle method called before the directive's instance is destroyed. For internal use only. + * @nodoc + */ + ngOnDestroy() { + if (this.formDirective) { + this.formDirective.removeFormArray(this); + } + } + /** + * @description + * The `FormArray` bound to this directive. + */ + get control() { + return this.formDirective.getFormArray(this); + } + /** + * @description + * The top-level directive for this group if present, otherwise null. + */ + get formDirective() { + return this._parent ? this._parent.formDirective : null; + } + /** + * @description + * Returns an array that represents the path from the top-level form to this control. + * Each index is the string name of the control on that level. + */ + get path() { + return controlPath(this.name == null ? this.name : this.name.toString(), this._parent); + } + _checkParentType() { + if (_hasInvalidParent(this._parent) && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw arrayParentException(); + } + } + static { + this.ɵfac = function FormArrayName_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormArrayName)(ɵɵdirectiveInject(ControlContainer, 13), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _FormArrayName, + selectors: [["", "formArrayName", ""]], + inputs: { + name: [0, "formArrayName", "name"] + }, + features: [ɵɵProvidersFeature([formArrayNameProvider]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormArrayName, [{ + type: Directive, + args: [{ + selector: "[formArrayName]", + providers: [formArrayNameProvider] + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Optional + }, { + type: Host + }, { + type: SkipSelf + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }], { + name: [{ + type: Input, + args: ["formArrayName"] + }] + }); +})(); +function _hasInvalidParent(parent) { + return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) && !(parent instanceof FormArrayName); +} +var controlNameBinding = { + provide: NgControl, + useExisting: forwardRef(() => FormControlName) +}; +var FormControlName = class _FormControlName extends NgControl { + /** + * @description + * Triggers a warning in dev mode that this input should not be used with reactive forms. + */ + set isDisabled(isDisabled) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + console.warn(disabledAttrWarning); + } + } + static { + this._ngModelWarningSentOnce = false; + } + constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) { + super(); + this._ngModelWarningConfig = _ngModelWarningConfig; + this._added = false; + this.name = null; + this.update = new EventEmitter(); + this._ngModelWarningSent = false; + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + this.valueAccessor = selectValueAccessor(this, valueAccessors); + } + /** @nodoc */ + ngOnChanges(changes) { + if (!this._added) this._setUpControl(); + if (isPropertyUpdated(changes, this.viewModel)) { + if (typeof ngDevMode === "undefined" || ngDevMode) { + _ngModelWarning("formControlName", _FormControlName, this, this._ngModelWarningConfig); + } + this.viewModel = this.model; + this.formDirective.updateModel(this, this.model); + } + } + /** @nodoc */ + ngOnDestroy() { + if (this.formDirective) { + this.formDirective.removeControl(this); + } + } + /** + * @description + * Sets the new value for the view model and emits an `ngModelChange` event. + * + * @param newValue The new value for the view model. + */ + viewToModelUpdate(newValue) { + this.viewModel = newValue; + this.update.emit(newValue); + } + /** + * @description + * Returns an array that represents the path from the top-level form to this control. + * Each index is the string name of the control on that level. + */ + get path() { + return controlPath(this.name == null ? this.name : this.name.toString(), this._parent); + } + /** + * @description + * The top-level directive for this group if present, otherwise null. + */ + get formDirective() { + return this._parent ? this._parent.formDirective : null; + } + _checkParentType() { + if (typeof ngDevMode === "undefined" || ngDevMode) { + if (!(this._parent instanceof FormGroupName) && this._parent instanceof AbstractFormGroupDirective) { + throw ngModelGroupException(); + } else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) && !(this._parent instanceof FormArrayName)) { + throw controlParentException(this.name); + } + } + } + _setUpControl() { + this._checkParentType(); + this.control = this.formDirective.addControl(this); + this._added = true; + } + static { + this.ɵfac = function FormControlName_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormControlName)(ɵɵdirectiveInject(ControlContainer, 13), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10), ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 10), ɵɵdirectiveInject(NG_MODEL_WITH_FORM_CONTROL_WARNING, 8)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _FormControlName, + selectors: [["", "formControlName", ""]], + inputs: { + name: [0, "formControlName", "name"], + isDisabled: [0, "disabled", "isDisabled"], + model: [0, "ngModel", "model"] + }, + outputs: { + update: "ngModelChange" + }, + features: [ɵɵProvidersFeature([controlNameBinding]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormControlName, [{ + type: Directive, + args: [{ + selector: "[formControlName]", + providers: [controlNameBinding] + }] + }], () => [{ + type: ControlContainer, + decorators: [{ + type: Optional + }, { + type: Host + }, { + type: SkipSelf + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_ASYNC_VALIDATORS] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Self + }, { + type: Inject, + args: [NG_VALUE_ACCESSOR] + }] + }, { + type: void 0, + decorators: [{ + type: Optional + }, { + type: Inject, + args: [NG_MODEL_WITH_FORM_CONTROL_WARNING] + }] + }], { + name: [{ + type: Input, + args: ["formControlName"] + }], + isDisabled: [{ + type: Input, + args: ["disabled"] + }], + model: [{ + type: Input, + args: ["ngModel"] + }], + update: [{ + type: Output, + args: ["ngModelChange"] + }] + }); +})(); +var SELECT_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => SelectControlValueAccessor), + multi: true +}; +function _buildValueString$1(id, value) { + if (id == null) return `${value}`; + if (value && typeof value === "object") value = "Object"; + return `${id}: ${value}`.slice(0, 50); +} +function _extractId$1(valueString) { + return valueString.split(":")[0]; +} +var SelectControlValueAccessor = class _SelectControlValueAccessor extends BuiltInControlValueAccessor { + constructor() { + super(...arguments); + this._optionMap = /* @__PURE__ */ new Map(); + this._idCounter = 0; + this._compareWith = Object.is; + } + /** + * @description + * Tracks the option comparison algorithm for tracking identities when + * checking for changes. + */ + set compareWith(fn) { + if (typeof fn !== "function" && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw new RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`); + } + this._compareWith = fn; + } + /** + * Sets the "value" property on the select element. + * @nodoc + */ + writeValue(value) { + this.value = value; + const id = this._getOptionId(value); + const valueString = _buildValueString$1(id, value); + this.setProperty("value", valueString); + } + /** + * Registers a function called when the control value changes. + * @nodoc + */ + registerOnChange(fn) { + this.onChange = (valueString) => { + this.value = this._getOptionValue(valueString); + fn(this.value); + }; + } + /** @internal */ + _registerOption() { + return (this._idCounter++).toString(); + } + /** @internal */ + _getOptionId(value) { + for (const id of this._optionMap.keys()) { + if (this._compareWith(this._optionMap.get(id), value)) return id; + } + return null; + } + /** @internal */ + _getOptionValue(valueString) { + const id = _extractId$1(valueString); + return this._optionMap.has(id) ? this._optionMap.get(id) : valueString; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵSelectControlValueAccessor_BaseFactory; + return function SelectControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵSelectControlValueAccessor_BaseFactory || (ɵSelectControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_SelectControlValueAccessor)))(__ngFactoryType__ || _SelectControlValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _SelectControlValueAccessor, + selectors: [["select", "formControlName", "", 3, "multiple", ""], ["select", "formControl", "", 3, "multiple", ""], ["select", "ngModel", "", 3, "multiple", ""]], + hostBindings: function SelectControlValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("change", function SelectControlValueAccessor_change_HostBindingHandler($event) { + return ctx.onChange($event.target.value); + })("blur", function SelectControlValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + inputs: { + compareWith: "compareWith" + }, + features: [ɵɵProvidersFeature([SELECT_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SelectControlValueAccessor, [{ + type: Directive, + args: [{ + selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", + host: { + "(change)": "onChange($event.target.value)", + "(blur)": "onTouched()" + }, + providers: [SELECT_VALUE_ACCESSOR] + }] + }], null, { + compareWith: [{ + type: Input + }] + }); +})(); +var NgSelectOption = class _NgSelectOption { + constructor(_element, _renderer, _select) { + this._element = _element; + this._renderer = _renderer; + this._select = _select; + if (this._select) this.id = this._select._registerOption(); + } + /** + * @description + * Tracks the value bound to the option element. Unlike the value binding, + * ngValue supports binding to objects. + */ + set ngValue(value) { + if (this._select == null) return; + this._select._optionMap.set(this.id, value); + this._setElementValue(_buildValueString$1(this.id, value)); + this._select.writeValue(this._select.value); + } + /** + * @description + * Tracks simple string values bound to the option element. + * For objects, use the `ngValue` input binding. + */ + set value(value) { + this._setElementValue(value); + if (this._select) this._select.writeValue(this._select.value); + } + /** @internal */ + _setElementValue(value) { + this._renderer.setProperty(this._element.nativeElement, "value", value); + } + /** @nodoc */ + ngOnDestroy() { + if (this._select) { + this._select._optionMap.delete(this.id); + this._select.writeValue(this._select.value); + } + } + static { + this.ɵfac = function NgSelectOption_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgSelectOption)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(SelectControlValueAccessor, 9)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _NgSelectOption, + selectors: [["option"]], + inputs: { + ngValue: "ngValue", + value: "value" + } + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSelectOption, [{ + type: Directive, + args: [{ + selector: "option" + }] + }], () => [{ + type: ElementRef + }, { + type: Renderer2 + }, { + type: SelectControlValueAccessor, + decorators: [{ + type: Optional + }, { + type: Host + }] + }], { + ngValue: [{ + type: Input, + args: ["ngValue"] + }], + value: [{ + type: Input, + args: ["value"] + }] + }); +})(); +var SELECT_MULTIPLE_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => SelectMultipleControlValueAccessor), + multi: true +}; +function _buildValueString(id, value) { + if (id == null) return `${value}`; + if (typeof value === "string") value = `'${value}'`; + if (value && typeof value === "object") value = "Object"; + return `${id}: ${value}`.slice(0, 50); +} +function _extractId(valueString) { + return valueString.split(":")[0]; +} +var SelectMultipleControlValueAccessor = class _SelectMultipleControlValueAccessor extends BuiltInControlValueAccessor { + constructor() { + super(...arguments); + this._optionMap = /* @__PURE__ */ new Map(); + this._idCounter = 0; + this._compareWith = Object.is; + } + /** + * @description + * Tracks the option comparison algorithm for tracking identities when + * checking for changes. + */ + set compareWith(fn) { + if (typeof fn !== "function" && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw new RuntimeError(1201, `compareWith must be a function, but received ${JSON.stringify(fn)}`); + } + this._compareWith = fn; + } + /** + * Sets the "value" property on one or of more of the select's options. + * @nodoc + */ + writeValue(value) { + this.value = value; + let optionSelectedStateSetter; + if (Array.isArray(value)) { + const ids = value.map((v) => this._getOptionId(v)); + optionSelectedStateSetter = (opt, o) => { + opt._setSelected(ids.indexOf(o.toString()) > -1); + }; + } else { + optionSelectedStateSetter = (opt, o) => { + opt._setSelected(false); + }; + } + this._optionMap.forEach(optionSelectedStateSetter); + } + /** + * Registers a function called when the control value changes + * and writes an array of the selected options. + * @nodoc + */ + registerOnChange(fn) { + this.onChange = (element) => { + const selected = []; + const selectedOptions = element.selectedOptions; + if (selectedOptions !== void 0) { + const options = selectedOptions; + for (let i = 0; i < options.length; i++) { + const opt = options[i]; + const val = this._getOptionValue(opt.value); + selected.push(val); + } + } else { + const options = element.options; + for (let i = 0; i < options.length; i++) { + const opt = options[i]; + if (opt.selected) { + const val = this._getOptionValue(opt.value); + selected.push(val); + } + } + } + this.value = selected; + fn(selected); + }; + } + /** @internal */ + _registerOption(value) { + const id = (this._idCounter++).toString(); + this._optionMap.set(id, value); + return id; + } + /** @internal */ + _getOptionId(value) { + for (const id of this._optionMap.keys()) { + if (this._compareWith(this._optionMap.get(id)._value, value)) return id; + } + return null; + } + /** @internal */ + _getOptionValue(valueString) { + const id = _extractId(valueString); + return this._optionMap.has(id) ? this._optionMap.get(id)._value : valueString; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵSelectMultipleControlValueAccessor_BaseFactory; + return function SelectMultipleControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵSelectMultipleControlValueAccessor_BaseFactory || (ɵSelectMultipleControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_SelectMultipleControlValueAccessor)))(__ngFactoryType__ || _SelectMultipleControlValueAccessor); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _SelectMultipleControlValueAccessor, + selectors: [["select", "multiple", "", "formControlName", ""], ["select", "multiple", "", "formControl", ""], ["select", "multiple", "", "ngModel", ""]], + hostBindings: function SelectMultipleControlValueAccessor_HostBindings(rf, ctx) { + if (rf & 1) { + ɵɵlistener("change", function SelectMultipleControlValueAccessor_change_HostBindingHandler($event) { + return ctx.onChange($event.target); + })("blur", function SelectMultipleControlValueAccessor_blur_HostBindingHandler() { + return ctx.onTouched(); + }); + } + }, + inputs: { + compareWith: "compareWith" + }, + features: [ɵɵProvidersFeature([SELECT_MULTIPLE_VALUE_ACCESSOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(SelectMultipleControlValueAccessor, [{ + type: Directive, + args: [{ + selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", + host: { + "(change)": "onChange($event.target)", + "(blur)": "onTouched()" + }, + providers: [SELECT_MULTIPLE_VALUE_ACCESSOR] + }] + }], null, { + compareWith: [{ + type: Input + }] + }); +})(); +var ɵNgSelectMultipleOption = class _ɵNgSelectMultipleOption { + constructor(_element, _renderer, _select) { + this._element = _element; + this._renderer = _renderer; + this._select = _select; + if (this._select) { + this.id = this._select._registerOption(this); + } + } + /** + * @description + * Tracks the value bound to the option element. Unlike the value binding, + * ngValue supports binding to objects. + */ + set ngValue(value) { + if (this._select == null) return; + this._value = value; + this._setElementValue(_buildValueString(this.id, value)); + this._select.writeValue(this._select.value); + } + /** + * @description + * Tracks simple string values bound to the option element. + * For objects, use the `ngValue` input binding. + */ + set value(value) { + if (this._select) { + this._value = value; + this._setElementValue(_buildValueString(this.id, value)); + this._select.writeValue(this._select.value); + } else { + this._setElementValue(value); + } + } + /** @internal */ + _setElementValue(value) { + this._renderer.setProperty(this._element.nativeElement, "value", value); + } + /** @internal */ + _setSelected(selected) { + this._renderer.setProperty(this._element.nativeElement, "selected", selected); + } + /** @nodoc */ + ngOnDestroy() { + if (this._select) { + this._select._optionMap.delete(this.id); + this._select.writeValue(this._select.value); + } + } + static { + this.ɵfac = function ɵNgSelectMultipleOption_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵNgSelectMultipleOption)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(SelectMultipleControlValueAccessor, 9)); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _ɵNgSelectMultipleOption, + selectors: [["option"]], + inputs: { + ngValue: "ngValue", + value: "value" + } + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵNgSelectMultipleOption, [{ + type: Directive, + args: [{ + selector: "option" + }] + }], () => [{ + type: ElementRef + }, { + type: Renderer2 + }, { + type: SelectMultipleControlValueAccessor, + decorators: [{ + type: Optional + }, { + type: Host + }] + }], { + ngValue: [{ + type: Input, + args: ["ngValue"] + }], + value: [{ + type: Input, + args: ["value"] + }] + }); +})(); +function toInteger(value) { + return typeof value === "number" ? value : parseInt(value, 10); +} +function toFloat(value) { + return typeof value === "number" ? value : parseFloat(value); +} +var AbstractValidatorDirective = class _AbstractValidatorDirective { + constructor() { + this._validator = nullValidator; + } + /** @nodoc */ + ngOnChanges(changes) { + if (this.inputName in changes) { + const input = this.normalizeInput(changes[this.inputName].currentValue); + this._enabled = this.enabled(input); + this._validator = this._enabled ? this.createValidator(input) : nullValidator; + if (this._onChange) { + this._onChange(); + } + } + } + /** @nodoc */ + validate(control) { + return this._validator(control); + } + /** @nodoc */ + registerOnValidatorChange(fn) { + this._onChange = fn; + } + /** + * @description + * Determines whether this validator should be active or not based on an input. + * Base class implementation checks whether an input is defined (if the value is different from + * `null` and `undefined`). Validator classes that extend this base class can override this + * function with the logic specific to a particular validator directive. + */ + enabled(input) { + return input != null; + } + static { + this.ɵfac = function AbstractValidatorDirective_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _AbstractValidatorDirective)(); + }; + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _AbstractValidatorDirective, + features: [ɵɵNgOnChangesFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AbstractValidatorDirective, [{ + type: Directive + }], null, null); +})(); +var MAX_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MaxValidator), + multi: true +}; +var MaxValidator = class _MaxValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "max"; + this.normalizeInput = (input) => toFloat(input); + this.createValidator = (max) => maxValidator(max); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵMaxValidator_BaseFactory; + return function MaxValidator_Factory(__ngFactoryType__) { + return (ɵMaxValidator_BaseFactory || (ɵMaxValidator_BaseFactory = ɵɵgetInheritedFactory(_MaxValidator)))(__ngFactoryType__ || _MaxValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _MaxValidator, + selectors: [["input", "type", "number", "max", "", "formControlName", ""], ["input", "type", "number", "max", "", "formControl", ""], ["input", "type", "number", "max", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function MaxValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("max", ctx._enabled ? ctx.max : null); + } + }, + inputs: { + max: "max" + }, + features: [ɵɵProvidersFeature([MAX_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MaxValidator, [{ + type: Directive, + args: [{ + selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", + providers: [MAX_VALIDATOR], + host: { + "[attr.max]": "_enabled ? max : null" + } + }] + }], null, { + max: [{ + type: Input + }] + }); +})(); +var MIN_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MinValidator), + multi: true +}; +var MinValidator = class _MinValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "min"; + this.normalizeInput = (input) => toFloat(input); + this.createValidator = (min) => minValidator(min); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵMinValidator_BaseFactory; + return function MinValidator_Factory(__ngFactoryType__) { + return (ɵMinValidator_BaseFactory || (ɵMinValidator_BaseFactory = ɵɵgetInheritedFactory(_MinValidator)))(__ngFactoryType__ || _MinValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _MinValidator, + selectors: [["input", "type", "number", "min", "", "formControlName", ""], ["input", "type", "number", "min", "", "formControl", ""], ["input", "type", "number", "min", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function MinValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("min", ctx._enabled ? ctx.min : null); + } + }, + inputs: { + min: "min" + }, + features: [ɵɵProvidersFeature([MIN_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MinValidator, [{ + type: Directive, + args: [{ + selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", + providers: [MIN_VALIDATOR], + host: { + "[attr.min]": "_enabled ? min : null" + } + }] + }], null, { + min: [{ + type: Input + }] + }); +})(); +var REQUIRED_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => RequiredValidator), + multi: true +}; +var CHECKBOX_REQUIRED_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => CheckboxRequiredValidator), + multi: true +}; +var RequiredValidator = class _RequiredValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "required"; + this.normalizeInput = booleanAttribute; + this.createValidator = (input) => requiredValidator; + } + /** @nodoc */ + enabled(input) { + return input; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵRequiredValidator_BaseFactory; + return function RequiredValidator_Factory(__ngFactoryType__) { + return (ɵRequiredValidator_BaseFactory || (ɵRequiredValidator_BaseFactory = ɵɵgetInheritedFactory(_RequiredValidator)))(__ngFactoryType__ || _RequiredValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _RequiredValidator, + selectors: [["", "required", "", "formControlName", "", 3, "type", "checkbox"], ["", "required", "", "formControl", "", 3, "type", "checkbox"], ["", "required", "", "ngModel", "", 3, "type", "checkbox"]], + hostVars: 1, + hostBindings: function RequiredValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("required", ctx._enabled ? "" : null); + } + }, + inputs: { + required: "required" + }, + features: [ɵɵProvidersFeature([REQUIRED_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(RequiredValidator, [{ + type: Directive, + args: [{ + selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", + providers: [REQUIRED_VALIDATOR], + host: { + "[attr.required]": '_enabled ? "" : null' + } + }] + }], null, { + required: [{ + type: Input + }] + }); +})(); +var CheckboxRequiredValidator = class _CheckboxRequiredValidator extends RequiredValidator { + constructor() { + super(...arguments); + this.createValidator = (input) => requiredTrueValidator; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵCheckboxRequiredValidator_BaseFactory; + return function CheckboxRequiredValidator_Factory(__ngFactoryType__) { + return (ɵCheckboxRequiredValidator_BaseFactory || (ɵCheckboxRequiredValidator_BaseFactory = ɵɵgetInheritedFactory(_CheckboxRequiredValidator)))(__ngFactoryType__ || _CheckboxRequiredValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _CheckboxRequiredValidator, + selectors: [["input", "type", "checkbox", "required", "", "formControlName", ""], ["input", "type", "checkbox", "required", "", "formControl", ""], ["input", "type", "checkbox", "required", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function CheckboxRequiredValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("required", ctx._enabled ? "" : null); + } + }, + features: [ɵɵProvidersFeature([CHECKBOX_REQUIRED_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(CheckboxRequiredValidator, [{ + type: Directive, + args: [{ + selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]", + providers: [CHECKBOX_REQUIRED_VALIDATOR], + host: { + "[attr.required]": '_enabled ? "" : null' + } + }] + }], null, null); +})(); +var EMAIL_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => EmailValidator), + multi: true +}; +var EmailValidator = class _EmailValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "email"; + this.normalizeInput = booleanAttribute; + this.createValidator = (input) => emailValidator; + } + /** @nodoc */ + enabled(input) { + return input; + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵEmailValidator_BaseFactory; + return function EmailValidator_Factory(__ngFactoryType__) { + return (ɵEmailValidator_BaseFactory || (ɵEmailValidator_BaseFactory = ɵɵgetInheritedFactory(_EmailValidator)))(__ngFactoryType__ || _EmailValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _EmailValidator, + selectors: [["", "email", "", "formControlName", ""], ["", "email", "", "formControl", ""], ["", "email", "", "ngModel", ""]], + inputs: { + email: "email" + }, + features: [ɵɵProvidersFeature([EMAIL_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(EmailValidator, [{ + type: Directive, + args: [{ + selector: "[email][formControlName],[email][formControl],[email][ngModel]", + providers: [EMAIL_VALIDATOR] + }] + }], null, { + email: [{ + type: Input + }] + }); +})(); +var MIN_LENGTH_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MinLengthValidator), + multi: true +}; +var MinLengthValidator = class _MinLengthValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "minlength"; + this.normalizeInput = (input) => toInteger(input); + this.createValidator = (minlength) => minLengthValidator(minlength); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵMinLengthValidator_BaseFactory; + return function MinLengthValidator_Factory(__ngFactoryType__) { + return (ɵMinLengthValidator_BaseFactory || (ɵMinLengthValidator_BaseFactory = ɵɵgetInheritedFactory(_MinLengthValidator)))(__ngFactoryType__ || _MinLengthValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _MinLengthValidator, + selectors: [["", "minlength", "", "formControlName", ""], ["", "minlength", "", "formControl", ""], ["", "minlength", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function MinLengthValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("minlength", ctx._enabled ? ctx.minlength : null); + } + }, + inputs: { + minlength: "minlength" + }, + features: [ɵɵProvidersFeature([MIN_LENGTH_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MinLengthValidator, [{ + type: Directive, + args: [{ + selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", + providers: [MIN_LENGTH_VALIDATOR], + host: { + "[attr.minlength]": "_enabled ? minlength : null" + } + }] + }], null, { + minlength: [{ + type: Input + }] + }); +})(); +var MAX_LENGTH_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MaxLengthValidator), + multi: true +}; +var MaxLengthValidator = class _MaxLengthValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "maxlength"; + this.normalizeInput = (input) => toInteger(input); + this.createValidator = (maxlength) => maxLengthValidator(maxlength); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵMaxLengthValidator_BaseFactory; + return function MaxLengthValidator_Factory(__ngFactoryType__) { + return (ɵMaxLengthValidator_BaseFactory || (ɵMaxLengthValidator_BaseFactory = ɵɵgetInheritedFactory(_MaxLengthValidator)))(__ngFactoryType__ || _MaxLengthValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _MaxLengthValidator, + selectors: [["", "maxlength", "", "formControlName", ""], ["", "maxlength", "", "formControl", ""], ["", "maxlength", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function MaxLengthValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("maxlength", ctx._enabled ? ctx.maxlength : null); + } + }, + inputs: { + maxlength: "maxlength" + }, + features: [ɵɵProvidersFeature([MAX_LENGTH_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(MaxLengthValidator, [{ + type: Directive, + args: [{ + selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", + providers: [MAX_LENGTH_VALIDATOR], + host: { + "[attr.maxlength]": "_enabled ? maxlength : null" + } + }] + }], null, { + maxlength: [{ + type: Input + }] + }); +})(); +var PATTERN_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => PatternValidator), + multi: true +}; +var PatternValidator = class _PatternValidator extends AbstractValidatorDirective { + constructor() { + super(...arguments); + this.inputName = "pattern"; + this.normalizeInput = (input) => input; + this.createValidator = (input) => patternValidator(input); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵPatternValidator_BaseFactory; + return function PatternValidator_Factory(__ngFactoryType__) { + return (ɵPatternValidator_BaseFactory || (ɵPatternValidator_BaseFactory = ɵɵgetInheritedFactory(_PatternValidator)))(__ngFactoryType__ || _PatternValidator); + }; + })(); + } + static { + this.ɵdir = ɵɵdefineDirective({ + type: _PatternValidator, + selectors: [["", "pattern", "", "formControlName", ""], ["", "pattern", "", "formControl", ""], ["", "pattern", "", "ngModel", ""]], + hostVars: 1, + hostBindings: function PatternValidator_HostBindings(rf, ctx) { + if (rf & 2) { + ɵɵattribute("pattern", ctx._enabled ? ctx.pattern : null); + } + }, + inputs: { + pattern: "pattern" + }, + features: [ɵɵProvidersFeature([PATTERN_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PatternValidator, [{ + type: Directive, + args: [{ + selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", + providers: [PATTERN_VALIDATOR], + host: { + "[attr.pattern]": "_enabled ? pattern : null" + } + }] + }], null, { + pattern: [{ + type: Input + }] + }); +})(); +var SHARED_FORM_DIRECTIVES = [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator]; +var TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm]; +var REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName]; +var ɵInternalFormsSharedModule = class _ɵInternalFormsSharedModule { + static { + this.ɵfac = function ɵInternalFormsSharedModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵInternalFormsSharedModule)(); + }; + } + static { + this.ɵmod = ɵɵdefineNgModule({ + type: _ɵInternalFormsSharedModule, + declarations: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator], + exports: [ɵNgNoValidate, NgSelectOption, ɵNgSelectMultipleOption, DefaultValueAccessor, NumberValueAccessor, RangeValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, SelectMultipleControlValueAccessor, RadioControlValueAccessor, NgControlStatus, NgControlStatusGroup, RequiredValidator, MinLengthValidator, MaxLengthValidator, PatternValidator, CheckboxRequiredValidator, EmailValidator, MinValidator, MaxValidator] + }); + } + static { + this.ɵinj = ɵɵdefineInjector({}); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵInternalFormsSharedModule, [{ + type: NgModule, + args: [{ + declarations: SHARED_FORM_DIRECTIVES, + exports: SHARED_FORM_DIRECTIVES + }] + }], null, null); +})(); +var FormArray = class extends AbstractControl { + /** + * Creates a new `FormArray` instance. + * + * @param controls An array of child controls. Each child control is given an index + * where it is registered. + * + * @param validatorOrOpts A synchronous validator function, or an array of + * such functions, or an `AbstractControlOptions` object that contains validation functions + * and a validation trigger. + * + * @param asyncValidator A single async validator or array of async validator functions + * + */ + constructor(controls, validatorOrOpts, asyncValidator) { + super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts)); + this.controls = controls; + this._initObservables(); + this._setUpdateStrategy(validatorOrOpts); + this._setUpControls(); + this.updateValueAndValidity({ + onlySelf: true, + // If `asyncValidator` is present, it will trigger control status change from `PENDING` to + // `VALID` or `INVALID`. + // The status should be broadcasted via the `statusChanges` observable, so we set `emitEvent` + // to `true` to allow that during the control creation process. + emitEvent: !!this.asyncValidator + }); + } + /** + * Get the `AbstractControl` at the given `index` in the array. + * + * @param index Index in the array to retrieve the control. If `index` is negative, it will wrap + * around from the back, and if index is greatly negative (less than `-length`), the result is + * undefined. This behavior is the same as `Array.at(index)`. + */ + at(index) { + return this.controls[this._adjustIndex(index)]; + } + /** + * Insert a new `AbstractControl` at the end of the array. + * + * @param control Form control to be inserted + * @param options Specifies whether this FormArray instance should emit events after a new + * control is added. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control is + * inserted. When false, no events are emitted. + */ + push(control, options = {}) { + this.controls.push(control); + this._registerControl(control); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + this._onCollectionChange(); + } + /** + * Insert a new `AbstractControl` at the given `index` in the array. + * + * @param index Index in the array to insert the control. If `index` is negative, wraps around + * from the back. If `index` is greatly negative (less than `-length`), prepends to the array. + * This behavior is the same as `Array.splice(index, 0, control)`. + * @param control Form control to be inserted + * @param options Specifies whether this FormArray instance should emit events after a new + * control is inserted. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control is + * inserted. When false, no events are emitted. + */ + insert(index, control, options = {}) { + this.controls.splice(index, 0, control); + this._registerControl(control); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + } + /** + * Remove the control at the given `index` in the array. + * + * @param index Index in the array to remove the control. If `index` is negative, wraps around + * from the back. If `index` is greatly negative (less than `-length`), removes the first + * element. This behavior is the same as `Array.splice(index, 1)`. + * @param options Specifies whether this FormArray instance should emit events after a + * control is removed. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control is + * removed. When false, no events are emitted. + */ + removeAt(index, options = {}) { + let adjustedIndex = this._adjustIndex(index); + if (adjustedIndex < 0) adjustedIndex = 0; + if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => { + }); + this.controls.splice(adjustedIndex, 1); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + } + /** + * Replace an existing control. + * + * @param index Index in the array to replace the control. If `index` is negative, wraps around + * from the back. If `index` is greatly negative (less than `-length`), replaces the first + * element. This behavior is the same as `Array.splice(index, 1, control)`. + * @param control The `AbstractControl` control to replace the existing control + * @param options Specifies whether this FormArray instance should emit events after an + * existing control is replaced with a new one. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control is + * replaced with a new one. When false, no events are emitted. + */ + setControl(index, control, options = {}) { + let adjustedIndex = this._adjustIndex(index); + if (adjustedIndex < 0) adjustedIndex = 0; + if (this.controls[adjustedIndex]) this.controls[adjustedIndex]._registerOnCollectionChange(() => { + }); + this.controls.splice(adjustedIndex, 1); + if (control) { + this.controls.splice(adjustedIndex, 0, control); + this._registerControl(control); + } + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + this._onCollectionChange(); + } + /** + * Length of the control array. + */ + get length() { + return this.controls.length; + } + /** + * Sets the value of the `FormArray`. It accepts an array that matches + * the structure of the control. + * + * This method performs strict checks, and throws an error if you try + * to set the value of a control that doesn't exist or if you exclude the + * value of a control. + * + * @usageNotes + * ### Set the values for the controls in the form array + * + * ``` + * const arr = new FormArray([ + * new FormControl(), + * new FormControl() + * ]); + * console.log(arr.value); // [null, null] + * + * arr.setValue(['Nancy', 'Drew']); + * console.log(arr.value); // ['Nancy', 'Drew'] + * ``` + * + * @param value Array of values for the controls + * @param options Configure options that determine how the control propagates changes and + * emits events after the value changes + * + * * `onlySelf`: When true, each change only affects this control, and not its parent. Default + * is false. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` + * observables emit events with the latest status and value when the control value is updated. + * When false, no events are emitted. + * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity + * updateValueAndValidity} method. + */ + setValue(value, options = {}) { + assertAllValuesPresent(this, false, value); + value.forEach((newValue, index) => { + assertControlPresent(this, false, index); + this.at(index).setValue(newValue, { + onlySelf: true, + emitEvent: options.emitEvent + }); + }); + this.updateValueAndValidity(options); + } + /** + * Patches the value of the `FormArray`. It accepts an array that matches the + * structure of the control, and does its best to match the values to the correct + * controls in the group. + * + * It accepts both super-sets and sub-sets of the array without throwing an error. + * + * @usageNotes + * ### Patch the values for controls in a form array + * + * ``` + * const arr = new FormArray([ + * new FormControl(), + * new FormControl() + * ]); + * console.log(arr.value); // [null, null] + * + * arr.patchValue(['Nancy']); + * console.log(arr.value); // ['Nancy', null] + * ``` + * + * @param value Array of latest values for the controls + * @param options Configure options that determine how the control propagates changes and + * emits events after the value changes + * + * * `onlySelf`: When true, each change only affects this control, and not its parent. Default + * is false. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when the control + * value is updated. When false, no events are emitted. The configuration options are passed to + * the {@link AbstractControl#updateValueAndValidity updateValueAndValidity} method. + */ + patchValue(value, options = {}) { + if (value == null) return; + value.forEach((newValue, index) => { + if (this.at(index)) { + this.at(index).patchValue(newValue, { + onlySelf: true, + emitEvent: options.emitEvent + }); + } + }); + this.updateValueAndValidity(options); + } + /** + * Resets the `FormArray` and all descendants are marked `pristine` and `untouched`, and the + * value of all descendants to null or null maps. + * + * You reset to a specific form state by passing in an array of states + * that matches the structure of the control. The state is a standalone value + * or a form state object with both a value and a disabled status. + * + * @usageNotes + * ### Reset the values in a form array + * + * ```ts + * const arr = new FormArray([ + * new FormControl(), + * new FormControl() + * ]); + * arr.reset(['name', 'last name']); + * + * console.log(arr.value); // ['name', 'last name'] + * ``` + * + * ### Reset the values in a form array and the disabled status for the first control + * + * ``` + * arr.reset([ + * {value: 'name', disabled: true}, + * 'last' + * ]); + * + * console.log(arr.value); // ['last'] + * console.log(arr.at(0).status); // 'DISABLED' + * ``` + * + * @param value Array of values for the controls + * @param options Configure options that determine how the control propagates changes and + * emits events after the value changes + * + * * `onlySelf`: When true, each change only affects this control, and not its parent. Default + * is false. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` + * observables emit events with the latest status and value when the control is reset. + * When false, no events are emitted. + * The configuration options are passed to the {@link AbstractControl#updateValueAndValidity + * updateValueAndValidity} method. + */ + reset(value = [], options = {}) { + this._forEachChild((control, index) => { + control.reset(value[index], { + onlySelf: true, + emitEvent: options.emitEvent + }); + }); + this._updatePristine(options, this); + this._updateTouched(options, this); + this.updateValueAndValidity(options); + } + /** + * The aggregate value of the array, including any disabled controls. + * + * Reports all values regardless of disabled status. + */ + getRawValue() { + return this.controls.map((control) => control.getRawValue()); + } + /** + * Remove all controls in the `FormArray`. + * + * @param options Specifies whether this FormArray instance should emit events after all + * controls are removed. + * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and + * `valueChanges` observables emit events with the latest status and value when all controls + * in this FormArray instance are removed. When false, no events are emitted. + * + * @usageNotes + * ### Remove all elements from a FormArray + * + * ```ts + * const arr = new FormArray([ + * new FormControl(), + * new FormControl() + * ]); + * console.log(arr.length); // 2 + * + * arr.clear(); + * console.log(arr.length); // 0 + * ``` + * + * It's a simpler and more efficient alternative to removing all elements one by one: + * + * ```ts + * const arr = new FormArray([ + * new FormControl(), + * new FormControl() + * ]); + * + * while (arr.length) { + * arr.removeAt(0); + * } + * ``` + */ + clear(options = {}) { + if (this.controls.length < 1) return; + this._forEachChild((control) => control._registerOnCollectionChange(() => { + })); + this.controls.splice(0); + this.updateValueAndValidity({ + emitEvent: options.emitEvent + }); + } + /** + * Adjusts a negative index by summing it with the length of the array. For very negative + * indices, the result may remain negative. + * @internal + */ + _adjustIndex(index) { + return index < 0 ? index + this.length : index; + } + /** @internal */ + _syncPendingControls() { + let subtreeUpdated = this.controls.reduce((updated, child) => { + return child._syncPendingControls() ? true : updated; + }, false); + if (subtreeUpdated) this.updateValueAndValidity({ + onlySelf: true + }); + return subtreeUpdated; + } + /** @internal */ + _forEachChild(cb) { + this.controls.forEach((control, index) => { + cb(control, index); + }); + } + /** @internal */ + _updateValue() { + this.value = this.controls.filter((control) => control.enabled || this.disabled).map((control) => control.value); + } + /** @internal */ + _anyControls(condition) { + return this.controls.some((control) => control.enabled && condition(control)); + } + /** @internal */ + _setUpControls() { + this._forEachChild((control) => this._registerControl(control)); + } + /** @internal */ + _allControlsDisabled() { + for (const control of this.controls) { + if (control.enabled) return false; + } + return this.controls.length > 0 || this.disabled; + } + _registerControl(control) { + control.setParent(this); + control._registerOnCollectionChange(this._onCollectionChange); + } + /** @internal */ + _find(name) { + return this.at(name) ?? null; + } +}; +var UntypedFormArray = FormArray; +var isFormArray = (control) => control instanceof FormArray; +function isAbstractControlOptions(options) { + return !!options && (options.asyncValidators !== void 0 || options.validators !== void 0 || options.updateOn !== void 0); +} +var FormBuilder = class _FormBuilder { + constructor() { + this.useNonNullable = false; + } + /** + * @description + * Returns a FormBuilder in which automatically constructed `FormControl` elements + * have `{nonNullable: true}` and are non-nullable. + * + * **Constructing non-nullable controls** + * + * When constructing a control, it will be non-nullable, and will reset to its initial value. + * + * ```ts + * let nnfb = new FormBuilder().nonNullable; + * let name = nnfb.control('Alex'); // FormControl + * name.reset(); + * console.log(name); // 'Alex' + * ``` + * + * **Constructing non-nullable groups or arrays** + * + * When constructing a group or array, all automatically created inner controls will be + * non-nullable, and will reset to their initial values. + * + * ```ts + * let nnfb = new FormBuilder().nonNullable; + * let name = nnfb.group({who: 'Alex'}); // FormGroup<{who: FormControl}> + * name.reset(); + * console.log(name); // {who: 'Alex'} + * ``` + * **Constructing *nullable* fields on groups or arrays** + * + * It is still possible to have a nullable field. In particular, any `FormControl` which is + * *already* constructed will not be altered. For example: + * + * ```ts + * let nnfb = new FormBuilder().nonNullable; + * // FormGroup<{who: FormControl}> + * let name = nnfb.group({who: new FormControl('Alex')}); + * name.reset(); console.log(name); // {who: null} + * ``` + * + * Because the inner control is constructed explicitly by the caller, the builder has + * no control over how it is created, and cannot exclude the `null`. + */ + get nonNullable() { + const nnfb = new _FormBuilder(); + nnfb.useNonNullable = true; + return nnfb; + } + group(controls, options = null) { + const reducedControls = this._reduceControls(controls); + let newOptions = {}; + if (isAbstractControlOptions(options)) { + newOptions = options; + } else if (options !== null) { + newOptions.validators = options.validator; + newOptions.asyncValidators = options.asyncValidator; + } + return new FormGroup(reducedControls, newOptions); + } + /** + * @description + * Constructs a new `FormRecord` instance. Accepts a single generic argument, which is an object + * containing all the keys and corresponding inner control types. + * + * @param controls A collection of child controls. The key for each child is the name + * under which it is registered. + * + * @param options Configuration options object for the `FormRecord`. The object should have the + * `AbstractControlOptions` type and might contain the following fields: + * * `validators`: A synchronous validator function, or an array of validator functions. + * * `asyncValidators`: A single async validator or array of async validator functions. + * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' + * | submit'). + */ + record(controls, options = null) { + const reducedControls = this._reduceControls(controls); + return new FormRecord(reducedControls, options); + } + /** + * @description + * Constructs a new `FormControl` with the given state, validators and options. Sets + * `{nonNullable: true}` in the options to get a non-nullable control. Otherwise, the + * control will be nullable. Accepts a single generic argument, which is the type of the + * control's value. + * + * @param formState Initializes the control with an initial state value, or + * with an object that contains both a value and a disabled status. + * + * @param validatorOrOpts A synchronous validator function, or an array of + * such functions, or a `FormControlOptions` object that contains + * validation functions and a validation trigger. + * + * @param asyncValidator A single async validator or array of async validator + * functions. + * + * @usageNotes + * + * ### Initialize a control as disabled + * + * The following example returns a control with an initial value in a disabled state. + * + * + * + */ + control(formState, validatorOrOpts, asyncValidator) { + let newOptions = {}; + if (!this.useNonNullable) { + return new FormControl(formState, validatorOrOpts, asyncValidator); + } + if (isAbstractControlOptions(validatorOrOpts)) { + newOptions = validatorOrOpts; + } else { + newOptions.validators = validatorOrOpts; + newOptions.asyncValidators = asyncValidator; + } + return new FormControl(formState, __spreadProps(__spreadValues({}, newOptions), { + nonNullable: true + })); + } + /** + * Constructs a new `FormArray` from the given array of configurations, + * validators and options. Accepts a single generic argument, which is the type of each control + * inside the array. + * + * @param controls An array of child controls or control configs. Each child control is given an + * index when it is registered. + * + * @param validatorOrOpts A synchronous validator function, or an array of such functions, or an + * `AbstractControlOptions` object that contains + * validation functions and a validation trigger. + * + * @param asyncValidator A single async validator or array of async validator functions. + */ + array(controls, validatorOrOpts, asyncValidator) { + const createdControls = controls.map((c) => this._createControl(c)); + return new FormArray(createdControls, validatorOrOpts, asyncValidator); + } + /** @internal */ + _reduceControls(controls) { + const createdControls = {}; + Object.keys(controls).forEach((controlName) => { + createdControls[controlName] = this._createControl(controls[controlName]); + }); + return createdControls; + } + /** @internal */ + _createControl(controls) { + if (controls instanceof FormControl) { + return controls; + } else if (controls instanceof AbstractControl) { + return controls; + } else if (Array.isArray(controls)) { + const value = controls[0]; + const validator = controls.length > 1 ? controls[1] : null; + const asyncValidator = controls.length > 2 ? controls[2] : null; + return this.control(value, validator, asyncValidator); + } else { + return this.control(controls); + } + } + static { + this.ɵfac = function FormBuilder_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormBuilder)(); + }; + } + static { + this.ɵprov = ɵɵdefineInjectable({ + token: _FormBuilder, + factory: _FormBuilder.ɵfac, + providedIn: "root" + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormBuilder, [{ + type: Injectable, + args: [{ + providedIn: "root" + }] + }], null, null); +})(); +var NonNullableFormBuilder = class _NonNullableFormBuilder { + static { + this.ɵfac = function NonNullableFormBuilder_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NonNullableFormBuilder)(); + }; + } + static { + this.ɵprov = ɵɵdefineInjectable({ + token: _NonNullableFormBuilder, + factory: () => (() => inject(FormBuilder).nonNullable)(), + providedIn: "root" + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NonNullableFormBuilder, [{ + type: Injectable, + args: [{ + providedIn: "root", + useFactory: () => inject(FormBuilder).nonNullable + }] + }], null, null); +})(); +var UntypedFormBuilder = class _UntypedFormBuilder extends FormBuilder { + group(controlsConfig, options = null) { + return super.group(controlsConfig, options); + } + /** + * Like `FormBuilder#control`, except the resulting control is untyped. + */ + control(formState, validatorOrOpts, asyncValidator) { + return super.control(formState, validatorOrOpts, asyncValidator); + } + /** + * Like `FormBuilder#array`, except the resulting array is untyped. + */ + array(controlsConfig, validatorOrOpts, asyncValidator) { + return super.array(controlsConfig, validatorOrOpts, asyncValidator); + } + static { + this.ɵfac = /* @__PURE__ */ (() => { + let ɵUntypedFormBuilder_BaseFactory; + return function UntypedFormBuilder_Factory(__ngFactoryType__) { + return (ɵUntypedFormBuilder_BaseFactory || (ɵUntypedFormBuilder_BaseFactory = ɵɵgetInheritedFactory(_UntypedFormBuilder)))(__ngFactoryType__ || _UntypedFormBuilder); + }; + })(); + } + static { + this.ɵprov = ɵɵdefineInjectable({ + token: _UntypedFormBuilder, + factory: _UntypedFormBuilder.ɵfac, + providedIn: "root" + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(UntypedFormBuilder, [{ + type: Injectable, + args: [{ + providedIn: "root" + }] + }], null, null); +})(); +var VERSION = new Version("18.2.8"); +var FormsModule = class _FormsModule { + /** + * @description + * Provides options for configuring the forms module. + * + * @param opts An object of configuration options + * * `callSetDisabledState` Configures whether to `always` call `setDisabledState`, which is more + * correct, or to only call it `whenDisabled`, which is the legacy behavior. + */ + static withConfig(opts) { + return { + ngModule: _FormsModule, + providers: [{ + provide: CALL_SET_DISABLED_STATE, + useValue: opts.callSetDisabledState ?? setDisabledStateDefault + }] + }; + } + static { + this.ɵfac = function FormsModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormsModule)(); + }; + } + static { + this.ɵmod = ɵɵdefineNgModule({ + type: _FormsModule, + declarations: [NgModel, NgModelGroup, NgForm], + exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm] + }); + } + static { + this.ɵinj = ɵɵdefineInjector({ + imports: [ɵInternalFormsSharedModule] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormsModule, [{ + type: NgModule, + args: [{ + declarations: TEMPLATE_DRIVEN_DIRECTIVES, + exports: [ɵInternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES] + }] + }], null, null); +})(); +var ReactiveFormsModule = class _ReactiveFormsModule { + /** + * @description + * Provides options for configuring the reactive forms module. + * + * @param opts An object of configuration options + * * `warnOnNgModelWithFormControl` Configures when to emit a warning when an `ngModel` + * binding is used with reactive form directives. + * * `callSetDisabledState` Configures whether to `always` call `setDisabledState`, which is more + * correct, or to only call it `whenDisabled`, which is the legacy behavior. + */ + static withConfig(opts) { + return { + ngModule: _ReactiveFormsModule, + providers: [{ + provide: NG_MODEL_WITH_FORM_CONTROL_WARNING, + useValue: opts.warnOnNgModelWithFormControl ?? "always" + }, { + provide: CALL_SET_DISABLED_STATE, + useValue: opts.callSetDisabledState ?? setDisabledStateDefault + }] + }; + } + static { + this.ɵfac = function ReactiveFormsModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ReactiveFormsModule)(); + }; + } + static { + this.ɵmod = ɵɵdefineNgModule({ + type: _ReactiveFormsModule, + declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName], + exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName] + }); + } + static { + this.ɵinj = ɵɵdefineInjector({ + imports: [ɵInternalFormsSharedModule] + }); + } +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ReactiveFormsModule, [{ + type: NgModule, + args: [{ + declarations: [REACTIVE_DRIVEN_DIRECTIVES], + exports: [ɵInternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES] + }] + }], null, null); +})(); +export { + 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 +}; +/*! Bundled license information: + +@angular/forms/fesm2022/forms.mjs: + (** + * @license Angular v18.2.8 + * (c) 2010-2024 Google LLC. https://angular.io/ + * License: MIT + *) +*/ +//# sourceMappingURL=@angular_forms.js.map diff --git a/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js.map b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js.map new file mode 100644 index 00000000..43e1fda9 --- /dev/null +++ b/Angular-JS-Projects/Advanced/Contact-Manager/.angular/cache/18.2.8/contact-manager/vite/deps/@angular_forms.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../../../node_modules/@angular/forms/fesm2022/forms.mjs"], + "sourcesContent": ["/**\n * @license Angular v18.2.8\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, forwardRef, Optional, Inject, ɵisPromise, ɵisSubscribable, ɵRuntimeError, Self, computed, signal, untracked, EventEmitter, Input, Host, SkipSelf, booleanAttribute, ChangeDetectorRef, Output, Injectable, inject, NgModule, Version } from '@angular/core';\nimport { ɵgetDOM } from '@angular/common';\nimport { from, forkJoin, 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 constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * The registered callback function called when a change or input event occurs on the input\n * element.\n * @nodoc\n */\n this.onChange = _ => {};\n /**\n * The registered callback function called when a blur event occurs on the input element.\n * @nodoc\n */\n this.onTouched = () => {};\n }\n /**\n * Helper method that sets a property on a target element using the current Renderer\n * implementation.\n * @nodoc\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 * @nodoc\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Registers a function called when the control value changes.\n * @nodoc\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * Sets the \"disabled\" property on the range input element.\n * @nodoc\n */\n setDisabledState(isDisabled) {\n this.setProperty('disabled', isDisabled);\n }\n static {\n this.ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseControlValueAccessor\n });\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 {\n this.ɵ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 }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BuiltInControlValueAccessor,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\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 * ```\n * \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 * @nodoc\n */\n writeValue(value) {\n this.setProperty('checked', value);\n }\n static {\n this.ɵ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 }\n static {\n this.ɵ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 features: [i0.ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\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($event.target.checked)',\n '(blur)': 'onTouched()'\n },\n providers: [CHECKBOX_VALUE_ACCESSOR]\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 * ```\n * \n * ```\n *\n * This value accessor is used by default for `` and `