@gtkx/react 1.0.0-rc.1 → 1.0.0-rc.2

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 (381) hide show
  1. package/dist/adw/config.d.ts +2 -0
  2. package/dist/adw/config.d.ts.map +1 -0
  3. package/dist/adw/config.js +2 -0
  4. package/dist/adw/config.js.map +1 -0
  5. package/dist/{libraries/adw → adw}/dialog.d.ts +2 -2
  6. package/dist/adw/dialog.d.ts.map +1 -0
  7. package/dist/adw/dialog.js +25 -0
  8. package/dist/adw/dialog.js.map +1 -0
  9. package/dist/adw/element-behaviors.d.ts +2 -0
  10. package/dist/adw/element-behaviors.d.ts.map +1 -0
  11. package/dist/adw/element-behaviors.js +299 -0
  12. package/dist/adw/element-behaviors.js.map +1 -0
  13. package/dist/adw/element-config.d.ts +9 -0
  14. package/dist/adw/element-config.d.ts.map +1 -0
  15. package/dist/adw/element-config.js +137 -0
  16. package/dist/adw/element-config.js.map +1 -0
  17. package/dist/adw/index.d.ts +4 -0
  18. package/dist/adw/index.d.ts.map +1 -0
  19. package/dist/adw/index.js +3 -0
  20. package/dist/adw/index.js.map +1 -0
  21. package/dist/adw/prop-types.d.ts +29 -0
  22. package/dist/adw/prop-types.d.ts.map +1 -0
  23. package/dist/adw/prop-types.js +2 -0
  24. package/dist/adw/prop-types.js.map +1 -0
  25. package/dist/bootstrap.d.ts +2 -0
  26. package/dist/bootstrap.d.ts.map +1 -0
  27. package/dist/bootstrap.js +5 -0
  28. package/dist/bootstrap.js.map +1 -0
  29. package/dist/components/application.d.ts +2 -2
  30. package/dist/components/application.d.ts.map +1 -1
  31. package/dist/components/application.js +31 -18
  32. package/dist/components/application.js.map +1 -1
  33. package/dist/components/element.d.ts +6 -0
  34. package/dist/components/element.d.ts.map +1 -0
  35. package/dist/components/element.js +29 -0
  36. package/dist/components/element.js.map +1 -0
  37. package/dist/components/window.d.ts +2 -2
  38. package/dist/components/window.d.ts.map +1 -1
  39. package/dist/components/window.js +10 -11
  40. package/dist/components/window.js.map +1 -1
  41. package/dist/config.d.ts +4 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +3 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/element-behaviors.d.ts +2 -0
  46. package/dist/element-behaviors.d.ts.map +1 -0
  47. package/dist/element-behaviors.js +348 -0
  48. package/dist/element-behaviors.js.map +1 -0
  49. package/dist/element-config.d.ts +10 -0
  50. package/dist/element-config.d.ts.map +1 -0
  51. package/dist/element-config.js +146 -0
  52. package/dist/element-config.js.map +1 -0
  53. package/dist/hooks/use-application.d.ts +4 -3
  54. package/dist/hooks/use-application.d.ts.map +1 -1
  55. package/dist/hooks/use-application.js +5 -4
  56. package/dist/hooks/use-application.js.map +1 -1
  57. package/dist/hooks/use-bind-setting.d.ts +21 -4
  58. package/dist/hooks/use-bind-setting.d.ts.map +1 -1
  59. package/dist/hooks/use-bind-setting.js +27 -16
  60. package/dist/hooks/use-bind-setting.js.map +1 -1
  61. package/dist/hooks/use-merged-refs.d.ts +8 -0
  62. package/dist/hooks/use-merged-refs.d.ts.map +1 -0
  63. package/dist/hooks/use-merged-refs.js +48 -0
  64. package/dist/hooks/use-merged-refs.js.map +1 -0
  65. package/dist/hooks/use-object-value.d.ts +3 -2
  66. package/dist/hooks/use-object-value.d.ts.map +1 -1
  67. package/dist/hooks/use-object-value.js +18 -21
  68. package/dist/hooks/use-object-value.js.map +1 -1
  69. package/dist/hooks/use-parent-window.d.ts +3 -2
  70. package/dist/hooks/use-parent-window.d.ts.map +1 -1
  71. package/dist/hooks/use-parent-window.js +3 -2
  72. package/dist/hooks/use-parent-window.js.map +1 -1
  73. package/dist/hooks/use-property.d.ts +5 -5
  74. package/dist/hooks/use-property.d.ts.map +1 -1
  75. package/dist/hooks/use-property.js +4 -3
  76. package/dist/hooks/use-property.js.map +1 -1
  77. package/dist/hooks/use-setting.d.ts +5 -16
  78. package/dist/hooks/use-setting.d.ts.map +1 -1
  79. package/dist/hooks/use-setting.js +16 -11
  80. package/dist/hooks/use-setting.js.map +1 -1
  81. package/dist/hooks/use-signal.d.ts +10 -7
  82. package/dist/hooks/use-signal.d.ts.map +1 -1
  83. package/dist/hooks/use-signal.js +29 -18
  84. package/dist/hooks/use-signal.js.map +1 -1
  85. package/dist/index.d.ts +7 -8
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -3
  88. package/dist/index.js.map +1 -1
  89. package/dist/internal.d.ts +6 -7
  90. package/dist/internal.d.ts.map +1 -1
  91. package/dist/internal.js +5 -7
  92. package/dist/internal.js.map +1 -1
  93. package/dist/prop-types.d.ts +110 -0
  94. package/dist/prop-types.d.ts.map +1 -0
  95. package/dist/prop-types.js +2 -0
  96. package/dist/prop-types.js.map +1 -0
  97. package/dist/reconciler/apply-props.d.ts +10 -7
  98. package/dist/reconciler/apply-props.d.ts.map +1 -1
  99. package/dist/reconciler/apply-props.js +182 -84
  100. package/dist/reconciler/apply-props.js.map +1 -1
  101. package/dist/reconciler/behaviors.d.ts +59 -0
  102. package/dist/reconciler/behaviors.d.ts.map +1 -0
  103. package/dist/reconciler/behaviors.js +172 -0
  104. package/dist/reconciler/behaviors.js.map +1 -0
  105. package/dist/reconciler/child-routing.d.ts +5 -0
  106. package/dist/reconciler/child-routing.d.ts.map +1 -0
  107. package/dist/reconciler/child-routing.js +156 -0
  108. package/dist/reconciler/child-routing.js.map +1 -0
  109. package/dist/reconciler/host-config.d.ts +8 -12
  110. package/dist/reconciler/host-config.d.ts.map +1 -1
  111. package/dist/reconciler/host-config.js +175 -270
  112. package/dist/reconciler/host-config.js.map +1 -1
  113. package/dist/reconciler/instance.d.ts +4 -5
  114. package/dist/reconciler/instance.d.ts.map +1 -1
  115. package/dist/reconciler/instance.js +44 -22
  116. package/dist/reconciler/instance.js.map +1 -1
  117. package/dist/reconciler/metadata.d.ts +17 -0
  118. package/dist/reconciler/metadata.d.ts.map +1 -0
  119. package/dist/reconciler/metadata.js +82 -0
  120. package/dist/reconciler/metadata.js.map +1 -0
  121. package/dist/reconciler/node.d.ts +76 -0
  122. package/dist/reconciler/node.d.ts.map +1 -0
  123. package/dist/reconciler/node.js +53 -0
  124. package/dist/reconciler/node.js.map +1 -0
  125. package/dist/reconciler/placement.d.ts +5 -0
  126. package/dist/reconciler/placement.d.ts.map +1 -0
  127. package/dist/reconciler/placement.js +175 -0
  128. package/dist/reconciler/placement.js.map +1 -0
  129. package/dist/reconciler/registry.d.ts +92 -0
  130. package/dist/reconciler/registry.d.ts.map +1 -0
  131. package/dist/reconciler/registry.js +64 -0
  132. package/dist/reconciler/registry.js.map +1 -0
  133. package/dist/reconciler/root-element.d.ts +9 -12
  134. package/dist/reconciler/root-element.d.ts.map +1 -1
  135. package/dist/reconciler/root-element.js +6 -6
  136. package/dist/reconciler/root-element.js.map +1 -1
  137. package/dist/reconciler/root.d.ts +56 -0
  138. package/dist/reconciler/root.d.ts.map +1 -0
  139. package/dist/reconciler/root.js +109 -0
  140. package/dist/reconciler/root.js.map +1 -0
  141. package/dist/reconciler/signals.d.ts +10 -0
  142. package/dist/reconciler/signals.d.ts.map +1 -0
  143. package/dist/reconciler/signals.js +70 -0
  144. package/dist/reconciler/signals.js.map +1 -0
  145. package/dist/reconciler/text.d.ts +19 -0
  146. package/dist/reconciler/text.d.ts.map +1 -0
  147. package/dist/reconciler/text.js +276 -0
  148. package/dist/reconciler/text.js.map +1 -0
  149. package/dist/utils/accessible-metadata.d.ts +11 -4
  150. package/dist/utils/accessible-metadata.d.ts.map +1 -1
  151. package/dist/utils/accessible-metadata.js +20 -17
  152. package/dist/utils/accessible-metadata.js.map +1 -1
  153. package/dist/{reconciler/accessible.d.ts → utils/accessible-props.d.ts} +7 -6
  154. package/dist/utils/accessible-props.d.ts.map +1 -0
  155. package/dist/utils/accessible-props.js +181 -0
  156. package/dist/utils/accessible-props.js.map +1 -0
  157. package/dist/utils/ref-prop.d.ts +15 -0
  158. package/dist/utils/ref-prop.d.ts.map +1 -0
  159. package/dist/utils/ref-prop.js +18 -0
  160. package/dist/utils/ref-prop.js.map +1 -0
  161. package/dist/utils/settings.d.ts +17 -0
  162. package/dist/utils/settings.d.ts.map +1 -0
  163. package/dist/utils/settings.js +37 -0
  164. package/dist/utils/settings.js.map +1 -0
  165. package/dist/utils/variant.d.ts +57 -0
  166. package/dist/utils/variant.d.ts.map +1 -0
  167. package/dist/utils/variant.js +197 -0
  168. package/dist/utils/variant.js.map +1 -0
  169. package/env.d.ts +9 -0
  170. package/package.json +36 -11
  171. package/src/adw/config.ts +1 -0
  172. package/src/adw/dialog.tsx +35 -0
  173. package/src/adw/element-behaviors.ts +379 -0
  174. package/src/adw/element-config.ts +140 -0
  175. package/src/adw/index.ts +4 -0
  176. package/src/adw/prop-types.ts +42 -0
  177. package/src/bootstrap.ts +5 -0
  178. package/src/components/application.tsx +42 -23
  179. package/src/components/element.tsx +47 -0
  180. package/src/components/window.tsx +12 -13
  181. package/src/config.ts +3 -0
  182. package/src/element-behaviors.ts +424 -0
  183. package/src/element-config.ts +148 -0
  184. package/src/env.d.ts +1 -0
  185. package/src/hooks/use-application.ts +6 -4
  186. package/src/hooks/use-bind-setting.ts +47 -31
  187. package/src/hooks/use-merged-refs.ts +64 -0
  188. package/src/hooks/use-object-value.ts +27 -23
  189. package/src/hooks/use-parent-window.ts +4 -2
  190. package/src/hooks/use-property.ts +11 -10
  191. package/src/hooks/use-setting.ts +20 -33
  192. package/src/hooks/use-signal.ts +37 -48
  193. package/src/index.ts +7 -8
  194. package/src/internal.ts +7 -18
  195. package/src/prop-types.ts +142 -0
  196. package/src/reconciler/apply-props.ts +233 -85
  197. package/src/reconciler/behaviors.ts +324 -0
  198. package/src/reconciler/child-routing.ts +202 -0
  199. package/src/reconciler/host-config.ts +239 -366
  200. package/src/reconciler/instance.ts +76 -24
  201. package/src/reconciler/metadata.ts +119 -0
  202. package/src/reconciler/node.ts +161 -0
  203. package/src/reconciler/placement.ts +255 -0
  204. package/src/reconciler/registry.ts +161 -0
  205. package/src/reconciler/root-element.ts +9 -11
  206. package/src/reconciler/root.ts +175 -0
  207. package/src/reconciler/signals.ts +113 -0
  208. package/src/reconciler/text.ts +407 -0
  209. package/src/utils/accessible-metadata.ts +23 -18
  210. package/src/utils/accessible-props.ts +279 -0
  211. package/src/utils/ref-prop.ts +30 -0
  212. package/src/utils/settings.ts +69 -0
  213. package/src/utils/variant.ts +368 -0
  214. package/dist/hooks/use-merge-refs.d.ts +0 -3
  215. package/dist/hooks/use-merge-refs.d.ts.map +0 -1
  216. package/dist/hooks/use-merge-refs.js +0 -48
  217. package/dist/hooks/use-merge-refs.js.map +0 -1
  218. package/dist/hooks/use-object-attachment.d.ts +0 -10
  219. package/dist/hooks/use-object-attachment.d.ts.map +0 -1
  220. package/dist/hooks/use-object-attachment.js +0 -24
  221. package/dist/hooks/use-object-attachment.js.map +0 -1
  222. package/dist/libraries/adw/dialog.d.ts.map +0 -1
  223. package/dist/libraries/adw/dialog.js +0 -25
  224. package/dist/libraries/adw/dialog.js.map +0 -1
  225. package/dist/libraries/adw/index.d.ts +0 -2
  226. package/dist/libraries/adw/index.d.ts.map +0 -1
  227. package/dist/libraries/adw/index.js +0 -2
  228. package/dist/libraries/adw/index.js.map +0 -1
  229. package/dist/reconciler/accessible.d.ts.map +0 -1
  230. package/dist/reconciler/accessible.js +0 -143
  231. package/dist/reconciler/accessible.js.map +0 -1
  232. package/dist/reconciler/commit-flush.d.ts +0 -3
  233. package/dist/reconciler/commit-flush.d.ts.map +0 -1
  234. package/dist/reconciler/commit-flush.js +0 -13
  235. package/dist/reconciler/commit-flush.js.map +0 -1
  236. package/dist/reconciler/container-attach.d.ts +0 -10
  237. package/dist/reconciler/container-attach.d.ts.map +0 -1
  238. package/dist/reconciler/container-attach.js +0 -216
  239. package/dist/reconciler/container-attach.js.map +0 -1
  240. package/dist/reconciler/content-rebuild.d.ts +0 -3
  241. package/dist/reconciler/content-rebuild.d.ts.map +0 -1
  242. package/dist/reconciler/content-rebuild.js +0 -15
  243. package/dist/reconciler/content-rebuild.js.map +0 -1
  244. package/dist/reconciler/dispatch.d.ts +0 -6
  245. package/dist/reconciler/dispatch.d.ts.map +0 -1
  246. package/dist/reconciler/dispatch.js +0 -61
  247. package/dist/reconciler/dispatch.js.map +0 -1
  248. package/dist/reconciler/element-prop-appliers.d.ts +0 -5
  249. package/dist/reconciler/element-prop-appliers.d.ts.map +0 -1
  250. package/dist/reconciler/element-prop-appliers.js +0 -104
  251. package/dist/reconciler/element-prop-appliers.js.map +0 -1
  252. package/dist/reconciler/element-props.d.ts +0 -25
  253. package/dist/reconciler/element-props.d.ts.map +0 -1
  254. package/dist/reconciler/element-props.js +0 -157
  255. package/dist/reconciler/element-props.js.map +0 -1
  256. package/dist/reconciler/label-text-rebuild.d.ts +0 -3
  257. package/dist/reconciler/label-text-rebuild.d.ts.map +0 -1
  258. package/dist/reconciler/label-text-rebuild.js +0 -22
  259. package/dist/reconciler/label-text-rebuild.js.map +0 -1
  260. package/dist/reconciler/portal.d.ts +0 -11
  261. package/dist/reconciler/portal.d.ts.map +0 -1
  262. package/dist/reconciler/portal.js +0 -20
  263. package/dist/reconciler/portal.js.map +0 -1
  264. package/dist/reconciler/reconciler-error-handler.d.ts +0 -7
  265. package/dist/reconciler/reconciler-error-handler.d.ts.map +0 -1
  266. package/dist/reconciler/reconciler-error-handler.js +0 -24
  267. package/dist/reconciler/reconciler-error-handler.js.map +0 -1
  268. package/dist/reconciler/reconciler-root.d.ts +0 -19
  269. package/dist/reconciler/reconciler-root.d.ts.map +0 -1
  270. package/dist/reconciler/reconciler-root.js +0 -24
  271. package/dist/reconciler/reconciler-root.js.map +0 -1
  272. package/dist/reconciler/reconciler.d.ts +0 -3
  273. package/dist/reconciler/reconciler.d.ts.map +0 -1
  274. package/dist/reconciler/reconciler.js +0 -12
  275. package/dist/reconciler/reconciler.js.map +0 -1
  276. package/dist/reconciler/render.d.ts +0 -23
  277. package/dist/reconciler/render.d.ts.map +0 -1
  278. package/dist/reconciler/render.js +0 -46
  279. package/dist/reconciler/render.js.map +0 -1
  280. package/dist/reconciler/signal-store.d.ts +0 -22
  281. package/dist/reconciler/signal-store.d.ts.map +0 -1
  282. package/dist/reconciler/signal-store.js +0 -84
  283. package/dist/reconciler/signal-store.js.map +0 -1
  284. package/dist/reconciler/state.d.ts +0 -36
  285. package/dist/reconciler/state.d.ts.map +0 -1
  286. package/dist/reconciler/state.js +0 -38
  287. package/dist/reconciler/state.js.map +0 -1
  288. package/dist/reconciler/text-buffer-controller.d.ts +0 -17
  289. package/dist/reconciler/text-buffer-controller.d.ts.map +0 -1
  290. package/dist/reconciler/text-buffer-controller.js +0 -102
  291. package/dist/reconciler/text-buffer-controller.js.map +0 -1
  292. package/dist/reconciler/text-buffer-rebuild.d.ts +0 -3
  293. package/dist/reconciler/text-buffer-rebuild.d.ts.map +0 -1
  294. package/dist/reconciler/text-buffer-rebuild.js +0 -7
  295. package/dist/reconciler/text-buffer-rebuild.js.map +0 -1
  296. package/dist/reconciler/text-node.d.ts +0 -7
  297. package/dist/reconciler/text-node.d.ts.map +0 -1
  298. package/dist/reconciler/text-node.js +0 -8
  299. package/dist/reconciler/text-node.js.map +0 -1
  300. package/dist/reconciler/types.d.ts +0 -5
  301. package/dist/reconciler/types.d.ts.map +0 -1
  302. package/dist/reconciler/types.js +0 -2
  303. package/dist/reconciler/types.js.map +0 -1
  304. package/dist/reconciler/visibility.d.ts +0 -6
  305. package/dist/reconciler/visibility.d.ts.map +0 -1
  306. package/dist/reconciler/visibility.js +0 -57
  307. package/dist/reconciler/visibility.js.map +0 -1
  308. package/dist/reconciler/wrapper-apply.d.ts +0 -6
  309. package/dist/reconciler/wrapper-apply.d.ts.map +0 -1
  310. package/dist/reconciler/wrapper-apply.js +0 -287
  311. package/dist/reconciler/wrapper-apply.js.map +0 -1
  312. package/dist/reconciler/wrapper-content.d.ts +0 -8
  313. package/dist/reconciler/wrapper-content.d.ts.map +0 -1
  314. package/dist/reconciler/wrapper-content.js +0 -19
  315. package/dist/reconciler/wrapper-content.js.map +0 -1
  316. package/dist/reconciler/wrapper-node.d.ts +0 -8
  317. package/dist/reconciler/wrapper-node.d.ts.map +0 -1
  318. package/dist/reconciler/wrapper-node.js +0 -4
  319. package/dist/reconciler/wrapper-node.js.map +0 -1
  320. package/dist/reconciler/wrapper-protocol.d.ts +0 -13
  321. package/dist/reconciler/wrapper-protocol.d.ts.map +0 -1
  322. package/dist/reconciler/wrapper-protocol.js +0 -20
  323. package/dist/reconciler/wrapper-protocol.js.map +0 -1
  324. package/dist/utils/create-element-component.d.ts +0 -4
  325. package/dist/utils/create-element-component.d.ts.map +0 -1
  326. package/dist/utils/create-element-component.js +0 -54
  327. package/dist/utils/create-element-component.js.map +0 -1
  328. package/dist/utils/gtype.d.ts +0 -16
  329. package/dist/utils/gtype.d.ts.map +0 -1
  330. package/dist/utils/gtype.js +0 -127
  331. package/dist/utils/gtype.js.map +0 -1
  332. package/dist/utils/notify-name.d.ts +0 -5
  333. package/dist/utils/notify-name.d.ts.map +0 -1
  334. package/dist/utils/notify-name.js +0 -6
  335. package/dist/utils/notify-name.js.map +0 -1
  336. package/dist/utils/object-prop.d.ts +0 -8
  337. package/dist/utils/object-prop.d.ts.map +0 -1
  338. package/dist/utils/object-prop.js +0 -9
  339. package/dist/utils/object-prop.js.map +0 -1
  340. package/dist/utils/settings-accessor.d.ts +0 -8
  341. package/dist/utils/settings-accessor.d.ts.map +0 -1
  342. package/dist/utils/settings-accessor.js +0 -69
  343. package/dist/utils/settings-accessor.js.map +0 -1
  344. package/dist/utils/wrapper-node-jsx.d.ts +0 -32
  345. package/dist/utils/wrapper-node-jsx.d.ts.map +0 -1
  346. package/dist/utils/wrapper-node-jsx.js +0 -2
  347. package/dist/utils/wrapper-node-jsx.js.map +0 -1
  348. package/src/hooks/use-merge-refs.ts +0 -53
  349. package/src/hooks/use-object-attachment.ts +0 -35
  350. package/src/libraries/adw/dialog.tsx +0 -34
  351. package/src/libraries/adw/index.ts +0 -1
  352. package/src/reconciler/accessible.ts +0 -232
  353. package/src/reconciler/commit-flush.ts +0 -13
  354. package/src/reconciler/container-attach.ts +0 -219
  355. package/src/reconciler/content-rebuild.ts +0 -19
  356. package/src/reconciler/dispatch.ts +0 -58
  357. package/src/reconciler/element-prop-appliers.ts +0 -110
  358. package/src/reconciler/element-props.ts +0 -192
  359. package/src/reconciler/label-text-rebuild.ts +0 -26
  360. package/src/reconciler/portal.ts +0 -28
  361. package/src/reconciler/reconciler-error-handler.ts +0 -29
  362. package/src/reconciler/reconciler-root.ts +0 -57
  363. package/src/reconciler/reconciler.ts +0 -13
  364. package/src/reconciler/render.ts +0 -61
  365. package/src/reconciler/signal-store.ts +0 -103
  366. package/src/reconciler/state.ts +0 -72
  367. package/src/reconciler/text-buffer-controller.ts +0 -107
  368. package/src/reconciler/text-buffer-rebuild.ts +0 -12
  369. package/src/reconciler/text-node.ts +0 -13
  370. package/src/reconciler/types.ts +0 -6
  371. package/src/reconciler/visibility.ts +0 -52
  372. package/src/reconciler/wrapper-apply.ts +0 -308
  373. package/src/reconciler/wrapper-content.ts +0 -24
  374. package/src/reconciler/wrapper-node.ts +0 -8
  375. package/src/reconciler/wrapper-protocol.ts +0 -32
  376. package/src/utils/create-element-component.ts +0 -77
  377. package/src/utils/gtype.ts +0 -166
  378. package/src/utils/notify-name.ts +0 -10
  379. package/src/utils/object-prop.ts +0 -13
  380. package/src/utils/settings-accessor.ts +0 -89
  381. package/src/utils/wrapper-node-jsx.ts +0 -34
@@ -1,405 +1,278 @@
1
- import * as GObject from "@gtkx/gi/gobject";
1
+ import type * as GObject from "@gtkx/gi/gobject";
2
2
  import * as Gtk from "@gtkx/gi/gtk";
3
- import { type Context, createContext } from "react";
4
- import type ReactReconciler from "react-reconciler";
5
- import { DiscreteEventPriority } from "react-reconciler/constants.js";
6
- import { typeChainIncludes } from "../utils/gtype.js";
7
- import { applyAccessibleProps, isAccessibleProp } from "./accessible.js";
8
- import { applyProps } from "./apply-props.js";
9
- import { runCommitFlush } from "./commit-flush.js";
10
- import { attachNode, detachFromParent, detachNode, resyncWrapperNode } from "./dispatch.js";
11
- import { applyElementProps, reapplyLazyProps } from "./element-prop-appliers.js";
12
- import { isAppliedProp } from "./element-props.js";
13
- import { createElementInstance, createWrapperInstance } from "./instance.js";
14
- import { scheduleLabelTextRebuild } from "./label-text-rebuild.js";
15
- import { catchReconcilerError } from "./reconciler-error-handler.js";
16
- import { getSignalStore } from "./signal-store.js";
17
- import { ensureState, type Node, stateOf } from "./state.js";
18
- import { scheduleBufferRebuild } from "./text-buffer-rebuild.js";
19
- import { isBufferContentNode, isLabelTextNode } from "./text-node.js";
20
- import type { Container, Props } from "./types.js";
21
- import { hideNode, reassertHidden, setTextNodeHidden, unhideNode } from "./visibility.js";
22
- import { isWrapperNode } from "./wrapper-node.js";
23
- import { BUFFER_TEXT_KIND, isWrapperKind, LABEL_TEXT_KIND, WRAPPER_NODE_ELEMENT } from "./wrapper-protocol.js";
24
-
25
- const FIXED_UPDATE_PRIORITY = DiscreteEventPriority;
26
-
27
- type PublicInstance = GObject.Object;
28
-
29
- type HostContext = {
30
- textHost?: "label" | "buffer";
3
+ import { getInstanceType, typeName } from "@gtkx/runtime";
4
+ import { getOrInsert } from "@gtkx/utils";
5
+ import { createContext } from "react";
6
+ import ReactReconciler from "react-reconciler";
7
+ import { DefaultEventPriority, DiscreteEventPriority, NoEventPriority } from "react-reconciler/constants.js";
8
+ import type { Props } from "./registry.js";
9
+ import { Prop } from "../components/element.js";
10
+ import {
11
+ applyAdoptedProps,
12
+ applyElementProps,
13
+ assertConstructOnlyUnchanged,
14
+ flushBehaviors,
15
+ mountBehaviors,
16
+ unmountBehaviors,
17
+ } from "./apply-props.js";
18
+ import { attachChild, detachChild } from "./child-routing.js";
19
+ import { resolveElementNode } from "./instance.js";
20
+ import { typeInfoFor } from "./metadata.js";
21
+ import {
22
+ type AnyNode,
23
+ createElementNode,
24
+ createPropNode,
25
+ createTextNode,
26
+ type Dispatch,
27
+ ELEMENT_KIND,
28
+ type ElementNode,
29
+ type Instance,
30
+ LAZY_KIND,
31
+ lazyTarget,
32
+ type TextNode,
33
+ } from "./node.js";
34
+ import { isRootElement, type RootElement } from "./root-element.js";
35
+ import { beginSuppression, disconnectAllHandlers, endSuppression } from "./signals.js";
36
+ import {
37
+ didUpdateTextSurgically,
38
+ enclosingHost,
39
+ flushTextHosts,
40
+ markTextDirty,
41
+ validateContentMix,
42
+ } from "./text.js";
43
+
44
+ /** A top-level container an element tree can be mounted into. */
45
+ type Container = RootElement | GObject.Object;
46
+
47
+ type PriorityTracker = {
48
+ get: () => number;
49
+ set: (priority: number) => void;
50
+ withDiscrete: <T>(fn: () => T) => T;
31
51
  };
32
52
 
33
- type HostConfig = ReactReconciler.HostConfig<
34
- string,
35
- Props,
36
- Container,
37
- Node,
38
- Node,
39
- never,
40
- never,
41
- never,
42
- PublicInstance,
43
- HostContext,
44
- never,
45
- number,
46
- -1,
47
- number
48
- >;
49
-
50
- export type ReconcilerInstance = ReactReconciler.Reconciler<Container, Node, Node, never, never, PublicInstance>;
53
+ const HOST_CONTEXT: Record<string, never> = {};
54
+ const containerNodes: WeakMap<object, ElementNode> = new WeakMap();
55
+ const priority = createPriorityTracker();
51
56
 
52
- const link = (parent: Node, child: Node): void => {
53
- const { children } = stateOf(parent);
54
- const index = children.indexOf(child);
55
- if (index !== -1) children.splice(index, 1);
56
- children.push(child);
57
- stateOf(child).parent = parent;
58
- };
57
+ const hostConfig = {
58
+ supportsMutation: true,
59
+ supportsPersistence: false,
60
+ supportsHydration: false,
61
+ isPrimaryRenderer: true,
62
+ noTimeout: -1,
63
+ scheduleTimeout: (fn: (...args: unknown[]) => unknown, delay?: number): ReturnType<typeof setTimeout> =>
64
+ setTimeout(fn, delay),
65
+ cancelTimeout: (id: ReturnType<typeof setTimeout>): void => {
66
+ clearTimeout(id);
67
+ },
68
+ createInstance: (type: string, props: Props): Instance => createNode(type, props),
69
+ createTextInstance: (text: string): TextNode => createTextNode(text),
70
+ appendInitialChild: (parent: Instance, child: AnyNode): void => {
71
+ attachChild(parent, child, null);
72
+ },
73
+ finalizeInitialChildren: (instance: Instance, _type: string, props: Props): boolean => {
74
+ if (instance.kind !== ELEMENT_KIND) {
75
+ return false;
76
+ }
59
77
 
60
- const linkBefore = (parent: Node, child: Node, before: Node): void => {
61
- const { children } = stateOf(parent);
62
- const existing = children.indexOf(child);
63
- if (existing !== -1) children.splice(existing, 1);
64
- const beforeIndex = children.indexOf(before);
65
- if (beforeIndex === -1) children.push(child);
66
- else children.splice(beforeIndex, 0, child);
67
- stateOf(child).parent = parent;
68
- };
78
+ validateContentMix(instance, props);
69
79
 
70
- const unlink = (parent: Node, child: Node): void => {
71
- const { children } = stateOf(parent);
72
- const index = children.indexOf(child);
73
- if (index !== -1) children.splice(index, 1);
74
- stateOf(child).parent = null;
75
- };
80
+ return typeInfoFor(instance.typeName).hasMount;
81
+ },
82
+ commitMount: (instance: Instance): void => {
83
+ if (instance.kind === ELEMENT_KIND) {
84
+ mountBehaviors(instance);
85
+ }
86
+ },
87
+ shouldSetTextContent: (): boolean => false,
88
+ getRootHostContext: (): Record<string, never> => HOST_CONTEXT,
89
+ getChildHostContext: (parent: Record<string, never>): Record<string, never> => parent,
90
+ getPublicInstance: (instance: Instance): object => getPublicInstance(instance),
91
+ prepareForCommit: (): null => {
92
+ beginSuppression();
76
93
 
77
- const isBufferRelated = (instance: Node): boolean =>
78
- isBufferContentNode(instance) || instance instanceof Gtk.TextTag || instance instanceof Gtk.TextBuffer;
94
+ return null;
95
+ },
96
+ resetAfterCommit: (): void => {
97
+ flushTextHosts();
98
+ flushBehaviors();
99
+ endSuppression();
100
+ },
101
+ preparePortalMount: (): void => undefined,
102
+ clearContainer: (): void => undefined,
103
+ appendChild: (parent: Instance, child: AnyNode): void => {
104
+ attachChild(parent, child, null);
105
+ },
106
+ appendChildToContainer: (container: Container, child: AnyNode): void => {
107
+ attachToContainer(container, child, null);
108
+ },
109
+ insertBefore: (parent: Instance, child: AnyNode, before: AnyNode): void => {
110
+ attachChild(parent, child, before);
111
+ },
112
+ insertInContainerBefore: (container: Container, child: AnyNode, before: AnyNode): void => {
113
+ attachToContainer(container, child, before);
114
+ },
115
+ removeChild: (parent: Instance, child: AnyNode): void => {
116
+ detachChild(parent, child);
117
+ },
118
+ removeChildFromContainer: (container: Container, child: AnyNode): void => {
119
+ detachFromContainer(container, child);
120
+ },
121
+ commitTextUpdate: (textInstance: TextNode, oldText: string, newText: string): void => {
122
+ textInstance.text = newText;
123
+ const host = enclosingHost(textInstance);
79
124
 
80
- const scheduleTextRebuilds = (parent: Node, child: Node): void => {
81
- if (isBufferRelated(parent) || isBufferRelated(child)) scheduleBufferRebuild(parent);
82
- if (isLabelTextNode(child)) scheduleLabelTextRebuild(parent);
125
+ if (host !== null && !didUpdateTextSurgically(host, textInstance, oldText, newText)) {
126
+ markTextDirty(host);
127
+ }
128
+ },
129
+ commitUpdate: (instance: Instance, _type: string, prevProps: Props, nextProps: Props): void => {
130
+ updateInstance(instance, prevProps, nextProps);
131
+ },
132
+ hideInstance: (instance: Instance): void => {
133
+ setWidgetVisible(instance, false);
134
+ },
135
+ unhideInstance: (instance: Instance, props: Props): void => {
136
+ setWidgetVisible(instance, props.visible !== false);
137
+ },
138
+ hideTextInstance: (): void => undefined,
139
+ unhideTextInstance: (): void => undefined,
140
+ detachDeletedInstance: (instance: Instance): void => {
141
+ if (instance.kind === ELEMENT_KIND) {
142
+ disconnectAllHandlers(instance);
143
+ unmountBehaviors(instance);
144
+ } else if (instance.kind === LAZY_KIND && instance.adopted !== null) {
145
+ disconnectAllHandlers(lazyTarget(instance, instance.adopted));
146
+ }
147
+ },
148
+ getInstanceFromNode: (): null => null,
149
+ beforeActiveInstanceBlur: (): void => undefined,
150
+ afterActiveInstanceBlur: (): void => undefined,
151
+ prepareScopeUpdate: (): void => undefined,
152
+ getInstanceFromScope: (): null => null,
153
+ setCurrentUpdatePriority: (next: number): void => {
154
+ priority.set(next);
155
+ },
156
+ getCurrentUpdatePriority: (): number => priority.get(),
157
+ resolveUpdatePriority: (): number => (priority.get() === NoEventPriority ? DefaultEventPriority : priority.get()),
158
+ resetFormInstance: (): void => undefined,
159
+ requestPostPaintCallback: (): void => undefined,
160
+ shouldAttemptEagerTransition: (): boolean => false,
161
+ trackSchedulerEvent: (): void => undefined,
162
+ resolveEventType: (): null => null,
163
+ resolveEventTimeStamp: (): number => -1,
164
+ maySuspendCommit: (): boolean => false,
165
+ preloadInstance: (): boolean => true,
166
+ startSuspendingCommit: (): void => undefined,
167
+ suspendInstance: (): void => undefined,
168
+ waitForCommitToBeReady: (): null => null,
169
+ NotPendingTransition: null,
170
+ HostTransitionContext: createContext(null) as unknown as ReactReconciler.ReactContext<null>,
83
171
  };
84
172
 
85
- const reapplyParentLazy = (parent: Node): void => {
86
- if (parent instanceof GObject.Object) reapplyLazyProps(parent, stateOf(parent).props);
87
- };
173
+ const reconciler: ReactReconciler.Reconciler<Container, Instance, TextNode, unknown, unknown, object> =
174
+ ReactReconciler(hostConfig);
88
175
 
89
- const appendChild = (parent: Node, child: Node): void => {
90
- const fresh = stateOf(child).parent === null;
91
- link(parent, child);
92
- attachNode(parent, child, null, fresh);
93
- scheduleTextRebuilds(parent, child);
94
- reapplyParentLazy(parent);
95
- };
176
+ function createPriorityTracker(): PriorityTracker {
177
+ let current: number = NoEventPriority;
96
178
 
97
- const insertBefore = (parent: Node, child: Node, before: Node): void => {
98
- linkBefore(parent, child, before);
99
- attachNode(parent, child, before, false);
100
- scheduleTextRebuilds(parent, child);
101
- reapplyParentLazy(parent);
102
- };
179
+ return {
180
+ get: () => current,
181
+ set: (next) => {
182
+ current = next;
183
+ },
184
+ withDiscrete: (fn) => {
185
+ const previous = current;
186
+ current = DiscreteEventPriority;
187
+
188
+ try {
189
+ return fn();
190
+ } finally {
191
+ current = previous;
192
+ }
193
+ },
194
+ };
195
+ }
103
196
 
104
- const removeChild = (parent: Node, child: Node): void => {
105
- scheduleTextRebuilds(parent, child);
106
- unlink(parent, child);
107
- detachNode(parent, child);
108
- };
197
+ const updateInstance = (instance: Instance, prev: Props, next: Props): void => {
198
+ if (instance.kind === ELEMENT_KIND) {
199
+ assertConstructOnlyUnchanged(instance.typeName, prev, next);
200
+ applyElementProps(instance, prev, next);
109
201
 
110
- const commitInstanceProps = (instance: Node, oldProps: Props | null, newProps: Props): void => {
111
- const state = stateOf(instance);
112
- state.props = newProps;
113
- if (isWrapperNode(instance)) {
114
- if (isBufferContentNode(instance)) scheduleBufferRebuild(instance);
115
- else resyncWrapperNode(instance);
116
- reassertHidden(instance);
117
202
  return;
118
203
  }
119
- if (!(instance instanceof GObject.Object)) return;
120
- const excludeApplied = (name: string): boolean => isAppliedProp(instance.__type__, name);
121
- const applyGenericAndSignals = (): void => {
122
- if (instance instanceof Gtk.Accessible) {
123
- applyAccessibleProps(instance, oldProps, newProps);
124
- applyProps(instance, oldProps, newProps, {
125
- exclude: (name) => isAccessibleProp(name) || excludeApplied(name),
126
- });
127
- } else {
128
- applyProps(instance, oldProps, newProps, { exclude: excludeApplied });
129
- }
130
- };
131
- if (oldProps === null) {
132
- applyElementProps(instance, oldProps, newProps);
133
- applyGenericAndSignals();
134
- } else {
135
- applyGenericAndSignals();
136
- applyElementProps(instance, oldProps, newProps);
204
+
205
+ if (instance.kind === LAZY_KIND && instance.adopted !== null) {
206
+ assertConstructOnlyUnchanged(instance.typeName, prev, next);
207
+ applyAdoptedProps(lazyTarget(instance, instance.adopted), prev, next);
208
+ instance.props = next;
137
209
  }
138
- if (instance instanceof Gtk.TextTag) scheduleBufferRebuild(instance);
139
- reassertHidden(instance);
140
210
  };
141
211
 
142
- const needsDetachOnDelete = (wrapper: GObject.Object): boolean =>
143
- !(wrapper instanceof Gtk.Widget) && !(wrapper instanceof Gtk.TextBuffer);
144
-
145
- const detachInstance = (instance: Node): void => {
146
- const state = stateOf(instance);
147
- if (instance instanceof GObject.Object && needsDetachOnDelete(instance) && state.parent) {
148
- detachFromParent(instance, state.parent);
212
+ const attachToContainer = (container: Container, child: AnyNode, before: AnyNode | null): void => {
213
+ if (!isRootElement(container)) {
214
+ attachChild(getOrCreateContainerNode(container), child, before);
149
215
  }
150
- if (instance instanceof GObject.Object) state.signalStore.clear(instance);
151
216
  };
152
217
 
153
- const createDetachGuard = (): ((instance: Node) => void) => {
154
- const detached = new WeakSet<Node>();
155
- return (instance: Node) => {
156
- if (detached.has(instance)) return;
157
- detached.add(instance);
158
- detachInstance(instance);
159
- };
218
+ const detachFromContainer = (container: Container, child: AnyNode): void => {
219
+ if (!isRootElement(container)) {
220
+ detachChild(getOrCreateContainerNode(container), child);
221
+ }
160
222
  };
161
223
 
162
- type SchedulingConfig = Pick<
163
- HostConfig,
164
- | "supportsMutation"
165
- | "supportsPersistence"
166
- | "supportsHydration"
167
- | "supportsMicrotasks"
168
- | "scheduleMicrotask"
169
- | "isPrimaryRenderer"
170
- | "noTimeout"
171
- | "scheduleTimeout"
172
- | "cancelTimeout"
173
- | "getCurrentUpdatePriority"
174
- | "setCurrentUpdatePriority"
175
- | "resolveUpdatePriority"
176
- >;
177
-
178
- const createSchedulingConfig = (): SchedulingConfig => ({
179
- supportsMutation: true,
180
- supportsPersistence: false,
181
- supportsHydration: false,
182
- supportsMicrotasks: true,
183
- scheduleMicrotask: (fn: () => unknown) => queueMicrotask(fn),
184
- isPrimaryRenderer: true,
185
- noTimeout: -1,
186
- scheduleTimeout: (fn, delay) => {
187
- const timeoutId = setTimeout(fn, delay ?? 0);
188
- return typeof timeoutId === "number" ? timeoutId : Number(timeoutId);
189
- },
190
- cancelTimeout: (id) => {
191
- clearTimeout(id);
192
- },
193
- getCurrentUpdatePriority: () => FIXED_UPDATE_PRIORITY,
194
- setCurrentUpdatePriority: () => {},
195
- resolveUpdatePriority: () => FIXED_UPDATE_PRIORITY,
196
- });
197
-
198
- type HostContextConfig = Pick<HostConfig, "getRootHostContext" | "getChildHostContext" | "shouldSetTextContent">;
224
+ const getPublicInstance = (instance: Instance): object => {
225
+ if (instance.kind === ELEMENT_KIND) {
226
+ return instance.object;
227
+ }
199
228
 
200
- const EMPTY_CONTEXT: HostContext = {};
201
- const LABEL_CONTEXT: HostContext = { textHost: "label" };
202
- const BUFFER_CONTEXT: HostContext = { textHost: "buffer" };
229
+ if (instance.kind === LAZY_KIND) {
230
+ return instance.adopted ?? instance;
231
+ }
203
232
 
204
- type TextHostKind = "label" | "buffer" | "tag" | null;
233
+ return instance;
234
+ };
205
235
 
206
- const textHostKinds = new Map<string, TextHostKind>();
236
+ const setWidgetVisible = (instance: Instance, isVisible: boolean): void => {
237
+ if (instance.kind === ELEMENT_KIND && instance.object instanceof Gtk.Widget) {
238
+ instance.object.setVisible(isVisible);
239
+ }
240
+ };
207
241
 
208
- const resolveTextHostKind = (type: string): TextHostKind => {
209
- const cached = textHostKinds.get(type);
210
- if (cached !== undefined) return cached;
211
- const gtype = GObject.typeFromName(type);
212
- let kind: TextHostKind = null;
213
- if (typeChainIncludes(gtype, "GtkLabel")) kind = "label";
214
- else if (typeChainIncludes(gtype, "GtkTextBuffer")) kind = "buffer";
215
- else if (typeChainIncludes(gtype, "GtkTextTag")) kind = "tag";
216
- textHostKinds.set(type, kind);
217
- return kind;
242
+ const runDiscrete: Dispatch = (fn) => {
243
+ try {
244
+ return priority.withDiscrete(fn);
245
+ } finally {
246
+ reconciler.flushSyncWork();
247
+ }
218
248
  };
219
249
 
220
- const createHostContextConfig = (): HostContextConfig => ({
221
- getRootHostContext: () => EMPTY_CONTEXT,
222
- getChildHostContext: (parentHostContext, type) => {
223
- const kind = resolveTextHostKind(type);
224
- if (kind === "label") return LABEL_CONTEXT;
225
- if (kind === "buffer") return BUFFER_CONTEXT;
226
- if (kind === "tag" && parentHostContext.textHost === "buffer") return parentHostContext;
227
- return parentHostContext.textHost === undefined ? parentHostContext : EMPTY_CONTEXT;
228
- },
229
- shouldSetTextContent: () => false,
230
- });
250
+ const adoptContainer = (container: GObject.Object): ElementNode => {
251
+ const name = typeName(getInstanceType(container));
231
252
 
232
- type InstanceConfig = Pick<
233
- HostConfig,
234
- "createInstance" | "createTextInstance" | "appendInitialChild" | "finalizeInitialChildren" | "getPublicInstance"
235
- >;
253
+ if (name === null) {
254
+ throw new Error("Cannot adopt a container whose GType has no registered name");
255
+ }
236
256
 
237
- const createInstanceConfig = (): InstanceConfig => ({
238
- createInstance: (type, props, rootContainer) => {
239
- if (type !== WRAPPER_NODE_ELEMENT) {
240
- return createElementInstance(type, props, rootContainer);
241
- }
242
- const kind = props.kind;
243
- if (!isWrapperKind(kind)) {
244
- throw new Error(`Wrapper node element has an invalid kind: ${JSON.stringify(kind)}`);
245
- }
246
- return createWrapperInstance(kind, props, rootContainer);
247
- },
248
- createTextInstance: (text, rootContainer, hostContext) => {
249
- if (hostContext.textHost === "buffer") {
250
- return createWrapperInstance(BUFFER_TEXT_KIND, { text }, rootContainer);
251
- }
252
- if (hostContext.textHost === "label") {
253
- return createWrapperInstance(LABEL_TEXT_KIND, { text }, rootContainer);
254
- }
255
- throw new Error(
256
- `Text strings must be rendered within a <GtkLabel> or <GtkTextBuffer> element; received ${JSON.stringify(text)}`,
257
- );
258
- },
259
- appendInitialChild: (parent, child) => {
260
- appendChild(parent, child);
261
- },
262
- finalizeInitialChildren: (instance, _type, props) => {
263
- commitInstanceProps(instance, null, props);
264
- return false;
265
- },
266
- getPublicInstance: (instance) => {
267
- const adopted = isWrapperNode(instance) ? stateOf(instance).adoptedInstance : undefined;
268
- return (adopted ?? instance) as PublicInstance;
269
- },
270
- });
257
+ return createElementNode(name, container, runDiscrete, null);
258
+ };
271
259
 
272
- type MutationConfig = Pick<
273
- HostConfig,
274
- | "appendChild"
275
- | "removeChild"
276
- | "insertBefore"
277
- | "appendChildToContainer"
278
- | "removeChildFromContainer"
279
- | "insertInContainerBefore"
280
- | "clearContainer"
281
- | "hideInstance"
282
- | "unhideInstance"
283
- | "hideTextInstance"
284
- | "unhideTextInstance"
285
- >;
260
+ const getOrCreateContainerNode = (container: GObject.Object): ElementNode =>
261
+ getOrInsert(containerNodes, container, adoptContainer);
286
262
 
287
- const createMutationConfig = (): MutationConfig => ({
288
- appendChild: (parent, child) => {
289
- appendChild(parent, child);
290
- },
291
- removeChild: (parent, child) => {
292
- removeChild(parent, child);
293
- },
294
- insertBefore: (parent, child, beforeChild) => {
295
- insertBefore(parent, child, beforeChild);
296
- },
297
- removeChildFromContainer: (container, child) => {
298
- ensureState(container);
299
- removeChild(container, child);
300
- },
301
- appendChildToContainer: (container, child) => {
302
- ensureState(container);
303
- appendChild(container, child);
304
- },
305
- insertInContainerBefore: (container, child, beforeChild) => {
306
- ensureState(container);
307
- insertBefore(container, child, beforeChild);
308
- },
309
- clearContainer: () => {},
310
- hideInstance: (instance) => {
311
- hideNode(instance);
312
- },
313
- unhideInstance: (instance) => {
314
- unhideNode(instance);
315
- },
316
- hideTextInstance: (textInstance) => {
317
- setTextNodeHidden(textInstance, true);
318
- },
319
- unhideTextInstance: (textInstance) => {
320
- setTextNodeHidden(textInstance, false);
321
- },
322
- });
263
+ const createNode = (type: string, props: Props): Instance => {
264
+ if (type === Prop) {
265
+ return createPropNode(props.propName as string);
266
+ }
323
267
 
324
- type CommitConfig = Pick<HostConfig, "commitUpdate" | "commitTextUpdate" | "prepareForCommit" | "resetAfterCommit">;
268
+ const node = resolveElementNode(type, props, runDiscrete);
325
269
 
326
- const drainCommitQueue = (): void => catchReconcilerError(runCommitFlush);
270
+ if (node.kind === ELEMENT_KIND) {
271
+ containerNodes.set(node.object, node);
272
+ applyElementProps(node, {}, props);
273
+ }
327
274
 
328
- const finalizeCommitAfterLayoutEffects = (container: Container): void => {
329
- drainCommitQueue();
330
- getSignalStore(container).unblock();
275
+ return node;
331
276
  };
332
277
 
333
- const createCommitConfig = (): CommitConfig => ({
334
- commitUpdate: (instance, _type, oldProps, newProps) => commitInstanceProps(instance, oldProps, newProps),
335
- commitTextUpdate: (textInstance, _oldText, newText) => {
336
- stateOf(textInstance).props = { text: newText };
337
- if (isBufferContentNode(textInstance)) scheduleBufferRebuild(textInstance);
338
- else scheduleLabelTextRebuild(textInstance);
339
- },
340
- prepareForCommit: (container) => {
341
- getSignalStore(container).block();
342
- return null;
343
- },
344
- resetAfterCommit: (container) => {
345
- drainCommitQueue();
346
- queueMicrotask(() => finalizeCommitAfterLayoutEffects(container));
347
- },
348
- });
349
-
350
- type NoopConfig = Pick<
351
- HostConfig,
352
- | "preparePortalMount"
353
- | "NotPendingTransition"
354
- | "HostTransitionContext"
355
- | "getInstanceFromNode"
356
- | "beforeActiveInstanceBlur"
357
- | "afterActiveInstanceBlur"
358
- | "prepareScopeUpdate"
359
- | "getInstanceFromScope"
360
- | "resetFormInstance"
361
- | "requestPostPaintCallback"
362
- | "shouldAttemptEagerTransition"
363
- | "trackSchedulerEvent"
364
- | "resolveEventType"
365
- | "resolveEventTimeStamp"
366
- | "maySuspendCommit"
367
- | "preloadInstance"
368
- | "startSuspendingCommit"
369
- | "suspendInstance"
370
- | "waitForCommitToBeReady"
371
- >;
372
-
373
- const createNoopConfig = (): NoopConfig => ({
374
- preparePortalMount: () => {},
375
- NotPendingTransition: null,
376
- HostTransitionContext: createContext(0) as Context<number> & ReactReconciler.ReactContext<number>,
377
- getInstanceFromNode: () => null,
378
- beforeActiveInstanceBlur: () => {},
379
- afterActiveInstanceBlur: () => {},
380
- prepareScopeUpdate: () => {},
381
- getInstanceFromScope: () => null,
382
- resetFormInstance: () => {},
383
- requestPostPaintCallback: () => {},
384
- shouldAttemptEagerTransition: () => false,
385
- trackSchedulerEvent: () => {},
386
- resolveEventType: () => null,
387
- resolveEventTimeStamp: () => Date.now(),
388
- maySuspendCommit: () => false,
389
- preloadInstance: () => false,
390
- startSuspendingCommit: () => {},
391
- suspendInstance: () => {},
392
- waitForCommitToBeReady: () => null,
393
- });
394
-
395
- export function createHostConfig(): HostConfig {
396
- return {
397
- ...createSchedulingConfig(),
398
- ...createHostContextConfig(),
399
- ...createInstanceConfig(),
400
- ...createMutationConfig(),
401
- ...createCommitConfig(),
402
- ...createNoopConfig(),
403
- detachDeletedInstance: createDetachGuard(),
404
- };
405
- }
278
+ export { reconciler, type Container };