diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/.tsbuildinfo b/.angular/cache/19.1.5/nombre-del-proyecto/.tsbuildinfo new file mode 100644 index 0000000..55327f0 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/.tsbuildinfo @@ -0,0 +1 @@ +{"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.dom.iterable.d.ts","../../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../../node_modules/typescript/lib/lib.scripthost.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.arraybuffer.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.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/typescript/lib/lib.es2022.full.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","../../../../src/app/app.component.ngtypecheck.ts","../../../../src/app/models/persona.model.ngtypecheck.ts","../../../../src/app/models/persona.model.ts","../../../../src/app/services/api.service.ngtypecheck.ts","../../../../src/app/services/api.service.ts","../../../../src/app/components/lista-personas/lista-personas.component.ngtypecheck.ts","../../../../src/app/components/lista-personas/lista-personas.component.ts","../../../../src/app/components/formulario-persona/formulario-persona.component.ngtypecheck.ts","../../../../node_modules/@angular/forms/index.d.ts","../../../../src/app/components/formulario-persona/formulario-persona.component.ts","../../../../src/app/app.component.ts","../../../../src/main.ts","../../../../src/main.server.ngtypecheck.ts","../../../../src/app/app.config.server.ngtypecheck.ts","../../../../node_modules/@angular/animations/index.d.ts","../../../../node_modules/@angular/animations/browser/index.d.ts","../../../../node_modules/@angular/platform-browser/animations/index.d.ts","../../../../node_modules/@angular/platform-server/index.d.ts","../../../../node_modules/beasties/dist/index.d.ts","../../../../node_modules/@angular/ssr/index.d.ts","../../../../src/app/app.routes.server.ngtypecheck.ts","../../../../src/app/app.routes.server.ts","../../../../src/app/app.config.server.ts","../../../../src/main.server.ts","../../../../src/server.ngtypecheck.ts","../../../../node_modules/@angular/ssr/node/index.d.ts","../../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../node_modules/@types/node/compatibility/index.d.ts","../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/buffer/index.d.ts","../../../../node_modules/undici-types/header.d.ts","../../../../node_modules/undici-types/readable.d.ts","../../../../node_modules/undici-types/file.d.ts","../../../../node_modules/undici-types/fetch.d.ts","../../../../node_modules/undici-types/formdata.d.ts","../../../../node_modules/undici-types/connector.d.ts","../../../../node_modules/undici-types/client.d.ts","../../../../node_modules/undici-types/errors.d.ts","../../../../node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/undici-types/global-origin.d.ts","../../../../node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/undici-types/pool.d.ts","../../../../node_modules/undici-types/handlers.d.ts","../../../../node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/undici-types/agent.d.ts","../../../../node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/undici-types/mock-client.d.ts","../../../../node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/undici-types/api.d.ts","../../../../node_modules/undici-types/cookies.d.ts","../../../../node_modules/undici-types/patch.d.ts","../../../../node_modules/undici-types/filereader.d.ts","../../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/undici-types/websocket.d.ts","../../../../node_modules/undici-types/content-type.d.ts","../../../../node_modules/undici-types/cache.d.ts","../../../../node_modules/undici-types/interceptors.d.ts","../../../../node_modules/undici-types/index.d.ts","../../../../node_modules/@types/node/globals.d.ts","../../../../node_modules/@types/node/assert.d.ts","../../../../node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/@types/node/buffer.d.ts","../../../../node_modules/@types/node/child_process.d.ts","../../../../node_modules/@types/node/cluster.d.ts","../../../../node_modules/@types/node/console.d.ts","../../../../node_modules/@types/node/constants.d.ts","../../../../node_modules/@types/node/crypto.d.ts","../../../../node_modules/@types/node/dgram.d.ts","../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/@types/node/dns.d.ts","../../../../node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/@types/node/domain.d.ts","../../../../node_modules/@types/node/dom-events.d.ts","../../../../node_modules/@types/node/events.d.ts","../../../../node_modules/@types/node/fs.d.ts","../../../../node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/@types/node/http.d.ts","../../../../node_modules/@types/node/http2.d.ts","../../../../node_modules/@types/node/https.d.ts","../../../../node_modules/@types/node/inspector.d.ts","../../../../node_modules/@types/node/module.d.ts","../../../../node_modules/@types/node/net.d.ts","../../../../node_modules/@types/node/os.d.ts","../../../../node_modules/@types/node/path.d.ts","../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/@types/node/process.d.ts","../../../../node_modules/@types/node/punycode.d.ts","../../../../node_modules/@types/node/querystring.d.ts","../../../../node_modules/@types/node/readline.d.ts","../../../../node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/@types/node/repl.d.ts","../../../../node_modules/@types/node/stream.d.ts","../../../../node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/@types/node/stream/web.d.ts","../../../../node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/@types/node/test.d.ts","../../../../node_modules/@types/node/timers.d.ts","../../../../node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/@types/node/tls.d.ts","../../../../node_modules/@types/node/trace_events.d.ts","../../../../node_modules/@types/node/tty.d.ts","../../../../node_modules/@types/node/url.d.ts","../../../../node_modules/@types/node/util.d.ts","../../../../node_modules/@types/node/v8.d.ts","../../../../node_modules/@types/node/vm.d.ts","../../../../node_modules/@types/node/wasi.d.ts","../../../../node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/@types/node/zlib.d.ts","../../../../node_modules/@types/node/index.d.ts","../../../../node_modules/@types/mime/index.d.ts","../../../../node_modules/@types/send/index.d.ts","../../../../node_modules/@types/qs/index.d.ts","../../../../node_modules/@types/range-parser/index.d.ts","../../../../node_modules/@types/express-serve-static-core/index.d.ts","../../../../node_modules/@types/http-errors/index.d.ts","../../../../node_modules/@types/serve-static/index.d.ts","../../../../node_modules/@types/connect/index.d.ts","../../../../node_modules/@types/body-parser/index.d.ts","../../../../node_modules/@types/express/index.d.ts","../../../../src/server.ts"],"fileIdsList":[[258,281,298,336],[258,298,336],[255,258,259,298,336],[255,258,298,336],[255,256,257,258,298,336],[298,336],[258,261,282,298,336],[258,259,260,298,336],[258,261,283,298,336],[255,258,259,261,263,298,336],[258,263,285,298,336],[258,298,336,351,352],[298,336,351,384,392],[298,336,351,384],[298,336,348,351,384,386,387,388],[298,336,387,389,391,393],[298,333,336],[298,335,336],[336],[298,336,341,369],[298,336,337,348,349,356,366,377],[298,336,337,338,348,356],[293,294,295,298,336],[298,336,339,378],[298,336,340,341,349,357],[298,336,341,366,374],[298,336,342,344,348,356],[298,335,336,343],[298,336,344,345],[298,336,348],[298,336,346,348],[298,335,336,348],[298,336,348,349,350,366,377],[298,336,348,349,350,363,366,369],[298,331,336,382],[298,336,344,348,351,356,366,377],[298,336,348,349,351,352,356,366,374,377],[298,336,351,353,366,374,377],[296,297,298,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383],[298,336,348,354],[298,336,355,377,382],[298,336,344,348,356,366],[298,336,357],[298,336,358],[298,335,336,359],[298,336,360,376,382],[298,336,361],[298,336,362],[298,336,348,363,364],[298,336,363,365,378,380],[298,336,348,366,367,368,369],[298,336,366,368],[298,336,366,367],[298,336,369],[298,336,370],[298,336,366],[298,336,348,372,373],[298,336,372,373],[298,336,341,356,366,374],[298,336,375],[298,336,356,376],[298,336,351,362,377],[298,336,341,378],[298,336,366,379],[298,336,355,380],[298,336,381],[298,336,341,348,350,359,366,377,380,382],[298,336,366,383],[298,336,349,366,384,385],[298,336,351,384,386,390],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,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,183,184,186,187,188,190,199,201,202,203,204,205,206,208,209,211,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,298,336],[112,298,336],[68,71,298,336],[70,298,336],[70,71,298,336],[67,68,69,71,298,336],[68,70,71,228,298,336],[71,298,336],[67,70,112,298,336],[70,71,228,298,336],[70,236,298,336],[68,70,71,298,336],[80,298,336],[103,298,336],[124,298,336],[70,71,112,298,336],[71,119,298,336],[70,71,112,130,298,336],[70,71,130,298,336],[71,171,298,336],[71,112,298,336],[67,71,189,298,336],[67,71,190,298,336],[212,298,336],[196,198,298,336],[207,298,336],[196,298,336],[67,71,189,196,197,298,336],[189,190,198,298,336],[210,298,336],[67,71,196,197,198,298,336],[69,70,71,298,336],[67,71,298,336],[68,70,190,191,192,193,298,336],[112,190,191,192,193,298,336],[190,192,298,336],[70,191,192,194,195,199,298,336],[67,70,298,336],[71,214,298,336],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,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,183,184,185,186,187,298,336],[200,298,336],[64,298,336],[298,308,312,336,377],[298,308,336,366,377],[298,303,336],[298,305,308,336,374,377],[298,336,356,374],[298,336,384],[298,303,336,384],[298,305,308,336,356,377],[298,300,301,304,307,336,348,366,377],[298,300,306,336],[298,304,308,336,369,377,384],[298,324,336,384],[298,302,303,336,384],[298,308,336],[298,302,303,304,305,306,307,308,309,310,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,336],[298,308,315,316,336],[298,306,308,316,317,336],[298,307,336],[298,300,303,308,336],[298,308,312,316,317,336],[298,312,336],[298,306,308,311,336,377],[298,300,305,306,308,312,315,336],[298,303,308,324,336,382,384],[65,298,336],[65,258,267,269,271,273,276,298,336],[65,258,266,280,284,286,288,298,336],[65,258,260,261,262,263,265,298,336],[65,286,287,298,336],[65,263,264,298,336],[65,258,269,271,274,275,298,336],[65,258,259,269,271,272,298,336],[65,268,298,336],[65,255,258,260,269,270,298,336],[65,261,277,279,289,298,336],[65,66,261,266,277,298,336],[65,291,292,298,336,358,377,394]],"fileInfos":[{"version":"e41c290ef7dd7dab3493e6cbe5909e0148edf4a8dad0271be08edec368a0f7b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"4fd3f3422b2d2a3dfd5cdd0f387b3a8ec45f006c6ea896a4cb41264c2100bb2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"62bb211266ee48b2d0edf0d8d1b191f0c24fc379a82bd4c1692a082c540bc6b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1e2a172204962276504466a6393426d2ca9c54894b1ad0a6c9dad867a65f876","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93",{"version":"ecf5cb089ea438f2545e04b6c52828c68d0b0f4bfaa661986faf36da273e9892","impliedFormat":1},{"version":"95444fb6292d5e2f7050d7021383b719c0252bf5f88854973977db9e3e3d8006","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"06540a9f3f2f88375ada0b89712de1c4310f7398d821c4c10ab5c6477dafb4bc","impliedFormat":1},{"version":"de2d3120ed0989dbc776de71e6c0e8a6b4bf1935760cf468ff9d0e9986ef4c09","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"97bdf234f5db52085d99c6842db560bca133f8a0413ff76bf830f5f38f088ce3","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"b493ff8a5175cbbb4e6e8bcfa9506c08f5a7318b2278365cfca3b397c9710ebc","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"303ee143a869e8f605e7b1d12be6c7269d4cab90d230caba792495be595d4f56","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"a5eb4835ab561c140ffc4634bb039387d5d0cceebb86918f1696c7ac156d26fd","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"4252b852dd791305da39f6e1242694c2e560d5e46f9bb26e2aca77252057c026","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"ba13c7d46a560f3d4df8ffb1110e2bbec5801449af3b1240a718514b5576156e","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"05c4e2a992bb83066a3a648bad1c310cecd4d0628d7e19545bb107ac9596103a","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"dd6c3362aaaec60be028b4ba292806da8e7020eef7255c7414ce4a5c3a7138ef","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"3114b315cd0687aad8b57cff36f9c8c51f5b1bc6254f1b1e8446ae583d8e2474","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"af733cb878419f3012f0d4df36f918a69ba38d73f3232ba1ab46ef9ede6cb29c","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"0a01b0b5a9e87d04737084731212106add30f63ec640169f1462ba2e44b6b3a8","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"e07d62a8a9a3bb65433a62e9bbf400c6bfd2df4de60652af4d738303ee3670a1","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"851e8d57d6dd17c71e9fa0319abd20ab2feb3fb674d0801611a09b7a25fd281c","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"748e79252a7f476f8f28923612d7696b214e270cc909bc685afefaac8f052af0","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"c3f32a185cd27ac232d3428a8d9b362c3f7b4892a58adaaa022828a7dcd13eed","impliedFormat":1},{"version":"3139c3e5e09251feec7a87f457084bee383717f3626a7f1459d053db2f34eb76","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"3be870c8e17ec14f1c18fc248f5d2c4669e576404744ff5c63e6dafcf05b97ea","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"6ab380571d87bd1d6f644fb6ab7837239d54b59f07dc84347b1341f866194214","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"7c9ed7ffdc6f843ab69e5b2a3e7f667b050dd8d24d0052db81e35480f6d4e15d","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"3656f0584d5a7ee0d0f2cc2b9cffbb43af92e80186b2ce160ebd4421d1506655","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"90f690a1c5fcb4c2d19c80fea05c8ab590d8f6534c4c296d70af6293ede67366","impliedFormat":1},{"version":"be95e987818530082c43909be722a838315a0fc5deb6043de0a76f5221cbad24","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"1f6058d60eaa8825f59d4b76bbf6cc0e6ad9770948be58de68587b0931da00cc","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"50100b1a91f61d81ca3329a98e64b7f05cddc5e3cb26b3411adc137c9c631aca","impliedFormat":1},{"version":"11aceaee5663b4ed597544567d6e6a5a94b66857d7ebd62a9875ea061018cd2c","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"669b754ec246dd7471e19b655b73bda6c2ca5bb7ccb1a4dff44a9ae45b6a716a","impliedFormat":1},{"version":"4bb6035e906946163ecfaec982389d0247ceeac6bdee7f1d07c03d9c224db3aa","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"c82857a876075e665bbcc78213abfe9e9b0206d502379576d7abd481ade3a569","impliedFormat":1},{"version":"4f71d883ed6f398ba8fe11fcd003b44bb5f220f840b3eac3c395ad91304e4620","impliedFormat":1},{"version":"5229c3934f58413f34f1b26c01323c93a5a65a2d9f2a565f216590dfbed1fe32","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"4c754b03f36ff35fc539f9ebb5f024adbb73ec2d3e4bfb35b385a05abb36a50e","impliedFormat":1},{"version":"59507446213e73654d6979f3b82dadc4efb0ed177425ae052d96a3f5a5be0d35","impliedFormat":1},{"version":"a914be97ca7a5be670d1545fc0691ac3fbabd023d7d084b338f6934349798a1f","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"87437ca9dabab3a41d483441696ff9220a19e713f58e0b6a99f1731af10776d7","impliedFormat":1},{"version":"26c5dfa9aa4e6428f4bb7d14cbf72917ace69f738fa92480b9749eebce933370","impliedFormat":1},{"version":"8e94328e7ca1a7a517d1aa3c569eac0f6a44f67473f6e22c2c4aff5f9f4a9b38","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"299f0af797897d77685d606502be72846b3d1f0dc6a2d8c964e9ea3ccbacf5bc","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"3c97b5ea66276cf463525a6aa9d5bb086bf5e05beac70a0597cda2575503b57b","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"a31383256374723b47d8b5497a9558bbbcf95bcecfb586a36caf7bfd3693eb0e","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"64aa66c7458cbfd0f48f88070b08c2f66ae94aba099dac981f17c2322d147c06","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"9814545517193cf51127d7fbdc3b7335688206ec04ee3a46bba2ee036bd0dcac","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"31540d6d638be02c5587e0f4e8cbccc73d201c0ea1f8c2f4df8a4d1bafb73ac8","impliedFormat":99},{"version":"4f54d98c13e71d688d3fd9a658fe6e576d49ea86d92ad02f7e3a9ceea1ada8a2","impliedFormat":99},{"version":"8686f06c1703d1ea84e8d9d85bec9216b0908bd6feb4f79023c140a67b05d962","impliedFormat":99},{"version":"f165f4271d197f41d3160572d3f39fe5321ab6e102714065b9457b1c912e953b","impliedFormat":99},{"version":"da824dca23b783c9f116c03e35c0df59100f4bfb7bdb50efd73132a6aa2206ba","impliedFormat":99},{"version":"19a30c4c328320c7e9e49207f5615cd06b83300172ea437735c3e120af2bad76","impliedFormat":99},"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93",{"version":"aa357dab91ece6130e0492bd6969c5cc235331297bd0d5af16165211ae710a2e","impliedFormat":99},"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","e9dae25e22d9fe37472c3d164f53e36ea1eb00ffe8fe2e5d5a0225b927d86e46",{"version":"a7d454cdd1270ac548aa8e12f21469bcb8d734565233088bda8f5b8dbea18d68","signature":"55bb18d80ab4836734d6b6075750b673bec340bcaed10fed842407a1fdeb3657"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"bfc81e7711adae033924b23277d825ab8bcf2c4c651ace0ef0de2b6d7bde20ee","signature":"18a9cbea509fee940fa5fca7712fdfe3733d633b875edf422bcef4882a9c2eef"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"5701d3bbdc0bb9a8e0ec44508e51d99287f449b8ce1e236e9f3e0cc26b4247ff","signature":"6fb6dc88cc53e39e7f85ec35be09d89af2688be5c25a119aa1dcfcd1ee4d3c37"},{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},"d9506c4579655197d809ebf98acd4eb9bff00aacea7654b8bdb88e1184fef0eb",{"version":"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","signature":"da14a67372982ca6e605fea114900b492b3316618581634e0ce72afbcb09baca"},{"version":"de9f1575ae3333046b7c4bafc62ba76f5c4a8451364a5c9bc5587a213308e9c8","impliedFormat":99},"274f2618c00e7eebb4c65da0ce828eeee803acd64a120fd4fa58cb0a239f0aac","65a78a7c46bdd26fc04118ea593c73d1519f4638b4782a7bc806861d7b566520","abed2fcecfc488c97265276567a7eaeac7acb0abf954ab6fd6ccfbab2243b3e5","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93",{"version":"62cae85a66cc6a8dcc4b9879d21bd2f6f1be5e919ff0b835f4f2991d401d2b74","impliedFormat":99},{"version":"b7f844f09b76315f75b2f46d5ebf822f1b7b20aeb806e064825ceecaa6f2a0dd","impliedFormat":99},{"version":"9fee7289e89752cb7edd480af079ac3c7f1a2869f607281b3e478af1f2bb07d3","impliedFormat":99},{"version":"20cadf53842c25050cef89fff86a4b5f859f20972c47f8c739fa1530449e44bc","impliedFormat":99},{"version":"0b70bb92766dbed84ea44c1bd32e942d3c1d712b98524361cf279acff654ac30","impliedFormat":1},{"version":"302c49d391a3208b8ec843dc11bad57444f2e455b85baf39e828396f3e86d8d5","impliedFormat":99},"ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93","f0e1b8d3125c9e08033c41fc565674fc76b2e6ebd58cb25feae87dd79e24a82f","37e657b3295c0782d352b9bad4c8106123fecc029c86c4ba04ac0227952d7930","7adc736dd362f3694bfa0ead421710e99a78f81ba82ca176f190f95d452ea921","ddd578018a259d1c494c834bdd8707769d07d1eb64f87f5217560cd2181b9e93",{"version":"51af265515da7ec37ec677df4b01d0e81ab76acce329b38afc4bd60de0199f4d","impliedFormat":99},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc91c6f9d1525539cde4e44eae857f794abfe4000cb91f3810054aa40aed8d6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","impliedFormat":1},{"version":"3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","impliedFormat":1},{"version":"e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","impliedFormat":1},{"version":"471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","impliedFormat":1},{"version":"c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","impliedFormat":1},{"version":"40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","impliedFormat":1},{"version":"8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","impliedFormat":1},{"version":"4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1","impliedFormat":1},{"version":"5d4ba56f688207f1a47cf761ebe8987973e5bf9db6506edc160e211aa9f1dd51","affectsGlobalScope":true,"impliedFormat":1},{"version":"2aadab4729954c700a3ae50977f5611a8487dc3e3dc0e7f8fcd57f40475260a8","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"39b1a50d543770780b0409a4caacb87f3ff1d510aedfeb7dc06ed44188256f89","impliedFormat":1},{"version":"bd65dce9d4c997d308be95bbb0a81830a6f95383ee1fd8db5fa08bbbdd74b0ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"51bb58ef3a22fdc49a2d338a852050855d1507f918d4d7fa77a68d72fee9f780","impliedFormat":1},{"version":"9b8d21812a10cba340a3e8dfacd5e883f6ccec7603eae4038fa90a0684fa9a07","impliedFormat":1},{"version":"cef8931bc129687165253f0642427c2a72705a4613b3ac461b9fa78c7cdaef32","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"0c5de3b3b7d7cd0da81ad4cc12742fc1b7576d1d3ed46da5cd7678999da9d8d8","impliedFormat":1},{"version":"f8375506002c556ec412c7e2a5a9ece401079ee5d9eb2c1372e9f5377fac56c7","impliedFormat":1},{"version":"1c611ff373ce1958aafc40b328048ac2540ba5c7f373cf2897e0d9aeaabe90a0","impliedFormat":1},{"version":"548d9051fd6a3544216aec47d3520ce922566c2508df667a1b351658b2e46b8d","impliedFormat":1},{"version":"c175f4dd3b15b38833abfe19acb8ee38c6be2f80f5964b01a4354cafb676a428","impliedFormat":1},{"version":"b9a4824bb83f25d6d227394db2ed99985308cf2a3a35f0d6d39aa72b15473982","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b84f34005e497dbc0c1948833818cdb38e8c01ff4f88d810b4d70aa2e6c52916","affectsGlobalScope":true,"impliedFormat":1},{"version":"4895fb67bd110c576d2c25db1a9369e7682ad26b2dcbecbdb0c621c3f6c94298","impliedFormat":1},{"version":"ab212d4276d07309bac9ccc93e24ad5ad1049e14f538344886221c2be7deef05","impliedFormat":1},{"version":"ebb5c9851a8e8cf67e61c41107ddcb8a3810f9612e1ee9624b753bdfb939c936","impliedFormat":1},{"version":"6b3c4aa0ce6eb9cf6187e61d352cd269ff0e492f333ae102dda121e76f90285c","impliedFormat":1},{"version":"565fda33feca88f4b5db23ba8e605da1fd28b6d63292d276bdbd2afe6cd4c490","impliedFormat":1},{"version":"e822320b448edce0c7ede9cbeada034c72e1f1c8c8281974817030564c63dcb1","impliedFormat":1},{"version":"ebfc5ac063aa88ab26982757a8a9e6e9299306a5f9ea3e03ea5fd78c23dc5d79","affectsGlobalScope":true,"impliedFormat":1},{"version":"16bc7fc733bade239218d2f4351b0b53d7482c5aa917e5e12cf294c688f2e1b3","impliedFormat":1},{"version":"31682ca32a4013297ef3f483bd4de7f7a4818d9c1d52c29aaca24f78a737d90d","impliedFormat":1},{"version":"17bc38afc78d40b2f54af216c0cc31a4bd0c6897a5945fa39945dfc43260be2c","impliedFormat":1},{"version":"0e6726f7ab7649f3c668f4eadb45461dcfaab2c5899dd7db1e08f8a63905eb94","affectsGlobalScope":true,"impliedFormat":1},{"version":"d08f621e4ba70d9379d90f63ad101d5468e75782eff3dddc9866449ecc41a44f","affectsGlobalScope":true,"impliedFormat":1},{"version":"de905bc5f7e7a81cb420e212b95ab5e3ab840f93e0cfa8ce879f6e7fa465d4a2","impliedFormat":1},{"version":"91b64f6b37cfe86783b9a24d366f4c6c331c3ffb82926c60107cbc09960db804","impliedFormat":1},{"version":"bede3143eeddca3b8ec3592b09d7eb02042f9e195251040c5146eac09b173236","impliedFormat":1},{"version":"64a40cf4ec8a7a29db2b4bc35f042e5be8537c4be316e5221f40f30ca8ed7051","impliedFormat":1},{"version":"294c082d609e6523520290db4f1d54114ebc83643fb42abd965be5bcc5d9416b","impliedFormat":1},{"version":"a1fde752d2e310310f949aaf7f1702a21dfb41a43b07bbfb75ff1f7c7ca5a826","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"ce2fd18db93f879d300db4ae7738c28f3eefc7c2d9274ab7d22046f1d71ccd6f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b85151402164ab7cb665e58df5c1a29aa25ea4ed3a367f84a15589e7d7a9c8ca","impliedFormat":1},{"version":"5d8cd11d44a41a6966a04e627d38efce8d214edb36daf494153ec15b2b95eee2","affectsGlobalScope":true,"impliedFormat":1},{"version":"1531c4475757912c451805345c64623f274be6c847be2f4984294d5e0706f0e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b17790866e140a630fa8891d7105c728a1bd60f4e35822e4b345af166a4a728c","impliedFormat":1},{"version":"b1a9bf3c14dd2bac9784aaffbeabd878f5f6618a4fd3bfc1633a2758b0e96f32","impliedFormat":1},{"version":"dc058956a93388aab38307b7b3b9b6379e1021e73a244aab6ac9427dc3a252a7","impliedFormat":1},{"version":"f33302cf240672359992c356f2005d395b559e176196d03f31a28cc7b01e69bc","impliedFormat":1},{"version":"3ce25041ff6ae06c08fcaccd5fcd9baf4ca6e80e6cb5a922773a1985672e74c2","affectsGlobalScope":true,"impliedFormat":1},{"version":"652c0de14329a834ff06af6ad44670fac35849654a464fd9ae36edb92a362c12","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b1e178016d3fc554505ae087c249b205b1c50624d482c542be9d4682bab81fc","impliedFormat":1},{"version":"f47fc200a9cad1976d5d046aa27b821918e93c82a2fd63cf06b47c9d0f88aaae","impliedFormat":1},{"version":"cf45d0510b661f1da461479851ff902f188edb111777c37055eff12fa986a23a","impliedFormat":1},{"version":"cb41c174db409193c4b26e1e02b39a80f3050318a6af120cc304323f29e1ec1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"37bef1064b7d015aeaa7c0716fe23a0b3844abe2c0a3df7144153ca8445fe0da","impliedFormat":1},{"version":"1a013cfc1fa53be19899330926b9e09ccdb6514b3635ef80471ad427b1bbf817","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},"40d323fd7775cf7bb6c7809fa281aa488dd8c15ce7a0304ee339fd1166eeaa13"],"root":[66,278,279,290,291,395],"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":"../../../..","removeComments":false,"skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[282,1],[281,2],[260,3],[259,4],[258,5],[256,6],[257,6],[275,4],[283,7],[261,8],[284,9],[263,10],[286,11],[292,12],[393,13],[392,14],[389,15],[394,16],[390,6],[385,6],[333,17],[334,17],[335,18],[298,19],[336,20],[337,21],[338,22],[293,6],[296,23],[294,6],[295,6],[339,24],[340,25],[341,26],[342,27],[343,28],[344,29],[345,29],[347,30],[346,31],[348,32],[349,33],[350,34],[332,35],[297,6],[351,36],[352,37],[353,38],[384,39],[354,40],[355,41],[356,42],[357,43],[358,44],[359,45],[360,46],[361,47],[362,48],[363,49],[364,49],[365,50],[366,51],[368,52],[367,53],[369,54],[370,55],[371,56],[372,57],[373,58],[374,59],[375,60],[376,61],[377,62],[378,63],[379,64],[380,65],[381,66],[382,67],[383,68],[387,6],[388,6],[386,69],[391,70],[285,6],[299,6],[255,71],[228,6],[206,72],[204,72],[254,73],[219,74],[218,74],[119,75],[70,76],[226,75],[227,75],[229,77],[230,75],[231,78],[130,79],[232,75],[203,75],[233,75],[234,80],[235,75],[236,74],[237,81],[238,75],[239,75],[240,75],[241,75],[242,74],[243,75],[244,75],[245,75],[246,75],[247,82],[248,75],[249,75],[250,75],[251,75],[252,75],[69,73],[72,78],[73,78],[74,78],[75,78],[76,78],[77,78],[78,78],[79,75],[81,83],[82,78],[80,78],[83,78],[84,78],[85,78],[86,78],[87,78],[88,78],[89,75],[90,78],[91,78],[92,78],[93,78],[94,78],[95,75],[96,78],[97,78],[98,78],[99,78],[100,78],[101,78],[102,75],[104,84],[103,78],[105,78],[106,78],[107,78],[108,78],[109,82],[110,75],[111,75],[125,85],[113,86],[114,78],[115,78],[116,75],[117,78],[118,78],[120,87],[121,78],[122,78],[123,78],[124,78],[126,78],[127,78],[128,78],[129,78],[131,88],[132,78],[133,78],[134,78],[135,75],[136,78],[137,89],[138,89],[139,89],[140,75],[141,78],[142,78],[143,78],[148,78],[144,78],[145,75],[146,78],[147,75],[149,78],[150,78],[151,78],[152,78],[153,78],[154,78],[155,75],[156,78],[157,78],[158,78],[159,78],[160,78],[161,78],[162,78],[163,78],[164,78],[165,78],[166,78],[167,78],[168,78],[169,78],[170,78],[171,78],[172,90],[173,78],[174,78],[175,78],[176,78],[177,78],[178,78],[179,75],[180,75],[181,75],[182,75],[183,75],[184,78],[185,78],[186,78],[187,78],[205,91],[253,75],[190,92],[189,93],[213,94],[212,95],[208,96],[207,95],[209,97],[198,98],[196,99],[211,100],[210,97],[197,6],[199,101],[112,102],[68,103],[67,78],[202,6],[194,104],[195,105],[192,6],[193,106],[191,78],[200,107],[71,108],[220,6],[221,6],[214,6],[217,74],[216,6],[222,6],[223,6],[215,109],[224,6],[225,6],[188,110],[201,111],[65,112],[64,6],[61,6],[62,6],[12,6],[10,6],[11,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[63,6],[57,6],[58,6],[60,6],[59,6],[1,6],[14,6],[13,6],[315,113],[322,114],[314,113],[329,115],[306,116],[305,117],[328,118],[323,119],[326,120],[308,121],[307,122],[303,123],[302,118],[325,124],[304,125],[309,126],[310,6],[313,126],[300,6],[331,127],[330,126],[317,128],[318,129],[320,130],[316,131],[319,132],[324,118],[311,133],[312,134],[321,135],[301,56],[327,136],[267,137],[277,138],[262,137],[280,137],[289,139],[266,140],[264,137],[287,137],[288,141],[265,142],[274,137],[276,143],[272,137],[273,144],[268,137],[269,145],[270,137],[271,146],[66,137],[279,137],[290,147],[278,148],[291,137],[395,149]],"semanticDiagnosticsPerFile":[66,262,264,267,268,270,272,273,274,276,277,278,279,280,287,290,291],"version":"5.7.3"} \ No newline at end of file diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js new file mode 100644 index 0000000..3831ac7 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js @@ -0,0 +1,199 @@ +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-H7CEYIRM.js"; +import { + IMAGE_CONFIG +} from "./chunk-N243NQOM.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 +}; diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js.map b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js new file mode 100644 index 0000000..4daaf1e --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js @@ -0,0 +1,83 @@ +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-GR4BRZQZ.js"; +import "./chunk-H7CEYIRM.js"; +import "./chunk-N243NQOM.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 +}; diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js.map b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_common_http.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js new file mode 100644 index 0000000..93e4855 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js @@ -0,0 +1,994 @@ +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, + ENABLE_ROOT_COMPONENT_BOOTSTRAP, + ENVIRONMENT_INITIALIZER, + EffectScheduler, + ElementRef, + EmbeddedViewRef, + EnvironmentInjector, + ErrorHandler, + EventEmitter, + 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, + IS_INCREMENTAL_HYDRATION_ENABLED, + Inject, + InjectFlags, + Injectable, + InjectionToken, + Injector, + Input, + IterableDiffers, + JSACTION_EVENT_CONTRACT, + KeyValueDiffers, + LContext, + LOCALE_ID, + LocaleDataIndex, + MicrotaskEffectScheduler, + 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, + PERFORMANCE_MARK_PREFIX, + PLATFORM_ID, + PLATFORM_INITIALIZER, + PROVIDED_NG_ZONE, + PendingTasks, + PendingTasksInternal, + Pipe, + PlatformRef, + Query, + QueryList, + REQUEST, + REQUEST_CONTEXT, + RESPONSE_INIT, + ReflectionCapabilities, + Renderer2, + RendererFactory2, + RendererStyleFlags2, + ResourceStatus, + RuntimeError, + SIGNAL, + SSR_CONTENT_INTEGRITY_MARKER, + Sanitizer, + SecurityContext, + Self, + SimpleChange, + SkipSelf, + TESTABILITY, + TESTABILITY_GETTER, + TRANSLATIONS, + TRANSLATIONS_FORMAT, + TemplateRef, + Testability, + TestabilityRegistry, + TracingAction, + TracingService, + TransferState, + Type, + USE_RUNTIME_DEPS_TRACKER_FOR_JIT, + VERSION, + Version, + ViewChild, + ViewChildren, + ViewContainerRef, + ViewEncapsulation, + ViewRef, + ViewRef$1, + XSS_SECURITY_URL, + ZONELESS_ENABLED, + _global, + _sanitizeHtml, + _sanitizeUrl, + afterNextRender, + afterRender, + afterRenderEffect, + 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, + disableProfiling, + effect, + enableProdMode, + enableProfiling, + findLocaleData, + flushModuleScopingQueueAsMuchAsPossible, + formatRuntimeError, + forwardRef, + generateStandaloneInDeclarationsError, + getAsyncClassMetadataFn, + getClosestComponentName, + getDebugNode, + getDeferBlocks$1, + 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, + linkedSignal, + makeEnvironmentProviders, + makeStateKey, + mergeApplicationConfig, + microtaskEffect, + model, + noSideEffects, + numberAttribute, + output, + patchComponentDefWithScope, + performanceMarkFeature, + platformCore, + provideAppInitializer, + provideEnvironmentInitializer, + provideExperimentalCheckNoChangesForDebug, + provideExperimentalZonelessChangeDetection, + providePlatformInitializer, + provideZoneChangeDetection, + publishExternalGlobalUtil, + readHydrationInfo, + reflectComponentType, + registerLocaleData, + registerNgModuleType, + renderDeferBlockState, + resetCompiledComponents, + resetJitOptions, + resolveComponentResources, + resolveForwardRef, + resource, + restoreComponentResolutionQueue, + runInInjectionContext, + setAllowDuplicateNgModuleIdsForTest, + setAlternateWeakRefImpl, + setClassMetadata, + setClassMetadataAsync, + setCurrentInjector, + setDocument, + setInjectorProfilerContext, + setLocaleId, + setTestabilityGetter, + signal, + startMeasuring, + stopMeasuring, + store, + stringify, + transitiveScopesFor, + triggerResourceLoading, + truncateMiddle, + unregisterAllLocaleData, + untracked, + unwrapSafeValue, + viewChild, + viewChildren, + withDomHydration, + withEventReplay, + withI18nSupport, + withIncrementalHydration, + ɵINPUT_SIGNAL_BRAND_WRITE_TYPE, + ɵgetUnknownElementStrictMode, + ɵgetUnknownPropertyStrictMode, + ɵsetClassDebugInfo, + ɵsetUnknownElementStrictMode, + ɵsetUnknownPropertyStrictMode, + ɵunwrapWritableSignal, + ɵɵCopyDefinitionFeature, + ɵɵExternalStylesFeature, + ɵɵHostDirectivesFeature, + ɵɵInheritDefinitionFeature, + ɵɵInputTransformsFeature, + ɵɵNgOnChangesFeature, + ɵɵProvidersFeature, + ɵɵadvance, + ɵɵattachSourceLocations, + ɵɵ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, + ɵɵdeferHydrateNever, + ɵɵdeferHydrateOnHover, + ɵɵdeferHydrateOnIdle, + ɵɵdeferHydrateOnImmediate, + ɵɵdeferHydrateOnInteraction, + ɵɵdeferHydrateOnTimer, + ɵɵdeferHydrateOnViewport, + ɵɵdeferHydrateWhen, + ɵɵ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, + ɵɵreplaceMetadata, + ɵɵ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-N243NQOM.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, + 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, + PendingTasks, + Pipe, + PlatformRef, + Query, + QueryList, + REQUEST, + REQUEST_CONTEXT, + RESPONSE_INIT, + Renderer2, + RendererFactory2, + RendererStyleFlags2, + ResourceStatus, + Sanitizer, + SecurityContext, + Self, + SimpleChange, + SkipSelf, + TRANSLATIONS, + TRANSLATIONS_FORMAT, + TemplateRef, + Testability, + TestabilityRegistry, + TransferState, + Type, + VERSION, + Version, + ViewChild, + ViewChildren, + ViewContainerRef, + ViewEncapsulation, + ViewRef, + afterNextRender, + afterRender, + afterRenderEffect, + 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, + linkedSignal, + makeEnvironmentProviders, + makeStateKey, + mergeApplicationConfig, + model, + numberAttribute, + output, + platformCore, + provideAppInitializer, + provideEnvironmentInitializer, + provideExperimentalCheckNoChangesForDebug, + provideExperimentalZonelessChangeDetection, + providePlatformInitializer, + provideZoneChangeDetection, + reflectComponentType, + resolveForwardRef, + resource, + 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, + ENABLE_ROOT_COMPONENT_BOOTSTRAP as ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, + 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, + IS_INCREMENTAL_HYDRATION_ENABLED as ɵIS_INCREMENTAL_HYDRATION_ENABLED, + JSACTION_EVENT_CONTRACT as ɵJSACTION_EVENT_CONTRACT, + LContext as ɵLContext, + LocaleDataIndex as ɵLocaleDataIndex, + MicrotaskEffectScheduler as ɵMicrotaskEffectScheduler, + 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, + PERFORMANCE_MARK_PREFIX as ɵPERFORMANCE_MARK_PREFIX, + PROVIDED_NG_ZONE as ɵPROVIDED_NG_ZONE, + PendingTasksInternal as ɵPendingTasksInternal, + 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, + TracingAction as ɵTracingAction, + TracingService as ɵTracingService, + 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, + disableProfiling as ɵdisableProfiling, + enableProfiling as ɵenableProfiling, + findLocaleData as ɵfindLocaleData, + flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, + formatRuntimeError as ɵformatRuntimeError, + generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError, + getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn, + getClosestComponentName as ɵgetClosestComponentName, + getDebugNode as ɵgetDebugNode, + getDeferBlocks$1 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, + microtaskEffect as ɵmicrotaskEffect, + noSideEffects as ɵnoSideEffects, + patchComponentDefWithScope as ɵpatchComponentDefWithScope, + performanceMarkFeature as ɵperformanceMarkFeature, + publishExternalGlobalUtil as ɵpublishExternalGlobalUtil, + 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, + startMeasuring as ɵstartMeasuring, + stopMeasuring as ɵstopMeasuring, + store as ɵstore, + stringify as ɵstringify, + transitiveScopesFor as ɵtransitiveScopesFor, + triggerResourceLoading as ɵtriggerResourceLoading, + truncateMiddle as ɵtruncateMiddle, + unregisterAllLocaleData as ɵunregisterLocaleData, + unwrapSafeValue as ɵunwrapSafeValue, + ɵunwrapWritableSignal, + withDomHydration as ɵwithDomHydration, + withEventReplay as ɵwithEventReplay, + withI18nSupport as ɵwithI18nSupport, + withIncrementalHydration as ɵwithIncrementalHydration, + ɵɵCopyDefinitionFeature, + ɵɵExternalStylesFeature, + FactoryTarget as ɵɵFactoryTarget, + ɵɵHostDirectivesFeature, + ɵɵInheritDefinitionFeature, + ɵɵInputTransformsFeature, + ɵɵNgOnChangesFeature, + ɵɵProvidersFeature, + ɵɵadvance, + ɵɵattachSourceLocations, + ɵɵ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, + ɵɵdeferHydrateNever, + ɵɵdeferHydrateOnHover, + ɵɵdeferHydrateOnIdle, + ɵɵdeferHydrateOnImmediate, + ɵɵdeferHydrateOnInteraction, + ɵɵdeferHydrateOnTimer, + ɵɵdeferHydrateOnViewport, + ɵɵdeferHydrateWhen, + ɵɵ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, + ɵɵreplaceMetadata, + ɵɵ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 +}; diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js.map b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js.map new file mode 100644 index 0000000..9865211 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_core.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js new file mode 100644 index 0000000..e0753f8 --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js @@ -0,0 +1,6877 @@ +import { + getDOM +} from "./chunk-H7CEYIRM.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-N243NQOM.js"; + +// node_modules/@angular/forms/fesm2022/forms.mjs +var BaseControlValueAccessor = class _BaseControlValueAccessor { + _renderer; + _elementRef; + /** + * The registered callback function called when a change or input event occurs on the input + * element. + * @nodoc + */ + onChange = (_) => { + }; + /** + * The registered callback function called when a blur event occurs on the input element. + * @nodoc + */ + onTouched = () => { + }; + constructor(_renderer, _elementRef) { + this._renderer = _renderer; + this._elementRef = _elementRef; + } + /** + * 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 ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _BaseControlValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _BaseControlValueAccessor + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BaseControlValueAccessor, [{ + type: Directive + }], () => [{ + type: Renderer2 + }, { + type: ElementRef + }], null); +})(); +var BuiltInControlValueAccessor = class _BuiltInControlValueAccessor extends BaseControlValueAccessor { + static ɵfac = /* @__PURE__ */ (() => { + let ɵBuiltInControlValueAccessor_BaseFactory; + return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵBuiltInControlValueAccessor_BaseFactory || (ɵBuiltInControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_BuiltInControlValueAccessor)))(__ngFactoryType__ || _BuiltInControlValueAccessor); + }; + })(); + static ɵ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 ɵfac = /* @__PURE__ */ (() => { + let ɵCheckboxControlValueAccessor_BaseFactory; + return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵCheckboxControlValueAccessor_BaseFactory || (ɵCheckboxControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_CheckboxControlValueAccessor)))(__ngFactoryType__ || _CheckboxControlValueAccessor); + }; + })(); + static ɵ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(); + }); + } + }, + standalone: false, + 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], + standalone: false + }] + }], 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 { + _compositionMode; + /** Whether the user is creating a composition string (IME events). */ + _composing = false; + constructor(renderer, elementRef, _compositionMode) { + super(renderer, elementRef); + this._compositionMode = _compositionMode; + 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 ɵfac = function DefaultValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _DefaultValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(COMPOSITION_BUFFER_MODE, 8)); + }; + static ɵ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); + }); + } + }, + standalone: false, + 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], + standalone: false + }] + }], () => [{ + 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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. + * + * ```ts + * // 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 { + /** + * @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; + } + /** + * Contains the result of merging synchronous validators into a single validator function + * (combined using `Validators.compose`). + */ + _composedValidatorFn; + /** + * Contains the result of merging asynchronous validators into a single validator function + * (combined using `Validators.composeAsync`). + */ + _composedAsyncValidatorFn; + /** + * Set of synchronous validators as they were provided while calling `setValidators` function. + * @internal + */ + _rawValidators = []; + /** + * Set of asynchronous validators as they were provided while calling `setAsyncValidators` + * function. + * @internal + */ + _rawAsyncValidators = []; + /** + * 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; + } + /* + * The set of callbacks to be invoked when directive instance is being destroyed. + */ + _onDestroyCallbacks = []; + /** + * 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`: + * + * ```ts + * 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`: + * + * ```ts + * 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 name for the control + */ + // TODO(issue/24571): remove '!'. + name; + /** + * @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 { + /** + * @description + * The parent form for the control. + * + * @internal + */ + _parent = null; + /** + * @description + * The name for the control + */ + name = null; + /** + * @description + * The value accessor for the control + */ + valueAccessor = null; +}; +var AbstractControlStatus = class { + _cd; + 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 ɵfac = function NgControlStatus_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgControlStatus)(ɵɵdirectiveInject(NgControl, 2)); + }; + static ɵ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); + } + }, + standalone: false, + features: [ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgControlStatus, [{ + type: Directive, + args: [{ + selector: "[formControlName],[ngModel],[formControl]", + host: ngControlStatusHost, + standalone: false + }] + }], () => [{ + type: NgControl, + decorators: [{ + type: Self + }] + }], null); +})(); +var NgControlStatusGroup = class _NgControlStatusGroup extends AbstractControlStatus { + constructor(cd) { + super(cd); + } + static ɵfac = function NgControlStatusGroup_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgControlStatusGroup)(ɵɵdirectiveInject(ControlContainer, 10)); + }; + static ɵ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); + } + }, + standalone: false, + features: [ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgControlStatusGroup, [{ + type: Directive, + args: [{ + selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]", + host: ngGroupStatusHost, + standalone: false + }] + }], () => [{ + 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 { + value; + source; + constructor(value, source) { + super(); + this.value = value; + this.source = source; + } +}; +var PristineChangeEvent = class extends ControlEvent { + pristine; + source; + constructor(pristine, source) { + super(); + this.pristine = pristine; + this.source = source; + } +}; +var TouchedChangeEvent = class extends ControlEvent { + touched; + source; + constructor(touched, source) { + super(); + this.touched = touched; + this.source = source; + } +}; +var StatusChangeEvent = class extends ControlEvent { + status; + source; + constructor(status, source) { + super(); + this.status = status; + this.source = source; + } +}; +var FormSubmittedEvent = class extends ControlEvent { + source; + constructor(source) { + super(); + this.source = source; + } +}; +var FormResetEvent = class extends ControlEvent { + source; + 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 { + /** @internal */ + _pendingDirty = false; + /** + * Indicates that a control has its own pending asynchronous validation in progress. + * It also stores if the control should emit events when the validation status changes. + * + * @internal + */ + _hasOwnPendingAsyncValidator = null; + /** @internal */ + _pendingTouched = false; + /** @internal */ + _onCollectionChange = () => { + }; + /** @internal */ + _updateOn; + _parent = null; + _asyncValidationSubscription; + /** + * Contains the result of merging synchronous validators into a single validator function + * (combined using `Validators.compose`). + * + * @internal + */ + _composedValidatorFn; + /** + * Contains the result of merging asynchronous validators into a single validator function + * (combined using `Validators.composeAsync`). + * + * @internal + */ + _composedAsyncValidatorFn; + /** + * Synchronous validators as they were provided: + * - in `AbstractControl` constructor + * - as an argument while calling `setValidators` function + * - while calling the setter on the `validator` field (e.g. `control.validator = validatorFn`) + * + * @internal + */ + _rawValidators; + /** + * Asynchronous validators as they were provided: + * - in `AbstractControl` constructor + * - as an argument while calling `setAsyncValidators` function + * - while calling the setter on the `asyncValidator` field (e.g. `control.asyncValidator = + * asyncValidatorFn`) + * + * @internal + */ + _rawAsyncValidators; + /** + * The current value of the control. + * + * * For a `FormControl`, the current value. + * * For an enabled `FormGroup`, the values of enabled controls as an object + * with a key-value pair for each member of the group. + * * For a disabled `FormGroup`, the values of all controls as an object + * with a key-value pair for each member of the group. + * * For a `FormArray`, the values of enabled controls as an array. + * + */ + value; + /** + * 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._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)); + } + /** @internal */ + _status = computed(() => this.statusReactive()); + statusReactive = signal(void 0); + /** + * 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; + } + /** + * An object containing any errors generated by failing validation, + * or null if there are no errors. + */ + errors; + /** + * 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)); + } + /** @internal */ + _pristine = computed(() => this.pristineReactive()); + pristineReactive = signal(true); + /** + * 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)); + } + /** @internal */ + _touched = computed(() => this.touchedReactive()); + touchedReactive = signal(false); + /** + * 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; + } + /** + * Exposed as observable, see below. + * + * @internal + */ + _events = new Subject(); + /** + * A multicasting observable that emits an event every time the state of the control changes. + * It emits for value, status, pristine or touched changes. + * + * **Note**: On value change, the emit happens right after a value of this control is updated. The + * value of a parent control (for example if this FormControl is a part of a FormGroup) is updated + * later, so accessing a value of a parent control (using the `value` property) from the callback + * of this event might result in getting a value that has not been updated yet. Subscribe to the + * `events` of the parent control instead. + * For other event types, the events are emitted after the parent control has been updated. + * + */ + events = this._events.asObservable(); + /** + * A multicasting observable that emits an event every time the value of the control changes, in + * the UI or programmatically. It also emits an event each time you call enable() or disable() + * without passing along {emitEvent: false} as a function argument. + * + * **Note**: the emit happens right after a value of this control is updated. The value of a + * parent control (for example if this FormControl is a part of a FormGroup) is updated later, so + * accessing a value of a parent control (using the `value` property) from the callback of this + * event might result in getting a value that has not been updated yet. Subscribe to the + * `valueChanges` event of the parent control instead. + * + * TODO: this should be piped from events() but is breaking in G3 + */ + valueChanges; + /** + * A multicasting observable that emits an event every time the validation `status` of the control + * recalculates. + * + * @see {@link FormControlStatus} + * @see {@link AbstractControl.status} + * + * TODO: this should be piped from events() but is breaking in G3 + */ + statusChanges; + /** + * 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`: + * + * ```ts + * 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`: + * + * ```ts + * 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 */ + _onDisabledChange = []; + /** @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 + }); + } + controls; + 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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(typeof ngDevMode === "undefined" || ngDevMode ? "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 { + callSetDisabledState; + /** + * @description + * Returns whether the form submission has been triggered. + */ + get submitted() { + return untracked(this.submittedReactive); + } + /** @internal */ + _submitted = computed(() => this.submittedReactive()); + submittedReactive = signal(false); + _directives = /* @__PURE__ */ new Set(); + /** + * @description + * The `FormGroup` instance created for this form. + */ + form; + /** + * @description + * Event emitter for the "ngSubmit" event + */ + ngSubmit = new EventEmitter(); + /** + * @description + * Tracks options for the `NgForm` instance. + * + * **updateOn**: Sets the default `updateOn` value for all child `NgModels` below it + * unless explicitly set by a child `NgModel` using `ngModelOptions`). Defaults to 'change'. + * Possible values: `'change'` | `'blur'` | `'submit'`. + * + */ + // TODO(issue/24571): remove '!'. + options; + constructor(validators, asyncValidators, callSetDisabledState) { + super(); + this.callSetDisabledState = callSetDisabledState; + 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 ɵ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 ɵ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"], + standalone: false, + 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", + standalone: false + }] + }], () => [{ + 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 { + /** @publicApi */ + defaultValue = null; + /** @internal */ + _onChange = []; + /** @internal */ + _pendingValue; + /** @internal */ + _pendingChange = false; + constructor(formState = null, validatorOrOpts, asyncValidator) { + super(pickValidators(validatorOrOpts), pickAsyncValidators(asyncValidator, validatorOrOpts)); + 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 { + /** + * @description + * The parent control for the group + * + * @internal + */ + // TODO(issue/24571): remove '!'. + _parent; + /** @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 ɵfac = /* @__PURE__ */ (() => { + let ɵAbstractFormGroupDirective_BaseFactory; + return function AbstractFormGroupDirective_Factory(__ngFactoryType__) { + return (ɵAbstractFormGroupDirective_BaseFactory || (ɵAbstractFormGroupDirective_BaseFactory = ɵɵgetInheritedFactory(_AbstractFormGroupDirective)))(__ngFactoryType__ || _AbstractFormGroupDirective); + }; + })(); + static ɵdir = ɵɵdefineDirective({ + type: _AbstractFormGroupDirective, + standalone: false, + features: [ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(AbstractFormGroupDirective, [{ + type: Directive, + args: [{ + standalone: false + }] + }], 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 { + /** + * @description + * Tracks the name of the `NgModelGroup` bound to the directive. The name corresponds + * to a key in the parent `NgForm`. + */ + name = ""; + constructor(parent, validators, asyncValidators) { + super(); + 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 ɵfac = function NgModelGroup_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgModelGroup)(ɵɵdirectiveInject(ControlContainer, 5), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _NgModelGroup, + selectors: [["", "ngModelGroup", ""]], + inputs: { + name: [0, "ngModelGroup", "name"] + }, + exportAs: ["ngModelGroup"], + standalone: false, + features: [ɵɵProvidersFeature([modelGroupProvider]), ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgModelGroup, [{ + type: Directive, + args: [{ + selector: "[ngModelGroup]", + providers: [modelGroupProvider], + exportAs: "ngModelGroup", + standalone: false + }] + }], () => [{ + 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 { + _changeDetectorRef; + callSetDisabledState; + control = new FormControl(); + // At runtime we coerce arbitrary values assigned to the "disabled" input to a "boolean". + // This is not reflected in the type of the property because outside of templates, consumers + // should only deal with booleans. In templates, a string is allowed for convenience and to + // match the native "disabled attribute" semantics which can be observed on input elements. + // This static member tells the compiler that values of type "string" can also be assigned + // to the input in a template. + /** @nodoc */ + static ngAcceptInputType_isDisabled; + /** @internal */ + _registered = false; + /** + * Internal reference to the view model value. + * @nodoc + */ + viewModel; + /** + * @description + * Tracks the name bound to the directive. If a parent form exists, it + * uses this name as a key to retrieve this control's value. + */ + name = ""; + /** + * @description + * Tracks whether the control is disabled. + */ + // TODO(issue/24571): remove '!'. + isDisabled; + /** + * @description + * Tracks the value bound to this directive. + */ + model; + /** + * @description + * Tracks the configuration options for this `ngModel` instance. + * + * **name**: An alternative to setting the name attribute on the form control element. See + * the [example](api/forms/NgModel#using-ngmodel-on-a-standalone-control) for using `NgModel` + * as a standalone control. + * + * **standalone**: When set to true, the `ngModel` will not register itself with its parent form, + * and acts as if it's not in the form. Defaults to false. If no parent form exists, this option + * has no effect. + * + * **updateOn**: Defines the event upon which the form control value and validity update. + * Defaults to 'change'. Possible values: `'change'` | `'blur'` | `'submit'`. + * + */ + // TODO(issue/24571): remove '!'. + options; + /** + * @description + * Event emitter for producing the `ngModelChange` event after + * the view model updates. + */ + update = new EventEmitter(); + constructor(parent, validators, asyncValidators, valueAccessors, _changeDetectorRef, callSetDisabledState) { + super(); + this._changeDetectorRef = _changeDetectorRef; + this.callSetDisabledState = callSetDisabledState; + 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 ((typeof ngDevMode === "undefined" || ngDevMode) && !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 ɵ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 ɵ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"], + standalone: false, + 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", + standalone: false + }] + }], () => [{ + 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 ɵfac = function ɵNgNoValidate_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵNgNoValidate)(); + }; + static ɵdir = ɵɵdefineDirective({ + type: _ɵNgNoValidate, + selectors: [["form", 3, "ngNoForm", "", 3, "ngNativeValidate", ""]], + hostAttrs: ["novalidate", ""], + standalone: false + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵNgNoValidate, [{ + type: Directive, + args: [{ + selector: "form:not([ngNoForm]):not([ngNativeValidate])", + host: { + "novalidate": "" + }, + standalone: false + }] + }], 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 ɵfac = /* @__PURE__ */ (() => { + let ɵNumberValueAccessor_BaseFactory; + return function NumberValueAccessor_Factory(__ngFactoryType__) { + return (ɵNumberValueAccessor_BaseFactory || (ɵNumberValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_NumberValueAccessor)))(__ngFactoryType__ || _NumberValueAccessor); + }; + })(); + static ɵ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(); + }); + } + }, + standalone: false, + 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], + standalone: false + }] + }], 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 { + _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 ɵfac = function RadioControlRegistry_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _RadioControlRegistry)(); + }; + static ɵ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 { + _registry; + _injector; + /** @internal */ + // TODO(issue/24571): remove '!'. + _state; + /** @internal */ + // TODO(issue/24571): remove '!'. + _control; + /** @internal */ + // TODO(issue/24571): remove '!'. + _fn; + setDisabledStateFired = false; + /** + * The registered callback function called when a change event occurs on the input element. + * Note: we declare `onChange` here (also used as host listener) as a function with no arguments + * to override the `onChange` function (which expects 1 argument) in the parent + * `BaseControlValueAccessor` class. + * @nodoc + */ + onChange = () => { + }; + /** + * @description + * Tracks the name of the radio input element. + */ + // TODO(issue/24571): remove '!'. + name; + /** + * @description + * Tracks the name of the `FormControl` bound to the directive. The name corresponds + * to a key in the parent `FormGroup` or `FormArray`. + */ + // TODO(issue/24571): remove '!'. + formControlName; + /** + * @description + * Tracks the value of the radio input element + */ + value; + callSetDisabledState = inject(CALL_SET_DISABLED_STATE, { + optional: true + }) ?? setDisabledStateDefault; + constructor(renderer, elementRef, _registry, _injector) { + super(renderer, elementRef); + this._registry = _registry; + this._injector = _injector; + } + /** @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 ɵfac = function RadioControlValueAccessor_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _RadioControlValueAccessor)(ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(RadioControlRegistry), ɵɵdirectiveInject(Injector)); + }; + static ɵ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" + }, + standalone: false, + 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], + standalone: false + }] + }], () => [{ + 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 ɵfac = /* @__PURE__ */ (() => { + let ɵRangeValueAccessor_BaseFactory; + return function RangeValueAccessor_Factory(__ngFactoryType__) { + return (ɵRangeValueAccessor_BaseFactory || (ɵRangeValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_RangeValueAccessor)))(__ngFactoryType__ || _RangeValueAccessor); + }; + })(); + static ɵ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(); + }); + } + }, + standalone: false, + 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], + standalone: false + }] + }], 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 { + _ngModelWarningConfig; + callSetDisabledState; + /** + * Internal reference to the view model value. + * @nodoc + */ + viewModel; + /** + * @description + * Tracks the `FormControl` instance bound to the directive. + */ + // TODO(issue/24571): remove '!'. + form; + /** + * @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); + } + } + // TODO(kara): remove next 4 properties once deprecation period is over + /** @deprecated as of v6 */ + model; + /** @deprecated as of v6 */ + update = new EventEmitter(); + /** + * @description + * Static property used to track whether any ngModel warnings have been sent across + * all instances of FormControlDirective. Used to support warning config of "once". + * + * @internal + */ + static _ngModelWarningSentOnce = false; + /** + * @description + * Instance property used to track whether an ngModel warning has been sent out for this + * particular `FormControlDirective` instance. Used to support warning config of "always". + * + * @internal + */ + _ngModelWarningSent = false; + constructor(validators, asyncValidators, valueAccessors, _ngModelWarningConfig, callSetDisabledState) { + super(); + this._ngModelWarningConfig = _ngModelWarningConfig; + this.callSetDisabledState = callSetDisabledState; + 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 ɵ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 ɵdir = ɵɵdefineDirective({ + type: _FormControlDirective, + selectors: [["", "formControl", ""]], + inputs: { + form: [0, "formControl", "form"], + isDisabled: [0, "disabled", "isDisabled"], + model: [0, "ngModel", "model"] + }, + outputs: { + update: "ngModelChange" + }, + exportAs: ["ngForm"], + standalone: false, + features: [ɵɵProvidersFeature([formControlBinding]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormControlDirective, [{ + type: Directive, + args: [{ + selector: "[formControl]", + providers: [formControlBinding], + exportAs: "ngForm", + standalone: false + }] + }], () => [{ + 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 { + callSetDisabledState; + /** + * @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); + } + /** @internal */ + _submitted = computed(() => this._submittedReactive()); + _submittedReactive = signal(false); + /** + * Reference to an old form group input value, which is needed to cleanup + * old instance in case it was replaced with a new one. + */ + _oldForm; + /** + * Callback that should be invoked when controls in FormGroup or FormArray collection change + * (added or removed). This callback triggers corresponding DOM updates. + */ + _onCollectionChange = () => this._updateDomValue(); + /** + * @description + * Tracks the list of added `FormControlName` instances + */ + directives = []; + /** + * @description + * Tracks the `FormGroup` bound to this directive. + */ + form = null; + /** + * @description + * Emits an event when the form submission has been triggered. + */ + ngSubmit = new EventEmitter(); + constructor(validators, asyncValidators, callSetDisabledState) { + super(); + this.callSetDisabledState = callSetDisabledState; + 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 ɵ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 ɵ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"], + standalone: false, + 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", + standalone: false + }] + }], () => [{ + 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 { + /** + * @description + * Tracks the name of the `FormGroup` bound to the directive. The name corresponds + * to a key in the parent `FormGroup` or `FormArray`. + * Accepts a name as a string or a number. + * The name in the form of a string is useful for individual forms, + * while the numerical form allows for form groups to be bound + * to indices when iterating over groups in a `FormArray`. + */ + name = null; + constructor(parent, validators, asyncValidators) { + super(); + this._parent = parent; + this._setValidators(validators); + this._setAsyncValidators(asyncValidators); + } + /** @internal */ + _checkParentType() { + if (_hasInvalidParent(this._parent) && (typeof ngDevMode === "undefined" || ngDevMode)) { + throw groupParentException(); + } + } + static ɵfac = function FormGroupName_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormGroupName)(ɵɵdirectiveInject(ControlContainer, 13), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _FormGroupName, + selectors: [["", "formGroupName", ""]], + inputs: { + name: [0, "formGroupName", "name"] + }, + standalone: false, + features: [ɵɵProvidersFeature([formGroupNameProvider]), ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormGroupName, [{ + type: Directive, + args: [{ + selector: "[formGroupName]", + providers: [formGroupNameProvider], + standalone: false + }] + }], () => [{ + 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 { + /** @internal */ + _parent; + /** + * @description + * Tracks the name of the `FormArray` bound to the directive. The name corresponds + * to a key in the parent `FormGroup` or `FormArray`. + * Accepts a name as a string or a number. + * The name in the form of a string is useful for individual forms, + * while the numerical form allows for form arrays to be bound + * to indices when iterating over arrays in a `FormArray`. + */ + name = null; + constructor(parent, validators, asyncValidators) { + super(); + 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() { + if (typeof ngDevMode === "undefined" || ngDevMode) { + 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 ɵfac = function FormArrayName_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormArrayName)(ɵɵdirectiveInject(ControlContainer, 13), ɵɵdirectiveInject(NG_VALIDATORS, 10), ɵɵdirectiveInject(NG_ASYNC_VALIDATORS, 10)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _FormArrayName, + selectors: [["", "formArrayName", ""]], + inputs: { + name: [0, "formArrayName", "name"] + }, + standalone: false, + features: [ɵɵProvidersFeature([formArrayNameProvider]), ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormArrayName, [{ + type: Directive, + args: [{ + selector: "[formArrayName]", + providers: [formArrayNameProvider], + standalone: false + }] + }], () => [{ + 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 { + _ngModelWarningConfig; + _added = false; + /** + * Internal reference to the view model value. + * @internal + */ + viewModel; + /** + * @description + * Tracks the `FormControl` instance bound to the directive. + */ + // TODO(issue/24571): remove '!'. + control; + /** + * @description + * Tracks the name of the `FormControl` bound to the directive. The name corresponds + * to a key in the parent `FormGroup` or `FormArray`. + * Accepts a name as a string or a number. + * The name in the form of a string is useful for individual forms, + * while the numerical form allows for form controls to be bound + * to indices when iterating over controls in a `FormArray`. + */ + name = null; + /** + * @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); + } + } + // TODO(kara): remove next 4 properties once deprecation period is over + /** @deprecated as of v6 */ + model; + /** @deprecated as of v6 */ + update = new EventEmitter(); + /** + * @description + * Static property used to track whether any ngModel warnings have been sent across + * all instances of FormControlName. Used to support warning config of "once". + * + * @internal + */ + static _ngModelWarningSentOnce = false; + /** + * @description + * Instance property used to track whether an ngModel warning has been sent out for this + * particular FormControlName instance. Used to support warning config of "always". + * + * @internal + */ + _ngModelWarningSent = false; + constructor(parent, validators, asyncValidators, valueAccessors, _ngModelWarningConfig) { + super(); + this._ngModelWarningConfig = _ngModelWarningConfig; + 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() { + if (typeof ngDevMode === "undefined" || ngDevMode) { + this._checkParentType(); + } + this.control = this.formDirective.addControl(this); + this._added = true; + } + static ɵ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 ɵdir = ɵɵdefineDirective({ + type: _FormControlName, + selectors: [["", "formControlName", ""]], + inputs: { + name: [0, "formControlName", "name"], + isDisabled: [0, "disabled", "isDisabled"], + model: [0, "ngModel", "model"] + }, + outputs: { + update: "ngModelChange" + }, + standalone: false, + features: [ɵɵProvidersFeature([controlNameBinding]), ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(FormControlName, [{ + type: Directive, + args: [{ + selector: "[formControlName]", + providers: [controlNameBinding], + standalone: false + }] + }], () => [{ + 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 { + /** @nodoc */ + value; + /** @internal */ + _optionMap = /* @__PURE__ */ new Map(); + /** @internal */ + _idCounter = 0; + /** + * @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; + } + _compareWith = Object.is; + /** + * 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 ɵfac = /* @__PURE__ */ (() => { + let ɵSelectControlValueAccessor_BaseFactory; + return function SelectControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵSelectControlValueAccessor_BaseFactory || (ɵSelectControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_SelectControlValueAccessor)))(__ngFactoryType__ || _SelectControlValueAccessor); + }; + })(); + static ɵ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" + }, + standalone: false, + 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], + standalone: false + }] + }], null, { + compareWith: [{ + type: Input + }] + }); +})(); +var NgSelectOption = class _NgSelectOption { + _element; + _renderer; + _select; + /** + * @description + * ID of the option element + */ + // TODO(issue/24571): remove '!'. + id; + 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 ɵfac = function NgSelectOption_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NgSelectOption)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(SelectControlValueAccessor, 9)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _NgSelectOption, + selectors: [["option"]], + inputs: { + ngValue: "ngValue", + value: "value" + }, + standalone: false + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgSelectOption, [{ + type: Directive, + args: [{ + selector: "option", + standalone: false + }] + }], () => [{ + 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 { + /** + * The current value. + * @nodoc + */ + value; + /** @internal */ + _optionMap = /* @__PURE__ */ new Map(); + /** @internal */ + _idCounter = 0; + /** + * @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; + } + _compareWith = Object.is; + /** + * 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 ɵfac = /* @__PURE__ */ (() => { + let ɵSelectMultipleControlValueAccessor_BaseFactory; + return function SelectMultipleControlValueAccessor_Factory(__ngFactoryType__) { + return (ɵSelectMultipleControlValueAccessor_BaseFactory || (ɵSelectMultipleControlValueAccessor_BaseFactory = ɵɵgetInheritedFactory(_SelectMultipleControlValueAccessor)))(__ngFactoryType__ || _SelectMultipleControlValueAccessor); + }; + })(); + static ɵ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" + }, + standalone: false, + 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], + standalone: false + }] + }], null, { + compareWith: [{ + type: Input + }] + }); +})(); +var ɵNgSelectMultipleOption = class _ɵNgSelectMultipleOption { + _element; + _renderer; + _select; + // TODO(issue/24571): remove '!'. + id; + /** @internal */ + _value; + 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 ɵfac = function ɵNgSelectMultipleOption_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵNgSelectMultipleOption)(ɵɵdirectiveInject(ElementRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(SelectMultipleControlValueAccessor, 9)); + }; + static ɵdir = ɵɵdefineDirective({ + type: _ɵNgSelectMultipleOption, + selectors: [["option"]], + inputs: { + ngValue: "ngValue", + value: "value" + }, + standalone: false + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ɵNgSelectMultipleOption, [{ + type: Directive, + args: [{ + selector: "option", + standalone: false + }] + }], () => [{ + 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 { + _validator = nullValidator; + _onChange; + /** + * A flag that tracks whether this validator is enabled. + * + * Marking it `internal` (vs `protected`), so that this flag can be used in host bindings of + * directive classes that extend this base class. + * @internal + */ + _enabled; + /** @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 ɵfac = function AbstractValidatorDirective_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _AbstractValidatorDirective)(); + }; + static ɵ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 { + /** + * @description + * Tracks changes to the max bound to this directive. + */ + max; + /** @internal */ + inputName = "max"; + /** @internal */ + normalizeInput = (input) => toFloat(input); + /** @internal */ + createValidator = (max) => maxValidator(max); + static ɵfac = /* @__PURE__ */ (() => { + let ɵMaxValidator_BaseFactory; + return function MaxValidator_Factory(__ngFactoryType__) { + return (ɵMaxValidator_BaseFactory || (ɵMaxValidator_BaseFactory = ɵɵgetInheritedFactory(_MaxValidator)))(__ngFactoryType__ || _MaxValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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" + }, + standalone: false + }] + }], null, { + max: [{ + type: Input + }] + }); +})(); +var MIN_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MinValidator), + multi: true +}; +var MinValidator = class _MinValidator extends AbstractValidatorDirective { + /** + * @description + * Tracks changes to the min bound to this directive. + */ + min; + /** @internal */ + inputName = "min"; + /** @internal */ + normalizeInput = (input) => toFloat(input); + /** @internal */ + createValidator = (min) => minValidator(min); + static ɵfac = /* @__PURE__ */ (() => { + let ɵMinValidator_BaseFactory; + return function MinValidator_Factory(__ngFactoryType__) { + return (ɵMinValidator_BaseFactory || (ɵMinValidator_BaseFactory = ɵɵgetInheritedFactory(_MinValidator)))(__ngFactoryType__ || _MinValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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" + }, + standalone: false + }] + }], 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 { + /** + * @description + * Tracks changes to the required attribute bound to this directive. + */ + required; + /** @internal */ + inputName = "required"; + /** @internal */ + normalizeInput = booleanAttribute; + /** @internal */ + createValidator = (input) => requiredValidator; + /** @nodoc */ + enabled(input) { + return input; + } + static ɵfac = /* @__PURE__ */ (() => { + let ɵRequiredValidator_BaseFactory; + return function RequiredValidator_Factory(__ngFactoryType__) { + return (ɵRequiredValidator_BaseFactory || (ɵRequiredValidator_BaseFactory = ɵɵgetInheritedFactory(_RequiredValidator)))(__ngFactoryType__ || _RequiredValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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' + }, + standalone: false + }] + }], null, { + required: [{ + type: Input + }] + }); +})(); +var CheckboxRequiredValidator = class _CheckboxRequiredValidator extends RequiredValidator { + /** @internal */ + createValidator = (input) => requiredTrueValidator; + static ɵfac = /* @__PURE__ */ (() => { + let ɵCheckboxRequiredValidator_BaseFactory; + return function CheckboxRequiredValidator_Factory(__ngFactoryType__) { + return (ɵCheckboxRequiredValidator_BaseFactory || (ɵCheckboxRequiredValidator_BaseFactory = ɵɵgetInheritedFactory(_CheckboxRequiredValidator)))(__ngFactoryType__ || _CheckboxRequiredValidator); + }; + })(); + static ɵ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); + } + }, + standalone: false, + 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' + }, + standalone: false + }] + }], null, null); +})(); +var EMAIL_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => EmailValidator), + multi: true +}; +var EmailValidator = class _EmailValidator extends AbstractValidatorDirective { + /** + * @description + * Tracks changes to the email attribute bound to this directive. + */ + email; + /** @internal */ + inputName = "email"; + /** @internal */ + normalizeInput = booleanAttribute; + /** @internal */ + createValidator = (input) => emailValidator; + /** @nodoc */ + enabled(input) { + return input; + } + static ɵfac = /* @__PURE__ */ (() => { + let ɵEmailValidator_BaseFactory; + return function EmailValidator_Factory(__ngFactoryType__) { + return (ɵEmailValidator_BaseFactory || (ɵEmailValidator_BaseFactory = ɵɵgetInheritedFactory(_EmailValidator)))(__ngFactoryType__ || _EmailValidator); + }; + })(); + static ɵdir = ɵɵdefineDirective({ + type: _EmailValidator, + selectors: [["", "email", "", "formControlName", ""], ["", "email", "", "formControl", ""], ["", "email", "", "ngModel", ""]], + inputs: { + email: "email" + }, + standalone: false, + features: [ɵɵProvidersFeature([EMAIL_VALIDATOR]), ɵɵInheritDefinitionFeature] + }); +}; +(() => { + (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(EmailValidator, [{ + type: Directive, + args: [{ + selector: "[email][formControlName],[email][formControl],[email][ngModel]", + providers: [EMAIL_VALIDATOR], + standalone: false + }] + }], null, { + email: [{ + type: Input + }] + }); +})(); +var MIN_LENGTH_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MinLengthValidator), + multi: true +}; +var MinLengthValidator = class _MinLengthValidator extends AbstractValidatorDirective { + /** + * @description + * Tracks changes to the minimum length bound to this directive. + */ + minlength; + /** @internal */ + inputName = "minlength"; + /** @internal */ + normalizeInput = (input) => toInteger(input); + /** @internal */ + createValidator = (minlength) => minLengthValidator(minlength); + static ɵfac = /* @__PURE__ */ (() => { + let ɵMinLengthValidator_BaseFactory; + return function MinLengthValidator_Factory(__ngFactoryType__) { + return (ɵMinLengthValidator_BaseFactory || (ɵMinLengthValidator_BaseFactory = ɵɵgetInheritedFactory(_MinLengthValidator)))(__ngFactoryType__ || _MinLengthValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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" + }, + standalone: false + }] + }], null, { + minlength: [{ + type: Input + }] + }); +})(); +var MAX_LENGTH_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MaxLengthValidator), + multi: true +}; +var MaxLengthValidator = class _MaxLengthValidator extends AbstractValidatorDirective { + /** + * @description + * Tracks changes to the maximum length bound to this directive. + */ + maxlength; + /** @internal */ + inputName = "maxlength"; + /** @internal */ + normalizeInput = (input) => toInteger(input); + /** @internal */ + createValidator = (maxlength) => maxLengthValidator(maxlength); + static ɵfac = /* @__PURE__ */ (() => { + let ɵMaxLengthValidator_BaseFactory; + return function MaxLengthValidator_Factory(__ngFactoryType__) { + return (ɵMaxLengthValidator_BaseFactory || (ɵMaxLengthValidator_BaseFactory = ɵɵgetInheritedFactory(_MaxLengthValidator)))(__ngFactoryType__ || _MaxLengthValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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" + }, + standalone: false + }] + }], null, { + maxlength: [{ + type: Input + }] + }); +})(); +var PATTERN_VALIDATOR = { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => PatternValidator), + multi: true +}; +var PatternValidator = class _PatternValidator extends AbstractValidatorDirective { + /** + * @description + * Tracks changes to the pattern bound to this directive. + */ + pattern; + // This input is always defined, since the name matches selector. + /** @internal */ + inputName = "pattern"; + /** @internal */ + normalizeInput = (input) => input; + /** @internal */ + createValidator = (input) => patternValidator(input); + static ɵfac = /* @__PURE__ */ (() => { + let ɵPatternValidator_BaseFactory; + return function PatternValidator_Factory(__ngFactoryType__) { + return (ɵPatternValidator_BaseFactory || (ɵPatternValidator_BaseFactory = ɵɵgetInheritedFactory(_PatternValidator)))(__ngFactoryType__ || _PatternValidator); + }; + })(); + static ɵ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" + }, + standalone: false, + 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" + }, + standalone: false + }] + }], 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 ɵfac = function ɵInternalFormsSharedModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ɵInternalFormsSharedModule)(); + }; + static ɵ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 ɵ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 + }); + } + controls; + /** + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 + * + * ```ts + * 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 { + 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. + * + * {@example forms/ts/formBuilder/form_builder_example.ts region='disabled-control'} + */ + 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 ɵfac = function FormBuilder_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormBuilder)(); + }; + static ɵ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 ɵfac = function NonNullableFormBuilder_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _NonNullableFormBuilder)(); + }; + static ɵ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 ɵfac = /* @__PURE__ */ (() => { + let ɵUntypedFormBuilder_BaseFactory; + return function UntypedFormBuilder_Factory(__ngFactoryType__) { + return (ɵUntypedFormBuilder_BaseFactory || (ɵUntypedFormBuilder_BaseFactory = ɵɵgetInheritedFactory(_UntypedFormBuilder)))(__ngFactoryType__ || _UntypedFormBuilder); + }; + })(); + static ɵ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("19.1.4"); +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 ɵfac = function FormsModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _FormsModule)(); + }; + static ɵmod = ɵɵdefineNgModule({ + type: _FormsModule, + declarations: [NgModel, NgModelGroup, NgForm], + exports: [ɵInternalFormsSharedModule, NgModel, NgModelGroup, NgForm] + }); + static ɵ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 ɵfac = function ReactiveFormsModule_Factory(__ngFactoryType__) { + return new (__ngFactoryType__ || _ReactiveFormsModule)(); + }; + static ɵmod = ɵɵdefineNgModule({ + type: _ReactiveFormsModule, + declarations: [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName], + exports: [ɵInternalFormsSharedModule, FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName] + }); + static ɵ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 v19.1.4 + * (c) 2010-2024 Google LLC. https://angular.io/ + * License: MIT + *) +*/ +//# sourceMappingURL=@angular_forms.js.map diff --git a/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js.map b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js.map new file mode 100644 index 0000000..dee6cca --- /dev/null +++ b/.angular/cache/19.1.5/nombre-del-proyecto/vite/deps/@angular_forms.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../../../node_modules/@angular/forms/fesm2022/forms.mjs"], + "sourcesContent": ["/**\n * @license Angular v19.1.4\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, untracked, computed, signal, 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 _renderer;\n _elementRef;\n /**\n * The registered callback function called when a change or input event occurs on the input\n * element.\n * @nodoc\n */\n onChange = _ => {};\n /**\n * The registered callback function called when a blur event occurs on the input element.\n * @nodoc\n */\n onTouched = () => {};\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n /**\n * Helper method that sets a property on a target element using the current Renderer\n * implementation.\n * @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 ɵfac = function BaseControlValueAccessor_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || BaseControlValueAccessor)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BaseControlValueAccessor\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BaseControlValueAccessor, [{\n type: Directive\n }], () => [{\n type: i0.Renderer2\n }, {\n type: i0.ElementRef\n }], null);\n})();\n/**\n * Base class for all built-in ControlValueAccessor classes (except DefaultValueAccessor, which is\n * used in case no other CVAs can be found). We use this class to distinguish between default CVA,\n * built-in CVAs and custom CVAs, so that Forms logic can recognize built-in CVAs and treat custom\n * ones with higher priority (when both built-in and custom CVAs are present).\n *\n * Note: this is an *internal-only* class and should not be extended or used directly in\n * applications code.\n */\nclass BuiltInControlValueAccessor extends BaseControlValueAccessor {\n static ɵfac = /* @__PURE__ */(() => {\n let ɵBuiltInControlValueAccessor_BaseFactory;\n return function BuiltInControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵBuiltInControlValueAccessor_BaseFactory || (ɵBuiltInControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(BuiltInControlValueAccessor)))(__ngFactoryType__ || BuiltInControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: BuiltInControlValueAccessor,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(BuiltInControlValueAccessor, [{\n type: Directive\n }], null, null);\n})();\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nconst NG_VALUE_ACCESSOR = new InjectionToken(ngDevMode ? 'NgValueAccessor' : '');\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true\n};\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```html\n * \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 ɵfac = /* @__PURE__ */(() => {\n let ɵCheckboxControlValueAccessor_BaseFactory;\n return function CheckboxControlValueAccessor_Factory(__ngFactoryType__) {\n return (ɵCheckboxControlValueAccessor_BaseFactory || (ɵCheckboxControlValueAccessor_BaseFactory = i0.ɵɵgetInheritedFactory(CheckboxControlValueAccessor)))(__ngFactoryType__ || CheckboxControlValueAccessor);\n };\n })();\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CheckboxControlValueAccessor,\n selectors: [[\"input\", \"type\", \"checkbox\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"ngModel\", \"\"]],\n hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"change\", function CheckboxControlValueAccessor_change_HostBindingHandler($event) {\n return ctx.onChange($event.target.checked);\n })(\"blur\", function CheckboxControlValueAccessor_blur_HostBindingHandler() {\n return ctx.onTouched();\n });\n }\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR]), i0.ɵɵInheritDefinitionFeature]\n });\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CheckboxControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: {\n '(change)': 'onChange($event.target.checked)',\n '(blur)': 'onTouched()'\n },\n providers: [CHECKBOX_VALUE_ACCESSOR],\n standalone: false\n }]\n }], null, null);\n})();\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid() {\n const userAgent = ɵgetDOM() ? ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nconst COMPOSITION_BUFFER_MODE = new InjectionToken(ngDevMode ? 'CompositionEventMode' : '');\n/**\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```html\n * \n * ```\n *\n * This value accessor is used by default for `` and `