@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 A. Prokopenko
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# @symbiote-native/angular
|
|
2
|
+
|
|
3
|
+
The **Angular adapter** for [SymbioteJS](../../README.md) — render real native iOS/Android views
|
|
4
|
+
from Angular, on the *same* untouched core as React and Vue, with React Native's own renderer
|
|
5
|
+
never in the path. It is a `Renderer2`/`RendererFactory2` whose calls map onto the engine's
|
|
6
|
+
four-call mutation API; `@symbiote-native/engine` does the clone-on-write commit into Fabric.
|
|
7
|
+
|
|
8
|
+
Angular is the **second proof the core is genuinely framework-agnostic** (milestone M4): a third
|
|
9
|
+
framework, with its own change-detection model and AOT compilation pipeline, driving the
|
|
10
|
+
already-validated engine with zero changes to it.
|
|
11
|
+
|
|
12
|
+
<div align="center">
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
> New to SymbioteJS? The [root README](../../README.md) has the architecture.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Use it
|
|
23
|
+
|
|
24
|
+
The native entry reaches the *same* `registerRunnable` seam as React and Vue — only the adapter
|
|
25
|
+
changes. It hands the surface's `rootTag` to `mount` from `@symbiote-native/angular`, which drives the
|
|
26
|
+
engine through Angular's `Renderer2`:
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
// index.js
|
|
30
|
+
import { AppRegistry as RNAppRegistry } from 'react-native';
|
|
31
|
+
import { mount } from '@symbiote-native/angular';
|
|
32
|
+
import { AppComponent } from './App';
|
|
33
|
+
import { name as appName } from './app.json';
|
|
34
|
+
|
|
35
|
+
// registerRunnable (not registerComponent): RN stores a raw mount callback and never renders
|
|
36
|
+
// it with its own renderer. We mount the Angular app onto the surface's rootTag.
|
|
37
|
+
RNAppRegistry.registerRunnable(appName, ({ rootTag }) => {
|
|
38
|
+
mount(rootTag, AppComponent);
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The app is ordinary standalone Angular — it just imports primitives from `@symbiote-native/angular`
|
|
43
|
+
instead of `react-native`. A tap→increment counter:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { Component, signal } from '@angular/core';
|
|
47
|
+
import { View, Text, Pressable } from '@symbiote-native/angular';
|
|
48
|
+
|
|
49
|
+
@Component({
|
|
50
|
+
selector: 'app-root',
|
|
51
|
+
standalone: true,
|
|
52
|
+
imports: [View, Text, Pressable],
|
|
53
|
+
template: `
|
|
54
|
+
<View [style]="{ padding: 24 }">
|
|
55
|
+
<Text>Taps: {{ count() }}</Text>
|
|
56
|
+
<Pressable (press)="count.set(count() + 1)">
|
|
57
|
+
<Text>Tap me</Text>
|
|
58
|
+
</Pressable>
|
|
59
|
+
</View>
|
|
60
|
+
`,
|
|
61
|
+
})
|
|
62
|
+
export class AppComponent {
|
|
63
|
+
count = signal(0);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The full canary is [`examples/angular`](../../examples/angular) — a stock RN 0.86 app whose
|
|
68
|
+
[`App.ts`](../../examples/angular/App.ts) exercises the same surface as the React and Vue
|
|
69
|
+
reference canaries, standalone components, zoneless change detection.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Parity — and the one gap
|
|
74
|
+
|
|
75
|
+
Angular reaches the same 21+ primitives, runtime modules, `Animated` on both drivers, gestures,
|
|
76
|
+
accessibility, and the `VirtualizedList` family as React and Vue. That parity is **structural, not
|
|
77
|
+
hand-copied**: the component logic (state machines + render functions) is written **once** in
|
|
78
|
+
`@symbiote-native/components`, and Angular supplies only its lifecycle (`Renderer2` + zoneless change
|
|
79
|
+
detection + the descriptor→`createElement` bridge).
|
|
80
|
+
|
|
81
|
+
One deliberate gap, tracked, not blocking the canary — **third-party React component packages**
|
|
82
|
+
(`@react-native-community/slider`) run only under the React adapter: their body calls React hooks
|
|
83
|
+
off the React dispatcher, which is null under Angular. `@symbiote-native/slider` (this repo's own
|
|
84
|
+
wrapper) *does* ship a real Angular build, reachable through the same `createNode`-by-ViewConfig
|
|
85
|
+
path Angular uses for its own primitives — that wrapper is what makes a third-party native view
|
|
86
|
+
usable from a non-React adapter at all.
|
|
87
|
+
|
|
88
|
+
Angular is on the docs site's live framework switcher alongside React and Vue — otherwise it's at
|
|
89
|
+
full canary parity.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## An Angular-specific gotcha — AOT compiles separately from Metro
|
|
94
|
+
|
|
95
|
+
Angular templates need `ngc` (Angular's own AOT compiler), which Metro cannot run per-file the way
|
|
96
|
+
it transforms a Vue SFC or JSX — `ngc` needs whole-program `compilationMode: 'partial'` first, then
|
|
97
|
+
`@angular/compiler-cli/linker/babel` drops the linked output into Metro per-file. In practice this
|
|
98
|
+
means every `ios`/`android`/`e2e:build:*` script runs `pnpm ng:build` first, and local development
|
|
99
|
+
needs `ngc --watch` running alongside Metro — `scripts/dev-with-watch.sh` in
|
|
100
|
+
[`examples/angular`](../../examples/angular) does exactly that (`ngc --watch` in the background,
|
|
101
|
+
Metro's `react-native start` in the foreground, since Metro reads raw keypresses off stdin and
|
|
102
|
+
can't sit behind a process manager that owns stdin itself).
|
|
103
|
+
|
|
104
|
+
Angular also requires **zoneless change detection** (`provideZonelessChangeDetection`,
|
|
105
|
+
`@angular/core >=20`) — zone.js fights Hermes, and versions before 20 don't offer a stable
|
|
106
|
+
zoneless API. This is the version floor for the whole adapter, not a suggestion.
|
|
107
|
+
|
|
108
|
+
The full seam map, bootstrap sequence, and AOT pipeline live in the `angular-adapter` project
|
|
109
|
+
skill — read it before touching adapter internals.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Run it
|
|
114
|
+
|
|
115
|
+
[`examples/angular`](../../examples/angular) is a stock React Native 0.86 app. Requires Node ≥
|
|
116
|
+
22.13 and the [RN environment setup](https://reactnative.dev/docs/set-up-your-environment) (Xcode,
|
|
117
|
+
CocoaPods):
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
cd examples/angular
|
|
121
|
+
pnpm install # workspace root already covers this if you ran it there
|
|
122
|
+
bundle install # first time only — installs CocoaPods itself
|
|
123
|
+
bundle exec pod install # fetch native pods
|
|
124
|
+
|
|
125
|
+
# terminal 1 — ngc --watch (background) + Metro (foreground). DEBUG=1 turns on diagnostic logs.
|
|
126
|
+
DEBUG=1 pnpm dev
|
|
127
|
+
|
|
128
|
+
# terminal 2 — build + launch (each runs ng:build first)
|
|
129
|
+
pnpm ios # iOS simulator
|
|
130
|
+
pnpm android # Android emulator
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Test it
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
pnpm test # vitest, from the workspace root — headless, fake Fabric slot
|
|
139
|
+
|
|
140
|
+
cd examples/angular
|
|
141
|
+
pnpm e2e:build:ios # ng:build, then build the app for Detox
|
|
142
|
+
pnpm e2e:test:ios # run the canary journeys on the iOS simulator
|
|
143
|
+
# …or the android equivalents: e2e:build:android / e2e:test:android
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Why these come for free — a SymbioteJS app is a stock RN app underneath, so RN's whole testing
|
|
147
|
+
ecosystem applies unchanged. See [Testing](../../README.md#testing).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ActivityIndicatorBase } from './shared';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type { IActivityIndicatorProps } from './shared';
|
|
4
|
+
export declare class ActivityIndicator extends ActivityIndicatorBase {
|
|
5
|
+
protected readonly defaultColor: null;
|
|
6
|
+
protected readonly nativeExtras: {
|
|
7
|
+
styleAttr: string;
|
|
8
|
+
indeterminate: boolean;
|
|
9
|
+
};
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActivityIndicator, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ActivityIndicator, "ActivityIndicator", never, {}, {}, never, never, true, never>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { DescriptorOutlet } from '../../descriptor-to-angular';
|
|
3
|
+
import { ActivityIndicatorBase } from './shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ActivityIndicator extends ActivityIndicatorBase {
|
|
6
|
+
defaultColor = null;
|
|
7
|
+
nativeExtras = { styleAttr: 'Normal', indeterminate: true };
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicator, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: ActivityIndicator, isStandalone: true, selector: "ActivityIndicator", usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicator, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{
|
|
14
|
+
selector: 'ActivityIndicator',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [DescriptorOutlet],
|
|
17
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
+
template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
//# sourceMappingURL=index.android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../src/components/activity-indicator/index.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;;AAUjD,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IACvC,YAAY,GAAG,IAAI,CAAC;IACX,YAAY,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;uGAF7E,iBAAiB;2FAAjB,iBAAiB,oGAFlB,oDAAoD,4DAFpD,gBAAgB;;2FAIf,iBAAiB;kBAP7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE,oDAAoD;iBAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index.ios';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ActivityIndicatorBase } from './shared';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type { IActivityIndicatorProps } from './shared';
|
|
4
|
+
export declare class ActivityIndicator extends ActivityIndicatorBase {
|
|
5
|
+
protected readonly defaultColor = "#999999";
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActivityIndicator, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ActivityIndicator, "ActivityIndicator", never, {}, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { DescriptorOutlet } from '../../descriptor-to-angular';
|
|
3
|
+
import { ActivityIndicatorBase } from './shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const IOS_DEFAULT_COLOR = '#999999';
|
|
6
|
+
export class ActivityIndicator extends ActivityIndicatorBase {
|
|
7
|
+
defaultColor = IOS_DEFAULT_COLOR;
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicator, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.4", type: ActivityIndicator, isStandalone: true, selector: "ActivityIndicator", usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicator, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{
|
|
14
|
+
selector: 'ActivityIndicator',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [DescriptorOutlet],
|
|
17
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
+
template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
//# sourceMappingURL=index.ios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../src/components/activity-indicator/index.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;;AAGjD,MAAM,iBAAiB,GAAG,SAAS,CAAC;AASpC,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IACvC,YAAY,GAAG,iBAAiB,CAAC;uGADzC,iBAAiB;2FAAjB,iBAAiB,oGAFlB,oDAAoD,4DAFpD,gBAAgB;;2FAIf,iBAAiB;kBAP7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE,oDAAoD;iBAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/activity-indicator/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,sDAAsD;AAEtD,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { type IAccessibilityProps, type IAccessibilityStateValue, type IActivityIndicatorProps, type IActivityIndicatorSize, type IAriaProps } from '@symbiote-native/components';
|
|
3
|
+
import type { ISymbioteEvent } from '@symbiote-native/engine';
|
|
4
|
+
import type { IDescriptor } from '@symbiote-native/components';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export type { IActivityIndicatorProps, IActivityIndicatorSize } from '@symbiote-native/components';
|
|
7
|
+
export type IActivityIndicatorInputs = Omit<IActivityIndicatorProps, 'onLayout' | 'onAccessibilityAction' | 'onAccessibilityTap' | 'onMagicTap' | 'onAccessibilityEscape'>;
|
|
8
|
+
export declare abstract class ActivityIndicatorBase implements IActivityIndicatorInputs {
|
|
9
|
+
animating?: boolean;
|
|
10
|
+
color?: string;
|
|
11
|
+
hidesWhenStopped?: boolean;
|
|
12
|
+
nativeID?: string;
|
|
13
|
+
size?: IActivityIndicatorSize;
|
|
14
|
+
style?: IActivityIndicatorProps['style'];
|
|
15
|
+
testID?: string;
|
|
16
|
+
readonly layout: EventEmitter<ISymbioteEvent>;
|
|
17
|
+
accessible?: boolean;
|
|
18
|
+
accessibilityLabel?: string;
|
|
19
|
+
accessibilityHint?: string;
|
|
20
|
+
accessibilityRole?: IAccessibilityProps['accessibilityRole'];
|
|
21
|
+
accessibilityState?: IAccessibilityStateValue;
|
|
22
|
+
accessibilityValue?: IAccessibilityProps['accessibilityValue'];
|
|
23
|
+
accessibilityActions?: IAccessibilityProps['accessibilityActions'];
|
|
24
|
+
accessibilityLabelledBy?: string | string[];
|
|
25
|
+
importantForAccessibility?: IAccessibilityProps['importantForAccessibility'];
|
|
26
|
+
accessibilityLiveRegion?: IAccessibilityProps['accessibilityLiveRegion'];
|
|
27
|
+
screenReaderFocusable?: boolean;
|
|
28
|
+
accessibilityViewIsModal?: boolean;
|
|
29
|
+
accessibilityElementsHidden?: boolean;
|
|
30
|
+
accessibilityIgnoresInvertColors?: boolean;
|
|
31
|
+
accessibilityLanguage?: string;
|
|
32
|
+
accessibilityRespondsToUserInteraction?: boolean;
|
|
33
|
+
accessibilityShowsLargeContentViewer?: boolean;
|
|
34
|
+
accessibilityLargeContentTitle?: string;
|
|
35
|
+
readonly accessibilityAction: EventEmitter<ISymbioteEvent>;
|
|
36
|
+
readonly accessibilityTap: EventEmitter<ISymbioteEvent>;
|
|
37
|
+
readonly magicTap: EventEmitter<ISymbioteEvent>;
|
|
38
|
+
readonly accessibilityEscape: EventEmitter<ISymbioteEvent>;
|
|
39
|
+
role?: IAriaProps['role'];
|
|
40
|
+
ariaLabel?: string;
|
|
41
|
+
ariaLabelledBy?: string;
|
|
42
|
+
ariaLive?: IAriaProps['aria-live'];
|
|
43
|
+
ariaHidden?: boolean;
|
|
44
|
+
ariaBusy?: boolean;
|
|
45
|
+
ariaChecked?: boolean | 'mixed';
|
|
46
|
+
ariaDisabled?: boolean;
|
|
47
|
+
ariaExpanded?: boolean;
|
|
48
|
+
ariaSelected?: boolean;
|
|
49
|
+
ariaModal?: boolean;
|
|
50
|
+
ariaValueMax?: number;
|
|
51
|
+
ariaValueMin?: number;
|
|
52
|
+
ariaValueNow?: number;
|
|
53
|
+
ariaValueText?: string;
|
|
54
|
+
protected abstract readonly defaultColor: string | null;
|
|
55
|
+
protected readonly nativeExtras: Readonly<Record<string, unknown>>;
|
|
56
|
+
private readonly elementRef;
|
|
57
|
+
private readonly onLayoutHandler;
|
|
58
|
+
private readonly onAccessibilityActionHandler;
|
|
59
|
+
private readonly onAccessibilityTapHandler;
|
|
60
|
+
private readonly onMagicTapHandler;
|
|
61
|
+
private readonly onAccessibilityEscapeHandler;
|
|
62
|
+
get descriptor(): IDescriptor;
|
|
63
|
+
private get platform();
|
|
64
|
+
private emitterHandler;
|
|
65
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActivityIndicatorBase, never>;
|
|
66
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ActivityIndicatorBase, never, never, { "animating": { "alias": "animating"; "required": false; }; "color": { "alias": "color"; "required": false; }; "hidesWhenStopped": { "alias": "hidesWhenStopped"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "size": { "alias": "size"; "required": false; }; "style": { "alias": "style"; "required": false; }; "testID": { "alias": "testID"; "required": false; }; "accessible": { "alias": "accessible"; "required": false; }; "accessibilityLabel": { "alias": "accessibilityLabel"; "required": false; }; "accessibilityHint": { "alias": "accessibilityHint"; "required": false; }; "accessibilityRole": { "alias": "accessibilityRole"; "required": false; }; "accessibilityState": { "alias": "accessibilityState"; "required": false; }; "accessibilityValue": { "alias": "accessibilityValue"; "required": false; }; "accessibilityActions": { "alias": "accessibilityActions"; "required": false; }; "accessibilityLabelledBy": { "alias": "accessibilityLabelledBy"; "required": false; }; "importantForAccessibility": { "alias": "importantForAccessibility"; "required": false; }; "accessibilityLiveRegion": { "alias": "accessibilityLiveRegion"; "required": false; }; "screenReaderFocusable": { "alias": "screenReaderFocusable"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "required": false; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityIgnoresInvertColors": { "alias": "accessibilityIgnoresInvertColors"; "required": false; }; "accessibilityLanguage": { "alias": "accessibilityLanguage"; "required": false; }; "accessibilityRespondsToUserInteraction": { "alias": "accessibilityRespondsToUserInteraction"; "required": false; }; "accessibilityShowsLargeContentViewer": { "alias": "accessibilityShowsLargeContentViewer"; "required": false; }; "accessibilityLargeContentTitle": { "alias": "accessibilityLargeContentTitle"; "required": false; }; "role": { "alias": "role"; "required": false; }; "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; }; "ariaLive": { "alias": "aria-live"; "required": false; }; "ariaHidden": { "alias": "aria-hidden"; "required": false; }; "ariaBusy": { "alias": "aria-busy"; "required": false; }; "ariaChecked": { "alias": "aria-checked"; "required": false; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; }; "ariaExpanded": { "alias": "aria-expanded"; "required": false; }; "ariaSelected": { "alias": "aria-selected"; "required": false; }; "ariaModal": { "alias": "aria-modal"; "required": false; }; "ariaValueMax": { "alias": "aria-valuemax"; "required": false; }; "ariaValueMin": { "alias": "aria-valuemin"; "required": false; }; "ariaValueNow": { "alias": "aria-valuenow"; "required": false; }; "ariaValueText": { "alias": "aria-valuetext"; "required": false; }; }, { "layout": "layout"; "accessibilityAction": "accessibilityAction"; "accessibilityTap": "accessibilityTap"; "magicTap": "magicTap"; "accessibilityEscape": "accessibilityEscape"; }, never, never, true, never>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
2
|
+
import { renderActivityIndicator, resolveAccessibilityProps, } from '@symbiote-native/components';
|
|
3
|
+
import { anchorHostStyle } from '../../primitives';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
// Narrows anchorHostStyle's `unknown` (it reads an opaque engine prop bag) to the shape
|
|
6
|
+
// IActivityIndicatorProps['style'] actually declares, the same runtime guard image/shared.ts's
|
|
7
|
+
// asStyle() uses for the identical reason — a style value is structurally opaque at the type
|
|
8
|
+
// level, so this only rules out non-objects, never validates individual style keys.
|
|
9
|
+
function asStyle(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null ? value : undefined;
|
|
11
|
+
}
|
|
12
|
+
export class ActivityIndicatorBase {
|
|
13
|
+
animating;
|
|
14
|
+
color;
|
|
15
|
+
hidesWhenStopped;
|
|
16
|
+
nativeID;
|
|
17
|
+
size;
|
|
18
|
+
style;
|
|
19
|
+
testID;
|
|
20
|
+
// Real @Output()s. This component renders through DescriptorOutlet (`symbiote-descriptor-
|
|
21
|
+
// outlet`), not a hand-written template: emitterHandler() below wraps each EventEmitter into a
|
|
22
|
+
// plain callback under the SAME onX key the shared, cross-adapter IActivityIndicatorProps
|
|
23
|
+
// expects, so the Descriptor's props bag still carries a function the engine's routeProp
|
|
24
|
+
// recognizes and routes to setEventListener — the outlet's renderer.setProperty call never
|
|
25
|
+
// sees an EventEmitter, only the wrapper.
|
|
26
|
+
layout = new EventEmitter();
|
|
27
|
+
accessible;
|
|
28
|
+
accessibilityLabel;
|
|
29
|
+
accessibilityHint;
|
|
30
|
+
accessibilityRole;
|
|
31
|
+
accessibilityState;
|
|
32
|
+
accessibilityValue;
|
|
33
|
+
accessibilityActions;
|
|
34
|
+
accessibilityLabelledBy;
|
|
35
|
+
importantForAccessibility;
|
|
36
|
+
accessibilityLiveRegion;
|
|
37
|
+
screenReaderFocusable;
|
|
38
|
+
accessibilityViewIsModal;
|
|
39
|
+
accessibilityElementsHidden;
|
|
40
|
+
accessibilityIgnoresInvertColors;
|
|
41
|
+
accessibilityLanguage;
|
|
42
|
+
accessibilityRespondsToUserInteraction;
|
|
43
|
+
accessibilityShowsLargeContentViewer;
|
|
44
|
+
accessibilityLargeContentTitle;
|
|
45
|
+
accessibilityAction = new EventEmitter();
|
|
46
|
+
accessibilityTap = new EventEmitter();
|
|
47
|
+
magicTap = new EventEmitter();
|
|
48
|
+
accessibilityEscape = new EventEmitter();
|
|
49
|
+
role;
|
|
50
|
+
ariaLabel;
|
|
51
|
+
ariaLabelledBy;
|
|
52
|
+
ariaLive;
|
|
53
|
+
ariaHidden;
|
|
54
|
+
ariaBusy;
|
|
55
|
+
ariaChecked;
|
|
56
|
+
ariaDisabled;
|
|
57
|
+
ariaExpanded;
|
|
58
|
+
ariaSelected;
|
|
59
|
+
ariaModal;
|
|
60
|
+
ariaValueMax;
|
|
61
|
+
ariaValueMin;
|
|
62
|
+
ariaValueNow;
|
|
63
|
+
ariaValueText;
|
|
64
|
+
nativeExtras = {};
|
|
65
|
+
// This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
|
|
66
|
+
// onto (see anchorHostStyle's doc comment) — NOT the descriptor-outlet-rendered wrapper the
|
|
67
|
+
// `descriptor` getter below builds. Merged FIRST so an explicit `style` @Input still wins
|
|
68
|
+
// (flattenStyle's later-wins collapse), mirroring every other composed component's anchor merge.
|
|
69
|
+
elementRef = inject(ElementRef);
|
|
70
|
+
// Stable bound wrappers (created ONCE, not per `descriptor` access) fed to emitterHandler below.
|
|
71
|
+
// jsonEqual (core/engine/src/commit.ts) falls through to Object.is for a function leaf, so a
|
|
72
|
+
// fresh closure built inside the `descriptor` getter would never equal the previous frame's
|
|
73
|
+
// closure even when nothing changed — every CD pass would read as "props changed" and force a
|
|
74
|
+
// real Fabric re-clone cascading up every ancestor to the root (the same hazard
|
|
75
|
+
// AnimatedComponentBase.reconcile() and ScrollViewStickyHeader's onHostLayout guard against).
|
|
76
|
+
onLayoutHandler = (event) => this.layout.emit(event);
|
|
77
|
+
onAccessibilityActionHandler = (event) => this.accessibilityAction.emit(event);
|
|
78
|
+
onAccessibilityTapHandler = (event) => this.accessibilityTap.emit(event);
|
|
79
|
+
onMagicTapHandler = (event) => this.magicTap.emit(event);
|
|
80
|
+
onAccessibilityEscapeHandler = (event) => this.accessibilityEscape.emit(event);
|
|
81
|
+
get descriptor() {
|
|
82
|
+
const props = resolveAccessibilityProps({
|
|
83
|
+
animating: this.animating,
|
|
84
|
+
color: this.color,
|
|
85
|
+
hidesWhenStopped: this.hidesWhenStopped,
|
|
86
|
+
nativeID: this.nativeID,
|
|
87
|
+
size: this.size,
|
|
88
|
+
style: [asStyle(anchorHostStyle(this.elementRef)), this.style],
|
|
89
|
+
testID: this.testID,
|
|
90
|
+
onLayout: this.emitterHandler(this.layout, this.onLayoutHandler),
|
|
91
|
+
accessible: this.accessible,
|
|
92
|
+
accessibilityLabel: this.accessibilityLabel,
|
|
93
|
+
accessibilityHint: this.accessibilityHint,
|
|
94
|
+
accessibilityRole: this.accessibilityRole,
|
|
95
|
+
accessibilityState: this.accessibilityState,
|
|
96
|
+
accessibilityValue: this.accessibilityValue,
|
|
97
|
+
accessibilityActions: this.accessibilityActions,
|
|
98
|
+
accessibilityLabelledBy: this.accessibilityLabelledBy,
|
|
99
|
+
importantForAccessibility: this.importantForAccessibility,
|
|
100
|
+
accessibilityLiveRegion: this.accessibilityLiveRegion,
|
|
101
|
+
screenReaderFocusable: this.screenReaderFocusable,
|
|
102
|
+
accessibilityViewIsModal: this.accessibilityViewIsModal,
|
|
103
|
+
accessibilityElementsHidden: this.accessibilityElementsHidden,
|
|
104
|
+
accessibilityIgnoresInvertColors: this.accessibilityIgnoresInvertColors,
|
|
105
|
+
accessibilityLanguage: this.accessibilityLanguage,
|
|
106
|
+
accessibilityRespondsToUserInteraction: this.accessibilityRespondsToUserInteraction,
|
|
107
|
+
accessibilityShowsLargeContentViewer: this.accessibilityShowsLargeContentViewer,
|
|
108
|
+
accessibilityLargeContentTitle: this.accessibilityLargeContentTitle,
|
|
109
|
+
onAccessibilityAction: this.emitterHandler(this.accessibilityAction, this.onAccessibilityActionHandler),
|
|
110
|
+
onAccessibilityTap: this.emitterHandler(this.accessibilityTap, this.onAccessibilityTapHandler),
|
|
111
|
+
onMagicTap: this.emitterHandler(this.magicTap, this.onMagicTapHandler),
|
|
112
|
+
onAccessibilityEscape: this.emitterHandler(this.accessibilityEscape, this.onAccessibilityEscapeHandler),
|
|
113
|
+
role: this.role,
|
|
114
|
+
'aria-label': this.ariaLabel,
|
|
115
|
+
'aria-labelledby': this.ariaLabelledBy,
|
|
116
|
+
'aria-live': this.ariaLive,
|
|
117
|
+
'aria-hidden': this.ariaHidden,
|
|
118
|
+
'aria-busy': this.ariaBusy,
|
|
119
|
+
'aria-checked': this.ariaChecked,
|
|
120
|
+
'aria-disabled': this.ariaDisabled,
|
|
121
|
+
'aria-expanded': this.ariaExpanded,
|
|
122
|
+
'aria-selected': this.ariaSelected,
|
|
123
|
+
'aria-modal': this.ariaModal,
|
|
124
|
+
'aria-valuemax': this.ariaValueMax,
|
|
125
|
+
'aria-valuemin': this.ariaValueMin,
|
|
126
|
+
'aria-valuenow': this.ariaValueNow,
|
|
127
|
+
'aria-valuetext': this.ariaValueText,
|
|
128
|
+
});
|
|
129
|
+
const { animating, color, hidesWhenStopped, size, style, ...passthrough } = props;
|
|
130
|
+
return renderActivityIndicator({
|
|
131
|
+
animating: animating !== false,
|
|
132
|
+
color,
|
|
133
|
+
hidesWhenStopped: hidesWhenStopped !== false,
|
|
134
|
+
size: size ?? 'small',
|
|
135
|
+
style,
|
|
136
|
+
passthrough,
|
|
137
|
+
}, this.platform);
|
|
138
|
+
}
|
|
139
|
+
get platform() {
|
|
140
|
+
return { defaultColor: this.defaultColor, nativeExtras: this.nativeExtras };
|
|
141
|
+
}
|
|
142
|
+
// Gates a STABLE bound handler behind `observed`, so an unbound event still resolves to
|
|
143
|
+
// `undefined` in the descriptor's props bag — the same "undefined means nobody cares" contract
|
|
144
|
+
// the old @Input() callback had, letting resolveAccessibilityProps drop the key entirely instead
|
|
145
|
+
// of handing the engine a no-op function. `handler` must be one of the readonly bound fields
|
|
146
|
+
// above, never a closure built here — see their doc comment for why.
|
|
147
|
+
emitterHandler(emitter, handler) {
|
|
148
|
+
return emitter.observed ? handler : undefined;
|
|
149
|
+
}
|
|
150
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicatorBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
151
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: ActivityIndicatorBase, isStandalone: true, inputs: { animating: "animating", color: "color", hidesWhenStopped: "hidesWhenStopped", nativeID: "nativeID", size: "size", style: "style", testID: "testID", 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: ["aria-label", "ariaLabel"], ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLive: ["aria-live", "ariaLive"], ariaHidden: ["aria-hidden", "ariaHidden"], ariaBusy: ["aria-busy", "ariaBusy"], ariaChecked: ["aria-checked", "ariaChecked"], ariaDisabled: ["aria-disabled", "ariaDisabled"], ariaExpanded: ["aria-expanded", "ariaExpanded"], ariaSelected: ["aria-selected", "ariaSelected"], ariaModal: ["aria-modal", "ariaModal"], ariaValueMax: ["aria-valuemax", "ariaValueMax"], ariaValueMin: ["aria-valuemin", "ariaValueMin"], ariaValueNow: ["aria-valuenow", "ariaValueNow"], ariaValueText: ["aria-valuetext", "ariaValueText"] }, outputs: { layout: "layout", accessibilityAction: "accessibilityAction", accessibilityTap: "accessibilityTap", magicTap: "magicTap", accessibilityEscape: "accessibilityEscape" }, ngImport: i0 });
|
|
152
|
+
}
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ActivityIndicatorBase, decorators: [{
|
|
154
|
+
type: Directive
|
|
155
|
+
}], propDecorators: { animating: [{
|
|
156
|
+
type: Input
|
|
157
|
+
}], color: [{
|
|
158
|
+
type: Input
|
|
159
|
+
}], hidesWhenStopped: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], nativeID: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], size: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], style: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], testID: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], layout: [{
|
|
170
|
+
type: Output
|
|
171
|
+
}], accessible: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], accessibilityLabel: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], accessibilityHint: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], accessibilityRole: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], accessibilityState: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], accessibilityValue: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], accessibilityActions: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], accessibilityLabelledBy: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], importantForAccessibility: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], accessibilityLiveRegion: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], screenReaderFocusable: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], accessibilityViewIsModal: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], accessibilityElementsHidden: [{
|
|
196
|
+
type: Input
|
|
197
|
+
}], accessibilityIgnoresInvertColors: [{
|
|
198
|
+
type: Input
|
|
199
|
+
}], accessibilityLanguage: [{
|
|
200
|
+
type: Input
|
|
201
|
+
}], accessibilityRespondsToUserInteraction: [{
|
|
202
|
+
type: Input
|
|
203
|
+
}], accessibilityShowsLargeContentViewer: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}], accessibilityLargeContentTitle: [{
|
|
206
|
+
type: Input
|
|
207
|
+
}], accessibilityAction: [{
|
|
208
|
+
type: Output
|
|
209
|
+
}], accessibilityTap: [{
|
|
210
|
+
type: Output
|
|
211
|
+
}], magicTap: [{
|
|
212
|
+
type: Output
|
|
213
|
+
}], accessibilityEscape: [{
|
|
214
|
+
type: Output
|
|
215
|
+
}], role: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], ariaLabel: [{
|
|
218
|
+
type: Input,
|
|
219
|
+
args: ['aria-label']
|
|
220
|
+
}], ariaLabelledBy: [{
|
|
221
|
+
type: Input,
|
|
222
|
+
args: ['aria-labelledby']
|
|
223
|
+
}], ariaLive: [{
|
|
224
|
+
type: Input,
|
|
225
|
+
args: ['aria-live']
|
|
226
|
+
}], ariaHidden: [{
|
|
227
|
+
type: Input,
|
|
228
|
+
args: ['aria-hidden']
|
|
229
|
+
}], ariaBusy: [{
|
|
230
|
+
type: Input,
|
|
231
|
+
args: ['aria-busy']
|
|
232
|
+
}], ariaChecked: [{
|
|
233
|
+
type: Input,
|
|
234
|
+
args: ['aria-checked']
|
|
235
|
+
}], ariaDisabled: [{
|
|
236
|
+
type: Input,
|
|
237
|
+
args: ['aria-disabled']
|
|
238
|
+
}], ariaExpanded: [{
|
|
239
|
+
type: Input,
|
|
240
|
+
args: ['aria-expanded']
|
|
241
|
+
}], ariaSelected: [{
|
|
242
|
+
type: Input,
|
|
243
|
+
args: ['aria-selected']
|
|
244
|
+
}], ariaModal: [{
|
|
245
|
+
type: Input,
|
|
246
|
+
args: ['aria-modal']
|
|
247
|
+
}], ariaValueMax: [{
|
|
248
|
+
type: Input,
|
|
249
|
+
args: ['aria-valuemax']
|
|
250
|
+
}], ariaValueMin: [{
|
|
251
|
+
type: Input,
|
|
252
|
+
args: ['aria-valuemin']
|
|
253
|
+
}], ariaValueNow: [{
|
|
254
|
+
type: Input,
|
|
255
|
+
args: ['aria-valuenow']
|
|
256
|
+
}], ariaValueText: [{
|
|
257
|
+
type: Input,
|
|
258
|
+
args: ['aria-valuetext']
|
|
259
|
+
}] } });
|
|
260
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/components/activity-indicator/shared.ts"],"names":[],"mappings":"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"}
|