@angular/core 20.0.0-next.2 → 20.0.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/event_dispatcher.d-pVP0-wST.d.ts +345 -0
- package/fesm2022/core.mjs +614 -428
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/injector-BlLwZ2sr.mjs +24 -0
- package/fesm2022/injector-BlLwZ2sr.mjs.map +1 -0
- package/fesm2022/primitives/di.mjs +5 -18
- package/fesm2022/primitives/di.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +4 -589
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -8
- package/fesm2022/rxjs-interop.mjs.map +1 -1
- package/fesm2022/testing.mjs +2 -10
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/untracked-DkcXpNb_.mjs +620 -0
- package/fesm2022/untracked-DkcXpNb_.mjs.map +1 -0
- package/index.d.ts +7589 -7510
- package/{navigation_types.d-u4EOrrdZ.d.ts → navigation_types.d-DgDrF5rp.d.ts} +2 -2
- package/package.json +2 -2
- package/primitives/di/index.d.ts +25 -10
- package/primitives/event-dispatch/index.d.ts +5 -340
- package/primitives/signals/index.d.ts +5 -208
- package/rxjs-interop/index.d.ts +1 -10
- package/schematics/bundles/{apply_import_manager-CyRT0UvU.js → apply_import_manager-CeNv8GIG.js} +6 -6
- package/schematics/bundles/{checker-DF8ZaFW5.js → checker-k591b6WQ.js} +856 -180
- package/schematics/bundles/cleanup-unused-imports.js +42 -69
- package/schematics/bundles/{compiler_host-Da636uJ8.js → compiler_host-DwM3ugW3.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +34 -13
- package/schematics/bundles/imports-CIX-JgAN.js +1 -1
- package/schematics/bundles/{program-BZk27Ndu.js → index-B4OAlHh8.js} +2234 -2097
- package/schematics/bundles/{index-DnkWgagp.js → index-BhELUmYx.js} +11 -11
- package/schematics/bundles/inject-flags.js +18 -52
- package/schematics/bundles/inject-migration.js +3 -3
- package/schematics/bundles/leading_space-D9nQ8UQC.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-DtkOnnv0.js → migrate_ts_type_references-Be0TNYen.js} +20 -20
- package/schematics/bundles/ng_decorators-DznZ5jMl.js +1 -1
- package/schematics/bundles/nodes-B16H9JUd.js +1 -1
- package/schematics/bundles/output-migration.js +62 -90
- package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.js +1 -1
- package/schematics/bundles/property_name-BBwFuqMe.js +1 -1
- package/schematics/bundles/route-lazy-loading.js +3 -3
- package/schematics/bundles/{project_paths-Jtbi76Bs.js → run_in_devkit-CkvEksWP.js} +262 -197
- package/schematics/bundles/self-closing-tags-migration.js +41 -71
- package/schematics/bundles/signal-input-migration.js +69 -97
- package/schematics/bundles/signal-queries-migration.js +80 -108
- package/schematics/bundles/signals.js +11 -11
- package/schematics/bundles/standalone-migration.js +8 -22
- package/schematics/bundles/symbol-VPWguRxr.js +25 -0
- package/schematics/bundles/test-bed-get.js +98 -0
- package/schematics/migrations.json +5 -0
- package/testing/index.d.ts +2 -4
- package/weak_ref.d-BZ7gyRag.d.ts +216 -0
- package/fesm2022/weak_ref-DrMdAIDh.mjs +0 -12
- package/fesm2022/weak_ref-DrMdAIDh.mjs.map +0 -1
- package/schematics/bundles/index-vGJcp5M7.js +0 -30
- package/weak_ref.d-ttyj86RV.d.ts +0 -9
package/fesm2022/core.mjs
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v20.0.0-next.
|
|
2
|
+
* @license Angular v20.0.0-next.4
|
|
3
3
|
* (c) 2010-2025 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { SIGNAL_NODE, signalSetFn, SIGNAL, producerAccessed, getActiveConsumer, setActiveConsumer, createSignal, signalUpdateFn, consumerDestroy, REACTIVE_NODE, consumerPollProducersForChange, consumerBeforeComputation, consumerAfterComputation, createComputed, setThrowInvalidWriteToSignalError, isInNotificationPhase, createLinkedSignal, linkedSignalSetFn, linkedSignalUpdateFn } from '
|
|
8
|
-
export {
|
|
9
|
-
import { getCurrentInjector, setCurrentInjector } from '
|
|
10
|
-
|
|
7
|
+
import { x as SIGNAL_NODE, B as signalSetFn, S as SIGNAL, p as producerAccessed, k as getActiveConsumer, v as setActiveConsumer$1, y as createSignal, C as signalUpdateFn, a as consumerDestroy, R as REACTIVE_NODE, b as consumerPollProducersForChange, d as consumerBeforeComputation, e as consumerAfterComputation, f as createComputed, s as setThrowInvalidWriteToSignalError, E as untracked$1, i as isInNotificationPhase, g as createLinkedSignal, l as linkedSignalSetFn, h as linkedSignalUpdateFn } from './untracked-DkcXpNb_.mjs';
|
|
8
|
+
export { D as ɵsetAlternateWeakRefImpl } from './untracked-DkcXpNb_.mjs';
|
|
9
|
+
import { g as getCurrentInjector, s as setCurrentInjector } from './injector-BlLwZ2sr.mjs';
|
|
10
|
+
import { setActiveConsumer } from '@angular/core/primitives/signals';
|
|
11
11
|
import { Subject, BehaviorSubject, Subscription } from 'rxjs';
|
|
12
|
-
import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, EventPhase, isEarlyEventType, isCaptureEventType } from '
|
|
12
|
+
import { Attribute as Attribute$1, clearAppScopedEarlyEventContract, EventContract, EventContractContainer, getAppScopedQueuedEventInfos, EventDispatcher, registerDispatcher, EventPhase, isEarlyEventType, isCaptureEventType } from './primitives/event-dispatch.mjs';
|
|
13
13
|
import { map } from 'rxjs/operators';
|
|
14
|
-
export { s as ɵsetAlternateWeakRefImpl } from './weak_ref-DrMdAIDh.mjs';
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* Base URL for the error details page.
|
|
@@ -99,7 +98,12 @@ function createInputSignal(initialValue, options) {
|
|
|
99
98
|
// Record that someone looked at this signal.
|
|
100
99
|
producerAccessed(node);
|
|
101
100
|
if (node.value === REQUIRED_UNSET_VALUE) {
|
|
102
|
-
|
|
101
|
+
let message = null;
|
|
102
|
+
if (ngDevMode) {
|
|
103
|
+
const name = options?.debugName ?? options?.alias;
|
|
104
|
+
message = `Input${name ? ` "${name}"` : ''} is required but no value is available yet.`;
|
|
105
|
+
}
|
|
106
|
+
throw new RuntimeError(-950 /* RuntimeErrorCode.REQUIRED_INPUT_NO_VALUE */, message);
|
|
103
107
|
}
|
|
104
108
|
return node.value;
|
|
105
109
|
}
|
|
@@ -506,6 +510,11 @@ function assertGreaterThanOrEqual(actual, expected, msg) {
|
|
|
506
510
|
throwError(msg, actual, expected, '>=');
|
|
507
511
|
}
|
|
508
512
|
}
|
|
513
|
+
function assertNotDefined(actual, msg) {
|
|
514
|
+
if (actual != null) {
|
|
515
|
+
throwError(msg, actual, null, '==');
|
|
516
|
+
}
|
|
517
|
+
}
|
|
509
518
|
function assertDefined(actual, msg) {
|
|
510
519
|
if (actual == null) {
|
|
511
520
|
throwError(msg, actual, null, '!=');
|
|
@@ -4188,12 +4197,12 @@ function callHooks(currentView, arr, initPhase, currentNodeIndex) {
|
|
|
4188
4197
|
*/
|
|
4189
4198
|
function callHookInternal(directive, hook) {
|
|
4190
4199
|
profiler(4 /* ProfilerEvent.LifecycleHookStart */, directive, hook);
|
|
4191
|
-
const prevConsumer = setActiveConsumer(null);
|
|
4200
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
4192
4201
|
try {
|
|
4193
4202
|
hook.call(directive);
|
|
4194
4203
|
}
|
|
4195
4204
|
finally {
|
|
4196
|
-
setActiveConsumer(prevConsumer);
|
|
4205
|
+
setActiveConsumer$1(prevConsumer);
|
|
4197
4206
|
profiler(5 /* ProfilerEvent.LifecycleHookEnd */, directive, hook);
|
|
4198
4207
|
}
|
|
4199
4208
|
}
|
|
@@ -6047,7 +6056,7 @@ class OutputEmitterRef {
|
|
|
6047
6056
|
if (this.listeners === null) {
|
|
6048
6057
|
return;
|
|
6049
6058
|
}
|
|
6050
|
-
const previousConsumer = setActiveConsumer(null);
|
|
6059
|
+
const previousConsumer = setActiveConsumer$1(null);
|
|
6051
6060
|
try {
|
|
6052
6061
|
for (const listenerFn of this.listeners) {
|
|
6053
6062
|
try {
|
|
@@ -6059,7 +6068,7 @@ class OutputEmitterRef {
|
|
|
6059
6068
|
}
|
|
6060
6069
|
}
|
|
6061
6070
|
finally {
|
|
6062
|
-
setActiveConsumer(previousConsumer);
|
|
6071
|
+
setActiveConsumer$1(previousConsumer);
|
|
6063
6072
|
}
|
|
6064
6073
|
}
|
|
6065
6074
|
}
|
|
@@ -6263,11 +6272,8 @@ function ɵunwrapWritableSignal(value) {
|
|
|
6263
6272
|
* Create a `Signal` that can be set or updated directly.
|
|
6264
6273
|
*/
|
|
6265
6274
|
function signal(initialValue, options) {
|
|
6266
|
-
const signalFn = createSignal(initialValue);
|
|
6275
|
+
const signalFn = createSignal(initialValue, options?.equal);
|
|
6267
6276
|
const node = signalFn[SIGNAL];
|
|
6268
|
-
if (options?.equal) {
|
|
6269
|
-
node.equal = options.equal;
|
|
6270
|
-
}
|
|
6271
6277
|
signalFn.set = (newValue) => signalSetFn(node, newValue);
|
|
6272
6278
|
signalFn.update = (updateFn) => signalUpdateFn(node, updateFn);
|
|
6273
6279
|
signalFn.asReadonly = signalAsReadonlyFn.bind(signalFn);
|
|
@@ -7300,7 +7306,7 @@ function sortListeners(a, b) {
|
|
|
7300
7306
|
function isDirectiveDefHack(obj) {
|
|
7301
7307
|
return (obj.type !== undefined &&
|
|
7302
7308
|
obj.declaredInputs !== undefined &&
|
|
7303
|
-
obj.
|
|
7309
|
+
obj.resolveHostDirectives !== undefined);
|
|
7304
7310
|
}
|
|
7305
7311
|
/** Asserts that a value is a DOM Element. */
|
|
7306
7312
|
function assertDomElement(value) {
|
|
@@ -7950,12 +7956,12 @@ class EventEmitter_ extends Subject {
|
|
|
7950
7956
|
}
|
|
7951
7957
|
}
|
|
7952
7958
|
emit(value) {
|
|
7953
|
-
const prevConsumer = setActiveConsumer(null);
|
|
7959
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
7954
7960
|
try {
|
|
7955
7961
|
super.next(value);
|
|
7956
7962
|
}
|
|
7957
7963
|
finally {
|
|
7958
|
-
setActiveConsumer(prevConsumer);
|
|
7964
|
+
setActiveConsumer$1(prevConsumer);
|
|
7959
7965
|
}
|
|
7960
7966
|
}
|
|
7961
7967
|
subscribe(observerOrNext, error, complete) {
|
|
@@ -9947,12 +9953,62 @@ function processBlockData(injector) {
|
|
|
9947
9953
|
}
|
|
9948
9954
|
return blockDetails;
|
|
9949
9955
|
}
|
|
9956
|
+
function isSsrContentsIntegrity(node) {
|
|
9957
|
+
return (!!node &&
|
|
9958
|
+
node.nodeType === Node.COMMENT_NODE &&
|
|
9959
|
+
node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER);
|
|
9960
|
+
}
|
|
9961
|
+
function skipTextNodes(node) {
|
|
9962
|
+
// Ignore whitespace. Before the <body>, we shouldn't find text nodes that aren't whitespace.
|
|
9963
|
+
while (node && node.nodeType === Node.TEXT_NODE) {
|
|
9964
|
+
node = node.previousSibling;
|
|
9965
|
+
}
|
|
9966
|
+
return node;
|
|
9967
|
+
}
|
|
9968
|
+
/**
|
|
9969
|
+
* Verifies whether the DOM contains a special marker added during SSR time to make sure
|
|
9970
|
+
* there is no SSR'ed contents transformations happen after SSR is completed. Typically that
|
|
9971
|
+
* happens either by CDN or during the build process as an optimization to remove comment nodes.
|
|
9972
|
+
* Hydration process requires comment nodes produced by Angular to locate correct DOM segments.
|
|
9973
|
+
* When this special marker is *not* present - throw an error and do not proceed with hydration,
|
|
9974
|
+
* since it will not be able to function correctly.
|
|
9975
|
+
*
|
|
9976
|
+
* Note: this function is invoked only on the client, so it's safe to use DOM APIs.
|
|
9977
|
+
*/
|
|
9978
|
+
function verifySsrContentsIntegrity(doc) {
|
|
9979
|
+
for (const node of doc.body.childNodes) {
|
|
9980
|
+
if (isSsrContentsIntegrity(node)) {
|
|
9981
|
+
return;
|
|
9982
|
+
}
|
|
9983
|
+
}
|
|
9984
|
+
// Check if the HTML parser may have moved the marker to just before the <body> tag,
|
|
9985
|
+
// e.g. because the body tag was implicit and not present in the markup. An implicit body
|
|
9986
|
+
// tag is unlikely to interfer with whitespace/comments inside of the app's root element.
|
|
9987
|
+
// Case 1: Implicit body. Example:
|
|
9988
|
+
// <!doctype html><head><title>Hi</title></head><!--nghm--><app-root></app-root>
|
|
9989
|
+
const beforeBody = skipTextNodes(doc.body.previousSibling);
|
|
9990
|
+
if (isSsrContentsIntegrity(beforeBody)) {
|
|
9991
|
+
return;
|
|
9992
|
+
}
|
|
9993
|
+
// Case 2: Implicit body & head. Example:
|
|
9994
|
+
// <!doctype html><head><title>Hi</title><!--nghm--><app-root></app-root>
|
|
9995
|
+
let endOfHead = skipTextNodes(doc.head.lastChild);
|
|
9996
|
+
if (isSsrContentsIntegrity(endOfHead)) {
|
|
9997
|
+
return;
|
|
9998
|
+
}
|
|
9999
|
+
throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' &&
|
|
10000
|
+
ngDevMode &&
|
|
10001
|
+
'Angular hydration logic detected that HTML content of this page was modified after it ' +
|
|
10002
|
+
'was produced during server side rendering. Make sure that there are no optimizations ' +
|
|
10003
|
+
'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' +
|
|
10004
|
+
'relies on HTML produced by the server, including whitespaces and comment nodes.');
|
|
10005
|
+
}
|
|
9950
10006
|
|
|
9951
10007
|
/** Refreshes all content queries declared by directives in a given view */
|
|
9952
10008
|
function refreshContentQueries(tView, lView) {
|
|
9953
10009
|
const contentQueries = tView.contentQueries;
|
|
9954
10010
|
if (contentQueries !== null) {
|
|
9955
|
-
const prevConsumer = setActiveConsumer(null);
|
|
10011
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
9956
10012
|
try {
|
|
9957
10013
|
for (let i = 0; i < contentQueries.length; i += 2) {
|
|
9958
10014
|
const queryStartIdx = contentQueries[i];
|
|
@@ -9968,24 +10024,24 @@ function refreshContentQueries(tView, lView) {
|
|
|
9968
10024
|
}
|
|
9969
10025
|
}
|
|
9970
10026
|
finally {
|
|
9971
|
-
setActiveConsumer(prevConsumer);
|
|
10027
|
+
setActiveConsumer$1(prevConsumer);
|
|
9972
10028
|
}
|
|
9973
10029
|
}
|
|
9974
10030
|
}
|
|
9975
10031
|
function executeViewQueryFn(flags, viewQueryFn, component) {
|
|
9976
10032
|
ngDevMode && assertDefined(viewQueryFn, 'View queries function to execute must be defined.');
|
|
9977
10033
|
setCurrentQueryIndex(0);
|
|
9978
|
-
const prevConsumer = setActiveConsumer(null);
|
|
10034
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
9979
10035
|
try {
|
|
9980
10036
|
viewQueryFn(flags, component);
|
|
9981
10037
|
}
|
|
9982
10038
|
finally {
|
|
9983
|
-
setActiveConsumer(prevConsumer);
|
|
10039
|
+
setActiveConsumer$1(prevConsumer);
|
|
9984
10040
|
}
|
|
9985
10041
|
}
|
|
9986
10042
|
function executeContentQueries(tView, tNode, lView) {
|
|
9987
10043
|
if (isContentQueryHost(tNode)) {
|
|
9988
|
-
const prevConsumer = setActiveConsumer(null);
|
|
10044
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
9989
10045
|
try {
|
|
9990
10046
|
const start = tNode.directiveStart;
|
|
9991
10047
|
const end = tNode.directiveEnd;
|
|
@@ -10000,7 +10056,7 @@ function executeContentQueries(tView, tNode, lView) {
|
|
|
10000
10056
|
}
|
|
10001
10057
|
}
|
|
10002
10058
|
finally {
|
|
10003
|
-
setActiveConsumer(prevConsumer);
|
|
10059
|
+
setActiveConsumer$1(prevConsumer);
|
|
10004
10060
|
}
|
|
10005
10061
|
}
|
|
10006
10062
|
}
|
|
@@ -12241,7 +12297,7 @@ var InputFlags;
|
|
|
12241
12297
|
})(InputFlags || (InputFlags = {}));
|
|
12242
12298
|
|
|
12243
12299
|
function writeToDirectiveInput(def, instance, publicName, value) {
|
|
12244
|
-
const prevConsumer = setActiveConsumer(null);
|
|
12300
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
12245
12301
|
try {
|
|
12246
12302
|
if (ngDevMode) {
|
|
12247
12303
|
if (!def.inputs.hasOwnProperty(publicName)) {
|
|
@@ -12281,7 +12337,7 @@ function writeToDirectiveInput(def, instance, publicName, value) {
|
|
|
12281
12337
|
}
|
|
12282
12338
|
}
|
|
12283
12339
|
finally {
|
|
12284
|
-
setActiveConsumer(prevConsumer);
|
|
12340
|
+
setActiveConsumer$1(prevConsumer);
|
|
12285
12341
|
}
|
|
12286
12342
|
}
|
|
12287
12343
|
|
|
@@ -12704,17 +12760,6 @@ function handleUncaughtError(lView, error) {
|
|
|
12704
12760
|
const errorHandler = injector.get(INTERNAL_APPLICATION_ERROR_HANDLER, null);
|
|
12705
12761
|
errorHandler?.(error);
|
|
12706
12762
|
}
|
|
12707
|
-
/**
|
|
12708
|
-
* Handles an error thrown in an LView.
|
|
12709
|
-
* @deprecated Use handleUncaughtError to report to application error handler
|
|
12710
|
-
*/
|
|
12711
|
-
function handleError(lView, error) {
|
|
12712
|
-
const injector = lView[INJECTOR];
|
|
12713
|
-
if (!injector) {
|
|
12714
|
-
return;
|
|
12715
|
-
}
|
|
12716
|
-
injector.get(ErrorHandler, null)?.handleError(error);
|
|
12717
|
-
}
|
|
12718
12763
|
/**
|
|
12719
12764
|
* Set all directive inputs with the specific public name on the node.
|
|
12720
12765
|
*
|
|
@@ -12919,7 +12964,7 @@ function renderChildComponents(hostLView, components) {
|
|
|
12919
12964
|
}
|
|
12920
12965
|
|
|
12921
12966
|
function createAndRenderEmbeddedLView(declarationLView, templateTNode, context, options) {
|
|
12922
|
-
const prevConsumer = setActiveConsumer(null);
|
|
12967
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
12923
12968
|
try {
|
|
12924
12969
|
const embeddedTView = templateTNode.tView;
|
|
12925
12970
|
ngDevMode && assertDefined(embeddedTView, 'TView must be defined for a template node.');
|
|
@@ -12940,7 +12985,7 @@ function createAndRenderEmbeddedLView(declarationLView, templateTNode, context,
|
|
|
12940
12985
|
return embeddedLView;
|
|
12941
12986
|
}
|
|
12942
12987
|
finally {
|
|
12943
|
-
setActiveConsumer(prevConsumer);
|
|
12988
|
+
setActiveConsumer$1(prevConsumer);
|
|
12944
12989
|
}
|
|
12945
12990
|
}
|
|
12946
12991
|
/**
|
|
@@ -13184,7 +13229,7 @@ function cleanUpView(tView, lView) {
|
|
|
13184
13229
|
if (isDestroyed(lView)) {
|
|
13185
13230
|
return;
|
|
13186
13231
|
}
|
|
13187
|
-
const prevConsumer = setActiveConsumer(null);
|
|
13232
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
13188
13233
|
try {
|
|
13189
13234
|
// Usually the Attached flag is removed when the view is detached from its parent, however
|
|
13190
13235
|
// if it's a root view, the flag won't be unset hence why we're also removing on destroy.
|
|
@@ -13219,7 +13264,7 @@ function cleanUpView(tView, lView) {
|
|
|
13219
13264
|
unregisterLView(lView);
|
|
13220
13265
|
}
|
|
13221
13266
|
finally {
|
|
13222
|
-
setActiveConsumer(prevConsumer);
|
|
13267
|
+
setActiveConsumer$1(prevConsumer);
|
|
13223
13268
|
}
|
|
13224
13269
|
}
|
|
13225
13270
|
/** Removes listeners and unsubscribes from output subscriptions */
|
|
@@ -16762,6 +16807,17 @@ function locateDehydratedViewsInContainer(currentRNode, serializedViews) {
|
|
|
16762
16807
|
* Returns `null` by default, when hydration is not enabled.
|
|
16763
16808
|
*/
|
|
16764
16809
|
let _findMatchingDehydratedViewImpl = () => null;
|
|
16810
|
+
/**
|
|
16811
|
+
* Reference to a function that searches for a matching dehydrated view
|
|
16812
|
+
* stored on a control flow lContainer and removes the dehydrated content
|
|
16813
|
+
* once found.
|
|
16814
|
+
* Returns `null` by default, when hydration is not enabled.
|
|
16815
|
+
*/
|
|
16816
|
+
let _findAndReconcileMatchingDehydratedViewsImpl = () => null;
|
|
16817
|
+
function enableFindMatchingDehydratedViewImpl() {
|
|
16818
|
+
_findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;
|
|
16819
|
+
_findAndReconcileMatchingDehydratedViewsImpl = findAndReconcileMatchingDehydratedViewsImpl;
|
|
16820
|
+
}
|
|
16765
16821
|
/**
|
|
16766
16822
|
* Retrieves the next dehydrated view from the LContainer and verifies that
|
|
16767
16823
|
* it matches a given template id (from the TView that was used to create this
|
|
@@ -16772,17 +16828,8 @@ let _findMatchingDehydratedViewImpl = () => null;
|
|
|
16772
16828
|
* in this container.
|
|
16773
16829
|
*/
|
|
16774
16830
|
function findMatchingDehydratedViewImpl(lContainer, template) {
|
|
16775
|
-
|
|
16776
|
-
|
|
16777
|
-
return null;
|
|
16778
|
-
}
|
|
16779
|
-
const view = views[0];
|
|
16780
|
-
// Verify whether the first dehydrated view in the container matches
|
|
16781
|
-
// the template id passed to this function (that originated from a TView
|
|
16782
|
-
// that was used to create an instance of an embedded or component views.
|
|
16783
|
-
if (view.data[TEMPLATE_ID] === template) {
|
|
16784
|
-
// If the template id matches - extract the first view and return it.
|
|
16785
|
-
return views.shift();
|
|
16831
|
+
if (hasMatchingDehydratedView(lContainer, template)) {
|
|
16832
|
+
return lContainer[DEHYDRATED_VIEWS].shift();
|
|
16786
16833
|
}
|
|
16787
16834
|
else {
|
|
16788
16835
|
// Otherwise, we are at the state when reconciliation can not be completed,
|
|
@@ -16793,12 +16840,84 @@ function findMatchingDehydratedViewImpl(lContainer, template) {
|
|
|
16793
16840
|
return null;
|
|
16794
16841
|
}
|
|
16795
16842
|
}
|
|
16796
|
-
function enableFindMatchingDehydratedViewImpl() {
|
|
16797
|
-
_findMatchingDehydratedViewImpl = findMatchingDehydratedViewImpl;
|
|
16798
|
-
}
|
|
16799
16843
|
function findMatchingDehydratedView(lContainer, template) {
|
|
16800
16844
|
return _findMatchingDehydratedViewImpl(lContainer, template);
|
|
16801
16845
|
}
|
|
16846
|
+
function findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView) {
|
|
16847
|
+
if (templateTNode.tView.ssrId === null)
|
|
16848
|
+
return null;
|
|
16849
|
+
const dehydratedView = findMatchingDehydratedView(lContainer, templateTNode.tView.ssrId);
|
|
16850
|
+
// we know that an ssrId was generated, but we were unable to match it to
|
|
16851
|
+
// a dehydrated view, which means that we may have changed branches
|
|
16852
|
+
// between server and client. We'll need to find and remove those
|
|
16853
|
+
// stale dehydrated views.
|
|
16854
|
+
if (hostLView[TVIEW].firstUpdatePass && dehydratedView === null) {
|
|
16855
|
+
removeStaleDehydratedBranch(hostLView, templateTNode);
|
|
16856
|
+
}
|
|
16857
|
+
return dehydratedView;
|
|
16858
|
+
}
|
|
16859
|
+
function findAndReconcileMatchingDehydratedViews(lContainer, templateTNode, hostLView) {
|
|
16860
|
+
return _findAndReconcileMatchingDehydratedViewsImpl(lContainer, templateTNode, hostLView);
|
|
16861
|
+
}
|
|
16862
|
+
/**
|
|
16863
|
+
* In the case that we have control flow that changes branches between server and
|
|
16864
|
+
* client, we're left with dehydrated content that will not be used. We need to find
|
|
16865
|
+
* it and clean it up at the right time so that we don't see duplicate content for
|
|
16866
|
+
* a few moments before the application reaches stability. This navigates the
|
|
16867
|
+
* control flow containers by looking at the TNodeFlags to find the matching
|
|
16868
|
+
* dehydrated content for the branch that is now stale from the server and removes it.
|
|
16869
|
+
*/
|
|
16870
|
+
function removeStaleDehydratedBranch(hostLView, tNode) {
|
|
16871
|
+
let currentTNode = tNode;
|
|
16872
|
+
while (currentTNode) {
|
|
16873
|
+
// We can return here if we've found the dehydrated view and cleaned it up.
|
|
16874
|
+
// Otherwise we continue on until we either find it or reach the start of
|
|
16875
|
+
// the control flow.
|
|
16876
|
+
if (cleanupMatchingDehydratedViews(hostLView, currentTNode))
|
|
16877
|
+
return;
|
|
16878
|
+
if ((currentTNode.flags & 256 /* TNodeFlags.isControlFlowStart */) === 256 /* TNodeFlags.isControlFlowStart */) {
|
|
16879
|
+
// we've hit the top of the control flow loop
|
|
16880
|
+
break;
|
|
16881
|
+
}
|
|
16882
|
+
currentTNode = currentTNode.prev;
|
|
16883
|
+
}
|
|
16884
|
+
currentTNode = tNode.next; // jump to place we started so we can navigate down from there
|
|
16885
|
+
while (currentTNode) {
|
|
16886
|
+
if ((currentTNode.flags & 512 /* TNodeFlags.isInControlFlow */) !== 512 /* TNodeFlags.isInControlFlow */) {
|
|
16887
|
+
// we've exited control flow and need to exit the loop.
|
|
16888
|
+
break;
|
|
16889
|
+
}
|
|
16890
|
+
// Similar to above, we can return here if we've found the dehydrated view
|
|
16891
|
+
// and cleaned it up. Otherwise we continue on until we either find it or
|
|
16892
|
+
// reach the end of the control flow.
|
|
16893
|
+
if (cleanupMatchingDehydratedViews(hostLView, currentTNode))
|
|
16894
|
+
return;
|
|
16895
|
+
currentTNode = currentTNode.next;
|
|
16896
|
+
}
|
|
16897
|
+
}
|
|
16898
|
+
function hasMatchingDehydratedView(lContainer, template) {
|
|
16899
|
+
const views = lContainer[DEHYDRATED_VIEWS];
|
|
16900
|
+
if (!template || views === null || views.length === 0) {
|
|
16901
|
+
return false;
|
|
16902
|
+
}
|
|
16903
|
+
// Verify whether the first dehydrated view in the container matches
|
|
16904
|
+
// the template id passed to this function (that originated from a TView
|
|
16905
|
+
// that was used to create an instance of an embedded or component views.
|
|
16906
|
+
return views[0].data[TEMPLATE_ID] === template;
|
|
16907
|
+
}
|
|
16908
|
+
function cleanupMatchingDehydratedViews(hostLView, currentTNode) {
|
|
16909
|
+
const ssrId = currentTNode.tView?.ssrId;
|
|
16910
|
+
if (ssrId == null /* check both `null` and `undefined` */)
|
|
16911
|
+
return false;
|
|
16912
|
+
const container = hostLView[currentTNode.index];
|
|
16913
|
+
// if we can find the dehydrated view in this container, we know we've found the stale view
|
|
16914
|
+
// and we can remove it.
|
|
16915
|
+
if (isLContainer(container) && hasMatchingDehydratedView(container, ssrId)) {
|
|
16916
|
+
removeDehydratedViews(container);
|
|
16917
|
+
return true;
|
|
16918
|
+
}
|
|
16919
|
+
return false;
|
|
16920
|
+
}
|
|
16802
16921
|
|
|
16803
16922
|
/**
|
|
16804
16923
|
* Represents a component created by a `ComponentFactory`.
|
|
@@ -17283,15 +17402,15 @@ function resolveDirectives(tView, lView, tNode, localRefs, directiveMatcher) {
|
|
|
17283
17402
|
const exportsMap = localRefs === null ? null : { '': -1 };
|
|
17284
17403
|
const matchedDirectiveDefs = directiveMatcher(tView, tNode);
|
|
17285
17404
|
if (matchedDirectiveDefs !== null) {
|
|
17286
|
-
let directiveDefs;
|
|
17405
|
+
let directiveDefs = matchedDirectiveDefs;
|
|
17287
17406
|
let hostDirectiveDefs = null;
|
|
17288
17407
|
let hostDirectiveRanges = null;
|
|
17289
|
-
const
|
|
17290
|
-
|
|
17291
|
-
|
|
17292
|
-
|
|
17293
|
-
|
|
17294
|
-
|
|
17408
|
+
for (const def of matchedDirectiveDefs) {
|
|
17409
|
+
if (def.resolveHostDirectives !== null) {
|
|
17410
|
+
[directiveDefs, hostDirectiveDefs, hostDirectiveRanges] =
|
|
17411
|
+
def.resolveHostDirectives(matchedDirectiveDefs);
|
|
17412
|
+
break;
|
|
17413
|
+
}
|
|
17295
17414
|
}
|
|
17296
17415
|
ngDevMode && assertNoDuplicateDirectives(directiveDefs);
|
|
17297
17416
|
initializeDirectives(tView, lView, tNode, directiveDefs, exportsMap, hostDirectiveDefs, hostDirectiveRanges);
|
|
@@ -17313,67 +17432,6 @@ function cacheMatchingLocalNames(tNode, localRefs, exportsMap) {
|
|
|
17313
17432
|
localNames.push(localRefs[i], index);
|
|
17314
17433
|
}
|
|
17315
17434
|
}
|
|
17316
|
-
function resolveHostDirectives(matches) {
|
|
17317
|
-
let componentDef = null;
|
|
17318
|
-
let hasHostDirectives = false;
|
|
17319
|
-
// Having host directives is the less common scenario. Make an initial
|
|
17320
|
-
// validation pass so we don't allocate memory unnecessarily.
|
|
17321
|
-
for (let i = 0; i < matches.length; i++) {
|
|
17322
|
-
const def = matches[i];
|
|
17323
|
-
// Given that we may need this further down, we can resolve it already while validating.
|
|
17324
|
-
if (i === 0 && isComponentDef(def)) {
|
|
17325
|
-
componentDef = def;
|
|
17326
|
-
}
|
|
17327
|
-
if (def.findHostDirectiveDefs !== null) {
|
|
17328
|
-
hasHostDirectives = true;
|
|
17329
|
-
break;
|
|
17330
|
-
}
|
|
17331
|
-
}
|
|
17332
|
-
// If there's at least one def with host directive, we can't bail out of this function.
|
|
17333
|
-
if (!hasHostDirectives) {
|
|
17334
|
-
return null;
|
|
17335
|
-
}
|
|
17336
|
-
const allDirectiveDefs = [];
|
|
17337
|
-
let hostDirectiveDefs = null;
|
|
17338
|
-
let hostDirectiveRanges = null;
|
|
17339
|
-
// Components are inserted at the front of the matches array so that their lifecycle
|
|
17340
|
-
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
17341
|
-
// compatibility. This logic doesn't make sense with host directives, because it
|
|
17342
|
-
// would allow the host directives to undo any overrides the host may have made.
|
|
17343
|
-
// To handle this case, the host directives of components are inserted at the beginning
|
|
17344
|
-
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
17345
|
-
// 1. Host directives belonging to the selector-matched component.
|
|
17346
|
-
// 2. Selector-matched component.
|
|
17347
|
-
// 3. Host directives belonging to selector-matched directives.
|
|
17348
|
-
// 4. Selector-matched dir
|
|
17349
|
-
for (const def of matches) {
|
|
17350
|
-
if (def.findHostDirectiveDefs !== null) {
|
|
17351
|
-
hostDirectiveDefs ??= new Map();
|
|
17352
|
-
hostDirectiveRanges ??= new Map();
|
|
17353
|
-
resolveHostDirectivesForDef(def, allDirectiveDefs, hostDirectiveRanges, hostDirectiveDefs);
|
|
17354
|
-
}
|
|
17355
|
-
// Component definition needs to be pushed early to maintain the correct ordering.
|
|
17356
|
-
if (def === componentDef) {
|
|
17357
|
-
allDirectiveDefs.push(def);
|
|
17358
|
-
}
|
|
17359
|
-
}
|
|
17360
|
-
if (componentDef === null) {
|
|
17361
|
-
allDirectiveDefs.push(...matches);
|
|
17362
|
-
}
|
|
17363
|
-
else {
|
|
17364
|
-
allDirectiveDefs.push(...matches.slice(1));
|
|
17365
|
-
}
|
|
17366
|
-
return [allDirectiveDefs, hostDirectiveDefs, hostDirectiveRanges];
|
|
17367
|
-
}
|
|
17368
|
-
function resolveHostDirectivesForDef(def, allDirectiveDefs, hostDirectiveRanges, hostDirectiveDefs) {
|
|
17369
|
-
ngDevMode && assertDefined(def.findHostDirectiveDefs, 'Expected host directive resolve function');
|
|
17370
|
-
const start = allDirectiveDefs.length;
|
|
17371
|
-
// TODO(pk): probably could return matches instead of taking in an array to fill in?
|
|
17372
|
-
def.findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);
|
|
17373
|
-
// Note that these indexes are within the offset by `directiveStart`. We can't do the
|
|
17374
|
-
// offsetting here, because `directiveStart` hasn't been initialized on the TNode yet.
|
|
17375
|
-
hostDirectiveRanges.set(def, [start, allDirectiveDefs.length - 1]);
|
|
17376
|
-
}
|
|
17377
17435
|
/**
|
|
17378
17436
|
* Marks a given TNode as a component's host. This consists of:
|
|
17379
17437
|
* - setting the component offset on the TNode.
|
|
@@ -17887,213 +17945,6 @@ function bindingUpdated4(lView, bindingIndex, exp1, exp2, exp3, exp4) {
|
|
|
17887
17945
|
return bindingUpdated2(lView, bindingIndex + 2, exp3, exp4) || different;
|
|
17888
17946
|
}
|
|
17889
17947
|
|
|
17890
|
-
/**
|
|
17891
|
-
* Contains a reference to a function that disables event replay feature
|
|
17892
|
-
* for server-side rendered applications. This function is overridden with
|
|
17893
|
-
* an actual implementation when the event replay feature is enabled via
|
|
17894
|
-
* `withEventReplay()` call.
|
|
17895
|
-
*/
|
|
17896
|
-
let stashEventListener = (el, eventName, listenerFn) => { };
|
|
17897
|
-
function setStashFn(fn) {
|
|
17898
|
-
stashEventListener = fn;
|
|
17899
|
-
}
|
|
17900
|
-
/**
|
|
17901
|
-
* Adds an event listener to the current node.
|
|
17902
|
-
*
|
|
17903
|
-
* If an output exists on one of the node's directives, it also subscribes to the output
|
|
17904
|
-
* and saves the subscription for later cleanup.
|
|
17905
|
-
*
|
|
17906
|
-
* @param eventName Name of the event
|
|
17907
|
-
* @param listenerFn The function to be called when event emits
|
|
17908
|
-
* @param useCapture Whether or not to use capture in event listener - this argument is a reminder
|
|
17909
|
-
* from the Renderer3 infrastructure and should be removed from the instruction arguments
|
|
17910
|
-
* @param eventTargetResolver Function that returns global target information in case this listener
|
|
17911
|
-
* should be attached to a global object like window, document or body
|
|
17912
|
-
*
|
|
17913
|
-
* @codeGenApi
|
|
17914
|
-
*/
|
|
17915
|
-
function ɵɵlistener(eventName, listenerFn, useCapture, eventTargetResolver) {
|
|
17916
|
-
const lView = getLView();
|
|
17917
|
-
const tView = getTView();
|
|
17918
|
-
const tNode = getCurrentTNode();
|
|
17919
|
-
listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);
|
|
17920
|
-
return ɵɵlistener;
|
|
17921
|
-
}
|
|
17922
|
-
/**
|
|
17923
|
-
* Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.
|
|
17924
|
-
*
|
|
17925
|
-
* This instruction is for compatibility purposes and is designed to ensure that a
|
|
17926
|
-
* synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered
|
|
17927
|
-
* in the component's renderer. Normally all host listeners are evaluated with the
|
|
17928
|
-
* parent component's renderer, but, in the case of animation @triggers, they need
|
|
17929
|
-
* to be evaluated with the sub component's renderer (because that's where the
|
|
17930
|
-
* animation triggers are defined).
|
|
17931
|
-
*
|
|
17932
|
-
* Do not use this instruction as a replacement for `listener`. This instruction
|
|
17933
|
-
* only exists to ensure compatibility with the ViewEngine's host binding behavior.
|
|
17934
|
-
*
|
|
17935
|
-
* @param eventName Name of the event
|
|
17936
|
-
* @param listenerFn The function to be called when event emits
|
|
17937
|
-
* @param useCapture Whether or not to use capture in event listener
|
|
17938
|
-
* @param eventTargetResolver Function that returns global target information in case this listener
|
|
17939
|
-
* should be attached to a global object like window, document or body
|
|
17940
|
-
*
|
|
17941
|
-
* @codeGenApi
|
|
17942
|
-
*/
|
|
17943
|
-
function ɵɵsyntheticHostListener(eventName, listenerFn) {
|
|
17944
|
-
const tNode = getCurrentTNode();
|
|
17945
|
-
const lView = getLView();
|
|
17946
|
-
const tView = getTView();
|
|
17947
|
-
const currentDef = getCurrentDirectiveDef(tView.data);
|
|
17948
|
-
const renderer = loadComponentRenderer(currentDef, tNode, lView);
|
|
17949
|
-
listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);
|
|
17950
|
-
return ɵɵsyntheticHostListener;
|
|
17951
|
-
}
|
|
17952
|
-
/**
|
|
17953
|
-
* A utility function that checks if a given element has already an event handler registered for an
|
|
17954
|
-
* event with a specified name. The TView.cleanup data structure is used to find out which events
|
|
17955
|
-
* are registered for a given element.
|
|
17956
|
-
*/
|
|
17957
|
-
function findExistingListener(tView, lView, eventName, tNodeIdx) {
|
|
17958
|
-
const tCleanup = tView.cleanup;
|
|
17959
|
-
if (tCleanup != null) {
|
|
17960
|
-
for (let i = 0; i < tCleanup.length - 1; i += 2) {
|
|
17961
|
-
const cleanupEventName = tCleanup[i];
|
|
17962
|
-
if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
|
|
17963
|
-
// We have found a matching event name on the same node but it might not have been
|
|
17964
|
-
// registered yet, so we must explicitly verify entries in the LView cleanup data
|
|
17965
|
-
// structures.
|
|
17966
|
-
const lCleanup = lView[CLEANUP];
|
|
17967
|
-
const listenerIdxInLCleanup = tCleanup[i + 2];
|
|
17968
|
-
return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
|
|
17969
|
-
}
|
|
17970
|
-
// TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or
|
|
17971
|
-
// 2-element entries (for directive and queries destroy hooks). As such we can encounter
|
|
17972
|
-
// blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements
|
|
17973
|
-
// first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check
|
|
17974
|
-
// documentation of TView.cleanup for more details of this data structure layout.
|
|
17975
|
-
if (typeof cleanupEventName === 'string') {
|
|
17976
|
-
i += 2;
|
|
17977
|
-
}
|
|
17978
|
-
}
|
|
17979
|
-
}
|
|
17980
|
-
return null;
|
|
17981
|
-
}
|
|
17982
|
-
function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {
|
|
17983
|
-
const isTNodeDirectiveHost = isDirectiveHost(tNode);
|
|
17984
|
-
const firstCreatePass = tView.firstCreatePass;
|
|
17985
|
-
const tCleanup = firstCreatePass ? getOrCreateTViewCleanup(tView) : null;
|
|
17986
|
-
const context = lView[CONTEXT];
|
|
17987
|
-
// When the ɵɵlistener instruction was generated and is executed we know that there is either a
|
|
17988
|
-
// native listener or a directive output on this element. As such we we know that we will have to
|
|
17989
|
-
// register a listener and store its cleanup function on LView.
|
|
17990
|
-
const lCleanup = getOrCreateLViewCleanup(lView);
|
|
17991
|
-
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);
|
|
17992
|
-
let processOutputs = true;
|
|
17993
|
-
// Adding a native event listener is applicable when:
|
|
17994
|
-
// - The corresponding TNode represents a DOM element.
|
|
17995
|
-
// - The event target has a resolver (usually resulting in a global object,
|
|
17996
|
-
// such as `window` or `document`).
|
|
17997
|
-
if (tNode.type & 3 /* TNodeType.AnyRNode */ || eventTargetResolver) {
|
|
17998
|
-
const native = getNativeByTNode(tNode, lView);
|
|
17999
|
-
const target = eventTargetResolver ? eventTargetResolver(native) : native;
|
|
18000
|
-
const lCleanupIndex = lCleanup.length;
|
|
18001
|
-
const idxOrTargetGetter = eventTargetResolver
|
|
18002
|
-
? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index]))
|
|
18003
|
-
: tNode.index;
|
|
18004
|
-
// In order to match current behavior, native DOM event listeners must be added for all
|
|
18005
|
-
// events (including outputs).
|
|
18006
|
-
// There might be cases where multiple directives on the same element try to register an event
|
|
18007
|
-
// handler function for the same event. In this situation we want to avoid registration of
|
|
18008
|
-
// several native listeners as each registration would be intercepted by NgZone and
|
|
18009
|
-
// trigger change detection. This would mean that a single user action would result in several
|
|
18010
|
-
// change detections being invoked. To avoid this situation we want to have only one call to
|
|
18011
|
-
// native handler registration (for the same element and same type of event).
|
|
18012
|
-
//
|
|
18013
|
-
// In order to have just one native event handler in presence of multiple handler functions,
|
|
18014
|
-
// we just register a first handler function as a native event listener and then chain
|
|
18015
|
-
// (coalesce) other handler functions on top of the first native handler function.
|
|
18016
|
-
let existingListener = null;
|
|
18017
|
-
// Please note that the coalescing described here doesn't happen for events specifying an
|
|
18018
|
-
// alternative target (ex. (document:click)) - this is to keep backward compatibility with the
|
|
18019
|
-
// view engine.
|
|
18020
|
-
// Also, we don't have to search for existing listeners is there are no directives
|
|
18021
|
-
// matching on a given node as we can't register multiple event handlers for the same event in
|
|
18022
|
-
// a template (this would mean having duplicate attributes).
|
|
18023
|
-
if (!eventTargetResolver && isTNodeDirectiveHost) {
|
|
18024
|
-
existingListener = findExistingListener(tView, lView, eventName, tNode.index);
|
|
18025
|
-
}
|
|
18026
|
-
if (existingListener !== null) {
|
|
18027
|
-
// Attach a new listener to coalesced listeners list, maintaining the order in which
|
|
18028
|
-
// listeners are registered. For performance reasons, we keep a reference to the last
|
|
18029
|
-
// listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through
|
|
18030
|
-
// the entire set each time we need to add a new listener.
|
|
18031
|
-
const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
|
|
18032
|
-
lastListenerFn.__ngNextListenerFn__ = listenerFn;
|
|
18033
|
-
existingListener.__ngLastListenerFn__ = listenerFn;
|
|
18034
|
-
processOutputs = false;
|
|
18035
|
-
}
|
|
18036
|
-
else {
|
|
18037
|
-
listenerFn = wrapListener(tNode, lView, context, listenerFn);
|
|
18038
|
-
stashEventListener(target, eventName, listenerFn);
|
|
18039
|
-
const cleanupFn = renderer.listen(target, eventName, listenerFn);
|
|
18040
|
-
lCleanup.push(listenerFn, cleanupFn);
|
|
18041
|
-
tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
|
|
18042
|
-
}
|
|
18043
|
-
}
|
|
18044
|
-
else {
|
|
18045
|
-
// Even if there is no native listener to add, we still need to wrap the listener so that OnPush
|
|
18046
|
-
// ancestors are marked dirty when an event occurs.
|
|
18047
|
-
listenerFn = wrapListener(tNode, lView, context, listenerFn);
|
|
18048
|
-
}
|
|
18049
|
-
if (processOutputs) {
|
|
18050
|
-
const outputConfig = tNode.outputs?.[eventName];
|
|
18051
|
-
const hostDirectiveOutputConfig = tNode.hostDirectiveOutputs?.[eventName];
|
|
18052
|
-
if (hostDirectiveOutputConfig && hostDirectiveOutputConfig.length) {
|
|
18053
|
-
for (let i = 0; i < hostDirectiveOutputConfig.length; i += 2) {
|
|
18054
|
-
const index = hostDirectiveOutputConfig[i];
|
|
18055
|
-
const lookupName = hostDirectiveOutputConfig[i + 1];
|
|
18056
|
-
listenToOutput(tNode, tView, lView, index, lookupName, eventName, listenerFn, lCleanup, tCleanup);
|
|
18057
|
-
}
|
|
18058
|
-
}
|
|
18059
|
-
if (outputConfig && outputConfig.length) {
|
|
18060
|
-
for (const index of outputConfig) {
|
|
18061
|
-
listenToOutput(tNode, tView, lView, index, eventName, eventName, listenerFn, lCleanup, tCleanup);
|
|
18062
|
-
}
|
|
18063
|
-
}
|
|
18064
|
-
}
|
|
18065
|
-
}
|
|
18066
|
-
function listenToOutput(tNode, tView, lView, index, lookupName, eventName, listenerFn, lCleanup, tCleanup) {
|
|
18067
|
-
ngDevMode && assertIndexInRange(lView, index);
|
|
18068
|
-
const instance = lView[index];
|
|
18069
|
-
const def = tView.data[index];
|
|
18070
|
-
const propertyName = def.outputs[lookupName];
|
|
18071
|
-
const output = instance[propertyName];
|
|
18072
|
-
if (ngDevMode && !isOutputSubscribable(output)) {
|
|
18073
|
-
throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);
|
|
18074
|
-
}
|
|
18075
|
-
const subscription = output.subscribe(listenerFn);
|
|
18076
|
-
const idx = lCleanup.length;
|
|
18077
|
-
lCleanup.push(listenerFn, subscription);
|
|
18078
|
-
tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
|
|
18079
|
-
}
|
|
18080
|
-
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
18081
|
-
const prevConsumer = setActiveConsumer(null);
|
|
18082
|
-
try {
|
|
18083
|
-
profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);
|
|
18084
|
-
// Only explicitly returning false from a listener should preventDefault
|
|
18085
|
-
return listenerFn(e) !== false;
|
|
18086
|
-
}
|
|
18087
|
-
catch (error) {
|
|
18088
|
-
// TODO(atscott): This should report to the application error handler, not the ErrorHandler on LView injector
|
|
18089
|
-
handleError(lView, error);
|
|
18090
|
-
return false;
|
|
18091
|
-
}
|
|
18092
|
-
finally {
|
|
18093
|
-
profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);
|
|
18094
|
-
setActiveConsumer(prevConsumer);
|
|
18095
|
-
}
|
|
18096
|
-
}
|
|
18097
17948
|
/**
|
|
18098
17949
|
* Wraps an event listener with a function that marks ancestors dirty and prevents default behavior,
|
|
18099
17950
|
* if applicable.
|
|
@@ -18104,7 +17955,7 @@ function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
|
18104
17955
|
* @param wrapWithPreventDefault Whether or not to prevent default behavior
|
|
18105
17956
|
* (the procedural renderer does this already, so in those cases, we should skip)
|
|
18106
17957
|
*/
|
|
18107
|
-
function wrapListener(tNode, lView,
|
|
17958
|
+
function wrapListener(tNode, lView, listenerFn) {
|
|
18108
17959
|
// Note: we are performing most of the work in the listener function itself
|
|
18109
17960
|
// to optimize listener registration.
|
|
18110
17961
|
return function wrapListenerIn_markDirtyAndPreventDefault(e) {
|
|
@@ -18117,6 +17968,7 @@ function wrapListener(tNode, lView, context, listenerFn) {
|
|
|
18117
17968
|
// must also mark the component view itself dirty (i.e. the view that it owns).
|
|
18118
17969
|
const startView = isComponentHost(tNode) ? getComponentLViewByIndex(tNode.index, lView) : lView;
|
|
18119
17970
|
markViewDirty(startView, 5 /* NotificationSource.Listener */);
|
|
17971
|
+
const context = lView[CONTEXT];
|
|
18120
17972
|
let result = executeListenerWithErrorHandling(lView, context, listenerFn, e);
|
|
18121
17973
|
// A just-invoked listener function might have coalesced listeners so we need to check for
|
|
18122
17974
|
// their presence and invoke as needed.
|
|
@@ -18129,19 +17981,45 @@ function wrapListener(tNode, lView, context, listenerFn) {
|
|
|
18129
17981
|
return result;
|
|
18130
17982
|
};
|
|
18131
17983
|
}
|
|
17984
|
+
function executeListenerWithErrorHandling(lView, context, listenerFn, e) {
|
|
17985
|
+
const prevConsumer = setActiveConsumer(null);
|
|
17986
|
+
try {
|
|
17987
|
+
profiler(6 /* ProfilerEvent.OutputStart */, context, listenerFn);
|
|
17988
|
+
// Only explicitly returning false from a listener should preventDefault
|
|
17989
|
+
return listenerFn(e) !== false;
|
|
17990
|
+
}
|
|
17991
|
+
catch (error) {
|
|
17992
|
+
// TODO(atscott): This should report to the application error handler, not the ErrorHandler on LView injector
|
|
17993
|
+
handleError(lView, error);
|
|
17994
|
+
return false;
|
|
17995
|
+
}
|
|
17996
|
+
finally {
|
|
17997
|
+
profiler(7 /* ProfilerEvent.OutputEnd */, context, listenerFn);
|
|
17998
|
+
setActiveConsumer(prevConsumer);
|
|
17999
|
+
}
|
|
18000
|
+
}
|
|
18132
18001
|
/**
|
|
18133
|
-
*
|
|
18134
|
-
*
|
|
18135
|
-
* For example, an `EventEmitter, a `Subject`, an `Observable` or an
|
|
18136
|
-
* `OutputEmitter`.
|
|
18002
|
+
* Handles an error thrown in an LView.
|
|
18003
|
+
* @deprecated Use handleUncaughtError to report to application error handler
|
|
18137
18004
|
*/
|
|
18138
|
-
function
|
|
18139
|
-
|
|
18005
|
+
function handleError(lView, error) {
|
|
18006
|
+
const injector = lView[INJECTOR];
|
|
18007
|
+
if (!injector) {
|
|
18008
|
+
return;
|
|
18009
|
+
}
|
|
18010
|
+
injector.get(ErrorHandler, null)?.handleError(error);
|
|
18011
|
+
}
|
|
18012
|
+
|
|
18013
|
+
function createOutputListener(tNode, lView, listenerFn, targetDef, eventName) {
|
|
18014
|
+
// TODO(pk): decouple checks from the actual binding
|
|
18015
|
+
const wrappedListener = wrapListener(tNode, lView, listenerFn);
|
|
18016
|
+
const hasBound = listenToDirectiveOutput(tNode, lView, targetDef, eventName, wrappedListener);
|
|
18017
|
+
if (!hasBound && ngDevMode) {
|
|
18018
|
+
throw new RuntimeError(316 /* RuntimeErrorCode.INVALID_BINDING_TARGET */, `${stringifyForError(targetDef.type)} does not have an output with a public name of "${eventName}".`);
|
|
18019
|
+
}
|
|
18140
18020
|
}
|
|
18141
18021
|
/** Listens to an output on a specific directive. */
|
|
18142
|
-
function listenToDirectiveOutput(tNode,
|
|
18143
|
-
const tCleanup = tView.firstCreatePass ? getOrCreateTViewCleanup(tView) : null;
|
|
18144
|
-
const lCleanup = getOrCreateLViewCleanup(lView);
|
|
18022
|
+
function listenToDirectiveOutput(tNode, lView, target, eventName, listenerFn) {
|
|
18145
18023
|
let hostIndex = null;
|
|
18146
18024
|
let hostDirectivesStart = null;
|
|
18147
18025
|
let hostDirectivesEnd = null;
|
|
@@ -18165,20 +18043,47 @@ function listenToDirectiveOutput(tNode, tView, lView, target, eventName, listene
|
|
|
18165
18043
|
if (index >= hostDirectivesStart && index <= hostDirectivesEnd) {
|
|
18166
18044
|
ngDevMode && assertIndexInRange(lView, index);
|
|
18167
18045
|
hasOutput = true;
|
|
18168
|
-
listenToOutput(tNode,
|
|
18046
|
+
listenToOutput(tNode, lView, index, hostDirectiveOutputs[i + 1], eventName, listenerFn);
|
|
18169
18047
|
}
|
|
18170
18048
|
else if (index > hostDirectivesEnd) {
|
|
18171
18049
|
break;
|
|
18172
18050
|
}
|
|
18173
18051
|
}
|
|
18174
18052
|
}
|
|
18175
|
-
if (
|
|
18053
|
+
if (target.outputs.hasOwnProperty(eventName)) {
|
|
18176
18054
|
ngDevMode && assertIndexInRange(lView, hostIndex);
|
|
18177
18055
|
hasOutput = true;
|
|
18178
|
-
listenToOutput(tNode,
|
|
18056
|
+
listenToOutput(tNode, lView, hostIndex, eventName, eventName, listenerFn);
|
|
18179
18057
|
}
|
|
18180
18058
|
return hasOutput;
|
|
18181
18059
|
}
|
|
18060
|
+
function listenToOutput(tNode, lView, directiveIndex, lookupName, eventName, listenerFn) {
|
|
18061
|
+
ngDevMode && assertIndexInRange(lView, directiveIndex);
|
|
18062
|
+
const instance = lView[directiveIndex];
|
|
18063
|
+
const tView = lView[TVIEW];
|
|
18064
|
+
const def = tView.data[directiveIndex];
|
|
18065
|
+
const propertyName = def.outputs[lookupName];
|
|
18066
|
+
const output = instance[propertyName];
|
|
18067
|
+
if (ngDevMode && !isOutputSubscribable(output)) {
|
|
18068
|
+
throw new Error(`@Output ${propertyName} not initialized in '${instance.constructor.name}'.`);
|
|
18069
|
+
}
|
|
18070
|
+
// TODO(pk): introduce utility to store cleanup or find a different way of sharing code with listener
|
|
18071
|
+
const tCleanup = tView.firstCreatePass ? getOrCreateTViewCleanup(tView) : null;
|
|
18072
|
+
const lCleanup = getOrCreateLViewCleanup(lView);
|
|
18073
|
+
const subscription = output.subscribe(listenerFn);
|
|
18074
|
+
const idx = lCleanup.length;
|
|
18075
|
+
lCleanup.push(listenerFn, subscription);
|
|
18076
|
+
tCleanup && tCleanup.push(eventName, tNode.index, idx, -(idx + 1));
|
|
18077
|
+
}
|
|
18078
|
+
/**
|
|
18079
|
+
* Whether the given value represents a subscribable output.
|
|
18080
|
+
*
|
|
18081
|
+
* For example, an `EventEmitter, a `Subject`, an `Observable` or an
|
|
18082
|
+
* `OutputEmitter`.
|
|
18083
|
+
*/
|
|
18084
|
+
function isOutputSubscribable(value) {
|
|
18085
|
+
return (value != null && typeof value.subscribe === 'function');
|
|
18086
|
+
}
|
|
18182
18087
|
|
|
18183
18088
|
/*!
|
|
18184
18089
|
* @license
|
|
@@ -18272,18 +18177,53 @@ function outputBinding(eventName, listener) {
|
|
|
18272
18177
|
throw new RuntimeError(315 /* RuntimeErrorCode.NO_BINDING_TARGET */, `Output binding to "${eventName}" does not have a target.`);
|
|
18273
18178
|
}
|
|
18274
18179
|
const lView = getLView();
|
|
18275
|
-
const tView = getTView();
|
|
18276
18180
|
const tNode = getCurrentTNode();
|
|
18277
|
-
|
|
18278
|
-
const wrappedListener = wrapListener(tNode, lView, context, listener);
|
|
18279
|
-
const hasBound = listenToDirectiveOutput(tNode, tView, lView, target, eventName, wrappedListener);
|
|
18280
|
-
if (!hasBound && ngDevMode) {
|
|
18281
|
-
throw new RuntimeError(316 /* RuntimeErrorCode.INVALID_BINDING_TARGET */, `${stringifyForError(target.type)} does not have an output with a public name of "${eventName}".`);
|
|
18282
|
-
}
|
|
18181
|
+
createOutputListener(tNode, lView, listener, target, eventName);
|
|
18283
18182
|
},
|
|
18284
18183
|
};
|
|
18285
18184
|
return binding;
|
|
18286
18185
|
}
|
|
18186
|
+
/**
|
|
18187
|
+
* Creates a two-way binding.
|
|
18188
|
+
* @param eventName Public name of the two-way compatible input.
|
|
18189
|
+
* @param value Writable signal from which to get the current value and to which to write new
|
|
18190
|
+
* values.
|
|
18191
|
+
*
|
|
18192
|
+
* ### Usage example
|
|
18193
|
+
* In this example we create an instance of the `MyCheckbox` component and bind to its `value`
|
|
18194
|
+
* input using a two-way binding.
|
|
18195
|
+
*
|
|
18196
|
+
* ```
|
|
18197
|
+
* const checkboxValue = signal('');
|
|
18198
|
+
*
|
|
18199
|
+
* createComponent(MyCheckbox, {
|
|
18200
|
+
* bindings: [
|
|
18201
|
+
* twoWayBinding('value', checkboxValue),
|
|
18202
|
+
* ],
|
|
18203
|
+
* });
|
|
18204
|
+
* ```
|
|
18205
|
+
*/
|
|
18206
|
+
function twoWayBinding(publicName, value) {
|
|
18207
|
+
const input = inputBinding(publicName, value);
|
|
18208
|
+
const output = outputBinding(publicName + 'Change', (eventValue) => value.set(eventValue));
|
|
18209
|
+
// We take advantage of inputs only having a `create` block and outputs only having an `update`
|
|
18210
|
+
// block by passing them through directly instead of creating dedicated functions here. This
|
|
18211
|
+
// assumption can break down if one of them starts targeting both blocks. These assertions
|
|
18212
|
+
// are here to help us catch it if something changes in the future.
|
|
18213
|
+
ngDevMode && assertNotDefined(input.create, 'Unexpected `create` callback in inputBinding');
|
|
18214
|
+
ngDevMode && assertNotDefined(output.update, 'Unexpected `update` callback in outputBinding');
|
|
18215
|
+
return {
|
|
18216
|
+
[BINDING]: {
|
|
18217
|
+
kind: 'twoWay',
|
|
18218
|
+
requiredVars: input[BINDING].requiredVars + output[BINDING].requiredVars,
|
|
18219
|
+
},
|
|
18220
|
+
set target(target) {
|
|
18221
|
+
input.target = output.target = target;
|
|
18222
|
+
},
|
|
18223
|
+
create: output.create,
|
|
18224
|
+
update: input.update,
|
|
18225
|
+
};
|
|
18226
|
+
}
|
|
18287
18227
|
|
|
18288
18228
|
class ComponentFactoryResolver extends ComponentFactoryResolver$1 {
|
|
18289
18229
|
ngModule;
|
|
@@ -18398,7 +18338,7 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18398
18338
|
}
|
|
18399
18339
|
create(injector, projectableNodes, rootSelectorOrNode, environmentInjector, directives, componentBindings) {
|
|
18400
18340
|
profiler(22 /* ProfilerEvent.DynamicComponentStart */);
|
|
18401
|
-
const prevConsumer = setActiveConsumer(null);
|
|
18341
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
18402
18342
|
try {
|
|
18403
18343
|
const cmpDef = this.componentDef;
|
|
18404
18344
|
ngDevMode && verifyNotAnOrphanComponent(cmpDef);
|
|
@@ -18470,13 +18410,13 @@ class ComponentFactory extends ComponentFactory$1 {
|
|
|
18470
18410
|
return new ComponentRef(this.componentType, rootLView, !!hasInputBindings);
|
|
18471
18411
|
}
|
|
18472
18412
|
finally {
|
|
18473
|
-
setActiveConsumer(prevConsumer);
|
|
18413
|
+
setActiveConsumer$1(prevConsumer);
|
|
18474
18414
|
}
|
|
18475
18415
|
}
|
|
18476
18416
|
}
|
|
18477
18417
|
function createRootTView(rootSelectorOrNode, componentDef, componentBindings, directives) {
|
|
18478
18418
|
const tAttributes = rootSelectorOrNode
|
|
18479
|
-
? ['ng-version', '20.0.0-next.
|
|
18419
|
+
? ['ng-version', '20.0.0-next.4']
|
|
18480
18420
|
: // Extract attributes and classes from the first selector only to match VE behavior.
|
|
18481
18421
|
extractAttrsAndClassesFromSelector(componentDef.selectors[0]);
|
|
18482
18422
|
let creationBindings = null;
|
|
@@ -18534,7 +18474,8 @@ function getRootTViewTemplate(creationBindings, updateBindings) {
|
|
|
18534
18474
|
};
|
|
18535
18475
|
}
|
|
18536
18476
|
function isInputBinding(binding) {
|
|
18537
|
-
|
|
18477
|
+
const kind = binding[BINDING].kind;
|
|
18478
|
+
return kind === 'input' || kind === 'twoWay';
|
|
18538
18479
|
}
|
|
18539
18480
|
/**
|
|
18540
18481
|
* Represents an instance of a Component created via a {@link ComponentFactory}.
|
|
@@ -18566,7 +18507,7 @@ class ComponentRef extends ComponentRef$1 {
|
|
|
18566
18507
|
}
|
|
18567
18508
|
setInput(name, value) {
|
|
18568
18509
|
if (this._hasInputBindings && ngDevMode) {
|
|
18569
|
-
throw new RuntimeError(317 /* RuntimeErrorCode.INVALID_SET_INPUT_CALL */, 'Cannot call `setInput` on a component that is using the `inputBinding`
|
|
18510
|
+
throw new RuntimeError(317 /* RuntimeErrorCode.INVALID_SET_INPUT_CALL */, 'Cannot call `setInput` on a component that is using the `inputBinding` or `twoWayBinding` functions.');
|
|
18570
18511
|
}
|
|
18571
18512
|
const tNode = this._tNode;
|
|
18572
18513
|
this.previousInputValues ??= new Map();
|
|
@@ -20520,7 +20461,7 @@ function getNgDirectiveDef(directiveDefinition) {
|
|
|
20520
20461
|
viewQuery: directiveDefinition.viewQuery || null,
|
|
20521
20462
|
features: directiveDefinition.features || null,
|
|
20522
20463
|
setInput: null,
|
|
20523
|
-
|
|
20464
|
+
resolveHostDirectives: null,
|
|
20524
20465
|
hostDirectives: null,
|
|
20525
20466
|
inputs: parseAndConvertInputsForDefinition(directiveDefinition.inputs, declaredInputs),
|
|
20526
20467
|
outputs: parseAndConvertOutputsForDefinition(directiveDefinition.outputs),
|
|
@@ -20878,7 +20819,7 @@ function ɵɵHostDirectivesFeature(rawHostDirectives) {
|
|
|
20878
20819
|
const feature = (definition) => {
|
|
20879
20820
|
const isEager = Array.isArray(rawHostDirectives);
|
|
20880
20821
|
if (definition.hostDirectives === null) {
|
|
20881
|
-
definition.
|
|
20822
|
+
definition.resolveHostDirectives = resolveHostDirectives;
|
|
20882
20823
|
definition.hostDirectives = isEager
|
|
20883
20824
|
? rawHostDirectives.map(createHostDirectiveDef)
|
|
20884
20825
|
: [rawHostDirectives];
|
|
@@ -20893,6 +20834,50 @@ function ɵɵHostDirectivesFeature(rawHostDirectives) {
|
|
|
20893
20834
|
feature.ngInherit = true;
|
|
20894
20835
|
return feature;
|
|
20895
20836
|
}
|
|
20837
|
+
/**
|
|
20838
|
+
* Function that will be patched onto a definition to enable host directives. It is intended to
|
|
20839
|
+
* be called once during directive matching and is the same for all definitions.
|
|
20840
|
+
* @param matches Directives resolved through selector matching.
|
|
20841
|
+
*/
|
|
20842
|
+
function resolveHostDirectives(matches) {
|
|
20843
|
+
const allDirectiveDefs = [];
|
|
20844
|
+
let hasComponent = false;
|
|
20845
|
+
let hostDirectiveDefs = null;
|
|
20846
|
+
let hostDirectiveRanges = null;
|
|
20847
|
+
// Components are inserted at the front of the matches array so that their lifecycle
|
|
20848
|
+
// hooks run before any directive lifecycle hooks. This appears to be for ViewEngine
|
|
20849
|
+
// compatibility. This logic doesn't make sense with host directives, because it
|
|
20850
|
+
// would allow the host directives to undo any overrides the host may have made.
|
|
20851
|
+
// To handle this case, the host directives of components are inserted at the beginning
|
|
20852
|
+
// of the array, followed by the component. As such, the insertion order is as follows:
|
|
20853
|
+
// 1. Host directives belonging to the selector-matched component.
|
|
20854
|
+
// 2. Selector-matched component.
|
|
20855
|
+
// 3. Host directives belonging to selector-matched directives.
|
|
20856
|
+
// 4. Selector-matched dir
|
|
20857
|
+
for (let i = 0; i < matches.length; i++) {
|
|
20858
|
+
const def = matches[i];
|
|
20859
|
+
if (def.hostDirectives !== null) {
|
|
20860
|
+
const start = allDirectiveDefs.length;
|
|
20861
|
+
hostDirectiveDefs ??= new Map();
|
|
20862
|
+
hostDirectiveRanges ??= new Map();
|
|
20863
|
+
// TODO(pk): probably could return matches instead of taking in an array to fill in?
|
|
20864
|
+
findHostDirectiveDefs(def, allDirectiveDefs, hostDirectiveDefs);
|
|
20865
|
+
// Note that these indexes are within the offset by `directiveStart`. We can't do the
|
|
20866
|
+
// offsetting here, because `directiveStart` hasn't been initialized on the TNode yet.
|
|
20867
|
+
hostDirectiveRanges.set(def, [start, allDirectiveDefs.length - 1]);
|
|
20868
|
+
}
|
|
20869
|
+
// Component definition is always first and needs to be
|
|
20870
|
+
// pushed early to maintain the correct ordering.
|
|
20871
|
+
if (i === 0 && isComponentDef(def)) {
|
|
20872
|
+
hasComponent = true;
|
|
20873
|
+
allDirectiveDefs.push(def);
|
|
20874
|
+
}
|
|
20875
|
+
}
|
|
20876
|
+
for (let i = hasComponent ? 1 : 0; i < matches.length; i++) {
|
|
20877
|
+
allDirectiveDefs.push(matches[i]);
|
|
20878
|
+
}
|
|
20879
|
+
return [allDirectiveDefs, hostDirectiveDefs, hostDirectiveRanges];
|
|
20880
|
+
}
|
|
20896
20881
|
function findHostDirectiveDefs(currentDef, matchedDefs, hostDirectiveDefs) {
|
|
20897
20882
|
if (currentDef.hostDirectives !== null) {
|
|
20898
20883
|
for (const configOrFn of currentDef.hostDirectives) {
|
|
@@ -21058,11 +21043,14 @@ function templateFirstCreatePass(index, tView, lView, templateFn, decls, vars, t
|
|
|
21058
21043
|
* @param localRefExtractor A function which extracts local-refs values from the template.
|
|
21059
21044
|
* Defaults to the current element associated with the local-ref.
|
|
21060
21045
|
*/
|
|
21061
|
-
function declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor) {
|
|
21046
|
+
function declareTemplate(declarationLView, declarationTView, index, templateFn, decls, vars, tagName, attrs, flags, localRefsIndex, localRefExtractor) {
|
|
21062
21047
|
const adjustedIndex = index + HEADER_OFFSET;
|
|
21063
21048
|
const tNode = declarationTView.firstCreatePass
|
|
21064
21049
|
? templateFirstCreatePass(adjustedIndex, declarationTView, declarationLView, templateFn, decls, vars, tagName, attrs, localRefsIndex)
|
|
21065
21050
|
: declarationTView.data[adjustedIndex];
|
|
21051
|
+
if (flags) {
|
|
21052
|
+
tNode.flags |= flags;
|
|
21053
|
+
}
|
|
21066
21054
|
setCurrentTNode(tNode, false);
|
|
21067
21055
|
const comment = _locateOrCreateContainerAnchor(declarationTView, declarationLView, tNode, index);
|
|
21068
21056
|
if (wasLastNodeCreated()) {
|
|
@@ -21107,7 +21095,7 @@ function ɵɵtemplate(index, templateFn, decls, vars, tagName, attrsIndex, local
|
|
|
21107
21095
|
const lView = getLView();
|
|
21108
21096
|
const tView = getTView();
|
|
21109
21097
|
const attrs = getConstant(tView.consts, attrsIndex);
|
|
21110
|
-
declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, localRefsIndex, localRefExtractor);
|
|
21098
|
+
declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, undefined, localRefsIndex, localRefExtractor);
|
|
21111
21099
|
return ɵɵtemplate;
|
|
21112
21100
|
}
|
|
21113
21101
|
let _locateOrCreateContainerAnchor = createContainerAnchorImpl;
|
|
@@ -21283,8 +21271,9 @@ function onTimer(delay) {
|
|
|
21283
21271
|
*/
|
|
21284
21272
|
function scheduleTimerTrigger(delay, callback, injector) {
|
|
21285
21273
|
const scheduler = injector.get(TimerScheduler);
|
|
21274
|
+
const ngZone = injector.get(NgZone);
|
|
21286
21275
|
const cleanupFn = () => scheduler.remove(callback);
|
|
21287
|
-
scheduler.add(delay, callback);
|
|
21276
|
+
scheduler.add(delay, callback, ngZone);
|
|
21288
21277
|
return cleanupFn;
|
|
21289
21278
|
}
|
|
21290
21279
|
/**
|
|
@@ -21310,10 +21299,10 @@ class TimerScheduler {
|
|
|
21310
21299
|
// the current callback invocation. The shape of this list is the same
|
|
21311
21300
|
// as the shape of the `current` list.
|
|
21312
21301
|
deferred = [];
|
|
21313
|
-
add(delay, callback) {
|
|
21302
|
+
add(delay, callback, ngZone) {
|
|
21314
21303
|
const target = this.executingCallbacks ? this.deferred : this.current;
|
|
21315
21304
|
this.addToQueue(target, Date.now() + delay, callback);
|
|
21316
|
-
this.scheduleTimer();
|
|
21305
|
+
this.scheduleTimer(ngZone);
|
|
21317
21306
|
}
|
|
21318
21307
|
remove(callback) {
|
|
21319
21308
|
const { current, deferred } = this;
|
|
@@ -21359,7 +21348,7 @@ class TimerScheduler {
|
|
|
21359
21348
|
}
|
|
21360
21349
|
return index;
|
|
21361
21350
|
}
|
|
21362
|
-
scheduleTimer() {
|
|
21351
|
+
scheduleTimer(ngZone) {
|
|
21363
21352
|
const callback = () => {
|
|
21364
21353
|
this.clearTimeout();
|
|
21365
21354
|
this.executingCallbacks = true;
|
|
@@ -21409,7 +21398,7 @@ class TimerScheduler {
|
|
|
21409
21398
|
}
|
|
21410
21399
|
this.deferred.length = 0;
|
|
21411
21400
|
}
|
|
21412
|
-
this.scheduleTimer();
|
|
21401
|
+
this.scheduleTimer(ngZone);
|
|
21413
21402
|
};
|
|
21414
21403
|
// Avoid running timer callbacks more than once per
|
|
21415
21404
|
// average frame duration. This is needed for better
|
|
@@ -21432,7 +21421,9 @@ class TimerScheduler {
|
|
|
21432
21421
|
this.clearTimeout();
|
|
21433
21422
|
const timeout = Math.max(invokeAt - now, FRAME_DURATION_MS);
|
|
21434
21423
|
this.invokeTimerAt = invokeAt;
|
|
21435
|
-
this.timeoutId =
|
|
21424
|
+
this.timeoutId = ngZone.runOutsideAngular(() => {
|
|
21425
|
+
return setTimeout(() => ngZone.run(callback), timeout);
|
|
21426
|
+
});
|
|
21436
21427
|
}
|
|
21437
21428
|
}
|
|
21438
21429
|
}
|
|
@@ -23998,7 +23989,7 @@ class ApplicationRef {
|
|
|
23998
23989
|
if (this._runningTick) {
|
|
23999
23990
|
throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
|
|
24000
23991
|
}
|
|
24001
|
-
const prevConsumer = setActiveConsumer(null);
|
|
23992
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
24002
23993
|
try {
|
|
24003
23994
|
this._runningTick = true;
|
|
24004
23995
|
this.synchronize();
|
|
@@ -24012,7 +24003,7 @@ class ApplicationRef {
|
|
|
24012
24003
|
this._runningTick = false;
|
|
24013
24004
|
this.tracingSnapshot?.dispose();
|
|
24014
24005
|
this.tracingSnapshot = null;
|
|
24015
|
-
setActiveConsumer(prevConsumer);
|
|
24006
|
+
setActiveConsumer$1(prevConsumer);
|
|
24016
24007
|
this.afterTick.next();
|
|
24017
24008
|
profiler(13 /* ProfilerEvent.ChangeDetectionEnd */);
|
|
24018
24009
|
}
|
|
@@ -24860,7 +24851,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24860
24851
|
return;
|
|
24861
24852
|
const bindingIndex = nextBindingIndex();
|
|
24862
24853
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24863
|
-
const prevConsumer = setActiveConsumer(null);
|
|
24854
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
24864
24855
|
try {
|
|
24865
24856
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24866
24857
|
const lDetails = getLDeferBlockDetails(lView, tNode);
|
|
@@ -24876,7 +24867,7 @@ function ɵɵdeferWhen(rawValue) {
|
|
|
24876
24867
|
}
|
|
24877
24868
|
}
|
|
24878
24869
|
finally {
|
|
24879
|
-
setActiveConsumer(prevConsumer);
|
|
24870
|
+
setActiveConsumer$1(prevConsumer);
|
|
24880
24871
|
}
|
|
24881
24872
|
}
|
|
24882
24873
|
}
|
|
@@ -24894,7 +24885,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24894
24885
|
return;
|
|
24895
24886
|
const bindingIndex = nextBindingIndex();
|
|
24896
24887
|
if (bindingUpdated(lView, bindingIndex, rawValue)) {
|
|
24897
|
-
const prevConsumer = setActiveConsumer(null);
|
|
24888
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
24898
24889
|
try {
|
|
24899
24890
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24900
24891
|
const tView = lView[TVIEW];
|
|
@@ -24906,7 +24897,7 @@ function ɵɵdeferPrefetchWhen(rawValue) {
|
|
|
24906
24897
|
}
|
|
24907
24898
|
}
|
|
24908
24899
|
finally {
|
|
24909
|
-
setActiveConsumer(prevConsumer);
|
|
24900
|
+
setActiveConsumer$1(prevConsumer);
|
|
24910
24901
|
}
|
|
24911
24902
|
}
|
|
24912
24903
|
}
|
|
@@ -24935,7 +24926,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24935
24926
|
}
|
|
24936
24927
|
else {
|
|
24937
24928
|
const injector = lView[INJECTOR];
|
|
24938
|
-
const prevConsumer = setActiveConsumer(null);
|
|
24929
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
24939
24930
|
try {
|
|
24940
24931
|
const value = Boolean(rawValue); // handle truthy or falsy values
|
|
24941
24932
|
if (value === true) {
|
|
@@ -24949,7 +24940,7 @@ function ɵɵdeferHydrateWhen(rawValue) {
|
|
|
24949
24940
|
}
|
|
24950
24941
|
}
|
|
24951
24942
|
finally {
|
|
24952
|
-
setActiveConsumer(prevConsumer);
|
|
24943
|
+
setActiveConsumer$1(prevConsumer);
|
|
24953
24944
|
}
|
|
24954
24945
|
}
|
|
24955
24946
|
}
|
|
@@ -27966,6 +27957,58 @@ class UniqueValueMultiKeyMap {
|
|
|
27966
27957
|
}
|
|
27967
27958
|
}
|
|
27968
27959
|
|
|
27960
|
+
/**
|
|
27961
|
+
* Creates an LContainer for an ng-template representing a root node
|
|
27962
|
+
* of control flow (@if, @switch). We use this to explicitly set
|
|
27963
|
+
* flags on the TNode created to identify which nodes are in control
|
|
27964
|
+
* flow or starting control flow for hydration identification and
|
|
27965
|
+
* cleanup timing.
|
|
27966
|
+
*
|
|
27967
|
+
* @param index The index of the container in the data array
|
|
27968
|
+
* @param templateFn Inline template
|
|
27969
|
+
* @param decls The number of nodes, local refs, and pipes for this template
|
|
27970
|
+
* @param vars The number of bindings for this template
|
|
27971
|
+
* @param tagName The name of the container element, if applicable
|
|
27972
|
+
* @param attrsIndex Index of template attributes in the `consts` array.
|
|
27973
|
+
* @param localRefs Index of the local references in the `consts` array.
|
|
27974
|
+
* @param localRefExtractor A function which extracts local-refs values from the template.
|
|
27975
|
+
* Defaults to the current element associated with the local-ref.
|
|
27976
|
+
* @codeGenApi
|
|
27977
|
+
*/
|
|
27978
|
+
function ɵɵconditionalCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
|
|
27979
|
+
performanceMarkFeature('NgControlFlow');
|
|
27980
|
+
const lView = getLView();
|
|
27981
|
+
const tView = getTView();
|
|
27982
|
+
const attrs = getConstant(tView.consts, attrsIndex);
|
|
27983
|
+
declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 256 /* TNodeFlags.isControlFlowStart */, localRefsIndex, localRefExtractor);
|
|
27984
|
+
return ɵɵconditionalBranchCreate;
|
|
27985
|
+
}
|
|
27986
|
+
/**
|
|
27987
|
+
* Creates an LContainer for an ng-template representing a branch
|
|
27988
|
+
* of control flow (@else, @case, @default). We use this to explicitly
|
|
27989
|
+
* set flags on the TNode created to identify which nodes are in
|
|
27990
|
+
* control flow or starting control flow for hydration identification
|
|
27991
|
+
* and cleanup timing.
|
|
27992
|
+
*
|
|
27993
|
+
* @param index The index of the container in the data array
|
|
27994
|
+
* @param templateFn Inline template
|
|
27995
|
+
* @param decls The number of nodes, local refs, and pipes for this template
|
|
27996
|
+
* @param vars The number of bindings for this template
|
|
27997
|
+
* @param tagName The name of the container element, if applicable
|
|
27998
|
+
* @param attrsIndex Index of template attributes in the `consts` array.
|
|
27999
|
+
* @param localRefs Index of the local references in the `consts` array.
|
|
28000
|
+
* @param localRefExtractor A function which extracts local-refs values from the template.
|
|
28001
|
+
* Defaults to the current element associated with the local-ref.
|
|
28002
|
+
* @codeGenApi
|
|
28003
|
+
*/
|
|
28004
|
+
function ɵɵconditionalBranchCreate(index, templateFn, decls, vars, tagName, attrsIndex, localRefsIndex, localRefExtractor) {
|
|
28005
|
+
performanceMarkFeature('NgControlFlow');
|
|
28006
|
+
const lView = getLView();
|
|
28007
|
+
const tView = getTView();
|
|
28008
|
+
const attrs = getConstant(tView.consts, attrsIndex);
|
|
28009
|
+
declareTemplate(lView, tView, index, templateFn, decls, vars, tagName, attrs, 512 /* TNodeFlags.isInControlFlow */, localRefsIndex, localRefExtractor);
|
|
28010
|
+
return ɵɵconditionalBranchCreate;
|
|
28011
|
+
}
|
|
27969
28012
|
/**
|
|
27970
28013
|
* The conditional instruction represents the basic building block on the runtime side to support
|
|
27971
28014
|
* built-in "if" and "switch". On the high level this instruction is responsible for adding and
|
|
@@ -27986,7 +28029,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27986
28029
|
: undefined;
|
|
27987
28030
|
const viewInContainerIdx = 0;
|
|
27988
28031
|
if (bindingUpdated(hostLView, bindingIndex, matchingTemplateIndex)) {
|
|
27989
|
-
const prevConsumer = setActiveConsumer(null);
|
|
28032
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
27990
28033
|
try {
|
|
27991
28034
|
// The index of the view to show changed - remove the previously displayed one
|
|
27992
28035
|
// (it is a noop if there are no active views in a container).
|
|
@@ -27999,7 +28042,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
27999
28042
|
const nextLContainerIndex = HEADER_OFFSET + matchingTemplateIndex;
|
|
28000
28043
|
const nextContainer = getLContainer(hostLView, nextLContainerIndex);
|
|
28001
28044
|
const templateTNode = getExistingTNode(hostLView[TVIEW], nextLContainerIndex);
|
|
28002
|
-
const dehydratedView =
|
|
28045
|
+
const dehydratedView = findAndReconcileMatchingDehydratedViews(nextContainer, templateTNode, hostLView);
|
|
28003
28046
|
const embeddedLView = createAndRenderEmbeddedLView(hostLView, templateTNode, contextValue, {
|
|
28004
28047
|
dehydratedView,
|
|
28005
28048
|
});
|
|
@@ -28007,7 +28050,7 @@ function ɵɵconditional(matchingTemplateIndex, contextValue) {
|
|
|
28007
28050
|
}
|
|
28008
28051
|
}
|
|
28009
28052
|
finally {
|
|
28010
|
-
setActiveConsumer(prevConsumer);
|
|
28053
|
+
setActiveConsumer$1(prevConsumer);
|
|
28011
28054
|
}
|
|
28012
28055
|
}
|
|
28013
28056
|
else if (prevContainer !== undefined) {
|
|
@@ -28104,13 +28147,13 @@ function ɵɵrepeaterCreate(index, templateFn, decls, vars, tagName, attrsIndex,
|
|
|
28104
28147
|
: trackByFn;
|
|
28105
28148
|
const metadata = new RepeaterMetadata(hasEmptyBlock, boundTrackBy);
|
|
28106
28149
|
hostLView[HEADER_OFFSET + index] = metadata;
|
|
28107
|
-
declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex));
|
|
28150
|
+
declareTemplate(lView, tView, index + 1, templateFn, decls, vars, tagName, getConstant(tView.consts, attrsIndex), 256 /* TNodeFlags.isControlFlowStart */);
|
|
28108
28151
|
if (hasEmptyBlock) {
|
|
28109
28152
|
ngDevMode &&
|
|
28110
28153
|
assertDefined(emptyDecls, 'Missing number of declarations for the empty repeater block.');
|
|
28111
28154
|
ngDevMode &&
|
|
28112
28155
|
assertDefined(emptyVars, 'Missing number of bindings for the empty repeater block.');
|
|
28113
|
-
declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex));
|
|
28156
|
+
declareTemplate(lView, tView, index + 2, emptyTemplateFn, emptyDecls, emptyVars, emptyTagName, getConstant(tView.consts, emptyAttrsIndex), 512 /* TNodeFlags.isInControlFlow */);
|
|
28114
28157
|
}
|
|
28115
28158
|
}
|
|
28116
28159
|
function isViewExpensiveToRecreate(lView) {
|
|
@@ -28209,7 +28252,7 @@ class LiveCollectionLContainerImpl extends LiveCollection {
|
|
|
28209
28252
|
* @codeGenApi
|
|
28210
28253
|
*/
|
|
28211
28254
|
function ɵɵrepeater(collection) {
|
|
28212
|
-
const prevConsumer = setActiveConsumer(null);
|
|
28255
|
+
const prevConsumer = setActiveConsumer$1(null);
|
|
28213
28256
|
const metadataSlotIdx = getSelectedIndex();
|
|
28214
28257
|
try {
|
|
28215
28258
|
const hostLView = getLView();
|
|
@@ -28250,18 +28293,25 @@ function ɵɵrepeater(collection) {
|
|
|
28250
28293
|
const lContainerForEmpty = getLContainer(hostLView, emptyTemplateIndex);
|
|
28251
28294
|
if (isCollectionEmpty) {
|
|
28252
28295
|
const emptyTemplateTNode = getExistingTNode(hostTView, emptyTemplateIndex);
|
|
28253
|
-
const dehydratedView =
|
|
28296
|
+
const dehydratedView = findAndReconcileMatchingDehydratedViews(lContainerForEmpty, emptyTemplateTNode, hostLView);
|
|
28254
28297
|
const embeddedLView = createAndRenderEmbeddedLView(hostLView, emptyTemplateTNode, undefined, { dehydratedView });
|
|
28255
28298
|
addLViewToLContainer(lContainerForEmpty, embeddedLView, 0, shouldAddViewToDom(emptyTemplateTNode, dehydratedView));
|
|
28256
28299
|
}
|
|
28257
28300
|
else {
|
|
28301
|
+
// we know that an ssrId was generated for the empty template, but
|
|
28302
|
+
// we were unable to match it to a dehydrated view earlier, which
|
|
28303
|
+
// means that we may have changed branches between server and client.
|
|
28304
|
+
// We'll need to find and remove the stale empty template view.
|
|
28305
|
+
if (hostTView.firstUpdatePass) {
|
|
28306
|
+
removeDehydratedViews(lContainerForEmpty);
|
|
28307
|
+
}
|
|
28258
28308
|
removeLViewFromLContainer(lContainerForEmpty, 0);
|
|
28259
28309
|
}
|
|
28260
28310
|
}
|
|
28261
28311
|
}
|
|
28262
28312
|
}
|
|
28263
28313
|
finally {
|
|
28264
|
-
setActiveConsumer(prevConsumer);
|
|
28314
|
+
setActiveConsumer$1(prevConsumer);
|
|
28265
28315
|
}
|
|
28266
28316
|
}
|
|
28267
28317
|
function getLContainer(lView, index) {
|
|
@@ -30446,6 +30496,180 @@ function ɵɵi18nPostprocess(message, replacements = {}) {
|
|
|
30446
30496
|
return i18nPostprocess(message, replacements);
|
|
30447
30497
|
}
|
|
30448
30498
|
|
|
30499
|
+
/**
|
|
30500
|
+
* Contains a reference to a function that disables event replay feature
|
|
30501
|
+
* for server-side rendered applications. This function is overridden with
|
|
30502
|
+
* an actual implementation when the event replay feature is enabled via
|
|
30503
|
+
* `withEventReplay()` call.
|
|
30504
|
+
*/
|
|
30505
|
+
let stashEventListener = (el, eventName, listenerFn) => { };
|
|
30506
|
+
function setStashFn(fn) {
|
|
30507
|
+
stashEventListener = fn;
|
|
30508
|
+
}
|
|
30509
|
+
/**
|
|
30510
|
+
* Adds an event listener to the current node.
|
|
30511
|
+
*
|
|
30512
|
+
* If an output exists on one of the node's directives, it also subscribes to the output
|
|
30513
|
+
* and saves the subscription for later cleanup.
|
|
30514
|
+
*
|
|
30515
|
+
* @param eventName Name of the event
|
|
30516
|
+
* @param listenerFn The function to be called when event emits
|
|
30517
|
+
* @param eventTargetResolver Function that returns global target information in case this listener
|
|
30518
|
+
* should be attached to a global object like window, document or body
|
|
30519
|
+
*
|
|
30520
|
+
* @codeGenApi
|
|
30521
|
+
*/
|
|
30522
|
+
function ɵɵlistener(eventName, listenerFn, eventTargetResolver) {
|
|
30523
|
+
const lView = getLView();
|
|
30524
|
+
const tView = getTView();
|
|
30525
|
+
const tNode = getCurrentTNode();
|
|
30526
|
+
listenerInternal(tView, lView, lView[RENDERER], tNode, eventName, listenerFn, eventTargetResolver);
|
|
30527
|
+
return ɵɵlistener;
|
|
30528
|
+
}
|
|
30529
|
+
/**
|
|
30530
|
+
* Registers a synthetic host listener (e.g. `(@foo.start)`) on a component or directive.
|
|
30531
|
+
*
|
|
30532
|
+
* This instruction is for compatibility purposes and is designed to ensure that a
|
|
30533
|
+
* synthetic host listener (e.g. `@HostListener('@foo.start')`) properly gets rendered
|
|
30534
|
+
* in the component's renderer. Normally all host listeners are evaluated with the
|
|
30535
|
+
* parent component's renderer, but, in the case of animation @triggers, they need
|
|
30536
|
+
* to be evaluated with the sub component's renderer (because that's where the
|
|
30537
|
+
* animation triggers are defined).
|
|
30538
|
+
*
|
|
30539
|
+
* Do not use this instruction as a replacement for `listener`. This instruction
|
|
30540
|
+
* only exists to ensure compatibility with the ViewEngine's host binding behavior.
|
|
30541
|
+
*
|
|
30542
|
+
* @param eventName Name of the event
|
|
30543
|
+
* @param listenerFn The function to be called when event emits
|
|
30544
|
+
* @param useCapture Whether or not to use capture in event listener
|
|
30545
|
+
* @param eventTargetResolver Function that returns global target information in case this listener
|
|
30546
|
+
* should be attached to a global object like window, document or body
|
|
30547
|
+
*
|
|
30548
|
+
* @codeGenApi
|
|
30549
|
+
*/
|
|
30550
|
+
function ɵɵsyntheticHostListener(eventName, listenerFn) {
|
|
30551
|
+
const tNode = getCurrentTNode();
|
|
30552
|
+
const lView = getLView();
|
|
30553
|
+
const tView = getTView();
|
|
30554
|
+
const currentDef = getCurrentDirectiveDef(tView.data);
|
|
30555
|
+
const renderer = loadComponentRenderer(currentDef, tNode, lView);
|
|
30556
|
+
listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn);
|
|
30557
|
+
return ɵɵsyntheticHostListener;
|
|
30558
|
+
}
|
|
30559
|
+
/**
|
|
30560
|
+
* A utility function that checks if a given element has already an event handler registered for an
|
|
30561
|
+
* event with a specified name. The TView.cleanup data structure is used to find out which events
|
|
30562
|
+
* are registered for a given element.
|
|
30563
|
+
*/
|
|
30564
|
+
function findExistingListener(tView, lView, eventName, tNodeIdx) {
|
|
30565
|
+
const tCleanup = tView.cleanup;
|
|
30566
|
+
if (tCleanup != null) {
|
|
30567
|
+
for (let i = 0; i < tCleanup.length - 1; i += 2) {
|
|
30568
|
+
const cleanupEventName = tCleanup[i];
|
|
30569
|
+
if (cleanupEventName === eventName && tCleanup[i + 1] === tNodeIdx) {
|
|
30570
|
+
// We have found a matching event name on the same node but it might not have been
|
|
30571
|
+
// registered yet, so we must explicitly verify entries in the LView cleanup data
|
|
30572
|
+
// structures.
|
|
30573
|
+
const lCleanup = lView[CLEANUP];
|
|
30574
|
+
const listenerIdxInLCleanup = tCleanup[i + 2];
|
|
30575
|
+
return lCleanup.length > listenerIdxInLCleanup ? lCleanup[listenerIdxInLCleanup] : null;
|
|
30576
|
+
}
|
|
30577
|
+
// TView.cleanup can have a mix of 4-elements entries (for event handler cleanups) or
|
|
30578
|
+
// 2-element entries (for directive and queries destroy hooks). As such we can encounter
|
|
30579
|
+
// blocks of 4 or 2 items in the tView.cleanup and this is why we iterate over 2 elements
|
|
30580
|
+
// first and jump another 2 elements if we detect listeners cleanup (4 elements). Also check
|
|
30581
|
+
// documentation of TView.cleanup for more details of this data structure layout.
|
|
30582
|
+
if (typeof cleanupEventName === 'string') {
|
|
30583
|
+
i += 2;
|
|
30584
|
+
}
|
|
30585
|
+
}
|
|
30586
|
+
}
|
|
30587
|
+
return null;
|
|
30588
|
+
}
|
|
30589
|
+
function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn, eventTargetResolver) {
|
|
30590
|
+
const isTNodeDirectiveHost = isDirectiveHost(tNode);
|
|
30591
|
+
const firstCreatePass = tView.firstCreatePass;
|
|
30592
|
+
const tCleanup = firstCreatePass ? getOrCreateTViewCleanup(tView) : null;
|
|
30593
|
+
// When the ɵɵlistener instruction was generated and is executed we know that there is either a
|
|
30594
|
+
// native listener or a directive output on this element. As such we we know that we will have to
|
|
30595
|
+
// register a listener and store its cleanup function on LView.
|
|
30596
|
+
const lCleanup = getOrCreateLViewCleanup(lView);
|
|
30597
|
+
ngDevMode && assertTNodeType(tNode, 3 /* TNodeType.AnyRNode */ | 12 /* TNodeType.AnyContainer */);
|
|
30598
|
+
let processOutputs = true;
|
|
30599
|
+
// Adding a native event listener is applicable when:
|
|
30600
|
+
// - The corresponding TNode represents a DOM element.
|
|
30601
|
+
// - The event target has a resolver (usually resulting in a global object,
|
|
30602
|
+
// such as `window` or `document`).
|
|
30603
|
+
if (tNode.type & 3 /* TNodeType.AnyRNode */ || eventTargetResolver) {
|
|
30604
|
+
const native = getNativeByTNode(tNode, lView);
|
|
30605
|
+
const target = eventTargetResolver ? eventTargetResolver(native) : native;
|
|
30606
|
+
const lCleanupIndex = lCleanup.length;
|
|
30607
|
+
const idxOrTargetGetter = eventTargetResolver
|
|
30608
|
+
? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index]))
|
|
30609
|
+
: tNode.index;
|
|
30610
|
+
// In order to match current behavior, native DOM event listeners must be added for all
|
|
30611
|
+
// events (including outputs).
|
|
30612
|
+
// There might be cases where multiple directives on the same element try to register an event
|
|
30613
|
+
// handler function for the same event. In this situation we want to avoid registration of
|
|
30614
|
+
// several native listeners as each registration would be intercepted by NgZone and
|
|
30615
|
+
// trigger change detection. This would mean that a single user action would result in several
|
|
30616
|
+
// change detections being invoked. To avoid this situation we want to have only one call to
|
|
30617
|
+
// native handler registration (for the same element and same type of event).
|
|
30618
|
+
//
|
|
30619
|
+
// In order to have just one native event handler in presence of multiple handler functions,
|
|
30620
|
+
// we just register a first handler function as a native event listener and then chain
|
|
30621
|
+
// (coalesce) other handler functions on top of the first native handler function.
|
|
30622
|
+
let existingListener = null;
|
|
30623
|
+
// Please note that the coalescing described here doesn't happen for events specifying an
|
|
30624
|
+
// alternative target (ex. (document:click)) - this is to keep backward compatibility with the
|
|
30625
|
+
// view engine.
|
|
30626
|
+
// Also, we don't have to search for existing listeners is there are no directives
|
|
30627
|
+
// matching on a given node as we can't register multiple event handlers for the same event in
|
|
30628
|
+
// a template (this would mean having duplicate attributes).
|
|
30629
|
+
if (!eventTargetResolver && isTNodeDirectiveHost) {
|
|
30630
|
+
existingListener = findExistingListener(tView, lView, eventName, tNode.index);
|
|
30631
|
+
}
|
|
30632
|
+
if (existingListener !== null) {
|
|
30633
|
+
// Attach a new listener to coalesced listeners list, maintaining the order in which
|
|
30634
|
+
// listeners are registered. For performance reasons, we keep a reference to the last
|
|
30635
|
+
// listener in that list (in `__ngLastListenerFn__` field), so we can avoid going through
|
|
30636
|
+
// the entire set each time we need to add a new listener.
|
|
30637
|
+
const lastListenerFn = existingListener.__ngLastListenerFn__ || existingListener;
|
|
30638
|
+
lastListenerFn.__ngNextListenerFn__ = listenerFn;
|
|
30639
|
+
existingListener.__ngLastListenerFn__ = listenerFn;
|
|
30640
|
+
processOutputs = false;
|
|
30641
|
+
}
|
|
30642
|
+
else {
|
|
30643
|
+
listenerFn = wrapListener(tNode, lView, listenerFn);
|
|
30644
|
+
stashEventListener(target, eventName, listenerFn);
|
|
30645
|
+
const cleanupFn = renderer.listen(target, eventName, listenerFn);
|
|
30646
|
+
lCleanup.push(listenerFn, cleanupFn);
|
|
30647
|
+
tCleanup && tCleanup.push(eventName, idxOrTargetGetter, lCleanupIndex, lCleanupIndex + 1);
|
|
30648
|
+
}
|
|
30649
|
+
}
|
|
30650
|
+
else {
|
|
30651
|
+
// Even if there is no native listener to add, we still need to wrap the listener so that OnPush
|
|
30652
|
+
// ancestors are marked dirty when an event occurs.
|
|
30653
|
+
listenerFn = wrapListener(tNode, lView, listenerFn);
|
|
30654
|
+
}
|
|
30655
|
+
if (processOutputs) {
|
|
30656
|
+
const outputConfig = tNode.outputs?.[eventName];
|
|
30657
|
+
const hostDirectiveOutputConfig = tNode.hostDirectiveOutputs?.[eventName];
|
|
30658
|
+
if (hostDirectiveOutputConfig && hostDirectiveOutputConfig.length) {
|
|
30659
|
+
for (let i = 0; i < hostDirectiveOutputConfig.length; i += 2) {
|
|
30660
|
+
const index = hostDirectiveOutputConfig[i];
|
|
30661
|
+
const lookupName = hostDirectiveOutputConfig[i + 1];
|
|
30662
|
+
listenToOutput(tNode, lView, index, lookupName, eventName, listenerFn);
|
|
30663
|
+
}
|
|
30664
|
+
}
|
|
30665
|
+
if (outputConfig && outputConfig.length) {
|
|
30666
|
+
for (const index of outputConfig) {
|
|
30667
|
+
listenToOutput(tNode, lView, index, eventName, eventName, listenerFn);
|
|
30668
|
+
}
|
|
30669
|
+
}
|
|
30670
|
+
}
|
|
30671
|
+
}
|
|
30672
|
+
|
|
30449
30673
|
/**
|
|
30450
30674
|
* Retrieves a context at the level specified and saves it as the global, contextViewData.
|
|
30451
30675
|
* Will get the next level up if level is not specified.
|
|
@@ -33715,6 +33939,8 @@ const angularCoreEnv = (() => ({
|
|
|
33715
33939
|
'ɵɵadvance': ɵɵadvance,
|
|
33716
33940
|
'ɵɵtemplate': ɵɵtemplate,
|
|
33717
33941
|
'ɵɵconditional': ɵɵconditional,
|
|
33942
|
+
'ɵɵconditionalCreate': ɵɵconditionalCreate,
|
|
33943
|
+
'ɵɵconditionalBranchCreate': ɵɵconditionalBranchCreate,
|
|
33718
33944
|
'ɵɵdefer': ɵɵdefer,
|
|
33719
33945
|
'ɵɵdeferWhen': ɵɵdeferWhen,
|
|
33720
33946
|
'ɵɵdeferOnIdle': ɵɵdeferOnIdle,
|
|
@@ -34814,7 +35040,7 @@ class Version {
|
|
|
34814
35040
|
/**
|
|
34815
35041
|
* @publicApi
|
|
34816
35042
|
*/
|
|
34817
|
-
const VERSION = new Version('20.0.0-next.
|
|
35043
|
+
const VERSION = new Version('20.0.0-next.4');
|
|
34818
35044
|
|
|
34819
35045
|
/**
|
|
34820
35046
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -35070,7 +35296,7 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
35070
35296
|
* ```
|
|
35071
35297
|
*
|
|
35072
35298
|
* @publicApi
|
|
35073
|
-
* @see {@link /api/
|
|
35299
|
+
* @see {@link /api/platform-browser/bootstrapApplication bootstrapApplication}
|
|
35074
35300
|
* @see {@link NgZoneOptions}
|
|
35075
35301
|
*/
|
|
35076
35302
|
function provideZoneChangeDetection(options) {
|
|
@@ -39325,7 +39551,7 @@ function withDomHydration() {
|
|
|
39325
39551
|
return;
|
|
39326
39552
|
}
|
|
39327
39553
|
if (inject(IS_HYDRATION_DOM_REUSE_ENABLED)) {
|
|
39328
|
-
verifySsrContentsIntegrity();
|
|
39554
|
+
verifySsrContentsIntegrity(getDocument());
|
|
39329
39555
|
enableHydrationRuntimeSupport();
|
|
39330
39556
|
}
|
|
39331
39557
|
else if (typeof ngDevMode !== 'undefined' && ngDevMode && !isClientRenderModeEnabled()) {
|
|
@@ -39467,35 +39693,6 @@ function logWarningOnStableTimedout(time, console) {
|
|
|
39467
39693
|
`as a signal to complete hydration process.`;
|
|
39468
39694
|
console.warn(formatRuntimeError(-506 /* RuntimeErrorCode.HYDRATION_STABLE_TIMEDOUT */, message));
|
|
39469
39695
|
}
|
|
39470
|
-
/**
|
|
39471
|
-
* Verifies whether the DOM contains a special marker added during SSR time to make sure
|
|
39472
|
-
* there is no SSR'ed contents transformations happen after SSR is completed. Typically that
|
|
39473
|
-
* happens either by CDN or during the build process as an optimization to remove comment nodes.
|
|
39474
|
-
* Hydration process requires comment nodes produced by Angular to locate correct DOM segments.
|
|
39475
|
-
* When this special marker is *not* present - throw an error and do not proceed with hydration,
|
|
39476
|
-
* since it will not be able to function correctly.
|
|
39477
|
-
*
|
|
39478
|
-
* Note: this function is invoked only on the client, so it's safe to use DOM APIs.
|
|
39479
|
-
*/
|
|
39480
|
-
function verifySsrContentsIntegrity() {
|
|
39481
|
-
const doc = getDocument();
|
|
39482
|
-
let hydrationMarker;
|
|
39483
|
-
for (const node of doc.body.childNodes) {
|
|
39484
|
-
if (node.nodeType === Node.COMMENT_NODE &&
|
|
39485
|
-
node.textContent?.trim() === SSR_CONTENT_INTEGRITY_MARKER) {
|
|
39486
|
-
hydrationMarker = node;
|
|
39487
|
-
break;
|
|
39488
|
-
}
|
|
39489
|
-
}
|
|
39490
|
-
if (!hydrationMarker) {
|
|
39491
|
-
throw new RuntimeError(-507 /* RuntimeErrorCode.MISSING_SSR_CONTENT_INTEGRITY_MARKER */, typeof ngDevMode !== 'undefined' &&
|
|
39492
|
-
ngDevMode &&
|
|
39493
|
-
'Angular hydration logic detected that HTML content of this page was modified after it ' +
|
|
39494
|
-
'was produced during server side rendering. Make sure that there are no optimizations ' +
|
|
39495
|
-
'that remove comment nodes from HTML enabled on your CDN. Angular hydration ' +
|
|
39496
|
-
'relies on HTML produced by the server, including whitespaces and comment nodes.');
|
|
39497
|
-
}
|
|
39498
|
-
}
|
|
39499
39696
|
|
|
39500
39697
|
/**
|
|
39501
39698
|
* Transforms a value (typically a string) to a boolean.
|
|
@@ -39596,25 +39793,14 @@ function disableProfiling() {
|
|
|
39596
39793
|
* can, optionally, return a value.
|
|
39597
39794
|
*/
|
|
39598
39795
|
function untracked(nonReactiveReadsFn) {
|
|
39599
|
-
|
|
39600
|
-
// We are not trying to catch any particular errors here, just making sure that the consumers
|
|
39601
|
-
// stack is restored in case of errors.
|
|
39602
|
-
try {
|
|
39603
|
-
return nonReactiveReadsFn();
|
|
39604
|
-
}
|
|
39605
|
-
finally {
|
|
39606
|
-
setActiveConsumer(prevConsumer);
|
|
39607
|
-
}
|
|
39796
|
+
return untracked$1(nonReactiveReadsFn);
|
|
39608
39797
|
}
|
|
39609
39798
|
|
|
39610
39799
|
/**
|
|
39611
39800
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
39612
39801
|
*/
|
|
39613
39802
|
function computed(computation, options) {
|
|
39614
|
-
const getter = createComputed(computation);
|
|
39615
|
-
if (options?.equal) {
|
|
39616
|
-
getter[SIGNAL].equal = options.equal;
|
|
39617
|
-
}
|
|
39803
|
+
const getter = createComputed(computation, options?.equal);
|
|
39618
39804
|
if (ngDevMode) {
|
|
39619
39805
|
getter.toString = () => `[Computed: ${getter()}]`;
|
|
39620
39806
|
getter[SIGNAL].debugName = options?.debugName;
|
|
@@ -40672,5 +40858,5 @@ const REQUEST_CONTEXT = new InjectionToken(typeof ngDevMode === 'undefined' || n
|
|
|
40672
40858
|
factory: () => null,
|
|
40673
40859
|
});
|
|
40674
40860
|
|
|
40675
|
-
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, 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, inputBinding, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, outputBinding, 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, 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, ResourceImpl as ɵResourceImpl, RuntimeError as ɵRuntimeError, 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, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, 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, ɵsetClassDebugInfo, setClassMetadata as ɵsetClassMetadata, setClassMetadataAsync as ɵsetClassMetadataAsync, 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, ɵɵ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 };
|
|
40861
|
+
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, 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, inputBinding, isDevMode, isSignal, isStandalone, linkedSignal, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, model, numberAttribute, output, outputBinding, platformCore, provideAppInitializer, provideEnvironmentInitializer, provideExperimentalCheckNoChangesForDebug, provideExperimentalZonelessChangeDetection, providePlatformInitializer, provideZoneChangeDetection, reflectComponentType, resolveForwardRef, resource, runInInjectionContext, setTestabilityGetter, signal, twoWayBinding, 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, 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, ResourceImpl as ɵResourceImpl, 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, isViewDirty as ɵisViewDirty, markForRefresh as ɵmarkForRefresh, 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, ɵ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, ɵɵ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, ɵɵconditionalBranchCreate, ɵɵconditionalCreate, ɵɵ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 };
|
|
40676
40862
|
//# sourceMappingURL=core.mjs.map
|