@angular/core 9.0.0-rc.9 → 9.0.0

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.
Files changed (196) hide show
  1. package/bundles/core-testing.umd.js +10 -9
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +6 -6
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +3619 -3914
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +182 -175
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +483 -651
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.js +17 -17
  12. package/esm2015/index.js +2 -2
  13. package/esm2015/public_api.js +2 -2
  14. package/esm2015/src/application_ref.js +7 -7
  15. package/esm2015/src/core.js +3 -3
  16. package/esm2015/src/core_private_export.js +7 -7
  17. package/esm2015/src/core_render3_private_export.js +2 -2
  18. package/esm2015/src/debug/debug_node.js +44 -12
  19. package/esm2015/src/i18n/locale_data_api.js +1 -2
  20. package/esm2015/src/interface/type.js +1 -1
  21. package/esm2015/src/metadata/ng_module.js +1 -1
  22. package/esm2015/src/render/api.js +4 -1
  23. package/esm2015/src/render3/assert.js +9 -1
  24. package/esm2015/src/render3/bindings.js +16 -5
  25. package/esm2015/src/render3/component.js +54 -25
  26. package/esm2015/src/render3/component_ref.js +11 -15
  27. package/esm2015/src/render3/definition.js +3 -1
  28. package/esm2015/src/render3/di.js +3 -4
  29. package/esm2015/src/render3/di_setup.js +5 -7
  30. package/esm2015/src/render3/errors.js +3 -1
  31. package/esm2015/src/render3/features/inherit_definition_feature.js +41 -13
  32. package/esm2015/src/render3/features/ng_onchanges_feature.js +2 -2
  33. package/esm2015/src/render3/global_utils_api.js +3 -3
  34. package/esm2015/src/render3/i18n.js +60 -56
  35. package/esm2015/src/render3/index.js +2 -2
  36. package/esm2015/src/render3/instructions/advance.js +10 -11
  37. package/esm2015/src/render3/instructions/all.js +4 -5
  38. package/esm2015/src/render3/instructions/attribute.js +6 -6
  39. package/esm2015/src/render3/instructions/attribute_interpolation.js +40 -21
  40. package/esm2015/src/render3/instructions/change_detection.js +8 -23
  41. package/esm2015/src/render3/instructions/class_map_interpolation.js +13 -12
  42. package/esm2015/src/render3/instructions/container.js +15 -12
  43. package/esm2015/src/render3/instructions/element.js +40 -127
  44. package/esm2015/src/render3/instructions/element_container.js +8 -10
  45. package/esm2015/src/render3/instructions/embedded_view.js +7 -7
  46. package/esm2015/src/render3/instructions/host_property.js +10 -7
  47. package/esm2015/src/render3/instructions/listener.js +18 -16
  48. package/esm2015/src/render3/instructions/lview_debug.js +160 -23
  49. package/esm2015/src/render3/instructions/projection.js +7 -5
  50. package/esm2015/src/render3/instructions/property.js +27 -6
  51. package/esm2015/src/render3/instructions/property_interpolation.js +40 -22
  52. package/esm2015/src/render3/instructions/shared.js +267 -240
  53. package/esm2015/src/render3/instructions/storage.js +6 -8
  54. package/esm2015/src/render3/instructions/style_prop_interpolation.js +12 -12
  55. package/esm2015/src/render3/instructions/styling.js +731 -475
  56. package/esm2015/src/render3/instructions/text.js +5 -5
  57. package/esm2015/src/render3/interfaces/definition.js +41 -1
  58. package/esm2015/src/render3/interfaces/node.js +160 -115
  59. package/esm2015/src/render3/interfaces/styling.js +183 -375
  60. package/esm2015/src/render3/interfaces/view.js +10 -2
  61. package/esm2015/src/render3/jit/environment.js +1 -3
  62. package/esm2015/src/render3/node_manipulation.js +177 -57
  63. package/esm2015/src/render3/node_selector_matcher.js +39 -24
  64. package/esm2015/src/render3/node_util.js +12 -7
  65. package/esm2015/src/render3/pipe.js +4 -6
  66. package/esm2015/src/render3/query.js +32 -26
  67. package/esm2015/src/render3/state.js +54 -183
  68. package/esm2015/src/render3/styling/class_differ.js +47 -0
  69. package/esm2015/src/render3/styling/static_styling.js +54 -0
  70. package/esm2015/src/render3/styling/style_binding_list.js +437 -0
  71. package/esm2015/src/render3/styling/styling_parser.js +336 -0
  72. package/esm2015/src/render3/tokens.js +2 -2
  73. package/esm2015/src/render3/util/attrs_utils.js +125 -2
  74. package/esm2015/src/render3/util/change_detection_utils.js +33 -0
  75. package/esm2015/src/render3/util/discovery_utils.js +146 -119
  76. package/esm2015/src/render3/util/global_utils.js +5 -5
  77. package/esm2015/src/render3/util/view_utils.js +6 -6
  78. package/esm2015/src/render3/view_engine_compatibility.js +16 -17
  79. package/esm2015/src/render3/view_ref.js +16 -13
  80. package/esm2015/src/sanitization/bypass.js +1 -1
  81. package/esm2015/src/sanitization/sanitization.js +20 -5
  82. package/esm2015/src/util/array_utils.js +240 -1
  83. package/esm2015/src/util/assert.js +37 -21
  84. package/esm2015/src/util/char_code.js +8 -0
  85. package/esm2015/src/util/iterable.js +4 -1
  86. package/esm2015/src/util/ng_dev_mode.js +1 -12
  87. package/esm2015/src/util/stringify.js +14 -1
  88. package/esm2015/src/version.js +1 -1
  89. package/esm2015/testing/src/r3_test_bed.js +5 -1
  90. package/esm2015/testing/src/r3_test_bed_compiler.js +2 -12
  91. package/esm2015/testing/src/styling.js +103 -0
  92. package/esm5/core.js +17 -17
  93. package/esm5/src/application_ref.js +6 -6
  94. package/esm5/src/core_private_export.js +7 -7
  95. package/esm5/src/core_render3_private_export.js +2 -2
  96. package/esm5/src/debug/debug_node.js +29 -11
  97. package/esm5/src/i18n/locale_data_api.js +1 -2
  98. package/esm5/src/interface/type.js +1 -1
  99. package/esm5/src/metadata/ng_module.js +1 -1
  100. package/esm5/src/render/api.js +4 -1
  101. package/esm5/src/render3/assert.js +4 -1
  102. package/esm5/src/render3/bindings.js +19 -2
  103. package/esm5/src/render3/component.js +47 -22
  104. package/esm5/src/render3/component_ref.js +9 -14
  105. package/esm5/src/render3/definition.js +3 -1
  106. package/esm5/src/render3/di.js +3 -4
  107. package/esm5/src/render3/di_setup.js +4 -5
  108. package/esm5/src/render3/errors.js +3 -1
  109. package/esm5/src/render3/features/inherit_definition_feature.js +36 -12
  110. package/esm5/src/render3/features/ng_onchanges_feature.js +1 -1
  111. package/esm5/src/render3/global_utils_api.js +3 -3
  112. package/esm5/src/render3/i18n.js +51 -51
  113. package/esm5/src/render3/index.js +2 -2
  114. package/esm5/src/render3/instructions/advance.js +9 -11
  115. package/esm5/src/render3/instructions/all.js +1 -2
  116. package/esm5/src/render3/instructions/attribute.js +5 -6
  117. package/esm5/src/render3/instructions/attribute_interpolation.js +31 -21
  118. package/esm5/src/render3/instructions/change_detection.js +8 -21
  119. package/esm5/src/render3/instructions/class_map_interpolation.js +13 -12
  120. package/esm5/src/render3/instructions/container.js +13 -12
  121. package/esm5/src/render3/instructions/element.js +36 -108
  122. package/esm5/src/render3/instructions/element_container.js +8 -9
  123. package/esm5/src/render3/instructions/embedded_view.js +7 -7
  124. package/esm5/src/render3/instructions/host_property.js +8 -7
  125. package/esm5/src/render3/instructions/listener.js +13 -13
  126. package/esm5/src/render3/instructions/lview_debug.js +56 -15
  127. package/esm5/src/render3/instructions/projection.js +6 -5
  128. package/esm5/src/render3/instructions/property.js +17 -6
  129. package/esm5/src/render3/instructions/property_interpolation.js +31 -23
  130. package/esm5/src/render3/instructions/shared.js +247 -207
  131. package/esm5/src/render3/instructions/storage.js +4 -6
  132. package/esm5/src/render3/instructions/style_prop_interpolation.js +12 -12
  133. package/esm5/src/render3/instructions/styling.js +685 -367
  134. package/esm5/src/render3/instructions/text.js +5 -5
  135. package/esm5/src/render3/interfaces/definition.js +1 -1
  136. package/esm5/src/render3/interfaces/node.js +49 -1
  137. package/esm5/src/render3/interfaces/styling.js +57 -1
  138. package/esm5/src/render3/interfaces/view.js +1 -1
  139. package/esm5/src/render3/jit/environment.js +1 -3
  140. package/esm5/src/render3/node_manipulation.js +167 -54
  141. package/esm5/src/render3/node_selector_matcher.js +40 -20
  142. package/esm5/src/render3/node_util.js +12 -7
  143. package/esm5/src/render3/pipe.js +4 -6
  144. package/esm5/src/render3/query.js +25 -24
  145. package/esm5/src/render3/state.js +34 -131
  146. package/esm5/src/render3/styling/class_differ.js +39 -0
  147. package/esm5/src/render3/styling/static_styling.js +42 -0
  148. package/esm5/src/render3/styling/style_binding_list.js +411 -0
  149. package/esm5/src/render3/styling/styling_parser.js +265 -0
  150. package/esm5/src/render3/tokens.js +2 -2
  151. package/esm5/src/render3/util/attrs_utils.js +117 -2
  152. package/esm5/src/render3/util/change_detection_utils.js +23 -0
  153. package/esm5/src/render3/util/discovery_utils.js +115 -99
  154. package/esm5/src/render3/util/global_utils.js +5 -5
  155. package/esm5/src/render3/util/view_utils.js +5 -5
  156. package/esm5/src/render3/view_engine_compatibility.js +37 -39
  157. package/esm5/src/render3/view_ref.js +14 -13
  158. package/esm5/src/sanitization/bypass.js +1 -1
  159. package/esm5/src/sanitization/sanitization.js +16 -5
  160. package/esm5/src/util/array_utils.js +240 -1
  161. package/esm5/src/util/assert.js +37 -21
  162. package/esm5/src/util/char_code.js +8 -0
  163. package/esm5/src/util/iterable.js +4 -1
  164. package/esm5/src/util/ng_dev_mode.js +1 -12
  165. package/esm5/src/util/stringify.js +14 -1
  166. package/esm5/src/version.js +1 -1
  167. package/esm5/testing/src/r3_test_bed.js +9 -1
  168. package/esm5/testing/src/r3_test_bed_compiler.js +2 -9
  169. package/esm5/testing/src/styling.js +82 -0
  170. package/fesm2015/core.js +5917 -6880
  171. package/fesm2015/core.js.map +1 -1
  172. package/fesm2015/testing.js +6 -12
  173. package/fesm2015/testing.js.map +1 -1
  174. package/fesm5/core.js +3588 -3884
  175. package/fesm5/core.js.map +1 -1
  176. package/fesm5/testing.js +10 -9
  177. package/fesm5/testing.js.map +1 -1
  178. package/package.json +1 -1
  179. package/src/r3_symbols.d.ts +1 -1
  180. package/testing/testing.d.ts +1 -3
  181. package/testing/testing.metadata.json +1 -1
  182. package/testing.d.ts +1 -1
  183. package/esm2015/global.js +0 -7
  184. package/esm2015/src/render3/instructions/alloc_host_vars.js +0 -80
  185. package/esm2015/src/render3/styling/bindings.js +0 -1248
  186. package/esm2015/src/render3/styling/map_based_bindings.js +0 -384
  187. package/esm2015/src/render3/styling/state.js +0 -135
  188. package/esm2015/src/render3/styling/styling_debug.js +0 -655
  189. package/esm2015/src/render3/util/styling_utils.js +0 -625
  190. package/esm5/global.js +0 -9
  191. package/esm5/src/render3/instructions/alloc_host_vars.js +0 -62
  192. package/esm5/src/render3/styling/bindings.js +0 -949
  193. package/esm5/src/render3/styling/map_based_bindings.js +0 -310
  194. package/esm5/src/render3/styling/state.js +0 -56
  195. package/esm5/src/render3/styling/styling_debug.js +0 -315
  196. package/esm5/src/render3/util/styling_utils.js +0 -378
package/core.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v9.0.0-rc.9
2
+ * @license Angular v9.0.0
3
3
  * (c) 2010-2020 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -2604,7 +2604,7 @@ export declare interface HostBindingDecorator {
2604
2604
  new (hostPropertyName?: string): any;
2605
2605
  }
2606
2606
 
2607
- declare type HostBindingsFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U, elementIndex: number) => void;
2607
+ declare type HostBindingsFunction<T> = <U extends T>(rf: ɵRenderFlags, ctx: U) => void;
2608
2608
 
2609
2609
  /**
2610
2610
  * Type of the Host decorator / constructor function.
@@ -3381,12 +3381,6 @@ declare interface InstructionState {
3381
3381
  * Necessary to support ChangeDetectorRef.checkNoChanges().
3382
3382
  */
3383
3383
  checkNoChangesMode: boolean;
3384
- /**
3385
- * Function to be called when the element is exited.
3386
- *
3387
- * NOTE: The function is here for tree shakable purposes since it is only needed by styling.
3388
- */
3389
- elementExitFn: (() => void) | null;
3390
3384
  }
3391
3385
 
3392
3386
  declare interface InternalNgModuleRef<T> extends NgModuleRef<T> {
@@ -3543,6 +3537,22 @@ export declare class IterableDiffers {
3543
3537
  find(iterable: any): IterableDifferFactory;
3544
3538
  }
3545
3539
 
3540
+ /**
3541
+ * `KeyValueArray` is an array where even positions contain keys and odd positions contain values.
3542
+ *
3543
+ * `KeyValueArray` provides a very efficient way of iterating over its contents. For small
3544
+ * sets (~10) the cost of binary searching an `KeyValueArray` has about the same performance
3545
+ * characteristics that of a `Map` with significantly better memory footprint.
3546
+ *
3547
+ * If used as a `Map` the keys are stored in alphabetical order so that they can be binary searched
3548
+ * for retrieval.
3549
+ *
3550
+ * See: `keyValueArraySet`, `keyValueArrayGet`, `keyValueArrayIndexOf`, `keyValueArrayDelete`.
3551
+ */
3552
+ declare interface KeyValueArray<VALUE> extends Array<VALUE | string> {
3553
+ __brand__: 'array-map';
3554
+ }
3555
+
3546
3556
  /**
3547
3557
  * Record representing the item change information.
3548
3558
  *
@@ -3689,7 +3699,7 @@ declare interface LContainer extends Array<any> {
3689
3699
  * The host could be an LView if this container is on a component node.
3690
3700
  * In that case, the component LView is its HOST.
3691
3701
  */
3692
- readonly [HOST]: RElement | RComment | ɵangular_packages_core_core_bn;
3702
+ readonly [HOST]: RElement | RComment | ɵangular_packages_core_core_bo;
3693
3703
  /**
3694
3704
  * This is a type field which allows us to differentiate `LContainer` from `StylingContext` in an
3695
3705
  * efficient way. The value is always set to `true`
@@ -3714,18 +3724,18 @@ declare interface LContainer extends Array<any> {
3714
3724
  * Access to the parent view is necessary so we can propagate back
3715
3725
  * up from inside a container to parent[NEXT].
3716
3726
  */
3717
- [PARENT]: ɵangular_packages_core_core_bn;
3727
+ [PARENT]: ɵangular_packages_core_core_bo;
3718
3728
  /**
3719
3729
  * This allows us to jump from a container to a sibling container or component
3720
3730
  * view with the same parent, so we can remove listeners efficiently.
3721
3731
  */
3722
- [NEXT]: ɵangular_packages_core_core_bn | LContainer | null;
3732
+ [NEXT]: ɵangular_packages_core_core_bo | LContainer | null;
3723
3733
  /**
3724
3734
  * A collection of views created based on the underlying `<ng-template>` element but inserted into
3725
3735
  * a different `LContainer`. We need to track views created from a given declaration point since
3726
3736
  * queries collect matches from the embedded view declaration point and _not_ the insertion point.
3727
3737
  */
3728
- [MOVED_VIEWS]: ɵangular_packages_core_core_bn[] | null;
3738
+ [MOVED_VIEWS]: ɵangular_packages_core_core_bo[] | null;
3729
3739
  /**
3730
3740
  * Pointer to the `TNode` which represents the host of the container.
3731
3741
  */
@@ -3762,11 +3772,18 @@ declare interface LFrame {
3762
3772
  * An array of nodes (text, element, container, etc), pipes, their bindings, and
3763
3773
  * any local variables that need to be stored between invocations.
3764
3774
  */
3765
- lView: ɵangular_packages_core_core_bn;
3775
+ lView: ɵangular_packages_core_core_bo;
3776
+ /**
3777
+ * Current `TView` associated with the `LFrame.lView`.
3778
+ *
3779
+ * One can get `TView` from `lFrame[TVIEW]` however because it is so common it makes sense to
3780
+ * store it in `LFrame` for perf reasons.
3781
+ */
3782
+ tView: TView;
3766
3783
  /**
3767
3784
  * Used to set the parent property when nodes are created and track query results.
3768
3785
  *
3769
- * This is used in conjection with `isParent`.
3786
+ * This is used in conjunction with `isParent`.
3770
3787
  */
3771
3788
  previousOrParentTNode: TNode;
3772
3789
  /**
@@ -3791,7 +3808,7 @@ declare interface LFrame {
3791
3808
  *
3792
3809
  * e.g. const inner = x().$implicit; const outer = x().$implicit;
3793
3810
  */
3794
- contextLView: ɵangular_packages_core_core_bn;
3811
+ contextLView: ɵangular_packages_core_core_bo;
3795
3812
  /**
3796
3813
  * Store the element depth count. This is used to identify the root elements of the template
3797
3814
  * so that we can then attach patch data `LView` to only those elements. We know that those
@@ -3807,18 +3824,6 @@ declare interface LFrame {
3807
3824
  * Current sanitizer
3808
3825
  */
3809
3826
  currentSanitizer: StyleSanitizeFn | null;
3810
- /**
3811
- * Used when processing host bindings.
3812
- */
3813
- currentDirectiveDef: ɵDirectiveDef<any> | ɵComponentDef<any> | null;
3814
- /**
3815
- * Used as the starting directive id value.
3816
- *
3817
- * All subsequent directives are incremented from this value onwards.
3818
- * The reason why this value is `1` instead of `0` is because the `0`
3819
- * value is reserved for the template.
3820
- */
3821
- activeDirectiveId: number;
3822
3827
  /**
3823
3828
  * The root index from which pure function instructions should calculate their binding
3824
3829
  * indices. In component views, this is TView.bindingStartIndex. In a host binding
@@ -3830,6 +3835,12 @@ declare interface LFrame {
3830
3835
  * We iterate over the list of Queries and increment current query index at every step.
3831
3836
  */
3832
3837
  currentQueryIndex: number;
3838
+ /**
3839
+ * When host binding is executing this points to the directive index.
3840
+ * `TView.data[currentDirectiveIndex]` is `DirectiveDef`
3841
+ * `LView[currentDirectiveIndex]` is directive instance.
3842
+ */
3843
+ currentDirectiveIndex: number;
3833
3844
  }
3834
3845
 
3835
3846
  /**
@@ -3862,7 +3873,7 @@ export declare const LOCALE_ID: InjectionToken<string>;
3862
3873
  * - `<div #nativeDivEl>` - `nativeDivEl` should point to the native `<div>` element;
3863
3874
  * - `<ng-template #tplRef>` - `tplRef` should point to the `TemplateRef` instance;
3864
3875
  */
3865
- declare type LocalRefExtractor = (tNode: TNodeWithLocalRefs, currentView: ɵangular_packages_core_core_bn) => any;
3876
+ declare type LocalRefExtractor = (tNode: TNodeWithLocalRefs, currentView: ɵangular_packages_core_core_bo) => any;
3866
3877
 
3867
3878
  /**
3868
3879
  * lQueries represent a collection of individual LQuery objects tracked in a given view.
@@ -6366,39 +6377,6 @@ declare const enum StyleSanitizeMode {
6366
6377
  ValidateAndSanitize = 3
6367
6378
  }
6368
6379
 
6369
- /**
6370
- * Array-based representation of a key/value array.
6371
- *
6372
- * The format of the array is "property", "value", "property2",
6373
- * "value2", etc...
6374
- *
6375
- * The first value in the array is reserved to store the instance
6376
- * of the key/value array that was used to populate the property/
6377
- * value entries that take place in the remainder of the array.
6378
- */
6379
- declare interface StylingMapArray extends Array<{} | string | number | null | undefined> {
6380
- /**
6381
- * The last raw value used to generate the entries in the map.
6382
- */
6383
- [StylingMapArrayIndex.RawValuePosition]: {} | string | number | null | undefined;
6384
- }
6385
-
6386
- /**
6387
- * An index of position and offset points for any data stored within a `StylingMapArray` instance.
6388
- */
6389
- declare const enum StylingMapArrayIndex {
6390
- /** Where the values start in the array */
6391
- ValuesStartPosition = 1,
6392
- /** The location of the raw key/value map instance used last to populate the array entries */
6393
- RawValuePosition = 0,
6394
- /** The size of each property/value entry */
6395
- TupleSize = 2,
6396
- /** The offset for the property entry in the tuple */
6397
- PropOffset = 0,
6398
- /** The offset for the value entry in the tuple */
6399
- ValueOffset = 1
6400
- }
6401
-
6402
6380
  /**
6403
6381
  * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
6404
6382
  * @publicApi
@@ -6466,7 +6444,7 @@ declare interface TContainerNode extends TNode {
6466
6444
  * - They are the first node of a component or embedded view
6467
6445
  * - They are dynamically created
6468
6446
  */
6469
- parent: ɵangular_packages_core_core_bd | TElementContainerNode | null;
6447
+ parent: ɵangular_packages_core_core_be | TElementContainerNode | null;
6470
6448
  tViews: TView | TView[] | null;
6471
6449
  projection: null;
6472
6450
  }
@@ -6498,14 +6476,14 @@ declare interface TContainerNode extends TNode {
6498
6476
  *
6499
6477
  * Injector bloom filters are also stored here.
6500
6478
  */
6501
- declare type TData = (TNode | ɵPipeDef<any> | ɵDirectiveDef<any> | ɵComponentDef<any> | number | Type<any> | InjectionToken<any> | TI18n | I18nUpdateOpCodes | null | string)[];
6479
+ declare type TData = (TNode | ɵPipeDef<any> | ɵDirectiveDef<any> | ɵComponentDef<any> | number | TStylingRange | TStylingKey | Type<any> | InjectionToken<any> | TI18n | I18nUpdateOpCodes | null | string)[];
6502
6480
 
6503
6481
  /** Static data for an <ng-container> */
6504
6482
  declare interface TElementContainerNode extends TNode {
6505
6483
  /** Index in the LView[] array. */
6506
6484
  index: number;
6507
- child: ɵangular_packages_core_core_bd | TTextNode | TContainerNode | TElementContainerNode | TProjectionNode | null;
6508
- parent: ɵangular_packages_core_core_bd | TElementContainerNode | null;
6485
+ child: ɵangular_packages_core_core_be | TTextNode | TContainerNode | TElementContainerNode | TProjectionNode | null;
6486
+ parent: ɵangular_packages_core_core_be | TElementContainerNode | null;
6509
6487
  tViews: null;
6510
6488
  projection: null;
6511
6489
  }
@@ -6799,6 +6777,23 @@ declare interface TNode {
6799
6777
  * Stores final exclusive index of the directives.
6800
6778
  */
6801
6779
  directiveEnd: number;
6780
+ /**
6781
+ * Stores the last directive which had a styling instruction.
6782
+ *
6783
+ * Initial value of this is `-1` which means that no `hostBindings` styling instruction has
6784
+ * executed. As `hostBindings` instructions execute they set the value to the index of the
6785
+ * `DirectiveDef` which contained the last `hostBindings` styling instruction.
6786
+ *
6787
+ * Valid values are:
6788
+ * - `-1` No `hostBindings` instruction has executed.
6789
+ * - `directiveStart <= directiveStylingLast < directiveEnd`: Points to the `DirectiveDef` of the
6790
+ * last styling instruction which executed in the `hostBindings`.
6791
+ *
6792
+ * This data is needed so that styling instructions know which static styling data needs to be
6793
+ * collected from the `DirectiveDef.hostAttrs`. A styling instruction needs to collect all data
6794
+ * since last styling instruction.
6795
+ */
6796
+ directiveStylingLast: number;
6802
6797
  /**
6803
6798
  * Stores indexes of property bindings. This field is only set in the ngDevMode and holds indexes
6804
6799
  * of property bindings so TestBed can get bound property metadata for a given node.
@@ -6832,6 +6827,18 @@ declare interface TNode {
6832
6827
  * namespaces, attributes extracted from bindings and outputs).
6833
6828
  */
6834
6829
  attrs: TAttributes | null;
6830
+ /**
6831
+ * Same as `TNode.attrs` but contains merged data across all directive host bindings.
6832
+ *
6833
+ * We need to keep `attrs` as unmerged so that it can be used for attribute selectors.
6834
+ * We merge attrs here so that it can be used in a performant way for initial rendering.
6835
+ *
6836
+ * The `attrs` are merged in first pass in following order:
6837
+ * - Component's `hostAttrs`
6838
+ * - Directives' `hostAttrs`
6839
+ * - Template `TNode.attrs` associated with the current `TNode`.
6840
+ */
6841
+ mergedAttrs: TAttributes | null;
6835
6842
  /**
6836
6843
  * A set of local names under which a given element is exported in a template and
6837
6844
  * visible to queries. An entry in this array can be created for different reasons:
@@ -6916,7 +6923,7 @@ declare interface TNode {
6916
6923
  *
6917
6924
  * If this is an inline view node (V), the parent will be its container.
6918
6925
  */
6919
- parent: ɵangular_packages_core_core_bd | TContainerNode | null;
6926
+ parent: ɵangular_packages_core_core_be | TContainerNode | null;
6920
6927
  /**
6921
6928
  * List of projected TNodes for a given component host element OR index into the said nodes.
6922
6929
  *
@@ -6958,43 +6965,87 @@ declare interface TNode {
6958
6965
  */
6959
6966
  projection: (TNode | RNode[])[] | number | null;
6960
6967
  /**
6961
- * A collection of all style bindings and/or static style values for an element.
6968
+ * A collection of all style static values for an element.
6962
6969
  *
6963
6970
  * This field will be populated if and when:
6964
6971
  *
6965
6972
  * - There are one or more initial styles on an element (e.g. `<div style="width:200px">`)
6966
- * - There are one or more style bindings on an element (e.g. `<div [style.width]="w">`)
6973
+ */
6974
+ styles: string | null;
6975
+ /**
6976
+ * A `KeyValueArray` version of residual `styles`.
6977
+ *
6978
+ * When there are styling instructions than each instruction stores the static styling
6979
+ * which is of lower priority than itself. This means that there may be a higher priority styling
6980
+ * than the instruction.
6981
+ *
6982
+ * Imagine:
6983
+ * ```
6984
+ * <div style="color: highest;" my-dir>
6985
+ *
6986
+ * @Directive({
6987
+ * host: {
6988
+ * style: 'color: lowest; ',
6989
+ * '[styles.color]': 'exp' // ɵɵstyleProp('color', ctx.exp);
6990
+ * }
6991
+ * })
6992
+ * ```
6967
6993
  *
6968
- * If and when there are only initial styles (no bindings) then an instance of `StylingMapArray`
6969
- * will be used here. Otherwise an instance of `TStylingContext` will be created when there
6970
- * are one or more style bindings on an element.
6994
+ * In the above case:
6995
+ * - `color: lowest` is stored with `ɵɵstyleProp('color', ctx.exp);` instruction
6996
+ * - `color: highest` is the residual and is stored here.
6971
6997
  *
6972
- * During element creation this value is likely to be populated with an instance of
6973
- * `StylingMapArray` and only when the bindings are evaluated (which happens during
6974
- * update mode) then it will be converted to a `TStylingContext` if any style bindings
6975
- * are encountered. If and when this happens then the existing `StylingMapArray` value
6976
- * will be placed into the initial styling slot in the newly created `TStylingContext`.
6998
+ * - `undefined': not initialized.
6999
+ * - `null`: initialized but `styles` is `null`
7000
+ * - `KeyValueArray`: parsed version of `styles`.
6977
7001
  */
6978
- styles: StylingMapArray | TStylingContext | null;
7002
+ residualStyles: KeyValueArray<any> | undefined | null;
6979
7003
  /**
6980
- * A collection of all class bindings and/or static class values for an element.
7004
+ * A collection of all class static values for an element.
6981
7005
  *
6982
7006
  * This field will be populated if and when:
6983
7007
  *
6984
7008
  * - There are one or more initial classes on an element (e.g. `<div class="one two three">`)
6985
- * - There are one or more class bindings on an element (e.g. `<div [class.foo]="f">`)
7009
+ */
7010
+ classes: string | null;
7011
+ /**
7012
+ * A `KeyValueArray` version of residual `classes`.
7013
+ *
7014
+ * Same as `TNode.residualStyles` but for classes.
7015
+ *
7016
+ * - `undefined': not initialized.
7017
+ * - `null`: initialized but `classes` is `null`
7018
+ * - `KeyValueArray`: parsed version of `classes`.
7019
+ */
7020
+ residualClasses: KeyValueArray<any> | undefined | null;
7021
+ /**
7022
+ * Stores the head/tail index of the class bindings.
7023
+ *
7024
+ * - If no bindings, the head and tail will both be 0.
7025
+ * - If there are template bindings, stores the head/tail of the class bindings in the template.
7026
+ * - If no template bindings but there are host bindings, the head value will point to the last
7027
+ * host binding for "class" (not the head of the linked list), tail will be 0.
7028
+ *
7029
+ * See: `style_binding_list.ts` for details.
7030
+ *
7031
+ * This is used by `insertTStylingBinding` to know where the next styling binding should be
7032
+ * inserted so that they can be sorted in priority order.
7033
+ */
7034
+ classBindings: TStylingRange;
7035
+ /**
7036
+ * Stores the head/tail index of the class bindings.
6986
7037
  *
6987
- * If and when there are only initial classes (no bindings) then an instance of `StylingMapArray`
6988
- * will be used here. Otherwise an instance of `TStylingContext` will be created when there
6989
- * are one or more class bindings on an element.
7038
+ * - If no bindings, the head and tail will both be 0.
7039
+ * - If there are template bindings, stores the head/tail of the style bindings in the template.
7040
+ * - If no template bindings but there are host bindings, the head value will point to the last
7041
+ * host binding for "style" (not the head of the linked list), tail will be 0.
6990
7042
  *
6991
- * During element creation this value is likely to be populated with an instance of
6992
- * `StylingMapArray` and only when the bindings are evaluated (which happens during
6993
- * update mode) then it will be converted to a `TStylingContext` if any class bindings
6994
- * are encountered. If and when this happens then the existing `StylingMapArray` value
6995
- * will be placed into the initial styling slot in the newly created `TStylingContext`.
7043
+ * See: `style_binding_list.ts` for details.
7044
+ *
7045
+ * This is used by `insertTStylingBinding` to know where the next styling binding should be
7046
+ * inserted so that they can be sorted in priority order.
6996
7047
  */
6997
- classes: StylingMapArray | TStylingContext | null;
7048
+ styleBindings: TStylingRange;
6998
7049
  }
6999
7050
 
7000
7051
  /**
@@ -7025,99 +7076,7 @@ declare const enum TNodeFlags {
7025
7076
  * This flags allows us to guard host-binding logic and invoke it only on nodes
7026
7077
  * that actually have directives with host bindings.
7027
7078
  */
7028
- hasHostBindings = 128,
7029
- /** Bit #9 - This bit is set if the node has initial styling */
7030
- hasInitialStyling = 256,
7031
- /**
7032
- * Bit #10 - Whether or not there are class-based map bindings present.
7033
- *
7034
- * Examples include:
7035
- * 1. `<div [class]="x">`
7036
- * 2. `@HostBinding('class') x`
7037
- */
7038
- hasClassMapBindings = 512,
7039
- /**
7040
- * Bit #11 - Whether or not there are any class-based prop bindings present.
7041
- *
7042
- * Examples include:
7043
- * 1. `<div [class.name]="x">`
7044
- * 2. `@HostBinding('class.name') x`
7045
- */
7046
- hasClassPropBindings = 1024,
7047
- /**
7048
- * Bit #12 - whether or not there are any active [class] and [class.name] bindings
7049
- */
7050
- hasClassPropAndMapBindings = 1536,
7051
- /**
7052
- * Bit #13 - Whether or not the context contains one or more class-based template bindings.
7053
- *
7054
- * Examples include:
7055
- * 1. `<div [class]="x">`
7056
- * 2. `<div [class.name]="x">`
7057
- */
7058
- hasTemplateClassBindings = 2048,
7059
- /**
7060
- * Bit #14 - Whether or not the context contains one or more class-based host bindings.
7061
- *
7062
- * Examples include:
7063
- * 1. `@HostBinding('class') x`
7064
- * 2. `@HostBinding('class.name') x`
7065
- */
7066
- hasHostClassBindings = 4096,
7067
- /**
7068
- * Bit #15 - Whether or not there are two or more sources for a class property in the context.
7069
- *
7070
- * Examples include:
7071
- * 1. prop + prop: `<div [class.active]="x" dir-that-sets-active-class>`
7072
- * 2. map + prop: `<div [class]="x" [class.foo]>`
7073
- * 3. map + map: `<div [class]="x" dir-that-sets-class>`
7074
- */
7075
- hasDuplicateClassBindings = 8192,
7076
- /**
7077
- * Bit #16 - Whether or not there are style-based map bindings present.
7078
- *
7079
- * Examples include:
7080
- * 1. `<div [style]="x">`
7081
- * 2. `@HostBinding('style') x`
7082
- */
7083
- hasStyleMapBindings = 16384,
7084
- /**
7085
- * Bit #17 - Whether or not there are any style-based prop bindings present.
7086
- *
7087
- * Examples include:
7088
- * 1. `<div [style.prop]="x">`
7089
- * 2. `@HostBinding('style.prop') x`
7090
- */
7091
- hasStylePropBindings = 32768,
7092
- /**
7093
- * Bit #18 - whether or not there are any active [style] and [style.prop] bindings
7094
- */
7095
- hasStylePropAndMapBindings = 49152,
7096
- /**
7097
- * Bit #19 - Whether or not the context contains one or more style-based template bindings.
7098
- *
7099
- * Examples include:
7100
- * 1. `<div [style]="x">`
7101
- * 2. `<div [style.prop]="x">`
7102
- */
7103
- hasTemplateStyleBindings = 65536,
7104
- /**
7105
- * Bit #20 - Whether or not the context contains one or more style-based host bindings.
7106
- *
7107
- * Examples include:
7108
- * 1. `@HostBinding('style') x`
7109
- * 2. `@HostBinding('style.prop') x`
7110
- */
7111
- hasHostStyleBindings = 131072,
7112
- /**
7113
- * Bit #21 - Whether or not there are two or more sources for a style property in the context.
7114
- *
7115
- * Examples include:
7116
- * 1. prop + prop: `<div [style.width]="x" dir-that-sets-width>`
7117
- * 2. map + prop: `<div [style]="x" [style.prop]>`
7118
- * 3. map + map: `<div [style]="x" dir-that-sets-style>`
7119
- */
7120
- hasDuplicateStyleBindings = 262144
7079
+ hasHostBindings = 128
7121
7080
  }
7122
7081
 
7123
7082
  /**
@@ -7165,7 +7124,7 @@ declare const enum TNodeType {
7165
7124
  /**
7166
7125
  * Type representing a set of TNodes that can have local refs (`#foo`) placed on them.
7167
7126
  */
7168
- declare type TNodeWithLocalRefs = TContainerNode | ɵangular_packages_core_core_bd | TElementContainerNode;
7127
+ declare type TNodeWithLocalRefs = TContainerNode | ɵangular_packages_core_core_be | TElementContainerNode;
7169
7128
 
7170
7129
  /** Static data for an LProjectionNode */
7171
7130
  declare interface TProjectionNode extends TNode {
@@ -7176,7 +7135,7 @@ declare interface TProjectionNode extends TNode {
7176
7135
  * or embedded view (which means their parent is in a different view and must be
7177
7136
  * retrieved using LView.node).
7178
7137
  */
7179
- parent: ɵangular_packages_core_core_bd | TElementContainerNode | null;
7138
+ parent: ɵangular_packages_core_core_be | TElementContainerNode | null;
7180
7139
  tViews: null;
7181
7140
  /** Index of the projection node. (See TNode.projection for more info.) */
7182
7141
  projection: number;
@@ -7371,334 +7330,117 @@ export declare const TRANSLATIONS: InjectionToken<string>;
7371
7330
  export declare const TRANSLATIONS_FORMAT: InjectionToken<string>;
7372
7331
 
7373
7332
  /**
7374
- * --------
7375
- *
7376
- * This file contains the core interfaces for styling in Angular.
7333
+ * Value stored in the `TData` which is needed to re-concatenate the styling.
7377
7334
  *
7378
- * To learn more about the algorithm see `TStylingContext`.
7335
+ * See: `TStylingKeyPrimitive` and `TStylingStatic`
7336
+ */
7337
+ declare type TStylingKey = TStylingKeyPrimitive | TStylingStatic;
7338
+
7339
+ /**
7340
+ * The primitive portion (`TStylingStatic` removed) of the value stored in the `TData` which is
7341
+ * needed to re-concatenate the styling.
7379
7342
  *
7380
- * --------
7343
+ * - `string`: Stores the property name. Used with `ɵɵstyleProp`/`ɵɵclassProp` instruction.
7344
+ * - `null`: Represents map, so there is no name. Used with `ɵɵstyleMap`/`ɵɵclassMap`.
7345
+ * - `false`: Represents an ignore case. This happens when `ɵɵstyleProp`/`ɵɵclassProp` instruction
7346
+ * is combined with directive which shadows its input `@Input('class')`. That way the binding
7347
+ * should not participate in the styling resolution.
7381
7348
  */
7349
+ declare type TStylingKeyPrimitive = string | null | false;
7350
+
7382
7351
  /**
7383
- * A static-level representation of all style or class bindings/values
7384
- * associated with a `TNode`.
7352
+ * This is a branded number which contains previous and next index.
7385
7353
  *
7386
- * The `TStylingContext` unites all template styling bindings (i.e.
7387
- * `[class]` and `[style]` bindings) as well as all host-level
7388
- * styling bindings (for components and directives) together into
7389
- * a single manifest
7354
+ * When we come across styling instructions we need to store the `TStylingKey` in the correct
7355
+ * order so that we can re-concatenate the styling value in the desired priority.
7390
7356
  *
7391
- * The styling context is stored on a `TNode` on and there are
7392
- * two instances of it: one for classes and another for styles.
7357
+ * The insertion can happen either at the:
7358
+ * - end of template as in the case of coming across additional styling instruction in the template
7359
+ * - in front of the template in the case of coming across additional instruction in the
7360
+ * `hostBindings`.
7393
7361
  *
7394
- * ```typescript
7395
- * tNode.styles = [ ... a context only for styles ... ];
7396
- * tNode.classes = [ ... a context only for classes ... ];
7397
- * ```
7362
+ * We use `TStylingRange` to store the previous and next index into the `TData` where the template
7363
+ * bindings can be found.
7398
7364
  *
7399
- * The styling context is created each time there are one or more
7400
- * styling bindings (style or class bindings) present for an element,
7401
- * but is only created once per `TNode`.
7365
+ * - bit 0 is used to mark that the previous index has a duplicate for current value.
7366
+ * - bit 1 is used to mark that the next index has a duplicate for the current value.
7367
+ * - bits 2-16 are used to encode the next/tail of the template.
7368
+ * - bits 17-32 are used to encode the previous/head of template.
7402
7369
  *
7403
- * `tNode.styles` and `tNode.classes` can be an instance of the following:
7370
+ * NODE: *duplicate* false implies that it is statically known that this binding will not collide
7371
+ * with other bindings and therefore there is no need to check other bindings. For example the
7372
+ * bindings in `<div [style.color]="exp" [style.width]="exp">` will never collide and will have
7373
+ * their bits set accordingly. Previous duplicate means that we may need to check previous if the
7374
+ * current binding is `null`. Next duplicate means that we may need to check next bindings if the
7375
+ * current binding is not `null`.
7404
7376
  *
7405
- * ```typescript
7406
- * tNode.styles = null; // no static styling or styling bindings active
7407
- * tNode.styles = StylingMapArray; // only static values present (e.g. `<div style="width:200">`)
7408
- * tNode.styles = TStylingContext; // one or more styling bindings present (e.g. `<div
7409
- * [style.width]>`)
7410
- * ```
7411
- *
7412
- * Both `tNode.styles` and `tNode.classes` are instantiated when anything
7413
- * styling-related is active on an element. They are first created from
7414
- * from the any of the element-level instructions (e.g. `element`,
7415
- * `elementStart`, `elementHostAttrs`). When any static style/class
7416
- * values are encountered they are registered on the `tNode.styles`
7417
- * and `tNode.classes` data-structures. By default (when any static
7418
- * values are encountered) the `tNode.styles` or `tNode.classes` values
7419
- * are instances of a `StylingMapArray`. Only when style/class bindings
7420
- * are detected then that styling map is converted into an instance of
7421
- * `TStylingContext`.
7422
- *
7423
- * Due to the fact the the `TStylingContext` is stored on a `TNode`
7424
- * this means that all data within the context is static. Instead of
7425
- * storing actual styling binding values, the lView binding index values
7426
- * are stored within the context. (static nature means it is more compact.)
7427
- *
7428
- * The code below shows a breakdown of two instances of `TStylingContext`
7429
- * (one for `tNode.styles` and another for `tNode.classes`):
7377
+ * NOTE: `0` has special significance and represents `null` as in no additional pointer.
7378
+ */
7379
+ declare interface TStylingRange {
7380
+ __brand__: 'TStylingRange';
7381
+ }
7382
+
7383
+ /**
7384
+ * Store the static values for the styling binding.
7430
7385
  *
7431
- * ```typescript
7432
- * // <div [class.active]="c" // lView binding index = 20
7433
- * // [style.width]="x" // lView binding index = 21
7434
- * // [style.height]="y"> // lView binding index = 22
7435
- * // ...
7436
- * // </div>
7437
- * tNode.styles = [
7438
- * 1, // the total amount of sources present (only `1` b/c there are only template
7439
- * bindings)
7440
- * [null], // initial values array (an instance of `StylingMapArray`)
7441
- *
7442
- * 0, // config entry for the property (see `TStylingContextPropConfigFlags`)
7443
- * 0b010, // template guard mask for height
7444
- * 0, // host bindings guard mask for height
7445
- * 'height', // the property name
7446
- * 22, // the binding location for the "y" binding in the lView
7447
- * null, // the default value for height
7448
- *
7449
- * 0, // config entry for the property (see `TStylingContextPropConfigFlags`)
7450
- * 0b001, // template guard mask for width
7451
- * 0, // host bindings guard mask for width
7452
- * 'width', // the property name
7453
- * 21, // the binding location for the "x" binding in the lView
7454
- * null, // the default value for width
7455
- * ];
7386
+ * The `TStylingStatic` is just `KeyValueArray` where key `""` (stored at location 0) contains the
7387
+ * `TStylingKey` (stored at location 1). In other words this wraps the `TStylingKey` such that the
7388
+ * `""` contains the wrapped value.
7456
7389
  *
7457
- * tNode.classes = [
7458
- * 0, // the context config value (see `TStylingContextConfig`)
7459
- * 1, // the total amount of sources present (only `1` b/c there are only template
7460
- * bindings)
7461
- * [null], // initial values array (an instance of `StylingMapArray`)
7462
- *
7463
- * 0, // config entry for the property (see `TStylingContextPropConfigFlags`)
7464
- * 0b001, // template guard mask for width
7465
- * 0, // host bindings guard mask for width
7466
- * 'active', // the property name
7467
- * 20, // the binding location for the "c" binding in the lView
7468
- * null, // the default value for the `active` class
7469
- * ];
7470
- * ```
7390
+ * When instructions are resolving styling they may need to look forward or backwards in the linked
7391
+ * list to resolve the value. For this reason we have to make sure that he linked list also contains
7392
+ * the static values. However the list only has space for one item per styling instruction. For this
7393
+ * reason we store the static values here as part of the `TStylingKey`. This means that the
7394
+ * resolution function when looking for a value needs to first look at the binding value, and than
7395
+ * at `TStylingKey` (if it exists).
7471
7396
  *
7472
- * Entry value present in an entry (called a tuple) within the
7473
- * styling context is as follows:
7397
+ * Imagine we have:
7474
7398
  *
7475
- * ```typescript
7476
- * context = [
7477
- * //...
7478
- * configValue,
7479
- * templateGuardMask,
7480
- * hostBindingsGuardMask,
7481
- * propName,
7482
- * ...bindingIndices...,
7483
- * defaultValue
7484
- * //...
7485
- * ];
7486
7399
  * ```
7400
+ * <div class="TEMPLATE" my-dir>
7487
7401
  *
7488
- * Below is a breakdown of each value:
7489
- *
7490
- * - **configValue**:
7491
- * Property-specific configuration values. The only config setting
7492
- * that is implemented right now is whether or not to sanitize the
7493
- * value.
7494
- *
7495
- * - **templateGuardMask**:
7496
- * A numeric value where each bit represents a binding index
7497
- * location. Each binding index location is assigned based on
7498
- * a local counter value that increments each time an instruction
7499
- * is called:
7500
- *
7501
- * ```
7502
- * <div [style.width]="x" // binding index = 21 (counter index = 0)
7503
- * [style.height]="y"> // binding index = 22 (counter index = 1)
7504
- * ```
7505
- *
7506
- * In the example code above, if the `width` value where to change
7507
- * then the first bit in the local bit mask value would be flipped
7508
- * (and the second bit for when `height`).
7509
- *
7510
- * If and when there are more than 32 binding sources in the context
7511
- * (more than 32 `[style/class]` bindings) then the bit masking will
7512
- * overflow and we are left with a situation where a `-1` value will
7513
- * represent the bit mask. Due to the way that JavaScript handles
7514
- * negative values, when the bit mask is `-1` then all bits within
7515
- * that value will be automatically flipped (this is a quick and
7516
- * efficient way to flip all bits on the mask when a special kind
7517
- * of caching scenario occurs or when there are more than 32 bindings).
7518
- *
7519
- * - **hostBindingsGuardMask**:
7520
- * Another instance of a guard mask that is specific to host bindings.
7521
- * This behaves exactly the same way as does the `templateGuardMask`,
7522
- * but will not contain any binding information processed in the template.
7523
- * The reason why there are two instances of guard masks (one for the
7524
- * template and another for host bindings) is because the template bindings
7525
- * are processed before host bindings and the state information is not
7526
- * carried over into the host bindings code. As soon as host bindings are
7527
- * processed for an element the counter and state-based bit mask values are
7528
- * set to `0`.
7529
- *
7530
- * ```
7531
- * <div [style.width]="x" // binding index = 21 (counter index = 0)
7532
- * [style.height]="y" // binding index = 22 (counter index = 1)
7533
- * dir-that-sets-width // binding index = 30 (counter index = 0)
7534
- * dir-that-sets-width> // binding index = 31 (counter index = 1)
7535
- * ```
7536
- *
7537
- * - **propName**:
7538
- * The CSS property name or class name (e.g `width` or `active`).
7539
- *
7540
- * - **bindingIndices...**:
7541
- * A series of numeric binding values that reflect where in the
7542
- * lView to find the style/class values associated with the property.
7543
- * Each value is in order in terms of priority (templates are first,
7544
- * then directives and then components). When the context is flushed
7545
- * and the style/class values are applied to the element (this happens
7546
- * inside of the `stylingApply` instruction) then the flushing code
7547
- * will keep checking each binding index against the associated lView
7548
- * to find the first style/class value that is non-null.
7549
- *
7550
- * - **defaultValue**:
7551
- * This is the default that will always be applied to the element if
7552
- * and when all other binding sources return a result that is null.
7553
- * Usually this value is `null` but it can also be a static value that
7554
- * is intercepted when the tNode is first constructured (e.g.
7555
- * `<div style="width:200px">` has a default value of `200px` for
7556
- * the `width` property).
7557
- *
7558
- * Each time a new binding is encountered it is registered into the
7559
- * context. The context then is continually updated until the first
7560
- * styling apply call has been called (which is automatically scheduled
7561
- * to be called once an element exits during change detection). Note that
7562
- * each entry in the context is stored in alphabetical order.
7563
- *
7564
- * Once styling has been flushed for the first time for an element the
7565
- * context will set as locked (this prevents bindings from being added
7566
- * to the context later on).
7567
- *
7568
- * # How Styles/Classes are Rendered
7569
- * Each time a styling instruction (e.g. `[class.name]`, `[style.prop]`,
7570
- * etc...) is executed, the associated `lView` for the view is updated
7571
- * at the current binding location. Also, when this happens, a local
7572
- * counter value is incremented. If the binding value has changed then
7573
- * a local `bitMask` variable is updated with the specific bit based
7574
- * on the counter value.
7575
- *
7576
- * Below is a lightweight example of what happens when a single style
7577
- * property is updated (i.e. `<div [style.prop]="val">`):
7578
- *
7579
- * ```typescript
7580
- * function updateStyleProp(prop: string, value: string) {
7581
- * const lView = getLView();
7582
- * const bindingIndex = BINDING_INDEX++;
7583
- *
7584
- * // update the local counter value
7585
- * const indexForStyle = stylingState.stylesCount++;
7586
- * if (lView[bindingIndex] !== value) {
7587
- * lView[bindingIndex] = value;
7588
- *
7589
- * // tell the local state that we have updated a style value
7590
- * // by updating the bit mask
7591
- * stylingState.bitMaskForStyles |= 1 << indexForStyle;
7402
+ * @Directive({
7403
+ * host: {
7404
+ * class: 'DIR',
7405
+ * '[class.dynamic]': 'exp' // ɵɵclassProp('dynamic', ctx.exp);
7592
7406
  * }
7593
- * }
7407
+ * })
7594
7408
  * ```
7595
7409
  *
7596
- * Once all the bindings have updated a `bitMask` value will be populated.
7597
- * This `bitMask` value is used in the apply algorithm (which is called
7598
- * context resolution).
7599
- *
7600
- * ## The Apply Algorithm (Context Resolution)
7601
- * As explained above, each time a binding updates its value, the resulting
7602
- * value is stored in the `lView` array. These styling values have yet to
7603
- * be flushed to the element.
7410
+ * In the above case the linked list will contain one item:
7604
7411
  *
7605
- * Once all the styling instructions have been evaluated, then the styling
7606
- * context(s) are flushed to the element. When this happens, the context will
7607
- * be iterated over (property by property) and each binding source will be
7608
- * examined and the first non-null value will be applied to the element.
7609
- *
7610
- * Let's say that we the following template code:
7611
- *
7612
- * ```html
7613
- * <div [style.width]="w1" dir-that-set-width="w2"></div>
7614
7412
  * ```
7413
+ * // assume binding location: 10 for `ɵɵclassProp('dynamic', ctx.exp);`
7414
+ * tData[10] = <TStylingStatic>[
7415
+ * '': 'dynamic', // This is the wrapped value of `TStylingKey`
7416
+ * 'DIR': true, // This is the default static value of directive binding.
7417
+ * ];
7418
+ * tData[10 + 1] = 0; // We don't have prev/next.
7615
7419
  *
7616
- * There are two styling bindings in the code above and they both write
7617
- * to the `width` property. When styling is flushed on the element, the
7618
- * algorithm will try and figure out which one of these values to write
7619
- * to the element.
7620
- *
7621
- * In order to figure out which value to apply, the following
7622
- * binding prioritization is adhered to:
7623
- *
7624
- * 1. First template-level styling bindings are applied (if present).
7625
- * This includes things like `[style.width]` and `[class.active]`.
7626
- *
7627
- * 2. Second are styling-level host bindings present in directives.
7628
- * (if there are sub/super directives present then the sub directives
7629
- * are applied first).
7630
- *
7631
- * 3. Third are styling-level host bindings present in components.
7632
- * (if there are sub/super components present then the sub directives
7633
- * are applied first).
7634
- *
7635
- * This means that in the code above the styling binding present in the
7636
- * template is applied first and, only if its falsy, then the directive
7637
- * styling binding for width will be applied.
7638
- *
7639
- * ### What about map-based styling bindings?
7640
- * Map-based styling bindings are activated when there are one or more
7641
- * `[style]` and/or `[class]` bindings present on an element. When this
7642
- * code is activated, the apply algorithm will iterate over each map
7643
- * entry and apply each styling value to the element with the same
7644
- * prioritization rules as above.
7645
- *
7646
- * For the algorithm to apply styling values efficiently, the
7647
- * styling map entries must be applied in sync (property by property)
7648
- * with prop-based bindings. (The map-based algorithm is described
7649
- * more inside of the `render3/styling/map_based_bindings.ts` file.)
7650
- *
7651
- * ## Sanitization
7652
- * Sanitization is used to prevent invalid style values from being applied to
7653
- * the element.
7654
- *
7655
- * It is enabled in two cases:
7656
- *
7657
- * 1. The `styleSanitizer(sanitizerFn)` instruction was called (just before any other
7658
- * styling instructions are run).
7659
- *
7660
- * 2. The component/directive `LView` instance has a sanitizer object attached to it
7661
- * (this happens when `renderComponent` is executed with a `sanitizer` value or
7662
- * if the ngModule contains a sanitizer provider attached to it).
7663
- *
7664
- * If and when sanitization is active then all property/value entries will be evaluated
7665
- * through the active sanitizer before they are applied to the element (or the styling
7666
- * debug handler).
7667
- *
7668
- * If a `Sanitizer` object is used (via the `LView[SANITIZER]` value) then that object
7669
- * will be used for every property.
7670
- *
7671
- * If a `StyleSanitizerFn` function is used (via the `styleSanitizer`) then it will be
7672
- * called in two ways:
7420
+ * lView[10] = undefined; // assume `ctx.exp` is `undefined`
7421
+ * lView[10 + 1] = undefined; // Just normalized `lView[10]`
7422
+ * ```
7673
7423
  *
7674
- * 1. property validation mode: this will be called early to mark whether a property
7675
- * should be sanitized or not at during the flushing stage.
7424
+ * So when the function is resolving styling value, it first needs to look into the linked list
7425
+ * (there is none) and than into the static `TStylingStatic` too see if there is a default value for
7426
+ * `dynamic` (there is not). Therefore it is safe to remove it.
7676
7427
  *
7677
- * 2. value sanitization mode: this will be called during the flushing stage and will
7678
- * run the sanitizer function against the value before applying it to the element.
7428
+ * If setting `true` case:
7429
+ * ```
7430
+ * lView[10] = true; // assume `ctx.exp` is `true`
7431
+ * lView[10 + 1] = true; // Just normalized `lView[10]`
7432
+ * ```
7433
+ * So when the function is resolving styling value, it first needs to look into the linked list
7434
+ * (there is none) and than into `TNode.residualClass` (TNode.residualStyle) which contains
7435
+ * ```
7436
+ * tNode.residualClass = [
7437
+ * 'TEMPLATE': true,
7438
+ * ];
7439
+ * ```
7679
7440
  *
7680
- * If sanitization returns an empty value then that empty value will be applied
7681
- * to the element.
7682
- */
7683
- declare interface TStylingContext extends Array<number | string | number | boolean | null | StylingMapArray | {}> {
7684
- /** The total amount of sources present in the context */
7685
- [TStylingContextIndex.TotalSourcesPosition]: number;
7686
- /** Initial value position for static styles */
7687
- [TStylingContextIndex.InitialStylingValuePosition]: StylingMapArray;
7688
- }
7689
-
7690
- /**
7691
- * An index of position and offset values used to navigate the `TStylingContext`.
7441
+ * This means that it is safe to add class.
7692
7442
  */
7693
- declare const enum TStylingContextIndex {
7694
- TotalSourcesPosition = 0,
7695
- InitialStylingValuePosition = 1,
7696
- ValuesStartPosition = 2,
7697
- ConfigOffset = 0,
7698
- TemplateBitGuardOffset = 1,
7699
- HostBindingsBitGuardOffset = 2,
7700
- PropOffset = 3,
7701
- BindingsStartOffset = 4
7443
+ declare interface TStylingStatic extends KeyValueArray<any> {
7702
7444
  }
7703
7445
 
7704
7446
  /** Static data for a text node */
@@ -7711,7 +7453,7 @@ declare interface TTextNode extends TNode {
7711
7453
  * embedded view (which means their parent is in a different view and must be
7712
7454
  * retrieved using LView.node).
7713
7455
  */
7714
- parent: ɵangular_packages_core_core_bd | TElementContainerNode | null;
7456
+ parent: ɵangular_packages_core_core_be | TElementContainerNode | null;
7715
7457
  tViews: null;
7716
7458
  projection: null;
7717
7459
  }
@@ -7741,7 +7483,7 @@ declare interface TView {
7741
7483
  * This is a blueprint used to generate LView instances for this TView. Copying this
7742
7484
  * blueprint is faster than creating a new LView from scratch.
7743
7485
  */
7744
- blueprint: ɵangular_packages_core_core_bn;
7486
+ blueprint: ɵangular_packages_core_core_bo;
7745
7487
  /**
7746
7488
  * The template function used to refresh the view of dynamically created views
7747
7489
  * and components. Will be null for inline views.
@@ -7766,10 +7508,20 @@ declare interface TView {
7766
7508
  * different host TNodes, depending on where the component is being used. These host
7767
7509
  * TNodes cannot be shared (due to different indices, etc).
7768
7510
  */
7769
- node: TViewNode | ɵangular_packages_core_core_bd | null;
7511
+ node: TViewNode | ɵangular_packages_core_core_be | null;
7770
7512
  /** Whether or not this template has been processed in creation mode. */
7771
7513
  firstCreatePass: boolean;
7772
- /** Whether or not the first update for this template has been processed. */
7514
+ /**
7515
+ * Whether or not this template has been processed in update mode (e.g. change detected)
7516
+ *
7517
+ * `firstUpdatePass` is used by styling to set up `TData` to contain metadata about the styling
7518
+ * instructions. (Mainly to build up a linked list of styling priority order.)
7519
+ *
7520
+ * Typically this function gets cleared after first execution. If exception is thrown then this
7521
+ * flag can remain turned un until there is first successful (no exception) pass. This means that
7522
+ * individual styling instructions keep track of if they have already been added to the linked
7523
+ * list to prevent double adding.
7524
+ */
7773
7525
  firstUpdatePass: boolean;
7774
7526
  /** Static data equivalent of LView.data[]. Contains TNodes, PipeDefInternal or TI18n. */
7775
7527
  data: TData;
@@ -7952,7 +7704,7 @@ declare interface TView {
7952
7704
  declare interface TViewNode extends TNode {
7953
7705
  /** If -1, it's a dynamically created view. Otherwise, it is the view block ID. */
7954
7706
  index: number;
7955
- child: ɵangular_packages_core_core_bd | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;
7707
+ child: ɵangular_packages_core_core_be | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;
7956
7708
  parent: TContainerNode | null;
7957
7709
  tViews: null;
7958
7710
  projection: null;
@@ -8479,14 +8231,14 @@ declare class ViewRef_2<T> implements EmbeddedViewRef<T>, InternalViewRef, viewE
8479
8231
  *
8480
8232
  * @internal
8481
8233
  */
8482
- _lView: ɵangular_packages_core_core_bn,
8234
+ _lView: ɵangular_packages_core_core_bo,
8483
8235
  /**
8484
8236
  * This represents the `LView` associated with the point where `ChangeDetectorRef` was
8485
8237
  * requested.
8486
8238
  *
8487
8239
  * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view.
8488
8240
  */
8489
- _cdRefInjectingView?: ɵangular_packages_core_core_bn | undefined);
8241
+ _cdRefInjectingView?: ɵangular_packages_core_core_bo | undefined);
8490
8242
  get context(): T;
8491
8243
  get destroyed(): boolean;
8492
8244
  destroy(): void;
@@ -8770,23 +8522,28 @@ export declare function ɵangular_packages_core_core_b<T>(token: Type<T> | Injec
8770
8522
 
8771
8523
  export declare function ɵangular_packages_core_core_b<T>(token: Type<T> | InjectionToken<T>, flags?: InjectFlags): T | null;
8772
8524
 
8773
- export declare function ɵangular_packages_core_core_ba(): TNode;
8525
+ /**
8526
+ * Return the current `LView`.
8527
+ */
8528
+ export declare function ɵangular_packages_core_core_ba(): ɵangular_packages_core_core_bo;
8529
+
8530
+ export declare function ɵangular_packages_core_core_bb(): TNode;
8774
8531
 
8775
- export declare function ɵangular_packages_core_core_bb(): number;
8532
+ export declare function ɵangular_packages_core_core_bc(): number;
8776
8533
 
8777
- export declare function ɵangular_packages_core_core_bc<T = any>(level: number): T;
8534
+ export declare function ɵangular_packages_core_core_bd<T = any>(level: number): T;
8778
8535
 
8779
8536
  /** Static data for an element */
8780
- export declare interface ɵangular_packages_core_core_bd extends TNode {
8537
+ export declare interface ɵangular_packages_core_core_be extends TNode {
8781
8538
  /** Index in the data[] array */
8782
8539
  index: number;
8783
- child: ɵangular_packages_core_core_bd | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;
8540
+ child: ɵangular_packages_core_core_be | TTextNode | TElementContainerNode | TContainerNode | TProjectionNode | null;
8784
8541
  /**
8785
8542
  * Element nodes will have parents unless they are the first node of a component or
8786
8543
  * embedded view (which means their parent is in a different view and must be
8787
8544
  * retrieved using viewData[HOST_NODE]).
8788
8545
  */
8789
- parent: ɵangular_packages_core_core_bd | TElementContainerNode | null;
8546
+ parent: ɵangular_packages_core_core_be | TElementContainerNode | null;
8790
8547
  tViews: null;
8791
8548
  /**
8792
8549
  * If this is a component TNode with projection, this will be an array of projected
@@ -8808,7 +8565,7 @@ export declare interface ɵangular_packages_core_core_bd extends TNode {
8808
8565
  * @param thisArg Optional calling context of pureFn
8809
8566
  * @returns Updated or cached value
8810
8567
  */
8811
- export declare function ɵangular_packages_core_core_be(lView: ɵangular_packages_core_core_bn, bindingRoot: number, slotOffset: number, pureFn: (v: any) => any, exp: any, thisArg?: any): any;
8568
+ export declare function ɵangular_packages_core_core_bf(lView: ɵangular_packages_core_core_bo, bindingRoot: number, slotOffset: number, pureFn: (v: any) => any, exp: any, thisArg?: any): any;
8812
8569
 
8813
8570
  /**
8814
8571
  * If the value of any provided exp has changed, calls the pure function to return
@@ -8823,7 +8580,7 @@ export declare function ɵangular_packages_core_core_be(lView: ɵangular_package
8823
8580
  * @param thisArg Optional calling context of pureFn
8824
8581
  * @returns Updated or cached value
8825
8582
  */
8826
- export declare function ɵangular_packages_core_core_bf(lView: ɵangular_packages_core_core_bn, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any, thisArg?: any): any;
8583
+ export declare function ɵangular_packages_core_core_bg(lView: ɵangular_packages_core_core_bo, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any, thisArg?: any): any;
8827
8584
 
8828
8585
  /**
8829
8586
  * If the value of any provided exp has changed, calls the pure function to return
@@ -8839,7 +8596,7 @@ export declare function ɵangular_packages_core_core_bf(lView: ɵangular_package
8839
8596
  * @param thisArg Optional calling context of pureFn
8840
8597
  * @returns Updated or cached value
8841
8598
  */
8842
- export declare function ɵangular_packages_core_core_bg(lView: ɵangular_packages_core_core_bn, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any, thisArg?: any): any;
8599
+ export declare function ɵangular_packages_core_core_bh(lView: ɵangular_packages_core_core_bo, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any, thisArg?: any): any;
8843
8600
 
8844
8601
  /**
8845
8602
  * If the value of any provided exp has changed, calls the pure function to return
@@ -8857,7 +8614,7 @@ export declare function ɵangular_packages_core_core_bg(lView: ɵangular_package
8857
8614
  * @returns Updated or cached value
8858
8615
  *
8859
8616
  */
8860
- export declare function ɵangular_packages_core_core_bh(lView: ɵangular_packages_core_core_bn, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, thisArg?: any): any;
8617
+ export declare function ɵangular_packages_core_core_bi(lView: ɵangular_packages_core_core_bo, bindingRoot: number, slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any, exp3: any, exp4: any, thisArg?: any): any;
8861
8618
 
8862
8619
  /**
8863
8620
  * pureFunction instruction that can support any number of bindings.
@@ -8874,7 +8631,7 @@ export declare function ɵangular_packages_core_core_bh(lView: ɵangular_package
8874
8631
  * @param thisArg Optional calling context of pureFn
8875
8632
  * @returns Updated or cached value
8876
8633
  */
8877
- export declare function ɵangular_packages_core_core_bi(lView: ɵangular_packages_core_core_bn, bindingRoot: number, slotOffset: number, pureFn: (...v: any[]) => any, exps: any[], thisArg?: any): any;
8634
+ export declare function ɵangular_packages_core_core_bj(lView: ɵangular_packages_core_core_bo, bindingRoot: number, slotOffset: number, pureFn: (...v: any[]) => any, exps: any[], thisArg?: any): any;
8878
8635
 
8879
8636
  /**
8880
8637
  * Detects which sanitizer to use for URL property, based on tag name and prop name.
@@ -8883,14 +8640,14 @@ export declare function ɵangular_packages_core_core_bi(lView: ɵangular_package
8883
8640
  * `packages/compiler/src/schema/dom_security_schema.ts`.
8884
8641
  * If tag and prop names don't match Resource URL schema, use URL sanitizer.
8885
8642
  */
8886
- export declare function ɵangular_packages_core_core_bj(tag: string, prop: string): typeof ɵɵsanitizeResourceUrl;
8643
+ export declare function ɵangular_packages_core_core_bk(tag: string, prop: string): typeof ɵɵsanitizeResourceUrl;
8887
8644
 
8888
- export declare function ɵangular_packages_core_core_bk(name: string, props?: (...args: any[]) => any, parentClass?: any): any;
8645
+ export declare function ɵangular_packages_core_core_bl(name: string, props?: (...args: any[]) => any, parentClass?: any): any;
8889
8646
 
8890
- export declare function ɵangular_packages_core_core_bl(name: string, props?: (...args: any[]) => any, parentClass?: any, additionalProcessing?: (target: any, name: string, ...args: any[]) => void): any;
8647
+ export declare function ɵangular_packages_core_core_bm(name: string, props?: (...args: any[]) => any, parentClass?: any, additionalProcessing?: (target: any, name: string, ...args: any[]) => void): any;
8891
8648
 
8892
8649
 
8893
- export declare function ɵangular_packages_core_core_bm<T>(objWithPropertyToExtract: T): string;
8650
+ export declare function ɵangular_packages_core_core_bn<T>(objWithPropertyToExtract: T): string;
8894
8651
 
8895
8652
  /**
8896
8653
  * `LView` stores all of the information needed to process the instructions as
@@ -8902,7 +8659,7 @@ export declare function ɵangular_packages_core_core_bm<T>(objWithPropertyToExtr
8902
8659
  * Keeping separate state for each view facilities view insertion / deletion, so we
8903
8660
  * don't have to edit the data array based on which views are present.
8904
8661
  */
8905
- export declare interface ɵangular_packages_core_core_bn extends Array<any> {
8662
+ export declare interface ɵangular_packages_core_core_bo extends Array<any> {
8906
8663
  /**
8907
8664
  * The host node for this LView instance, if this is a component view.
8908
8665
  * If this is an embedded view, HOST will be null.
@@ -8925,7 +8682,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
8925
8682
  *
8926
8683
  * `LContainer` - The current view is part of a container, and is an embedded view.
8927
8684
  */
8928
- [PARENT]: ɵangular_packages_core_core_bn | LContainer | null;
8685
+ [PARENT]: ɵangular_packages_core_core_bo | LContainer | null;
8929
8686
  /**
8930
8687
  *
8931
8688
  * The next sibling LView or LContainer.
@@ -8935,7 +8692,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
8935
8692
  * views in the same container. We need a way to link component views and views
8936
8693
  * across containers as well.
8937
8694
  */
8938
- [NEXT]: ɵangular_packages_core_core_bn | LContainer | null;
8695
+ [NEXT]: ɵangular_packages_core_core_bo | LContainer | null;
8939
8696
  /** Queries active for this view - nodes from a view are reported to those queries. */
8940
8697
  [QUERIES]: LQueries | null;
8941
8698
  /**
@@ -8948,7 +8705,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
8948
8705
  *
8949
8706
  * If null, this is the root view of an application (root component is in this view).
8950
8707
  */
8951
- [T_HOST]: TViewNode | ɵangular_packages_core_core_bd | null;
8708
+ [T_HOST]: TViewNode | ɵangular_packages_core_core_be | null;
8952
8709
  /**
8953
8710
  * When a view is destroyed, listeners need to be released and outputs need to be
8954
8711
  * unsubscribed. This context array stores both listener functions wrapped with
@@ -8981,14 +8738,14 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
8981
8738
  * Necessary to store this so views can traverse through their nested views
8982
8739
  * to remove listeners and call onDestroy callbacks.
8983
8740
  */
8984
- [CHILD_HEAD]: ɵangular_packages_core_core_bn | LContainer | null;
8741
+ [CHILD_HEAD]: ɵangular_packages_core_core_bo | LContainer | null;
8985
8742
  /**
8986
8743
  * The last LView or LContainer beneath this LView in the hierarchy.
8987
8744
  *
8988
8745
  * The tail allows us to quickly add a new state to the end of the view list
8989
8746
  * without having to propagate starting from the first child.
8990
8747
  */
8991
- [CHILD_TAIL]: ɵangular_packages_core_core_bn | LContainer | null;
8748
+ [CHILD_TAIL]: ɵangular_packages_core_core_bo | LContainer | null;
8992
8749
  /**
8993
8750
  * View where this view's template was declared.
8994
8751
  *
@@ -9013,7 +8770,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
9013
8770
  * template function during change detection, we need the declaration view to get inherited
9014
8771
  * context.
9015
8772
  */
9016
- [DECLARATION_VIEW]: ɵangular_packages_core_core_bn | null;
8773
+ [DECLARATION_VIEW]: ɵangular_packages_core_core_bo | null;
9017
8774
  /**
9018
8775
  * Points to the declaration component view, used to track transplanted `LView`s.
9019
8776
  *
@@ -9083,7 +8840,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
9083
8840
  * - `LView[DECLARATION_LCONTAINER]` similar problem for queries
9084
8841
  * - `LContainer[MOVED_VIEWS]` similar problem for queries
9085
8842
  */
9086
- [DECLARATION_COMPONENT_VIEW]: ɵangular_packages_core_core_bn;
8843
+ [DECLARATION_COMPONENT_VIEW]: ɵangular_packages_core_core_bo;
9087
8844
  /**
9088
8845
  * A declaration point of embedded views (ones instantiated based on the content of a
9089
8846
  * <ng-template>), null for other types of views.
@@ -9109,7 +8866,7 @@ export declare interface ɵangular_packages_core_core_bn extends Array<any> {
9109
8866
  * to something which is retained otherwise the call to `noSideEffects` will be removed by closure
9110
8867
  * compiler.
9111
8868
  */
9112
- export declare function ɵangular_packages_core_core_bo(fn: () => void): string;
8869
+ export declare function ɵangular_packages_core_core_bp(fn: () => void): string;
9113
8870
 
9114
8871
  /**
9115
8872
  * Returns the `RootContext` instance that is associated with
@@ -9118,7 +8875,7 @@ export declare function ɵangular_packages_core_core_bo(fn: () => void): string;
9118
8875
  *
9119
8876
  * @param viewOrComponent the `LView` or component to get the root context for.
9120
8877
  */
9121
- export declare function ɵangular_packages_core_core_bp(viewOrComponent: ɵangular_packages_core_core_bn | {}): RootContext;
8878
+ export declare function ɵangular_packages_core_core_bq(viewOrComponent: ɵangular_packages_core_core_bo | {}): RootContext;
9122
8879
 
9123
8880
  export declare class ɵangular_packages_core_core_c implements Injector {
9124
8881
  get(token: any, notFoundValue?: any): any;
@@ -9176,7 +8933,7 @@ export declare function ɵangular_packages_core_core_g(): string;
9176
8933
  * @param view The view to which the node belongs
9177
8934
  * @returns The ElementRef instance to use
9178
8935
  */
9179
- export declare function ɵangular_packages_core_core_h(ElementRefToken: typeof ElementRef, tNode: TNode, view: ɵangular_packages_core_core_bn): ElementRef;
8936
+ export declare function ɵangular_packages_core_core_h(ElementRefToken: typeof ElementRef, tNode: TNode, view: ɵangular_packages_core_core_bo): ElementRef;
9180
8937
 
9181
8938
  /**
9182
8939
  * Creates a TemplateRef and stores it on the injector.
@@ -9187,7 +8944,7 @@ export declare function ɵangular_packages_core_core_h(ElementRefToken: typeof E
9187
8944
  * @param hostView The view to which the node belongs
9188
8945
  * @returns The TemplateRef instance or null if we can't create a TemplateRef on a given node type
9189
8946
  */
9190
- export declare function ɵangular_packages_core_core_i<T>(TemplateRefToken: typeof TemplateRef, ElementRefToken: typeof ElementRef, hostTNode: TNode, hostView: ɵangular_packages_core_core_bn): TemplateRef<T> | null;
8947
+ export declare function ɵangular_packages_core_core_i<T>(TemplateRefToken: typeof TemplateRef, ElementRefToken: typeof ElementRef, hostTNode: TNode, hostView: ɵangular_packages_core_core_bo): TemplateRef<T> | null;
9191
8948
 
9192
8949
  export declare function ɵangular_packages_core_core_j(id: string): NgModuleFactory<any>;
9193
8950
 
@@ -9196,7 +8953,7 @@ export declare class ɵangular_packages_core_core_k {
9196
8953
  readonly parent: DebugElement | null;
9197
8954
  readonly nativeNode: any;
9198
8955
  private readonly _debugContext;
9199
- constructor(nativeNode: any, parent: DebugNode | null, _debugContext: ɵangular_packages_core_core_v);
8956
+ constructor(nativeNode: any, parent: DebugNode | null, _debugContext: ɵangular_packages_core_core_w);
9200
8957
  get injector(): Injector;
9201
8958
  get componentInstance(): any;
9202
8959
  get context(): any;
@@ -9222,7 +8979,7 @@ export declare class ɵangular_packages_core_core_l extends ɵangular_packages_c
9222
8979
  };
9223
8980
  readonly childNodes: DebugNode[];
9224
8981
  readonly nativeElement: any;
9225
- constructor(nativeNode: any, parent: any, _debugContext: ɵangular_packages_core_core_v);
8982
+ constructor(nativeNode: any, parent: any, _debugContext: ɵangular_packages_core_core_w);
9226
8983
  addChild(child: DebugNode): void;
9227
8984
  removeChild(child: DebugNode): void;
9228
8985
  insertChildrenAfter(child: DebugNode, newChildren: DebugNode[]): void;
@@ -9234,29 +8991,31 @@ export declare class ɵangular_packages_core_core_l extends ɵangular_packages_c
9234
8991
  triggerEventHandler(eventName: string, eventObj: any): void;
9235
8992
  }
9236
8993
 
9237
- export declare class ɵangular_packages_core_core_m implements IterableDifferFactory {
8994
+ export declare function ɵangular_packages_core_core_m(nativeNode: any): DebugNode | null;
8995
+
8996
+ export declare class ɵangular_packages_core_core_n implements IterableDifferFactory {
9238
8997
  constructor();
9239
8998
  supports(obj: Object | null | undefined): boolean;
9240
8999
  create<V>(trackByFn?: TrackByFunction<V>): DefaultIterableDiffer<V>;
9241
9000
  }
9242
9001
 
9243
- export declare class ɵangular_packages_core_core_n<K, V> implements KeyValueDifferFactory {
9002
+ export declare class ɵangular_packages_core_core_o<K, V> implements KeyValueDifferFactory {
9244
9003
  constructor();
9245
9004
  supports(obj: any): boolean;
9246
9005
  create<K, V>(): KeyValueDiffer<K, V>;
9247
9006
  }
9248
9007
 
9249
- export declare function ɵangular_packages_core_core_o(): IterableDiffers;
9008
+ export declare function ɵangular_packages_core_core_p(): IterableDiffers;
9250
9009
 
9251
- export declare function ɵangular_packages_core_core_p(): KeyValueDiffers;
9010
+ export declare function ɵangular_packages_core_core_q(): KeyValueDiffers;
9252
9011
 
9253
- export declare function ɵangular_packages_core_core_q(locale?: string): string;
9012
+ export declare function ɵangular_packages_core_core_r(locale?: string): string;
9254
9013
 
9255
9014
  /**
9256
9015
  * A built-in [dependency injection token](guide/glossary#di-token)
9257
9016
  * that is used to configure the root injector for bootstrapping.
9258
9017
  */
9259
- export declare const ɵangular_packages_core_core_r: StaticProvider[];
9018
+ export declare const ɵangular_packages_core_core_s: StaticProvider[];
9260
9019
 
9261
9020
  /**
9262
9021
  * Schedule work at next available slot.
@@ -9267,17 +9026,17 @@ export declare const ɵangular_packages_core_core_r: StaticProvider[];
9267
9026
  *
9268
9027
  * @param ngZone NgZone to use for scheduling.
9269
9028
  */
9270
- export declare function ɵangular_packages_core_core_s(ngZone: NgZone): (fn: () => void) => void;
9029
+ export declare function ɵangular_packages_core_core_t(ngZone: NgZone): (fn: () => void) => void;
9271
9030
 
9272
9031
  /**
9273
9032
  * USD currency code that the application uses by default for CurrencyPipe when no
9274
9033
  * DEFAULT_CURRENCY_CODE is provided.
9275
9034
  */
9276
- export declare const ɵangular_packages_core_core_t = "USD";
9035
+ export declare const ɵangular_packages_core_core_u = "USD";
9277
9036
 
9278
- export declare function ɵangular_packages_core_core_u(checkIndex: number, flags: ɵNodeFlags, matchedQueriesDsl: [string | number, ɵQueryValueType][] | null, childCount: number, token: any, value: any, deps: ([ɵDepFlags, any] | any)[], bindings?: BindingDef[], outputs?: OutputDef[]): NodeDef;
9037
+ export declare function ɵangular_packages_core_core_v(checkIndex: number, flags: ɵNodeFlags, matchedQueriesDsl: [string | number, ɵQueryValueType][] | null, childCount: number, token: any, value: any, deps: ([ɵDepFlags, any] | any)[], bindings?: BindingDef[], outputs?: OutputDef[]): NodeDef;
9279
9038
 
9280
- export declare abstract class ɵangular_packages_core_core_v {
9039
+ export declare abstract class ɵangular_packages_core_core_w {
9281
9040
  abstract get view(): ViewData;
9282
9041
  abstract get nodeIndex(): number | null;
9283
9042
  abstract get injector(): Injector;
@@ -9296,7 +9055,7 @@ export declare abstract class ɵangular_packages_core_core_v {
9296
9055
  * A change detection scheduler token for {@link RootContext}. This token is the default value used
9297
9056
  * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
9298
9057
  */
9299
- export declare const ɵangular_packages_core_core_w: InjectionToken<(fn: () => void) => void>;
9058
+ export declare const ɵangular_packages_core_core_x: InjectionToken<(fn: () => void) => void>;
9300
9059
 
9301
9060
  /**
9302
9061
  * Inject static attribute value into directive constructor.
@@ -9329,17 +9088,9 @@ export declare const ɵangular_packages_core_core_w: InjectionToken<(fn: () => v
9329
9088
  *
9330
9089
  * @publicApi
9331
9090
  */
9332
- export declare function ɵangular_packages_core_core_x(tNode: TNode, attrNameToInject: string): string | null;
9333
-
9334
- export declare const ɵangular_packages_core_core_y: InstructionState;
9091
+ export declare function ɵangular_packages_core_core_y(tNode: TNode, attrNameToInject: string): string | null;
9335
9092
 
9336
- /**
9337
- * Return the current LView.
9338
- *
9339
- * The return value can be `null` if the method is called outside of template. This can happen if
9340
- * directive is instantiated by module injector (rather than by node injector.)
9341
- */
9342
- export declare function ɵangular_packages_core_core_z(): ɵangular_packages_core_core_bn;
9093
+ export declare const ɵangular_packages_core_core_z: InstructionState;
9343
9094
 
9344
9095
  /**
9345
9096
  * Providers that will generate a random APP_ID_TOKEN.
@@ -9361,6 +9112,14 @@ export declare const enum ɵArgumentType {
9361
9112
  * items are not regular attributes and the processing should be adapted accordingly.
9362
9113
  */
9363
9114
  export declare const enum ɵAttributeMarker {
9115
+ /**
9116
+ * An implicit marker which indicates that the value in the array are of `attributeKey`,
9117
+ * `attributeValue` format.
9118
+ *
9119
+ * NOTE: This is implicit as it is the type when no marker is present in array. We indicate that
9120
+ * it should not be present at runtime by the negative number.
9121
+ */
9122
+ ImplicitAttributes = -1,
9364
9123
  /**
9365
9124
  * Marker indicates that the following 3 values in the attributes array are:
9366
9125
  * namespaceUri, attributeName, attributeValue
@@ -9827,17 +9586,11 @@ export declare const enum ɵDepFlags {
9827
9586
  /**
9828
9587
  * Synchronously perform change detection on a component (and possibly its sub-components).
9829
9588
  *
9830
- * This function triggers change detection in a synchronous way on a component. There should
9831
- * be very little reason to call this function directly since a preferred way to do change
9832
- * detection is to {@link markDirty} the component and wait for the scheduler to call this method
9833
- * at some future point in time. This is because a single user action often results in many
9834
- * components being invalidated and calling change detection on each component synchronously
9835
- * would be inefficient. It is better to wait until all components are marked as dirty and
9836
- * then perform single change detection across all of the components
9589
+ * This function triggers change detection in a synchronous way on a component.
9837
9590
  *
9838
9591
  * @param component The component which the change detection should be performed on.
9839
9592
  */
9840
- export declare function ɵdetectChanges<T>(component: T): void;
9593
+ export declare function ɵdetectChanges(component: {}): void;
9841
9594
 
9842
9595
 
9843
9596
  export declare function ɵdevModeEqual(a: any, b: any): boolean;
@@ -9899,9 +9652,47 @@ export declare interface ɵDirectiveDef<T> {
9899
9652
  /**
9900
9653
  * Refreshes host bindings on the associated directive.
9901
9654
  */
9902
- hostBindings: HostBindingsFunction<T> | null;
9655
+ readonly hostBindings: HostBindingsFunction<T> | null;
9656
+ /**
9657
+ * The number of bindings in this directive `hostBindings` (including pure fn bindings).
9658
+ *
9659
+ * Used to calculate the length of the component's LView array, so we
9660
+ * can pre-fill the array and set the host binding start index.
9661
+ */
9662
+ readonly hostVars: number;
9663
+ /**
9664
+ * Assign static attribute values to a host element.
9665
+ *
9666
+ * This property will assign static attribute values as well as class and style
9667
+ * values to a host element. Since attribute values can consist of different types of values, the
9668
+ * `hostAttrs` array must include the values in the following format:
9669
+ *
9670
+ * attrs = [
9671
+ * // static attributes (like `title`, `name`, `id`...)
9672
+ * attr1, value1, attr2, value,
9673
+ *
9674
+ * // a single namespace value (like `x:id`)
9675
+ * NAMESPACE_MARKER, namespaceUri1, name1, value1,
9676
+ *
9677
+ * // another single namespace value (like `x:name`)
9678
+ * NAMESPACE_MARKER, namespaceUri2, name2, value2,
9679
+ *
9680
+ * // a series of CSS classes that will be applied to the element (no spaces)
9681
+ * CLASSES_MARKER, class1, class2, class3,
9682
+ *
9683
+ * // a series of CSS styles (property + value) that will be applied to the element
9684
+ * STYLES_MARKER, prop1, value1, prop2, value2
9685
+ * ]
9686
+ *
9687
+ * All non-class and non-style attributes must be defined at the start of the list
9688
+ * first before all class and style values are set. When there is a change in value
9689
+ * type (like when classes and styles are introduced) a marker must be used to separate
9690
+ * the entries. The marker values themselves are set via entries found in the
9691
+ * [AttributeMarker] enum.
9692
+ */
9693
+ readonly hostAttrs: TAttributes | null;
9903
9694
  /** Token representing the directive. Used by DI. */
9904
- type: Type<T>;
9695
+ readonly type: Type<T>;
9905
9696
  /** Function that resolves providers and publishes them into the DI system. */
9906
9697
  providersResolver: (<U extends T>(def: ɵDirectiveDef<U>, processProvidersFn?: ProcessProvidersFunction) => void) | null;
9907
9698
  /** The selectors that will be used to match nodes to this directive. */
@@ -9914,15 +9705,15 @@ export declare interface ɵDirectiveDef<T> {
9914
9705
  * Factory function used to create a new directive instance. Will be null initially.
9915
9706
  * Populated when the factory is first requested by directive instantiation logic.
9916
9707
  */
9917
- factory: FactoryFn<T> | null;
9918
- onChanges: (() => void) | null;
9919
- onInit: (() => void) | null;
9920
- doCheck: (() => void) | null;
9921
- afterContentInit: (() => void) | null;
9922
- afterContentChecked: (() => void) | null;
9923
- afterViewInit: (() => void) | null;
9924
- afterViewChecked: (() => void) | null;
9925
- onDestroy: (() => void) | null;
9708
+ readonly factory: FactoryFn<T> | null;
9709
+ readonly onChanges: (() => void) | null;
9710
+ readonly onInit: (() => void) | null;
9711
+ readonly doCheck: (() => void) | null;
9712
+ readonly afterContentInit: (() => void) | null;
9713
+ readonly afterContentChecked: (() => void) | null;
9714
+ readonly afterViewInit: (() => void) | null;
9715
+ readonly afterViewChecked: (() => void) | null;
9716
+ readonly onDestroy: (() => void) | null;
9926
9717
  /**
9927
9718
  * The features applied to this directive
9928
9719
  */
@@ -9980,26 +9771,45 @@ export declare function ɵgetDebugNode__POST_R3__(nativeNode: Node): DebugNode__
9980
9771
 
9981
9772
  export declare function ɵgetDebugNode__POST_R3__(nativeNode: null): null;
9982
9773
 
9774
+ export declare const ɵgetDebugNodeR2: (nativeNode: any) => DebugNode | null;
9775
+
9983
9776
  /**
9984
- * Retrieves directives associated with a given DOM host element.
9777
+ * Retrieves directive instances associated with a given DOM element. Does not include
9778
+ * component instances.
9779
+ *
9780
+ * @usageNotes
9781
+ * Given the following DOM structure:
9782
+ * ```
9783
+ * <my-app>
9784
+ * <button my-button></button>
9785
+ * <my-comp></my-comp>
9786
+ * </my-app>
9787
+ * ```
9788
+ * Calling `getDirectives` on `<button>` will return an array with an instance of the `MyButton`
9789
+ * directive that is associated with the DOM element.
9790
+ *
9791
+ * Calling `getDirectives` on `<my-comp>` will return an empty array.
9985
9792
  *
9986
- * @param target A DOM element, component or directive instance.
9793
+ * @param element DOM element for which to get the directives.
9794
+ * @returns Array of directives associated with the element.
9987
9795
  *
9988
9796
  * @publicApi
9797
+ * @globalApi ng
9989
9798
  */
9990
- export declare function ɵgetDirectives(target: {}): Array<{}>;
9799
+ export declare function ɵgetDirectives(element: Element): {}[];
9991
9800
 
9992
9801
  /**
9993
- * Retrieve the host element of the component.
9802
+ * Retrieves the host element of a component or directive instance.
9803
+ * The host element is the DOM element that matched the selector of the directive.
9994
9804
  *
9995
- * Use this function to retrieve the host element of the component. The host
9996
- * element is the element which the component is associated with.
9997
- *
9998
- * @param directive Component or Directive for which the host element should be retrieved.
9805
+ * @param componentOrDirective Component or directive instance for which the host
9806
+ * element should be retrieved.
9807
+ * @returns Host element of the target.
9999
9808
  *
10000
9809
  * @publicApi
9810
+ * @globalApi ng
10001
9811
  */
10002
- export declare function ɵgetHostElement<T>(directive: T): Element;
9812
+ export declare function ɵgetHostElement(componentOrDirective: {}): Element;
10003
9813
 
10004
9814
  /**
10005
9815
  * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading
@@ -10030,6 +9840,17 @@ export declare function ɵgetInjectableDef<T>(type: any): ɵɵInjectableDef<T> |
10030
9840
  */
10031
9841
  export declare function ɵgetLContext(target: any): ɵLContext | null;
10032
9842
 
9843
+ /**
9844
+ * Retrieves the default currency code for the given locale.
9845
+ *
9846
+ * The default is defined as the first currency which is still in use.
9847
+ *
9848
+ * @param locale The code of the locale whose currency code we want.
9849
+ * @returns The code of the default currency for the given locale.
9850
+ *
9851
+ */
9852
+ export declare function ɵgetLocaleCurrencyCode(locale: string): string | null;
9853
+
10033
9854
  /**
10034
9855
  * Retrieves the plural function used by ICU expressions to determine the plural case to use
10035
9856
  * for a given locale.
@@ -10103,7 +9924,7 @@ export declare interface ɵLContext {
10103
9924
  /**
10104
9925
  * The component's parent view data.
10105
9926
  */
10106
- lView: ɵangular_packages_core_core_bn;
9927
+ lView: ɵangular_packages_core_core_bo;
10107
9928
  /**
10108
9929
  * The index instance of the node.
10109
9930
  */
@@ -10184,22 +10005,15 @@ export declare function ɵmakeDecorator<T>(name: string, props?: (...args: any[]
10184
10005
  };
10185
10006
 
10186
10007
  /**
10187
- * Mark the component as dirty (needing change detection).
10188
- *
10189
- * Marking a component dirty will schedule a change detection on this
10190
- * component at some point in the future. Marking an already dirty
10191
- * component as dirty is a noop. Only one outstanding change detection
10192
- * can be scheduled per component tree. (Two components bootstrapped with
10193
- * separate `renderComponent` will have separate schedulers)
10008
+ * Marks the component as dirty (needing change detection). Marking a component dirty will
10009
+ * schedule a change detection on it at some point in the future.
10194
10010
  *
10195
- * When the root component is bootstrapped with `renderComponent`, a scheduler
10196
- * can be provided.
10011
+ * Marking an already dirty component as dirty won't do anything. Only one outstanding change
10012
+ * detection can be scheduled per component tree.
10197
10013
  *
10198
10014
  * @param component Component to mark as dirty.
10199
- *
10200
- * @publicApi
10201
10015
  */
10202
- export declare function ɵmarkDirty<T>(component: T): void;
10016
+ export declare function ɵmarkDirty(component: {}): void;
10203
10017
 
10204
10018
  export declare type ɵMethodFn = (obj: any, args: any[]) => any;
10205
10019
 
@@ -10298,7 +10112,7 @@ export declare interface ɵNgModuleType<T = any> extends Type<T> {
10298
10112
 
10299
10113
 
10300
10114
  export declare interface ɵNO_CHANGE {
10301
- brand: 'NO_CHANGE';
10115
+ __brand__: 'NO_CHANGE';
10302
10116
  }
10303
10117
 
10304
10118
  /** A special value which designates that a value has not changed. */
@@ -10613,7 +10427,7 @@ export declare class ɵRender3ComponentRef<T> extends ComponentRef<T> {
10613
10427
  hostView: ViewRef_2<T>;
10614
10428
  changeDetectorRef: ChangeDetectorRef;
10615
10429
  componentType: Type<T>;
10616
- constructor(componentType: Type<T>, instance: T, location: ElementRef, _rootLView: ɵangular_packages_core_core_bn, _tNode: ɵangular_packages_core_core_bd | TContainerNode | TElementContainerNode);
10430
+ constructor(componentType: Type<T>, instance: T, location: ElementRef, _rootLView: ɵangular_packages_core_core_bo, _tNode: ɵangular_packages_core_core_be | TContainerNode | TElementContainerNode);
10617
10431
  get injector(): Injector;
10618
10432
  destroy(): void;
10619
10433
  onDestroy(callback: () => void): void;
@@ -10785,7 +10599,7 @@ export declare function ɵsetLocaleId(localeId: string): void;
10785
10599
  export declare type ɵSetterFn = (obj: any, value: any) => void;
10786
10600
 
10787
10601
  /** Store a value in the `data` at a given `index`. */
10788
- export declare function ɵstore<T>(index: number, value: T): void;
10602
+ export declare function ɵstore<T>(tView: TView, lView: ɵangular_packages_core_core_bo, index: number, value: T): void;
10789
10603
 
10790
10604
 
10791
10605
  export declare function ɵstringify(token: any): string;
@@ -10919,16 +10733,6 @@ export declare function ɵwhenRendered(component: any): Promise<null>;
10919
10733
  */
10920
10734
  export declare function ɵɵadvance(delta: number): void;
10921
10735
 
10922
-
10923
- /**
10924
- * Allocates the necessary amount of slots for host vars.
10925
- *
10926
- * @param count Amount of vars to be allocated
10927
- *
10928
- * @codeGenApi
10929
- */
10930
- export declare function ɵɵallocHostVars(count: number): void;
10931
-
10932
10736
  /**
10933
10737
  * Updates the value of or removes a bound attribute on an Element.
10934
10738
  *
@@ -11261,8 +11065,8 @@ export declare function ɵɵattributeInterpolateV(attrName: string, values: any[
11261
11065
  * @codeGenApi
11262
11066
  */
11263
11067
  export declare function ɵɵclassMap(classes: {
11264
- [className: string]: any;
11265
- } | ɵNO_CHANGE | string | null): void;
11068
+ [className: string]: boolean | undefined | null;
11069
+ } | Map<string, boolean | undefined | null> | Set<string> | string[] | string | undefined | null): void;
11266
11070
 
11267
11071
 
11268
11072
  /**
@@ -11551,7 +11355,7 @@ export declare function ɵɵclassMapInterpolateV(values: any[]): void;
11551
11355
  *
11552
11356
  * @codeGenApi
11553
11357
  */
11554
- export declare function ɵɵclassProp(className: string, value: boolean | null): typeof ɵɵclassProp;
11358
+ export declare function ɵɵclassProp(className: string, value: boolean | undefined | null): typeof ɵɵclassProp;
11555
11359
 
11556
11360
  /**
11557
11361
  * @codeGenApi
@@ -11756,6 +11560,44 @@ export declare function ɵɵdefineComponent<T>(componentDefinition: {
11756
11560
  * Function executed by the parent template to allow child directive to apply host bindings.
11757
11561
  */
11758
11562
  hostBindings?: HostBindingsFunction<T>;
11563
+ /**
11564
+ * The number of bindings in this directive `hostBindings` (including pure fn bindings).
11565
+ *
11566
+ * Used to calculate the length of the component's LView array, so we
11567
+ * can pre-fill the array and set the host binding start index.
11568
+ */
11569
+ hostVars?: number;
11570
+ /**
11571
+ * Assign static attribute values to a host element.
11572
+ *
11573
+ * This property will assign static attribute values as well as class and style
11574
+ * values to a host element. Since attribute values can consist of different types of values, the
11575
+ * `hostAttrs` array must include the values in the following format:
11576
+ *
11577
+ * attrs = [
11578
+ * // static attributes (like `title`, `name`, `id`...)
11579
+ * attr1, value1, attr2, value,
11580
+ *
11581
+ * // a single namespace value (like `x:id`)
11582
+ * NAMESPACE_MARKER, namespaceUri1, name1, value1,
11583
+ *
11584
+ * // another single namespace value (like `x:name`)
11585
+ * NAMESPACE_MARKER, namespaceUri2, name2, value2,
11586
+ *
11587
+ * // a series of CSS classes that will be applied to the element (no spaces)
11588
+ * CLASSES_MARKER, class1, class2, class3,
11589
+ *
11590
+ * // a series of CSS styles (property + value) that will be applied to the element
11591
+ * STYLES_MARKER, prop1, value1, prop2, value2
11592
+ * ]
11593
+ *
11594
+ * All non-class and non-style attributes must be defined at the start of the list
11595
+ * first before all class and style values are set. When there is a change in value
11596
+ * type (like when classes and styles are introduced) a marker must be used to separate
11597
+ * the entries. The marker values themselves are set via entries found in the
11598
+ * [AttributeMarker] enum.
11599
+ */
11600
+ hostAttrs?: TAttributes;
11759
11601
  /**
11760
11602
  * Function to create instances of content queries associated with a given directive.
11761
11603
  */
@@ -11950,6 +11792,44 @@ export declare const ɵɵdefineDirective: <T>(directiveDefinition: {
11950
11792
  * Function executed by the parent template to allow child directive to apply host bindings.
11951
11793
  */
11952
11794
  hostBindings?: HostBindingsFunction<T> | undefined;
11795
+ /**
11796
+ * The number of bindings in this directive `hostBindings` (including pure fn bindings).
11797
+ *
11798
+ * Used to calculate the length of the component's LView array, so we
11799
+ * can pre-fill the array and set the host binding start index.
11800
+ */
11801
+ hostVars?: number | undefined;
11802
+ /**
11803
+ * Assign static attribute values to a host element.
11804
+ *
11805
+ * This property will assign static attribute values as well as class and style
11806
+ * values to a host element. Since attribute values can consist of different types of values, the
11807
+ * `hostAttrs` array must include the values in the following format:
11808
+ *
11809
+ * attrs = [
11810
+ * // static attributes (like `title`, `name`, `id`...)
11811
+ * attr1, value1, attr2, value,
11812
+ *
11813
+ * // a single namespace value (like `x:id`)
11814
+ * NAMESPACE_MARKER, namespaceUri1, name1, value1,
11815
+ *
11816
+ * // another single namespace value (like `x:name`)
11817
+ * NAMESPACE_MARKER, namespaceUri2, name2, value2,
11818
+ *
11819
+ * // a series of CSS classes that will be applied to the element (no spaces)
11820
+ * CLASSES_MARKER, class1, class2, class3,
11821
+ *
11822
+ * // a series of CSS styles (property + value) that will be applied to the element
11823
+ * STYLES_MARKER, prop1, value1, prop2, value2
11824
+ * ]
11825
+ *
11826
+ * All non-class and non-style attributes must be defined at the start of the list
11827
+ * first before all class and style values are set. When there is a change in value
11828
+ * type (like when classes and styles are introduced) a marker must be used to separate
11829
+ * the entries. The marker values themselves are set via entries found in the
11830
+ * [AttributeMarker] enum.
11831
+ */
11832
+ hostAttrs?: TAttributes | undefined;
11953
11833
  /**
11954
11834
  * Function to create instances of content queries associated with a given directive.
11955
11835
  */
@@ -12175,46 +12055,6 @@ export declare function ɵɵelementContainerStart(index: number, attrsIndex?: nu
12175
12055
  */
12176
12056
  export declare function ɵɵelementEnd(): void;
12177
12057
 
12178
- /**
12179
- * Assign static attribute values to a host element.
12180
- *
12181
- * This instruction will assign static attribute values as well as class and style
12182
- * values to an element within the host bindings function. Since attribute values
12183
- * can consist of different types of values, the `attrs` array must include the values in
12184
- * the following format:
12185
- *
12186
- * attrs = [
12187
- * // static attributes (like `title`, `name`, `id`...)
12188
- * attr1, value1, attr2, value,
12189
- *
12190
- * // a single namespace value (like `x:id`)
12191
- * NAMESPACE_MARKER, namespaceUri1, name1, value1,
12192
- *
12193
- * // another single namespace value (like `x:name`)
12194
- * NAMESPACE_MARKER, namespaceUri2, name2, value2,
12195
- *
12196
- * // a series of CSS classes that will be applied to the element (no spaces)
12197
- * CLASSES_MARKER, class1, class2, class3,
12198
- *
12199
- * // a series of CSS styles (property + value) that will be applied to the element
12200
- * STYLES_MARKER, prop1, value1, prop2, value2
12201
- * ]
12202
- *
12203
- * All non-class and non-style attributes must be defined at the start of the list
12204
- * first before all class and style values are set. When there is a change in value
12205
- * type (like when classes and styles are introduced) a marker must be used to separate
12206
- * the entries. The marker values themselves are set via entries found in the
12207
- * [AttributeMarker] enum.
12208
- *
12209
- * NOTE: This instruction is meant to used from `hostBindings` function only.
12210
- *
12211
- * @param directive A directive instance the styling is associated with.
12212
- * @param attrs An array of static values (attributes, classes and styles) with the correct marker
12213
- * values.
12214
- *
12215
- * @codeGenApi
12216
- */
12217
- export declare function ɵɵelementHostAttrs(attrs: TAttributes): void;
12218
12058
 
12219
12059
  /**
12220
12060
  * Create DOM element. The instruction must later be followed by `elementEnd()` call.
@@ -13630,7 +13470,7 @@ export declare function ɵɵstaticViewQuery<T>(predicate: Type<any> | string[],
13630
13470
  */
13631
13471
  export declare function ɵɵstyleMap(styles: {
13632
13472
  [styleName: string]: any;
13633
- } | ɵNO_CHANGE | null): void;
13473
+ } | Map<string, string | number | null | undefined> | string | undefined | null): void;
13634
13474
 
13635
13475
  /**
13636
13476
  * Update a style binding on an element with the provided value.
@@ -13653,7 +13493,8 @@ export declare function ɵɵstyleMap(styles: {
13653
13493
  *
13654
13494
  * @codeGenApi
13655
13495
  */
13656
- export declare function ɵɵstyleProp(prop: string, value: string | number | ɵSafeValue | null, suffix?: string | null): typeof ɵɵstyleProp;
13496
+ export declare function ɵɵstyleProp(prop: string, value: string | number | ɵSafeValue | undefined | null, suffix?: string | null): typeof ɵɵstyleProp;
13497
+
13657
13498
 
13658
13499
  /**
13659
13500
  *
@@ -13969,15 +13810,6 @@ export declare function ɵɵstylePropInterpolate8(prop: string, prefix: string,
13969
13810
  */
13970
13811
  export declare function ɵɵstylePropInterpolateV(prop: string, values: any[], valueSuffix?: string | null): typeof ɵɵstylePropInterpolateV;
13971
13812
 
13972
- /**
13973
- * --------
13974
- *
13975
- * This file contains the core logic for how styling instructions are processed in Angular.
13976
- *
13977
- * To learn more about the algorithm see `TStylingContext`.
13978
- *
13979
- * --------
13980
- */
13981
13813
  /**
13982
13814
  * Sets the current style sanitizer function which will then be used
13983
13815
  * within all follow-up prop and map-based style binding instructions
@@ -14023,7 +13855,7 @@ export declare function ɵɵtemplate(index: number, templateFn: ComponentTemplat
14023
13855
  *
14024
13856
  * @codeGenApi
14025
13857
  */
14026
- export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: ɵangular_packages_core_core_bn): TemplateRef<unknown> | null;
13858
+ export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: ɵangular_packages_core_core_bo): TemplateRef<unknown> | null;
14027
13859
 
14028
13860
  /**
14029
13861
  * Create static text node