@apollohg/react-native-rich-text-editor 2.0.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 (494) hide show
  1. package/LICENSE +160 -0
  2. package/README.md +259 -0
  3. package/RUST-STANDARD-LIBRARY-NOTICES.html +8266 -0
  4. package/ReactNativeProseEditor.podspec +59 -0
  5. package/THIRD_PARTY_NOTICES.md +31155 -0
  6. package/android/build.gradle +188 -0
  7. package/android/consumer-rules.pro +18 -0
  8. package/android/expo/build.gradle +17 -0
  9. package/android/src/debug/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +7 -0
  10. package/android/src/main/assets/editor-icons/MaterialIcons.json +2236 -0
  11. package/android/src/main/assets/editor-icons/MaterialIcons.ttf +0 -0
  12. package/android/src/main/java/com/apollohg/editor/AndroidApiCompat.kt +19 -0
  13. package/android/src/main/java/com/apollohg/editor/AndroidCollaborationTransport.kt +860 -0
  14. package/android/src/main/java/com/apollohg/editor/CaretGeometry.kt +91 -0
  15. package/android/src/main/java/com/apollohg/editor/CodeHighlighting.kt +141 -0
  16. package/android/src/main/java/com/apollohg/editor/DecodedBitmapBudget.kt +250 -0
  17. package/android/src/main/java/com/apollohg/editor/EditorAddons.kt +133 -0
  18. package/android/src/main/java/com/apollohg/editor/EditorBlockSpacing.kt +51 -0
  19. package/android/src/main/java/com/apollohg/editor/EditorBoxDrawable.kt +16 -0
  20. package/android/src/main/java/com/apollohg/editor/EditorBoxDrawing.kt +234 -0
  21. package/android/src/main/java/com/apollohg/editor/EditorCheckboxSpan.kt +87 -0
  22. package/android/src/main/java/com/apollohg/editor/EditorCodeHighlighting.kt +120 -0
  23. package/android/src/main/java/com/apollohg/editor/EditorDecorationLayer.java +18 -0
  24. package/android/src/main/java/com/apollohg/editor/EditorDocumentLayout.kt +626 -0
  25. package/android/src/main/java/com/apollohg/editor/EditorEditText.kt +1042 -0
  26. package/android/src/main/java/com/apollohg/editor/EditorEditTextAnnotations.kt +191 -0
  27. package/android/src/main/java/com/apollohg/editor/EditorEditTextCaret.kt +100 -0
  28. package/android/src/main/java/com/apollohg/editor/EditorEditTextClipboard.kt +101 -0
  29. package/android/src/main/java/com/apollohg/editor/EditorEditTextComposition.kt +220 -0
  30. package/android/src/main/java/com/apollohg/editor/EditorEditTextConfiguration.kt +316 -0
  31. package/android/src/main/java/com/apollohg/editor/EditorEditTextCorrection.kt +303 -0
  32. package/android/src/main/java/com/apollohg/editor/EditorEditTextDeferredUpdates.kt +327 -0
  33. package/android/src/main/java/com/apollohg/editor/EditorEditTextDeletion.kt +258 -0
  34. package/android/src/main/java/com/apollohg/editor/EditorEditTextDiagnostics.kt +83 -0
  35. package/android/src/main/java/com/apollohg/editor/EditorEditTextDragDrop.kt +67 -0
  36. package/android/src/main/java/com/apollohg/editor/EditorEditTextExternalComposition.kt +357 -0
  37. package/android/src/main/java/com/apollohg/editor/EditorEditTextHardwareInput.kt +277 -0
  38. package/android/src/main/java/com/apollohg/editor/EditorEditTextImages.kt +280 -0
  39. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputLifecycle.kt +183 -0
  40. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputPreparation.kt +79 -0
  41. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputTraits.kt +384 -0
  42. package/android/src/main/java/com/apollohg/editor/EditorEditTextLayout.kt +100 -0
  43. package/android/src/main/java/com/apollohg/editor/EditorEditTextNativeMutation.kt +243 -0
  44. package/android/src/main/java/com/apollohg/editor/EditorEditTextPlaceholder.kt +154 -0
  45. package/android/src/main/java/com/apollohg/editor/EditorEditTextRenderPatch.kt +347 -0
  46. package/android/src/main/java/com/apollohg/editor/EditorEditTextRendering.kt +313 -0
  47. package/android/src/main/java/com/apollohg/editor/EditorEditTextRustCommands.kt +281 -0
  48. package/android/src/main/java/com/apollohg/editor/EditorEditTextSelection.kt +352 -0
  49. package/android/src/main/java/com/apollohg/editor/EditorEditTextState.kt +113 -0
  50. package/android/src/main/java/com/apollohg/editor/EditorEditTextTaskMarkers.kt +92 -0
  51. package/android/src/main/java/com/apollohg/editor/EditorEditTextTextCommit.kt +327 -0
  52. package/android/src/main/java/com/apollohg/editor/EditorEditTextToolbar.kt +84 -0
  53. package/android/src/main/java/com/apollohg/editor/EditorEditTextUpdates.kt +245 -0
  54. package/android/src/main/java/com/apollohg/editor/EditorGlyphHeightCursorDrawable.kt +42 -0
  55. package/android/src/main/java/com/apollohg/editor/EditorHeightBehavior.kt +13 -0
  56. package/android/src/main/java/com/apollohg/editor/EditorInputConnection.kt +923 -0
  57. package/android/src/main/java/com/apollohg/editor/EditorInputCoordinates.kt +191 -0
  58. package/android/src/main/java/com/apollohg/editor/EditorInputCorrection.kt +107 -0
  59. package/android/src/main/java/com/apollohg/editor/EditorInputCursorGeometry.kt +128 -0
  60. package/android/src/main/java/com/apollohg/editor/EditorInputSnapshots.kt +134 -0
  61. package/android/src/main/java/com/apollohg/editor/EditorInputSurroundingDeletion.kt +321 -0
  62. package/android/src/main/java/com/apollohg/editor/EditorKeyboardToolbarView.kt +851 -0
  63. package/android/src/main/java/com/apollohg/editor/EditorMentionStyle.kt +192 -0
  64. package/android/src/main/java/com/apollohg/editor/EditorReconciliationWatcher.kt +46 -0
  65. package/android/src/main/java/com/apollohg/editor/EditorStyleSheet.kt +303 -0
  66. package/android/src/main/java/com/apollohg/editor/EditorStyleSheetSpans.kt +253 -0
  67. package/android/src/main/java/com/apollohg/editor/EditorSurfaceInputConnection.kt +67 -0
  68. package/android/src/main/java/com/apollohg/editor/EditorTextDecorationDrawing.kt +143 -0
  69. package/android/src/main/java/com/apollohg/editor/EditorTextSurface.kt +712 -0
  70. package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceDragDrop.kt +94 -0
  71. package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceInteraction.kt +708 -0
  72. package/android/src/main/java/com/apollohg/editor/EditorTheme.kt +650 -0
  73. package/android/src/main/java/com/apollohg/editor/EditorV2Adapter.kt +912 -0
  74. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterMutations.kt +402 -0
  75. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterRendering.kt +123 -0
  76. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterSelection.kt +203 -0
  77. package/android/src/main/java/com/apollohg/editor/EditorV2Backend.kt +120 -0
  78. package/android/src/main/java/com/apollohg/editor/EditorV2Driver.kt +87 -0
  79. package/android/src/main/java/com/apollohg/editor/EditorV2Registry.kt +97 -0
  80. package/android/src/main/java/com/apollohg/editor/EditorV2RenderValidation.kt +409 -0
  81. package/android/src/main/java/com/apollohg/editor/ExpoAutoGrowStyleSizePublisher.kt +34 -0
  82. package/android/src/main/java/com/apollohg/editor/ImageResizeOverlayView.kt +266 -0
  83. package/android/src/main/java/com/apollohg/editor/ImeTextCoordinateMapper.kt +102 -0
  84. package/android/src/main/java/com/apollohg/editor/KeyboardToolbarImeAnimationController.kt +101 -0
  85. package/android/src/main/java/com/apollohg/editor/MentionSuggestionChipView.kt +234 -0
  86. package/android/src/main/java/com/apollohg/editor/NativeCollaborationTransportRegistry.kt +493 -0
  87. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoView.kt +813 -0
  88. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewAtoms.kt +68 -0
  89. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewBinding.kt +126 -0
  90. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewDiagnostics.kt +208 -0
  91. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewErrors.kt +146 -0
  92. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewEvents.kt +150 -0
  93. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewExternalComposition.kt +39 -0
  94. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewFocus.kt +176 -0
  95. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewLifecycle.kt +302 -0
  96. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewMentions.kt +259 -0
  97. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewNativeActions.kt +179 -0
  98. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewOutsideTap.kt +214 -0
  99. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPendingUpdates.kt +376 -0
  100. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewProperties.kt +234 -0
  101. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPropertyRetries.kt +197 -0
  102. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewToolbar.kt +285 -0
  103. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewTypes.kt +28 -0
  104. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewUpdates.kt +271 -0
  105. package/android/src/main/java/com/apollohg/editor/NativeEditorModule.kt +687 -0
  106. package/android/src/main/java/com/apollohg/editor/NativeEditorOutsideTapDispatcher.kt +380 -0
  107. package/android/src/main/java/com/apollohg/editor/NativeEditorV2Numbers.kt +45 -0
  108. package/android/src/main/java/com/apollohg/editor/NativeEditorViewRegistry.kt +372 -0
  109. package/android/src/main/java/com/apollohg/editor/NativeImagePipeline.kt +22 -0
  110. package/android/src/main/java/com/apollohg/editor/NativeToolbar.kt +193 -0
  111. package/android/src/main/java/com/apollohg/editor/NativeToolbarIcons.kt +177 -0
  112. package/android/src/main/java/com/apollohg/editor/NativeToolbarItem.kt +274 -0
  113. package/android/src/main/java/com/apollohg/editor/OkHttpCollaborationSocket.kt +102 -0
  114. package/android/src/main/java/com/apollohg/editor/OrderedListMarkerFormatter.kt +130 -0
  115. package/android/src/main/java/com/apollohg/editor/PointerTransparentView.java +18 -0
  116. package/android/src/main/java/com/apollohg/editor/PositionBridge.kt +128 -0
  117. package/android/src/main/java/com/apollohg/editor/ProseViewerView.kt +854 -0
  118. package/android/src/main/java/com/apollohg/editor/RemoteSelectionOverlayView.kt +314 -0
  119. package/android/src/main/java/com/apollohg/editor/RenderBlockSpans.kt +314 -0
  120. package/android/src/main/java/com/apollohg/editor/RenderBridge.kt +224 -0
  121. package/android/src/main/java/com/apollohg/editor/RenderBridgeBlockStyles.kt +407 -0
  122. package/android/src/main/java/com/apollohg/editor/RenderBridgeElements.kt +544 -0
  123. package/android/src/main/java/com/apollohg/editor/RenderBridgeInlineAndAtoms.kt +631 -0
  124. package/android/src/main/java/com/apollohg/editor/RenderBridgeParagraphs.kt +215 -0
  125. package/android/src/main/java/com/apollohg/editor/RenderImageDecoder.kt +748 -0
  126. package/android/src/main/java/com/apollohg/editor/RenderImageLoader.kt +900 -0
  127. package/android/src/main/java/com/apollohg/editor/RenderLayoutConstants.kt +117 -0
  128. package/android/src/main/java/com/apollohg/editor/RenderMediaSpans.kt +337 -0
  129. package/android/src/main/java/com/apollohg/editor/RenderParagraphSpans.kt +182 -0
  130. package/android/src/main/java/com/apollohg/editor/RichTextEditorView.kt +951 -0
  131. package/android/src/main/java/com/apollohg/editor/SharedNativeImagePipeline.kt +78 -0
  132. package/android/src/main/java/com/apollohg/editor/UniffiEditorV2Backend.kt +261 -0
  133. package/android/src/main/java/com/apollohg/editor/viewer/AndroidProseLayoutEngine.kt +1656 -0
  134. package/android/src/main/java/com/apollohg/editor/viewer/FabricAttachmentSidecars.kt +80 -0
  135. package/android/src/main/java/com/apollohg/editor/viewer/FabricLeaseHandleBridge.kt +59 -0
  136. package/android/src/main/java/com/apollohg/editor/viewer/FallbackSelectionGeometry.kt +450 -0
  137. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseDrawingView.kt +678 -0
  138. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseInstrumentation.kt +608 -0
  139. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayout.kt +186 -0
  140. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutCache.kt +393 -0
  141. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutRegistry.kt +828 -0
  142. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseTheme.kt +316 -0
  143. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerManager.kt +900 -0
  144. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerPackage.kt +16 -0
  145. package/android/src/main/java/com/apollohg/editor/viewer/PreparedViewerAtoms.kt +89 -0
  146. package/android/src/main/java/com/apollohg/editor/viewer/ViewerCodeHighlighting.kt +91 -0
  147. package/android/src/main/java/com/apollohg/editor/viewer/ViewerDocument.kt +453 -0
  148. package/android/src/main/java/com/apollohg/editor/viewer/ViewerFontEnvironment.kt +282 -0
  149. package/android/src/main/java/com/apollohg/editor/viewer/ViewerImagePipeline.kt +460 -0
  150. package/android/src/main/jni/CMakeLists.txt +85 -0
  151. package/android/src/main/jni/PreparedProseViewerMeasurementsManager.cpp +334 -0
  152. package/android/src/main/jni/ReactNativeProseEditorSpec.h +17 -0
  153. package/android/src/main/jni/reactnativeproseeditor.h +6 -0
  154. package/android/src/main/res/values/attrs.xml +6 -0
  155. package/android/src/release/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +9 -0
  156. package/app.plugin.js +62 -0
  157. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h +62 -0
  158. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerComponentDescriptor.h +30 -0
  159. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.cpp +192 -0
  160. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.h +46 -0
  161. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerState.h +145 -0
  162. package/dist/AtomHost.d.ts +17 -0
  163. package/dist/AtomHost.js +135 -0
  164. package/dist/DefaultAtomChip.d.ts +2 -0
  165. package/dist/DefaultAtomChip.js +22 -0
  166. package/dist/EditorAddon.d.ts +32 -0
  167. package/dist/EditorAddon.js +29 -0
  168. package/dist/EditorAddonNormalization.d.ts +6 -0
  169. package/dist/EditorAddonNormalization.js +48 -0
  170. package/dist/EditorMentionThemeNormalization.d.ts +8 -0
  171. package/dist/EditorMentionThemeNormalization.js +22 -0
  172. package/dist/EditorMentionThemeValidation.d.ts +12 -0
  173. package/dist/EditorMentionThemeValidation.js +95 -0
  174. package/dist/EditorStyleSheet.d.ts +4 -0
  175. package/dist/EditorStyleSheet.js +10 -0
  176. package/dist/EditorStyleSheetNormalization.d.ts +3 -0
  177. package/dist/EditorStyleSheetNormalization.js +226 -0
  178. package/dist/EditorStyleSheetTypes.d.ts +151 -0
  179. package/dist/EditorStyleSheetTypes.js +2 -0
  180. package/dist/EditorTheme.d.ts +117 -0
  181. package/dist/EditorTheme.js +41 -0
  182. package/dist/EditorToolbar.d.ts +4 -0
  183. package/dist/EditorToolbar.js +17 -0
  184. package/dist/EditorToolbarComponent.d.ts +13 -0
  185. package/dist/EditorToolbarComponent.js +24 -0
  186. package/dist/EditorToolbarItems.d.ts +9 -0
  187. package/dist/EditorToolbarItems.js +58 -0
  188. package/dist/EditorToolbarRegistry.d.ts +59 -0
  189. package/dist/EditorToolbarRegistry.js +175 -0
  190. package/dist/EditorToolbarTypes.d.ts +273 -0
  191. package/dist/EditorToolbarTypes.js +2 -0
  192. package/dist/EditorToolbarVisuals.d.ts +154 -0
  193. package/dist/EditorToolbarVisuals.js +228 -0
  194. package/dist/EditorUpdateRevision.d.ts +8 -0
  195. package/dist/EditorUpdateRevision.js +22 -0
  196. package/dist/ExternalTextComposition.d.ts +45 -0
  197. package/dist/ExternalTextComposition.js +537 -0
  198. package/dist/ImageLoadingPolicy.d.ts +54 -0
  199. package/dist/ImageLoadingPolicy.js +60 -0
  200. package/dist/NativeEditorBoundaryError.d.ts +111 -0
  201. package/dist/NativeEditorBoundaryError.js +268 -0
  202. package/dist/NativeEditorBridge.d.ts +9 -0
  203. package/dist/NativeEditorBridge.js +37 -0
  204. package/dist/NativeEditorCollaborationTransport.d.ts +154 -0
  205. package/dist/NativeEditorCollaborationTransport.js +275 -0
  206. package/dist/NativeEditorCreateConfig.d.ts +16 -0
  207. package/dist/NativeEditorCreateConfig.js +249 -0
  208. package/dist/NativeEditorCreateJson.d.ts +76 -0
  209. package/dist/NativeEditorCreateJson.js +474 -0
  210. package/dist/NativeEditorCreateValidation.d.ts +32 -0
  211. package/dist/NativeEditorCreateValidation.js +150 -0
  212. package/dist/NativeEditorDocumentBridge.d.ts +72 -0
  213. package/dist/NativeEditorDocumentBridge.js +305 -0
  214. package/dist/NativeEditorDocumentHandle.d.ts +70 -0
  215. package/dist/NativeEditorDocumentHandle.js +89 -0
  216. package/dist/NativeEditorLocalAwareness.d.ts +34 -0
  217. package/dist/NativeEditorLocalAwareness.js +153 -0
  218. package/dist/NativeEditorNativeModule.d.ts +48 -0
  219. package/dist/NativeEditorNativeModule.js +34 -0
  220. package/dist/NativeEditorRenderNormalization.d.ts +22 -0
  221. package/dist/NativeEditorRenderNormalization.js +274 -0
  222. package/dist/NativeEditorResultNormalization.d.ts +108 -0
  223. package/dist/NativeEditorResultNormalization.js +400 -0
  224. package/dist/NativeEditorTypes.d.ts +318 -0
  225. package/dist/NativeEditorTypes.js +15 -0
  226. package/dist/NativeEditorV2Decimal.d.ts +5 -0
  227. package/dist/NativeEditorV2Decimal.js +18 -0
  228. package/dist/NativeProseViewer.d.ts +122 -0
  229. package/dist/NativeProseViewer.js +130 -0
  230. package/dist/NativeRichTextEditor.d.ts +3 -0
  231. package/dist/NativeRichTextEditor.js +6 -0
  232. package/dist/ResourceLimits.d.ts +100 -0
  233. package/dist/ResourceLimits.js +80 -0
  234. package/dist/RichTextEditor.d.ts +4 -0
  235. package/dist/RichTextEditor.js +25 -0
  236. package/dist/RichTextEditorNativeTypes.d.ts +122 -0
  237. package/dist/RichTextEditorNativeTypes.js +2 -0
  238. package/dist/RichTextEditorNativeView.d.ts +12 -0
  239. package/dist/RichTextEditorNativeView.js +15 -0
  240. package/dist/RichTextEditorSerialization.d.ts +53 -0
  241. package/dist/RichTextEditorSerialization.js +283 -0
  242. package/dist/RichTextEditorTypes.d.ts +281 -0
  243. package/dist/RichTextEditorTypes.js +2 -0
  244. package/dist/ViewerConfiguration.d.ts +22 -0
  245. package/dist/ViewerConfiguration.js +6 -0
  246. package/dist/YjsCollaboration.d.ts +146 -0
  247. package/dist/YjsCollaboration.js +496 -0
  248. package/dist/addons.d.ts +193 -0
  249. package/dist/addons.js +122 -0
  250. package/dist/atomConstants.d.ts +3 -0
  251. package/dist/atomConstants.js +6 -0
  252. package/dist/atomInstances.d.ts +35 -0
  253. package/dist/atomInstances.js +79 -0
  254. package/dist/atomPolicy.d.ts +4 -0
  255. package/dist/atomPolicy.js +47 -0
  256. package/dist/atomUpdates.d.ts +2 -0
  257. package/dist/atomUpdates.js +38 -0
  258. package/dist/atoms.d.ts +92 -0
  259. package/dist/atoms.js +222 -0
  260. package/dist/attributeValidation.d.ts +4 -0
  261. package/dist/attributeValidation.js +97 -0
  262. package/dist/contentExpression.d.ts +6 -0
  263. package/dist/contentExpression.js +335 -0
  264. package/dist/index.d.ts +21 -0
  265. package/dist/index.js +78 -0
  266. package/dist/listMarkers.d.ts +15 -0
  267. package/dist/listMarkers.js +21 -0
  268. package/dist/schemaDefinition.d.ts +143 -0
  269. package/dist/schemaDefinition.js +206 -0
  270. package/dist/schemaDocument.d.ts +17 -0
  271. package/dist/schemaDocument.js +69 -0
  272. package/dist/schemaDocumentConstruction.d.ts +5 -0
  273. package/dist/schemaDocumentConstruction.js +125 -0
  274. package/dist/schemaNormalization.d.ts +29 -0
  275. package/dist/schemaNormalization.js +313 -0
  276. package/dist/schemaPresets.d.ts +68 -0
  277. package/dist/schemaPresets.js +198 -0
  278. package/dist/schemaResolution.d.ts +9 -0
  279. package/dist/schemaResolution.js +211 -0
  280. package/dist/schemas.d.ts +5 -0
  281. package/dist/schemas.js +28 -0
  282. package/dist/specs/PreparedProseViewerNativeComponent.d.ts +37 -0
  283. package/dist/specs/PreparedProseViewerNativeComponent.js +6 -0
  284. package/dist/useEditorToolbarInteractions.d.ts +12 -0
  285. package/dist/useEditorToolbarInteractions.js +218 -0
  286. package/dist/useEditorToolbarItems.d.ts +8 -0
  287. package/dist/useEditorToolbarItems.js +280 -0
  288. package/dist/useEditorToolbarPresentation.d.ts +4 -0
  289. package/dist/useEditorToolbarPresentation.js +203 -0
  290. package/dist/useEditorToolbarState.d.ts +63 -0
  291. package/dist/useEditorToolbarState.js +108 -0
  292. package/dist/useFocusPreservingFrames.d.ts +17 -0
  293. package/dist/useFocusPreservingFrames.js +108 -0
  294. package/dist/useNativeEditor.d.ts +66 -0
  295. package/dist/useNativeEditor.js +370 -0
  296. package/dist/useRichTextEditorCommands.d.ts +21 -0
  297. package/dist/useRichTextEditorCommands.js +299 -0
  298. package/dist/useRichTextEditorEvents.d.ts +18 -0
  299. package/dist/useRichTextEditorEvents.js +216 -0
  300. package/dist/useRichTextEditorMentions.d.ts +11 -0
  301. package/dist/useRichTextEditorMentions.js +316 -0
  302. package/dist/useRichTextEditorPresentation.d.ts +5 -0
  303. package/dist/useRichTextEditorPresentation.js +178 -0
  304. package/dist/useRichTextEditorState.d.ts +180 -0
  305. package/dist/useRichTextEditorState.js +405 -0
  306. package/dist/useRichTextEditorUpdates.d.ts +10 -0
  307. package/dist/useRichTextEditorUpdates.js +308 -0
  308. package/dist/useViewerAtoms.d.ts +38 -0
  309. package/dist/useViewerAtoms.js +288 -0
  310. package/expo-module.config.json +13 -0
  311. package/ios/EditorAddons.swift +354 -0
  312. package/ios/EditorCodeHighlighting.swift +184 -0
  313. package/ios/EditorCore.xcframework/Info.plist +44 -0
  314. package/ios/EditorCore.xcframework/ios-arm64/libeditor_core.a +0 -0
  315. package/ios/EditorCore.xcframework/ios-arm64_x86_64-simulator/libeditor_core.a +0 -0
  316. package/ios/EditorInteractionOverlays.swift +697 -0
  317. package/ios/EditorLayoutManager.swift +971 -0
  318. package/ios/EditorNodeTypes.swift +37 -0
  319. package/ios/EditorStyleSheet.swift +461 -0
  320. package/ios/EditorTextView+AttributedPatch.swift +305 -0
  321. package/ios/EditorTextView+Binding.swift +61 -0
  322. package/ios/EditorTextView+Caret.swift +333 -0
  323. package/ios/EditorTextView+Commands.swift +203 -0
  324. package/ios/EditorTextView+Delegate.swift +65 -0
  325. package/ios/EditorTextView+Diagnostics.swift +225 -0
  326. package/ios/EditorTextView+DragDrop.swift +290 -0
  327. package/ios/EditorTextView+ExternalComposition.swift +364 -0
  328. package/ios/EditorTextView+Images.swift +354 -0
  329. package/ios/EditorTextView+InputTraits.swift +200 -0
  330. package/ios/EditorTextView+KeyboardInput.swift +318 -0
  331. package/ios/EditorTextView+Layout.swift +245 -0
  332. package/ios/EditorTextView+MarkedText.swift +267 -0
  333. package/ios/EditorTextView+NativeInputLifecycle.swift +372 -0
  334. package/ios/EditorTextView+NativeMutation.swift +471 -0
  335. package/ios/EditorTextView+Reconciliation.swift +97 -0
  336. package/ios/EditorTextView+RenderPatch.swift +573 -0
  337. package/ios/EditorTextView+Rendering.swift +539 -0
  338. package/ios/EditorTextView+Selection.swift +542 -0
  339. package/ios/EditorTextView.swift +953 -0
  340. package/ios/EditorTheme.swift +626 -0
  341. package/ios/EditorV2Adapter+Commands.swift +204 -0
  342. package/ios/EditorV2Adapter+Envelope.swift +238 -0
  343. package/ios/EditorV2Adapter+Mutation.swift +392 -0
  344. package/ios/EditorV2Adapter+Registry.swift +185 -0
  345. package/ios/EditorV2Adapter+RenderState.swift +360 -0
  346. package/ios/EditorV2Adapter+RenderValidation.swift +420 -0
  347. package/ios/EditorV2Adapter+Selection.swift +329 -0
  348. package/ios/EditorV2Adapter+TextCommands.swift +430 -0
  349. package/ios/EditorV2Adapter.swift +376 -0
  350. package/ios/EditorV2Shadow.swift +353 -0
  351. package/ios/Generated_editor_core.swift +2378 -0
  352. package/ios/NativeCodeHighlighting.swift +159 -0
  353. package/ios/NativeCollaborationSocket.swift +144 -0
  354. package/ios/NativeCollaborationTransport+Protocol.swift +258 -0
  355. package/ios/NativeCollaborationTransport+Socket.swift +379 -0
  356. package/ios/NativeCollaborationTransport+Validation.swift +103 -0
  357. package/ios/NativeCollaborationTransport.swift +322 -0
  358. package/ios/NativeCollaborationTransportRegistry.swift +521 -0
  359. package/ios/NativeEditorExpoView+AccessoryRetry.swift +219 -0
  360. package/ios/NativeEditorExpoView+Binding.swift +268 -0
  361. package/ios/NativeEditorExpoView+Diagnostics.swift +66 -0
  362. package/ios/NativeEditorExpoView+Events.swift +131 -0
  363. package/ios/NativeEditorExpoView+Focus.swift +169 -0
  364. package/ios/NativeEditorExpoView+MentionRetry.swift +288 -0
  365. package/ios/NativeEditorExpoView+Mentions.swift +288 -0
  366. package/ios/NativeEditorExpoView+Properties.swift +300 -0
  367. package/ios/NativeEditorExpoView+Toolbar.swift +86 -0
  368. package/ios/NativeEditorExpoView+Updates.swift +312 -0
  369. package/ios/NativeEditorExpoView.swift +349 -0
  370. package/ios/NativeEditorModule.swift +856 -0
  371. package/ios/NativeEditorViewRegistry.swift +226 -0
  372. package/ios/NativeToolbar+ButtonStyle.swift +214 -0
  373. package/ios/NativeToolbar+Buttons.swift +228 -0
  374. package/ios/NativeToolbar+Diagnostics.swift +114 -0
  375. package/ios/NativeToolbar+Menu.swift +101 -0
  376. package/ios/NativeToolbar+Models.swift +519 -0
  377. package/ios/NativeToolbar+Placeholder.swift +39 -0
  378. package/ios/NativeToolbar.swift +612 -0
  379. package/ios/OrderedListMarkerFormatter.swift +103 -0
  380. package/ios/PositionBridge.swift +596 -0
  381. package/ios/ProseViewerView.swift +462 -0
  382. package/ios/RenderBridge+Atoms.swift +288 -0
  383. package/ios/RenderBridge+Attachments.swift +246 -0
  384. package/ios/RenderBridge+BlockBoundaries.swift +313 -0
  385. package/ios/RenderBridge+Style.swift +343 -0
  386. package/ios/RenderBridge.swift +704 -0
  387. package/ios/RichTextEditorView.swift +930 -0
  388. package/ios/SharedNativeImagePipeline+Cache.swift +189 -0
  389. package/ios/SharedNativeImagePipeline+Transport.swift +328 -0
  390. package/ios/SharedNativeImagePipeline.swift +533 -0
  391. package/ios/Viewer/CoreTextProseLayoutEngine+AttributedText.swift +436 -0
  392. package/ios/Viewer/CoreTextProseLayoutEngine+Models.swift +322 -0
  393. package/ios/Viewer/CoreTextProseLayoutEngine.swift +635 -0
  394. package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.h +4 -0
  395. package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.mm +767 -0
  396. package/ios/Viewer/Fabric/PreparedProseMeasurementsManager.mm +118 -0
  397. package/ios/Viewer/NativeSVGImageDecoder.h +9 -0
  398. package/ios/Viewer/NativeSVGImageDecoder.mm +106 -0
  399. package/ios/Viewer/NativeSVGPreflight.h +11 -0
  400. package/ios/Viewer/NativeSVGPreflight.mm +219 -0
  401. package/ios/Viewer/PreparedProseDrawingView.swift +639 -0
  402. package/ios/Viewer/PreparedProseInstrumentation.swift +387 -0
  403. package/ios/Viewer/PreparedProseLayout.swift +326 -0
  404. package/ios/Viewer/PreparedProseLayoutCache.swift +766 -0
  405. package/ios/Viewer/PreparedProseLayoutRegistry+Artifacts.swift +377 -0
  406. package/ios/Viewer/PreparedProseLayoutRegistry+Fabric.swift +582 -0
  407. package/ios/Viewer/PreparedProseLayoutRegistry+FabricOwnership.swift +128 -0
  408. package/ios/Viewer/PreparedProseLayoutRegistry.swift +381 -0
  409. package/ios/Viewer/ViewerDocument.swift +575 -0
  410. package/ios/Viewer/ViewerFontEnvironment.swift +283 -0
  411. package/ios/Viewer/ViewerImagePipeline.swift +478 -0
  412. package/ios/editor_coreFFI/editor_coreFFI.h +1023 -0
  413. package/ios/editor_coreFFI/module.modulemap +7 -0
  414. package/package.json +151 -0
  415. package/react-native.config.js +17 -0
  416. package/rust/android/arm64-v8a/libeditor_core.so +0 -0
  417. package/rust/android/armeabi-v7a/libeditor_core.so +0 -0
  418. package/rust/android/x86/libeditor_core.so +0 -0
  419. package/rust/android/x86_64/libeditor_core.so +0 -0
  420. package/rust/bindings/kotlin/uniffi/editor_core/editor_core.kt +3146 -0
  421. package/src/AtomHost.tsx +180 -0
  422. package/src/DefaultAtomChip.tsx +27 -0
  423. package/src/EditorAddon.ts +65 -0
  424. package/src/EditorAddonNormalization.ts +49 -0
  425. package/src/EditorMentionThemeNormalization.ts +25 -0
  426. package/src/EditorMentionThemeValidation.ts +133 -0
  427. package/src/EditorStyleSheet.ts +9 -0
  428. package/src/EditorStyleSheetNormalization.ts +219 -0
  429. package/src/EditorStyleSheetTypes.ts +189 -0
  430. package/src/EditorTheme.ts +196 -0
  431. package/src/EditorToolbar.tsx +31 -0
  432. package/src/EditorToolbarComponent.tsx +23 -0
  433. package/src/EditorToolbarItems.tsx +64 -0
  434. package/src/EditorToolbarRegistry.tsx +254 -0
  435. package/src/EditorToolbarTypes.tsx +322 -0
  436. package/src/EditorToolbarVisuals.tsx +270 -0
  437. package/src/EditorUpdateRevision.ts +26 -0
  438. package/src/ExternalTextComposition.ts +658 -0
  439. package/src/ImageLoadingPolicy.ts +125 -0
  440. package/src/NativeEditorBoundaryError.ts +345 -0
  441. package/src/NativeEditorBridge.ts +93 -0
  442. package/src/NativeEditorCollaborationTransport.ts +493 -0
  443. package/src/NativeEditorCreateConfig.ts +326 -0
  444. package/src/NativeEditorCreateJson.ts +579 -0
  445. package/src/NativeEditorCreateValidation.ts +178 -0
  446. package/src/NativeEditorDocumentBridge.ts +485 -0
  447. package/src/NativeEditorDocumentHandle.ts +168 -0
  448. package/src/NativeEditorLocalAwareness.ts +168 -0
  449. package/src/NativeEditorNativeModule.ts +97 -0
  450. package/src/NativeEditorRenderNormalization.ts +320 -0
  451. package/src/NativeEditorResultNormalization.ts +469 -0
  452. package/src/NativeEditorTypes.ts +366 -0
  453. package/src/NativeEditorV2Decimal.ts +13 -0
  454. package/src/NativeProseViewer.tsx +356 -0
  455. package/src/NativeRichTextEditor.tsx +33 -0
  456. package/src/ResourceLimits.ts +187 -0
  457. package/src/RichTextEditor.tsx +27 -0
  458. package/src/RichTextEditorNativeTypes.tsx +144 -0
  459. package/src/RichTextEditorNativeView.tsx +21 -0
  460. package/src/RichTextEditorSerialization.tsx +381 -0
  461. package/src/RichTextEditorTypes.tsx +327 -0
  462. package/src/ViewerConfiguration.ts +23 -0
  463. package/src/YjsCollaboration.ts +692 -0
  464. package/src/addons.ts +311 -0
  465. package/src/atomConstants.ts +3 -0
  466. package/src/atomInstances.ts +123 -0
  467. package/src/atomPolicy.ts +47 -0
  468. package/src/atomUpdates.ts +52 -0
  469. package/src/atoms.ts +379 -0
  470. package/src/attributeValidation.ts +116 -0
  471. package/src/contentExpression.ts +338 -0
  472. package/src/index.ts +295 -0
  473. package/src/listMarkers.ts +18 -0
  474. package/src/schemaDefinition.ts +395 -0
  475. package/src/schemaDocument.ts +92 -0
  476. package/src/schemaDocumentConstruction.ts +148 -0
  477. package/src/schemaNormalization.ts +367 -0
  478. package/src/schemaPresets.ts +250 -0
  479. package/src/schemaResolution.ts +242 -0
  480. package/src/schemas.ts +43 -0
  481. package/src/specs/PreparedProseViewerNativeComponent.ts +40 -0
  482. package/src/useEditorToolbarInteractions.tsx +329 -0
  483. package/src/useEditorToolbarItems.tsx +390 -0
  484. package/src/useEditorToolbarPresentation.tsx +483 -0
  485. package/src/useEditorToolbarState.tsx +172 -0
  486. package/src/useFocusPreservingFrames.ts +171 -0
  487. package/src/useNativeEditor.ts +534 -0
  488. package/src/useRichTextEditorCommands.tsx +478 -0
  489. package/src/useRichTextEditorEvents.tsx +342 -0
  490. package/src/useRichTextEditorMentions.tsx +441 -0
  491. package/src/useRichTextEditorPresentation.tsx +563 -0
  492. package/src/useRichTextEditorState.tsx +620 -0
  493. package/src/useRichTextEditorUpdates.tsx +403 -0
  494. package/src/useViewerAtoms.tsx +427 -0
@@ -0,0 +1,582 @@
1
+ import CryptoKit
2
+ import Foundation
3
+ import UIKit
4
+
5
+ extension PreparedProseLayoutRegistry {
6
+ @objc(measureSurfaceId:componentTag:leaseHandle:sourceKind:source:configJSON:themeJSON:imagePolicyJSON:imagesEnabled:collapsesWhenEmpty:attachmentRevision:nativeFontRevision:nativeFontScale:fontEnvironmentRevision:userInterfaceStyle:accessibilityContrast:widthPoints:scale:)
7
+ public func measure(
8
+ surfaceId: Int64,
9
+ componentTag: Int64,
10
+ leaseHandle: UInt64,
11
+ sourceKind: NSString,
12
+ source: NSString,
13
+ configJSON: NSString,
14
+ themeJSON: NSString?,
15
+ imagePolicyJSON: NSString?,
16
+ imagesEnabled: Bool,
17
+ collapsesWhenEmpty: Bool,
18
+ attachmentRevision: UInt64,
19
+ nativeFontRevision: UInt64,
20
+ nativeFontScale: CGFloat = 1,
21
+ fontEnvironmentRevision: UInt64,
22
+ userInterfaceStyle: Int = 0,
23
+ accessibilityContrast: Int = 0,
24
+ widthPoints: CGFloat,
25
+ scale: CGFloat
26
+ ) -> CGSize {
27
+ let request = makeRequest(
28
+ sourceKind: sourceKind,
29
+ source: source,
30
+ configJSON: configJSON,
31
+ themeJSON: themeJSON,
32
+ imagePolicyJSON: imagePolicyJSON,
33
+ imagesEnabled: imagesEnabled,
34
+ collapsesWhenEmpty: collapsesWhenEmpty,
35
+ attachmentRevision: attachmentRevision,
36
+ nativeFontRevision: nativeFontRevision,
37
+ nativeFontScale: nativeFontScale,
38
+ fontEnvironmentRevision: fontEnvironmentRevision,
39
+ userInterfaceStyle: userInterfaceStyle,
40
+ accessibilityContrast: accessibilityContrast
41
+ )
42
+ return measure(
43
+ request: request,
44
+ widthPoints: widthPoints,
45
+ scale: scale,
46
+ fabricSurface: leaseHandle == 0
47
+ ? nil
48
+ : FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag),
49
+ fabricLeaseHandle: leaseHandle
50
+ ).size
51
+ }
52
+
53
+ /// The only Objective-C-visible generation identity boundary. Fabric must
54
+ /// retain this exact SHA-256 key for every later release of its lease and
55
+ /// compiler pin; native callers must not reconstruct it from props.
56
+ @objc(fabricGenerationIdentitySourceKind:source:configJSON:themeJSON:imagePolicyJSON:imagesEnabled:collapsesWhenEmpty:attachmentRevision:nativeFontRevision:nativeFontScale:fontEnvironmentRevision:userInterfaceStyle:accessibilityContrast:)
57
+ public func fabricGenerationIdentity(
58
+ sourceKind: NSString,
59
+ source: NSString,
60
+ configJSON: NSString,
61
+ themeJSON: NSString?,
62
+ imagePolicyJSON: NSString?,
63
+ imagesEnabled: Bool,
64
+ collapsesWhenEmpty: Bool,
65
+ attachmentRevision: UInt64,
66
+ nativeFontRevision: UInt64,
67
+ nativeFontScale: CGFloat = 1,
68
+ fontEnvironmentRevision: UInt64,
69
+ userInterfaceStyle: Int = 0,
70
+ accessibilityContrast: Int = 0
71
+ ) -> NSString {
72
+ makeRequest(
73
+ sourceKind: sourceKind,
74
+ source: source,
75
+ configJSON: configJSON,
76
+ themeJSON: themeJSON,
77
+ imagePolicyJSON: imagePolicyJSON,
78
+ imagesEnabled: imagesEnabled,
79
+ collapsesWhenEmpty: collapsesWhenEmpty,
80
+ attachmentRevision: attachmentRevision,
81
+ nativeFontRevision: nativeFontRevision,
82
+ nativeFontScale: nativeFontScale,
83
+ fontEnvironmentRevision: fontEnvironmentRevision,
84
+ userInterfaceStyle: userInterfaceStyle,
85
+ accessibilityContrast: accessibilityContrast
86
+ ).generationIdentity as NSString
87
+ }
88
+
89
+ /// Fabric image publication/error state must use the same canonical
90
+ /// semantic key as direct UIKit. Layout revisions are intentionally
91
+ /// excluded so attachment/font reinstallation preserves that state.
92
+ @objc(fabricSemanticGenerationIdentitySourceKind:source:configJSON:themeJSON:imagePolicyJSON:imagesEnabled:collapsesWhenEmpty:attachmentRevision:nativeFontRevision:nativeFontScale:fontEnvironmentRevision:userInterfaceStyle:accessibilityContrast:)
93
+ public func fabricSemanticGenerationIdentity(
94
+ sourceKind: NSString,
95
+ source: NSString,
96
+ configJSON: NSString,
97
+ themeJSON: NSString?,
98
+ imagePolicyJSON: NSString?,
99
+ imagesEnabled: Bool,
100
+ collapsesWhenEmpty: Bool,
101
+ attachmentRevision: UInt64,
102
+ nativeFontRevision: UInt64,
103
+ nativeFontScale: CGFloat = 1,
104
+ fontEnvironmentRevision: UInt64,
105
+ userInterfaceStyle: Int = 0,
106
+ accessibilityContrast: Int = 0
107
+ ) -> NSString {
108
+ makeRequest(
109
+ sourceKind: sourceKind,
110
+ source: source,
111
+ configJSON: configJSON,
112
+ themeJSON: themeJSON,
113
+ imagePolicyJSON: imagePolicyJSON,
114
+ imagesEnabled: imagesEnabled,
115
+ collapsesWhenEmpty: collapsesWhenEmpty,
116
+ attachmentRevision: attachmentRevision,
117
+ nativeFontRevision: nativeFontRevision,
118
+ nativeFontScale: nativeFontScale,
119
+ fontEnvironmentRevision: fontEnvironmentRevision,
120
+ userInterfaceStyle: userInterfaceStyle,
121
+ accessibilityContrast: accessibilityContrast
122
+ ).semanticGenerationIdentity as NSString
123
+ }
124
+
125
+ @objc(installCachedLayoutInDrawingView:surfaceId:componentTag:leaseHandle:sourceKind:source:configJSON:themeJSON:imagePolicyJSON:imagesEnabled:collapsesWhenEmpty:attachmentRevision:nativeFontRevision:nativeFontScale:fontEnvironmentRevision:userInterfaceStyle:accessibilityContrast:widthPoints:scale:)
126
+ public func installCachedLayout(
127
+ in drawingView: PreparedProseDrawingView,
128
+ surfaceId: Int64,
129
+ componentTag: Int64,
130
+ leaseHandle: UInt64,
131
+ sourceKind: NSString,
132
+ source: NSString,
133
+ configJSON: NSString,
134
+ themeJSON: NSString?,
135
+ imagePolicyJSON: NSString?,
136
+ imagesEnabled: Bool,
137
+ collapsesWhenEmpty: Bool,
138
+ attachmentRevision: UInt64,
139
+ nativeFontRevision: UInt64,
140
+ nativeFontScale: CGFloat = 1,
141
+ fontEnvironmentRevision: UInt64,
142
+ userInterfaceStyle: Int = 0,
143
+ accessibilityContrast: Int = 0,
144
+ widthPoints: CGFloat,
145
+ scale: CGFloat
146
+ ) -> Bool {
147
+ let request = makeRequest(
148
+ sourceKind: sourceKind,
149
+ source: source,
150
+ configJSON: configJSON,
151
+ themeJSON: themeJSON,
152
+ imagePolicyJSON: imagePolicyJSON,
153
+ imagesEnabled: imagesEnabled,
154
+ collapsesWhenEmpty: collapsesWhenEmpty,
155
+ attachmentRevision: attachmentRevision,
156
+ nativeFontRevision: nativeFontRevision,
157
+ nativeFontScale: nativeFontScale,
158
+ fontEnvironmentRevision: fontEnvironmentRevision,
159
+ userInterfaceStyle: userInterfaceStyle,
160
+ accessibilityContrast: accessibilityContrast
161
+ )
162
+ guard let widthPixels = ProseLayoutMetrics.widthPixels(widthPoints: widthPoints, scale: scale) else {
163
+ return false
164
+ }
165
+ let fabricSurface = FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag)
166
+ let generation = FabricGenerationToken(
167
+ surface: fabricSurface,
168
+ generationIdentity: request.generationIdentity,
169
+ leaseHandle: leaseHandle
170
+ )
171
+ if let artifact = layoutCache.acquireForFabricMount(
172
+ surface: fabricSurface,
173
+ generationIdentity: request.generationIdentity,
174
+ widthPixels: widthPixels,
175
+ displayScale: scale,
176
+ leaseHandle: leaseHandle,
177
+ allowCompletedFallback: true,
178
+ shouldAcquire: { self.isFabricLeaseActive(generation) }
179
+ ) {
180
+ drawingView.install(layout: artifact)
181
+ return true
182
+ }
183
+ return false
184
+ }
185
+
186
+ // XCTest and UIKit-only callers have no Fabric owner. Production Fabric
187
+ // mounting always uses the surface/component overload above.
188
+ func installCachedLayout(
189
+ in drawingView: PreparedProseDrawingView,
190
+ sourceKind: NSString,
191
+ source: NSString,
192
+ configJSON: NSString,
193
+ themeJSON: NSString?,
194
+ imagePolicyJSON: NSString?,
195
+ imagesEnabled: Bool,
196
+ collapsesWhenEmpty: Bool,
197
+ attachmentRevision: UInt64,
198
+ nativeFontRevision: UInt64,
199
+ nativeFontScale: CGFloat = 1,
200
+ fontEnvironmentRevision: UInt64,
201
+ userInterfaceStyle: Int = 0,
202
+ accessibilityContrast: Int = 0,
203
+ widthPoints: CGFloat,
204
+ scale: CGFloat
205
+ ) -> Bool {
206
+ installCachedLayout(
207
+ in: drawingView,
208
+ surfaceId: 0,
209
+ componentTag: 0,
210
+ leaseHandle: 0,
211
+ sourceKind: sourceKind,
212
+ source: source,
213
+ configJSON: configJSON,
214
+ themeJSON: themeJSON,
215
+ imagePolicyJSON: imagePolicyJSON,
216
+ imagesEnabled: imagesEnabled,
217
+ collapsesWhenEmpty: collapsesWhenEmpty,
218
+ attachmentRevision: attachmentRevision,
219
+ nativeFontRevision: nativeFontRevision,
220
+ nativeFontScale: nativeFontScale,
221
+ fontEnvironmentRevision: fontEnvironmentRevision,
222
+ userInterfaceStyle: userInterfaceStyle,
223
+ accessibilityContrast: accessibilityContrast,
224
+ widthPoints: widthPoints,
225
+ scale: scale
226
+ )
227
+ }
228
+
229
+ func releaseFabricSurface(_ surface: FabricSurfaceToken) {
230
+ let cachedGenerations = layoutCache.fabricGenerations(for: surface)
231
+ compiledCondition.lock()
232
+ let generations = Set(fabricMeasurementsInFlight.keys)
233
+ .union(fabricOwnershipRevisions.keys)
234
+ .union(documentsByFabricGeneration.keys)
235
+ .union(failuresByFabricGeneration.keys)
236
+ .union(cachedGenerations)
237
+ .filter { $0.surface == surface }
238
+ for generation in generations {
239
+ cancelFabricMeasurementLocked(generation)
240
+ }
241
+ // Keep inactive state-family records until their C++ terminal guards
242
+ // unregister. Delayed Yoga work must observe cancellation, not create
243
+ // a fresh owner after surface teardown.
244
+ for owner in fabricLeaseStates.keys.filter({ $0.surface == surface }) {
245
+ var state = fabricLeaseStates[owner]!
246
+ state.active = false
247
+ fabricLeaseStates[owner] = state
248
+ }
249
+ // Keep cancelled in-flight callbacks until their defer path exits.
250
+ // Removing them here would let an already-running stale measure pin
251
+ // compiler/theme ownership again after surface shutdown.
252
+ fabricOwnershipRevisions = fabricOwnershipRevisions.filter { $0.key.surface != surface }
253
+ documentsByFabricGeneration = documentsByFabricGeneration.filter { $0.key.surface != surface }
254
+ failuresByFabricGeneration = failuresByFabricGeneration.filter { $0.key.surface != surface }
255
+ for generation in themeOwners.keys.filter({ $0.surface == surface }) {
256
+ releaseThemeOwnership(for: generation)
257
+ }
258
+ compiledCondition.unlock()
259
+ layoutCache.releaseLease(for: surface)
260
+ FabricAttachmentSidecars.remove(surface)
261
+ }
262
+
263
+ func releaseFabricGeneration(_ generation: FabricGenerationToken) {
264
+ compiledCondition.lock()
265
+ guard isFabricLeaseActiveLocked(generation) else {
266
+ compiledCondition.unlock()
267
+ return
268
+ }
269
+ cancelFabricMeasurementLocked(generation)
270
+ fabricOwnershipRevisions.removeValue(forKey: generation)
271
+ documentsByFabricGeneration.removeValue(forKey: generation)
272
+ failuresByFabricGeneration.removeValue(forKey: generation)
273
+ releaseThemeOwnership(for: generation)
274
+ compiledCondition.unlock()
275
+ layoutCache.releaseLease(
276
+ for: generation.surface,
277
+ generationIdentity: generation.generationIdentity,
278
+ leaseHandle: generation.leaseHandle
279
+ )
280
+ FabricAttachmentSidecars.remove(generation.surface, leaseHandle: generation.leaseHandle)
281
+ }
282
+
283
+ /// Commits the single generation allowed to publish for this state-family
284
+ /// lease. Existing G2 work remains valid; all prior G1 work is cancelled
285
+ /// before it can recreate pins, sidecars, or a pending handoff.
286
+ func activateFabricGeneration(_ generation: FabricGenerationToken) {
287
+ let owner = FabricLeaseOwner(surface: generation.surface, leaseHandle: generation.leaseHandle)
288
+ compiledCondition.lock()
289
+ guard var lease = fabricLeaseStates[owner], lease.active else {
290
+ compiledCondition.unlock()
291
+ return
292
+ }
293
+ lease.permittedGenerationIdentity = generation.generationIdentity
294
+ fabricLeaseStates[owner] = lease
295
+ let stale = Set(fabricMeasurementsInFlight.keys)
296
+ .union(fabricOwnershipRevisions.keys)
297
+ .union(documentsByFabricGeneration.keys)
298
+ .union(failuresByFabricGeneration.keys)
299
+ .union(themeOwners.keys)
300
+ .filter {
301
+ FabricLeaseOwner(surface: $0.surface, leaseHandle: $0.leaseHandle) == owner &&
302
+ $0 != generation
303
+ }
304
+ for token in stale {
305
+ cancelFabricMeasurementLocked(token)
306
+ fabricOwnershipRevisions.removeValue(forKey: token)
307
+ documentsByFabricGeneration.removeValue(forKey: token)
308
+ failuresByFabricGeneration.removeValue(forKey: token)
309
+ releaseThemeOwnership(for: token)
310
+ }
311
+ compiledCondition.unlock()
312
+ // Do not hold the registry lock while entering cache/sidecar locks.
313
+ // A mounted G1 remains displayed until G2 consumes its handoff.
314
+ layoutCache.activateFabricGeneration(
315
+ surface: generation.surface,
316
+ generationIdentity: generation.generationIdentity,
317
+ leaseHandle: generation.leaseHandle
318
+ )
319
+ }
320
+
321
+ /// Called by the Objective-C++ measurement bridge when a state-owned
322
+ /// lifecycle is cancelled while its synchronous registry call is running.
323
+ /// It intentionally identifies ownership by the opaque handle alone: the
324
+ /// stale callback may have completed after a new revision changed the
325
+ /// generation digest, but it can never affect another handle.
326
+ @objc(releaseFabricLeaseSurfaceId:componentTag:leaseHandle:)
327
+ public func releaseFabricLease(
328
+ surfaceId: Int64,
329
+ componentTag: Int64,
330
+ leaseHandle: UInt64
331
+ ) {
332
+ guard leaseHandle != 0 else { return }
333
+ let surface = FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag)
334
+ compiledCondition.lock()
335
+ let owner = FabricLeaseOwner(surface: surface, leaseHandle: leaseHandle)
336
+ // Terminal family cleanup is the only path that drops this bounded
337
+ // inactive record after marking it cancelled for concurrent readers.
338
+ if var state = fabricLeaseStates[owner] {
339
+ state.active = false
340
+ fabricLeaseStates[owner] = state
341
+ }
342
+ fabricLeaseStates.removeValue(forKey: owner)
343
+ let generations = Set(fabricMeasurementsInFlight.keys)
344
+ .union(fabricOwnershipRevisions.keys)
345
+ .union(documentsByFabricGeneration.keys)
346
+ .union(failuresByFabricGeneration.keys)
347
+ .filter { $0.surface == surface && $0.leaseHandle == leaseHandle }
348
+ for generation in generations {
349
+ cancelFabricMeasurementLocked(generation)
350
+ fabricOwnershipRevisions.removeValue(forKey: generation)
351
+ documentsByFabricGeneration.removeValue(forKey: generation)
352
+ failuresByFabricGeneration.removeValue(forKey: generation)
353
+ releaseThemeOwnership(for: generation)
354
+ }
355
+ compiledCondition.unlock()
356
+ layoutCache.releaseLease(for: surface, leaseHandle: leaseHandle)
357
+ FabricAttachmentSidecars.remove(surface, leaseHandle: leaseHandle)
358
+ }
359
+
360
+ /// State-family bridge is the only owner creation path. Measurement and
361
+ /// activation reject absent/inactive records so delayed Yoga cannot revive
362
+ /// a released surface.
363
+ @objc(registerFabricLeaseSurfaceId:componentTag:leaseHandle:)
364
+ public func registerFabricLease(
365
+ surfaceId: Int64,
366
+ componentTag: Int64,
367
+ leaseHandle: UInt64
368
+ ) {
369
+ guard leaseHandle != 0 else { return }
370
+ let owner = FabricLeaseOwner(
371
+ surface: FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag),
372
+ leaseHandle: leaseHandle
373
+ )
374
+ compiledCondition.lock()
375
+ if fabricLeaseStates[owner] == nil {
376
+ fabricLeaseStates[owner] = FabricLeaseState()
377
+ }
378
+ compiledCondition.unlock()
379
+ }
380
+
381
+ /// An invalid Yoga pass is not a lifecycle event. It may retire only an
382
+ /// exact physical pending handoff; an actually invalid width has no such
383
+ /// key, so it must not infer one from a prior measurement. In particular,
384
+ /// it preserves mounted rendering, compiler/theme pins, permitted
385
+ /// generation ownership, and attachment sidecar state for a later valid
386
+ /// measure in this same state-family lifecycle.
387
+ func releaseFabricInvalidMeasurement(
388
+ _ generation: FabricGenerationToken,
389
+ widthPoints: CGFloat,
390
+ scale: CGFloat
391
+ ) {
392
+ guard let widthPixels = ProseLayoutMetrics.widthPixels(widthPoints: widthPoints, scale: scale) else {
393
+ return
394
+ }
395
+ compiledCondition.lock()
396
+ guard isFabricLeaseActiveLocked(generation) else {
397
+ compiledCondition.unlock()
398
+ return
399
+ }
400
+ compiledCondition.unlock()
401
+ let hasSurvivingLease = layoutCache.releasePendingLease(
402
+ for: generation.surface,
403
+ generationIdentity: generation.generationIdentity,
404
+ widthPixels: widthPixels,
405
+ displayScale: scale,
406
+ leaseHandle: generation.leaseHandle
407
+ )
408
+ guard !hasSurvivingLease else { return }
409
+
410
+ // This branch is defensive: current validation reaches this helper
411
+ // only when no physical key exists. If validation evolves, compiler
412
+ // pins can be released only after the exact pending handoff is gone
413
+ // and no displayed/in-flight ownership remains. Sidecars are never
414
+ // reset here because they may back the currently displayed artifact.
415
+ compiledCondition.lock()
416
+ guard (fabricMeasurementsInFlight[generation]?.count ?? 0) == 0,
417
+ isFabricLeaseActiveLocked(generation)
418
+ else {
419
+ compiledCondition.unlock()
420
+ return
421
+ }
422
+ documentsByFabricGeneration.removeValue(forKey: generation)
423
+ failuresByFabricGeneration.removeValue(forKey: generation)
424
+ releaseThemeOwnership(for: generation)
425
+ compiledCondition.unlock()
426
+ }
427
+
428
+ /// Fabric records an owner before it tries to consume Yoga's lease. A
429
+ /// stale mount callback may only retire its exact unmounted handoff; a
430
+ /// newer width or a displayed mounted artifact for the same generation
431
+ /// must remain owned. Release the compiler pin only when no lease for the
432
+ /// surface/generation survives that exact cleanup.
433
+ func releaseFabricMountMiss(
434
+ _ generation: FabricGenerationToken,
435
+ widthPoints: CGFloat,
436
+ scale: CGFloat
437
+ ) {
438
+ guard let widthPixels = ProseLayoutMetrics.widthPixels(widthPoints: widthPoints, scale: scale) else { return }
439
+ compiledCondition.lock()
440
+ guard isFabricLeaseActiveLocked(generation) else {
441
+ compiledCondition.unlock()
442
+ return
443
+ }
444
+ let ownershipRevision = fabricOwnershipRevisions[generation, default: 0]
445
+ compiledCondition.unlock()
446
+ let hasSurvivingLease = layoutCache.releasePendingLease(
447
+ for: generation.surface,
448
+ generationIdentity: generation.generationIdentity,
449
+ widthPixels: widthPixels,
450
+ displayScale: scale,
451
+ leaseHandle: generation.leaseHandle
452
+ )
453
+ #if DEBUG
454
+ fabricMountMissAfterExactLeaseCleanupForTesting?()
455
+ #endif
456
+
457
+ // A measure already in preparation will retain ownership once it
458
+ // reaches its post-cache decision. Do not let a stale mount callback
459
+ // clear that future pin. Conversely, a later measure begins after we
460
+ // release the condition and establishes its own ownership afresh.
461
+ compiledCondition.lock()
462
+ guard !hasSurvivingLease,
463
+ (fabricMeasurementsInFlight[generation]?.count ?? 0) == 0,
464
+ fabricOwnershipRevisions[generation, default: 0] == ownershipRevision,
465
+ isFabricLeaseActiveLocked(generation)
466
+ else {
467
+ compiledCondition.unlock()
468
+ return
469
+ }
470
+ documentsByFabricGeneration.removeValue(forKey: generation)
471
+ failuresByFabricGeneration.removeValue(forKey: generation)
472
+ releaseThemeOwnership(for: generation)
473
+ compiledCondition.unlock()
474
+ }
475
+
476
+ func registerDirectMounted(_ owner: String, layout: PreparedProseLayout) {
477
+ layoutCache.registerDirectMount(owner, layout: layout)
478
+ }
479
+
480
+ func releaseDirectMounted(_ owner: String) {
481
+ layoutCache.releaseDirectMount(owner)
482
+ }
483
+
484
+ func beginBenchmarkResidentCensus(seeding keys: [ProseLayoutKey] = []) {
485
+ layoutCache.beginBenchmarkCensus(seeding: keys)
486
+ }
487
+
488
+ func endBenchmarkResidentCensus() -> BenchmarkResidentCensus {
489
+ let keys = layoutCache.endBenchmarkCensus()
490
+ let material = keys
491
+ .map { String(describing: $0) }
492
+ .sorted()
493
+ .joined(separator: "\n")
494
+ let digest = SHA256.hash(data: Data(material.utf8)).map { String(format: "%02x", $0) }.joined()
495
+ return .init(keys: keys, count: keys.count, digest: digest)
496
+ }
497
+
498
+ @objc(releaseFabricSurfaceId:componentTag:)
499
+ public func releaseFabricSurface(surfaceId: Int64, componentTag: Int64) {
500
+ releaseFabricSurface(FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag))
501
+ }
502
+
503
+ @objc(releaseFabricGenerationSurfaceId:componentTag:generationIdentity:leaseHandle:)
504
+ public func releaseFabricGeneration(
505
+ surfaceId: Int64,
506
+ componentTag: Int64,
507
+ generationIdentity: NSString,
508
+ leaseHandle: UInt64
509
+ ) {
510
+ releaseFabricGeneration(
511
+ FabricGenerationToken(
512
+ surface: FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag),
513
+ generationIdentity: generationIdentity as String,
514
+ leaseHandle: leaseHandle
515
+ )
516
+ )
517
+ }
518
+
519
+ @objc(activateFabricGenerationSurfaceId:componentTag:generationIdentity:leaseHandle:)
520
+ public func activateFabricGeneration(
521
+ surfaceId: Int64,
522
+ componentTag: Int64,
523
+ generationIdentity: NSString,
524
+ leaseHandle: UInt64
525
+ ) {
526
+ guard leaseHandle != 0 else { return }
527
+ activateFabricGeneration(
528
+ FabricGenerationToken(
529
+ surface: FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag),
530
+ generationIdentity: generationIdentity as String,
531
+ leaseHandle: leaseHandle
532
+ )
533
+ )
534
+ }
535
+
536
+ @objc(releaseFabricMountMissSurfaceId:componentTag:generationIdentity:leaseHandle:widthPoints:scale:)
537
+ public func releaseFabricMountMiss(
538
+ surfaceId: Int64,
539
+ componentTag: Int64,
540
+ generationIdentity: NSString,
541
+ leaseHandle: UInt64,
542
+ widthPoints: CGFloat,
543
+ scale: CGFloat
544
+ ) {
545
+ releaseFabricMountMiss(
546
+ FabricGenerationToken(
547
+ surface: FabricSurfaceToken(surfaceId: surfaceId, componentTag: componentTag),
548
+ generationIdentity: generationIdentity as String,
549
+ leaseHandle: leaseHandle
550
+ ),
551
+ widthPoints: widthPoints,
552
+ scale: scale
553
+ )
554
+ }
555
+
556
+ @objc func didReceiveMemoryWarning() {
557
+ PreparedProseInstrumentation.invalidated(.memoryPressure)
558
+ PreparedProseInstrumentation.capturePreResetSnapshot()
559
+ layoutCache.removeAllUnmounted()
560
+ compiledCondition.lock()
561
+ fabricOwnershipRevisions.removeAll()
562
+ compiledDocuments.removeAll()
563
+ compiledAccessOrder.removeAll()
564
+ compiledAccessGenerations.removeAll()
565
+ compiledAccessOrderHead = 0
566
+ compilationFailures.removeAll()
567
+ compilationFailureAccessOrder.removeAll()
568
+ documentsByFabricGeneration.removeAll()
569
+ failuresByFabricGeneration.removeAll()
570
+ themesByGeneration.removeAll()
571
+ themeAccessOrder.removeAll()
572
+ themeOwners.removeAll()
573
+ themeOwnerCounts.removeAll()
574
+ themesRetainedBytes = 0
575
+ compiledRetainedBytes = 0
576
+ compiledCondition.unlock()
577
+ PreparedProseInstrumentation.retained(.compiled, scope: "registry", bytes: 0)
578
+ PreparedProseInstrumentation.cacheUpdated(compiledBytes: 0, compiledResidentCount: 0)
579
+ PreparedProseInstrumentation.capturePostResetSnapshot()
580
+ }
581
+
582
+ }