@angular/core 18.0.0-rc.1 → 18.0.0-rc.2
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/esm2022/primitives/event-dispatch/contract_binary.mjs +3 -3
- package/esm2022/primitives/event-dispatch/index.mjs +2 -2
- package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +5 -18
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +63 -65
- package/esm2022/primitives/event-dispatch/src/cache.mjs +10 -10
- package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +50 -181
- package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +4 -4
- package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -6
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +13 -30
- package/esm2022/primitives/event-dispatch/src/key_code.mjs +11 -13
- package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +252 -2
- package/esm2022/primitives/event-dispatch/src/property.mjs +30 -27
- package/esm2022/primitives/event-dispatch/src/register_events.mjs +5 -25
- package/esm2022/primitives/event-dispatch/src/restriction.mjs +2 -2
- package/esm2022/src/application/create_application.mjs +11 -4
- package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +4 -16
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +3 -1
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +5 -2
- package/esm2022/src/core_reactivity_export_internal.mjs +1 -3
- package/esm2022/src/core_render3_private_export.mjs +1 -3
- package/esm2022/src/hydration/event_replay.mjs +51 -83
- package/esm2022/src/hydration/utils.mjs +1 -2
- package/esm2022/src/metadata/directives.mjs +1 -1
- package/esm2022/src/platform/platform_ref.mjs +9 -10
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/render3/index.mjs +1 -3
- package/esm2022/src/render3/instructions/listener.mjs +3 -3
- package/esm2022/src/render3/interfaces/public_definitions.mjs +1 -1
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/component_fixture.mjs +2 -2
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed.mjs +1 -3
- package/esm2022/testing/src/test_bed_compiler.mjs +1 -3
- package/event-dispatch-contract.min.js +1 -1
- package/fesm2022/core.mjs +79 -117
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +246 -515
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +2 -4
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +3 -1
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +83 -131
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/http-providers/bundle.js +46 -29
- package/schematics/migrations/http-providers/bundle.js.map +3 -3
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +159 -159
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
- package/schematics/ng-generate/control-flow-migration/bundle.js +167 -167
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
- package/schematics/ng-generate/standalone-migration/bundle.js +443 -443
- package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
- package/testing/index.d.ts +1 -1
- package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +0 -94
- package/esm2022/primitives/event-dispatch/src/custom_events.mjs +0 -102
- package/esm2022/primitives/event-dispatch/src/replay.mjs +0 -389
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v18.0.0-rc.
|
|
2
|
+
* @license Angular v18.0.0-rc.2
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { SIGNAL_NODE as SIGNAL_NODE$1, signalSetFn as signalSetFn$1, producerAccessed as producerAccessed$1, SIGNAL as SIGNAL$1, getActiveConsumer as getActiveConsumer$1, setActiveConsumer as setActiveConsumer$1, consumerDestroy as consumerDestroy$1, REACTIVE_NODE as REACTIVE_NODE$1, consumerBeforeComputation as consumerBeforeComputation$1, consumerAfterComputation as consumerAfterComputation$1, consumerPollProducersForChange as consumerPollProducersForChange$1, createSignal as createSignal$1, signalUpdateFn as signalUpdateFn$1, createComputed as createComputed$1, setThrowInvalidWriteToSignalError as setThrowInvalidWriteToSignalError$1, createWatch as createWatch$1 } from '@angular/core/primitives/signals';
|
|
8
8
|
import { Subject, Subscription, BehaviorSubject } from 'rxjs';
|
|
9
9
|
import { map, first } from 'rxjs/operators';
|
|
10
|
-
import { Dispatcher, registerDispatcher } from '@angular/core/primitives/event-dispatch';
|
|
10
|
+
import { EventContract, EventContractContainer, Dispatcher, registerDispatcher } from '@angular/core/primitives/event-dispatch';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Base URL for the error details page.
|
|
@@ -8528,7 +8528,6 @@ var HydrationStatus;
|
|
|
8528
8528
|
HydrationStatus["Skipped"] = "skipped";
|
|
8529
8529
|
HydrationStatus["Mismatched"] = "mismatched";
|
|
8530
8530
|
})(HydrationStatus || (HydrationStatus = {}));
|
|
8531
|
-
// clang-format on
|
|
8532
8531
|
const HYDRATION_INFO_KEY = '__ngDebugHydrationInfo__';
|
|
8533
8532
|
function patchHydrationInfo(node, info) {
|
|
8534
8533
|
node[HYDRATION_INFO_KEY] = info;
|
|
@@ -15167,6 +15166,8 @@ class ChangeDetectionScheduler {
|
|
|
15167
15166
|
}
|
|
15168
15167
|
/** Token used to indicate if zoneless was enabled via provideZonelessChangeDetection(). */
|
|
15169
15168
|
const ZONELESS_ENABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless enabled' : '', { providedIn: 'root', factory: () => false });
|
|
15169
|
+
/** Token used to indicate `provideExperimentalZonelessChangeDetection` was used. */
|
|
15170
|
+
const PROVIDED_ZONELESS = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'Zoneless provided' : '', { providedIn: 'root', factory: () => false });
|
|
15170
15171
|
const ZONELESS_SCHEDULER_DISABLED = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'scheduler disabled' : '');
|
|
15171
15172
|
|
|
15172
15173
|
/**
|
|
@@ -16888,7 +16889,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
|
|
|
16888
16889
|
function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
|
|
16889
16890
|
if (rootSelectorOrNode) {
|
|
16890
16891
|
// The placeholder will be replaced with the actual version at build time.
|
|
16891
|
-
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.0-rc.
|
|
16892
|
+
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '18.0.0-rc.2']);
|
|
16892
16893
|
}
|
|
16893
16894
|
else {
|
|
16894
16895
|
// If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
|
|
@@ -26372,7 +26373,7 @@ function ɵɵi18nPostprocess(message, replacements = {}) {
|
|
|
26372
26373
|
* an actual implementation when the event replay feature is enabled via
|
|
26373
26374
|
* `withEventReplay()` call.
|
|
26374
26375
|
*/
|
|
26375
|
-
let disableEventReplayFn = (el) => { };
|
|
26376
|
+
let disableEventReplayFn = (el, eventName, listenerFn) => { };
|
|
26376
26377
|
function setDisableEventReplayImpl(fn) {
|
|
26377
26378
|
disableEventReplayFn = fn;
|
|
26378
26379
|
}
|
|
@@ -26480,7 +26481,7 @@ function listenerInternal(tView, lView, renderer, tNode, eventName, listenerFn,
|
|
|
26480
26481
|
const idxOrTargetGetter = eventTargetResolver
|
|
26481
26482
|
? (_lView) => eventTargetResolver(unwrapRNode(_lView[tNode.index]))
|
|
26482
26483
|
: tNode.index;
|
|
26483
|
-
disableEventReplayFn(native);
|
|
26484
|
+
disableEventReplayFn(native, eventName, listenerFn);
|
|
26484
26485
|
// In order to match current behavior, native DOM event listeners must be added for all
|
|
26485
26486
|
// events (including outputs).
|
|
26486
26487
|
// There might be cases where multiple directives on the same element try to register an event
|
|
@@ -30800,7 +30801,7 @@ class Version {
|
|
|
30800
30801
|
/**
|
|
30801
30802
|
* @publicApi
|
|
30802
30803
|
*/
|
|
30803
|
-
const VERSION = new Version('18.0.0-rc.
|
|
30804
|
+
const VERSION = new Version('18.0.0-rc.2');
|
|
30804
30805
|
|
|
30805
30806
|
class Console {
|
|
30806
30807
|
log(message) {
|
|
@@ -33052,6 +33053,9 @@ function provideExperimentalZonelessChangeDetection() {
|
|
|
33052
33053
|
{ provide: ChangeDetectionScheduler, useExisting: ChangeDetectionSchedulerImpl },
|
|
33053
33054
|
{ provide: NgZone, useClass: NoopNgZone },
|
|
33054
33055
|
{ provide: ZONELESS_ENABLED, useValue: true },
|
|
33056
|
+
typeof ngDevMode === 'undefined' || ngDevMode
|
|
33057
|
+
? [{ provide: PROVIDED_ZONELESS, useValue: true }]
|
|
33058
|
+
: [],
|
|
33055
33059
|
]);
|
|
33056
33060
|
}
|
|
33057
33061
|
|
|
@@ -33060,7 +33064,6 @@ class NgZoneChangeDetectionScheduler {
|
|
|
33060
33064
|
this.zone = inject(NgZone);
|
|
33061
33065
|
this.changeDetectionScheduler = inject(ChangeDetectionScheduler, { optional: true });
|
|
33062
33066
|
this.applicationRef = inject(ApplicationRef);
|
|
33063
|
-
this.zonelessEnabled = inject(ZONELESS_ENABLED);
|
|
33064
33067
|
}
|
|
33065
33068
|
initialize() {
|
|
33066
33069
|
if (this._onMicrotaskEmptySubscription) {
|
|
@@ -33094,7 +33097,7 @@ class NgZoneChangeDetectionScheduler {
|
|
|
33094
33097
|
* Internal token used to verify that `provideZoneChangeDetection` is not used
|
|
33095
33098
|
* with the bootstrapModule API.
|
|
33096
33099
|
*/
|
|
33097
|
-
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '');
|
|
33100
|
+
const PROVIDED_NG_ZONE = new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'provideZoneChangeDetection token' : '', { factory: () => false });
|
|
33098
33101
|
function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsideZone, }) {
|
|
33099
33102
|
ngZoneFactory ??= () => new NgZone(getNgZoneOptions());
|
|
33100
33103
|
return [
|
|
@@ -33174,8 +33177,9 @@ function provideZoneChangeDetection(options) {
|
|
|
33174
33177
|
});
|
|
33175
33178
|
return makeEnvironmentProviders([
|
|
33176
33179
|
typeof ngDevMode === 'undefined' || ngDevMode
|
|
33177
|
-
? [{ provide: PROVIDED_NG_ZONE, useValue: true }
|
|
33180
|
+
? [{ provide: PROVIDED_NG_ZONE, useValue: true }]
|
|
33178
33181
|
: [],
|
|
33182
|
+
{ provide: ZONELESS_ENABLED, useValue: false },
|
|
33179
33183
|
zoneProviders,
|
|
33180
33184
|
]);
|
|
33181
33185
|
}
|
|
@@ -33235,18 +33239,6 @@ class ZoneStablePendingTask {
|
|
|
33235
33239
|
type: Injectable,
|
|
33236
33240
|
args: [{ providedIn: 'root' }]
|
|
33237
33241
|
}], null, null); })();
|
|
33238
|
-
const bothZoneAndZonelessErrorCheckProvider = {
|
|
33239
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
33240
|
-
multi: true,
|
|
33241
|
-
useFactory: () => {
|
|
33242
|
-
const providedZoneless = inject(ZONELESS_ENABLED, { optional: true });
|
|
33243
|
-
if (providedZoneless) {
|
|
33244
|
-
throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
|
|
33245
|
-
'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');
|
|
33246
|
-
}
|
|
33247
|
-
return () => { };
|
|
33248
|
-
},
|
|
33249
|
-
};
|
|
33250
33242
|
|
|
33251
33243
|
/**
|
|
33252
33244
|
* Work out the locale from the potential global properties.
|
|
@@ -33468,15 +33460,14 @@ class PlatformRef {
|
|
|
33468
33460
|
return ngZone.run(() => {
|
|
33469
33461
|
const ignoreChangesOutsideZone = options?.ignoreChangesOutsideZone;
|
|
33470
33462
|
const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, internalProvideZoneChangeDetection({ ngZoneFactory: () => ngZone, ignoreChangesOutsideZone }));
|
|
33471
|
-
if (
|
|
33472
|
-
moduleRef.injector.get(PROVIDED_NG_ZONE
|
|
33473
|
-
|
|
33474
|
-
|
|
33475
|
-
|
|
33476
|
-
|
|
33477
|
-
|
|
33478
|
-
|
|
33479
|
-
"`ngZone: 'noop'` must be set in `BootstrapOptions` with provideExperimentalZonelessChangeDetection.");
|
|
33463
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
33464
|
+
if (moduleRef.injector.get(PROVIDED_NG_ZONE)) {
|
|
33465
|
+
throw new RuntimeError(207 /* RuntimeErrorCode.PROVIDER_IN_WRONG_CONTEXT */, '`bootstrapModule` does not support `provideZoneChangeDetection`. Use `BootstrapOptions` instead.');
|
|
33466
|
+
}
|
|
33467
|
+
if (moduleRef.injector.get(ZONELESS_ENABLED) && options?.ngZone !== 'noop') {
|
|
33468
|
+
throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
|
|
33469
|
+
"`ngZone: 'noop'` must be set in `BootstrapOptions` with provideExperimentalZonelessChangeDetection.");
|
|
33470
|
+
}
|
|
33480
33471
|
}
|
|
33481
33472
|
const exceptionHandler = moduleRef.injector.get(ErrorHandler, null);
|
|
33482
33473
|
if ((typeof ngDevMode === 'undefined' || ngDevMode) && exceptionHandler === null) {
|
|
@@ -36452,8 +36443,14 @@ function internalCreateApplication(config) {
|
|
|
36452
36443
|
return ngZone.run(() => {
|
|
36453
36444
|
envInjector.resolveInjectorInitializers();
|
|
36454
36445
|
const exceptionHandler = envInjector.get(ErrorHandler, null);
|
|
36455
|
-
if (
|
|
36456
|
-
|
|
36446
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
36447
|
+
if (!exceptionHandler) {
|
|
36448
|
+
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
|
|
36449
|
+
}
|
|
36450
|
+
if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
|
|
36451
|
+
throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
|
|
36452
|
+
'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');
|
|
36453
|
+
}
|
|
36457
36454
|
}
|
|
36458
36455
|
let onErrorSubscription;
|
|
36459
36456
|
ngZone.runOutsideAngular(() => {
|
|
@@ -36534,8 +36531,12 @@ function getDeferBlocks(lView, deferBlocks) {
|
|
|
36534
36531
|
|
|
36535
36532
|
const EVENT_REPLAY_ENABLED_DEFAULT = false;
|
|
36536
36533
|
const CONTRACT_PROPERTY = 'ngContracts';
|
|
36534
|
+
// TODO: Upstream this back into event-dispatch.
|
|
36535
|
+
function getJsactionData(container) {
|
|
36536
|
+
return container._ejsa;
|
|
36537
|
+
}
|
|
36537
36538
|
const JSACTION_ATTRIBUTE = 'jsaction';
|
|
36538
|
-
const
|
|
36539
|
+
const jsactionMap = new Map();
|
|
36539
36540
|
/**
|
|
36540
36541
|
* Returns a set of providers required to setup support for event replay.
|
|
36541
36542
|
* Requires hydration to be enabled separately.
|
|
@@ -36549,11 +36550,18 @@ function withEventReplay() {
|
|
|
36549
36550
|
{
|
|
36550
36551
|
provide: ENVIRONMENT_INITIALIZER,
|
|
36551
36552
|
useValue: () => {
|
|
36552
|
-
setDisableEventReplayImpl((
|
|
36553
|
-
if (
|
|
36553
|
+
setDisableEventReplayImpl((rEl, eventName, listenerFn) => {
|
|
36554
|
+
if (rEl.hasAttribute(JSACTION_ATTRIBUTE)) {
|
|
36555
|
+
const el = unwrapRNode(rEl);
|
|
36554
36556
|
// We don't immediately remove the attribute here because
|
|
36555
36557
|
// we need it for replay that happens after hydration.
|
|
36556
|
-
|
|
36558
|
+
if (!jsactionMap.has(el)) {
|
|
36559
|
+
jsactionMap.set(el, new Map());
|
|
36560
|
+
}
|
|
36561
|
+
if (!jsactionMap.get(el).has(eventName)) {
|
|
36562
|
+
jsactionMap.get(el).set(eventName, []);
|
|
36563
|
+
}
|
|
36564
|
+
jsactionMap.get(el).get(eventName).push(listenerFn);
|
|
36557
36565
|
}
|
|
36558
36566
|
});
|
|
36559
36567
|
},
|
|
@@ -36574,16 +36582,30 @@ function withEventReplay() {
|
|
|
36574
36582
|
// This is set in packages/platform-server/src/utils.ts
|
|
36575
36583
|
// Note: globalThis[CONTRACT_PROPERTY] may be undefined in case Event Replay feature
|
|
36576
36584
|
// is enabled, but there are no events configured in an application.
|
|
36577
|
-
const
|
|
36578
|
-
|
|
36579
|
-
|
|
36580
|
-
|
|
36581
|
-
|
|
36585
|
+
const container = globalThis[CONTRACT_PROPERTY]?.[appId];
|
|
36586
|
+
const earlyJsactionData = getJsactionData(container);
|
|
36587
|
+
if (earlyJsactionData) {
|
|
36588
|
+
const eventContract = new EventContract(new EventContractContainer(earlyJsactionData.c));
|
|
36589
|
+
for (const et of earlyJsactionData.et) {
|
|
36590
|
+
eventContract.addEvent(et);
|
|
36591
|
+
}
|
|
36592
|
+
for (const et of earlyJsactionData.etc) {
|
|
36593
|
+
eventContract.addEvent(et);
|
|
36594
|
+
}
|
|
36595
|
+
eventContract.replayEarlyEvents(container);
|
|
36596
|
+
const dispatcher = new Dispatcher(() => { }, {
|
|
36597
|
+
eventReplayer: (queue) => {
|
|
36598
|
+
for (const event of queue) {
|
|
36599
|
+
handleEvent(event);
|
|
36600
|
+
}
|
|
36601
|
+
jsactionMap.clear();
|
|
36602
|
+
queue.length = 0;
|
|
36603
|
+
},
|
|
36604
|
+
});
|
|
36582
36605
|
registerDispatcher(eventContract, dispatcher);
|
|
36583
|
-
for (const el of
|
|
36606
|
+
for (const el of jsactionMap.keys()) {
|
|
36584
36607
|
el.removeAttribute(JSACTION_ATTRIBUTE);
|
|
36585
36608
|
}
|
|
36586
|
-
removeJsactionQueue.length = 0;
|
|
36587
36609
|
}
|
|
36588
36610
|
});
|
|
36589
36611
|
};
|
|
@@ -36612,6 +36634,12 @@ function collectDomEventsInfo(tView, lView, eventTypesToReplay) {
|
|
|
36612
36634
|
continue;
|
|
36613
36635
|
}
|
|
36614
36636
|
const name = firstParam;
|
|
36637
|
+
if (name === 'mouseenter' ||
|
|
36638
|
+
name === 'mouseleave' ||
|
|
36639
|
+
name === 'pointerenter' ||
|
|
36640
|
+
name === 'pointerleave') {
|
|
36641
|
+
continue;
|
|
36642
|
+
}
|
|
36615
36643
|
eventTypesToReplay.add(name);
|
|
36616
36644
|
const listenerElement = unwrapRNode(lView[secondParam]);
|
|
36617
36645
|
i++; // move the cursor to the next position (location of the listener idx)
|
|
@@ -36642,77 +36670,15 @@ function setJSActionAttribute(tNode, rNode, nativeElementToEvents) {
|
|
|
36642
36670
|
}
|
|
36643
36671
|
}
|
|
36644
36672
|
}
|
|
36645
|
-
/**
|
|
36646
|
-
* Registers a function that should be invoked to replay events.
|
|
36647
|
-
*/
|
|
36648
|
-
function setEventReplayer(dispatcher) {
|
|
36649
|
-
dispatcher.setEventReplayer((queue) => {
|
|
36650
|
-
for (const event of queue) {
|
|
36651
|
-
handleEvent(event);
|
|
36652
|
-
}
|
|
36653
|
-
});
|
|
36654
|
-
}
|
|
36655
|
-
/**
|
|
36656
|
-
* Finds an LView that a given DOM element belongs to.
|
|
36657
|
-
*/
|
|
36658
|
-
function getLViewByElement(target) {
|
|
36659
|
-
let lView = readLView(target);
|
|
36660
|
-
if (lView) {
|
|
36661
|
-
return lView;
|
|
36662
|
-
}
|
|
36663
|
-
else {
|
|
36664
|
-
// If this node doesn't have LView info attached, then we need to
|
|
36665
|
-
// traverse upwards up the DOM to find the nearest element that
|
|
36666
|
-
// has already been monkey patched with data.
|
|
36667
|
-
let parent = target;
|
|
36668
|
-
while ((parent = parent.parentNode)) {
|
|
36669
|
-
lView = readLView(parent);
|
|
36670
|
-
if (lView) {
|
|
36671
|
-
// To prevent additional lookups, monkey-patch LView id onto this DOM node.
|
|
36672
|
-
// TODO: consider patching all parent nodes that didn't have LView id, so that
|
|
36673
|
-
// we can avoid lookups for more nodes.
|
|
36674
|
-
attachLViewId(target, lView);
|
|
36675
|
-
return lView;
|
|
36676
|
-
}
|
|
36677
|
-
}
|
|
36678
|
-
}
|
|
36679
|
-
return null;
|
|
36680
|
-
}
|
|
36681
36673
|
function handleEvent(event) {
|
|
36682
|
-
const nativeElement = event.getAction().element;
|
|
36683
|
-
|
|
36684
|
-
if (
|
|
36685
|
-
|
|
36686
|
-
if (lView !== null) {
|
|
36687
|
-
const tView = lView[TVIEW];
|
|
36688
|
-
const eventName = event.getEventType();
|
|
36689
|
-
const origEvent = event.getEvent();
|
|
36690
|
-
const listeners = getEventListeners(tView, lView, nativeElement, eventName);
|
|
36691
|
-
for (const listener of listeners) {
|
|
36692
|
-
listener(origEvent);
|
|
36693
|
-
}
|
|
36694
|
-
}
|
|
36674
|
+
const nativeElement = unwrapRNode(event.getAction().element);
|
|
36675
|
+
const handlerFns = jsactionMap.get(nativeElement)?.get(event.getEventType());
|
|
36676
|
+
if (!handlerFns) {
|
|
36677
|
+
return;
|
|
36695
36678
|
}
|
|
36696
|
-
|
|
36697
|
-
|
|
36698
|
-
const listeners = [];
|
|
36699
|
-
const lCleanup = lView[CLEANUP];
|
|
36700
|
-
const tCleanup = tView.cleanup;
|
|
36701
|
-
if (tCleanup && lCleanup) {
|
|
36702
|
-
for (let i = 0; i < tCleanup.length;) {
|
|
36703
|
-
const storedEventName = tCleanup[i++];
|
|
36704
|
-
const nativeElementIndex = tCleanup[i++];
|
|
36705
|
-
if (typeof storedEventName === 'string') {
|
|
36706
|
-
const listenerElement = unwrapRNode(lView[nativeElementIndex]);
|
|
36707
|
-
const listener = lCleanup[tCleanup[i++]];
|
|
36708
|
-
i++; // increment to the next position;
|
|
36709
|
-
if (listenerElement === nativeElement && eventName === storedEventName) {
|
|
36710
|
-
listeners.push(listener);
|
|
36711
|
-
}
|
|
36712
|
-
}
|
|
36713
|
-
}
|
|
36679
|
+
for (const handler of handlerFns) {
|
|
36680
|
+
handler(event.getEvent());
|
|
36714
36681
|
}
|
|
36715
|
-
return listeners;
|
|
36716
36682
|
}
|
|
36717
36683
|
|
|
36718
36684
|
/**
|
|
@@ -37651,8 +37617,7 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
37651
37617
|
return compiler.compilePipeDeclaration(angularCoreEnv, `ng:///${decl.type.name}/ɵpipe.js`, decl);
|
|
37652
37618
|
}
|
|
37653
37619
|
|
|
37654
|
-
//
|
|
37655
|
-
// clang-format on
|
|
37620
|
+
// we reexport these symbols just so that they are retained during the dead code elimination
|
|
37656
37621
|
|
|
37657
37622
|
/**
|
|
37658
37623
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
@@ -37842,9 +37807,6 @@ function effect(effectFn, options) {
|
|
|
37842
37807
|
return handle;
|
|
37843
37808
|
}
|
|
37844
37809
|
|
|
37845
|
-
// clang-format off
|
|
37846
|
-
// clang-format on
|
|
37847
|
-
|
|
37848
37810
|
// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
|
|
37849
37811
|
|
|
37850
37812
|
/**
|