@angular/core 19.1.0-next.1 → 19.1.0-next.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/fesm2022/core.mjs +91 -93
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +8 -8
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +95 -102
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +1 -1
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/bundles/{checker-a00b735e.js → checker-c58f97d2.js} +30 -30
- package/schematics/bundles/{combine_units-4983dfd3.js → combine_units-8b29b7f6.js} +3 -3
- package/schematics/bundles/{compiler_host-3e96c3f7.js → compiler_host-f5d588fe.js} +2 -2
- package/schematics/bundles/control-flow-migration.js +3 -3
- package/schematics/bundles/explicit-standalone-flag.js +4 -4
- package/schematics/bundles/{imports-44987700.js → imports-31a38653.js} +2 -2
- package/schematics/bundles/inject-migration.js +9 -9
- package/schematics/bundles/leading_space-6e7a8ec6.js +1 -1
- package/schematics/bundles/{migrate_ts_type_references-58326be5.js → migrate_ts_type_references-a8676ec1.js} +8 -8
- package/schematics/bundles/{nodes-b12e919a.js → nodes-88c2157f.js} +2 -2
- package/schematics/bundles/output-migration.js +4 -4
- package/schematics/bundles/pending-tasks.js +4 -4
- package/schematics/bundles/{program-37562cc3.js → program-30e02255.js} +12 -12
- package/schematics/bundles/project_tsconfig_paths-6c9cde78.js +1 -1
- package/schematics/bundles/provide-initializer.js +4 -4
- package/schematics/bundles/route-lazy-loading.js +3 -3
- package/schematics/bundles/signal-input-migration.js +6 -6
- package/schematics/bundles/signal-queries-migration.js +5 -5
- package/schematics/bundles/signals.js +5 -5
- package/schematics/bundles/standalone-migration.js +7 -7
- package/testing/index.d.ts +5 -5
package/fesm2022/core.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v19.1.0-next.
|
|
2
|
+
* @license Angular v19.1.0-next.2
|
|
3
3
|
* (c) 2010-2024 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -28,7 +28,7 @@ const XSS_SECURITY_URL = 'https://g.co/ng/security#xss';
|
|
|
28
28
|
* Formats and outputs the error message in a consistent way.
|
|
29
29
|
*
|
|
30
30
|
* Example:
|
|
31
|
-
* ```
|
|
31
|
+
* ```ts
|
|
32
32
|
* throw new RuntimeError(
|
|
33
33
|
* RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,
|
|
34
34
|
* ngDevMode && 'Injector has already been destroyed.');
|
|
@@ -415,7 +415,7 @@ const __forward_ref__ = getClosureSafeProperty({ __forward_ref__: getClosureSafe
|
|
|
415
415
|
* {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}
|
|
416
416
|
*
|
|
417
417
|
* ### Circular standalone reference import example
|
|
418
|
-
* ```ts
|
|
418
|
+
* ```angular-ts
|
|
419
419
|
* @Component({
|
|
420
420
|
* standalone: true,
|
|
421
421
|
* imports: [ChildComponent],
|
|
@@ -699,8 +699,7 @@ const NG_INJECTOR_DEF = getClosureSafeProperty({ ngInjectorDef: getClosureSafePr
|
|
|
699
699
|
*
|
|
700
700
|
* </div>
|
|
701
701
|
*
|
|
702
|
-
*
|
|
703
|
-
* region="InjectionToken"></code-example>
|
|
702
|
+
* {@example injection-token/src/main.ts region='InjectionToken'}
|
|
704
703
|
*
|
|
705
704
|
* When creating an `InjectionToken`, you can optionally specify a factory function which returns
|
|
706
705
|
* (possibly by creating) a default value of the parameterized type `T`. This sets up the
|
|
@@ -1154,7 +1153,7 @@ Please check that 1) the type for the parameter at index ${index} is correct and
|
|
|
1154
1153
|
* In practice the `inject()` calls are allowed in a constructor, a constructor parameter and a
|
|
1155
1154
|
* field initializer:
|
|
1156
1155
|
*
|
|
1157
|
-
* ```
|
|
1156
|
+
* ```ts
|
|
1158
1157
|
* @Injectable({providedIn: 'root'})
|
|
1159
1158
|
* export class Car {
|
|
1160
1159
|
* radio: Radio|undefined;
|
|
@@ -1170,7 +1169,7 @@ Please check that 1) the type for the parameter at index ${index} is correct and
|
|
|
1170
1169
|
*
|
|
1171
1170
|
* It is also legal to call `inject` from a provider's factory:
|
|
1172
1171
|
*
|
|
1173
|
-
* ```
|
|
1172
|
+
* ```ts
|
|
1174
1173
|
* providers: [
|
|
1175
1174
|
* {provide: Car, useFactory: () => {
|
|
1176
1175
|
* // OK: a class factory
|
|
@@ -1184,7 +1183,7 @@ Please check that 1) the type for the parameter at index ${index} is correct and
|
|
|
1184
1183
|
* notably, calls to `inject()` are disallowed after a class instance was created, in methods
|
|
1185
1184
|
* (including lifecycle hooks):
|
|
1186
1185
|
*
|
|
1187
|
-
* ```
|
|
1186
|
+
* ```ts
|
|
1188
1187
|
* @Component({ ... })
|
|
1189
1188
|
* export class CarComponent {
|
|
1190
1189
|
* ngOnInit() {
|
|
@@ -1734,7 +1733,7 @@ function makeEnvironmentProviders(providers) {
|
|
|
1734
1733
|
* @usageNotes
|
|
1735
1734
|
* The following example illustrates how to configure an initialization function using
|
|
1736
1735
|
* `provideEnvironmentInitializer()`
|
|
1737
|
-
* ```
|
|
1736
|
+
* ```ts
|
|
1738
1737
|
* createEnvironmentInjector(
|
|
1739
1738
|
* [
|
|
1740
1739
|
* provideEnvironmentInitializer(() => {
|
|
@@ -1770,7 +1769,7 @@ function provideEnvironmentInitializer(initializerFn) {
|
|
|
1770
1769
|
* @usageNotes
|
|
1771
1770
|
* The results of the `importProvidersFrom` call can be used in the `bootstrapApplication` call:
|
|
1772
1771
|
*
|
|
1773
|
-
* ```
|
|
1772
|
+
* ```ts
|
|
1774
1773
|
* await bootstrapApplication(RootComponent, {
|
|
1775
1774
|
* providers: [
|
|
1776
1775
|
* importProvidersFrom(NgModuleOne, NgModuleTwo)
|
|
@@ -1781,7 +1780,7 @@ function provideEnvironmentInitializer(initializerFn) {
|
|
|
1781
1780
|
* You can also use the `importProvidersFrom` results in the `providers` field of a route, when a
|
|
1782
1781
|
* standalone component is used:
|
|
1783
1782
|
*
|
|
1784
|
-
* ```
|
|
1783
|
+
* ```ts
|
|
1785
1784
|
* export const ROUTES: Route[] = [
|
|
1786
1785
|
* {
|
|
1787
1786
|
* path: 'foo',
|
|
@@ -2622,19 +2621,19 @@ function isType(v) {
|
|
|
2622
2621
|
* it intends to capture the pattern where existing constructors have been downleveled from
|
|
2623
2622
|
* ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.
|
|
2624
2623
|
*
|
|
2625
|
-
* ```
|
|
2624
|
+
* ```ts
|
|
2626
2625
|
* function MyClass() {
|
|
2627
2626
|
* var _this = _super.apply(this, arguments) || this;
|
|
2628
2627
|
* ```
|
|
2629
2628
|
*
|
|
2630
2629
|
* downleveled to ES5 with `downlevelIteration` for TypeScript < 4.2:
|
|
2631
|
-
* ```
|
|
2630
|
+
* ```ts
|
|
2632
2631
|
* function MyClass() {
|
|
2633
2632
|
* var _this = _super.apply(this, __spread(arguments)) || this;
|
|
2634
2633
|
* ```
|
|
2635
2634
|
*
|
|
2636
2635
|
* or downleveled to ES5 with `downlevelIteration` for TypeScript >= 4.2:
|
|
2637
|
-
* ```
|
|
2636
|
+
* ```ts
|
|
2638
2637
|
* function MyClass() {
|
|
2639
2638
|
* var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
|
|
2640
2639
|
* ```
|
|
@@ -3152,7 +3151,7 @@ function applyValueToInputField(instance, inputSignalNode, privateName, value) {
|
|
|
3152
3151
|
*
|
|
3153
3152
|
* Example usage:
|
|
3154
3153
|
*
|
|
3155
|
-
* ```
|
|
3154
|
+
* ```ts
|
|
3156
3155
|
* static ɵcmp = defineComponent({
|
|
3157
3156
|
* ...
|
|
3158
3157
|
* inputs: {name: 'publicName'},
|
|
@@ -3552,7 +3551,7 @@ function isSkipHydrationRootTNode(tNode) {
|
|
|
3552
3551
|
* Enables directive matching on elements.
|
|
3553
3552
|
*
|
|
3554
3553
|
* * Example:
|
|
3555
|
-
* ```
|
|
3554
|
+
* ```html
|
|
3556
3555
|
* <my-comp my-directive>
|
|
3557
3556
|
* Should match component / directive.
|
|
3558
3557
|
* </my-comp>
|
|
@@ -3581,7 +3580,7 @@ function enterSkipHydrationBlock(tNode) {
|
|
|
3581
3580
|
* Disables directive matching on element.
|
|
3582
3581
|
*
|
|
3583
3582
|
* * Example:
|
|
3584
|
-
* ```
|
|
3583
|
+
* ```html
|
|
3585
3584
|
* <my-comp my-directive>
|
|
3586
3585
|
* Should match component / directive.
|
|
3587
3586
|
* </my-comp>
|
|
@@ -4508,11 +4507,11 @@ function isLetDeclaration(tNode) {
|
|
|
4508
4507
|
/**
|
|
4509
4508
|
* Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.
|
|
4510
4509
|
*
|
|
4511
|
-
* ```
|
|
4510
|
+
* ```html
|
|
4512
4511
|
* <div my-dir [class]="exp"></div>
|
|
4513
4512
|
* ```
|
|
4514
4513
|
* and
|
|
4515
|
-
* ```
|
|
4514
|
+
* ```ts
|
|
4516
4515
|
* @Directive({
|
|
4517
4516
|
* })
|
|
4518
4517
|
* class MyDirective {
|
|
@@ -4532,11 +4531,11 @@ function hasClassInput(tNode) {
|
|
|
4532
4531
|
/**
|
|
4533
4532
|
* Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.
|
|
4534
4533
|
*
|
|
4535
|
-
* ```
|
|
4534
|
+
* ```html
|
|
4536
4535
|
* <div my-dir [style]="exp"></div>
|
|
4537
4536
|
* ```
|
|
4538
4537
|
* and
|
|
4539
|
-
* ```
|
|
4538
|
+
* ```ts
|
|
4540
4539
|
* @Directive({
|
|
4541
4540
|
* })
|
|
4542
4541
|
* class MyDirective {
|
|
@@ -4878,7 +4877,7 @@ function isRouterOutletInjector(currentInjector) {
|
|
|
4878
4877
|
*
|
|
4879
4878
|
* Example:
|
|
4880
4879
|
*
|
|
4881
|
-
* ```
|
|
4880
|
+
* ```ts
|
|
4882
4881
|
* @Injectable()
|
|
4883
4882
|
* class MyService {
|
|
4884
4883
|
* constructor(public value: String) {}
|
|
@@ -5076,19 +5075,19 @@ function diPublicInInjector(injectorIndex, tView, token) {
|
|
|
5076
5075
|
*
|
|
5077
5076
|
* # Example
|
|
5078
5077
|
* Given:
|
|
5079
|
-
* ```
|
|
5078
|
+
* ```ts
|
|
5080
5079
|
* @Component(...)
|
|
5081
5080
|
* class MyComponent {
|
|
5082
5081
|
* constructor(@Attribute('title') title: string) { ... }
|
|
5083
5082
|
* }
|
|
5084
5083
|
* ```
|
|
5085
5084
|
* When instantiated with
|
|
5086
|
-
* ```
|
|
5085
|
+
* ```html
|
|
5087
5086
|
* <my-component title="Hello"></my-component>
|
|
5088
5087
|
* ```
|
|
5089
5088
|
*
|
|
5090
5089
|
* Then factory method generated is:
|
|
5091
|
-
* ```
|
|
5090
|
+
* ```ts
|
|
5092
5091
|
* MyComponent.ɵcmp = defineComponent({
|
|
5093
5092
|
* factory: () => new MyComponent(injectAttribute('title'))
|
|
5094
5093
|
* ...
|
|
@@ -5896,7 +5895,7 @@ class Injector {
|
|
|
5896
5895
|
*
|
|
5897
5896
|
* @usageNotes
|
|
5898
5897
|
* ### Injecting an attribute that is known to exist
|
|
5899
|
-
* ```
|
|
5898
|
+
* ```ts
|
|
5900
5899
|
* @Directive()
|
|
5901
5900
|
* class MyDir {
|
|
5902
5901
|
* attr: string = inject(new HostAttributeToken('some-attr'));
|
|
@@ -5904,7 +5903,7 @@ class Injector {
|
|
|
5904
5903
|
* ```
|
|
5905
5904
|
*
|
|
5906
5905
|
* ### Optionally injecting an attribute
|
|
5907
|
-
* ```
|
|
5906
|
+
* ```ts
|
|
5908
5907
|
* @Directive()
|
|
5909
5908
|
* class MyDir {
|
|
5910
5909
|
* attr: string | null = inject(new HostAttributeToken('some-attr'), {optional: true});
|
|
@@ -5929,7 +5928,7 @@ class HostAttributeToken {
|
|
|
5929
5928
|
*
|
|
5930
5929
|
* @usageNotes
|
|
5931
5930
|
* ### Injecting a tag name that is known to exist
|
|
5932
|
-
* ```
|
|
5931
|
+
* ```ts
|
|
5933
5932
|
* @Directive()
|
|
5934
5933
|
* class MyDir {
|
|
5935
5934
|
* tagName: string = inject(HOST_TAG_NAME);
|
|
@@ -5937,7 +5936,7 @@ class HostAttributeToken {
|
|
|
5937
5936
|
* ```
|
|
5938
5937
|
*
|
|
5939
5938
|
* ### Optionally injecting a tag name
|
|
5940
|
-
* ```
|
|
5939
|
+
* ```ts
|
|
5941
5940
|
* @Directive()
|
|
5942
5941
|
* class MyDir {
|
|
5943
5942
|
* tagName: string | null = inject(HOST_TAG_NAME, {optional: true});
|
|
@@ -6106,7 +6105,7 @@ class PendingTasksInternal {
|
|
|
6106
6105
|
* - tests might want to delay assertions until the application becomes stable;
|
|
6107
6106
|
*
|
|
6108
6107
|
* @usageNotes
|
|
6109
|
-
* ```
|
|
6108
|
+
* ```ts
|
|
6110
6109
|
* const pendingTasks = inject(PendingTasks);
|
|
6111
6110
|
* const taskCleanup = pendingTasks.add();
|
|
6112
6111
|
* // do work that should block application's stability and then:
|
|
@@ -6350,7 +6349,7 @@ let ngZoneInstanceId = 0;
|
|
|
6350
6349
|
* @usageNotes
|
|
6351
6350
|
* ### Example
|
|
6352
6351
|
*
|
|
6353
|
-
* ```
|
|
6352
|
+
* ```ts
|
|
6354
6353
|
* import {Component, NgZone} from '@angular/core';
|
|
6355
6354
|
* import {NgIf} from '@angular/common';
|
|
6356
6355
|
*
|
|
@@ -6784,7 +6783,7 @@ function getNgZone(ngZoneToUse = 'zone.js', options) {
|
|
|
6784
6783
|
* @usageNotes
|
|
6785
6784
|
* ### Example
|
|
6786
6785
|
*
|
|
6787
|
-
* ```
|
|
6786
|
+
* ```ts
|
|
6788
6787
|
* class MyErrorHandler implements ErrorHandler {
|
|
6789
6788
|
* handleError(error) {
|
|
6790
6789
|
* // do something with the exception
|
|
@@ -6977,7 +6976,7 @@ function inputRequiredFunction(opts) {
|
|
|
6977
6976
|
* @usageNotes
|
|
6978
6977
|
* To use signal-based inputs, import `input` from `@angular/core`.
|
|
6979
6978
|
*
|
|
6980
|
-
* ```
|
|
6979
|
+
* ```ts
|
|
6981
6980
|
* import {input} from '@angular/core`;
|
|
6982
6981
|
* ```
|
|
6983
6982
|
*
|
|
@@ -7098,7 +7097,7 @@ function symbolIterator() {
|
|
|
7098
7097
|
*
|
|
7099
7098
|
* @usageNotes
|
|
7100
7099
|
* ### Example
|
|
7101
|
-
* ```
|
|
7100
|
+
* ```ts
|
|
7102
7101
|
* @Component({...})
|
|
7103
7102
|
* class Container {
|
|
7104
7103
|
* @ViewChildren(Item) items:QueryList<Item>;
|
|
@@ -8227,7 +8226,7 @@ function getDocument() {
|
|
|
8227
8226
|
* (for example, using `bootstrapApplication` calls). In this case, ensure that those applications
|
|
8228
8227
|
* have different `APP_ID` value setup. For example:
|
|
8229
8228
|
*
|
|
8230
|
-
* ```
|
|
8229
|
+
* ```ts
|
|
8231
8230
|
* bootstrapApplication(ComponentA, {
|
|
8232
8231
|
* providers: [
|
|
8233
8232
|
* { provide: APP_ID, useValue: 'app-a' },
|
|
@@ -8344,7 +8343,7 @@ const IMAGE_CONFIG = new InjectionToken(ngDevMode ? 'ImageConfig' : '', {
|
|
|
8344
8343
|
*
|
|
8345
8344
|
* Example:
|
|
8346
8345
|
*
|
|
8347
|
-
* ```
|
|
8346
|
+
* ```ts
|
|
8348
8347
|
* const COUNTER_KEY = makeStateKey<number>('counter');
|
|
8349
8348
|
* let value = 10;
|
|
8350
8349
|
*
|
|
@@ -11004,7 +11003,7 @@ const COMMENT_DELIMITER_ESCAPED = '\u200B$1\u200B';
|
|
|
11004
11003
|
*
|
|
11005
11004
|
* see: https://html.spec.whatwg.org/multipage/syntax.html#comments
|
|
11006
11005
|
*
|
|
11007
|
-
* ```
|
|
11006
|
+
* ```ts
|
|
11008
11007
|
* div.innerHTML = div.innerHTML
|
|
11009
11008
|
* ```
|
|
11010
11009
|
*
|
|
@@ -14390,7 +14389,7 @@ function renderComponent(hostLView, componentHostIdx) {
|
|
|
14390
14389
|
* will be skipped. However, consider this case of two components side-by-side:
|
|
14391
14390
|
*
|
|
14392
14391
|
* App template:
|
|
14393
|
-
* ```
|
|
14392
|
+
* ```html
|
|
14394
14393
|
* <comp></comp>
|
|
14395
14394
|
* <comp></comp>
|
|
14396
14395
|
* ```
|
|
@@ -15241,7 +15240,7 @@ class ViewRef$1 {
|
|
|
15241
15240
|
* @usageNotes
|
|
15242
15241
|
* ### Example
|
|
15243
15242
|
*
|
|
15244
|
-
* ```
|
|
15243
|
+
* ```ts
|
|
15245
15244
|
* @Component({
|
|
15246
15245
|
* selector: 'app-root',
|
|
15247
15246
|
* template: `Number of ticks: {{numberOfTicks}}`
|
|
@@ -15285,7 +15284,7 @@ class ViewRef$1 {
|
|
|
15285
15284
|
* we want to check and update the list every five seconds. We can do that by detaching
|
|
15286
15285
|
* the component's change detector and doing a local check every five seconds.
|
|
15287
15286
|
*
|
|
15288
|
-
* ```
|
|
15287
|
+
* ```ts
|
|
15289
15288
|
* class DataProvider {
|
|
15290
15289
|
* // in a real application the returned data will be different every time
|
|
15291
15290
|
* get data() {
|
|
@@ -15337,7 +15336,7 @@ class ViewRef$1 {
|
|
|
15337
15336
|
* its change detector from the main change detector tree when the component's live property
|
|
15338
15337
|
* is set to false.
|
|
15339
15338
|
*
|
|
15340
|
-
* ```
|
|
15339
|
+
* ```ts
|
|
15341
15340
|
* class DataProvider {
|
|
15342
15341
|
* data = 1;
|
|
15343
15342
|
*
|
|
@@ -18081,7 +18080,7 @@ function createRootComponent(componentView, rootComponentDef, rootDirectives, ho
|
|
|
18081
18080
|
function setRootNodeAttributes(hostRenderer, componentDef, hostRNode, rootSelectorOrNode) {
|
|
18082
18081
|
if (rootSelectorOrNode) {
|
|
18083
18082
|
// The placeholder will be replaced with the actual version at build time.
|
|
18084
|
-
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.
|
|
18083
|
+
setUpAttributes(hostRenderer, hostRNode, ['ng-version', '19.1.0-next.2']);
|
|
18085
18084
|
}
|
|
18086
18085
|
else {
|
|
18087
18086
|
// If host element is created as a part of this function call (i.e. `rootSelectorOrNode`
|
|
@@ -18118,7 +18117,7 @@ function projectNodes(tNode, ngContentSelectors, projectableNodes) {
|
|
|
18118
18117
|
*
|
|
18119
18118
|
* Example:
|
|
18120
18119
|
*
|
|
18121
|
-
* ```
|
|
18120
|
+
* ```ts
|
|
18122
18121
|
* renderComponent(AppComponent, {hostFeatures: [LifecycleHooksFeature]});
|
|
18123
18122
|
* ```
|
|
18124
18123
|
*/
|
|
@@ -18147,7 +18146,7 @@ function LifecycleHooksFeature() {
|
|
|
18147
18146
|
* Note: the example uses standalone components, but the function can also be used for
|
|
18148
18147
|
* non-standalone components (declared in an NgModule) as well.
|
|
18149
18148
|
*
|
|
18150
|
-
* ```
|
|
18149
|
+
* ```angular-ts
|
|
18151
18150
|
* @Component({
|
|
18152
18151
|
* standalone: true,
|
|
18153
18152
|
* selector: 'dynamic',
|
|
@@ -19147,7 +19146,7 @@ function viewChildRequiredFn(locator, opts) {
|
|
|
19147
19146
|
* Create a child query in your component by declaring a
|
|
19148
19147
|
* class field and initializing it with the `viewChild()` function.
|
|
19149
19148
|
*
|
|
19150
|
-
* ```ts
|
|
19149
|
+
* ```angular-ts
|
|
19151
19150
|
* @Component({template: '<div #el></div><my-component #cmp />'})
|
|
19152
19151
|
* export class TestComponent {
|
|
19153
19152
|
* divEl = viewChild<ElementRef>('el'); // Signal<ElementRef|undefined>
|
|
@@ -19314,7 +19313,7 @@ function modelRequiredFunction(opts) {
|
|
|
19314
19313
|
*
|
|
19315
19314
|
* To use `model()`, import the function from `@angular/core`.
|
|
19316
19315
|
*
|
|
19317
|
-
* ```
|
|
19316
|
+
* ```ts
|
|
19318
19317
|
* import {model} from '@angular/core`;
|
|
19319
19318
|
* ```
|
|
19320
19319
|
*
|
|
@@ -19435,7 +19434,7 @@ const ViewChild = makePropDecorator('ViewChild', (selector, opts) => ({
|
|
|
19435
19434
|
* Used to resolve resource URLs on `@Component` when used with JIT compilation.
|
|
19436
19435
|
*
|
|
19437
19436
|
* Example:
|
|
19438
|
-
* ```
|
|
19437
|
+
* ```ts
|
|
19439
19438
|
* @Component({
|
|
19440
19439
|
* selector: 'my-comp',
|
|
19441
19440
|
* templateUrl: 'my-comp.html', // This requires asynchronous resolution
|
|
@@ -19838,7 +19837,7 @@ class StandaloneService {
|
|
|
19838
19837
|
*
|
|
19839
19838
|
*
|
|
19840
19839
|
* # Example
|
|
19841
|
-
* ```
|
|
19840
|
+
* ```ts
|
|
19842
19841
|
* class MyComponent {
|
|
19843
19842
|
* // Generated by Angular Template Compiler
|
|
19844
19843
|
* // [Symbol] syntax will not be supported by TypeScript until v2.7
|
|
@@ -19977,7 +19976,7 @@ function ɵɵdefineDirective(directiveDefinition) {
|
|
|
19977
19976
|
* Create a pipe definition object.
|
|
19978
19977
|
*
|
|
19979
19978
|
* # Example
|
|
19980
|
-
* ```
|
|
19979
|
+
* ```ts
|
|
19981
19980
|
* class MyPipe implements PipeTransform {
|
|
19982
19981
|
* // Generated by Angular Template Compiler
|
|
19983
19982
|
* static ɵpipe = definePipe({
|
|
@@ -22502,7 +22501,7 @@ const TESTABILITY_GETTER = new InjectionToken('');
|
|
|
22502
22501
|
* providers using the `provideProtractorTestingSupport()` function and adding them into the
|
|
22503
22502
|
* `options.providers` array. Example:
|
|
22504
22503
|
*
|
|
22505
|
-
* ```
|
|
22504
|
+
* ```ts
|
|
22506
22505
|
* import {provideProtractorTestingSupport} from '@angular/platform-browser';
|
|
22507
22506
|
*
|
|
22508
22507
|
* await bootstrapApplication(RootComponent, providers: [provideProtractorTestingSupport()]);
|
|
@@ -22772,7 +22771,7 @@ function isSubscribable(obj) {
|
|
|
22772
22771
|
* The following example illustrates how to configure a multi-provider using `APP_INITIALIZER` token
|
|
22773
22772
|
* and a function returning a promise.
|
|
22774
22773
|
* ### Example with NgModule-based application
|
|
22775
|
-
* ```
|
|
22774
|
+
* ```ts
|
|
22776
22775
|
* function initializeApp(): Promise<any> {
|
|
22777
22776
|
* const http = inject(HttpClient);
|
|
22778
22777
|
* return firstValueFrom(
|
|
@@ -22796,7 +22795,7 @@ function isSubscribable(obj) {
|
|
|
22796
22795
|
* ```
|
|
22797
22796
|
*
|
|
22798
22797
|
* ### Example with standalone application
|
|
22799
|
-
* ```
|
|
22798
|
+
* ```ts
|
|
22800
22799
|
* function initializeApp() {
|
|
22801
22800
|
* const http = inject(HttpClient);
|
|
22802
22801
|
* return firstValueFrom(
|
|
@@ -22826,7 +22825,7 @@ function isSubscribable(obj) {
|
|
|
22826
22825
|
* through DI.
|
|
22827
22826
|
*
|
|
22828
22827
|
* ### Example with NgModule-based application
|
|
22829
|
-
* ```
|
|
22828
|
+
* ```ts
|
|
22830
22829
|
* function initializeApp() {
|
|
22831
22830
|
* const http = inject(HttpClient);
|
|
22832
22831
|
* return firstValueFrom(
|
|
@@ -22850,7 +22849,7 @@ function isSubscribable(obj) {
|
|
|
22850
22849
|
* ```
|
|
22851
22850
|
*
|
|
22852
22851
|
* ### Example with standalone application
|
|
22853
|
-
* ```
|
|
22852
|
+
* ```ts
|
|
22854
22853
|
* function initializeApp() {
|
|
22855
22854
|
* const http = inject(HttpClient);
|
|
22856
22855
|
* return firstValueFrom(
|
|
@@ -22895,7 +22894,7 @@ const APP_INITIALIZER = new InjectionToken(ngDevMode ? 'Application Initializer'
|
|
|
22895
22894
|
* @usageNotes
|
|
22896
22895
|
* The following example illustrates how to configure an initialization function using
|
|
22897
22896
|
* `provideAppInitializer()`
|
|
22898
|
-
* ```
|
|
22897
|
+
* ```ts
|
|
22899
22898
|
* bootstrapApplication(App, {
|
|
22900
22899
|
* providers: [
|
|
22901
22900
|
* provideAppInitializer(() => {
|
|
@@ -23136,7 +23135,7 @@ function optionsReducer(dst, objs) {
|
|
|
23136
23135
|
* (here incrementing a counter, using RxJS `interval`),
|
|
23137
23136
|
* and at the same time subscribe to `isStable`.
|
|
23138
23137
|
*
|
|
23139
|
-
* ```
|
|
23138
|
+
* ```ts
|
|
23140
23139
|
* constructor(appRef: ApplicationRef) {
|
|
23141
23140
|
* appRef.isStable.pipe(
|
|
23142
23141
|
* filter(stable => stable)
|
|
@@ -23151,7 +23150,7 @@ function optionsReducer(dst, objs) {
|
|
|
23151
23150
|
* you have to wait for the application to be stable
|
|
23152
23151
|
* before starting your polling process.
|
|
23153
23152
|
*
|
|
23154
|
-
* ```
|
|
23153
|
+
* ```ts
|
|
23155
23154
|
* constructor(appRef: ApplicationRef) {
|
|
23156
23155
|
* appRef.isStable.pipe(
|
|
23157
23156
|
* first(stable => stable),
|
|
@@ -23171,7 +23170,7 @@ function optionsReducer(dst, objs) {
|
|
|
23171
23170
|
* you update a field of your component
|
|
23172
23171
|
* and display it in its template.
|
|
23173
23172
|
*
|
|
23174
|
-
* ```
|
|
23173
|
+
* ```ts
|
|
23175
23174
|
* constructor(appRef: ApplicationRef) {
|
|
23176
23175
|
* appRef.isStable.pipe(
|
|
23177
23176
|
* first(stable => stable),
|
|
@@ -23185,7 +23184,7 @@ function optionsReducer(dst, objs) {
|
|
|
23185
23184
|
*
|
|
23186
23185
|
* You'll have to manually trigger the change detection to update the template.
|
|
23187
23186
|
*
|
|
23188
|
-
* ```
|
|
23187
|
+
* ```ts
|
|
23189
23188
|
* constructor(appRef: ApplicationRef, cd: ChangeDetectorRef) {
|
|
23190
23189
|
* appRef.isStable.pipe(
|
|
23191
23190
|
* first(stable => stable),
|
|
@@ -23199,7 +23198,7 @@ function optionsReducer(dst, objs) {
|
|
|
23199
23198
|
*
|
|
23200
23199
|
* Or make the subscription callback run inside the zone.
|
|
23201
23200
|
*
|
|
23202
|
-
* ```
|
|
23201
|
+
* ```ts
|
|
23203
23202
|
* constructor(appRef: ApplicationRef, zone: NgZone) {
|
|
23204
23203
|
* appRef.isStable.pipe(
|
|
23205
23204
|
* first(stable => stable),
|
|
@@ -25254,7 +25253,7 @@ function getTStylingRangeTail(tStylingRange) {
|
|
|
25254
25253
|
* instructions can be traversed in priority order when computing the styles.
|
|
25255
25254
|
*
|
|
25256
25255
|
* Assume we are dealing with the following code:
|
|
25257
|
-
* ```
|
|
25256
|
+
* ```angular-ts
|
|
25258
25257
|
* @Component({
|
|
25259
25258
|
* template: `
|
|
25260
25259
|
* <my-cmp [style]=" {color: '#001'} "
|
|
@@ -25325,7 +25324,7 @@ function getTStylingRangeTail(tStylingRange) {
|
|
|
25325
25324
|
*
|
|
25326
25325
|
* NOTE: the comment binding location is for illustrative purposes only.
|
|
25327
25326
|
*
|
|
25328
|
-
* ```
|
|
25327
|
+
* ```ts
|
|
25329
25328
|
* // Template: (ExampleComponent)
|
|
25330
25329
|
* ɵɵstyleMap({color: '#001'}); // Binding index: 10
|
|
25331
25330
|
* ɵɵstyleProp('color', '#002'); // Binding index: 12
|
|
@@ -25342,7 +25341,7 @@ function getTStylingRangeTail(tStylingRange) {
|
|
|
25342
25341
|
*
|
|
25343
25342
|
* The correct priority order of concatenation is:
|
|
25344
25343
|
*
|
|
25345
|
-
* ```
|
|
25344
|
+
* ```ts
|
|
25346
25345
|
* // MyComponent
|
|
25347
25346
|
* ɵɵstyleMap({color: '#003'}); // Binding index: 20
|
|
25348
25347
|
* ɵɵstyleProp('color', '#004'); // Binding index: 22
|
|
@@ -25674,7 +25673,7 @@ function getLastParsedValue(text) {
|
|
|
25674
25673
|
* Initializes `className` string for parsing and parses the first token.
|
|
25675
25674
|
*
|
|
25676
25675
|
* This function is intended to be used in this format:
|
|
25677
|
-
* ```
|
|
25676
|
+
* ```ts
|
|
25678
25677
|
* for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
|
|
25679
25678
|
* const key = getLastParsedKey();
|
|
25680
25679
|
* ...
|
|
@@ -25691,7 +25690,7 @@ function parseClassName(text) {
|
|
|
25691
25690
|
* Parses next `className` token.
|
|
25692
25691
|
*
|
|
25693
25692
|
* This function is intended to be used in this format:
|
|
25694
|
-
* ```
|
|
25693
|
+
* ```ts
|
|
25695
25694
|
* for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
|
|
25696
25695
|
* const key = getLastParsedKey();
|
|
25697
25696
|
* ...
|
|
@@ -25714,7 +25713,7 @@ function parseClassNameNext(text, index) {
|
|
|
25714
25713
|
* Initializes `cssText` string for parsing and parses the first key/values.
|
|
25715
25714
|
*
|
|
25716
25715
|
* This function is intended to be used in this format:
|
|
25717
|
-
* ```
|
|
25716
|
+
* ```ts
|
|
25718
25717
|
* for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
|
|
25719
25718
|
* const key = getLastParsedKey();
|
|
25720
25719
|
* const value = getLastParsedValue();
|
|
@@ -25732,7 +25731,7 @@ function parseStyle(text) {
|
|
|
25732
25731
|
* Parses the next `cssText` key/values.
|
|
25733
25732
|
*
|
|
25734
25733
|
* This function is intended to be used in this format:
|
|
25735
|
-
* ```
|
|
25734
|
+
* ```ts
|
|
25736
25735
|
* for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
|
|
25737
25736
|
* const key = getLastParsedKey();
|
|
25738
25737
|
* const value = getLastParsedValue();
|
|
@@ -26289,7 +26288,7 @@ function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
|
|
|
26289
26288
|
* method allows us to update the first template instruction `TStylingKey` with a new value.
|
|
26290
26289
|
*
|
|
26291
26290
|
* Assume:
|
|
26292
|
-
* ```
|
|
26291
|
+
* ```angular-ts
|
|
26293
26292
|
* <div my-dir style="color: red" [style.color]="tmplExp"></div>
|
|
26294
26293
|
*
|
|
26295
26294
|
* @Directive({
|
|
@@ -26302,7 +26301,7 @@ function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
|
|
|
26302
26301
|
* ```
|
|
26303
26302
|
*
|
|
26304
26303
|
* when `[style.color]="tmplExp"` executes it creates this data structure.
|
|
26305
|
-
* ```
|
|
26304
|
+
* ```ts
|
|
26306
26305
|
* ['', 'color', 'color', 'red', 'width', '100px'],
|
|
26307
26306
|
* ```
|
|
26308
26307
|
*
|
|
@@ -26312,14 +26311,14 @@ function getTemplateHeadTStylingKey(tData, tNode, isClassBased) {
|
|
|
26312
26311
|
* `color' and 'width`)
|
|
26313
26312
|
*
|
|
26314
26313
|
* When `'[style.color]': 'dirExp',` executes we need to insert a new data into the linked list.
|
|
26315
|
-
* ```
|
|
26314
|
+
* ```ts
|
|
26316
26315
|
* ['', 'color', 'width', '100px'], // newly inserted
|
|
26317
26316
|
* ['', 'color', 'color', 'red', 'width', '100px'], // this is wrong
|
|
26318
26317
|
* ```
|
|
26319
26318
|
*
|
|
26320
26319
|
* Notice that the template statics is now wrong as it incorrectly contains `width` so we need to
|
|
26321
26320
|
* update it like so:
|
|
26322
|
-
* ```
|
|
26321
|
+
* ```ts
|
|
26323
26322
|
* ['', 'color', 'width', '100px'],
|
|
26324
26323
|
* ['', 'color', 'color', 'red'], // UPDATE
|
|
26325
26324
|
* ```
|
|
@@ -29358,7 +29357,7 @@ function removeInnerTemplateTranslation(message) {
|
|
|
29358
29357
|
* translated message can span multiple templates.
|
|
29359
29358
|
*
|
|
29360
29359
|
* Example:
|
|
29361
|
-
* ```
|
|
29360
|
+
* ```html
|
|
29362
29361
|
* <div i18n>Translate <span *ngIf>me</span>!</div>
|
|
29363
29362
|
* ```
|
|
29364
29363
|
*
|
|
@@ -34575,7 +34574,7 @@ class Version {
|
|
|
34575
34574
|
/**
|
|
34576
34575
|
* @publicApi
|
|
34577
34576
|
*/
|
|
34578
|
-
const VERSION = new Version('19.1.0-next.
|
|
34577
|
+
const VERSION = new Version('19.1.0-next.2');
|
|
34579
34578
|
|
|
34580
34579
|
/**
|
|
34581
34580
|
* Combination of NgModuleFactory and ComponentFactories.
|
|
@@ -34810,7 +34809,7 @@ function internalProvideZoneChangeDetection({ ngZoneFactory, ignoreChangesOutsid
|
|
|
34810
34809
|
* `BootstrapOptions` instead.
|
|
34811
34810
|
*
|
|
34812
34811
|
* @usageNotes
|
|
34813
|
-
* ```
|
|
34812
|
+
* ```ts
|
|
34814
34813
|
* bootstrapApplication(MyApp, {providers: [
|
|
34815
34814
|
* provideZoneChangeDetection({eventCoalescing: true}),
|
|
34816
34815
|
* ]});
|
|
@@ -35198,7 +35197,7 @@ class ChangeDetectionSchedulerImpl {
|
|
|
35198
35197
|
* - registering a render hook (templates are only refreshed if render hooks do one of the above)
|
|
35199
35198
|
*
|
|
35200
35199
|
* @usageNotes
|
|
35201
|
-
* ```
|
|
35200
|
+
* ```ts
|
|
35202
35201
|
* bootstrapApplication(MyApp, {providers: [
|
|
35203
35202
|
* provideExperimentalZonelessChangeDetection(),
|
|
35204
35203
|
* ]});
|
|
@@ -35270,7 +35269,7 @@ function getGlobalLocale() {
|
|
|
35270
35269
|
* @usageNotes
|
|
35271
35270
|
* ### Example
|
|
35272
35271
|
*
|
|
35273
|
-
* ```
|
|
35272
|
+
* ```ts
|
|
35274
35273
|
* import { LOCALE_ID } from '@angular/core';
|
|
35275
35274
|
* import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
35276
35275
|
* import { AppModule } from './app/app.module';
|
|
@@ -35313,7 +35312,7 @@ const LOCALE_ID = new InjectionToken(ngDevMode ? 'LocaleId' : '', {
|
|
|
35313
35312
|
* @usageNotes
|
|
35314
35313
|
* ### Example
|
|
35315
35314
|
*
|
|
35316
|
-
* ```
|
|
35315
|
+
* ```ts
|
|
35317
35316
|
* import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
35318
35317
|
* import { AppModule } from './app/app.module';
|
|
35319
35318
|
*
|
|
@@ -35337,7 +35336,7 @@ const DEFAULT_CURRENCY_CODE = new InjectionToken(ngDevMode ? 'DefaultCurrencyCod
|
|
|
35337
35336
|
* @usageNotes
|
|
35338
35337
|
* ### Example
|
|
35339
35338
|
*
|
|
35340
|
-
* ```
|
|
35339
|
+
* ```ts
|
|
35341
35340
|
* import { TRANSLATIONS } from '@angular/core';
|
|
35342
35341
|
* import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
35343
35342
|
* import { AppModule } from './app/app.module';
|
|
@@ -35362,7 +35361,7 @@ const TRANSLATIONS = new InjectionToken(ngDevMode ? 'Translations' : '');
|
|
|
35362
35361
|
* @usageNotes
|
|
35363
35362
|
* ### Example
|
|
35364
35363
|
*
|
|
35365
|
-
* ```
|
|
35364
|
+
* ```ts
|
|
35366
35365
|
* import { TRANSLATIONS_FORMAT } from '@angular/core';
|
|
35367
35366
|
* import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
35368
35367
|
* import { AppModule } from './app/app.module';
|
|
@@ -35386,7 +35385,7 @@ const TRANSLATIONS_FORMAT = new InjectionToken(ngDevMode ? 'TranslationsFormat'
|
|
|
35386
35385
|
*
|
|
35387
35386
|
* @usageNotes
|
|
35388
35387
|
* ### Example
|
|
35389
|
-
* ```
|
|
35388
|
+
* ```ts
|
|
35390
35389
|
* import { MissingTranslationStrategy } from '@angular/core';
|
|
35391
35390
|
* import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
35392
35391
|
* import { AppModule } from './app/app.module';
|
|
@@ -35750,7 +35749,7 @@ class PlatformRef {
|
|
|
35750
35749
|
* @usageNotes
|
|
35751
35750
|
* ### Simple Example
|
|
35752
35751
|
*
|
|
35753
|
-
* ```
|
|
35752
|
+
* ```ts
|
|
35754
35753
|
* @NgModule({
|
|
35755
35754
|
* imports: [BrowserModule]
|
|
35756
35755
|
* })
|
|
@@ -36178,8 +36177,7 @@ function noModuleError(id) {
|
|
|
36178
36177
|
* (`CheckOnce`, rather than the default `CheckAlways`), then forces a second check
|
|
36179
36178
|
* after an interval.
|
|
36180
36179
|
*
|
|
36181
|
-
*
|
|
36182
|
-
* region="mark-for-check"></code-example>
|
|
36180
|
+
* {@example core/ts/change_detect/change-detection.ts region='mark-for-check'}
|
|
36183
36181
|
*
|
|
36184
36182
|
* ### Detach change detector to limit how often check occurs
|
|
36185
36183
|
*
|
|
@@ -36189,7 +36187,7 @@ function noModuleError(id) {
|
|
|
36189
36187
|
* less often than the changes actually occur. To do that, we detach
|
|
36190
36188
|
* the component's change detector and perform an explicit local check every five seconds.
|
|
36191
36189
|
*
|
|
36192
|
-
*
|
|
36190
|
+
* {@example core/ts/change_detect/change-detection.ts region='detach'}
|
|
36193
36191
|
*
|
|
36194
36192
|
*
|
|
36195
36193
|
* ### Reattaching a detached component
|
|
@@ -36199,7 +36197,7 @@ function noModuleError(id) {
|
|
|
36199
36197
|
* when the `live` property is set to false, and reattaches it when the property
|
|
36200
36198
|
* becomes true.
|
|
36201
36199
|
*
|
|
36202
|
-
*
|
|
36200
|
+
* {@example core/ts/change_detect/change-detection.ts region='reattach'}
|
|
36203
36201
|
*
|
|
36204
36202
|
* @publicApi
|
|
36205
36203
|
*/
|
|
@@ -36265,7 +36263,7 @@ class ViewRef extends ChangeDetectorRef {
|
|
|
36265
36263
|
* The following template breaks down into two separate `TemplateRef` instances,
|
|
36266
36264
|
* an outer one and an inner one.
|
|
36267
36265
|
*
|
|
36268
|
-
* ```
|
|
36266
|
+
* ```html
|
|
36269
36267
|
* Count: {{items.length}}
|
|
36270
36268
|
* <ul>
|
|
36271
36269
|
* <li *ngFor="let item of items">{{item}}</li>
|
|
@@ -36274,7 +36272,7 @@ class ViewRef extends ChangeDetectorRef {
|
|
|
36274
36272
|
*
|
|
36275
36273
|
* This is the outer `TemplateRef`:
|
|
36276
36274
|
*
|
|
36277
|
-
* ```
|
|
36275
|
+
* ```html
|
|
36278
36276
|
* Count: {{items.length}}
|
|
36279
36277
|
* <ul>
|
|
36280
36278
|
* <ng-template ngFor let-item [ngForOf]="items"></ng-template>
|
|
@@ -36283,13 +36281,13 @@ class ViewRef extends ChangeDetectorRef {
|
|
|
36283
36281
|
*
|
|
36284
36282
|
* This is the inner `TemplateRef`:
|
|
36285
36283
|
*
|
|
36286
|
-
* ```
|
|
36284
|
+
* ```html
|
|
36287
36285
|
* <li>{{item}}</li>
|
|
36288
36286
|
* ```
|
|
36289
36287
|
*
|
|
36290
36288
|
* The outer and inner `TemplateRef` instances are assembled into views as follows:
|
|
36291
36289
|
*
|
|
36292
|
-
* ```
|
|
36290
|
+
* ```html
|
|
36293
36291
|
* <!-- ViewRef: outer-0 -->
|
|
36294
36292
|
* Count: 2
|
|
36295
36293
|
* <ul>
|
|
@@ -39795,7 +39793,7 @@ function verifySsrContentsIntegrity() {
|
|
|
39795
39793
|
* Intended to be used as a transform function of an input.
|
|
39796
39794
|
*
|
|
39797
39795
|
* @usageNotes
|
|
39798
|
-
* ```
|
|
39796
|
+
* ```ts
|
|
39799
39797
|
* @Input({ transform: booleanAttribute }) status!: boolean;
|
|
39800
39798
|
* ```
|
|
39801
39799
|
* @param value Value to be transformed.
|
|
@@ -39812,7 +39810,7 @@ function booleanAttribute(value) {
|
|
|
39812
39810
|
* @param fallbackValue Value to use if the provided value can't be parsed as a number.
|
|
39813
39811
|
*
|
|
39814
39812
|
* @usageNotes
|
|
39815
|
-
* ```
|
|
39813
|
+
* ```ts
|
|
39816
39814
|
* @Input({ transform: numberAttribute }) id!: number;
|
|
39817
39815
|
* ```
|
|
39818
39816
|
*
|
|
@@ -40934,7 +40932,7 @@ function wrapEqualityFn(equal) {
|
|
|
40934
40932
|
* Note: the example uses standalone components, but the function can also be used for
|
|
40935
40933
|
* non-standalone components (declared in an NgModule) as well.
|
|
40936
40934
|
*
|
|
40937
|
-
* ```
|
|
40935
|
+
* ```angular-ts
|
|
40938
40936
|
* @Component({
|
|
40939
40937
|
* standalone: true,
|
|
40940
40938
|
* template: `Hello {{ name }}!`
|
|
@@ -40999,7 +40997,7 @@ function createComponent(component, options) {
|
|
|
40999
40997
|
* The example below demonstrates how to use the function and how the fields
|
|
41000
40998
|
* of the returned object map to the component metadata.
|
|
41001
40999
|
*
|
|
41002
|
-
* ```
|
|
41000
|
+
* ```angular-ts
|
|
41003
41001
|
* @Component({
|
|
41004
41002
|
* standalone: true,
|
|
41005
41003
|
* selector: 'foo-component',
|