@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
@@ -0,0 +1,276 @@
1
+ import * as Gdk from "@gtkx/gi/gdk";
2
+ import * as Gtk from "@gtkx/gi/gtk";
3
+ import { drain, indexBeforeOrEnd } from "@gtkx/utils";
4
+ import { ELEMENT_KIND, TEXT_KIND } from "./node.js";
5
+ const dirtyHosts = new Set();
6
+ const tagTables = new WeakMap();
7
+ const TEXT_CONTENT_KINDS = new Set(["label", "buffer", "tag"]);
8
+ const PAINTABLE_PROP = "paintable";
9
+ const TEXT_PROP = "text";
10
+ const CONTENT_MIX_RULES = [
11
+ {
12
+ kind: "label",
13
+ prop: "label",
14
+ message: "<GtkLabel> cannot mix a `label` prop with text children; use one or the other",
15
+ },
16
+ {
17
+ kind: "buffer",
18
+ prop: "text",
19
+ message: "<GtkTextBuffer> cannot mix a `text` prop with content children; use one or the other",
20
+ },
21
+ {
22
+ kind: "anchor",
23
+ prop: PAINTABLE_PROP,
24
+ message: "<GtkTextChildAnchor> cannot mix a `paintable` prop with a child widget; use one or the other",
25
+ },
26
+ ];
27
+ const charLength = (text) => text[Symbol.iterator]().toArray().length;
28
+ const bufferText = (buffer) => buffer.getText(buffer.getStartIter(), buffer.getEndIter(), false);
29
+ const currentText = (object) => {
30
+ if (object instanceof Gtk.TextBuffer) {
31
+ return bufferText(object);
32
+ }
33
+ if (object instanceof Gtk.Editable || object instanceof Gtk.EntryBuffer) {
34
+ return object.getText();
35
+ }
36
+ return null;
37
+ };
38
+ const hasSameText = (object, prop, value) => prop === TEXT_PROP && typeof value === "string" && currentText(object) === value;
39
+ const contentTextLength = (node) => {
40
+ if (node.kind === TEXT_KIND) {
41
+ return charLength(node.text);
42
+ }
43
+ if (node.contentKind === "tag") {
44
+ return node.content.reduce((sum, child) => sum + contentTextLength(child), 0);
45
+ }
46
+ return node.contentKind === "anchor" ? 1 : 0;
47
+ };
48
+ const isTagElement = (node) => node.kind === ELEMENT_KIND && node.contentKind === "tag";
49
+ const stepOffset = (node, target, offset) => {
50
+ if (node === target) {
51
+ return { found: true, offset };
52
+ }
53
+ if (isTagElement(node)) {
54
+ return getOffset(node.content, target, offset);
55
+ }
56
+ return { found: false, offset: offset + contentTextLength(node) };
57
+ };
58
+ const getOffset = (nodes, target, start) => {
59
+ let offset = start;
60
+ for (const node of nodes) {
61
+ const step = stepOffset(node, target, offset);
62
+ if (step.found) {
63
+ return step;
64
+ }
65
+ offset = step.offset;
66
+ }
67
+ return { found: false, offset };
68
+ };
69
+ const enclosingTagNodes = (node) => {
70
+ const nodes = [];
71
+ let current = node.parent;
72
+ while (current !== null && current.kind === ELEMENT_KIND) {
73
+ if (current.contentKind === "tag") {
74
+ nodes.push(current);
75
+ }
76
+ current = current.parent;
77
+ }
78
+ return nodes;
79
+ };
80
+ const textRestrictionError = (text) => new Error("Text strings must be rendered within a <GtkLabel> or <GtkTextBuffer> element; " +
81
+ `received ${JSON.stringify(text)}`);
82
+ const canAcceptText = (host) => host.contentKind !== null && TEXT_CONTENT_KINDS.has(host.contentKind);
83
+ const isRootHost = (node) => node.contentKind === "label" || node.contentKind === "buffer";
84
+ const mapElementParent = (parent, map) => parent !== null && parent.kind === ELEMENT_KIND ? map(parent) : null;
85
+ const parentElement = (node) => mapElementParent(node.parent, (parent) => parent);
86
+ const getRootHost = (node) => {
87
+ let current = node;
88
+ while (current !== null) {
89
+ if (isRootHost(current)) {
90
+ return current;
91
+ }
92
+ current = parentElement(current);
93
+ }
94
+ return null;
95
+ };
96
+ const markTextDirty = (host) => {
97
+ const root = getRootHost(host);
98
+ if (root !== null) {
99
+ dirtyHosts.add(root);
100
+ }
101
+ };
102
+ const enclosingHost = (node) => mapElementParent(node.parent, getRootHost);
103
+ const addContent = (host, child, before) => {
104
+ const content = host.content;
105
+ const existing = content.indexOf(child);
106
+ if (existing !== -1) {
107
+ content.splice(existing, 1);
108
+ }
109
+ content.splice(indexBeforeOrEnd(content, before, (item, target) => item === target), 0, child);
110
+ child.parent = host;
111
+ markTextDirty(host);
112
+ };
113
+ const removeContent = (host, child) => {
114
+ const index = host.content.indexOf(child);
115
+ if (index !== -1) {
116
+ host.content.splice(index, 1);
117
+ }
118
+ markTextDirty(host);
119
+ };
120
+ const validateContentMix = (node, props) => {
121
+ if (node.content.length === 0) {
122
+ return;
123
+ }
124
+ const violated = CONTENT_MIX_RULES.find((rule) => rule.kind === node.contentKind && props[rule.prop] !== undefined);
125
+ if (violated !== undefined) {
126
+ throw new Error(violated.message);
127
+ }
128
+ };
129
+ const detachTag = (tag, table, name) => {
130
+ const previous = tagTables.get(tag);
131
+ if (previous !== undefined && previous !== table) {
132
+ previous.remove(tag);
133
+ }
134
+ if (name === null) {
135
+ return;
136
+ }
137
+ const existing = table.lookup(name);
138
+ if (existing !== null && existing !== tag) {
139
+ table.remove(existing);
140
+ }
141
+ };
142
+ const ensureTag = (table, node) => {
143
+ const tag = node.object;
144
+ if (!(tag instanceof Gtk.TextTag) || tagTables.get(tag) === table) {
145
+ return;
146
+ }
147
+ const name = typeof node.props.name === "string" ? node.props.name : null;
148
+ detachTag(tag, table, name);
149
+ if (name === null || table.lookup(name) !== tag) {
150
+ table.add(tag);
151
+ }
152
+ tagTables.set(tag, table);
153
+ };
154
+ const insertTag = (build, node) => {
155
+ const start = build.buffer.getCharCount();
156
+ insertContent(build, node.content);
157
+ const tag = node.object;
158
+ if (tag instanceof Gtk.TextTag) {
159
+ ensureTag(build.buffer.getTagTable(), node);
160
+ build.buffer.applyTag(tag, build.buffer.getIterAtOffset(start), build.buffer.getEndIter());
161
+ }
162
+ };
163
+ const contentPaintable = (node) => {
164
+ const value = node.props[PAINTABLE_PROP];
165
+ return value instanceof Gdk.Paintable ? value : null;
166
+ };
167
+ const isContentPaintableProp = (node, name) => name === PAINTABLE_PROP && node.contentKind === "anchor";
168
+ const insertAnchor = (build, node) => {
169
+ const paintable = contentPaintable(node);
170
+ if (paintable !== null) {
171
+ build.buffer.insertPaintable(build.buffer.getEndIter(), paintable);
172
+ return;
173
+ }
174
+ const anchor = node.object;
175
+ if (!(anchor instanceof Gtk.TextChildAnchor)) {
176
+ return;
177
+ }
178
+ build.buffer.insertChildAnchor(build.buffer.getEndIter(), anchor);
179
+ const child = node.content[0];
180
+ if (build.view !== null && child?.kind === ELEMENT_KIND && child.object instanceof Gtk.Widget) {
181
+ build.view.addChildAtAnchor(child.object, anchor);
182
+ }
183
+ };
184
+ const insertElement = (build, node) => {
185
+ if (node.contentKind === "tag") {
186
+ insertTag(build, node);
187
+ }
188
+ else if (node.contentKind === "anchor") {
189
+ insertAnchor(build, node);
190
+ }
191
+ else {
192
+ build.marks.push({ node, offset: build.buffer.getCharCount() });
193
+ }
194
+ };
195
+ const insertContent = (build, nodes) => {
196
+ for (const child of nodes) {
197
+ if (child.kind === TEXT_KIND) {
198
+ build.buffer.insert(build.buffer.getEndIter(), child.text, -1);
199
+ }
200
+ else {
201
+ insertElement(build, child);
202
+ }
203
+ }
204
+ };
205
+ const placeMark = (buffer, node, offset) => {
206
+ const mark = node.object;
207
+ if (!(mark instanceof Gtk.TextMark)) {
208
+ return;
209
+ }
210
+ const iter = buffer.getIterAtOffset(offset);
211
+ if (mark.getBuffer() === null) {
212
+ buffer.addMark(mark, iter);
213
+ }
214
+ else {
215
+ buffer.moveMark(mark, iter);
216
+ }
217
+ };
218
+ const rebuildBuffer = (node) => {
219
+ const buffer = node.object;
220
+ if (node.props.text !== undefined || !(buffer instanceof Gtk.TextBuffer)) {
221
+ return;
222
+ }
223
+ buffer.setText("", -1);
224
+ const build = { buffer, view: node.bufferView, marks: [] };
225
+ insertContent(build, node.content);
226
+ for (const mark of build.marks) {
227
+ placeMark(buffer, mark.node, mark.offset);
228
+ }
229
+ };
230
+ const rebuildLabel = (node) => {
231
+ if (node.props.label !== undefined) {
232
+ return;
233
+ }
234
+ const label = node.object;
235
+ if (!(label instanceof Gtk.Label)) {
236
+ return;
237
+ }
238
+ label.setLabel(node.content.map((child) => (child.kind === TEXT_KIND ? child.text : "")).join(""));
239
+ };
240
+ const flushTextHosts = () => {
241
+ drain(dirtyHosts, (host) => {
242
+ if (host.contentKind === "label") {
243
+ rebuildLabel(host);
244
+ }
245
+ else if (host.contentKind === "buffer") {
246
+ rebuildBuffer(host);
247
+ }
248
+ });
249
+ };
250
+ const applyEnclosingTags = (buffer, node, startIter, endIter) => {
251
+ for (const tagNode of enclosingTagNodes(node)) {
252
+ ensureTag(buffer.getTagTable(), tagNode);
253
+ if (tagNode.object instanceof Gtk.TextTag) {
254
+ buffer.applyTag(tagNode.object, startIter, endIter);
255
+ }
256
+ }
257
+ };
258
+ const didUpdateTextSurgically = (host, node, oldText, newText) => {
259
+ const buffer = host.object;
260
+ if (host.contentKind !== "buffer" || !(buffer instanceof Gtk.TextBuffer)) {
261
+ return false;
262
+ }
263
+ const located = getOffset(host.content, node, 0);
264
+ if (!located.found) {
265
+ return false;
266
+ }
267
+ const start = located.offset;
268
+ buffer.delete(buffer.getIterAtOffset(start), buffer.getIterAtOffset(start + charLength(oldText)));
269
+ buffer.insert(buffer.getIterAtOffset(start), newText, -1);
270
+ const startIter = buffer.getIterAtOffset(start);
271
+ const endIter = buffer.getIterAtOffset(start + charLength(newText));
272
+ applyEnclosingTags(buffer, node, startIter, endIter);
273
+ return true;
274
+ };
275
+ export { TEXT_PROP, textRestrictionError, bufferText, hasSameText, canAcceptText, isContentPaintableProp, markTextDirty, enclosingHost, addContent, removeContent, validateContentMix, flushTextHosts, didUpdateTextSurgically, };
276
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/reconciler/text.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { drain, indexBeforeOrEnd } from \"@gtkx/utils\";\nimport type { ContentChild, ContentKind, ElementNode, ParentNode, TextNode } from \"./node.js\";\nimport type { Props } from \"./registry.js\";\nimport { ELEMENT_KIND, TEXT_KIND } from \"./node.js\";\n\ntype OffsetResult = { found: boolean; offset: number };\n\ntype BufferBuild = {\n buffer: Gtk.TextBuffer;\n view: Gtk.TextView | null;\n marks: { node: ElementNode; offset: number }[];\n};\n\nconst dirtyHosts: Set<ElementNode> = new Set();\nconst tagTables: WeakMap<object, Gtk.TextTagTable> = new WeakMap();\nconst TEXT_CONTENT_KINDS: Set<string> = new Set([\"label\", \"buffer\", \"tag\"]);\nconst PAINTABLE_PROP = \"paintable\";\nconst TEXT_PROP = \"text\";\n\nconst CONTENT_MIX_RULES: { kind: ContentKind; prop: string; message: string }[] = [\n {\n kind: \"label\",\n prop: \"label\",\n message: \"<GtkLabel> cannot mix a `label` prop with text children; use one or the other\",\n },\n {\n kind: \"buffer\",\n prop: \"text\",\n message: \"<GtkTextBuffer> cannot mix a `text` prop with content children; use one or the other\",\n },\n {\n kind: \"anchor\",\n prop: PAINTABLE_PROP,\n message: \"<GtkTextChildAnchor> cannot mix a `paintable` prop with a child widget; use one or the other\",\n },\n];\n\nconst charLength = (text: string): number => text[Symbol.iterator]().toArray().length;\n\nconst bufferText = (buffer: Gtk.TextBuffer): string =>\n buffer.getText(buffer.getStartIter(), buffer.getEndIter(), false);\n\nconst currentText = (object: GObject.Object): string | null => {\n if (object instanceof Gtk.TextBuffer) {\n return bufferText(object);\n }\n\n if (object instanceof Gtk.Editable || object instanceof Gtk.EntryBuffer) {\n return object.getText();\n }\n\n return null;\n};\n\nconst hasSameText = (object: GObject.Object, prop: string, value: unknown): boolean =>\n prop === TEXT_PROP && typeof value === \"string\" && currentText(object) === value;\n\nconst contentTextLength = (node: ContentChild): number => {\n if (node.kind === TEXT_KIND) {\n return charLength(node.text);\n }\n\n if (node.contentKind === \"tag\") {\n return node.content.reduce((sum, child) => sum + contentTextLength(child), 0);\n }\n\n return node.contentKind === \"anchor\" ? 1 : 0;\n};\n\nconst isTagElement = (node: ContentChild): node is ElementNode =>\n node.kind === ELEMENT_KIND && node.contentKind === \"tag\";\n\nconst stepOffset = (node: ContentChild, target: TextNode, offset: number): OffsetResult => {\n if (node === target) {\n return { found: true, offset };\n }\n\n if (isTagElement(node)) {\n return getOffset(node.content, target, offset);\n }\n\n return { found: false, offset: offset + contentTextLength(node) };\n};\n\nconst getOffset = (nodes: ContentChild[], target: TextNode, start: number): OffsetResult => {\n let offset = start;\n\n for (const node of nodes) {\n const step = stepOffset(node, target, offset);\n\n if (step.found) {\n return step;\n }\n\n offset = step.offset;\n }\n\n return { found: false, offset };\n};\n\nconst enclosingTagNodes = (node: TextNode): ElementNode[] => {\n const nodes: ElementNode[] = [];\n let current: ParentNode | null = node.parent;\n\n while (current !== null && current.kind === ELEMENT_KIND) {\n if (current.contentKind === \"tag\") {\n nodes.push(current);\n }\n\n current = current.parent;\n }\n\n return nodes;\n};\n\nconst textRestrictionError = (text: string): Error =>\n new Error(\n \"Text strings must be rendered within a <GtkLabel> or <GtkTextBuffer> element; \" +\n `received ${JSON.stringify(text)}`,\n );\n\nconst canAcceptText = (host: ElementNode): boolean =>\n host.contentKind !== null && TEXT_CONTENT_KINDS.has(host.contentKind);\n\nconst isRootHost = (node: ElementNode): boolean => node.contentKind === \"label\" || node.contentKind === \"buffer\";\n\nconst mapElementParent = <T>(parent: ParentNode | null, map: (element: ElementNode) => T): T | null =>\n parent !== null && parent.kind === ELEMENT_KIND ? map(parent) : null;\n\nconst parentElement = (node: ElementNode): ElementNode | null => mapElementParent(node.parent, (parent) => parent);\n\nconst getRootHost = (node: ElementNode): ElementNode | null => {\n let current: ElementNode | null = node;\n\n while (current !== null) {\n if (isRootHost(current)) {\n return current;\n }\n\n current = parentElement(current);\n }\n\n return null;\n};\n\nconst markTextDirty = (host: ElementNode): void => {\n const root = getRootHost(host);\n\n if (root !== null) {\n dirtyHosts.add(root);\n }\n};\n\nconst enclosingHost = (node: TextNode): ElementNode | null => mapElementParent(node.parent, getRootHost);\n\nconst addContent = (host: ElementNode, child: ContentChild, before: ContentChild | null): void => {\n const content = host.content;\n const existing = content.indexOf(child);\n\n if (existing !== -1) {\n content.splice(existing, 1);\n }\n\n content.splice(\n indexBeforeOrEnd(content, before, (item, target) => item === target),\n 0,\n child,\n );\n\n child.parent = host;\n markTextDirty(host);\n};\n\nconst removeContent = (host: ElementNode, child: ContentChild): void => {\n const index = host.content.indexOf(child);\n\n if (index !== -1) {\n host.content.splice(index, 1);\n }\n\n markTextDirty(host);\n};\n\nconst validateContentMix = (node: ElementNode, props: Props): void => {\n if (node.content.length === 0) {\n return;\n }\n\n const violated = CONTENT_MIX_RULES.find(\n (rule) => rule.kind === node.contentKind && props[rule.prop] !== undefined,\n );\n\n if (violated !== undefined) {\n throw new Error(violated.message);\n }\n};\n\nconst detachTag = (tag: Gtk.TextTag, table: Gtk.TextTagTable, name: string | null): void => {\n const previous = tagTables.get(tag);\n\n if (previous !== undefined && previous !== table) {\n previous.remove(tag);\n }\n\n if (name === null) {\n return;\n }\n\n const existing = table.lookup(name);\n\n if (existing !== null && existing !== tag) {\n table.remove(existing);\n }\n};\n\nconst ensureTag = (table: Gtk.TextTagTable, node: ElementNode): void => {\n const tag = node.object;\n\n if (!(tag instanceof Gtk.TextTag) || tagTables.get(tag) === table) {\n return;\n }\n\n const name = typeof node.props.name === \"string\" ? node.props.name : null;\n detachTag(tag, table, name);\n\n if (name === null || table.lookup(name) !== tag) {\n table.add(tag);\n }\n\n tagTables.set(tag, table);\n};\n\nconst insertTag = (build: BufferBuild, node: ElementNode): void => {\n const start = build.buffer.getCharCount();\n insertContent(build, node.content);\n const tag = node.object;\n\n if (tag instanceof Gtk.TextTag) {\n ensureTag(build.buffer.getTagTable(), node);\n build.buffer.applyTag(tag, build.buffer.getIterAtOffset(start), build.buffer.getEndIter());\n }\n};\n\nconst contentPaintable = (node: ElementNode): Gdk.Paintable | null => {\n const value = node.props[PAINTABLE_PROP];\n\n return value instanceof Gdk.Paintable ? value : null;\n};\n\nconst isContentPaintableProp = (node: ElementNode, name: string): boolean =>\n name === PAINTABLE_PROP && node.contentKind === \"anchor\";\n\nconst insertAnchor = (build: BufferBuild, node: ElementNode): void => {\n const paintable = contentPaintable(node);\n\n if (paintable !== null) {\n build.buffer.insertPaintable(build.buffer.getEndIter(), paintable);\n\n return;\n }\n\n const anchor = node.object;\n\n if (!(anchor instanceof Gtk.TextChildAnchor)) {\n return;\n }\n\n build.buffer.insertChildAnchor(build.buffer.getEndIter(), anchor);\n const child = node.content[0];\n\n if (build.view !== null && child?.kind === ELEMENT_KIND && child.object instanceof Gtk.Widget) {\n build.view.addChildAtAnchor(child.object, anchor);\n }\n};\n\nconst insertElement = (build: BufferBuild, node: ElementNode): void => {\n if (node.contentKind === \"tag\") {\n insertTag(build, node);\n } else if (node.contentKind === \"anchor\") {\n insertAnchor(build, node);\n } else {\n build.marks.push({ node, offset: build.buffer.getCharCount() });\n }\n};\n\nconst insertContent = (build: BufferBuild, nodes: ContentChild[]): void => {\n for (const child of nodes) {\n if (child.kind === TEXT_KIND) {\n build.buffer.insert(build.buffer.getEndIter(), child.text, -1);\n } else {\n insertElement(build, child);\n }\n }\n};\n\nconst placeMark = (buffer: Gtk.TextBuffer, node: ElementNode, offset: number): void => {\n const mark = node.object;\n\n if (!(mark instanceof Gtk.TextMark)) {\n return;\n }\n\n const iter = buffer.getIterAtOffset(offset);\n\n if (mark.getBuffer() === null) {\n buffer.addMark(mark, iter);\n } else {\n buffer.moveMark(mark, iter);\n }\n};\n\nconst rebuildBuffer = (node: ElementNode): void => {\n const buffer = node.object;\n\n if (node.props.text !== undefined || !(buffer instanceof Gtk.TextBuffer)) {\n return;\n }\n\n buffer.setText(\"\", -1);\n const build: BufferBuild = { buffer, view: node.bufferView, marks: [] };\n insertContent(build, node.content);\n\n for (const mark of build.marks) {\n placeMark(buffer, mark.node, mark.offset);\n }\n};\n\nconst rebuildLabel = (node: ElementNode): void => {\n if (node.props.label !== undefined) {\n return;\n }\n\n const label = node.object;\n\n if (!(label instanceof Gtk.Label)) {\n return;\n }\n\n label.setLabel(node.content.map((child) => (child.kind === TEXT_KIND ? child.text : \"\")).join(\"\"));\n};\n\nconst flushTextHosts = (): void => {\n drain(dirtyHosts, (host) => {\n if (host.contentKind === \"label\") {\n rebuildLabel(host);\n } else if (host.contentKind === \"buffer\") {\n rebuildBuffer(host);\n }\n });\n};\n\nconst applyEnclosingTags = (\n buffer: Gtk.TextBuffer,\n node: TextNode,\n startIter: Gtk.TextIter,\n endIter: Gtk.TextIter,\n): void => {\n for (const tagNode of enclosingTagNodes(node)) {\n ensureTag(buffer.getTagTable(), tagNode);\n\n if (tagNode.object instanceof Gtk.TextTag) {\n buffer.applyTag(tagNode.object, startIter, endIter);\n }\n }\n};\n\nconst didUpdateTextSurgically = (host: ElementNode, node: TextNode, oldText: string, newText: string): boolean => {\n const buffer = host.object;\n\n if (host.contentKind !== \"buffer\" || !(buffer instanceof Gtk.TextBuffer)) {\n return false;\n }\n\n const located = getOffset(host.content, node, 0);\n\n if (!located.found) {\n return false;\n }\n\n const start = located.offset;\n buffer.delete(buffer.getIterAtOffset(start), buffer.getIterAtOffset(start + charLength(oldText)));\n buffer.insert(buffer.getIterAtOffset(start), newText, -1);\n const startIter = buffer.getIterAtOffset(start);\n const endIter = buffer.getIterAtOffset(start + charLength(newText));\n applyEnclosingTags(buffer, node, startIter, endIter);\n\n return true;\n};\n\nexport {\n TEXT_PROP,\n textRestrictionError,\n bufferText,\n hasSameText,\n canAcceptText,\n isContentPaintableProp,\n markTextDirty,\n enclosingHost,\n addContent,\n removeContent,\n validateContentMix,\n flushTextHosts,\n didUpdateTextSurgically,\n};\n"]}
@@ -1,5 +1,12 @@
1
- import type * as Gtk from "@gtkx/gi/gtk";
2
- export declare const setAccessibleMetadata: (accessible: Gtk.Accessible, propName: string, value: unknown) => void;
3
- export declare const deleteAccessibleMetadata: (accessible: Gtk.Accessible, propName: string) => void;
4
- export declare const getAccessibleMetadata: <T = unknown>(accessible: Gtk.Accessible, propName: string) => T | null;
1
+ declare const setAccessibleMetadata: (widget: object, name: string, value: unknown) => void;
2
+ declare const deleteAccessibleMetadata: (widget: object, name: string) => void;
3
+ /**
4
+ * Returns the last value applied for an accessible prop on a widget, or null when none was applied.
5
+ *
6
+ * @param widget The widget to read from.
7
+ * @param name The accessible prop name.
8
+ * @returns The last applied value, or null.
9
+ */
10
+ declare const getAccessibleMetadata: (widget: object, name: string) => unknown;
11
+ export { setAccessibleMetadata, deleteAccessibleMetadata, getAccessibleMetadata };
5
12
  //# sourceMappingURL=accessible-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAMzC,eAAO,MAAM,qBAAqB,eAAgB,GAAG,CAAC,UAAU,YAAY,MAAM,SAAS,OAAO,KAAG,IAOpG,CAAC;AAEF,eAAO,MAAM,wBAAwB,eAAgB,GAAG,CAAC,UAAU,YAAY,MAAM,KAAG,IAGvF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,OAAO,cAAc,GAAG,CAAC,UAAU,YAAY,MAAM,KAAG,CAAC,GAAG,IAKrG,CAAC"}
1
+ {"version":3,"file":"accessible-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,IAS7E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,IAEhE,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,OAI7D,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,22 +1,25 @@
1
- const accessibleMetadata = new WeakMap();
2
- export const setAccessibleMetadata = (accessible, propName, value) => {
3
- let entry = accessibleMetadata.get(accessible);
4
- if (!entry) {
5
- entry = new Map();
6
- accessibleMetadata.set(accessible, entry);
1
+ const metadataStore = new WeakMap();
2
+ const setAccessibleMetadata = (widget, name, value) => {
3
+ let entries = metadataStore.get(widget);
4
+ if (entries === undefined) {
5
+ entries = new Map();
6
+ metadataStore.set(widget, entries);
7
7
  }
8
- entry.set(propName, value);
8
+ entries.set(name, value);
9
9
  };
10
- export const deleteAccessibleMetadata = (accessible, propName) => {
11
- const entry = accessibleMetadata.get(accessible);
12
- if (entry)
13
- entry.delete(propName);
10
+ const deleteAccessibleMetadata = (widget, name) => {
11
+ metadataStore.get(widget)?.delete(name);
14
12
  };
15
- export const getAccessibleMetadata = (accessible, propName) => {
16
- const entry = accessibleMetadata.get(accessible);
17
- if (!entry)
18
- return null;
19
- const value = entry.get(propName);
20
- return value ?? null;
13
+ /**
14
+ * Returns the last value applied for an accessible prop on a widget, or null when none was applied.
15
+ *
16
+ * @param widget The widget to read from.
17
+ * @param name The accessible prop name.
18
+ * @returns The last applied value, or null.
19
+ */
20
+ const getAccessibleMetadata = (widget, name) => {
21
+ const value = metadataStore.get(widget)?.get(name);
22
+ return value === undefined ? null : value;
21
23
  };
24
+ export { setAccessibleMetadata, deleteAccessibleMetadata, getAccessibleMetadata };
22
25
  //# sourceMappingURL=accessible-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessible-metadata.js","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAIA,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAsC,CAAC;AAE7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAA0B,EAAE,QAAgB,EAAE,KAAc,EAAQ,EAAE;IACxG,IAAI,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAA0B,EAAE,QAAgB,EAAQ,EAAE;IAC3F,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,KAAK;QAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAc,UAA0B,EAAE,QAAgB,EAAY,EAAE;IACzG,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAQ,KAAW,IAAI,IAAI,CAAC;AAChC,CAAC,CAAC","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\n\ntype AccessibleMetadata = Map<string, unknown>;\n\nconst accessibleMetadata = new WeakMap<Gtk.Accessible, AccessibleMetadata>();\n\nexport const setAccessibleMetadata = (accessible: Gtk.Accessible, propName: string, value: unknown): void => {\n let entry = accessibleMetadata.get(accessible);\n if (!entry) {\n entry = new Map();\n accessibleMetadata.set(accessible, entry);\n }\n entry.set(propName, value);\n};\n\nexport const deleteAccessibleMetadata = (accessible: Gtk.Accessible, propName: string): void => {\n const entry = accessibleMetadata.get(accessible);\n if (entry) entry.delete(propName);\n};\n\nexport const getAccessibleMetadata = <T = unknown>(accessible: Gtk.Accessible, propName: string): T | null => {\n const entry = accessibleMetadata.get(accessible);\n if (!entry) return null;\n const value = entry.get(propName);\n return (value as T) ?? null;\n};\n"]}
1
+ {"version":3,"file":"accessible-metadata.js","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAA0C,IAAI,OAAO,EAAE,CAAC;AAE3E,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IACjF,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAQ,EAAE;IACpE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAW,EAAE;IACpE,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["const metadataStore: WeakMap<object, Map<string, unknown>> = new WeakMap();\n\nconst setAccessibleMetadata = (widget: object, name: string, value: unknown): void => {\n let entries = metadataStore.get(widget);\n\n if (entries === undefined) {\n entries = new Map();\n metadataStore.set(widget, entries);\n }\n\n entries.set(name, value);\n};\n\nconst deleteAccessibleMetadata = (widget: object, name: string): void => {\n metadataStore.get(widget)?.delete(name);\n};\n\n/**\n * Returns the last value applied for an accessible prop on a widget, or null when none was applied.\n *\n * @param widget The widget to read from.\n * @param name The accessible prop name.\n * @returns The last applied value, or null.\n */\nconst getAccessibleMetadata = (widget: object, name: string): unknown => {\n const value = metadataStore.get(widget)?.get(name);\n\n return value === undefined ? null : value;\n};\n\nexport { setAccessibleMetadata, deleteAccessibleMetadata, getAccessibleMetadata };\n"]}
@@ -1,11 +1,11 @@
1
1
  import * as Gtk from "@gtkx/gi/gtk";
2
- import type { Props } from "./types.js";
2
+ import type { Props } from "../reconciler/registry.js";
3
3
  /**
4
4
  * Accessibility props available on every widget. Each member maps to a GTK4 accessible attribute
5
5
  * (a `Gtk.AccessibleProperty`, `Gtk.AccessibleState`, or `Gtk.AccessibleRelation`) and is applied
6
6
  * to the widget's accessible interface; setting a member to `undefined` resets that attribute to its default.
7
7
  */
8
- export interface AccessibleProps {
8
+ type AccessibleProps = {
9
9
  accessibleAutocomplete?: Gtk.AccessibleAutocomplete | null | undefined;
10
10
  accessibleDescription?: string | null | undefined;
11
11
  accessibleHasPopup?: boolean | null | undefined;
@@ -53,7 +53,8 @@ export interface AccessibleProps {
53
53
  accessibleRowIndexText?: string | null | undefined;
54
54
  accessibleRowSpan?: number | null | undefined;
55
55
  accessibleSetSize?: number | null | undefined;
56
- }
57
- export declare const isAccessibleProp: (name: string) => boolean;
58
- export declare const applyAccessibleProps: (widget: Gtk.Accessible, oldProps: Props | null, newProps: Props) => void;
59
- //# sourceMappingURL=accessible.d.ts.map
56
+ };
57
+ declare const isAccessibleProp: (name: string) => name is keyof AccessibleProps;
58
+ declare const applyAccessibleProps: (widget: Gtk.Accessible, oldProps: Props | null, newProps: Props) => void;
59
+ export { isAccessibleProp, applyAccessibleProps, type AccessibleProps };
60
+ //# sourceMappingURL=accessible-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessible-props.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import * as GObject from "@gtkx/gi/gobject";
2
+ import * as Gtk from "@gtkx/gi/gtk";
3
+ import { deleteAccessibleMetadata, setAccessibleMetadata } from "./accessible-metadata.js";
4
+ const ACCESSIBLE_PROP_MAP = {
5
+ accessibleAutocomplete: buildProperty(Gtk.AccessibleProperty.AUTOCOMPLETE, "int"),
6
+ accessibleDescription: buildProperty(Gtk.AccessibleProperty.DESCRIPTION, "string"),
7
+ accessibleHasPopup: buildProperty(Gtk.AccessibleProperty.HAS_POPUP, "boolean"),
8
+ accessibleKeyShortcuts: buildProperty(Gtk.AccessibleProperty.KEY_SHORTCUTS, "string"),
9
+ accessibleLabel: buildProperty(Gtk.AccessibleProperty.LABEL, "string"),
10
+ accessibleLevel: buildProperty(Gtk.AccessibleProperty.LEVEL, "int"),
11
+ accessibleModal: buildProperty(Gtk.AccessibleProperty.MODAL, "boolean"),
12
+ accessibleMultiLine: buildProperty(Gtk.AccessibleProperty.MULTI_LINE, "boolean"),
13
+ accessibleMultiSelectable: buildProperty(Gtk.AccessibleProperty.MULTI_SELECTABLE, "boolean"),
14
+ accessibleOrientation: buildProperty(Gtk.AccessibleProperty.ORIENTATION, "int"),
15
+ accessiblePlaceholder: buildProperty(Gtk.AccessibleProperty.PLACEHOLDER, "string"),
16
+ accessibleReadOnly: buildProperty(Gtk.AccessibleProperty.READ_ONLY, "boolean"),
17
+ accessibleRequired: buildProperty(Gtk.AccessibleProperty.REQUIRED, "boolean"),
18
+ accessibleRoleDescription: buildProperty(Gtk.AccessibleProperty.ROLE_DESCRIPTION, "string"),
19
+ accessibleSort: buildProperty(Gtk.AccessibleProperty.SORT, "int"),
20
+ accessibleValueMax: buildProperty(Gtk.AccessibleProperty.VALUE_MAX, "double"),
21
+ accessibleValueMin: buildProperty(Gtk.AccessibleProperty.VALUE_MIN, "double"),
22
+ accessibleValueNow: buildProperty(Gtk.AccessibleProperty.VALUE_NOW, "double"),
23
+ accessibleValueText: buildProperty(Gtk.AccessibleProperty.VALUE_TEXT, "string"),
24
+ accessibleHelpText: buildProperty(Gtk.AccessibleProperty.HELP_TEXT, "string"),
25
+ accessibleBusy: buildState(Gtk.AccessibleState.BUSY, "boolean"),
26
+ accessibleChecked: buildState(Gtk.AccessibleState.CHECKED, "int"),
27
+ accessibleDisabled: buildState(Gtk.AccessibleState.DISABLED, "boolean"),
28
+ accessibleExpanded: buildState(Gtk.AccessibleState.EXPANDED, "int"),
29
+ accessibleHidden: buildState(Gtk.AccessibleState.HIDDEN, "boolean"),
30
+ accessibleInvalid: buildState(Gtk.AccessibleState.INVALID, "int"),
31
+ accessiblePressed: buildState(Gtk.AccessibleState.PRESSED, "int"),
32
+ accessibleSelected: buildState(Gtk.AccessibleState.SELECTED, "int"),
33
+ accessibleVisited: buildState(Gtk.AccessibleState.VISITED, "int"),
34
+ accessibleActiveDescendant: buildRelation(Gtk.AccessibleRelation.ACTIVE_DESCENDANT, "object"),
35
+ accessibleColCount: buildRelation(Gtk.AccessibleRelation.COL_COUNT, "int"),
36
+ accessibleColIndex: buildRelation(Gtk.AccessibleRelation.COL_INDEX, "int"),
37
+ accessibleColIndexText: buildRelation(Gtk.AccessibleRelation.COL_INDEX_TEXT, "string"),
38
+ accessibleColSpan: buildRelation(Gtk.AccessibleRelation.COL_SPAN, "int"),
39
+ accessibleControls: buildRelation(Gtk.AccessibleRelation.CONTROLS, "list"),
40
+ accessibleDescribedBy: buildRelation(Gtk.AccessibleRelation.DESCRIBED_BY, "list"),
41
+ accessibleDetails: buildRelation(Gtk.AccessibleRelation.DETAILS, "list"),
42
+ accessibleErrorMessage: buildRelation(Gtk.AccessibleRelation.ERROR_MESSAGE, "list"),
43
+ accessibleFlowTo: buildRelation(Gtk.AccessibleRelation.FLOW_TO, "list"),
44
+ accessibleLabelledBy: buildRelation(Gtk.AccessibleRelation.LABELLED_BY, "list"),
45
+ accessibleOwns: buildRelation(Gtk.AccessibleRelation.OWNS, "list"),
46
+ accessiblePosInSet: buildRelation(Gtk.AccessibleRelation.POS_IN_SET, "int"),
47
+ accessibleRowCount: buildRelation(Gtk.AccessibleRelation.ROW_COUNT, "int"),
48
+ accessibleRowIndex: buildRelation(Gtk.AccessibleRelation.ROW_INDEX, "int"),
49
+ accessibleRowIndexText: buildRelation(Gtk.AccessibleRelation.ROW_INDEX_TEXT, "string"),
50
+ accessibleRowSpan: buildRelation(Gtk.AccessibleRelation.ROW_SPAN, "int"),
51
+ accessibleSetSize: buildRelation(Gtk.AccessibleRelation.SET_SIZE, "int"),
52
+ };
53
+ function buildProperty(property, type) {
54
+ return {
55
+ kind: "property",
56
+ property,
57
+ type,
58
+ };
59
+ }
60
+ function buildState(state, type) {
61
+ return {
62
+ kind: "state",
63
+ state,
64
+ type,
65
+ };
66
+ }
67
+ function buildRelation(relation, type) {
68
+ return {
69
+ kind: "relation",
70
+ relation,
71
+ type,
72
+ };
73
+ }
74
+ const buildValue = (descriptor, jsValue) => {
75
+ switch (descriptor.type) {
76
+ case "string": {
77
+ return GObject.buildValue(GObject.TYPE_STRING, (v) => {
78
+ v.setString(jsValue);
79
+ });
80
+ }
81
+ case "boolean": {
82
+ return GObject.buildValue(GObject.TYPE_BOOLEAN, (v) => {
83
+ v.setBoolean(jsValue);
84
+ });
85
+ }
86
+ case "int": {
87
+ return GObject.buildValue(GObject.TYPE_INT, (v) => {
88
+ v.setInt(jsValue);
89
+ });
90
+ }
91
+ case "double": {
92
+ return GObject.buildValue(GObject.TYPE_DOUBLE, (v) => {
93
+ v.setDouble(jsValue);
94
+ });
95
+ }
96
+ case "object": {
97
+ return GObject.buildValue(GObject.TYPE_OBJECT, (v) => {
98
+ v.setObject(jsValue);
99
+ });
100
+ }
101
+ case "list": {
102
+ const list = Gtk.AccessibleList.newFromList(jsValue);
103
+ return GObject.buildValue(Gtk.AccessibleList.prototype.__type__, (v) => {
104
+ v.setBoxed(list);
105
+ });
106
+ }
107
+ }
108
+ };
109
+ const isAccessibleProp = (name) => Object.hasOwn(ACCESSIBLE_PROP_MAP, name);
110
+ function applyDescriptor(widget, descriptor, newValue) {
111
+ const value = buildValue(descriptor, newValue);
112
+ switch (descriptor.kind) {
113
+ case "property": {
114
+ widget.updateProperty([descriptor.property], [value]);
115
+ break;
116
+ }
117
+ case "state": {
118
+ widget.updateState([descriptor.state], [value]);
119
+ break;
120
+ }
121
+ case "relation": {
122
+ widget.updateRelation([descriptor.relation], [value]);
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ function resetDescriptor(widget, descriptor) {
128
+ switch (descriptor.kind) {
129
+ case "property": {
130
+ widget.resetProperty(descriptor.property);
131
+ break;
132
+ }
133
+ case "state": {
134
+ widget.resetState(descriptor.state);
135
+ break;
136
+ }
137
+ case "relation": {
138
+ widget.resetRelation(descriptor.relation);
139
+ break;
140
+ }
141
+ }
142
+ }
143
+ const applyChangedProp = (widget, name, newValue) => {
144
+ if (newValue == null) {
145
+ resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);
146
+ deleteAccessibleMetadata(widget, name);
147
+ }
148
+ else {
149
+ applyDescriptor(widget, ACCESSIBLE_PROP_MAP[name], newValue);
150
+ setAccessibleMetadata(widget, name, newValue);
151
+ }
152
+ };
153
+ const applyChangedProps = (widget, oldProps, newProps) => {
154
+ for (const name in newProps) {
155
+ if (!isAccessibleProp(name)) {
156
+ continue;
157
+ }
158
+ const newValue = newProps[name];
159
+ if (oldProps?.[name] !== newValue) {
160
+ applyChangedProp(widget, name, newValue);
161
+ }
162
+ }
163
+ };
164
+ const isRemovedAccessibleProp = (name, oldProps, newProps) => !Object.hasOwn(newProps, name) && isAccessibleProp(name) && oldProps[name] !== undefined;
165
+ const resetRemovedProps = (widget, oldProps, newProps) => {
166
+ for (const name in oldProps) {
167
+ if (!isRemovedAccessibleProp(name, oldProps, newProps)) {
168
+ continue;
169
+ }
170
+ resetDescriptor(widget, ACCESSIBLE_PROP_MAP[name]);
171
+ deleteAccessibleMetadata(widget, name);
172
+ }
173
+ };
174
+ const applyAccessibleProps = (widget, oldProps, newProps) => {
175
+ applyChangedProps(widget, oldProps, newProps);
176
+ if (oldProps) {
177
+ resetRemovedProps(widget, oldProps, newProps);
178
+ }
179
+ };
180
+ export { isAccessibleProp, applyAccessibleProps };
181
+ //# sourceMappingURL=accessible-props.js.map