@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
@@ -0,0 +1,86 @@
1
+ // ScrollView on iOS (ADR 0024 Phase 2). The RefreshControl is a CHILD of the scroll view, rendered
2
+ // as a SIBLING BEFORE the content container (RN ScrollView.js: {refreshControl}{contentContainer}).
3
+ // The developer composes it as a projected child of <ScrollView>; this template selects it into the
4
+ // sibling slot before the scroll-content. Also the base (index.ts re-exports it) for headless /
5
+ // web. Metro picks this on an iOS host; no Platform.OS read. Mirrors the React/Vue iOS binding.
6
+ //
7
+ // UNLIKE Android, iOS has only ONE host intrinsic pair regardless of axis (both horizontal and
8
+ // vertical map to RCTScrollView / RCTScrollContentView) — `shared.ts`'s `scrollProps` already
9
+ // forwards `horizontal` as a plain prop ("iOS needs `horizontal` to flip RCTScrollView's axis").
10
+ // So, unlike `index.android.ts`, this file does NOT branch the host tag on `isHorizontal` — doing
11
+ // so anyway (mirroring Android's shape for symmetry) used to declare `<ng-content>` once per
12
+ // `@if`/`@else` branch, which trips a documented Angular limitation: content projected into the
13
+ // FIRST (`@if`) branch never receives Angular's native catch-up placement, only the SECOND
14
+ // (`@else`) branch does (angular/angular#53310, #54840 — Angular's own docs: "You should not
15
+ // conditionally include <ng-content> with @if, @for, or @switch"). Symptom here was axis-specific:
16
+ // a horizontal FlatList's cells landed outside the ScrollView entirely. See angular-adapter skill
17
+ // §18 for the full investigation. Fix: single unconditional `<ng-content>` call site.
18
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, ElementRef, inject, } from '@angular/core';
19
+ import { anchorHostStyle, RefreshControlHost, ScrollContentView, ScrollViewHost, SymbioteHostPropsDirective, } from '../../primitives';
20
+ import { ScrollViewBase, ScrollViewProjectionDirective, SCROLL_VIEW_INPUTS } from './shared';
21
+ import * as i0 from "@angular/core";
22
+ // The symbiote-* host elements are imported as standalone components; the props directive is
23
+ // applied as a template directive and the projection directive manages sticky-header wrapping.
24
+ export class ScrollView extends ScrollViewBase {
25
+ // This component's OWN host — the non-painting anchor `class="..."` at the use site resolves
26
+ // onto (see anchorHostStyle's doc comment) — NOT `#host` in the template above, which targets
27
+ // the real inner `symbiote-scroll-view` one level down.
28
+ elementRef = inject(ElementRef);
29
+ get scrollProps() {
30
+ const props = super.scrollProps;
31
+ return { ...props, style: [anchorHostStyle(this.elementRef), props.style] };
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ScrollView, deps: null, target: i0.ɵɵFactoryTarget.Component });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: ScrollView, isStandalone: true, selector: "ScrollView", inputs: { style: "style", contentContainerStyle: "contentContainerStyle", horizontal: "horizontal", scrollEnabled: "scrollEnabled", showsVerticalScrollIndicator: "showsVerticalScrollIndicator", showsHorizontalScrollIndicator: "showsHorizontalScrollIndicator", pagingEnabled: "pagingEnabled", bounces: "bounces", decelerationRate: "decelerationRate", scrollEventThrottle: "scrollEventThrottle", contentInset: "contentInset", contentOffset: "contentOffset", removeClippedSubviews: "removeClippedSubviews", snapToInterval: "snapToInterval", snapToOffsets: "snapToOffsets", snapToAlignment: "snapToAlignment", snapToStart: "snapToStart", snapToEnd: "snapToEnd", disableIntervalMomentum: "disableIntervalMomentum", stickyHeaderIndices: "stickyHeaderIndices", invertStickyHeaders: "invertStickyHeaders", StickyHeaderComponent: "StickyHeaderComponent", keyboardDismissMode: "keyboardDismissMode", keyboardShouldPersistTaps: "keyboardShouldPersistTaps", maintainVisibleContentPosition: "maintainVisibleContentPosition", alwaysBounceHorizontal: "alwaysBounceHorizontal", alwaysBounceVertical: "alwaysBounceVertical", centerContent: "centerContent", scrollIndicatorInsets: "scrollIndicatorInsets", indicatorStyle: "indicatorStyle", directionalLockEnabled: "directionalLockEnabled", automaticallyAdjustKeyboardInsets: "automaticallyAdjustKeyboardInsets", contentInsetAdjustmentBehavior: "contentInsetAdjustmentBehavior", minimumZoomScale: "minimumZoomScale", maximumZoomScale: "maximumZoomScale", zoomScale: "zoomScale", bouncesZoom: "bouncesZoom", pinchGestureEnabled: "pinchGestureEnabled", nestedScrollEnabled: "nestedScrollEnabled", overScrollMode: "overScrollMode", fadingEdgeLength: "fadingEdgeLength", persistentScrollbar: "persistentScrollbar", endFillColor: "endFillColor", onScroll: "onScroll", onScrollBeginDrag: "onScrollBeginDrag", onScrollEndDrag: "onScrollEndDrag", onMomentumScrollBegin: "onMomentumScrollBegin", onMomentumScrollEnd: "onMomentumScrollEnd", testID: "testID", nativeID: "nativeID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", role: "role", "aria-label": "aria-label", "aria-labelledby": "aria-labelledby", "aria-live": "aria-live", "aria-hidden": "aria-hidden", "aria-busy": "aria-busy", "aria-checked": "aria-checked", "aria-disabled": "aria-disabled", "aria-expanded": "aria-expanded", "aria-selected": "aria-selected", "aria-modal": "aria-modal", "aria-valuemax": "aria-valuemax", "aria-valuemin": "aria-valuemin", "aria-valuenow": "aria-valuenow", "aria-valuetext": "aria-valuetext" }, usesInheritance: true, ngImport: i0, template: `
35
+ <symbiote-scroll-view #host="symbioteHost" [symbioteHostProps]="scrollProps">
36
+ @if (hasProjectedRefreshControl) {
37
+ <symbiote-refresh-control
38
+ #refreshHost="symbioteHost"
39
+ [symbioteHostProps]="iosRefreshControlProps"
40
+ (refresh)="handleProjectedRefresh(refreshHost.node)"
41
+ ></symbiote-refresh-control>
42
+ }
43
+ <symbiote-scroll-content
44
+ [symbioteHostProps]="contentProps"
45
+ [symbioteScrollViewProjection]="projectionController"
46
+ >
47
+ <ng-content></ng-content>
48
+ </symbiote-scroll-content>
49
+ </symbiote-scroll-view>
50
+ `, isInline: true, dependencies: [{ kind: "component", type: ScrollViewHost, selector: "symbiote-scroll-view" }, { kind: "component", type: ScrollContentView, selector: "symbiote-scroll-content" }, { kind: "component", type: RefreshControlHost, selector: "symbiote-refresh-control" }, { kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "directive", type: ScrollViewProjectionDirective, selector: "[symbioteScrollViewProjection]", inputs: ["symbioteScrollViewProjection"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: ScrollView, decorators: [{
53
+ type: Component,
54
+ args: [{
55
+ selector: 'ScrollView',
56
+ standalone: true,
57
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
58
+ imports: [
59
+ ScrollViewHost,
60
+ ScrollContentView,
61
+ RefreshControlHost,
62
+ SymbioteHostPropsDirective,
63
+ ScrollViewProjectionDirective,
64
+ ],
65
+ changeDetection: ChangeDetectionStrategy.OnPush,
66
+ inputs: SCROLL_VIEW_INPUTS,
67
+ template: `
68
+ <symbiote-scroll-view #host="symbioteHost" [symbioteHostProps]="scrollProps">
69
+ @if (hasProjectedRefreshControl) {
70
+ <symbiote-refresh-control
71
+ #refreshHost="symbioteHost"
72
+ [symbioteHostProps]="iosRefreshControlProps"
73
+ (refresh)="handleProjectedRefresh(refreshHost.node)"
74
+ ></symbiote-refresh-control>
75
+ }
76
+ <symbiote-scroll-content
77
+ [symbioteHostProps]="contentProps"
78
+ [symbioteScrollViewProjection]="projectionController"
79
+ >
80
+ <ng-content></ng-content>
81
+ </symbiote-scroll-content>
82
+ </symbiote-scroll-view>
83
+ `,
84
+ }]
85
+ }] });
86
+ //# sourceMappingURL=index.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../src/components/scroll-view/index.ios.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,oGAAoG;AACpG,oGAAoG;AACpG,gGAAgG;AAChG,gGAAgG;AAChG,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,iGAAiG;AACjG,kGAAkG;AAClG,6FAA6F;AAC7F,gGAAgG;AAChG,2FAA2F;AAC3F,6FAA6F;AAC7F,mGAAmG;AACnG,kGAAkG;AAClG,sFAAsF;AAEtF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,SAAS,EACT,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;;AAG7F,6FAA6F;AAC7F,+FAA+F;AAgC/F,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5C,6FAA6F;IAC7F,8FAA8F;IAC9F,wDAAwD;IACvC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAa,WAAW;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAChC,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9E,CAAC;uGATU,UAAU;2FAAV,UAAU,+6GAlBX;;;;;;;;;;;;;;;;GAgBT,4DAxBC,cAAc,iEACd,iBAAiB,oEACjB,kBAAkB,qEAClB,0BAA0B,2HAC1B,6BAA6B;;2FAsBpB,UAAU;kBA/BtB,SAAS;mBAAC;oBACT,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,OAAO,EAAE;wBACP,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;wBAClB,0BAA0B;wBAC1B,6BAA6B;qBAC9B;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,MAAM,EAAE,kBAAkB;oBAC1B,QAAQ,EAAE;;;;;;;;;;;;;;;;GAgBT;iBACF"}
@@ -0,0 +1,6 @@
1
+ // Base / default ScrollView. Re-exports the iOS build. Metro overrides this with index.ios.ts /
2
+ // index.android.ts on a real host; under tsx / tsc / web the host resolves here. Filename is the
3
+ // selector, no Platform.OS read. See ADR 0020 / 0024.
4
+ export * from './index.ios';
5
+ export { ScrollViewStickyHeader } from './sticky-header';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/scroll-view/index.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,iGAAiG;AACjG,sDAAsD;AAEtD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type AnimatedValue, type ISymbioteNode } from '@symbiote-native/engine';
2
+ type IInsert = (parent: ISymbioteNode, child: ISymbioteNode, beforeChild?: ISymbioteNode) => void;
3
+ type IRemove = (parent: ISymbioteNode, child: ISymbioteNode) => void;
4
+ export interface IScrollViewProjectionConfig {
5
+ stickyHeaderIndices: readonly number[] | undefined;
6
+ invertStickyHeaders: boolean | undefined;
7
+ scrollViewHeight: number | undefined;
8
+ scrollAnimatedValue: AnimatedValue;
9
+ customStickyHeaderComponent: unknown;
10
+ excludeRefreshControl: boolean;
11
+ }
12
+ export declare class ScrollViewProjectionController {
13
+ config: IScrollViewProjectionConfig;
14
+ private contentNode;
15
+ private readonly records;
16
+ private readonly headerLayoutYs;
17
+ constructor(config: IScrollViewProjectionConfig);
18
+ update(config: IScrollViewProjectionConfig): void;
19
+ bindContentNode(node: ISymbioteNode): void;
20
+ appendProjectedChild(parent: ISymbioteNode, child: ISymbioteNode, insert: IInsert): void;
21
+ insertProjectedChild(parent: ISymbioteNode, child: ISymbioteNode, beforeChild: ISymbioteNode | null, insert: IInsert): void;
22
+ removeProjectedChild(child: ISymbioteNode, remove: IRemove): boolean;
23
+ nextStickyHeaderY(index: number): number | undefined;
24
+ recordHeaderLayoutY(index: number, y: number): void;
25
+ private insertRecord;
26
+ private reconcileStickyRecords;
27
+ private wrapRecord;
28
+ private unwrapRecord;
29
+ }
30
+ export declare function getScrollViewProjection(node: ISymbioteNode): ScrollViewProjectionController | undefined;
31
+ export declare function removeScrollViewProjectedChild(child: ISymbioteNode, remove: IRemove): boolean;
32
+ export {};
@@ -0,0 +1,312 @@
1
+ import { AnimatedProps, dlog, isAnchor, reduceProps, routeProp, whenCommitted, createElement, appendChild, insertBefore, removeChild, } from '@symbiote-native/engine';
2
+ import { computeStickyInterpolation, readLayoutNumber, stickyDebounceMs, STICKY_HEADER_Z_INDEX, } from '@symbiote-native/components';
3
+ import { descriptorFor } from '@symbiote-native/components';
4
+ import { Platform } from '@symbiote-native/engine';
5
+ const contentProjection = new WeakMap();
6
+ const projectedWrappers = new WeakMap();
7
+ function createViewNode() {
8
+ const descriptor = descriptorFor('symbiote-view');
9
+ return createElement(descriptor.component, descriptor.isText);
10
+ }
11
+ function directNode(record) {
12
+ return record.wrapper ?? record.child;
13
+ }
14
+ function isProjectedRefreshControl(node) {
15
+ if (node.component === 'PullToRefreshView' || node.component === 'AndroidSwipeRefreshLayout') {
16
+ return true;
17
+ }
18
+ // Angular public <RefreshControl> is an anchor host whose real native refresh node lives inside
19
+ // its component view. Projection filtering must recognize that anchor, otherwise iOS re-renders
20
+ // a RefreshControl sibling and also leaves the projected one inside the scroll content.
21
+ return isAnchor(node) && node.children.some(isProjectedRefreshControl);
22
+ }
23
+ class StickyProjectionWrapper {
24
+ controller;
25
+ childIndex;
26
+ node;
27
+ measured = false;
28
+ layoutY = 0;
29
+ layoutHeight = 0;
30
+ animatedTranslateY;
31
+ animatedProps;
32
+ cancelBind;
33
+ listenerId;
34
+ debounceTimer;
35
+ translateY = null;
36
+ haveReceivedInitialZeroTranslateY = true;
37
+ constructor(controller, childIndex, node) {
38
+ this.controller = controller;
39
+ this.childIndex = childIndex;
40
+ this.node = node;
41
+ this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
42
+ inputRange: [-1, 0],
43
+ outputRange: [0, 0],
44
+ });
45
+ this.rebuild();
46
+ }
47
+ destroy() {
48
+ this.cancelBind?.();
49
+ this.cancelBind = undefined;
50
+ if (this.listenerId !== undefined) {
51
+ this.animatedTranslateY.removeListener(this.listenerId);
52
+ this.listenerId = undefined;
53
+ }
54
+ if (this.debounceTimer !== undefined) {
55
+ clearTimeout(this.debounceTimer);
56
+ this.debounceTimer = undefined;
57
+ }
58
+ if (this.animatedProps !== undefined) {
59
+ this.animatedProps.__detach();
60
+ this.animatedProps = undefined;
61
+ }
62
+ }
63
+ rebuild() {
64
+ if (this.listenerId !== undefined) {
65
+ this.animatedTranslateY.removeListener(this.listenerId);
66
+ this.listenerId = undefined;
67
+ }
68
+ const { inputRange, outputRange } = computeStickyInterpolation({
69
+ measured: this.measured,
70
+ inverted: this.controller.config.invertStickyHeaders,
71
+ scrollViewHeight: this.controller.config.scrollViewHeight,
72
+ layoutY: this.layoutY,
73
+ layoutHeight: this.layoutHeight,
74
+ nextHeaderLayoutY: this.controller.nextStickyHeaderY(this.childIndex),
75
+ });
76
+ this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
77
+ inputRange,
78
+ outputRange,
79
+ });
80
+ this.listenerId = this.animatedTranslateY.addListener(this.animatedValueListener);
81
+ this.applyProps();
82
+ dlog(`Angular ScrollView projection sticky index=${this.childIndex} measured=${this.measured} y=${this.layoutY}`);
83
+ }
84
+ onLayout = (event) => {
85
+ const y = readLayoutNumber(event, 'y');
86
+ const height = readLayoutNumber(event, 'height');
87
+ if (y !== undefined)
88
+ this.layoutY = y;
89
+ if (height !== undefined)
90
+ this.layoutHeight = height;
91
+ this.measured = true;
92
+ this.controller.recordHeaderLayoutY(this.childIndex, this.layoutY);
93
+ this.rebuild();
94
+ };
95
+ animatedValueListener = ({ value }) => {
96
+ if (typeof value !== 'number')
97
+ return;
98
+ if (value === 0 && !this.haveReceivedInitialZeroTranslateY) {
99
+ this.haveReceivedInitialZeroTranslateY = true;
100
+ return;
101
+ }
102
+ if (this.debounceTimer !== undefined)
103
+ clearTimeout(this.debounceTimer);
104
+ this.debounceTimer = setTimeout(() => {
105
+ this.translateY = value;
106
+ if (value !== 0)
107
+ this.haveReceivedInitialZeroTranslateY = false;
108
+ this.applyProps();
109
+ }, stickyDebounceMs(Platform.OS));
110
+ };
111
+ props() {
112
+ const style = {
113
+ transform: [{ translateY: this.animatedTranslateY }],
114
+ zIndex: STICKY_HEADER_Z_INDEX,
115
+ };
116
+ const passthrough = this.translateY === null
117
+ ? undefined
118
+ : { transform: [{ translateY: this.translateY }], zIndex: STICKY_HEADER_Z_INDEX };
119
+ return {
120
+ style: passthrough === undefined ? style : [style, passthrough],
121
+ onLayout: this.onLayout,
122
+ collapsable: false,
123
+ };
124
+ }
125
+ applyProps() {
126
+ const props = this.props();
127
+ const reduced = reduceProps(props);
128
+ for (const [key, value] of Object.entries(reduced))
129
+ routeProp(this.node, key, value);
130
+ const next = new AnimatedProps(props);
131
+ next.__attach();
132
+ if (this.animatedProps !== undefined)
133
+ this.animatedProps.__detach();
134
+ this.animatedProps = next;
135
+ this.cancelBind?.();
136
+ this.cancelBind = whenCommitted(this.node, () => next.setNativeView(this.node));
137
+ }
138
+ }
139
+ export class ScrollViewProjectionController {
140
+ config;
141
+ contentNode;
142
+ records = [];
143
+ headerLayoutYs = new Map();
144
+ constructor(config) {
145
+ this.config = config;
146
+ }
147
+ update(config) {
148
+ this.config = config;
149
+ this.reconcileStickyRecords();
150
+ }
151
+ bindContentNode(node) {
152
+ dlog(`Angular ScrollView projection bindContentNode node=${node.component} preExistingChildren=${node.children.length} recordsBefore=${this.records.length}`);
153
+ this.contentNode = node;
154
+ contentProjection.set(node, this);
155
+ if (this.records.length === 0 && node.children.length > 0) {
156
+ for (const child of [...node.children]) {
157
+ this.records.push({ child, wrapper: undefined, sticky: undefined, stickyIndex: undefined });
158
+ }
159
+ }
160
+ this.reconcileStickyRecords();
161
+ }
162
+ appendProjectedChild(parent, child, insert) {
163
+ dlog(`Angular ScrollView projection appendProjectedChild parent=${parent.component} child=${child.component} recordsBefore=${this.records.length}`);
164
+ const existing = this.records.find(record => record.child === child);
165
+ if (existing !== undefined)
166
+ this.records.splice(this.records.indexOf(existing), 1);
167
+ const record = {
168
+ child,
169
+ wrapper: undefined,
170
+ sticky: undefined,
171
+ stickyIndex: undefined,
172
+ };
173
+ this.records.push(record);
174
+ this.insertRecord(parent, record, undefined, insert);
175
+ this.reconcileStickyRecords();
176
+ }
177
+ insertProjectedChild(parent, child, beforeChild, insert) {
178
+ dlog(`Angular ScrollView projection insertProjectedChild parent=${parent.component} child=${child.component} before=${beforeChild ? `${beforeChild.component}` : 'null'} recordsBefore=${this.records.length}`);
179
+ const existing = this.records.find(record => record.child === child);
180
+ if (existing !== undefined)
181
+ this.records.splice(this.records.indexOf(existing), 1);
182
+ const beforeRecord = beforeChild === null
183
+ ? undefined
184
+ : this.records.find(record => record.child === beforeChild || record.wrapper === beforeChild);
185
+ const record = {
186
+ child,
187
+ wrapper: undefined,
188
+ sticky: undefined,
189
+ stickyIndex: undefined,
190
+ };
191
+ const index = beforeRecord === undefined ? this.records.length : this.records.indexOf(beforeRecord);
192
+ this.records.splice(index, 0, record);
193
+ this.insertRecord(parent, record, beforeRecord, insert);
194
+ this.reconcileStickyRecords();
195
+ }
196
+ removeProjectedChild(child, remove) {
197
+ const record = this.records.find(entry => entry.child === child || entry.wrapper === child);
198
+ if (record === undefined || this.contentNode === undefined)
199
+ return false;
200
+ record.sticky?.destroy();
201
+ projectedWrappers.delete(record.child);
202
+ const direct = directNode(record);
203
+ if (direct.parent === this.contentNode)
204
+ remove(this.contentNode, direct);
205
+ this.records.splice(this.records.indexOf(record), 1);
206
+ this.reconcileStickyRecords();
207
+ return true;
208
+ }
209
+ nextStickyHeaderY(index) {
210
+ const stickyIndices = this.config.stickyHeaderIndices ?? [];
211
+ const next = stickyIndices.find(entry => entry > index);
212
+ return next === undefined ? undefined : this.headerLayoutYs.get(next);
213
+ }
214
+ recordHeaderLayoutY(index, y) {
215
+ if (this.headerLayoutYs.get(index) === y)
216
+ return;
217
+ this.headerLayoutYs.set(index, y);
218
+ for (const record of this.records)
219
+ record.sticky?.rebuild();
220
+ }
221
+ insertRecord(parent, record, beforeRecord, insert) {
222
+ const before = beforeRecord === undefined ? undefined : directNode(beforeRecord);
223
+ dlog(`Angular ScrollView projection insertRecord physicalParent=${parent.component} child=${record.child.component} before=${before ? before.component : 'undefined(append)'} parentIsContentNode=${parent === this.contentNode}`);
224
+ if (before === undefined)
225
+ insert(parent, record.child);
226
+ else
227
+ insert(parent, record.child, before);
228
+ }
229
+ reconcileStickyRecords() {
230
+ if (this.contentNode === undefined)
231
+ return;
232
+ dlog(`Angular ScrollView projection reconcile contentNode=${this.contentNode.component} records=${this.records.length} contentNodeActualChildren=${this.contentNode.children.length}`);
233
+ const stickyIndices = new Set(this.config.stickyHeaderIndices ?? []);
234
+ if (this.config.customStickyHeaderComponent !== undefined && stickyIndices.size > 0) {
235
+ dlog('Angular ScrollView projection uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
236
+ }
237
+ let paintIndex = 0;
238
+ for (const record of [...this.records]) {
239
+ if (this.config.excludeRefreshControl && isProjectedRefreshControl(record.child)) {
240
+ this.removeProjectedChild(record.child, (parent, child) => removeChild(parent, child));
241
+ continue;
242
+ }
243
+ const countsAsChild = !isAnchor(record.child) && !isProjectedRefreshControl(record.child);
244
+ const childIndex = paintIndex;
245
+ if (countsAsChild)
246
+ paintIndex += 1;
247
+ const shouldWrap = countsAsChild && stickyIndices.has(childIndex);
248
+ if (shouldWrap && record.wrapper === undefined)
249
+ this.wrapRecord(record, childIndex);
250
+ else if (!shouldWrap && record.wrapper !== undefined)
251
+ this.unwrapRecord(record);
252
+ else if (shouldWrap && record.stickyIndex !== childIndex) {
253
+ record.sticky?.destroy();
254
+ record.sticky = new StickyProjectionWrapper(this, childIndex, directNode(record));
255
+ record.stickyIndex = childIndex;
256
+ }
257
+ else if (shouldWrap)
258
+ record.sticky?.rebuild();
259
+ }
260
+ }
261
+ // Auto projection runs after Angular has already created projected child host nodes. At this
262
+ // renderer boundary we can AOT-safely rearrange engine nodes, but we cannot instantiate an
263
+ // arbitrary Angular component class as a wrapper without owning a ViewContainerRef/injector and
264
+ // Angular projectable nodes for its <ng-content>. Therefore the automatic sticky path always uses
265
+ // the built-in engine-node wrapper; custom StickyHeaderComponent wrappers remain supported by
266
+ // explicit Angular composition with <ScrollViewStickyHeader>/<symbiote-sticky-header> or a user
267
+ // component that composes it in the template.
268
+ wrapRecord(record, childIndex) {
269
+ if (this.contentNode === undefined)
270
+ return;
271
+ const wrapper = createViewNode();
272
+ const currentParent = record.child.parent;
273
+ const currentIndex = currentParent?.children.indexOf(record.child) ?? -1;
274
+ if (currentParent === this.contentNode && currentIndex >= 0) {
275
+ insertBefore(this.contentNode, wrapper, record.child);
276
+ removeChild(this.contentNode, record.child);
277
+ }
278
+ else {
279
+ appendChild(this.contentNode, wrapper);
280
+ }
281
+ appendChild(wrapper, record.child);
282
+ record.wrapper = wrapper;
283
+ record.sticky = new StickyProjectionWrapper(this, childIndex, wrapper);
284
+ record.stickyIndex = childIndex;
285
+ projectedWrappers.set(record.child, record);
286
+ }
287
+ unwrapRecord(record) {
288
+ if (this.contentNode === undefined || record.wrapper === undefined)
289
+ return;
290
+ record.sticky?.destroy();
291
+ record.sticky = undefined;
292
+ record.stickyIndex = undefined;
293
+ const wrapper = record.wrapper;
294
+ insertBefore(this.contentNode, record.child, wrapper);
295
+ removeChild(this.contentNode, wrapper);
296
+ record.wrapper = undefined;
297
+ projectedWrappers.delete(record.child);
298
+ }
299
+ }
300
+ export function getScrollViewProjection(node) {
301
+ return contentProjection.get(node);
302
+ }
303
+ export function removeScrollViewProjectedChild(child, remove) {
304
+ const record = projectedWrappers.get(child);
305
+ if (record === undefined)
306
+ return false;
307
+ const controller = record.wrapper?.parent
308
+ ? contentProjection.get(record.wrapper.parent)
309
+ : undefined;
310
+ return controller?.removeProjectedChild(child, remove) ?? false;
311
+ }
312
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../src/components/scroll-view/projection.ts"],"names":[],"mappings":"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"}