@gtkx/react 0.18.0 → 0.18.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 (401) hide show
  1. package/dist/errors.d.ts +1 -0
  2. package/dist/errors.d.ts.map +1 -0
  3. package/dist/errors.js +1 -0
  4. package/dist/errors.js.map +1 -0
  5. package/dist/factory.d.ts +1 -0
  6. package/dist/factory.d.ts.map +1 -0
  7. package/dist/factory.js +1 -0
  8. package/dist/factory.js.map +1 -0
  9. package/dist/fiber-root.d.ts +1 -0
  10. package/dist/fiber-root.d.ts.map +1 -0
  11. package/dist/fiber-root.js +1 -0
  12. package/dist/fiber-root.js.map +1 -0
  13. package/dist/generated/internal.d.ts +1 -0
  14. package/dist/generated/internal.d.ts.map +1 -0
  15. package/dist/generated/internal.js +1 -0
  16. package/dist/generated/internal.js.map +1 -0
  17. package/dist/generated/jsx.d.ts +1 -0
  18. package/dist/generated/jsx.d.ts.map +1 -0
  19. package/dist/generated/jsx.js +1 -0
  20. package/dist/generated/jsx.js.map +1 -0
  21. package/dist/generated/registry.d.ts +1 -0
  22. package/dist/generated/registry.d.ts.map +1 -0
  23. package/dist/generated/registry.js +1 -0
  24. package/dist/generated/registry.js.map +1 -0
  25. package/dist/host-config.d.ts +1 -0
  26. package/dist/host-config.d.ts.map +1 -0
  27. package/dist/host-config.js +1 -0
  28. package/dist/host-config.js.map +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/jsx.d.ts +1 -0
  34. package/dist/jsx.d.ts.map +1 -0
  35. package/dist/jsx.js +1 -0
  36. package/dist/jsx.js.map +1 -0
  37. package/dist/metadata.d.ts +1 -0
  38. package/dist/metadata.d.ts.map +1 -0
  39. package/dist/metadata.js +1 -0
  40. package/dist/metadata.js.map +1 -0
  41. package/dist/node.d.ts +1 -0
  42. package/dist/node.d.ts.map +1 -0
  43. package/dist/node.js +1 -0
  44. package/dist/node.js.map +1 -0
  45. package/dist/nodes/adjustable.d.ts +1 -0
  46. package/dist/nodes/adjustable.d.ts.map +1 -0
  47. package/dist/nodes/adjustable.js +1 -0
  48. package/dist/nodes/adjustable.js.map +1 -0
  49. package/dist/nodes/alert-dialog-response.d.ts +1 -0
  50. package/dist/nodes/alert-dialog-response.d.ts.map +1 -0
  51. package/dist/nodes/alert-dialog-response.js +1 -0
  52. package/dist/nodes/alert-dialog-response.js.map +1 -0
  53. package/dist/nodes/animation.d.ts +1 -0
  54. package/dist/nodes/animation.d.ts.map +1 -0
  55. package/dist/nodes/animation.js +1 -0
  56. package/dist/nodes/animation.js.map +1 -0
  57. package/dist/nodes/application.d.ts +1 -0
  58. package/dist/nodes/application.d.ts.map +1 -0
  59. package/dist/nodes/application.js +1 -0
  60. package/dist/nodes/application.js.map +1 -0
  61. package/dist/nodes/calendar.d.ts +1 -0
  62. package/dist/nodes/calendar.d.ts.map +1 -0
  63. package/dist/nodes/calendar.js +1 -0
  64. package/dist/nodes/calendar.js.map +1 -0
  65. package/dist/nodes/color-dialog-button.d.ts +1 -0
  66. package/dist/nodes/color-dialog-button.d.ts.map +1 -0
  67. package/dist/nodes/color-dialog-button.js +1 -0
  68. package/dist/nodes/color-dialog-button.js.map +1 -0
  69. package/dist/nodes/column-view-column.d.ts +1 -0
  70. package/dist/nodes/column-view-column.d.ts.map +1 -0
  71. package/dist/nodes/column-view-column.js +1 -0
  72. package/dist/nodes/column-view-column.js.map +1 -0
  73. package/dist/nodes/column-view.d.ts +1 -0
  74. package/dist/nodes/column-view.d.ts.map +1 -0
  75. package/dist/nodes/column-view.js +1 -0
  76. package/dist/nodes/column-view.js.map +1 -0
  77. package/dist/nodes/container-slot.d.ts +1 -0
  78. package/dist/nodes/container-slot.d.ts.map +1 -0
  79. package/dist/nodes/container-slot.js +1 -0
  80. package/dist/nodes/container-slot.js.map +1 -0
  81. package/dist/nodes/dialog.d.ts +1 -0
  82. package/dist/nodes/dialog.d.ts.map +1 -0
  83. package/dist/nodes/dialog.js +1 -0
  84. package/dist/nodes/dialog.js.map +1 -0
  85. package/dist/nodes/drawing-area.d.ts +1 -0
  86. package/dist/nodes/drawing-area.d.ts.map +1 -0
  87. package/dist/nodes/drawing-area.js +1 -0
  88. package/dist/nodes/drawing-area.js.map +1 -0
  89. package/dist/nodes/drop-down.d.ts +1 -0
  90. package/dist/nodes/drop-down.d.ts.map +1 -0
  91. package/dist/nodes/drop-down.js +1 -0
  92. package/dist/nodes/drop-down.js.map +1 -0
  93. package/dist/nodes/event-controller.d.ts +1 -0
  94. package/dist/nodes/event-controller.d.ts.map +1 -0
  95. package/dist/nodes/event-controller.js +1 -0
  96. package/dist/nodes/event-controller.js.map +1 -0
  97. package/dist/nodes/fixed-child.d.ts +1 -0
  98. package/dist/nodes/fixed-child.d.ts.map +1 -0
  99. package/dist/nodes/fixed-child.js +1 -0
  100. package/dist/nodes/fixed-child.js.map +1 -0
  101. package/dist/nodes/font-dialog-button.d.ts +1 -0
  102. package/dist/nodes/font-dialog-button.d.ts.map +1 -0
  103. package/dist/nodes/font-dialog-button.js +1 -0
  104. package/dist/nodes/font-dialog-button.js.map +1 -0
  105. package/dist/nodes/grid-child.d.ts +1 -0
  106. package/dist/nodes/grid-child.d.ts.map +1 -0
  107. package/dist/nodes/grid-child.js +1 -0
  108. package/dist/nodes/grid-child.js.map +1 -0
  109. package/dist/nodes/grid-view.d.ts +1 -0
  110. package/dist/nodes/grid-view.d.ts.map +1 -0
  111. package/dist/nodes/grid-view.js +1 -0
  112. package/dist/nodes/grid-view.js.map +1 -0
  113. package/dist/nodes/internal/base-item-renderer.d.ts +1 -0
  114. package/dist/nodes/internal/base-item-renderer.d.ts.map +1 -0
  115. package/dist/nodes/internal/base-item-renderer.js +1 -0
  116. package/dist/nodes/internal/base-item-renderer.js.map +1 -0
  117. package/dist/nodes/internal/grid-item-renderer.d.ts +1 -0
  118. package/dist/nodes/internal/grid-item-renderer.d.ts.map +1 -0
  119. package/dist/nodes/internal/grid-item-renderer.js +1 -0
  120. package/dist/nodes/internal/grid-item-renderer.js.map +1 -0
  121. package/dist/nodes/internal/list-item-renderer.d.ts +1 -0
  122. package/dist/nodes/internal/list-item-renderer.d.ts.map +1 -0
  123. package/dist/nodes/internal/list-item-renderer.js +1 -0
  124. package/dist/nodes/internal/list-item-renderer.js.map +1 -0
  125. package/dist/nodes/internal/list-store.d.ts +1 -0
  126. package/dist/nodes/internal/list-store.d.ts.map +1 -0
  127. package/dist/nodes/internal/list-store.js +1 -0
  128. package/dist/nodes/internal/list-store.js.map +1 -0
  129. package/dist/nodes/internal/predicates.d.ts +1 -0
  130. package/dist/nodes/internal/predicates.d.ts.map +1 -0
  131. package/dist/nodes/internal/predicates.js +1 -0
  132. package/dist/nodes/internal/predicates.js.map +1 -0
  133. package/dist/nodes/internal/props.d.ts +1 -0
  134. package/dist/nodes/internal/props.d.ts.map +1 -0
  135. package/dist/nodes/internal/props.js +1 -0
  136. package/dist/nodes/internal/props.js.map +1 -0
  137. package/dist/nodes/internal/selection-model-controller.d.ts +1 -0
  138. package/dist/nodes/internal/selection-model-controller.d.ts.map +1 -0
  139. package/dist/nodes/internal/selection-model-controller.js +1 -0
  140. package/dist/nodes/internal/selection-model-controller.js.map +1 -0
  141. package/dist/nodes/internal/signal-store.d.ts +1 -0
  142. package/dist/nodes/internal/signal-store.d.ts.map +1 -0
  143. package/dist/nodes/internal/signal-store.js +1 -0
  144. package/dist/nodes/internal/signal-store.js.map +1 -0
  145. package/dist/nodes/internal/simple-list-store.d.ts +1 -0
  146. package/dist/nodes/internal/simple-list-store.d.ts.map +1 -0
  147. package/dist/nodes/internal/simple-list-store.js +1 -0
  148. package/dist/nodes/internal/simple-list-store.js.map +1 -0
  149. package/dist/nodes/internal/text-buffer-controller.d.ts +1 -0
  150. package/dist/nodes/internal/text-buffer-controller.d.ts.map +1 -0
  151. package/dist/nodes/internal/text-buffer-controller.js +1 -0
  152. package/dist/nodes/internal/text-buffer-controller.js.map +1 -0
  153. package/dist/nodes/internal/tree-store.d.ts +1 -0
  154. package/dist/nodes/internal/tree-store.d.ts.map +1 -0
  155. package/dist/nodes/internal/tree-store.js +1 -0
  156. package/dist/nodes/internal/tree-store.js.map +1 -0
  157. package/dist/nodes/internal/widget.d.ts +1 -0
  158. package/dist/nodes/internal/widget.d.ts.map +1 -0
  159. package/dist/nodes/internal/widget.js +1 -0
  160. package/dist/nodes/internal/widget.js.map +1 -0
  161. package/dist/nodes/level-bar.d.ts +1 -0
  162. package/dist/nodes/level-bar.d.ts.map +1 -0
  163. package/dist/nodes/level-bar.js +1 -0
  164. package/dist/nodes/level-bar.js.map +1 -0
  165. package/dist/nodes/list-item.d.ts +1 -0
  166. package/dist/nodes/list-item.d.ts.map +1 -0
  167. package/dist/nodes/list-item.js +1 -0
  168. package/dist/nodes/list-item.js.map +1 -0
  169. package/dist/nodes/list-view.d.ts +1 -0
  170. package/dist/nodes/list-view.d.ts.map +1 -0
  171. package/dist/nodes/list-view.js +1 -0
  172. package/dist/nodes/list-view.js.map +1 -0
  173. package/dist/nodes/menu.d.ts +1 -0
  174. package/dist/nodes/menu.d.ts.map +1 -0
  175. package/dist/nodes/menu.js +1 -0
  176. package/dist/nodes/menu.js.map +1 -0
  177. package/dist/nodes/models/grid.d.ts +1 -0
  178. package/dist/nodes/models/grid.d.ts.map +1 -0
  179. package/dist/nodes/models/grid.js +1 -0
  180. package/dist/nodes/models/grid.js.map +1 -0
  181. package/dist/nodes/models/list.d.ts +1 -0
  182. package/dist/nodes/models/list.d.ts.map +1 -0
  183. package/dist/nodes/models/list.js +1 -0
  184. package/dist/nodes/models/list.js.map +1 -0
  185. package/dist/nodes/models/menu.d.ts +1 -0
  186. package/dist/nodes/models/menu.d.ts.map +1 -0
  187. package/dist/nodes/models/menu.js +1 -0
  188. package/dist/nodes/models/menu.js.map +1 -0
  189. package/dist/nodes/navigation-page.d.ts +1 -0
  190. package/dist/nodes/navigation-page.d.ts.map +1 -0
  191. package/dist/nodes/navigation-page.js +1 -0
  192. package/dist/nodes/navigation-page.js.map +1 -0
  193. package/dist/nodes/navigation-view.d.ts +1 -0
  194. package/dist/nodes/navigation-view.d.ts.map +1 -0
  195. package/dist/nodes/navigation-view.js +1 -0
  196. package/dist/nodes/navigation-view.js.map +1 -0
  197. package/dist/nodes/notebook-page-tab.d.ts +1 -0
  198. package/dist/nodes/notebook-page-tab.d.ts.map +1 -0
  199. package/dist/nodes/notebook-page-tab.js +1 -0
  200. package/dist/nodes/notebook-page-tab.js.map +1 -0
  201. package/dist/nodes/notebook-page.d.ts +1 -0
  202. package/dist/nodes/notebook-page.d.ts.map +1 -0
  203. package/dist/nodes/notebook-page.js +1 -0
  204. package/dist/nodes/notebook-page.js.map +1 -0
  205. package/dist/nodes/notebook.d.ts +1 -0
  206. package/dist/nodes/notebook.d.ts.map +1 -0
  207. package/dist/nodes/notebook.js +1 -0
  208. package/dist/nodes/notebook.js.map +1 -0
  209. package/dist/nodes/overlay-child.d.ts +1 -0
  210. package/dist/nodes/overlay-child.d.ts.map +1 -0
  211. package/dist/nodes/overlay-child.js +1 -0
  212. package/dist/nodes/overlay-child.js.map +1 -0
  213. package/dist/nodes/popover-menu.d.ts +1 -0
  214. package/dist/nodes/popover-menu.d.ts.map +1 -0
  215. package/dist/nodes/popover-menu.js +1 -0
  216. package/dist/nodes/popover-menu.js.map +1 -0
  217. package/dist/nodes/scale.d.ts +1 -0
  218. package/dist/nodes/scale.d.ts.map +1 -0
  219. package/dist/nodes/scale.js +1 -0
  220. package/dist/nodes/scale.js.map +1 -0
  221. package/dist/nodes/scrolled-window.d.ts +1 -0
  222. package/dist/nodes/scrolled-window.d.ts.map +1 -0
  223. package/dist/nodes/scrolled-window.js +1 -0
  224. package/dist/nodes/scrolled-window.js.map +1 -0
  225. package/dist/nodes/search-bar.d.ts +1 -0
  226. package/dist/nodes/search-bar.d.ts.map +1 -0
  227. package/dist/nodes/search-bar.js +1 -0
  228. package/dist/nodes/search-bar.js.map +1 -0
  229. package/dist/nodes/shortcut-controller.d.ts +1 -0
  230. package/dist/nodes/shortcut-controller.d.ts.map +1 -0
  231. package/dist/nodes/shortcut-controller.js +1 -0
  232. package/dist/nodes/shortcut-controller.js.map +1 -0
  233. package/dist/nodes/shortcut.d.ts +1 -0
  234. package/dist/nodes/shortcut.d.ts.map +1 -0
  235. package/dist/nodes/shortcut.js +1 -0
  236. package/dist/nodes/shortcut.js.map +1 -0
  237. package/dist/nodes/slot.d.ts +1 -0
  238. package/dist/nodes/slot.d.ts.map +1 -0
  239. package/dist/nodes/slot.js +1 -0
  240. package/dist/nodes/slot.js.map +1 -0
  241. package/dist/nodes/source-view.d.ts +1 -0
  242. package/dist/nodes/source-view.d.ts.map +1 -0
  243. package/dist/nodes/source-view.js +1 -0
  244. package/dist/nodes/source-view.js.map +1 -0
  245. package/dist/nodes/stack-page.d.ts +1 -0
  246. package/dist/nodes/stack-page.d.ts.map +1 -0
  247. package/dist/nodes/stack-page.js +1 -0
  248. package/dist/nodes/stack-page.js.map +1 -0
  249. package/dist/nodes/stack.d.ts +1 -0
  250. package/dist/nodes/stack.d.ts.map +1 -0
  251. package/dist/nodes/stack.js +1 -0
  252. package/dist/nodes/stack.js.map +1 -0
  253. package/dist/nodes/text-anchor.d.ts +1 -0
  254. package/dist/nodes/text-anchor.d.ts.map +1 -0
  255. package/dist/nodes/text-anchor.js +1 -0
  256. package/dist/nodes/text-anchor.js.map +1 -0
  257. package/dist/nodes/text-content.d.ts +1 -0
  258. package/dist/nodes/text-content.d.ts.map +1 -0
  259. package/dist/nodes/text-content.js +1 -0
  260. package/dist/nodes/text-content.js.map +1 -0
  261. package/dist/nodes/text-paintable.d.ts +1 -0
  262. package/dist/nodes/text-paintable.d.ts.map +1 -0
  263. package/dist/nodes/text-paintable.js +1 -0
  264. package/dist/nodes/text-paintable.js.map +1 -0
  265. package/dist/nodes/text-segment.d.ts +1 -0
  266. package/dist/nodes/text-segment.d.ts.map +1 -0
  267. package/dist/nodes/text-segment.js +1 -0
  268. package/dist/nodes/text-segment.js.map +1 -0
  269. package/dist/nodes/text-tag.d.ts +1 -0
  270. package/dist/nodes/text-tag.d.ts.map +1 -0
  271. package/dist/nodes/text-tag.js +1 -0
  272. package/dist/nodes/text-tag.js.map +1 -0
  273. package/dist/nodes/text-view.d.ts +1 -0
  274. package/dist/nodes/text-view.d.ts.map +1 -0
  275. package/dist/nodes/text-view.js +1 -0
  276. package/dist/nodes/text-view.js.map +1 -0
  277. package/dist/nodes/toggle-group.d.ts +1 -0
  278. package/dist/nodes/toggle-group.d.ts.map +1 -0
  279. package/dist/nodes/toggle-group.js +1 -0
  280. package/dist/nodes/toggle-group.js.map +1 -0
  281. package/dist/nodes/toggle.d.ts +1 -0
  282. package/dist/nodes/toggle.d.ts.map +1 -0
  283. package/dist/nodes/toggle.js +1 -0
  284. package/dist/nodes/toggle.js.map +1 -0
  285. package/dist/nodes/virtual.d.ts +1 -0
  286. package/dist/nodes/virtual.d.ts.map +1 -0
  287. package/dist/nodes/virtual.js +1 -0
  288. package/dist/nodes/virtual.js.map +1 -0
  289. package/dist/nodes/web-view.d.ts +1 -0
  290. package/dist/nodes/web-view.d.ts.map +1 -0
  291. package/dist/nodes/web-view.js +1 -0
  292. package/dist/nodes/web-view.js.map +1 -0
  293. package/dist/nodes/widget.d.ts +1 -0
  294. package/dist/nodes/widget.d.ts.map +1 -0
  295. package/dist/nodes/widget.js +1 -0
  296. package/dist/nodes/widget.js.map +1 -0
  297. package/dist/nodes/window.d.ts +1 -0
  298. package/dist/nodes/window.d.ts.map +1 -0
  299. package/dist/nodes/window.js +1 -0
  300. package/dist/nodes/window.js.map +1 -0
  301. package/dist/portal.d.ts +1 -0
  302. package/dist/portal.d.ts.map +1 -0
  303. package/dist/portal.js +1 -0
  304. package/dist/portal.js.map +1 -0
  305. package/dist/reconciler.d.ts +1 -0
  306. package/dist/reconciler.d.ts.map +1 -0
  307. package/dist/reconciler.js +1 -0
  308. package/dist/reconciler.js.map +1 -0
  309. package/dist/registry.d.ts +1 -0
  310. package/dist/registry.d.ts.map +1 -0
  311. package/dist/registry.js +1 -0
  312. package/dist/registry.js.map +1 -0
  313. package/dist/render.d.ts +1 -0
  314. package/dist/render.d.ts.map +1 -0
  315. package/dist/render.js +1 -0
  316. package/dist/render.js.map +1 -0
  317. package/dist/types.d.ts +1 -0
  318. package/dist/types.d.ts.map +1 -0
  319. package/dist/types.js +1 -0
  320. package/dist/types.js.map +1 -0
  321. package/package.json +6 -4
  322. package/src/errors.ts +52 -0
  323. package/src/factory.ts +62 -0
  324. package/src/fiber-root.ts +20 -0
  325. package/src/generated/internal.ts +2134 -0
  326. package/src/generated/jsx.ts +20068 -0
  327. package/src/generated/registry.ts +16 -0
  328. package/src/host-config.ts +186 -0
  329. package/src/index.ts +11 -0
  330. package/src/jsx.ts +1294 -0
  331. package/src/metadata.ts +36 -0
  332. package/src/node.ts +109 -0
  333. package/src/nodes/adjustable.ts +68 -0
  334. package/src/nodes/alert-dialog-response.ts +78 -0
  335. package/src/nodes/animation.ts +402 -0
  336. package/src/nodes/application.ts +56 -0
  337. package/src/nodes/calendar.ts +38 -0
  338. package/src/nodes/color-dialog-button.ts +69 -0
  339. package/src/nodes/column-view-column.ts +84 -0
  340. package/src/nodes/column-view.ts +192 -0
  341. package/src/nodes/container-slot.ts +87 -0
  342. package/src/nodes/dialog.ts +25 -0
  343. package/src/nodes/drawing-area.ts +51 -0
  344. package/src/nodes/drop-down.ts +92 -0
  345. package/src/nodes/event-controller.ts +100 -0
  346. package/src/nodes/fixed-child.ts +108 -0
  347. package/src/nodes/font-dialog-button.ts +97 -0
  348. package/src/nodes/grid-child.ts +103 -0
  349. package/src/nodes/grid-view.ts +96 -0
  350. package/src/nodes/internal/base-item-renderer.ts +108 -0
  351. package/src/nodes/internal/grid-item-renderer.ts +71 -0
  352. package/src/nodes/internal/list-item-renderer.ts +155 -0
  353. package/src/nodes/internal/list-store.ts +105 -0
  354. package/src/nodes/internal/predicates.ts +80 -0
  355. package/src/nodes/internal/props.ts +51 -0
  356. package/src/nodes/internal/selection-model-controller.ts +115 -0
  357. package/src/nodes/internal/signal-store.ts +141 -0
  358. package/src/nodes/internal/simple-list-store.ts +99 -0
  359. package/src/nodes/internal/text-buffer-controller.ts +374 -0
  360. package/src/nodes/internal/tree-store.ts +237 -0
  361. package/src/nodes/internal/widget.ts +78 -0
  362. package/src/nodes/level-bar.ts +36 -0
  363. package/src/nodes/list-item.ts +107 -0
  364. package/src/nodes/list-view.ts +97 -0
  365. package/src/nodes/menu.ts +27 -0
  366. package/src/nodes/models/grid.ts +105 -0
  367. package/src/nodes/models/list.ts +140 -0
  368. package/src/nodes/models/menu.ts +310 -0
  369. package/src/nodes/navigation-page.ts +154 -0
  370. package/src/nodes/navigation-view.ts +58 -0
  371. package/src/nodes/notebook-page-tab.ts +55 -0
  372. package/src/nodes/notebook-page.ts +185 -0
  373. package/src/nodes/notebook.ts +28 -0
  374. package/src/nodes/overlay-child.ts +109 -0
  375. package/src/nodes/popover-menu.ts +59 -0
  376. package/src/nodes/scale.ts +28 -0
  377. package/src/nodes/scrolled-window.ts +23 -0
  378. package/src/nodes/search-bar.ts +27 -0
  379. package/src/nodes/shortcut-controller.ts +27 -0
  380. package/src/nodes/shortcut.ts +69 -0
  381. package/src/nodes/slot.ts +138 -0
  382. package/src/nodes/source-view.ts +130 -0
  383. package/src/nodes/stack-page.ts +170 -0
  384. package/src/nodes/stack.ts +35 -0
  385. package/src/nodes/text-anchor.ts +74 -0
  386. package/src/nodes/text-content.ts +14 -0
  387. package/src/nodes/text-paintable.ts +51 -0
  388. package/src/nodes/text-segment.ts +55 -0
  389. package/src/nodes/text-tag.ts +287 -0
  390. package/src/nodes/text-view.ts +93 -0
  391. package/src/nodes/toggle-group.ts +27 -0
  392. package/src/nodes/toggle.ts +72 -0
  393. package/src/nodes/virtual.ts +16 -0
  394. package/src/nodes/web-view.ts +22 -0
  395. package/src/nodes/widget.ts +398 -0
  396. package/src/nodes/window.ts +159 -0
  397. package/src/portal.ts +37 -0
  398. package/src/reconciler.ts +52 -0
  399. package/src/registry.ts +123 -0
  400. package/src/render.tsx +192 -0
  401. package/src/types.ts +7 -0
@@ -0,0 +1,123 @@
1
+ import * as Adw from "@gtkx/ffi/adw";
2
+ import * as Gtk from "@gtkx/ffi/gtk";
3
+ import * as GtkSource from "@gtkx/ffi/gtksource";
4
+ import * as WebKit from "@gtkx/ffi/webkit";
5
+ import type { Node } from "./node.js";
6
+ import { AdjustableNode } from "./nodes/adjustable.js";
7
+
8
+ import { AlertDialogResponseNode } from "./nodes/alert-dialog-response.js";
9
+ import { AnimationNode } from "./nodes/animation.js";
10
+ import { ApplicationNode } from "./nodes/application.js";
11
+ import { CalendarNode } from "./nodes/calendar.js";
12
+ import { ColorDialogButtonNode } from "./nodes/color-dialog-button.js";
13
+ import { ColumnViewNode } from "./nodes/column-view.js";
14
+ import { ColumnViewColumnNode } from "./nodes/column-view-column.js";
15
+ import { ContainerSlotNode } from "./nodes/container-slot.js";
16
+ import { DialogNode } from "./nodes/dialog.js";
17
+ import { DrawingAreaNode } from "./nodes/drawing-area.js";
18
+ import { DropDownNode } from "./nodes/drop-down.js";
19
+ import { EventControllerNode } from "./nodes/event-controller.js";
20
+ import { FixedChildNode } from "./nodes/fixed-child.js";
21
+ import { FontDialogButtonNode } from "./nodes/font-dialog-button.js";
22
+ import { GridChildNode } from "./nodes/grid-child.js";
23
+ import { GridViewNode } from "./nodes/grid-view.js";
24
+ import { LevelBarNode } from "./nodes/level-bar.js";
25
+ import { ListItemNode } from "./nodes/list-item.js";
26
+ import { ListViewNode } from "./nodes/list-view.js";
27
+ import { MenuNode } from "./nodes/menu.js";
28
+ import { NavigationPageNode } from "./nodes/navigation-page.js";
29
+ import { NavigationViewNode } from "./nodes/navigation-view.js";
30
+ import { NotebookNode } from "./nodes/notebook.js";
31
+ import { NotebookPageNode } from "./nodes/notebook-page.js";
32
+ import { NotebookPageTabNode } from "./nodes/notebook-page-tab.js";
33
+ import { OverlayChildNode } from "./nodes/overlay-child.js";
34
+ import { PopoverMenuNode } from "./nodes/popover-menu.js";
35
+ import { ScaleNode } from "./nodes/scale.js";
36
+ import { ScrolledWindowNode } from "./nodes/scrolled-window.js";
37
+ import { SearchBarNode } from "./nodes/search-bar.js";
38
+ import { ShortcutNode } from "./nodes/shortcut.js";
39
+ import { ShortcutControllerNode } from "./nodes/shortcut-controller.js";
40
+ import { SlotNode } from "./nodes/slot.js";
41
+ import { SourceViewNode } from "./nodes/source-view.js";
42
+ import { StackNode } from "./nodes/stack.js";
43
+ import { StackPageNode } from "./nodes/stack-page.js";
44
+ import { TextAnchorNode } from "./nodes/text-anchor.js";
45
+ import { TextPaintableNode } from "./nodes/text-paintable.js";
46
+ import { TextSegmentNode } from "./nodes/text-segment.js";
47
+ import { TextTagNode } from "./nodes/text-tag.js";
48
+ import { TextViewNode } from "./nodes/text-view.js";
49
+ import { ToggleNode } from "./nodes/toggle.js";
50
+ import { ToggleGroupNode } from "./nodes/toggle-group.js";
51
+ import { WebViewNode } from "./nodes/web-view.js";
52
+ import { WidgetNode } from "./nodes/widget.js";
53
+ import { WindowNode } from "./nodes/window.js";
54
+
55
+ export const AdjustableWidgets = [Gtk.SpinButton, Gtk.ScaleButton, Gtk.Range] as const;
56
+ export type AdjustableWidget = InstanceType<(typeof AdjustableWidgets)[number]>;
57
+
58
+ export const StackWidgets = [Gtk.Stack, Adw.ViewStack] as const;
59
+ export type StackWidget = InstanceType<(typeof StackWidgets)[number]>;
60
+
61
+ export const DropDownWidgets = [Gtk.DropDown, Adw.ComboRow] as const;
62
+ export type DropDownWidget = InstanceType<(typeof DropDownWidgets)[number]>;
63
+
64
+ export const PopoverMenuWidgets = [Gtk.PopoverMenu, Gtk.PopoverMenuBar, Gtk.MenuButton] as const;
65
+ export type PopoverMenuWidget = InstanceType<(typeof PopoverMenuWidgets)[number]>;
66
+
67
+ // biome-ignore lint/suspicious/noExplicitAny: Registry entries require flexible typing for varied node constructors
68
+ export type NodeClass = (new (...args: any[]) => Node) & { createContainer(...args: any[]): unknown };
69
+
70
+ // biome-ignore lint/suspicious/noExplicitAny: Class keys require flexible typing for GTK class hierarchy matching
71
+ type ClassKey = new (...args: any[]) => any;
72
+ type RegistryKey = string | ClassKey | readonly (string | ClassKey)[];
73
+ type NodeRegistryEntry = [RegistryKey, NodeClass];
74
+
75
+ export const NODE_REGISTRY: NodeRegistryEntry[] = [
76
+ ["ContainerSlot", ContainerSlotNode],
77
+ ["AlertDialogResponse", AlertDialogResponseNode],
78
+ ["Animation", AnimationNode],
79
+ ["ColumnViewColumn", ColumnViewColumnNode],
80
+ ["FixedChild", FixedChildNode],
81
+ ["GridChild", GridChildNode],
82
+ ["ListItem", ListItemNode],
83
+ [["MenuItem", "MenuSection", "MenuSubmenu"], MenuNode],
84
+ ["NavigationPage", NavigationPageNode],
85
+ ["NotebookPage", NotebookPageNode],
86
+ ["NotebookPageTab", NotebookPageTabNode],
87
+ ["OverlayChild", OverlayChildNode],
88
+ ["Shortcut", ShortcutNode],
89
+ ["Slot", SlotNode],
90
+ ["StackPage", StackPageNode],
91
+ ["TextAnchor", TextAnchorNode],
92
+ ["TextPaintable", TextPaintableNode],
93
+ ["TextSegment", TextSegmentNode],
94
+ ["TextTag", TextTagNode],
95
+ ["Toggle", ToggleNode],
96
+ [Gtk.Application, ApplicationNode],
97
+ [Gtk.ShortcutController, ShortcutControllerNode],
98
+ [Gtk.EventController, EventControllerNode],
99
+ [GtkSource.View, SourceViewNode],
100
+ [Gtk.TextView, TextViewNode],
101
+ [WebKit.WebView, WebViewNode],
102
+ [Adw.Dialog, DialogNode],
103
+ [Gtk.Window, WindowNode],
104
+ [Gtk.Scale, ScaleNode],
105
+ [Gtk.LevelBar, LevelBarNode],
106
+ [Gtk.ScrolledWindow, ScrolledWindowNode],
107
+ [Gtk.Calendar, CalendarNode],
108
+ [Gtk.ColorDialogButton, ColorDialogButtonNode],
109
+ [Gtk.FontDialogButton, FontDialogButtonNode],
110
+ [Gtk.DrawingArea, DrawingAreaNode],
111
+ [Gtk.SearchBar, SearchBarNode],
112
+ [Adw.NavigationView, NavigationViewNode],
113
+ [Adw.ToggleGroup, ToggleGroupNode],
114
+ [Gtk.Notebook, NotebookNode],
115
+ [StackWidgets, StackNode],
116
+ [Gtk.ColumnView, ColumnViewNode],
117
+ [Gtk.ListView, ListViewNode],
118
+ [Gtk.GridView, GridViewNode],
119
+ [DropDownWidgets, DropDownNode],
120
+ [PopoverMenuWidgets, PopoverMenuNode],
121
+ [AdjustableWidgets, AdjustableNode],
122
+ [Gtk.Widget, WidgetNode],
123
+ ];
package/src/render.tsx ADDED
@@ -0,0 +1,192 @@
1
+ import { start, stop } from "@gtkx/ffi";
2
+ import type * as Gio from "@gtkx/ffi/gio";
3
+ import type * as Gtk from "@gtkx/ffi/gtk";
4
+ import { createContext, type ReactNode, useContext } from "react";
5
+ import { formatBoundaryError, formatRenderError } from "./errors.js";
6
+ import { getSignalStore } from "./nodes/internal/signal-store.js";
7
+ import { reconciler } from "./reconciler.js";
8
+
9
+ /**
10
+ * React Context providing access to the GTK Application instance.
11
+ *
12
+ * Use {@link useApplication} to access the application in components.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const App = () => {
17
+ * const app = useApplication();
18
+ * console.log(app.applicationId);
19
+ * return <GtkLabel label="Hello" />;
20
+ * };
21
+ * ```
22
+ */
23
+ export const ApplicationContext = createContext<Gtk.Application | null>(null);
24
+
25
+ /**
26
+ * Hook to access the GTK Application instance.
27
+ *
28
+ * Must be called within a component rendered by {@link render}.
29
+ * Throws an error if called outside the application context.
30
+ *
31
+ * @returns The GTK Application instance
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * const MyComponent = () => {
36
+ * const app = useApplication();
37
+ * return <GtkLabel label={app.applicationId} />;
38
+ * };
39
+ * ```
40
+ *
41
+ * @see {@link ApplicationContext} for the underlying context
42
+ */
43
+ export const useApplication = (): Gtk.Application => {
44
+ const context = useContext(ApplicationContext);
45
+
46
+ if (!context) {
47
+ throw new Error("Expected ApplicationContext: useApplication must be called within Application");
48
+ }
49
+
50
+ return context;
51
+ };
52
+
53
+ let container: unknown = null;
54
+ let app: Gtk.Application | null = null;
55
+ let isHotReloading = false;
56
+
57
+ /**
58
+ * Sets the hot reloading state.
59
+ *
60
+ * Used internally by the dev server to prevent quit() from closing
61
+ * the application during HMR updates.
62
+ *
63
+ * @internal
64
+ */
65
+ export const setHotReloading = (value: boolean): void => {
66
+ isHotReloading = value;
67
+ };
68
+
69
+ /**
70
+ * Renders a React element tree into a GTK4 application window.
71
+ *
72
+ * This is the main entry point for GTKX applications. It initializes the GTK4
73
+ * runtime, creates an application container, and begins the React reconciliation
74
+ * process.
75
+ *
76
+ * @param element - The root React element to render
77
+ * @param appId - Application ID in reverse domain notation (e.g., "com.example.myapp")
78
+ * @param flags - Optional GIO application flags for customizing behavior
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * import { render, quit } from "@gtkx/react";
83
+ *
84
+ * const App = () => (
85
+ * <GtkApplicationWindow title="My App" onClose={quit}>
86
+ * <GtkLabel label="Hello, GTKX!" />
87
+ * </GtkApplicationWindow>
88
+ * );
89
+ *
90
+ * render(<App />, "com.example.myapp");
91
+ * ```
92
+ *
93
+ * @see {@link quit} for shutting down the application
94
+ * @see {@link update} for hot-reloading the rendered tree
95
+ */
96
+ export const render = (element: ReactNode, appId: string, flags?: Gio.ApplicationFlags): void => {
97
+ const application = start(appId, flags);
98
+ app = application;
99
+ const instance = reconciler.getInstance();
100
+
101
+ container = instance.createContainer(
102
+ application,
103
+ 1,
104
+ null,
105
+ false,
106
+ null,
107
+ "",
108
+ (error: unknown) => {
109
+ getSignalStore(application).forceUnblockAll();
110
+ throw formatRenderError(error);
111
+ },
112
+ (error: unknown) => {
113
+ getSignalStore(application).forceUnblockAll();
114
+ const formattedError = formatBoundaryError(error);
115
+ console.error(formattedError.toString());
116
+ },
117
+ () => {},
118
+ () => {},
119
+ );
120
+
121
+ instance.updateContainer(
122
+ <ApplicationContext.Provider value={application}>{element}</ApplicationContext.Provider>,
123
+ container,
124
+ null,
125
+ () => {},
126
+ );
127
+ };
128
+
129
+ /**
130
+ * Updates the rendered React element tree.
131
+ *
132
+ * Used primarily for hot module replacement (HMR) during development.
133
+ * Replaces the current component tree with a new element without
134
+ * reinitializing the GTK application.
135
+ *
136
+ * @param element - The new root React element to render
137
+ *
138
+ * @example
139
+ * ```tsx
140
+ * // In HMR handler
141
+ * if (import.meta.hot) {
142
+ * import.meta.hot.accept(() => {
143
+ * update(<App />);
144
+ * });
145
+ * }
146
+ * ```
147
+ *
148
+ * @see {@link render} for initial rendering
149
+ */
150
+ export const update = (element: ReactNode): Promise<void> => {
151
+ return new Promise((resolve) => {
152
+ reconciler
153
+ .getInstance()
154
+ .updateContainer(
155
+ <ApplicationContext.Provider value={app}>{element}</ApplicationContext.Provider>,
156
+ container,
157
+ null,
158
+ resolve,
159
+ );
160
+ });
161
+ };
162
+
163
+ /**
164
+ * Gracefully shuts down the GTK application.
165
+ *
166
+ * Unmounts the React component tree and stops the GTK main loop.
167
+ * Typically used as the `onClose` handler for the application window.
168
+ *
169
+ * @example
170
+ * ```tsx
171
+ * import { quit } from "@gtkx/react";
172
+ *
173
+ * const App = () => (
174
+ * <GtkApplicationWindow title="My App" onClose={quit}>
175
+ * <GtkButton label="Quit" onClicked={quit} />
176
+ * </GtkApplicationWindow>
177
+ * );
178
+ * ```
179
+ *
180
+ * @see {@link render} for starting the application
181
+ */
182
+ export const quit = (): void => {
183
+ if (isHotReloading) {
184
+ return;
185
+ }
186
+
187
+ reconciler.getInstance().updateContainer(null, container, null, () => {
188
+ setTimeout(() => {
189
+ stop();
190
+ }, 0);
191
+ });
192
+ };
package/src/types.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type * as Gtk from "@gtkx/ffi/gtk";
2
+
3
+ export type Container = Gtk.Widget | Gtk.Application | Gtk.EventController;
4
+
5
+ export type Props = Record<string, unknown>;
6
+
7
+ export type ContainerClass = typeof Gtk.Widget | typeof Gtk.Application | typeof Gtk.EventController;