@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.
Files changed (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/build/angular/components/activity-indicator/index.android.d.ts +12 -0
  4. package/build/angular/components/activity-indicator/index.android.js +21 -0
  5. package/build/angular/components/activity-indicator/index.android.js.map +1 -0
  6. package/build/angular/components/activity-indicator/index.d.ts +1 -0
  7. package/build/angular/components/activity-indicator/index.ios.d.ts +8 -0
  8. package/build/angular/components/activity-indicator/index.ios.js +21 -0
  9. package/build/angular/components/activity-indicator/index.ios.js.map +1 -0
  10. package/build/angular/components/activity-indicator/index.js +4 -0
  11. package/build/angular/components/activity-indicator/index.js.map +1 -0
  12. package/build/angular/components/activity-indicator/shared.d.ts +67 -0
  13. package/build/angular/components/activity-indicator/shared.js +260 -0
  14. package/build/angular/components/activity-indicator/shared.js.map +1 -0
  15. package/build/angular/components/button.d.ts +63 -0
  16. package/build/angular/components/button.js +332 -0
  17. package/build/angular/components/button.js.map +1 -0
  18. package/build/angular/components/drawer-layout-android/index.android.d.ts +34 -0
  19. package/build/angular/components/drawer-layout-android/index.android.js +291 -0
  20. package/build/angular/components/drawer-layout-android/index.android.js.map +1 -0
  21. package/build/angular/components/drawer-layout-android/index.d.ts +11 -0
  22. package/build/angular/components/drawer-layout-android/index.js +109 -0
  23. package/build/angular/components/drawer-layout-android/index.js.map +1 -0
  24. package/build/angular/components/drawer-layout-android/shared.d.ts +74 -0
  25. package/build/angular/components/drawer-layout-android/shared.js +138 -0
  26. package/build/angular/components/drawer-layout-android/shared.js.map +1 -0
  27. package/build/angular/components/flat-list/index.d.ts +122 -0
  28. package/build/angular/components/flat-list/index.js +689 -0
  29. package/build/angular/components/flat-list/index.js.map +1 -0
  30. package/build/angular/components/image/index.android.d.ts +10 -0
  31. package/build/angular/components/image/index.android.js +59 -0
  32. package/build/angular/components/image/index.android.js.map +1 -0
  33. package/build/angular/components/image/index.d.ts +1 -0
  34. package/build/angular/components/image/index.ios.d.ts +10 -0
  35. package/build/angular/components/image/index.ios.js +59 -0
  36. package/build/angular/components/image/index.ios.js.map +1 -0
  37. package/build/angular/components/image/index.js +3 -0
  38. package/build/angular/components/image/index.js.map +1 -0
  39. package/build/angular/components/image/shared.d.ts +101 -0
  40. package/build/angular/components/image/shared.js +408 -0
  41. package/build/angular/components/image/shared.js.map +1 -0
  42. package/build/angular/components/image-background.d.ts +81 -0
  43. package/build/angular/components/image-background.js +418 -0
  44. package/build/angular/components/image-background.js.map +1 -0
  45. package/build/angular/components/input-accessory-view.d.ts +59 -0
  46. package/build/angular/components/input-accessory-view.js +266 -0
  47. package/build/angular/components/input-accessory-view.js.map +1 -0
  48. package/build/angular/components/keyboard-avoiding-view.d.ts +82 -0
  49. package/build/angular/components/keyboard-avoiding-view.js +363 -0
  50. package/build/angular/components/keyboard-avoiding-view.js.map +1 -0
  51. package/build/angular/components/modal.d.ts +92 -0
  52. package/build/angular/components/modal.js +365 -0
  53. package/build/angular/components/modal.js.map +1 -0
  54. package/build/angular/components/pressable/index.d.ts +123 -0
  55. package/build/angular/components/pressable/index.js +421 -0
  56. package/build/angular/components/pressable/index.js.map +1 -0
  57. package/build/angular/components/refresh-control.d.ts +86 -0
  58. package/build/angular/components/refresh-control.js +347 -0
  59. package/build/angular/components/refresh-control.js.map +1 -0
  60. package/build/angular/components/safe-area-view.d.ts +57 -0
  61. package/build/angular/components/safe-area-view.js +253 -0
  62. package/build/angular/components/safe-area-view.js.map +1 -0
  63. package/build/angular/components/scroll-view/index.android.d.ts +21 -0
  64. package/build/angular/components/scroll-view/index.android.js +235 -0
  65. package/build/angular/components/scroll-view/index.android.js.map +1 -0
  66. package/build/angular/components/scroll-view/index.d.ts +3 -0
  67. package/build/angular/components/scroll-view/index.ios.d.ts +9 -0
  68. package/build/angular/components/scroll-view/index.ios.js +86 -0
  69. package/build/angular/components/scroll-view/index.ios.js.map +1 -0
  70. package/build/angular/components/scroll-view/index.js +6 -0
  71. package/build/angular/components/scroll-view/index.js.map +1 -0
  72. package/build/angular/components/scroll-view/projection.d.ts +32 -0
  73. package/build/angular/components/scroll-view/projection.js +312 -0
  74. package/build/angular/components/scroll-view/projection.js.map +1 -0
  75. package/build/angular/components/scroll-view/shared.d.ts +230 -0
  76. package/build/angular/components/scroll-view/shared.js +679 -0
  77. package/build/angular/components/scroll-view/shared.js.map +1 -0
  78. package/build/angular/components/scroll-view/sticky-header.d.ts +41 -0
  79. package/build/angular/components/scroll-view/sticky-header.js +208 -0
  80. package/build/angular/components/scroll-view/sticky-header.js.map +1 -0
  81. package/build/angular/components/section-list/index.d.ts +116 -0
  82. package/build/angular/components/section-list/index.js +641 -0
  83. package/build/angular/components/section-list/index.js.map +1 -0
  84. package/build/angular/components/switch/index.android.d.ts +20 -0
  85. package/build/angular/components/switch/index.android.js +70 -0
  86. package/build/angular/components/switch/index.android.js.map +1 -0
  87. package/build/angular/components/switch/index.d.ts +1 -0
  88. package/build/angular/components/switch/index.ios.d.ts +19 -0
  89. package/build/angular/components/switch/index.ios.js +69 -0
  90. package/build/angular/components/switch/index.ios.js.map +1 -0
  91. package/build/angular/components/switch/index.js +4 -0
  92. package/build/angular/components/switch/index.js.map +1 -0
  93. package/build/angular/components/switch/shared.d.ts +40 -0
  94. package/build/angular/components/switch/shared.js +127 -0
  95. package/build/angular/components/switch/shared.js.map +1 -0
  96. package/build/angular/components/text-input.d.ts +153 -0
  97. package/build/angular/components/text-input.js +604 -0
  98. package/build/angular/components/text-input.js.map +1 -0
  99. package/build/angular/components/touchable-native-feedback.d.ts +83 -0
  100. package/build/angular/components/touchable-native-feedback.js +376 -0
  101. package/build/angular/components/touchable-native-feedback.js.map +1 -0
  102. package/build/angular/components/touchable.d.ts +248 -0
  103. package/build/angular/components/touchable.js +1206 -0
  104. package/build/angular/components/touchable.js.map +1 -0
  105. package/build/angular/components/virtualized-list/directives.d.ts +54 -0
  106. package/build/angular/components/virtualized-list/directives.js +154 -0
  107. package/build/angular/components/virtualized-list/directives.js.map +1 -0
  108. package/build/angular/components/virtualized-list/index.d.ts +268 -0
  109. package/build/angular/components/virtualized-list/index.js +1162 -0
  110. package/build/angular/components/virtualized-list/index.js.map +1 -0
  111. package/build/angular/components/virtualized-section-list/directives.d.ts +37 -0
  112. package/build/angular/components/virtualized-section-list/directives.js +77 -0
  113. package/build/angular/components/virtualized-section-list/directives.js.map +1 -0
  114. package/build/angular/components/virtualized-section-list/index.d.ts +178 -0
  115. package/build/angular/components/virtualized-section-list/index.js +722 -0
  116. package/build/angular/components/virtualized-section-list/index.js.map +1 -0
  117. package/build/angular/components.d.ts +39 -0
  118. package/build/angular/components.js +38 -0
  119. package/build/angular/components.js.map +1 -0
  120. package/build/angular/create-portal.d.ts +22 -0
  121. package/build/angular/create-portal.js +74 -0
  122. package/build/angular/create-portal.js.map +1 -0
  123. package/build/angular/create-tunnel.d.ts +34 -0
  124. package/build/angular/create-tunnel.js +126 -0
  125. package/build/angular/create-tunnel.js.map +1 -0
  126. package/build/angular/descriptor-to-angular/index.d.ts +22 -0
  127. package/build/angular/descriptor-to-angular/index.js +142 -0
  128. package/build/angular/descriptor-to-angular/index.js.map +1 -0
  129. package/build/angular/host-instance/index.d.ts +2 -0
  130. package/build/angular/host-instance/index.js +37 -0
  131. package/build/angular/host-instance/index.js.map +1 -0
  132. package/build/angular/index.d.ts +21 -0
  133. package/build/angular/index.js +42 -0
  134. package/build/angular/index.js.map +1 -0
  135. package/build/angular/modules/animated/create-animated-component.d.ts +68 -0
  136. package/build/angular/modules/animated/create-animated-component.js +429 -0
  137. package/build/angular/modules/animated/create-animated-component.js.map +1 -0
  138. package/build/angular/modules/animated/index.d.ts +51 -0
  139. package/build/angular/modules/animated/index.js +59 -0
  140. package/build/angular/modules/animated/index.js.map +1 -0
  141. package/build/angular/modules/app-registry/index.d.ts +7 -0
  142. package/build/angular/modules/app-registry/index.js +23 -0
  143. package/build/angular/modules/app-registry/index.js.map +1 -0
  144. package/build/angular/modules/status-bar.d.ts +20 -0
  145. package/build/angular/modules/status-bar.js +59 -0
  146. package/build/angular/modules/status-bar.js.map +1 -0
  147. package/build/angular/primitives/index.d.ts +63 -0
  148. package/build/angular/primitives/index.js +189 -0
  149. package/build/angular/primitives/index.js.map +1 -0
  150. package/build/angular/primitives/shared.d.ts +89 -0
  151. package/build/angular/primitives/shared.js +172 -0
  152. package/build/angular/primitives/shared.js.map +1 -0
  153. package/build/angular/render.d.ts +11 -0
  154. package/build/angular/render.js +161 -0
  155. package/build/angular/render.js.map +1 -0
  156. package/build/angular/renderer.d.ts +38 -0
  157. package/build/angular/renderer.js +360 -0
  158. package/build/angular/renderer.js.map +1 -0
  159. package/build/angular/services/color-scheme.service.d.ts +16 -0
  160. package/build/angular/services/color-scheme.service.js +31 -0
  161. package/build/angular/services/color-scheme.service.js.map +1 -0
  162. package/build/angular/services/index.d.ts +2 -0
  163. package/build/angular/services/index.js +3 -0
  164. package/build/angular/services/index.js.map +1 -0
  165. package/build/angular/services/window-dimensions.service.d.ts +16 -0
  166. package/build/angular/services/window-dimensions.service.js +42 -0
  167. package/build/angular/services/window-dimensions.service.js.map +1 -0
  168. package/build/components/activity-indicator/index.android.d.ts +9 -0
  169. package/build/components/activity-indicator/index.android.js +64 -0
  170. package/build/components/activity-indicator/index.d.ts +1 -0
  171. package/build/components/activity-indicator/index.ios.d.ts +5 -0
  172. package/build/components/activity-indicator/index.ios.js +64 -0
  173. package/build/components/activity-indicator/index.js +3 -0
  174. package/build/components/activity-indicator/shared.d.ts +64 -0
  175. package/build/components/activity-indicator/shared.js +424 -0
  176. package/build/components/button.d.ts +60 -0
  177. package/build/components/button.js +456 -0
  178. package/build/components/drawer-layout-android/index.android.d.ts +29 -0
  179. package/build/components/drawer-layout-android/index.android.js +326 -0
  180. package/build/components/drawer-layout-android/index.d.ts +8 -0
  181. package/build/components/drawer-layout-android/index.js +145 -0
  182. package/build/components/drawer-layout-android/shared.d.ts +71 -0
  183. package/build/components/drawer-layout-android/shared.js +205 -0
  184. package/build/components/flat-list/index.d.ts +119 -0
  185. package/build/components/flat-list/index.js +692 -0
  186. package/build/components/image/index.android.d.ts +7 -0
  187. package/build/components/image/index.android.js +88 -0
  188. package/build/components/image/index.d.ts +1 -0
  189. package/build/components/image/index.ios.d.ts +7 -0
  190. package/build/components/image/index.ios.js +88 -0
  191. package/build/components/image/index.js +2 -0
  192. package/build/components/image/shared.d.ts +101 -0
  193. package/build/components/image/shared.js +407 -0
  194. package/build/components/image-background.d.ts +78 -0
  195. package/build/components/image-background.js +583 -0
  196. package/build/components/input-accessory-view.d.ts +56 -0
  197. package/build/components/input-accessory-view.js +407 -0
  198. package/build/components/keyboard-avoiding-view.d.ts +79 -0
  199. package/build/components/keyboard-avoiding-view.js +509 -0
  200. package/build/components/modal.d.ts +89 -0
  201. package/build/components/modal.js +534 -0
  202. package/build/components/pressable/index.d.ts +120 -0
  203. package/build/components/pressable/index.js +640 -0
  204. package/build/components/refresh-control.d.ts +83 -0
  205. package/build/components/refresh-control.js +514 -0
  206. package/build/components/safe-area-view.d.ts +54 -0
  207. package/build/components/safe-area-view.js +393 -0
  208. package/build/components/scroll-view/index.android.d.ts +16 -0
  209. package/build/components/scroll-view/index.android.js +228 -0
  210. package/build/components/scroll-view/index.d.ts +3 -0
  211. package/build/components/scroll-view/index.ios.d.ts +6 -0
  212. package/build/components/scroll-view/index.ios.js +113 -0
  213. package/build/components/scroll-view/index.js +5 -0
  214. package/build/components/scroll-view/projection.d.ts +32 -0
  215. package/build/components/scroll-view/projection.js +311 -0
  216. package/build/components/scroll-view/shared.d.ts +225 -0
  217. package/build/components/scroll-view/shared.js +757 -0
  218. package/build/components/scroll-view/sticky-header.d.ts +38 -0
  219. package/build/components/scroll-view/sticky-header.js +257 -0
  220. package/build/components/section-list/index.d.ts +113 -0
  221. package/build/components/section-list/index.js +768 -0
  222. package/build/components/switch/index.android.d.ts +17 -0
  223. package/build/components/switch/index.android.js +107 -0
  224. package/build/components/switch/index.d.ts +1 -0
  225. package/build/components/switch/index.ios.d.ts +16 -0
  226. package/build/components/switch/index.ios.js +106 -0
  227. package/build/components/switch/index.js +3 -0
  228. package/build/components/switch/shared.d.ts +37 -0
  229. package/build/components/switch/shared.js +176 -0
  230. package/build/components/text-input.d.ts +150 -0
  231. package/build/components/text-input.js +826 -0
  232. package/build/components/touchable-native-feedback.d.ts +80 -0
  233. package/build/components/touchable-native-feedback.js +550 -0
  234. package/build/components/touchable.d.ts +241 -0
  235. package/build/components/touchable.js +1672 -0
  236. package/build/components/virtualized-list/directives.d.ts +41 -0
  237. package/build/components/virtualized-list/directives.js +250 -0
  238. package/build/components/virtualized-list/index.d.ts +265 -0
  239. package/build/components/virtualized-list/index.js +1344 -0
  240. package/build/components/virtualized-section-list/directives.d.ts +28 -0
  241. package/build/components/virtualized-section-list/directives.js +149 -0
  242. package/build/components/virtualized-section-list/index.d.ts +175 -0
  243. package/build/components/virtualized-section-list/index.js +854 -0
  244. package/build/components.d.ts +39 -0
  245. package/build/components.js +37 -0
  246. package/build/create-portal.d.ts +17 -0
  247. package/build/create-portal.js +128 -0
  248. package/build/create-tunnel.d.ts +29 -0
  249. package/build/create-tunnel.js +181 -0
  250. package/build/descriptor-to-angular/index.d.ts +19 -0
  251. package/build/descriptor-to-angular/index.js +186 -0
  252. package/build/host-instance/index.d.ts +2 -0
  253. package/build/host-instance/index.js +36 -0
  254. package/build/index.d.ts +21 -0
  255. package/build/index.js +41 -0
  256. package/build/modules/animated/create-animated-component.d.ts +57 -0
  257. package/build/modules/animated/create-animated-component.js +490 -0
  258. package/build/modules/animated/index.d.ts +51 -0
  259. package/build/modules/animated/index.js +58 -0
  260. package/build/modules/app-registry/index.d.ts +7 -0
  261. package/build/modules/app-registry/index.js +22 -0
  262. package/build/modules/status-bar.d.ts +17 -0
  263. package/build/modules/status-bar.js +121 -0
  264. package/build/primitives/index.d.ts +32 -0
  265. package/build/primitives/index.js +386 -0
  266. package/build/primitives/shared.d.ts +84 -0
  267. package/build/primitives/shared.js +231 -0
  268. package/build/render.d.ts +11 -0
  269. package/build/render.js +160 -0
  270. package/build/renderer.d.ts +38 -0
  271. package/build/renderer.js +359 -0
  272. package/build/services/color-scheme.service.d.ts +13 -0
  273. package/build/services/color-scheme.service.js +72 -0
  274. package/build/services/index.d.ts +2 -0
  275. package/build/services/index.js +2 -0
  276. package/build/services/window-dimensions.service.d.ts +13 -0
  277. package/build/services/window-dimensions.service.js +83 -0
  278. package/metro-css-parser.cjs +11 -0
  279. package/package.json +57 -0
  280. package/src/__tests__/responder-change-detection.test.ts +102 -0
  281. package/src/__tests__/responder-nested-cd.test.ts +113 -0
  282. package/src/angular-gaps.test.ts +142 -0
  283. package/src/angular-imports.test.ts +100 -0
  284. package/src/components/activity-indicator/activity-indicator-class-style.test.ts +44 -0
  285. package/src/components/activity-indicator/activity-indicator.test.ts +131 -0
  286. package/src/components/activity-indicator/index.android.ts +16 -0
  287. package/src/components/activity-indicator/index.ios.ts +17 -0
  288. package/src/components/activity-indicator/index.ts +4 -0
  289. package/src/components/activity-indicator/shared.ts +206 -0
  290. package/src/components/button.ts +193 -0
  291. package/src/components/flat-list/column-wrapper-style-class.test.ts +116 -0
  292. package/src/components/flat-list/flat-list-array-style.test.ts +131 -0
  293. package/src/components/flat-list/flat-list-class-style.test.ts +74 -0
  294. package/src/components/flat-list/flat-list-scroll-containment.test.ts +107 -0
  295. package/src/components/flat-list/flat-list.test.ts +99 -0
  296. package/src/components/flat-list/index.ts +575 -0
  297. package/src/components/image/image-class-style.test.ts +46 -0
  298. package/src/components/image/index.android.ts +48 -0
  299. package/src/components/image/index.ios.ts +48 -0
  300. package/src/components/image/index.ts +3 -0
  301. package/src/components/image/shared.ts +478 -0
  302. package/src/components/image-background-class-style.test.ts +48 -0
  303. package/src/components/image-background-style-class.test.ts +79 -0
  304. package/src/components/image-background.ts +270 -0
  305. package/src/components/input-accessory-view.test.ts +43 -0
  306. package/src/components/input-accessory-view.ts +191 -0
  307. package/src/components/keyboard-avoiding-view.test.ts +54 -0
  308. package/src/components/keyboard-avoiding-view.ts +308 -0
  309. package/src/components/modal.test.ts +43 -0
  310. package/src/components/modal.ts +304 -0
  311. package/src/components/pressable/index.ts +371 -0
  312. package/src/components/pressable/pressable.test.ts +85 -0
  313. package/src/components/refresh-control.test.ts +41 -0
  314. package/src/components/refresh-control.ts +288 -0
  315. package/src/components/safe-area-view.test.ts +43 -0
  316. package/src/components/safe-area-view.ts +178 -0
  317. package/src/components/scroll-view/android-scroll-view-axis-projection.test.ts +123 -0
  318. package/src/components/scroll-view/content-container-style-class.test.ts +75 -0
  319. package/src/components/scroll-view/index.android.ts +190 -0
  320. package/src/components/scroll-view/index.ios.ts +79 -0
  321. package/src/components/scroll-view/index.ts +7 -0
  322. package/src/components/scroll-view/projection.ts +384 -0
  323. package/src/components/scroll-view/scroll-view-class-style.test.ts +134 -0
  324. package/src/components/scroll-view/scroll-view-projection.test.ts +194 -0
  325. package/src/components/scroll-view/shared.ts +836 -0
  326. package/src/components/scroll-view/sticky-header.ts +230 -0
  327. package/src/components/section-list/index.ts +445 -0
  328. package/src/components/switch/android-switch-class.test.ts +42 -0
  329. package/src/components/switch/index.android.ts +61 -0
  330. package/src/components/switch/index.ios.ts +60 -0
  331. package/src/components/switch/index.ts +4 -0
  332. package/src/components/switch/shared.ts +197 -0
  333. package/src/components/switch/switch.test.ts +92 -0
  334. package/src/components/text-input-class-style.test.ts +54 -0
  335. package/src/components/text-input.ts +536 -0
  336. package/src/components/touchable-native-feedback.test.ts +49 -0
  337. package/src/components/touchable-native-feedback.ts +260 -0
  338. package/src/components/touchable.test.ts +102 -0
  339. package/src/components/touchable.ts +643 -0
  340. package/src/components/virtualized-list/directives.ts +169 -0
  341. package/src/components/virtualized-list/index.ts +1204 -0
  342. package/src/components/virtualized-list/virtualized-list-class-style.test.ts +76 -0
  343. package/src/components/virtualized-section-list/directives.ts +91 -0
  344. package/src/components/virtualized-section-list/index.ts +598 -0
  345. package/src/components/virtualized-section-list/virtualized-section-list-class-style.test.ts +60 -0
  346. package/src/components.ts +149 -0
  347. package/src/create-portal.test.ts +90 -0
  348. package/src/create-portal.ts +74 -0
  349. package/src/create-tunnel.test.ts +120 -0
  350. package/src/create-tunnel.ts +136 -0
  351. package/src/descriptor-to-angular/descriptor-outlet.test.ts +94 -0
  352. package/src/descriptor-to-angular/index.ts +190 -0
  353. package/src/host-instance/host-instance.test.ts +49 -0
  354. package/src/host-instance/index.ts +36 -0
  355. package/src/index.ts +257 -0
  356. package/src/modules/animated/animated-scroll-view.test.ts +85 -0
  357. package/src/modules/animated/create-animated-component.ts +435 -0
  358. package/src/modules/animated/index.ts +105 -0
  359. package/src/modules/app-registry/app-registry.test.ts +106 -0
  360. package/src/modules/app-registry/index.ts +60 -0
  361. package/src/modules/status-bar.test.ts +50 -0
  362. package/src/modules/status-bar.ts +57 -0
  363. package/src/primitives/index.ts +119 -0
  364. package/src/primitives/shared.ts +191 -0
  365. package/src/render.test.ts +147 -0
  366. package/src/render.ts +224 -0
  367. package/src/renderer.test.ts +179 -0
  368. package/src/renderer.ts +407 -0
  369. package/src/services/color-scheme.service.ts +27 -0
  370. package/src/services/index.ts +2 -0
  371. package/src/services/services.test.ts +163 -0
  372. 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
+ ![Angular driving real native iOS views through SymbioteJS](../../assets/angular-demo.gif)
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,4 @@
1
+ // Base/default ActivityIndicator. Re-exports the iOS build; Metro picks index.ios.ts /
2
+ // index.android.ts in platform bundles. See ADR 0020.
3
+ export * from './index.ios';
4
+ //# sourceMappingURL=index.js.map
@@ -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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"}