@symbiote-native/angular 3.1.3 → 3.2.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 (121) hide show
  1. package/build/angular/accessibility-events.d.ts +12 -0
  2. package/build/angular/accessibility-events.js +28 -0
  3. package/build/angular/accessibility-events.js.map +1 -0
  4. package/build/angular/accessibility-inputs.d.ts +40 -0
  5. package/build/angular/accessibility-inputs.js +130 -0
  6. package/build/angular/accessibility-inputs.js.map +1 -0
  7. package/build/angular/bootstrap.d.ts +3 -1
  8. package/build/angular/bootstrap.js +4 -1
  9. package/build/angular/bootstrap.js.map +1 -1
  10. package/build/angular/components/flat-list/flat-list-template.d.ts +1 -0
  11. package/build/angular/components/flat-list/flat-list-template.js +158 -0
  12. package/build/angular/components/flat-list/flat-list-template.js.map +1 -0
  13. package/build/angular/components/flat-list/index.d.ts +6 -61
  14. package/build/angular/components/flat-list/index.js +26 -463
  15. package/build/angular/components/flat-list/index.js.map +1 -1
  16. package/build/angular/components/keyboard-avoiding-view/index.d.ts +4 -40
  17. package/build/angular/components/keyboard-avoiding-view/index.js +7 -131
  18. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  19. package/build/angular/components/modal/index.d.ts +5 -41
  20. package/build/angular/components/modal/index.js +8 -133
  21. package/build/angular/components/modal/index.js.map +1 -1
  22. package/build/angular/components/section-list/index.d.ts +4 -51
  23. package/build/angular/components/section-list/index.js +18 -335
  24. package/build/angular/components/section-list/index.js.map +1 -1
  25. package/build/angular/components/virtualized-list/cell-registry.d.ts +35 -0
  26. package/build/angular/components/virtualized-list/cell-registry.js +133 -0
  27. package/build/angular/components/virtualized-list/cell-registry.js.map +1 -0
  28. package/build/angular/components/virtualized-list/index.d.ts +18 -253
  29. package/build/angular/components/virtualized-list/index.js +112 -1178
  30. package/build/angular/components/virtualized-list/index.js.map +1 -1
  31. package/build/angular/components/virtualized-list/list-a11y-forward.d.ts +1 -0
  32. package/build/angular/components/virtualized-list/list-a11y-forward.js +42 -0
  33. package/build/angular/components/virtualized-list/list-a11y-forward.js.map +1 -0
  34. package/build/angular/components/virtualized-list/list-bags.d.ts +32 -0
  35. package/build/angular/components/virtualized-list/list-bags.js +120 -0
  36. package/build/angular/components/virtualized-list/list-bags.js.map +1 -0
  37. package/build/angular/components/virtualized-list/list-effects.d.ts +31 -0
  38. package/build/angular/components/virtualized-list/list-effects.js +83 -0
  39. package/build/angular/components/virtualized-list/list-effects.js.map +1 -0
  40. package/build/angular/components/virtualized-list/list-events.d.ts +17 -0
  41. package/build/angular/components/virtualized-list/list-events.js +34 -0
  42. package/build/angular/components/virtualized-list/list-events.js.map +1 -0
  43. package/build/angular/components/virtualized-list/list-handle.d.ts +35 -0
  44. package/build/angular/components/virtualized-list/list-handle.js +61 -0
  45. package/build/angular/components/virtualized-list/list-handle.js.map +1 -0
  46. package/build/angular/components/virtualized-list/list-inputs.d.ts +78 -0
  47. package/build/angular/components/virtualized-list/list-inputs.js +150 -0
  48. package/build/angular/components/virtualized-list/list-inputs.js.map +1 -0
  49. package/build/angular/components/virtualized-list/list-props.d.ts +58 -0
  50. package/build/angular/components/virtualized-list/list-props.js +3 -0
  51. package/build/angular/components/virtualized-list/list-props.js.map +1 -0
  52. package/build/angular/components/virtualized-list/list-styles.d.ts +23 -0
  53. package/build/angular/components/virtualized-list/list-styles.js +26 -0
  54. package/build/angular/components/virtualized-list/list-styles.js.map +1 -0
  55. package/build/angular/components/virtualized-list/list-template.d.ts +1 -0
  56. package/build/angular/components/virtualized-list/list-template.js +176 -0
  57. package/build/angular/components/virtualized-list/list-template.js.map +1 -0
  58. package/build/angular/components/virtualized-section-list/index.d.ts +13 -70
  59. package/build/angular/components/virtualized-section-list/index.js +22 -455
  60. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  61. package/build/angular/components/virtualized-section-list/section-list-template.d.ts +1 -0
  62. package/build/angular/components/virtualized-section-list/section-list-template.js +107 -0
  63. package/build/angular/components/virtualized-section-list/section-list-template.js.map +1 -0
  64. package/build/angular/finalization-registry.d.ts +4 -0
  65. package/build/angular/finalization-registry.js +17 -0
  66. package/build/angular/finalization-registry.js.map +1 -0
  67. package/build/angular/index.d.ts +5 -1
  68. package/build/angular/index.js +5 -1
  69. package/build/angular/index.js.map +1 -1
  70. package/build/angular/native-view-base.d.ts +19 -0
  71. package/build/angular/native-view-base.js +48 -0
  72. package/build/angular/native-view-base.js.map +1 -0
  73. package/build/angular/render/index.d.ts +2 -1
  74. package/build/angular/render/index.js +46 -73
  75. package/build/angular/render/index.js.map +1 -1
  76. package/build/angular/services/connect-watched-signal.d.ts +2 -0
  77. package/build/angular/services/connect-watched-signal.js +9 -0
  78. package/build/angular/services/connect-watched-signal.js.map +1 -0
  79. package/build/angular/services/create-event-value-hook.d.ts +3 -0
  80. package/build/angular/services/create-event-value-hook.js +17 -0
  81. package/build/angular/services/create-event-value-hook.js.map +1 -0
  82. package/build/angular/services/create-resource-hook.d.ts +7 -0
  83. package/build/angular/services/create-resource-hook.js +20 -0
  84. package/build/angular/services/create-resource-hook.js.map +1 -0
  85. package/build/angular/services/index.d.ts +4 -0
  86. package/build/angular/services/index.js +4 -0
  87. package/build/angular/services/index.js.map +1 -1
  88. package/build/angular/services/permissions-service-base.d.ts +14 -0
  89. package/build/angular/services/permissions-service-base.js +38 -0
  90. package/build/angular/services/permissions-service-base.js.map +1 -0
  91. package/package.json +6 -6
  92. package/src/accessibility-events.ts +13 -0
  93. package/src/accessibility-inputs.ts +89 -0
  94. package/src/bootstrap.ts +6 -2
  95. package/src/components/flat-list/flat-list-template.ts +159 -0
  96. package/src/components/flat-list/index.ts +30 -307
  97. package/src/components/keyboard-avoiding-view/index.ts +4 -78
  98. package/src/components/modal/index.ts +7 -80
  99. package/src/components/section-list/index.ts +21 -172
  100. package/src/components/virtualized-list/cell-registry.ts +199 -0
  101. package/src/components/virtualized-list/index.ts +145 -1181
  102. package/src/components/virtualized-list/list-a11y-forward.ts +42 -0
  103. package/src/components/virtualized-list/list-bags.ts +142 -0
  104. package/src/components/virtualized-list/list-effects.ts +116 -0
  105. package/src/components/virtualized-list/list-events.ts +31 -0
  106. package/src/components/virtualized-list/list-handle.ts +92 -0
  107. package/src/components/virtualized-list/list-inputs.ts +149 -0
  108. package/src/components/virtualized-list/list-props.ts +81 -0
  109. package/src/components/virtualized-list/list-styles.ts +62 -0
  110. package/src/components/virtualized-list/list-template.ts +175 -0
  111. package/src/components/virtualized-section-list/index.ts +40 -351
  112. package/src/components/virtualized-section-list/section-list-template.ts +108 -0
  113. package/src/finalization-registry.ts +18 -0
  114. package/src/index.ts +12 -1
  115. package/src/native-view-base.ts +51 -0
  116. package/src/render/index.ts +76 -77
  117. package/src/services/connect-watched-signal.ts +15 -0
  118. package/src/services/create-event-value-hook.ts +24 -0
  119. package/src/services/create-resource-hook.ts +32 -0
  120. package/src/services/index.ts +4 -0
  121. package/src/services/permissions-service-base.ts +46 -0
@@ -1,65 +1,33 @@
1
- // VirtualizedSectionList, the Angular wrapper that flattens sections into one virtualized stream
2
- // over VirtualizedList. Each section contributes a header row, its item rows, then a footer row
3
- // (RN counts 2 per section); the flattened tagged sequence is fed to VirtualizedList as one list,
4
- // so headers/items/footers are all windowed by the same machinery. The flattening, entry keying,
5
- // separator-item unwrap, and scrollToLocation mapping are shared from @symbiote-native/components; this
6
- // file wires Angular's lifecycle (typed @Input/@Output surface + the imperative handle + the
7
- // per-cell-tag template dispatch). The Angular twin of the React/Vue adapters' VirtualizedSectionList.
8
- //
9
- // The KEY mechanic — per-cell-tag template dispatch. VirtualizedList renders every cell through ONE
10
- // `vListItem` template, but a section list has DIFFERENT cell types (section header, item, section
11
- // footer, between-section separators). So VSL supplies the inner list a SINGLE synthesized
12
- // `vListItem` template that @switch-es on the flattened entry's tag and stamps the matching app
13
- // template (captured via @ContentChild on the vSection* directives) through VListOutletDirective.
14
- // list-level header/footer/empty/item-separator reuse VirtualizedList's own directives, forwarded
15
- // the same way. Only the cell-AUTHORING shape is framework-specific; the rest of the surface
16
- // stays shared with React/Vue.
17
- //
18
- // Accessibility / aria props are forwarded unchanged to the inner VirtualizedList, which owns the
19
- // shared aria→accessibility* fold before the props reach the ScrollView host.
20
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, Output, ViewChild, inject, } from '@angular/core';
1
+ // VirtualizedSectionList flattens sections into one virtualized stream over VirtualizedList
2
+ // Flattening, entry keying and `scrollToLocation` are shared from `@symbiote-native/components`
3
+ // This file is the Angular lifecycle and the per-entry template dispatch
4
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, Input, ViewChild, inject, } from '@angular/core';
21
5
  import { flattenSections, resolveStickySectionHeaders, scrollLocationToFlatIndex, sectionEntryKey, unwrapEntryItem, } from '@symbiote-native/components';
22
6
  import { Platform, dlog, } from '@symbiote-native/engine';
23
7
  import { VirtualizedList, VListEmptyDirective, VListFooterDirective, VListHeaderDirective, VListItemDirective, VListSeparatorDirective, } from '../virtualized-list';
24
8
  import { VListOutletDirective } from '../virtualized-list/directives';
9
+ import { ListEventsBase } from '../virtualized-list/list-events';
10
+ import { provideGateDemand } from '../../gate-demand';
25
11
  import { stableAnchorStyle, SymbioteStyleInputDirective, } from '../../primitives';
26
12
  import { VSectionFooterDirective, VSectionHeaderDirective, VSectionItemDirective, VSectionSeparatorDirective, } from './directives';
27
- import { gateWanted, injectGateDemandAbove, provideGateDemand, } from '../../gate-demand';
13
+ import { VIRTUALIZED_SECTION_LIST_TEMPLATE } from './section-list-template';
28
14
  import * as i0 from "@angular/core";
29
15
  import * as i1 from "../../primitives/shared";
30
- // Re-export the section authoring directives + their contexts so flat consumers (and SectionList)
31
- // import them from '../virtualized-section-list', mirroring how VirtualizedList re-exports its own.
32
16
  export { VSectionFooterDirective, VSectionHeaderDirective, VSectionItemDirective, VSectionSeparatorDirective, } from './directives';
33
- export class VirtualizedSectionList {
17
+ export class VirtualizedSectionList extends ListEventsBase {
34
18
  constructor() {
35
- this.endReached = new EventEmitter();
36
- this.startReached = new EventEmitter();
37
- this.refresh = new EventEmitter();
38
- this.accessibilityAction = new EventEmitter();
39
- this.accessibilityTap = new EventEmitter();
40
- this.magicTap = new EventEmitter();
41
- this.accessibilityEscape = new EventEmitter();
42
- // This wrapper binds the four gated accessibility events on the component it renders, which
43
- // Angular forces to be unconditional and which would light that component's gates on every
44
- // instance. It answers for them instead — see `gate-demand.ts`.
45
- this.gateDemandAbove = injectGateDemandAbove();
46
- // This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
47
- // onto (see anchorHostStyle's doc comment) — NOT `list` above, which targets the real inner
48
- // `<VirtualizedList>` one level down (itself its own separate anchor host).
19
+ super(...arguments);
20
+ // This component's own host, the anchor `class="..."` resolves onto, not the inner list's
49
21
  this.elementRef = inject(ElementRef);
50
- // --- template-bound state, recomputed in ngDoCheck when sections / separator presence change ---
51
22
  this.flatEntries = [];
52
23
  this.stickyHeaderIndices = undefined;
53
- // headerIndices are the flat positions of every section header; scrollToLocation maps a
54
- // (sectionIndex, itemIndex) coordinate through them without re-deriving the flat layout.
24
+ // Flat positions of every section header, so `scrollToLocation` skips re-deriving the layout
55
25
  this.headerIndices = [];
56
- // Memo guards so flattenSections does not re-run on every CD (the inner list marks for check on
57
- // every scroll tick, which re-runs VSL's ngDoCheck too).
26
+ // Memo guards, the inner list marks for check on every scroll tick and re-runs `ngDoCheck`
58
27
  this.lastSectionsRef = null;
59
28
  this.lastHasSectionSeparator = false;
60
29
  this.cdr = inject(ChangeDetectorRef);
61
- // The derived flat-stream accessors handed to the inner VirtualizedList. Stable arrow fields so
62
- // the bindings keep a constant identity; they read the live flatEntries.
30
+ // Stable arrow fields, so the bindings to the inner list keep a constant identity
63
31
  this.getEntry = (_source, index) => this.flatEntries[index];
64
32
  this.getEntryCount = () => this.flatEntries.length;
65
33
  this.entryKeyExtractor = (entry, index) => sectionEntryKey(entry, index, this.keyExtractor);
@@ -68,9 +36,6 @@ export class VirtualizedSectionList {
68
36
  this.cachedResolvedStyle = stableAnchorStyle(this.elementRef, this.style, this.cachedResolvedStyle);
69
37
  return this.cachedResolvedStyle;
70
38
  }
71
- wantsGate(name) {
72
- return gateWanted(this.gateDemandAbove, name, this[name]);
73
- }
74
39
  ngDoCheck() {
75
40
  const hasSectionSeparator = this.sectionSeparatorDir !== undefined;
76
41
  if (this.sections === this.lastSectionsRef &&
@@ -83,7 +48,7 @@ export class VirtualizedSectionList {
83
48
  const { entries, headerIndices } = flattenSections(sections, hasSectionSeparator);
84
49
  this.flatEntries = entries;
85
50
  this.headerIndices = headerIndices;
86
- // RN sticks section headers by default only on iOS; Android does not unless asked.
51
+ // RN sticks section headers by default only on iOS
87
52
  this.stickyHeaderIndices = resolveStickySectionHeaders(this.stickySectionHeadersEnabled, headerIndices, Platform.OS);
88
53
  dlog(`Angular VirtualizedSectionList: ${sections.length} sections flattened to ${entries.length} entries`);
89
54
  this.cdr.markForCheck();
@@ -99,10 +64,8 @@ export class VirtualizedSectionList {
99
64
  }
100
65
  return this.cachedEntryItemLayout;
101
66
  }
102
- // Adapts each @Output() into the plain callback VirtualizedList's own @Input() still wants,
103
- // gated on `.observed` so an unlistened event forwards `undefined` — the same "nobody cares"
104
- // contract the old @Input() callback passthrough had (e.g. onRefresh presence gates whether a
105
- // RefreshControl is built downstream; see the Vue twin's `listens('onRefresh')` gate).
67
+ // Each output becomes the plain callback the inner list wants, or `undefined` when nobody
68
+ // listens, since a callback's presence gates whether a `RefreshControl` is built downstream
106
69
  get resolvedOnEndReached() {
107
70
  return this.endReached.observed
108
71
  ? info => this.endReached.emit(info)
@@ -116,28 +79,7 @@ export class VirtualizedSectionList {
116
79
  get resolvedOnRefresh() {
117
80
  return this.refresh.observed ? () => this.refresh.emit() : undefined;
118
81
  }
119
- get resolvedOnAccessibilityAction() {
120
- return this.accessibilityAction.observed
121
- ? event => this.accessibilityAction.emit(event)
122
- : undefined;
123
- }
124
- get resolvedOnAccessibilityTap() {
125
- return this.accessibilityTap.observed
126
- ? event => this.accessibilityTap.emit(event)
127
- : undefined;
128
- }
129
- get resolvedOnMagicTap() {
130
- return this.magicTap.observed
131
- ? event => this.magicTap.emit(event)
132
- : undefined;
133
- }
134
- get resolvedOnAccessibilityEscape() {
135
- return this.accessibilityEscape.observed
136
- ? event => this.accessibilityEscape.emit(event)
137
- : undefined;
138
- }
139
- // --- per-cell-tag dispatch (the inner vListItem context is typed `unknown` under strictTemplates,
140
- // since VListItemDirective's generic is not bound here; narrow with a runtime guard, no casts). ---
82
+ // The inner cell context is typed `unknown` under strict templates, so entries are narrowed
141
83
  isEntry(value) {
142
84
  return typeof value === 'object' && value !== null && 'kind' in value;
143
85
  }
@@ -162,10 +104,8 @@ export class VirtualizedSectionList {
162
104
  separators,
163
105
  };
164
106
  }
165
- // The inner list's separator context carries the flattened ENTRY as leading/trailing; unwrap each
166
- // back to its ItemT (shared unwrapEntryItem) so the app's item separator, typed on ItemT, sees
167
- // real items (header/footer/section-separator gaps unwrap to undefined). Mirrors the React/Vue
168
- // entrySeparatorComponent wrap.
107
+ // The inner separator context carries flattened entries, unwrapped back to real items so the
108
+ // app's separator, typed on the item, never sees an envelope
169
109
  itemSeparatorContextOf(highlighted, leadingItem, trailingItem) {
170
110
  return {
171
111
  $implicit: highlighted === true,
@@ -178,7 +118,6 @@ export class VirtualizedSectionList {
178
118
  : undefined,
179
119
  };
180
120
  }
181
- // ---- imperative handle (the shared IVirtualizedSectionListHandle surface) ----
182
121
  scrollToLocation(params) {
183
122
  const flatIndex = scrollLocationToFlatIndex(this.headerIndices, params.sectionIndex, params.itemIndex);
184
123
  if (flatIndex === undefined) {
@@ -212,154 +151,8 @@ export class VirtualizedSectionList {
212
151
  recordInteraction() {
213
152
  this.list?.recordInteraction();
214
153
  }
215
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: VirtualizedSectionList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
216
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: VirtualizedSectionList, isStandalone: true, selector: "VirtualizedSectionList", inputs: { sections: "sections", keyExtractor: "keyExtractor", getItemLayout: "getItemLayout", stickySectionHeadersEnabled: "stickySectionHeadersEnabled", extraData: "extraData", onEndReachedThreshold: "onEndReachedThreshold", onStartReachedThreshold: "onStartReachedThreshold", refreshing: "refreshing", progressViewOffset: "progressViewOffset", refreshRequested: "refreshRequested", initialNumToRender: "initialNumToRender", initialScrollIndex: "initialScrollIndex", maxToRenderPerBatch: "maxToRenderPerBatch", updateCellsBatchingPeriod: "updateCellsBatchingPeriod", windowSize: "windowSize", inverted: "inverted", maintainVisibleContentPosition: "maintainVisibleContentPosition", onScroll: "onScroll", onScrollBeginDrag: "onScrollBeginDrag", onScrollEndDrag: "onScrollEndDrag", onMomentumScrollBegin: "onMomentumScrollBegin", onMomentumScrollEnd: "onMomentumScrollEnd", scrollEventThrottle: "scrollEventThrottle", keyboardShouldPersistTaps: "keyboardShouldPersistTaps", keyboardDismissMode: "keyboardDismissMode", removeClippedSubviews: "removeClippedSubviews", nestedScrollEnabled: "nestedScrollEnabled", style: "style", contentContainerStyle: "contentContainerStyle", testID: "testID", nativeID: "nativeID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", role: "role", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaLive: "ariaLive", ariaHidden: "ariaHidden", ariaBusy: "ariaBusy", ariaChecked: "ariaChecked", ariaDisabled: "ariaDisabled", ariaExpanded: "ariaExpanded", ariaSelected: "ariaSelected", ariaModal: "ariaModal", ariaValueMax: "ariaValueMax", ariaValueMin: "ariaValueMin", ariaValueNow: "ariaValueNow", ariaValueText: "ariaValueText" }, outputs: { endReached: "endReached", startReached: "startReached", refresh: "refresh", accessibilityAction: "accessibilityAction", accessibilityTap: "accessibilityTap", magicTap: "magicTap", accessibilityEscape: "accessibilityEscape" }, queries: [{ propertyName: "sectionItemDir", first: true, predicate: VSectionItemDirective, descendants: true }, { propertyName: "sectionHeaderDir", first: true, predicate: VSectionHeaderDirective, descendants: true }, { propertyName: "sectionFooterDir", first: true, predicate: VSectionFooterDirective, descendants: true }, { propertyName: "sectionSeparatorDir", first: true, predicate: VSectionSeparatorDirective, descendants: true }, { propertyName: "listHeaderDir", first: true, predicate: VListHeaderDirective, descendants: true }, { propertyName: "listFooterDir", first: true, predicate: VListFooterDirective, descendants: true }, { propertyName: "listEmptyDir", first: true, predicate: VListEmptyDirective, descendants: true }, { propertyName: "itemSeparatorDir", first: true, predicate: VListSeparatorDirective, descendants: true }], viewQueries: [{ propertyName: "list", first: true, predicate: VirtualizedList, descendants: true }], hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
217
- <VirtualizedList
218
- [data]="flatEntries"
219
- [getItem]="getEntry"
220
- [getItemCount]="getEntryCount"
221
- [keyExtractor]="entryKeyExtractor"
222
- [getItemLayout]="entryItemLayout"
223
- [stickyHeaderIndices]="stickyHeaderIndices"
224
- [extraData]="extraData"
225
- [inverted]="inverted"
226
- [refreshing]="refreshing"
227
- [progressViewOffset]="progressViewOffset"
228
- [refreshRequested]="refreshRequested ?? refresh.observed"
229
- (refresh)="resolvedOnRefresh?.()"
230
- (endReached)="resolvedOnEndReached?.($event)"
231
- [onEndReachedThreshold]="onEndReachedThreshold"
232
- (startReached)="resolvedOnStartReached?.($event)"
233
- [onStartReachedThreshold]="onStartReachedThreshold"
234
- [initialNumToRender]="initialNumToRender"
235
- [initialScrollIndex]="initialScrollIndex"
236
- [maxToRenderPerBatch]="maxToRenderPerBatch"
237
- [updateCellsBatchingPeriod]="updateCellsBatchingPeriod"
238
- [windowSize]="windowSize"
239
- [maintainVisibleContentPosition]="maintainVisibleContentPosition"
240
- [onScroll]="onScroll"
241
- [onScrollBeginDrag]="onScrollBeginDrag"
242
- [onScrollEndDrag]="onScrollEndDrag"
243
- [onMomentumScrollBegin]="onMomentumScrollBegin"
244
- [onMomentumScrollEnd]="onMomentumScrollEnd"
245
- [scrollEventThrottle]="scrollEventThrottle"
246
- [keyboardShouldPersistTaps]="keyboardShouldPersistTaps"
247
- [keyboardDismissMode]="keyboardDismissMode"
248
- [removeClippedSubviews]="removeClippedSubviews"
249
- [nestedScrollEnabled]="nestedScrollEnabled"
250
- [style]="resolvedStyle"
251
- [contentContainerStyle]="contentContainerStyle"
252
- [testID]="testID"
253
- [nativeID]="nativeID"
254
- [accessible]="accessible"
255
- [accessibilityLabel]="accessibilityLabel"
256
- [accessibilityHint]="accessibilityHint"
257
- [accessibilityRole]="accessibilityRole"
258
- [accessibilityState]="accessibilityState"
259
- [accessibilityValue]="accessibilityValue"
260
- [accessibilityActions]="accessibilityActions"
261
- [accessibilityLabelledBy]="accessibilityLabelledBy"
262
- [importantForAccessibility]="importantForAccessibility"
263
- [accessibilityLiveRegion]="accessibilityLiveRegion"
264
- [screenReaderFocusable]="screenReaderFocusable"
265
- [accessibilityViewIsModal]="accessibilityViewIsModal"
266
- [accessibilityElementsHidden]="accessibilityElementsHidden"
267
- [accessibilityIgnoresInvertColors]="accessibilityIgnoresInvertColors"
268
- [accessibilityLanguage]="accessibilityLanguage"
269
- [accessibilityRespondsToUserInteraction]="
270
- accessibilityRespondsToUserInteraction
271
- "
272
- [accessibilityShowsLargeContentViewer]="
273
- accessibilityShowsLargeContentViewer
274
- "
275
- [accessibilityLargeContentTitle]="accessibilityLargeContentTitle"
276
- (accessibilityAction)="resolvedOnAccessibilityAction?.($event)"
277
- (accessibilityTap)="resolvedOnAccessibilityTap?.($event)"
278
- (magicTap)="resolvedOnMagicTap?.($event)"
279
- (accessibilityEscape)="resolvedOnAccessibilityEscape?.($event)"
280
- [role]="role"
281
- [ariaLabel]="ariaLabel"
282
- [ariaLabelledBy]="ariaLabelledBy"
283
- [ariaLive]="ariaLive"
284
- [ariaHidden]="ariaHidden"
285
- [ariaBusy]="ariaBusy"
286
- [ariaChecked]="ariaChecked"
287
- [ariaDisabled]="ariaDisabled"
288
- [ariaExpanded]="ariaExpanded"
289
- [ariaSelected]="ariaSelected"
290
- [ariaModal]="ariaModal"
291
- [ariaValueMax]="ariaValueMax"
292
- [ariaValueMin]="ariaValueMin"
293
- [ariaValueNow]="ariaValueNow"
294
- [ariaValueText]="ariaValueText"
295
- >
296
- <!-- The single synthesized cell template: dispatch per flattened entry tag. -->
297
- <ng-template vListItem let-entry let-separators="separators">
298
- @switch (entryKind(entry)) {
299
- @case ('header') {
300
- <ng-container
301
- [vListOutlet]="sectionHeaderDir?.templateRef"
302
- [vListOutletContext]="sectionContextOf(entry)"
303
- ></ng-container>
304
- }
305
- @case ('footer') {
306
- <ng-container
307
- [vListOutlet]="sectionFooterDir?.templateRef"
308
- [vListOutletContext]="sectionContextOf(entry)"
309
- ></ng-container>
310
- }
311
- @case ('section-separator') {
312
- <ng-container
313
- [vListOutlet]="sectionSeparatorDir?.templateRef"
314
- ></ng-container>
315
- }
316
- @case ('item') {
317
- <ng-container
318
- [vListOutlet]="sectionItemDir?.templateRef"
319
- [vListOutletContext]="itemContextOf(entry, separators)"
320
- ></ng-container>
321
- }
322
- }
323
- </ng-template>
324
-
325
- <!-- list-level slots: forward the app's VirtualizedList directives to the inner list. -->
326
- @if (listHeaderDir !== undefined) {
327
- <ng-template vListHeader>
328
- <ng-container
329
- [vListOutlet]="listHeaderDir.templateRef"
330
- ></ng-container>
331
- </ng-template>
332
- }
333
- @if (listFooterDir !== undefined) {
334
- <ng-template vListFooter>
335
- <ng-container
336
- [vListOutlet]="listFooterDir.templateRef"
337
- ></ng-container>
338
- </ng-template>
339
- }
340
- @if (listEmptyDir !== undefined) {
341
- <ng-template vListEmpty>
342
- <ng-container [vListOutlet]="listEmptyDir.templateRef"></ng-container>
343
- </ng-template>
344
- }
345
- <!-- item separator: forward, unwrapping each flattened entry back to its ItemT. -->
346
- @if (itemSeparatorDir !== undefined) {
347
- <ng-template
348
- vListSeparator
349
- let-highlighted
350
- let-leadingItem="leadingItem"
351
- let-trailingItem="trailingItem"
352
- >
353
- <ng-container
354
- [vListOutlet]="itemSeparatorDir.templateRef"
355
- [vListOutletContext]="
356
- itemSeparatorContextOf(highlighted, leadingItem, trailingItem)
357
- "
358
- ></ng-container>
359
- </ng-template>
360
- }
361
- </VirtualizedList>
362
- `, isInline: true, dependencies: [{ kind: "component", type: VirtualizedList, selector: "VirtualizedList", inputs: ["data", "getItem", "getItemCount", "keyExtractor", "getItemLayout", "horizontal", "inverted", "extraData", "onEndReachedThreshold", "onStartReachedThreshold", "refreshing", "progressViewOffset", "refreshRequested", "viewabilityConfig", "viewabilityConfigCallbackPairs", "initialNumToRender", "initialScrollIndex", "maxToRenderPerBatch", "updateCellsBatchingPeriod", "windowSize", "stickyHeaderIndices", "maintainVisibleContentPosition", "onScroll", "onScrollBeginDrag", "onScrollEndDrag", "onMomentumScrollBegin", "onMomentumScrollEnd", "scrollEventThrottle", "keyboardShouldPersistTaps", "keyboardDismissMode", "removeClippedSubviews", "nestedScrollEnabled", "style", "contentContainerStyle", "testID", "nativeID", "accessible", "accessibilityLabel", "accessibilityHint", "accessibilityRole", "accessibilityState", "accessibilityValue", "accessibilityActions", "accessibilityLabelledBy", "importantForAccessibility", "accessibilityLiveRegion", "screenReaderFocusable", "accessibilityViewIsModal", "accessibilityElementsHidden", "accessibilityIgnoresInvertColors", "accessibilityLanguage", "accessibilityRespondsToUserInteraction", "accessibilityShowsLargeContentViewer", "accessibilityLargeContentTitle", "role", "ariaLabel", "ariaLabelledBy", "ariaLive", "ariaHidden", "ariaBusy", "ariaChecked", "ariaDisabled", "ariaExpanded", "ariaSelected", "ariaModal", "ariaValueMax", "ariaValueMin", "ariaValueNow", "ariaValueText", "itemTemplate", "itemSeparatorTemplate"], outputs: ["endReached", "startReached", "refresh", "viewableItemsChanged", "scrollToIndexFailed", "accessibilityAction", "accessibilityTap", "magicTap", "accessibilityEscape"] }, { kind: "directive", type: VListItemDirective, selector: "[vListItem]" }, { kind: "directive", type: VListHeaderDirective, selector: "[vListHeader]" }, { kind: "directive", type: VListFooterDirective, selector: "[vListFooter]" }, { kind: "directive", type: VListEmptyDirective, selector: "[vListEmpty]" }, { kind: "directive", type: VListSeparatorDirective, selector: "[vListSeparator]" }, { kind: "directive", type: VListOutletDirective, selector: "[vListOutlet]", inputs: ["vListOutlet", "vListOutletContext"] }], viewProviders: [provideGateDemand(() => VirtualizedSectionList)], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: VirtualizedSectionList, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
155
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: VirtualizedSectionList, isStandalone: true, selector: "VirtualizedSectionList", inputs: { sections: "sections", keyExtractor: "keyExtractor", getItemLayout: "getItemLayout", stickySectionHeadersEnabled: "stickySectionHeadersEnabled", extraData: "extraData", onEndReachedThreshold: "onEndReachedThreshold", onStartReachedThreshold: "onStartReachedThreshold", refreshing: "refreshing", progressViewOffset: "progressViewOffset", refreshRequested: "refreshRequested", initialNumToRender: "initialNumToRender", initialScrollIndex: "initialScrollIndex", maxToRenderPerBatch: "maxToRenderPerBatch", updateCellsBatchingPeriod: "updateCellsBatchingPeriod", windowSize: "windowSize", inverted: "inverted", maintainVisibleContentPosition: "maintainVisibleContentPosition", onScroll: "onScroll", onScrollBeginDrag: "onScrollBeginDrag", onScrollEndDrag: "onScrollEndDrag", onMomentumScrollBegin: "onMomentumScrollBegin", onMomentumScrollEnd: "onMomentumScrollEnd", scrollEventThrottle: "scrollEventThrottle", keyboardShouldPersistTaps: "keyboardShouldPersistTaps", keyboardDismissMode: "keyboardDismissMode", removeClippedSubviews: "removeClippedSubviews", nestedScrollEnabled: "nestedScrollEnabled", style: "style", contentContainerStyle: "contentContainerStyle", testID: "testID", nativeID: "nativeID" }, queries: [{ propertyName: "sectionItemDir", first: true, predicate: VSectionItemDirective, descendants: true }, { propertyName: "sectionHeaderDir", first: true, predicate: VSectionHeaderDirective, descendants: true }, { propertyName: "sectionFooterDir", first: true, predicate: VSectionFooterDirective, descendants: true }, { propertyName: "sectionSeparatorDir", first: true, predicate: VSectionSeparatorDirective, descendants: true }, { propertyName: "listHeaderDir", first: true, predicate: VListHeaderDirective, descendants: true }, { propertyName: "listFooterDir", first: true, predicate: VListFooterDirective, descendants: true }, { propertyName: "listEmptyDir", first: true, predicate: VListEmptyDirective, descendants: true }, { propertyName: "itemSeparatorDir", first: true, predicate: VListSeparatorDirective, descendants: true }], viewQueries: [{ propertyName: "list", first: true, predicate: VirtualizedList, descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: "\n <VirtualizedList\n [data]=\"flatEntries\"\n [getItem]=\"getEntry\"\n [getItemCount]=\"getEntryCount\"\n [keyExtractor]=\"entryKeyExtractor\"\n [getItemLayout]=\"entryItemLayout\"\n [stickyHeaderIndices]=\"stickyHeaderIndices\"\n [extraData]=\"extraData\"\n [inverted]=\"inverted\"\n [refreshing]=\"refreshing\"\n [progressViewOffset]=\"progressViewOffset\"\n [refreshRequested]=\"refreshRequested ?? refresh.observed\"\n (refresh)=\"resolvedOnRefresh?.()\"\n (endReached)=\"resolvedOnEndReached?.($event)\"\n [onEndReachedThreshold]=\"onEndReachedThreshold\"\n (startReached)=\"resolvedOnStartReached?.($event)\"\n [onStartReachedThreshold]=\"onStartReachedThreshold\"\n [initialNumToRender]=\"initialNumToRender\"\n [initialScrollIndex]=\"initialScrollIndex\"\n [maxToRenderPerBatch]=\"maxToRenderPerBatch\"\n [updateCellsBatchingPeriod]=\"updateCellsBatchingPeriod\"\n [windowSize]=\"windowSize\"\n [maintainVisibleContentPosition]=\"maintainVisibleContentPosition\"\n [onScroll]=\"onScroll\"\n [onScrollBeginDrag]=\"onScrollBeginDrag\"\n [onScrollEndDrag]=\"onScrollEndDrag\"\n [onMomentumScrollBegin]=\"onMomentumScrollBegin\"\n [onMomentumScrollEnd]=\"onMomentumScrollEnd\"\n [scrollEventThrottle]=\"scrollEventThrottle\"\n [keyboardShouldPersistTaps]=\"keyboardShouldPersistTaps\"\n [keyboardDismissMode]=\"keyboardDismissMode\"\n [removeClippedSubviews]=\"removeClippedSubviews\"\n [nestedScrollEnabled]=\"nestedScrollEnabled\"\n [style]=\"resolvedStyle\"\n [contentContainerStyle]=\"contentContainerStyle\"\n [testID]=\"testID\"\n [nativeID]=\"nativeID\"\n \n [accessible]=\"accessible\"\n [accessibilityLabel]=\"accessibilityLabel\"\n [accessibilityHint]=\"accessibilityHint\"\n [accessibilityRole]=\"accessibilityRole\"\n [accessibilityState]=\"accessibilityState\"\n [accessibilityValue]=\"accessibilityValue\"\n [accessibilityActions]=\"accessibilityActions\"\n [accessibilityLabelledBy]=\"accessibilityLabelledBy\"\n [importantForAccessibility]=\"importantForAccessibility\"\n [accessibilityLiveRegion]=\"accessibilityLiveRegion\"\n [screenReaderFocusable]=\"screenReaderFocusable\"\n [accessibilityViewIsModal]=\"accessibilityViewIsModal\"\n [accessibilityElementsHidden]=\"accessibilityElementsHidden\"\n [accessibilityIgnoresInvertColors]=\"accessibilityIgnoresInvertColors\"\n [accessibilityLanguage]=\"accessibilityLanguage\"\n [accessibilityRespondsToUserInteraction]=\"accessibilityRespondsToUserInteraction\"\n [accessibilityShowsLargeContentViewer]=\"accessibilityShowsLargeContentViewer\"\n [accessibilityLargeContentTitle]=\"accessibilityLargeContentTitle\"\n (accessibilityAction)=\"accessibilityAction.emit($event)\"\n (accessibilityTap)=\"accessibilityTap.emit($event)\"\n (magicTap)=\"magicTap.emit($event)\"\n (accessibilityEscape)=\"accessibilityEscape.emit($event)\"\n [role]=\"role\"\n [aria-label]=\"ariaLabel\"\n [aria-labelledby]=\"ariaLabelledBy\"\n [aria-live]=\"ariaLive\"\n [aria-hidden]=\"ariaHidden\"\n [aria-busy]=\"ariaBusy\"\n [aria-checked]=\"ariaChecked\"\n [aria-disabled]=\"ariaDisabled\"\n [aria-expanded]=\"ariaExpanded\"\n [aria-selected]=\"ariaSelected\"\n [aria-modal]=\"ariaModal\"\n [aria-valuemax]=\"ariaValueMax\"\n [aria-valuemin]=\"ariaValueMin\"\n [aria-valuenow]=\"ariaValueNow\"\n [aria-valuetext]=\"ariaValueText\"\n\n >\n <!-- The single synthesized cell template: dispatch per flattened entry tag -->\n <ng-template vListItem let-entry let-separators=\"separators\">\n @switch (entryKind(entry)) {\n @case ('header') {\n <ng-container\n [vListOutlet]=\"sectionHeaderDir?.templateRef\"\n [vListOutletContext]=\"sectionContextOf(entry)\"\n ></ng-container>\n }\n @case ('footer') {\n <ng-container\n [vListOutlet]=\"sectionFooterDir?.templateRef\"\n [vListOutletContext]=\"sectionContextOf(entry)\"\n ></ng-container>\n }\n @case ('section-separator') {\n <ng-container\n [vListOutlet]=\"sectionSeparatorDir?.templateRef\"\n ></ng-container>\n }\n @case ('item') {\n <ng-container\n [vListOutlet]=\"sectionItemDir?.templateRef\"\n [vListOutletContext]=\"itemContextOf(entry, separators)\"\n ></ng-container>\n }\n }\n </ng-template>\n\n <!-- List-level slots: forward the app's directives to the inner list -->\n @if (listHeaderDir !== undefined) {\n <ng-template vListHeader>\n <ng-container [vListOutlet]=\"listHeaderDir.templateRef\"></ng-container>\n </ng-template>\n }\n @if (listFooterDir !== undefined) {\n <ng-template vListFooter>\n <ng-container [vListOutlet]=\"listFooterDir.templateRef\"></ng-container>\n </ng-template>\n }\n @if (listEmptyDir !== undefined) {\n <ng-template vListEmpty>\n <ng-container [vListOutlet]=\"listEmptyDir.templateRef\"></ng-container>\n </ng-template>\n }\n <!-- Item separator: unwrap each flattened entry back to its item -->\n @if (itemSeparatorDir !== undefined) {\n <ng-template\n vListSeparator\n let-highlighted\n let-leadingItem=\"leadingItem\"\n let-trailingItem=\"trailingItem\"\n >\n <ng-container\n [vListOutlet]=\"itemSeparatorDir.templateRef\"\n [vListOutletContext]=\"\n itemSeparatorContextOf(highlighted, leadingItem, trailingItem)\n \"\n ></ng-container>\n </ng-template>\n }\n </VirtualizedList>\n", isInline: true, dependencies: [{ kind: "component", type: VirtualizedList, selector: "VirtualizedList" }, { kind: "directive", type: VListItemDirective, selector: "[vListItem]" }, { kind: "directive", type: VListHeaderDirective, selector: "[vListHeader]" }, { kind: "directive", type: VListFooterDirective, selector: "[vListFooter]" }, { kind: "directive", type: VListEmptyDirective, selector: "[vListEmpty]" }, { kind: "directive", type: VListSeparatorDirective, selector: "[vListSeparator]" }, { kind: "directive", type: VListOutletDirective, selector: "[vListOutlet]", inputs: ["vListOutlet", "vListOutletContext"] }], viewProviders: [provideGateDemand(() => VirtualizedSectionList)], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
363
156
  }
364
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: VirtualizedSectionList, decorators: [{
365
158
  type: Component,
@@ -380,153 +173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
380
173
  VListOutletDirective,
381
174
  ],
382
175
  changeDetection: ChangeDetectionStrategy.OnPush,
383
- template: `
384
- <VirtualizedList
385
- [data]="flatEntries"
386
- [getItem]="getEntry"
387
- [getItemCount]="getEntryCount"
388
- [keyExtractor]="entryKeyExtractor"
389
- [getItemLayout]="entryItemLayout"
390
- [stickyHeaderIndices]="stickyHeaderIndices"
391
- [extraData]="extraData"
392
- [inverted]="inverted"
393
- [refreshing]="refreshing"
394
- [progressViewOffset]="progressViewOffset"
395
- [refreshRequested]="refreshRequested ?? refresh.observed"
396
- (refresh)="resolvedOnRefresh?.()"
397
- (endReached)="resolvedOnEndReached?.($event)"
398
- [onEndReachedThreshold]="onEndReachedThreshold"
399
- (startReached)="resolvedOnStartReached?.($event)"
400
- [onStartReachedThreshold]="onStartReachedThreshold"
401
- [initialNumToRender]="initialNumToRender"
402
- [initialScrollIndex]="initialScrollIndex"
403
- [maxToRenderPerBatch]="maxToRenderPerBatch"
404
- [updateCellsBatchingPeriod]="updateCellsBatchingPeriod"
405
- [windowSize]="windowSize"
406
- [maintainVisibleContentPosition]="maintainVisibleContentPosition"
407
- [onScroll]="onScroll"
408
- [onScrollBeginDrag]="onScrollBeginDrag"
409
- [onScrollEndDrag]="onScrollEndDrag"
410
- [onMomentumScrollBegin]="onMomentumScrollBegin"
411
- [onMomentumScrollEnd]="onMomentumScrollEnd"
412
- [scrollEventThrottle]="scrollEventThrottle"
413
- [keyboardShouldPersistTaps]="keyboardShouldPersistTaps"
414
- [keyboardDismissMode]="keyboardDismissMode"
415
- [removeClippedSubviews]="removeClippedSubviews"
416
- [nestedScrollEnabled]="nestedScrollEnabled"
417
- [style]="resolvedStyle"
418
- [contentContainerStyle]="contentContainerStyle"
419
- [testID]="testID"
420
- [nativeID]="nativeID"
421
- [accessible]="accessible"
422
- [accessibilityLabel]="accessibilityLabel"
423
- [accessibilityHint]="accessibilityHint"
424
- [accessibilityRole]="accessibilityRole"
425
- [accessibilityState]="accessibilityState"
426
- [accessibilityValue]="accessibilityValue"
427
- [accessibilityActions]="accessibilityActions"
428
- [accessibilityLabelledBy]="accessibilityLabelledBy"
429
- [importantForAccessibility]="importantForAccessibility"
430
- [accessibilityLiveRegion]="accessibilityLiveRegion"
431
- [screenReaderFocusable]="screenReaderFocusable"
432
- [accessibilityViewIsModal]="accessibilityViewIsModal"
433
- [accessibilityElementsHidden]="accessibilityElementsHidden"
434
- [accessibilityIgnoresInvertColors]="accessibilityIgnoresInvertColors"
435
- [accessibilityLanguage]="accessibilityLanguage"
436
- [accessibilityRespondsToUserInteraction]="
437
- accessibilityRespondsToUserInteraction
438
- "
439
- [accessibilityShowsLargeContentViewer]="
440
- accessibilityShowsLargeContentViewer
441
- "
442
- [accessibilityLargeContentTitle]="accessibilityLargeContentTitle"
443
- (accessibilityAction)="resolvedOnAccessibilityAction?.($event)"
444
- (accessibilityTap)="resolvedOnAccessibilityTap?.($event)"
445
- (magicTap)="resolvedOnMagicTap?.($event)"
446
- (accessibilityEscape)="resolvedOnAccessibilityEscape?.($event)"
447
- [role]="role"
448
- [ariaLabel]="ariaLabel"
449
- [ariaLabelledBy]="ariaLabelledBy"
450
- [ariaLive]="ariaLive"
451
- [ariaHidden]="ariaHidden"
452
- [ariaBusy]="ariaBusy"
453
- [ariaChecked]="ariaChecked"
454
- [ariaDisabled]="ariaDisabled"
455
- [ariaExpanded]="ariaExpanded"
456
- [ariaSelected]="ariaSelected"
457
- [ariaModal]="ariaModal"
458
- [ariaValueMax]="ariaValueMax"
459
- [ariaValueMin]="ariaValueMin"
460
- [ariaValueNow]="ariaValueNow"
461
- [ariaValueText]="ariaValueText"
462
- >
463
- <!-- The single synthesized cell template: dispatch per flattened entry tag. -->
464
- <ng-template vListItem let-entry let-separators="separators">
465
- @switch (entryKind(entry)) {
466
- @case ('header') {
467
- <ng-container
468
- [vListOutlet]="sectionHeaderDir?.templateRef"
469
- [vListOutletContext]="sectionContextOf(entry)"
470
- ></ng-container>
471
- }
472
- @case ('footer') {
473
- <ng-container
474
- [vListOutlet]="sectionFooterDir?.templateRef"
475
- [vListOutletContext]="sectionContextOf(entry)"
476
- ></ng-container>
477
- }
478
- @case ('section-separator') {
479
- <ng-container
480
- [vListOutlet]="sectionSeparatorDir?.templateRef"
481
- ></ng-container>
482
- }
483
- @case ('item') {
484
- <ng-container
485
- [vListOutlet]="sectionItemDir?.templateRef"
486
- [vListOutletContext]="itemContextOf(entry, separators)"
487
- ></ng-container>
488
- }
489
- }
490
- </ng-template>
491
-
492
- <!-- list-level slots: forward the app's VirtualizedList directives to the inner list. -->
493
- @if (listHeaderDir !== undefined) {
494
- <ng-template vListHeader>
495
- <ng-container
496
- [vListOutlet]="listHeaderDir.templateRef"
497
- ></ng-container>
498
- </ng-template>
499
- }
500
- @if (listFooterDir !== undefined) {
501
- <ng-template vListFooter>
502
- <ng-container
503
- [vListOutlet]="listFooterDir.templateRef"
504
- ></ng-container>
505
- </ng-template>
506
- }
507
- @if (listEmptyDir !== undefined) {
508
- <ng-template vListEmpty>
509
- <ng-container [vListOutlet]="listEmptyDir.templateRef"></ng-container>
510
- </ng-template>
511
- }
512
- <!-- item separator: forward, unwrapping each flattened entry back to its ItemT. -->
513
- @if (itemSeparatorDir !== undefined) {
514
- <ng-template
515
- vListSeparator
516
- let-highlighted
517
- let-leadingItem="leadingItem"
518
- let-trailingItem="trailingItem"
519
- >
520
- <ng-container
521
- [vListOutlet]="itemSeparatorDir.templateRef"
522
- [vListOutletContext]="
523
- itemSeparatorContextOf(highlighted, leadingItem, trailingItem)
524
- "
525
- ></ng-container>
526
- </ng-template>
527
- }
528
- </VirtualizedList>
529
- `,
176
+ template: VIRTUALIZED_SECTION_LIST_TEMPLATE,
530
177
  }]
531
178
  }], propDecorators: { sections: [{
532
179
  type: Input,
@@ -539,16 +186,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
539
186
  type: Input
540
187
  }], extraData: [{
541
188
  type: Input
542
- }], endReached: [{
543
- type: Output
544
189
  }], onEndReachedThreshold: [{
545
190
  type: Input
546
- }], startReached: [{
547
- type: Output
548
191
  }], onStartReachedThreshold: [{
549
192
  type: Input
550
- }], refresh: [{
551
- type: Output
552
193
  }], refreshing: [{
553
194
  type: Input
554
195
  }], progressViewOffset: [{
@@ -597,80 +238,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
597
238
  type: Input
598
239
  }], nativeID: [{
599
240
  type: Input
600
- }], accessible: [{
601
- type: Input
602
- }], accessibilityLabel: [{
603
- type: Input
604
- }], accessibilityHint: [{
605
- type: Input
606
- }], accessibilityRole: [{
607
- type: Input
608
- }], accessibilityState: [{
609
- type: Input
610
- }], accessibilityValue: [{
611
- type: Input
612
- }], accessibilityActions: [{
613
- type: Input
614
- }], accessibilityLabelledBy: [{
615
- type: Input
616
- }], importantForAccessibility: [{
617
- type: Input
618
- }], accessibilityLiveRegion: [{
619
- type: Input
620
- }], screenReaderFocusable: [{
621
- type: Input
622
- }], accessibilityViewIsModal: [{
623
- type: Input
624
- }], accessibilityElementsHidden: [{
625
- type: Input
626
- }], accessibilityIgnoresInvertColors: [{
627
- type: Input
628
- }], accessibilityLanguage: [{
629
- type: Input
630
- }], accessibilityRespondsToUserInteraction: [{
631
- type: Input
632
- }], accessibilityShowsLargeContentViewer: [{
633
- type: Input
634
- }], accessibilityLargeContentTitle: [{
635
- type: Input
636
- }], accessibilityAction: [{
637
- type: Output
638
- }], accessibilityTap: [{
639
- type: Output
640
- }], magicTap: [{
641
- type: Output
642
- }], accessibilityEscape: [{
643
- type: Output
644
- }], role: [{
645
- type: Input
646
- }], ariaLabel: [{
647
- type: Input
648
- }], ariaLabelledBy: [{
649
- type: Input
650
- }], ariaLive: [{
651
- type: Input
652
- }], ariaHidden: [{
653
- type: Input
654
- }], ariaBusy: [{
655
- type: Input
656
- }], ariaChecked: [{
657
- type: Input
658
- }], ariaDisabled: [{
659
- type: Input
660
- }], ariaExpanded: [{
661
- type: Input
662
- }], ariaSelected: [{
663
- type: Input
664
- }], ariaModal: [{
665
- type: Input
666
- }], ariaValueMax: [{
667
- type: Input
668
- }], ariaValueMin: [{
669
- type: Input
670
- }], ariaValueNow: [{
671
- type: Input
672
- }], ariaValueText: [{
673
- type: Input
674
241
  }], sectionItemDir: [{
675
242
  type: ContentChild,
676
243
  args: [VSectionItemDirective]