@symbiote-native/angular 0.1.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.
- package/LICENSE +21 -0
- package/README.md +147 -0
- package/build/angular/components/activity-indicator/index.android.d.ts +12 -0
- package/build/angular/components/activity-indicator/index.android.js +21 -0
- package/build/angular/components/activity-indicator/index.android.js.map +1 -0
- package/build/angular/components/activity-indicator/index.d.ts +1 -0
- package/build/angular/components/activity-indicator/index.ios.d.ts +8 -0
- package/build/angular/components/activity-indicator/index.ios.js +21 -0
- package/build/angular/components/activity-indicator/index.ios.js.map +1 -0
- package/build/angular/components/activity-indicator/index.js +4 -0
- package/build/angular/components/activity-indicator/index.js.map +1 -0
- package/build/angular/components/activity-indicator/shared.d.ts +67 -0
- package/build/angular/components/activity-indicator/shared.js +260 -0
- package/build/angular/components/activity-indicator/shared.js.map +1 -0
- package/build/angular/components/button.d.ts +63 -0
- package/build/angular/components/button.js +332 -0
- package/build/angular/components/button.js.map +1 -0
- package/build/angular/components/drawer-layout-android/index.android.d.ts +34 -0
- package/build/angular/components/drawer-layout-android/index.android.js +291 -0
- package/build/angular/components/drawer-layout-android/index.android.js.map +1 -0
- package/build/angular/components/drawer-layout-android/index.d.ts +11 -0
- package/build/angular/components/drawer-layout-android/index.js +109 -0
- package/build/angular/components/drawer-layout-android/index.js.map +1 -0
- package/build/angular/components/drawer-layout-android/shared.d.ts +74 -0
- package/build/angular/components/drawer-layout-android/shared.js +138 -0
- package/build/angular/components/drawer-layout-android/shared.js.map +1 -0
- package/build/angular/components/flat-list/index.d.ts +122 -0
- package/build/angular/components/flat-list/index.js +689 -0
- package/build/angular/components/flat-list/index.js.map +1 -0
- package/build/angular/components/image/index.android.d.ts +10 -0
- package/build/angular/components/image/index.android.js +59 -0
- package/build/angular/components/image/index.android.js.map +1 -0
- package/build/angular/components/image/index.d.ts +1 -0
- package/build/angular/components/image/index.ios.d.ts +10 -0
- package/build/angular/components/image/index.ios.js +59 -0
- package/build/angular/components/image/index.ios.js.map +1 -0
- package/build/angular/components/image/index.js +3 -0
- package/build/angular/components/image/index.js.map +1 -0
- package/build/angular/components/image/shared.d.ts +101 -0
- package/build/angular/components/image/shared.js +408 -0
- package/build/angular/components/image/shared.js.map +1 -0
- package/build/angular/components/image-background.d.ts +81 -0
- package/build/angular/components/image-background.js +418 -0
- package/build/angular/components/image-background.js.map +1 -0
- package/build/angular/components/input-accessory-view.d.ts +59 -0
- package/build/angular/components/input-accessory-view.js +266 -0
- package/build/angular/components/input-accessory-view.js.map +1 -0
- package/build/angular/components/keyboard-avoiding-view.d.ts +82 -0
- package/build/angular/components/keyboard-avoiding-view.js +363 -0
- package/build/angular/components/keyboard-avoiding-view.js.map +1 -0
- package/build/angular/components/modal.d.ts +92 -0
- package/build/angular/components/modal.js +365 -0
- package/build/angular/components/modal.js.map +1 -0
- package/build/angular/components/pressable/index.d.ts +123 -0
- package/build/angular/components/pressable/index.js +421 -0
- package/build/angular/components/pressable/index.js.map +1 -0
- package/build/angular/components/refresh-control.d.ts +86 -0
- package/build/angular/components/refresh-control.js +347 -0
- package/build/angular/components/refresh-control.js.map +1 -0
- package/build/angular/components/safe-area-view.d.ts +57 -0
- package/build/angular/components/safe-area-view.js +253 -0
- package/build/angular/components/safe-area-view.js.map +1 -0
- package/build/angular/components/scroll-view/index.android.d.ts +21 -0
- package/build/angular/components/scroll-view/index.android.js +235 -0
- package/build/angular/components/scroll-view/index.android.js.map +1 -0
- package/build/angular/components/scroll-view/index.d.ts +3 -0
- package/build/angular/components/scroll-view/index.ios.d.ts +9 -0
- package/build/angular/components/scroll-view/index.ios.js +86 -0
- package/build/angular/components/scroll-view/index.ios.js.map +1 -0
- package/build/angular/components/scroll-view/index.js +6 -0
- package/build/angular/components/scroll-view/index.js.map +1 -0
- package/build/angular/components/scroll-view/projection.d.ts +32 -0
- package/build/angular/components/scroll-view/projection.js +312 -0
- package/build/angular/components/scroll-view/projection.js.map +1 -0
- package/build/angular/components/scroll-view/shared.d.ts +230 -0
- package/build/angular/components/scroll-view/shared.js +679 -0
- package/build/angular/components/scroll-view/shared.js.map +1 -0
- package/build/angular/components/scroll-view/sticky-header.d.ts +41 -0
- package/build/angular/components/scroll-view/sticky-header.js +208 -0
- package/build/angular/components/scroll-view/sticky-header.js.map +1 -0
- package/build/angular/components/section-list/index.d.ts +116 -0
- package/build/angular/components/section-list/index.js +641 -0
- package/build/angular/components/section-list/index.js.map +1 -0
- package/build/angular/components/switch/index.android.d.ts +20 -0
- package/build/angular/components/switch/index.android.js +70 -0
- package/build/angular/components/switch/index.android.js.map +1 -0
- package/build/angular/components/switch/index.d.ts +1 -0
- package/build/angular/components/switch/index.ios.d.ts +19 -0
- package/build/angular/components/switch/index.ios.js +69 -0
- package/build/angular/components/switch/index.ios.js.map +1 -0
- package/build/angular/components/switch/index.js +4 -0
- package/build/angular/components/switch/index.js.map +1 -0
- package/build/angular/components/switch/shared.d.ts +40 -0
- package/build/angular/components/switch/shared.js +127 -0
- package/build/angular/components/switch/shared.js.map +1 -0
- package/build/angular/components/text-input.d.ts +153 -0
- package/build/angular/components/text-input.js +604 -0
- package/build/angular/components/text-input.js.map +1 -0
- package/build/angular/components/touchable-native-feedback.d.ts +83 -0
- package/build/angular/components/touchable-native-feedback.js +376 -0
- package/build/angular/components/touchable-native-feedback.js.map +1 -0
- package/build/angular/components/touchable.d.ts +248 -0
- package/build/angular/components/touchable.js +1206 -0
- package/build/angular/components/touchable.js.map +1 -0
- package/build/angular/components/virtualized-list/directives.d.ts +54 -0
- package/build/angular/components/virtualized-list/directives.js +154 -0
- package/build/angular/components/virtualized-list/directives.js.map +1 -0
- package/build/angular/components/virtualized-list/index.d.ts +268 -0
- package/build/angular/components/virtualized-list/index.js +1162 -0
- package/build/angular/components/virtualized-list/index.js.map +1 -0
- package/build/angular/components/virtualized-section-list/directives.d.ts +37 -0
- package/build/angular/components/virtualized-section-list/directives.js +77 -0
- package/build/angular/components/virtualized-section-list/directives.js.map +1 -0
- package/build/angular/components/virtualized-section-list/index.d.ts +178 -0
- package/build/angular/components/virtualized-section-list/index.js +722 -0
- package/build/angular/components/virtualized-section-list/index.js.map +1 -0
- package/build/angular/components.d.ts +39 -0
- package/build/angular/components.js +38 -0
- package/build/angular/components.js.map +1 -0
- package/build/angular/create-portal.d.ts +22 -0
- package/build/angular/create-portal.js +74 -0
- package/build/angular/create-portal.js.map +1 -0
- package/build/angular/create-tunnel.d.ts +34 -0
- package/build/angular/create-tunnel.js +126 -0
- package/build/angular/create-tunnel.js.map +1 -0
- package/build/angular/descriptor-to-angular/index.d.ts +22 -0
- package/build/angular/descriptor-to-angular/index.js +142 -0
- package/build/angular/descriptor-to-angular/index.js.map +1 -0
- package/build/angular/host-instance/index.d.ts +2 -0
- package/build/angular/host-instance/index.js +37 -0
- package/build/angular/host-instance/index.js.map +1 -0
- package/build/angular/index.d.ts +21 -0
- package/build/angular/index.js +42 -0
- package/build/angular/index.js.map +1 -0
- package/build/angular/modules/animated/create-animated-component.d.ts +68 -0
- package/build/angular/modules/animated/create-animated-component.js +429 -0
- package/build/angular/modules/animated/create-animated-component.js.map +1 -0
- package/build/angular/modules/animated/index.d.ts +51 -0
- package/build/angular/modules/animated/index.js +59 -0
- package/build/angular/modules/animated/index.js.map +1 -0
- package/build/angular/modules/app-registry/index.d.ts +7 -0
- package/build/angular/modules/app-registry/index.js +23 -0
- package/build/angular/modules/app-registry/index.js.map +1 -0
- package/build/angular/modules/status-bar.d.ts +20 -0
- package/build/angular/modules/status-bar.js +59 -0
- package/build/angular/modules/status-bar.js.map +1 -0
- package/build/angular/primitives/index.d.ts +63 -0
- package/build/angular/primitives/index.js +189 -0
- package/build/angular/primitives/index.js.map +1 -0
- package/build/angular/primitives/shared.d.ts +89 -0
- package/build/angular/primitives/shared.js +172 -0
- package/build/angular/primitives/shared.js.map +1 -0
- package/build/angular/render.d.ts +11 -0
- package/build/angular/render.js +161 -0
- package/build/angular/render.js.map +1 -0
- package/build/angular/renderer.d.ts +38 -0
- package/build/angular/renderer.js +360 -0
- package/build/angular/renderer.js.map +1 -0
- package/build/angular/services/color-scheme.service.d.ts +16 -0
- package/build/angular/services/color-scheme.service.js +31 -0
- package/build/angular/services/color-scheme.service.js.map +1 -0
- package/build/angular/services/index.d.ts +2 -0
- package/build/angular/services/index.js +3 -0
- package/build/angular/services/index.js.map +1 -0
- package/build/angular/services/window-dimensions.service.d.ts +16 -0
- package/build/angular/services/window-dimensions.service.js +42 -0
- package/build/angular/services/window-dimensions.service.js.map +1 -0
- package/build/components/activity-indicator/index.android.d.ts +9 -0
- package/build/components/activity-indicator/index.android.js +64 -0
- package/build/components/activity-indicator/index.d.ts +1 -0
- package/build/components/activity-indicator/index.ios.d.ts +5 -0
- package/build/components/activity-indicator/index.ios.js +64 -0
- package/build/components/activity-indicator/index.js +3 -0
- package/build/components/activity-indicator/shared.d.ts +64 -0
- package/build/components/activity-indicator/shared.js +424 -0
- package/build/components/button.d.ts +60 -0
- package/build/components/button.js +456 -0
- package/build/components/drawer-layout-android/index.android.d.ts +29 -0
- package/build/components/drawer-layout-android/index.android.js +326 -0
- package/build/components/drawer-layout-android/index.d.ts +8 -0
- package/build/components/drawer-layout-android/index.js +145 -0
- package/build/components/drawer-layout-android/shared.d.ts +71 -0
- package/build/components/drawer-layout-android/shared.js +205 -0
- package/build/components/flat-list/index.d.ts +119 -0
- package/build/components/flat-list/index.js +692 -0
- package/build/components/image/index.android.d.ts +7 -0
- package/build/components/image/index.android.js +88 -0
- package/build/components/image/index.d.ts +1 -0
- package/build/components/image/index.ios.d.ts +7 -0
- package/build/components/image/index.ios.js +88 -0
- package/build/components/image/index.js +2 -0
- package/build/components/image/shared.d.ts +101 -0
- package/build/components/image/shared.js +407 -0
- package/build/components/image-background.d.ts +78 -0
- package/build/components/image-background.js +583 -0
- package/build/components/input-accessory-view.d.ts +56 -0
- package/build/components/input-accessory-view.js +407 -0
- package/build/components/keyboard-avoiding-view.d.ts +79 -0
- package/build/components/keyboard-avoiding-view.js +509 -0
- package/build/components/modal.d.ts +89 -0
- package/build/components/modal.js +534 -0
- package/build/components/pressable/index.d.ts +120 -0
- package/build/components/pressable/index.js +640 -0
- package/build/components/refresh-control.d.ts +83 -0
- package/build/components/refresh-control.js +514 -0
- package/build/components/safe-area-view.d.ts +54 -0
- package/build/components/safe-area-view.js +393 -0
- package/build/components/scroll-view/index.android.d.ts +16 -0
- package/build/components/scroll-view/index.android.js +228 -0
- package/build/components/scroll-view/index.d.ts +3 -0
- package/build/components/scroll-view/index.ios.d.ts +6 -0
- package/build/components/scroll-view/index.ios.js +113 -0
- package/build/components/scroll-view/index.js +5 -0
- package/build/components/scroll-view/projection.d.ts +32 -0
- package/build/components/scroll-view/projection.js +311 -0
- package/build/components/scroll-view/shared.d.ts +225 -0
- package/build/components/scroll-view/shared.js +757 -0
- package/build/components/scroll-view/sticky-header.d.ts +38 -0
- package/build/components/scroll-view/sticky-header.js +257 -0
- package/build/components/section-list/index.d.ts +113 -0
- package/build/components/section-list/index.js +768 -0
- package/build/components/switch/index.android.d.ts +17 -0
- package/build/components/switch/index.android.js +107 -0
- package/build/components/switch/index.d.ts +1 -0
- package/build/components/switch/index.ios.d.ts +16 -0
- package/build/components/switch/index.ios.js +106 -0
- package/build/components/switch/index.js +3 -0
- package/build/components/switch/shared.d.ts +37 -0
- package/build/components/switch/shared.js +176 -0
- package/build/components/text-input.d.ts +150 -0
- package/build/components/text-input.js +826 -0
- package/build/components/touchable-native-feedback.d.ts +80 -0
- package/build/components/touchable-native-feedback.js +550 -0
- package/build/components/touchable.d.ts +241 -0
- package/build/components/touchable.js +1672 -0
- package/build/components/virtualized-list/directives.d.ts +41 -0
- package/build/components/virtualized-list/directives.js +250 -0
- package/build/components/virtualized-list/index.d.ts +265 -0
- package/build/components/virtualized-list/index.js +1344 -0
- package/build/components/virtualized-section-list/directives.d.ts +28 -0
- package/build/components/virtualized-section-list/directives.js +149 -0
- package/build/components/virtualized-section-list/index.d.ts +175 -0
- package/build/components/virtualized-section-list/index.js +854 -0
- package/build/components.d.ts +39 -0
- package/build/components.js +37 -0
- package/build/create-portal.d.ts +17 -0
- package/build/create-portal.js +128 -0
- package/build/create-tunnel.d.ts +29 -0
- package/build/create-tunnel.js +181 -0
- package/build/descriptor-to-angular/index.d.ts +19 -0
- package/build/descriptor-to-angular/index.js +186 -0
- package/build/host-instance/index.d.ts +2 -0
- package/build/host-instance/index.js +36 -0
- package/build/index.d.ts +21 -0
- package/build/index.js +41 -0
- package/build/modules/animated/create-animated-component.d.ts +57 -0
- package/build/modules/animated/create-animated-component.js +490 -0
- package/build/modules/animated/index.d.ts +51 -0
- package/build/modules/animated/index.js +58 -0
- package/build/modules/app-registry/index.d.ts +7 -0
- package/build/modules/app-registry/index.js +22 -0
- package/build/modules/status-bar.d.ts +17 -0
- package/build/modules/status-bar.js +121 -0
- package/build/primitives/index.d.ts +32 -0
- package/build/primitives/index.js +386 -0
- package/build/primitives/shared.d.ts +84 -0
- package/build/primitives/shared.js +231 -0
- package/build/render.d.ts +11 -0
- package/build/render.js +160 -0
- package/build/renderer.d.ts +38 -0
- package/build/renderer.js +359 -0
- package/build/services/color-scheme.service.d.ts +13 -0
- package/build/services/color-scheme.service.js +72 -0
- package/build/services/index.d.ts +2 -0
- package/build/services/index.js +2 -0
- package/build/services/window-dimensions.service.d.ts +13 -0
- package/build/services/window-dimensions.service.js +83 -0
- package/metro-css-parser.cjs +11 -0
- package/package.json +57 -0
- package/src/__tests__/responder-change-detection.test.ts +102 -0
- package/src/__tests__/responder-nested-cd.test.ts +113 -0
- package/src/angular-gaps.test.ts +142 -0
- package/src/angular-imports.test.ts +100 -0
- package/src/components/activity-indicator/activity-indicator-class-style.test.ts +44 -0
- package/src/components/activity-indicator/activity-indicator.test.ts +131 -0
- package/src/components/activity-indicator/index.android.ts +16 -0
- package/src/components/activity-indicator/index.ios.ts +17 -0
- package/src/components/activity-indicator/index.ts +4 -0
- package/src/components/activity-indicator/shared.ts +206 -0
- package/src/components/button.ts +193 -0
- package/src/components/flat-list/column-wrapper-style-class.test.ts +116 -0
- package/src/components/flat-list/flat-list-array-style.test.ts +131 -0
- package/src/components/flat-list/flat-list-class-style.test.ts +74 -0
- package/src/components/flat-list/flat-list-scroll-containment.test.ts +107 -0
- package/src/components/flat-list/flat-list.test.ts +99 -0
- package/src/components/flat-list/index.ts +575 -0
- package/src/components/image/image-class-style.test.ts +46 -0
- package/src/components/image/index.android.ts +48 -0
- package/src/components/image/index.ios.ts +48 -0
- package/src/components/image/index.ts +3 -0
- package/src/components/image/shared.ts +478 -0
- package/src/components/image-background-class-style.test.ts +48 -0
- package/src/components/image-background-style-class.test.ts +79 -0
- package/src/components/image-background.ts +270 -0
- package/src/components/input-accessory-view.test.ts +43 -0
- package/src/components/input-accessory-view.ts +191 -0
- package/src/components/keyboard-avoiding-view.test.ts +54 -0
- package/src/components/keyboard-avoiding-view.ts +308 -0
- package/src/components/modal.test.ts +43 -0
- package/src/components/modal.ts +304 -0
- package/src/components/pressable/index.ts +371 -0
- package/src/components/pressable/pressable.test.ts +85 -0
- package/src/components/refresh-control.test.ts +41 -0
- package/src/components/refresh-control.ts +288 -0
- package/src/components/safe-area-view.test.ts +43 -0
- package/src/components/safe-area-view.ts +178 -0
- package/src/components/scroll-view/android-scroll-view-axis-projection.test.ts +123 -0
- package/src/components/scroll-view/content-container-style-class.test.ts +75 -0
- package/src/components/scroll-view/index.android.ts +190 -0
- package/src/components/scroll-view/index.ios.ts +79 -0
- package/src/components/scroll-view/index.ts +7 -0
- package/src/components/scroll-view/projection.ts +384 -0
- package/src/components/scroll-view/scroll-view-class-style.test.ts +134 -0
- package/src/components/scroll-view/scroll-view-projection.test.ts +194 -0
- package/src/components/scroll-view/shared.ts +836 -0
- package/src/components/scroll-view/sticky-header.ts +230 -0
- package/src/components/section-list/index.ts +445 -0
- package/src/components/switch/android-switch-class.test.ts +42 -0
- package/src/components/switch/index.android.ts +61 -0
- package/src/components/switch/index.ios.ts +60 -0
- package/src/components/switch/index.ts +4 -0
- package/src/components/switch/shared.ts +197 -0
- package/src/components/switch/switch.test.ts +92 -0
- package/src/components/text-input-class-style.test.ts +54 -0
- package/src/components/text-input.ts +536 -0
- package/src/components/touchable-native-feedback.test.ts +49 -0
- package/src/components/touchable-native-feedback.ts +260 -0
- package/src/components/touchable.test.ts +102 -0
- package/src/components/touchable.ts +643 -0
- package/src/components/virtualized-list/directives.ts +169 -0
- package/src/components/virtualized-list/index.ts +1204 -0
- package/src/components/virtualized-list/virtualized-list-class-style.test.ts +76 -0
- package/src/components/virtualized-section-list/directives.ts +91 -0
- package/src/components/virtualized-section-list/index.ts +598 -0
- package/src/components/virtualized-section-list/virtualized-section-list-class-style.test.ts +60 -0
- package/src/components.ts +149 -0
- package/src/create-portal.test.ts +90 -0
- package/src/create-portal.ts +74 -0
- package/src/create-tunnel.test.ts +120 -0
- package/src/create-tunnel.ts +136 -0
- package/src/descriptor-to-angular/descriptor-outlet.test.ts +94 -0
- package/src/descriptor-to-angular/index.ts +190 -0
- package/src/host-instance/host-instance.test.ts +49 -0
- package/src/host-instance/index.ts +36 -0
- package/src/index.ts +257 -0
- package/src/modules/animated/animated-scroll-view.test.ts +85 -0
- package/src/modules/animated/create-animated-component.ts +435 -0
- package/src/modules/animated/index.ts +105 -0
- package/src/modules/app-registry/app-registry.test.ts +106 -0
- package/src/modules/app-registry/index.ts +60 -0
- package/src/modules/status-bar.test.ts +50 -0
- package/src/modules/status-bar.ts +57 -0
- package/src/primitives/index.ts +119 -0
- package/src/primitives/shared.ts +191 -0
- package/src/render.test.ts +147 -0
- package/src/render.ts +224 -0
- package/src/renderer.test.ts +179 -0
- package/src/renderer.ts +407 -0
- package/src/services/color-scheme.service.ts +27 -0
- package/src/services/index.ts +2 -0
- package/src/services/services.test.ts +163 -0
- package/src/services/window-dimensions.service.ts +41 -0
|
@@ -0,0 +1,722 @@
|
|
|
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. This is the per-adapter children/render split of
|
|
16
|
+
// <prop_types_split_agnostic_vs_per_adapter>: only the cell-AUTHORING shape is framework-specific.
|
|
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';
|
|
21
|
+
import { flattenSections, scrollLocationToFlatIndex, sectionEntryKey, unwrapEntryItem, } from '@symbiote-native/components';
|
|
22
|
+
import { Platform, dlog, } from '@symbiote-native/engine';
|
|
23
|
+
import { VirtualizedList, VListEmptyDirective, VListFooterDirective, VListHeaderDirective, VListItemDirective, VListSeparatorDirective, } from '../virtualized-list';
|
|
24
|
+
import { VListOutletDirective } from '../virtualized-list/directives';
|
|
25
|
+
import { stableAnchorStyle } from '../../primitives';
|
|
26
|
+
import { VSectionFooterDirective, VSectionHeaderDirective, VSectionItemDirective, VSectionSeparatorDirective, } from './directives';
|
|
27
|
+
import * as i0 from "@angular/core";
|
|
28
|
+
// Re-export the section authoring directives + their contexts so flat consumers (and SectionList)
|
|
29
|
+
// import them from '../virtualized-section-list', mirroring how VirtualizedList re-exports its own.
|
|
30
|
+
export { VSectionFooterDirective, VSectionHeaderDirective, VSectionItemDirective, VSectionSeparatorDirective, } from './directives';
|
|
31
|
+
export class VirtualizedSectionList {
|
|
32
|
+
sections;
|
|
33
|
+
keyExtractor;
|
|
34
|
+
stickySectionHeadersEnabled;
|
|
35
|
+
extraData;
|
|
36
|
+
endReached = new EventEmitter();
|
|
37
|
+
onEndReachedThreshold;
|
|
38
|
+
startReached = new EventEmitter();
|
|
39
|
+
onStartReachedThreshold;
|
|
40
|
+
refresh = new EventEmitter();
|
|
41
|
+
refreshing;
|
|
42
|
+
progressViewOffset;
|
|
43
|
+
// See VirtualizedList's own refreshRequested doc comment: `(refresh)="resolvedOnRefresh?.()"`
|
|
44
|
+
// above always subscribes to the inner VirtualizedList's refresh output (to re-forward it),
|
|
45
|
+
// which would otherwise make its `.observed` permanently true. SectionList passes ITS OWN
|
|
46
|
+
// public `refresh.observed` here; direct usage falls back to this component's own `.observed`.
|
|
47
|
+
refreshRequested;
|
|
48
|
+
initialNumToRender;
|
|
49
|
+
initialScrollIndex;
|
|
50
|
+
maxToRenderPerBatch;
|
|
51
|
+
updateCellsBatchingPeriod;
|
|
52
|
+
windowSize;
|
|
53
|
+
inverted;
|
|
54
|
+
maintainVisibleContentPosition;
|
|
55
|
+
onScroll;
|
|
56
|
+
onScrollBeginDrag;
|
|
57
|
+
onScrollEndDrag;
|
|
58
|
+
onMomentumScrollBegin;
|
|
59
|
+
onMomentumScrollEnd;
|
|
60
|
+
scrollEventThrottle;
|
|
61
|
+
keyboardShouldPersistTaps;
|
|
62
|
+
keyboardDismissMode;
|
|
63
|
+
style;
|
|
64
|
+
contentContainerStyle;
|
|
65
|
+
testID;
|
|
66
|
+
nativeID;
|
|
67
|
+
// Bound to the template's `[style]="resolvedStyle"`, which Angular compiles to the built-in
|
|
68
|
+
// ɵɵstyleMap instruction — it only understands a flat object, never an array (RN's own
|
|
69
|
+
// `style={[a, b]}` composition idiom crashes deep inside Angular's styling engine), so this
|
|
70
|
+
// flattens `style` via the engine's own flattenStyle before it ever reaches that binding.
|
|
71
|
+
// anchorHostStyle merges in this component's OWN anchor's class-derived style (see its doc
|
|
72
|
+
// comment) — `elementRef` below is VirtualizedSectionList's OWN host, not `list`'s inner
|
|
73
|
+
// VirtualizedList. A plain `flattenStyle([...])` here would allocate a FRESH object on every
|
|
74
|
+
// getter read, which — bound onto the inner VirtualizedList's own `@Input() style` — defeats
|
|
75
|
+
// its `ngDoCheck` dedup gate and free-runs change detection forever (see stableAnchorStyle's
|
|
76
|
+
// doc comment and the `flat-list-array-style.test.ts` regression it fixes).
|
|
77
|
+
// `cachedResolvedStyle` is the getter's own persisted "previous" value across reads.
|
|
78
|
+
cachedResolvedStyle;
|
|
79
|
+
get resolvedStyle() {
|
|
80
|
+
this.cachedResolvedStyle = stableAnchorStyle(this.elementRef, this.style, this.cachedResolvedStyle);
|
|
81
|
+
return this.cachedResolvedStyle;
|
|
82
|
+
}
|
|
83
|
+
accessible;
|
|
84
|
+
accessibilityLabel;
|
|
85
|
+
accessibilityHint;
|
|
86
|
+
accessibilityRole;
|
|
87
|
+
accessibilityState;
|
|
88
|
+
accessibilityValue;
|
|
89
|
+
accessibilityActions;
|
|
90
|
+
accessibilityLabelledBy;
|
|
91
|
+
importantForAccessibility;
|
|
92
|
+
accessibilityLiveRegion;
|
|
93
|
+
screenReaderFocusable;
|
|
94
|
+
accessibilityViewIsModal;
|
|
95
|
+
accessibilityElementsHidden;
|
|
96
|
+
accessibilityIgnoresInvertColors;
|
|
97
|
+
accessibilityLanguage;
|
|
98
|
+
accessibilityRespondsToUserInteraction;
|
|
99
|
+
accessibilityShowsLargeContentViewer;
|
|
100
|
+
accessibilityLargeContentTitle;
|
|
101
|
+
accessibilityAction = new EventEmitter();
|
|
102
|
+
accessibilityTap = new EventEmitter();
|
|
103
|
+
magicTap = new EventEmitter();
|
|
104
|
+
accessibilityEscape = new EventEmitter();
|
|
105
|
+
role;
|
|
106
|
+
ariaLabel;
|
|
107
|
+
ariaLabelledBy;
|
|
108
|
+
ariaLive;
|
|
109
|
+
ariaHidden;
|
|
110
|
+
ariaBusy;
|
|
111
|
+
ariaChecked;
|
|
112
|
+
ariaDisabled;
|
|
113
|
+
ariaExpanded;
|
|
114
|
+
ariaSelected;
|
|
115
|
+
ariaModal;
|
|
116
|
+
ariaValueMax;
|
|
117
|
+
ariaValueMin;
|
|
118
|
+
ariaValueNow;
|
|
119
|
+
ariaValueText;
|
|
120
|
+
// The section cell templates the app authors (the Angular twin of renderItem /
|
|
121
|
+
// renderSectionHeader / renderSectionFooter / SectionSeparatorComponent), captured from projected
|
|
122
|
+
// <ng-template> content and stamped by the synthesized vListItem dispatch.
|
|
123
|
+
sectionItemDir;
|
|
124
|
+
sectionHeaderDir;
|
|
125
|
+
sectionFooterDir;
|
|
126
|
+
sectionSeparatorDir;
|
|
127
|
+
// list-level slots reuse VirtualizedList's own directives; VSL forwards them to the inner list.
|
|
128
|
+
listHeaderDir;
|
|
129
|
+
listFooterDir;
|
|
130
|
+
listEmptyDir;
|
|
131
|
+
itemSeparatorDir;
|
|
132
|
+
// The composed inner VirtualizedList. Its instance IS an IVirtualizedListHandle, so the section
|
|
133
|
+
// handle delegates straight to it. Available from ngAfterViewInit; reads lazily, no-ops pre-commit.
|
|
134
|
+
list;
|
|
135
|
+
// This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
|
|
136
|
+
// onto (see anchorHostStyle's doc comment) — NOT `list` above, which targets the real inner
|
|
137
|
+
// `<VirtualizedList>` one level down (itself its own separate anchor host).
|
|
138
|
+
elementRef = inject(ElementRef);
|
|
139
|
+
// --- template-bound state, recomputed in ngDoCheck when sections / separator presence change ---
|
|
140
|
+
flatEntries = [];
|
|
141
|
+
stickyHeaderIndices = undefined;
|
|
142
|
+
// headerIndices are the flat positions of every section header; scrollToLocation maps a
|
|
143
|
+
// (sectionIndex, itemIndex) coordinate through them without re-deriving the flat layout.
|
|
144
|
+
headerIndices = [];
|
|
145
|
+
// Memo guards so flattenSections does not re-run on every CD (the inner list marks for check on
|
|
146
|
+
// every scroll tick, which re-runs VSL's ngDoCheck too).
|
|
147
|
+
lastSectionsRef = null;
|
|
148
|
+
lastHasSectionSeparator = false;
|
|
149
|
+
cdr = inject(ChangeDetectorRef);
|
|
150
|
+
ngDoCheck() {
|
|
151
|
+
const hasSectionSeparator = this.sectionSeparatorDir !== undefined;
|
|
152
|
+
if (this.sections === this.lastSectionsRef &&
|
|
153
|
+
hasSectionSeparator === this.lastHasSectionSeparator) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
this.lastSectionsRef = this.sections;
|
|
157
|
+
this.lastHasSectionSeparator = hasSectionSeparator;
|
|
158
|
+
const sections = this.sections ?? [];
|
|
159
|
+
const { entries, headerIndices } = flattenSections(sections, hasSectionSeparator);
|
|
160
|
+
this.flatEntries = entries;
|
|
161
|
+
this.headerIndices = headerIndices;
|
|
162
|
+
// RN sticks section headers by default only on iOS; Android does not unless asked.
|
|
163
|
+
const stickyDefault = Platform.OS === 'ios';
|
|
164
|
+
const stickyEnabled = this.stickySectionHeadersEnabled ?? stickyDefault;
|
|
165
|
+
this.stickyHeaderIndices = stickyEnabled ? headerIndices : undefined;
|
|
166
|
+
dlog(`Angular VirtualizedSectionList: ${sections.length} sections flattened to ${entries.length} entries`);
|
|
167
|
+
this.cdr.markForCheck();
|
|
168
|
+
}
|
|
169
|
+
// The derived flat-stream accessors handed to the inner VirtualizedList. Stable arrow fields so
|
|
170
|
+
// the bindings keep a constant identity; they read the live flatEntries.
|
|
171
|
+
getEntry = (_source, index) => this.flatEntries[index];
|
|
172
|
+
getEntryCount = () => this.flatEntries.length;
|
|
173
|
+
entryKeyExtractor = (entry, index) => sectionEntryKey(entry, index, this.keyExtractor);
|
|
174
|
+
// Adapts each @Output() into the plain callback VirtualizedList's own @Input() still wants,
|
|
175
|
+
// gated on `.observed` so an unlistened event forwards `undefined` — the same "nobody cares"
|
|
176
|
+
// contract the old @Input() callback passthrough had (e.g. onRefresh presence gates whether a
|
|
177
|
+
// RefreshControl is built downstream; see the Vue twin's `listens('onRefresh')` gate).
|
|
178
|
+
get resolvedOnEndReached() {
|
|
179
|
+
return this.endReached.observed ? info => this.endReached.emit(info) : undefined;
|
|
180
|
+
}
|
|
181
|
+
get resolvedOnStartReached() {
|
|
182
|
+
return this.startReached.observed ? info => this.startReached.emit(info) : undefined;
|
|
183
|
+
}
|
|
184
|
+
get resolvedOnRefresh() {
|
|
185
|
+
return this.refresh.observed ? () => this.refresh.emit() : undefined;
|
|
186
|
+
}
|
|
187
|
+
get resolvedOnAccessibilityAction() {
|
|
188
|
+
return this.accessibilityAction.observed
|
|
189
|
+
? event => this.accessibilityAction.emit(event)
|
|
190
|
+
: undefined;
|
|
191
|
+
}
|
|
192
|
+
get resolvedOnAccessibilityTap() {
|
|
193
|
+
return this.accessibilityTap.observed ? event => this.accessibilityTap.emit(event) : undefined;
|
|
194
|
+
}
|
|
195
|
+
get resolvedOnMagicTap() {
|
|
196
|
+
return this.magicTap.observed ? event => this.magicTap.emit(event) : undefined;
|
|
197
|
+
}
|
|
198
|
+
get resolvedOnAccessibilityEscape() {
|
|
199
|
+
return this.accessibilityEscape.observed
|
|
200
|
+
? event => this.accessibilityEscape.emit(event)
|
|
201
|
+
: undefined;
|
|
202
|
+
}
|
|
203
|
+
// --- per-cell-tag dispatch (the inner vListItem context is typed `unknown` under strictTemplates,
|
|
204
|
+
// since VListItemDirective's generic is not bound here; narrow with a runtime guard, no casts). ---
|
|
205
|
+
isEntry(value) {
|
|
206
|
+
return typeof value === 'object' && value !== null && 'kind' in value;
|
|
207
|
+
}
|
|
208
|
+
entryKind(value) {
|
|
209
|
+
return this.isEntry(value) ? value.kind : 'unknown';
|
|
210
|
+
}
|
|
211
|
+
sectionContextOf(value) {
|
|
212
|
+
if (!this.isEntry(value))
|
|
213
|
+
return undefined;
|
|
214
|
+
if (value.kind !== 'header' && value.kind !== 'footer')
|
|
215
|
+
return undefined;
|
|
216
|
+
return { $implicit: value.section, section: value.section };
|
|
217
|
+
}
|
|
218
|
+
itemContextOf(value, separators) {
|
|
219
|
+
if (!this.isEntry(value) || value.kind !== 'item')
|
|
220
|
+
return undefined;
|
|
221
|
+
return {
|
|
222
|
+
$implicit: value.item,
|
|
223
|
+
item: value.item,
|
|
224
|
+
index: value.itemIndex,
|
|
225
|
+
section: value.section,
|
|
226
|
+
separators,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// The inner list's separator context carries the flattened ENTRY as leading/trailing; unwrap each
|
|
230
|
+
// back to its ItemT (shared unwrapEntryItem) so the app's item separator, typed on ItemT, sees
|
|
231
|
+
// real items (header/footer/section-separator gaps unwrap to undefined). Mirrors the React/Vue
|
|
232
|
+
// entrySeparatorComponent wrap.
|
|
233
|
+
itemSeparatorContextOf(highlighted, leadingItem, trailingItem) {
|
|
234
|
+
return {
|
|
235
|
+
$implicit: highlighted === true,
|
|
236
|
+
highlighted: highlighted === true,
|
|
237
|
+
leadingItem: this.isEntry(leadingItem) ? unwrapEntryItem(leadingItem) : undefined,
|
|
238
|
+
trailingItem: this.isEntry(trailingItem) ? unwrapEntryItem(trailingItem) : undefined,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// ---- imperative handle (the shared IVirtualizedSectionListHandle surface) ----
|
|
242
|
+
scrollToLocation(params) {
|
|
243
|
+
const flatIndex = scrollLocationToFlatIndex(this.headerIndices, params.sectionIndex, params.itemIndex);
|
|
244
|
+
if (flatIndex === undefined) {
|
|
245
|
+
dlog(`Angular VirtualizedSectionList scrollToLocation: section ${params.sectionIndex} out of range`);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
dlog(`Angular VirtualizedSectionList scrollToLocation section=${params.sectionIndex} ` +
|
|
249
|
+
`item=${params.itemIndex} -> flat ${flatIndex}`);
|
|
250
|
+
this.list?.scrollToIndex({
|
|
251
|
+
index: flatIndex,
|
|
252
|
+
viewOffset: params.viewOffset,
|
|
253
|
+
viewPosition: params.viewPosition,
|
|
254
|
+
animated: params.animated,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
flashScrollIndicators() {
|
|
258
|
+
this.list?.flashScrollIndicators();
|
|
259
|
+
}
|
|
260
|
+
getNativeScrollRef() {
|
|
261
|
+
return this.list?.getNativeScrollRef() ?? null;
|
|
262
|
+
}
|
|
263
|
+
getScrollableNode() {
|
|
264
|
+
return this.list?.getScrollableNode() ?? null;
|
|
265
|
+
}
|
|
266
|
+
getScrollResponder() {
|
|
267
|
+
return this.list?.getScrollResponder() ?? null;
|
|
268
|
+
}
|
|
269
|
+
getScrollNode() {
|
|
270
|
+
return this.list?.getScrollNode() ?? null;
|
|
271
|
+
}
|
|
272
|
+
recordInteraction() {
|
|
273
|
+
this.list?.recordInteraction();
|
|
274
|
+
}
|
|
275
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: VirtualizedSectionList, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
276
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: VirtualizedSectionList, isStandalone: true, selector: "VirtualizedSectionList", inputs: { sections: "sections", keyExtractor: "keyExtractor", 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", 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 }], ngImport: i0, template: `
|
|
277
|
+
<VirtualizedList
|
|
278
|
+
[data]="flatEntries"
|
|
279
|
+
[getItem]="getEntry"
|
|
280
|
+
[getItemCount]="getEntryCount"
|
|
281
|
+
[keyExtractor]="entryKeyExtractor"
|
|
282
|
+
[stickyHeaderIndices]="stickyHeaderIndices"
|
|
283
|
+
[extraData]="extraData"
|
|
284
|
+
[inverted]="inverted"
|
|
285
|
+
[refreshing]="refreshing"
|
|
286
|
+
[progressViewOffset]="progressViewOffset"
|
|
287
|
+
[refreshRequested]="refreshRequested ?? refresh.observed"
|
|
288
|
+
(refresh)="resolvedOnRefresh?.()"
|
|
289
|
+
(endReached)="resolvedOnEndReached?.($event)"
|
|
290
|
+
[onEndReachedThreshold]="onEndReachedThreshold"
|
|
291
|
+
(startReached)="resolvedOnStartReached?.($event)"
|
|
292
|
+
[onStartReachedThreshold]="onStartReachedThreshold"
|
|
293
|
+
[initialNumToRender]="initialNumToRender"
|
|
294
|
+
[initialScrollIndex]="initialScrollIndex"
|
|
295
|
+
[maxToRenderPerBatch]="maxToRenderPerBatch"
|
|
296
|
+
[updateCellsBatchingPeriod]="updateCellsBatchingPeriod"
|
|
297
|
+
[windowSize]="windowSize"
|
|
298
|
+
[maintainVisibleContentPosition]="maintainVisibleContentPosition"
|
|
299
|
+
[onScroll]="onScroll"
|
|
300
|
+
[onScrollBeginDrag]="onScrollBeginDrag"
|
|
301
|
+
[onScrollEndDrag]="onScrollEndDrag"
|
|
302
|
+
[onMomentumScrollBegin]="onMomentumScrollBegin"
|
|
303
|
+
[onMomentumScrollEnd]="onMomentumScrollEnd"
|
|
304
|
+
[scrollEventThrottle]="scrollEventThrottle"
|
|
305
|
+
[keyboardShouldPersistTaps]="keyboardShouldPersistTaps"
|
|
306
|
+
[keyboardDismissMode]="keyboardDismissMode"
|
|
307
|
+
[style]="resolvedStyle"
|
|
308
|
+
[contentContainerStyle]="contentContainerStyle"
|
|
309
|
+
[testID]="testID"
|
|
310
|
+
[nativeID]="nativeID"
|
|
311
|
+
[accessible]="accessible"
|
|
312
|
+
[accessibilityLabel]="accessibilityLabel"
|
|
313
|
+
[accessibilityHint]="accessibilityHint"
|
|
314
|
+
[accessibilityRole]="accessibilityRole"
|
|
315
|
+
[accessibilityState]="accessibilityState"
|
|
316
|
+
[accessibilityValue]="accessibilityValue"
|
|
317
|
+
[accessibilityActions]="accessibilityActions"
|
|
318
|
+
[accessibilityLabelledBy]="accessibilityLabelledBy"
|
|
319
|
+
[importantForAccessibility]="importantForAccessibility"
|
|
320
|
+
[accessibilityLiveRegion]="accessibilityLiveRegion"
|
|
321
|
+
[screenReaderFocusable]="screenReaderFocusable"
|
|
322
|
+
[accessibilityViewIsModal]="accessibilityViewIsModal"
|
|
323
|
+
[accessibilityElementsHidden]="accessibilityElementsHidden"
|
|
324
|
+
[accessibilityIgnoresInvertColors]="accessibilityIgnoresInvertColors"
|
|
325
|
+
[accessibilityLanguage]="accessibilityLanguage"
|
|
326
|
+
[accessibilityRespondsToUserInteraction]="accessibilityRespondsToUserInteraction"
|
|
327
|
+
[accessibilityShowsLargeContentViewer]="accessibilityShowsLargeContentViewer"
|
|
328
|
+
[accessibilityLargeContentTitle]="accessibilityLargeContentTitle"
|
|
329
|
+
(accessibilityAction)="resolvedOnAccessibilityAction?.($event)"
|
|
330
|
+
(accessibilityTap)="resolvedOnAccessibilityTap?.($event)"
|
|
331
|
+
(magicTap)="resolvedOnMagicTap?.($event)"
|
|
332
|
+
(accessibilityEscape)="resolvedOnAccessibilityEscape?.($event)"
|
|
333
|
+
[role]="role"
|
|
334
|
+
[ariaLabel]="ariaLabel"
|
|
335
|
+
[ariaLabelledBy]="ariaLabelledBy"
|
|
336
|
+
[ariaLive]="ariaLive"
|
|
337
|
+
[ariaHidden]="ariaHidden"
|
|
338
|
+
[ariaBusy]="ariaBusy"
|
|
339
|
+
[ariaChecked]="ariaChecked"
|
|
340
|
+
[ariaDisabled]="ariaDisabled"
|
|
341
|
+
[ariaExpanded]="ariaExpanded"
|
|
342
|
+
[ariaSelected]="ariaSelected"
|
|
343
|
+
[ariaModal]="ariaModal"
|
|
344
|
+
[ariaValueMax]="ariaValueMax"
|
|
345
|
+
[ariaValueMin]="ariaValueMin"
|
|
346
|
+
[ariaValueNow]="ariaValueNow"
|
|
347
|
+
[ariaValueText]="ariaValueText"
|
|
348
|
+
>
|
|
349
|
+
<!-- The single synthesized cell template: dispatch per flattened entry tag. -->
|
|
350
|
+
<ng-template vListItem let-entry let-separators="separators">
|
|
351
|
+
@switch (entryKind(entry)) {
|
|
352
|
+
@case ('header') {
|
|
353
|
+
<ng-container
|
|
354
|
+
[vListOutlet]="sectionHeaderDir?.templateRef"
|
|
355
|
+
[vListOutletContext]="sectionContextOf(entry)"
|
|
356
|
+
></ng-container>
|
|
357
|
+
}
|
|
358
|
+
@case ('footer') {
|
|
359
|
+
<ng-container
|
|
360
|
+
[vListOutlet]="sectionFooterDir?.templateRef"
|
|
361
|
+
[vListOutletContext]="sectionContextOf(entry)"
|
|
362
|
+
></ng-container>
|
|
363
|
+
}
|
|
364
|
+
@case ('section-separator') {
|
|
365
|
+
<ng-container [vListOutlet]="sectionSeparatorDir?.templateRef"></ng-container>
|
|
366
|
+
}
|
|
367
|
+
@case ('item') {
|
|
368
|
+
<ng-container
|
|
369
|
+
[vListOutlet]="sectionItemDir?.templateRef"
|
|
370
|
+
[vListOutletContext]="itemContextOf(entry, separators)"
|
|
371
|
+
></ng-container>
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
</ng-template>
|
|
375
|
+
|
|
376
|
+
<!-- list-level slots: forward the app's VirtualizedList directives to the inner list. -->
|
|
377
|
+
@if (listHeaderDir !== undefined) {
|
|
378
|
+
<ng-template vListHeader>
|
|
379
|
+
<ng-container [vListOutlet]="listHeaderDir.templateRef"></ng-container>
|
|
380
|
+
</ng-template>
|
|
381
|
+
}
|
|
382
|
+
@if (listFooterDir !== undefined) {
|
|
383
|
+
<ng-template vListFooter>
|
|
384
|
+
<ng-container [vListOutlet]="listFooterDir.templateRef"></ng-container>
|
|
385
|
+
</ng-template>
|
|
386
|
+
}
|
|
387
|
+
@if (listEmptyDir !== undefined) {
|
|
388
|
+
<ng-template vListEmpty>
|
|
389
|
+
<ng-container [vListOutlet]="listEmptyDir.templateRef"></ng-container>
|
|
390
|
+
</ng-template>
|
|
391
|
+
}
|
|
392
|
+
<!-- item separator: forward, unwrapping each flattened entry back to its ItemT. -->
|
|
393
|
+
@if (itemSeparatorDir !== undefined) {
|
|
394
|
+
<ng-template
|
|
395
|
+
vListSeparator
|
|
396
|
+
let-highlighted
|
|
397
|
+
let-leadingItem="leadingItem"
|
|
398
|
+
let-trailingItem="trailingItem"
|
|
399
|
+
>
|
|
400
|
+
<ng-container
|
|
401
|
+
[vListOutlet]="itemSeparatorDir.templateRef"
|
|
402
|
+
[vListOutletContext]="itemSeparatorContextOf(highlighted, leadingItem, trailingItem)"
|
|
403
|
+
></ng-container>
|
|
404
|
+
</ng-template>
|
|
405
|
+
}
|
|
406
|
+
</VirtualizedList>
|
|
407
|
+
`, 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", "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"], 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
408
|
+
}
|
|
409
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: VirtualizedSectionList, decorators: [{
|
|
410
|
+
type: Component,
|
|
411
|
+
args: [{
|
|
412
|
+
selector: 'VirtualizedSectionList',
|
|
413
|
+
standalone: true,
|
|
414
|
+
imports: [
|
|
415
|
+
VirtualizedList,
|
|
416
|
+
VListItemDirective,
|
|
417
|
+
VListHeaderDirective,
|
|
418
|
+
VListFooterDirective,
|
|
419
|
+
VListEmptyDirective,
|
|
420
|
+
VListSeparatorDirective,
|
|
421
|
+
VListOutletDirective,
|
|
422
|
+
],
|
|
423
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
424
|
+
template: `
|
|
425
|
+
<VirtualizedList
|
|
426
|
+
[data]="flatEntries"
|
|
427
|
+
[getItem]="getEntry"
|
|
428
|
+
[getItemCount]="getEntryCount"
|
|
429
|
+
[keyExtractor]="entryKeyExtractor"
|
|
430
|
+
[stickyHeaderIndices]="stickyHeaderIndices"
|
|
431
|
+
[extraData]="extraData"
|
|
432
|
+
[inverted]="inverted"
|
|
433
|
+
[refreshing]="refreshing"
|
|
434
|
+
[progressViewOffset]="progressViewOffset"
|
|
435
|
+
[refreshRequested]="refreshRequested ?? refresh.observed"
|
|
436
|
+
(refresh)="resolvedOnRefresh?.()"
|
|
437
|
+
(endReached)="resolvedOnEndReached?.($event)"
|
|
438
|
+
[onEndReachedThreshold]="onEndReachedThreshold"
|
|
439
|
+
(startReached)="resolvedOnStartReached?.($event)"
|
|
440
|
+
[onStartReachedThreshold]="onStartReachedThreshold"
|
|
441
|
+
[initialNumToRender]="initialNumToRender"
|
|
442
|
+
[initialScrollIndex]="initialScrollIndex"
|
|
443
|
+
[maxToRenderPerBatch]="maxToRenderPerBatch"
|
|
444
|
+
[updateCellsBatchingPeriod]="updateCellsBatchingPeriod"
|
|
445
|
+
[windowSize]="windowSize"
|
|
446
|
+
[maintainVisibleContentPosition]="maintainVisibleContentPosition"
|
|
447
|
+
[onScroll]="onScroll"
|
|
448
|
+
[onScrollBeginDrag]="onScrollBeginDrag"
|
|
449
|
+
[onScrollEndDrag]="onScrollEndDrag"
|
|
450
|
+
[onMomentumScrollBegin]="onMomentumScrollBegin"
|
|
451
|
+
[onMomentumScrollEnd]="onMomentumScrollEnd"
|
|
452
|
+
[scrollEventThrottle]="scrollEventThrottle"
|
|
453
|
+
[keyboardShouldPersistTaps]="keyboardShouldPersistTaps"
|
|
454
|
+
[keyboardDismissMode]="keyboardDismissMode"
|
|
455
|
+
[style]="resolvedStyle"
|
|
456
|
+
[contentContainerStyle]="contentContainerStyle"
|
|
457
|
+
[testID]="testID"
|
|
458
|
+
[nativeID]="nativeID"
|
|
459
|
+
[accessible]="accessible"
|
|
460
|
+
[accessibilityLabel]="accessibilityLabel"
|
|
461
|
+
[accessibilityHint]="accessibilityHint"
|
|
462
|
+
[accessibilityRole]="accessibilityRole"
|
|
463
|
+
[accessibilityState]="accessibilityState"
|
|
464
|
+
[accessibilityValue]="accessibilityValue"
|
|
465
|
+
[accessibilityActions]="accessibilityActions"
|
|
466
|
+
[accessibilityLabelledBy]="accessibilityLabelledBy"
|
|
467
|
+
[importantForAccessibility]="importantForAccessibility"
|
|
468
|
+
[accessibilityLiveRegion]="accessibilityLiveRegion"
|
|
469
|
+
[screenReaderFocusable]="screenReaderFocusable"
|
|
470
|
+
[accessibilityViewIsModal]="accessibilityViewIsModal"
|
|
471
|
+
[accessibilityElementsHidden]="accessibilityElementsHidden"
|
|
472
|
+
[accessibilityIgnoresInvertColors]="accessibilityIgnoresInvertColors"
|
|
473
|
+
[accessibilityLanguage]="accessibilityLanguage"
|
|
474
|
+
[accessibilityRespondsToUserInteraction]="accessibilityRespondsToUserInteraction"
|
|
475
|
+
[accessibilityShowsLargeContentViewer]="accessibilityShowsLargeContentViewer"
|
|
476
|
+
[accessibilityLargeContentTitle]="accessibilityLargeContentTitle"
|
|
477
|
+
(accessibilityAction)="resolvedOnAccessibilityAction?.($event)"
|
|
478
|
+
(accessibilityTap)="resolvedOnAccessibilityTap?.($event)"
|
|
479
|
+
(magicTap)="resolvedOnMagicTap?.($event)"
|
|
480
|
+
(accessibilityEscape)="resolvedOnAccessibilityEscape?.($event)"
|
|
481
|
+
[role]="role"
|
|
482
|
+
[ariaLabel]="ariaLabel"
|
|
483
|
+
[ariaLabelledBy]="ariaLabelledBy"
|
|
484
|
+
[ariaLive]="ariaLive"
|
|
485
|
+
[ariaHidden]="ariaHidden"
|
|
486
|
+
[ariaBusy]="ariaBusy"
|
|
487
|
+
[ariaChecked]="ariaChecked"
|
|
488
|
+
[ariaDisabled]="ariaDisabled"
|
|
489
|
+
[ariaExpanded]="ariaExpanded"
|
|
490
|
+
[ariaSelected]="ariaSelected"
|
|
491
|
+
[ariaModal]="ariaModal"
|
|
492
|
+
[ariaValueMax]="ariaValueMax"
|
|
493
|
+
[ariaValueMin]="ariaValueMin"
|
|
494
|
+
[ariaValueNow]="ariaValueNow"
|
|
495
|
+
[ariaValueText]="ariaValueText"
|
|
496
|
+
>
|
|
497
|
+
<!-- The single synthesized cell template: dispatch per flattened entry tag. -->
|
|
498
|
+
<ng-template vListItem let-entry let-separators="separators">
|
|
499
|
+
@switch (entryKind(entry)) {
|
|
500
|
+
@case ('header') {
|
|
501
|
+
<ng-container
|
|
502
|
+
[vListOutlet]="sectionHeaderDir?.templateRef"
|
|
503
|
+
[vListOutletContext]="sectionContextOf(entry)"
|
|
504
|
+
></ng-container>
|
|
505
|
+
}
|
|
506
|
+
@case ('footer') {
|
|
507
|
+
<ng-container
|
|
508
|
+
[vListOutlet]="sectionFooterDir?.templateRef"
|
|
509
|
+
[vListOutletContext]="sectionContextOf(entry)"
|
|
510
|
+
></ng-container>
|
|
511
|
+
}
|
|
512
|
+
@case ('section-separator') {
|
|
513
|
+
<ng-container [vListOutlet]="sectionSeparatorDir?.templateRef"></ng-container>
|
|
514
|
+
}
|
|
515
|
+
@case ('item') {
|
|
516
|
+
<ng-container
|
|
517
|
+
[vListOutlet]="sectionItemDir?.templateRef"
|
|
518
|
+
[vListOutletContext]="itemContextOf(entry, separators)"
|
|
519
|
+
></ng-container>
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
</ng-template>
|
|
523
|
+
|
|
524
|
+
<!-- list-level slots: forward the app's VirtualizedList directives to the inner list. -->
|
|
525
|
+
@if (listHeaderDir !== undefined) {
|
|
526
|
+
<ng-template vListHeader>
|
|
527
|
+
<ng-container [vListOutlet]="listHeaderDir.templateRef"></ng-container>
|
|
528
|
+
</ng-template>
|
|
529
|
+
}
|
|
530
|
+
@if (listFooterDir !== undefined) {
|
|
531
|
+
<ng-template vListFooter>
|
|
532
|
+
<ng-container [vListOutlet]="listFooterDir.templateRef"></ng-container>
|
|
533
|
+
</ng-template>
|
|
534
|
+
}
|
|
535
|
+
@if (listEmptyDir !== undefined) {
|
|
536
|
+
<ng-template vListEmpty>
|
|
537
|
+
<ng-container [vListOutlet]="listEmptyDir.templateRef"></ng-container>
|
|
538
|
+
</ng-template>
|
|
539
|
+
}
|
|
540
|
+
<!-- item separator: forward, unwrapping each flattened entry back to its ItemT. -->
|
|
541
|
+
@if (itemSeparatorDir !== undefined) {
|
|
542
|
+
<ng-template
|
|
543
|
+
vListSeparator
|
|
544
|
+
let-highlighted
|
|
545
|
+
let-leadingItem="leadingItem"
|
|
546
|
+
let-trailingItem="trailingItem"
|
|
547
|
+
>
|
|
548
|
+
<ng-container
|
|
549
|
+
[vListOutlet]="itemSeparatorDir.templateRef"
|
|
550
|
+
[vListOutletContext]="itemSeparatorContextOf(highlighted, leadingItem, trailingItem)"
|
|
551
|
+
></ng-container>
|
|
552
|
+
</ng-template>
|
|
553
|
+
}
|
|
554
|
+
</VirtualizedList>
|
|
555
|
+
`,
|
|
556
|
+
}]
|
|
557
|
+
}], propDecorators: { sections: [{
|
|
558
|
+
type: Input,
|
|
559
|
+
args: [{ required: true }]
|
|
560
|
+
}], keyExtractor: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], stickySectionHeadersEnabled: [{
|
|
563
|
+
type: Input
|
|
564
|
+
}], extraData: [{
|
|
565
|
+
type: Input
|
|
566
|
+
}], endReached: [{
|
|
567
|
+
type: Output
|
|
568
|
+
}], onEndReachedThreshold: [{
|
|
569
|
+
type: Input
|
|
570
|
+
}], startReached: [{
|
|
571
|
+
type: Output
|
|
572
|
+
}], onStartReachedThreshold: [{
|
|
573
|
+
type: Input
|
|
574
|
+
}], refresh: [{
|
|
575
|
+
type: Output
|
|
576
|
+
}], refreshing: [{
|
|
577
|
+
type: Input
|
|
578
|
+
}], progressViewOffset: [{
|
|
579
|
+
type: Input
|
|
580
|
+
}], refreshRequested: [{
|
|
581
|
+
type: Input
|
|
582
|
+
}], initialNumToRender: [{
|
|
583
|
+
type: Input
|
|
584
|
+
}], initialScrollIndex: [{
|
|
585
|
+
type: Input
|
|
586
|
+
}], maxToRenderPerBatch: [{
|
|
587
|
+
type: Input
|
|
588
|
+
}], updateCellsBatchingPeriod: [{
|
|
589
|
+
type: Input
|
|
590
|
+
}], windowSize: [{
|
|
591
|
+
type: Input
|
|
592
|
+
}], inverted: [{
|
|
593
|
+
type: Input
|
|
594
|
+
}], maintainVisibleContentPosition: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}], onScroll: [{
|
|
597
|
+
type: Input
|
|
598
|
+
}], onScrollBeginDrag: [{
|
|
599
|
+
type: Input
|
|
600
|
+
}], onScrollEndDrag: [{
|
|
601
|
+
type: Input
|
|
602
|
+
}], onMomentumScrollBegin: [{
|
|
603
|
+
type: Input
|
|
604
|
+
}], onMomentumScrollEnd: [{
|
|
605
|
+
type: Input
|
|
606
|
+
}], scrollEventThrottle: [{
|
|
607
|
+
type: Input
|
|
608
|
+
}], keyboardShouldPersistTaps: [{
|
|
609
|
+
type: Input
|
|
610
|
+
}], keyboardDismissMode: [{
|
|
611
|
+
type: Input
|
|
612
|
+
}], style: [{
|
|
613
|
+
type: Input
|
|
614
|
+
}], contentContainerStyle: [{
|
|
615
|
+
type: Input
|
|
616
|
+
}], testID: [{
|
|
617
|
+
type: Input
|
|
618
|
+
}], nativeID: [{
|
|
619
|
+
type: Input
|
|
620
|
+
}], accessible: [{
|
|
621
|
+
type: Input
|
|
622
|
+
}], accessibilityLabel: [{
|
|
623
|
+
type: Input
|
|
624
|
+
}], accessibilityHint: [{
|
|
625
|
+
type: Input
|
|
626
|
+
}], accessibilityRole: [{
|
|
627
|
+
type: Input
|
|
628
|
+
}], accessibilityState: [{
|
|
629
|
+
type: Input
|
|
630
|
+
}], accessibilityValue: [{
|
|
631
|
+
type: Input
|
|
632
|
+
}], accessibilityActions: [{
|
|
633
|
+
type: Input
|
|
634
|
+
}], accessibilityLabelledBy: [{
|
|
635
|
+
type: Input
|
|
636
|
+
}], importantForAccessibility: [{
|
|
637
|
+
type: Input
|
|
638
|
+
}], accessibilityLiveRegion: [{
|
|
639
|
+
type: Input
|
|
640
|
+
}], screenReaderFocusable: [{
|
|
641
|
+
type: Input
|
|
642
|
+
}], accessibilityViewIsModal: [{
|
|
643
|
+
type: Input
|
|
644
|
+
}], accessibilityElementsHidden: [{
|
|
645
|
+
type: Input
|
|
646
|
+
}], accessibilityIgnoresInvertColors: [{
|
|
647
|
+
type: Input
|
|
648
|
+
}], accessibilityLanguage: [{
|
|
649
|
+
type: Input
|
|
650
|
+
}], accessibilityRespondsToUserInteraction: [{
|
|
651
|
+
type: Input
|
|
652
|
+
}], accessibilityShowsLargeContentViewer: [{
|
|
653
|
+
type: Input
|
|
654
|
+
}], accessibilityLargeContentTitle: [{
|
|
655
|
+
type: Input
|
|
656
|
+
}], accessibilityAction: [{
|
|
657
|
+
type: Output
|
|
658
|
+
}], accessibilityTap: [{
|
|
659
|
+
type: Output
|
|
660
|
+
}], magicTap: [{
|
|
661
|
+
type: Output
|
|
662
|
+
}], accessibilityEscape: [{
|
|
663
|
+
type: Output
|
|
664
|
+
}], role: [{
|
|
665
|
+
type: Input
|
|
666
|
+
}], ariaLabel: [{
|
|
667
|
+
type: Input
|
|
668
|
+
}], ariaLabelledBy: [{
|
|
669
|
+
type: Input
|
|
670
|
+
}], ariaLive: [{
|
|
671
|
+
type: Input
|
|
672
|
+
}], ariaHidden: [{
|
|
673
|
+
type: Input
|
|
674
|
+
}], ariaBusy: [{
|
|
675
|
+
type: Input
|
|
676
|
+
}], ariaChecked: [{
|
|
677
|
+
type: Input
|
|
678
|
+
}], ariaDisabled: [{
|
|
679
|
+
type: Input
|
|
680
|
+
}], ariaExpanded: [{
|
|
681
|
+
type: Input
|
|
682
|
+
}], ariaSelected: [{
|
|
683
|
+
type: Input
|
|
684
|
+
}], ariaModal: [{
|
|
685
|
+
type: Input
|
|
686
|
+
}], ariaValueMax: [{
|
|
687
|
+
type: Input
|
|
688
|
+
}], ariaValueMin: [{
|
|
689
|
+
type: Input
|
|
690
|
+
}], ariaValueNow: [{
|
|
691
|
+
type: Input
|
|
692
|
+
}], ariaValueText: [{
|
|
693
|
+
type: Input
|
|
694
|
+
}], sectionItemDir: [{
|
|
695
|
+
type: ContentChild,
|
|
696
|
+
args: [VSectionItemDirective]
|
|
697
|
+
}], sectionHeaderDir: [{
|
|
698
|
+
type: ContentChild,
|
|
699
|
+
args: [VSectionHeaderDirective]
|
|
700
|
+
}], sectionFooterDir: [{
|
|
701
|
+
type: ContentChild,
|
|
702
|
+
args: [VSectionFooterDirective]
|
|
703
|
+
}], sectionSeparatorDir: [{
|
|
704
|
+
type: ContentChild,
|
|
705
|
+
args: [VSectionSeparatorDirective]
|
|
706
|
+
}], listHeaderDir: [{
|
|
707
|
+
type: ContentChild,
|
|
708
|
+
args: [VListHeaderDirective]
|
|
709
|
+
}], listFooterDir: [{
|
|
710
|
+
type: ContentChild,
|
|
711
|
+
args: [VListFooterDirective]
|
|
712
|
+
}], listEmptyDir: [{
|
|
713
|
+
type: ContentChild,
|
|
714
|
+
args: [VListEmptyDirective]
|
|
715
|
+
}], itemSeparatorDir: [{
|
|
716
|
+
type: ContentChild,
|
|
717
|
+
args: [VListSeparatorDirective]
|
|
718
|
+
}], list: [{
|
|
719
|
+
type: ViewChild,
|
|
720
|
+
args: [VirtualizedList]
|
|
721
|
+
}] } });
|
|
722
|
+
//# sourceMappingURL=index.js.map
|