@gjsify/adwaita-web 0.64.1 → 0.64.2-next.254

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 (335) hide show
  1. package/README.md +22 -88
  2. package/dist/adwaita-web.css +91 -12
  3. package/dist/adwaita-web.css.map +1 -1
  4. package/lib/types/accessible.d.ts +8 -0
  5. package/lib/types/application.d.ts +1 -1
  6. package/lib/types/child-slot.spec.d.ts +1 -0
  7. package/lib/types/compute-expand.d.ts +5 -0
  8. package/lib/types/compute-expand.spec.d.ts +1 -0
  9. package/lib/types/container-fill.spec.d.ts +1 -0
  10. package/lib/types/elements/adw-about-dialog.d.ts +28 -1
  11. package/lib/types/elements/adw-action-row.d.ts +2 -1
  12. package/lib/types/elements/adw-alert-dialog.d.ts +80 -19
  13. package/lib/types/elements/adw-avatar.d.ts +2 -1
  14. package/lib/types/elements/adw-banner.d.ts +2 -1
  15. package/lib/types/elements/adw-bin.d.ts +2 -1
  16. package/lib/types/elements/adw-bottom-sheet.d.ts +5 -4
  17. package/lib/types/elements/adw-breakpoint-bin.d.ts +2 -1
  18. package/lib/types/elements/adw-button-content.d.ts +2 -1
  19. package/lib/types/elements/adw-button-row.d.ts +2 -1
  20. package/lib/types/elements/adw-card.d.ts +2 -1
  21. package/lib/types/elements/adw-carousel.d.ts +20 -3
  22. package/lib/types/elements/adw-clamp-scrollable.d.ts +2 -1
  23. package/lib/types/elements/adw-clamp.d.ts +2 -1
  24. package/lib/types/elements/adw-combo-row.d.ts +6 -1
  25. package/lib/types/elements/adw-data-grid.d.ts +2 -1
  26. package/lib/types/elements/adw-dialog.d.ts +2 -1
  27. package/lib/types/elements/adw-entry-row.d.ts +2 -1
  28. package/lib/types/elements/adw-expander-row.d.ts +2 -1
  29. package/lib/types/elements/adw-header-bar.d.ts +2 -1
  30. package/lib/types/elements/adw-inline-view-switcher.d.ts +3 -2
  31. package/lib/types/elements/adw-layout-slot.d.ts +2 -1
  32. package/lib/types/elements/adw-multi-layout-view.d.ts +2 -1
  33. package/lib/types/elements/adw-navigation-split-view.d.ts +2 -1
  34. package/lib/types/elements/adw-navigation-view.d.ts +3 -2
  35. package/lib/types/elements/adw-overlay-split-view.d.ts +2 -1
  36. package/lib/types/elements/adw-preferences-dialog.d.ts +5 -4
  37. package/lib/types/elements/adw-preferences-group.d.ts +2 -1
  38. package/lib/types/elements/adw-preferences-row.d.ts +2 -1
  39. package/lib/types/elements/adw-shortcut-label.d.ts +2 -1
  40. package/lib/types/elements/adw-shortcuts-item.d.ts +2 -1
  41. package/lib/types/elements/adw-shortcuts-section.d.ts +2 -1
  42. package/lib/types/elements/adw-sidebar.d.ts +4 -3
  43. package/lib/types/elements/adw-spin-row.d.ts +2 -1
  44. package/lib/types/elements/adw-spinner.d.ts +2 -1
  45. package/lib/types/elements/adw-split-button.d.ts +2 -1
  46. package/lib/types/elements/adw-status-page.d.ts +2 -1
  47. package/lib/types/elements/adw-switch-row.d.ts +4 -1
  48. package/lib/types/elements/adw-tab-bar.d.ts +2 -1
  49. package/lib/types/elements/adw-tab-button.d.ts +2 -1
  50. package/lib/types/elements/adw-tab-overview.d.ts +2 -1
  51. package/lib/types/elements/adw-tab-view.d.ts +3 -2
  52. package/lib/types/elements/adw-toast-overlay.d.ts +10 -30
  53. package/lib/types/elements/adw-toggle-group.d.ts +3 -2
  54. package/lib/types/elements/adw-toolbar-view.d.ts +2 -1
  55. package/lib/types/elements/adw-view-stack.d.ts +3 -1
  56. package/lib/types/elements/adw-view-switcher-bar.d.ts +2 -1
  57. package/lib/types/elements/adw-view-switcher-sidebar.d.ts +2 -1
  58. package/lib/types/elements/adw-view-switcher.d.ts +3 -2
  59. package/lib/types/elements/adw-window-features.d.ts +8 -0
  60. package/lib/types/elements/adw-window-title.d.ts +2 -1
  61. package/lib/types/elements/adw-wrap-box.d.ts +2 -1
  62. package/lib/types/elements/checks.d.ts +16 -1
  63. package/lib/types/elements/gtk-action-bar.d.ts +2 -1
  64. package/lib/types/elements/gtk-application-window.d.ts +1 -4
  65. package/lib/types/elements/gtk-aspect-frame.d.ts +2 -1
  66. package/lib/types/elements/gtk-box.d.ts +5 -1
  67. package/lib/types/elements/gtk-button.d.ts +5 -7
  68. package/lib/types/elements/gtk-calendar.d.ts +2 -1
  69. package/lib/types/elements/gtk-center-box.d.ts +2 -1
  70. package/lib/types/elements/gtk-color-dialog-button.d.ts +2 -1
  71. package/lib/types/elements/gtk-drag-icon.d.ts +2 -1
  72. package/lib/types/elements/gtk-drawing-area.d.ts +2 -1
  73. package/lib/types/elements/gtk-drop-down.d.ts +2 -1
  74. package/lib/types/elements/gtk-editable-label.d.ts +2 -1
  75. package/lib/types/elements/gtk-emoji-chooser.d.ts +2 -0
  76. package/lib/types/elements/gtk-entry.d.ts +2 -1
  77. package/lib/types/elements/gtk-expander.d.ts +2 -1
  78. package/lib/types/elements/gtk-fixed.d.ts +2 -1
  79. package/lib/types/elements/gtk-flow-box-child.d.ts +2 -1
  80. package/lib/types/elements/gtk-flow-box.d.ts +2 -1
  81. package/lib/types/elements/gtk-font-dialog-button.d.ts +2 -1
  82. package/lib/types/elements/gtk-frame.d.ts +2 -1
  83. package/lib/types/elements/gtk-gl-area.d.ts +2 -1
  84. package/lib/types/elements/gtk-graphics-offload.d.ts +2 -1
  85. package/lib/types/elements/gtk-grid.d.ts +2 -1
  86. package/lib/types/elements/gtk-header-bar.d.ts +2 -1
  87. package/lib/types/elements/gtk-image.d.ts +5 -6
  88. package/lib/types/elements/gtk-inscription.d.ts +2 -1
  89. package/lib/types/elements/gtk-label.d.ts +10 -3
  90. package/lib/types/elements/gtk-level-bar.d.ts +2 -1
  91. package/lib/types/elements/gtk-list-box-row.d.ts +2 -1
  92. package/lib/types/elements/gtk-list-box.d.ts +2 -1
  93. package/lib/types/elements/gtk-list-view.d.ts +2 -1
  94. package/lib/types/elements/gtk-media-controls.d.ts +2 -1
  95. package/lib/types/elements/gtk-menu-button.d.ts +2 -1
  96. package/lib/types/elements/gtk-notebook.d.ts +2 -1
  97. package/lib/types/elements/gtk-overlay.d.ts +2 -1
  98. package/lib/types/elements/gtk-paned.d.ts +2 -1
  99. package/lib/types/elements/gtk-picture.d.ts +2 -1
  100. package/lib/types/elements/gtk-popover-bin.d.ts +2 -1
  101. package/lib/types/elements/gtk-popover-menu-bar.d.ts +2 -1
  102. package/lib/types/elements/gtk-popover-menu.d.ts +2 -0
  103. package/lib/types/elements/gtk-popover.d.ts +7 -1
  104. package/lib/types/elements/gtk-progress-bar.d.ts +2 -1
  105. package/lib/types/elements/gtk-revealer.d.ts +2 -1
  106. package/lib/types/elements/gtk-scale-button.d.ts +2 -1
  107. package/lib/types/elements/gtk-scale.d.ts +2 -1
  108. package/lib/types/elements/gtk-scrollbar.d.ts +2 -1
  109. package/lib/types/elements/gtk-scrolled-window.d.ts +2 -1
  110. package/lib/types/elements/gtk-search-bar.d.ts +2 -1
  111. package/lib/types/elements/gtk-separator.d.ts +2 -1
  112. package/lib/types/elements/gtk-spin-button.d.ts +2 -1
  113. package/lib/types/elements/gtk-spinner.d.ts +2 -1
  114. package/lib/types/elements/gtk-stack-page.d.ts +29 -0
  115. package/lib/types/elements/gtk-stack-sidebar.d.ts +2 -1
  116. package/lib/types/elements/gtk-stack-switcher.d.ts +2 -1
  117. package/lib/types/elements/gtk-stack.d.ts +13 -1
  118. package/lib/types/elements/gtk-switch.d.ts +2 -1
  119. package/lib/types/elements/gtk-text-view.d.ts +2 -1
  120. package/lib/types/elements/gtk-text.d.ts +2 -1
  121. package/lib/types/elements/gtk-tree-expander.d.ts +2 -1
  122. package/lib/types/elements/gtk-video.d.ts +2 -1
  123. package/lib/types/elements/gtk-viewport.d.ts +2 -1
  124. package/lib/types/elements/gtk-window-controls.d.ts +2 -1
  125. package/lib/types/elements/gtk-window-handle.d.ts +2 -1
  126. package/lib/types/elements/gtk-window.d.ts +18 -2
  127. package/lib/types/gobject-elements.d.ts +15 -0
  128. package/lib/types/gtksource/gtk-source-view.d.ts +2 -1
  129. package/lib/types/{icon-registry.spec.d.ts → icon-masks.spec.d.ts} +1 -1
  130. package/lib/types/icon-theme.d.ts +15 -35
  131. package/lib/types/index.d.ts +3 -4
  132. package/lib/types/learn6502-window.spec.d.ts +1 -0
  133. package/lib/types/namespace/adw.d.ts +1 -1
  134. package/lib/types/namespace/gdk.d.ts +1 -0
  135. package/lib/types/namespace/gio.d.ts +1 -0
  136. package/lib/types/namespace/glib.d.ts +2 -1
  137. package/lib/types/namespace/gtk.d.ts +2 -0
  138. package/lib/types/shared-tree-builder.d.ts +31 -0
  139. package/lib/types/signals.d.ts +5 -1
  140. package/lib/types/source-view/adw-source-view.d.ts +2 -1
  141. package/lib/types/styles.generated.d.ts +1 -1
  142. package/lib/types/widget-element.d.ts +25 -0
  143. package/lib/types/widget-map.spec.d.ts +1 -0
  144. package/lib/types/widget-mapping.d.ts +7 -0
  145. package/lib/types/widget-visible.spec.d.ts +1 -0
  146. package/lib/types/window-maximize.spec.d.ts +1 -0
  147. package/package.json +13 -12
  148. package/scss/_about_dialog.scss +46 -1
  149. package/scss/_bin.scss +6 -3
  150. package/scss/_checks.scss +5 -2
  151. package/scss/_icon.scss +3 -4
  152. package/scss/_labels.scss +2 -2
  153. package/scss/_overlay.scss +11 -1
  154. package/scss/_overlay_split_view.scss +10 -0
  155. package/scss/_reset.scss +1 -1
  156. package/scss/_scrolled_window.scss +15 -0
  157. package/scss/_stack.scss +8 -2
  158. package/scss/_toast.scss +13 -3
  159. package/scss/_widget.scss +5 -1
  160. package/scss/_window.scss +16 -0
  161. package/src/accessible.ts +29 -0
  162. package/src/adw-about-dialog.spec.ts +81 -12
  163. package/src/adw-action-rows.spec.ts +2 -2
  164. package/src/adw-alert-dialog.spec.ts +71 -5
  165. package/src/adw-bin.spec.ts +4 -3
  166. package/src/adw-button-content.spec.ts +1 -1
  167. package/src/adw-carousel.spec.ts +49 -1
  168. package/src/adw-header-bar.spec.ts +18 -0
  169. package/src/adw-toast-overlay.spec.ts +68 -24
  170. package/src/application.spec.ts +44 -0
  171. package/src/application.ts +13 -18
  172. package/src/capabilities.mjs +2 -3
  173. package/src/checks.spec.ts +51 -1
  174. package/src/child-slot.spec.ts +71 -0
  175. package/src/compute-expand.spec.ts +186 -0
  176. package/src/compute-expand.ts +134 -0
  177. package/src/construct-vectors.spec.ts +97 -7
  178. package/src/container-fill.spec.ts +70 -0
  179. package/src/elements/adw-about-dialog.ts +152 -9
  180. package/src/elements/adw-action-row.ts +2 -1
  181. package/src/elements/adw-alert-dialog.ts +177 -46
  182. package/src/elements/adw-application-window.ts +0 -3
  183. package/src/elements/adw-avatar.ts +2 -1
  184. package/src/elements/adw-banner.ts +2 -1
  185. package/src/elements/adw-bin.ts +2 -1
  186. package/src/elements/adw-bottom-sheet.ts +5 -4
  187. package/src/elements/adw-breakpoint-bin.ts +5 -1
  188. package/src/elements/adw-button-content.ts +2 -1
  189. package/src/elements/adw-button-row.ts +2 -1
  190. package/src/elements/adw-card.ts +2 -1
  191. package/src/elements/adw-carousel.ts +62 -3
  192. package/src/elements/adw-clamp-scrollable.ts +2 -1
  193. package/src/elements/adw-clamp.ts +2 -1
  194. package/src/elements/adw-combo-row.ts +15 -1
  195. package/src/elements/adw-data-grid.ts +2 -1
  196. package/src/elements/adw-dialog.ts +5 -2
  197. package/src/elements/adw-entry-row.ts +2 -1
  198. package/src/elements/adw-expander-row.ts +2 -1
  199. package/src/elements/adw-header-bar.ts +6 -1
  200. package/src/elements/adw-inline-view-switcher.ts +3 -2
  201. package/src/elements/adw-layout-slot.ts +2 -1
  202. package/src/elements/adw-multi-layout-view.ts +2 -1
  203. package/src/elements/adw-navigation-split-view.ts +2 -1
  204. package/src/elements/adw-navigation-view.ts +3 -2
  205. package/src/elements/adw-overlay-split-view.ts +2 -1
  206. package/src/elements/adw-preferences-dialog.ts +6 -4
  207. package/src/elements/adw-preferences-group.ts +2 -1
  208. package/src/elements/adw-preferences-row.ts +2 -1
  209. package/src/elements/adw-shortcut-label.ts +2 -1
  210. package/src/elements/adw-shortcuts-item.ts +2 -1
  211. package/src/elements/adw-shortcuts-section.ts +2 -1
  212. package/src/elements/adw-sidebar.ts +4 -3
  213. package/src/elements/adw-spin-row.ts +2 -1
  214. package/src/elements/adw-spinner.ts +2 -1
  215. package/src/elements/adw-split-button.ts +2 -1
  216. package/src/elements/adw-status-page.ts +2 -1
  217. package/src/elements/adw-switch-row.ts +10 -1
  218. package/src/elements/adw-tab-bar.ts +2 -1
  219. package/src/elements/adw-tab-button.ts +2 -1
  220. package/src/elements/adw-tab-overview.ts +2 -1
  221. package/src/elements/adw-tab-view.ts +3 -2
  222. package/src/elements/adw-toast-overlay.ts +37 -70
  223. package/src/elements/adw-toggle-group.ts +3 -2
  224. package/src/elements/adw-toolbar-view.ts +2 -1
  225. package/src/elements/adw-view-stack.ts +39 -1
  226. package/src/elements/adw-view-switcher-bar.ts +2 -1
  227. package/src/elements/adw-view-switcher-sidebar.ts +2 -1
  228. package/src/elements/adw-view-switcher.ts +3 -2
  229. package/src/elements/adw-window-features.ts +14 -2
  230. package/src/elements/adw-window-title.ts +2 -1
  231. package/src/elements/adw-wrap-box.ts +2 -1
  232. package/src/elements/checks.ts +85 -6
  233. package/src/elements/gtk-action-bar.ts +2 -1
  234. package/src/elements/gtk-application-window.ts +3 -8
  235. package/src/elements/gtk-aspect-frame.ts +2 -1
  236. package/src/elements/gtk-box.ts +56 -1
  237. package/src/elements/gtk-button.ts +10 -22
  238. package/src/elements/gtk-calendar.ts +2 -1
  239. package/src/elements/gtk-center-box.ts +2 -1
  240. package/src/elements/gtk-color-dialog-button.ts +2 -1
  241. package/src/elements/gtk-drag-icon.ts +6 -1
  242. package/src/elements/gtk-drawing-area.ts +2 -1
  243. package/src/elements/gtk-drop-down.ts +2 -1
  244. package/src/elements/gtk-editable-label.ts +2 -1
  245. package/src/elements/gtk-emoji-chooser.ts +5 -0
  246. package/src/elements/gtk-entry.ts +2 -1
  247. package/src/elements/gtk-expander.ts +2 -1
  248. package/src/elements/gtk-fixed.ts +2 -1
  249. package/src/elements/gtk-flow-box-child.ts +5 -2
  250. package/src/elements/gtk-flow-box.ts +2 -1
  251. package/src/elements/gtk-font-dialog-button.ts +2 -1
  252. package/src/elements/gtk-frame.ts +2 -1
  253. package/src/elements/gtk-gl-area.ts +2 -1
  254. package/src/elements/gtk-graphics-offload.ts +5 -2
  255. package/src/elements/gtk-grid.ts +2 -1
  256. package/src/elements/gtk-header-bar.ts +2 -1
  257. package/src/elements/gtk-image.ts +14 -15
  258. package/src/elements/gtk-inscription.ts +2 -1
  259. package/src/elements/gtk-label.ts +12 -5
  260. package/src/elements/gtk-level-bar.ts +2 -1
  261. package/src/elements/gtk-list-box-row.ts +5 -2
  262. package/src/elements/gtk-list-box.ts +2 -1
  263. package/src/elements/gtk-list-view.ts +2 -1
  264. package/src/elements/gtk-media-controls.ts +2 -1
  265. package/src/elements/gtk-menu-button.ts +2 -1
  266. package/src/elements/gtk-notebook.ts +2 -1
  267. package/src/elements/gtk-overlay.ts +7 -5
  268. package/src/elements/gtk-paned.ts +9 -2
  269. package/src/elements/gtk-picture.ts +2 -1
  270. package/src/elements/gtk-popover-bin.ts +5 -1
  271. package/src/elements/gtk-popover-menu-bar.ts +2 -1
  272. package/src/elements/gtk-popover-menu.ts +5 -0
  273. package/src/elements/gtk-popover.ts +14 -1
  274. package/src/elements/gtk-progress-bar.ts +2 -1
  275. package/src/elements/gtk-revealer.ts +2 -1
  276. package/src/elements/gtk-scale-button.ts +2 -1
  277. package/src/elements/gtk-scale.ts +2 -1
  278. package/src/elements/gtk-scrollbar.ts +2 -1
  279. package/src/elements/gtk-scrolled-window.ts +8 -5
  280. package/src/elements/gtk-search-bar.ts +7 -6
  281. package/src/elements/gtk-separator.ts +2 -1
  282. package/src/elements/gtk-spin-button.ts +2 -1
  283. package/src/elements/gtk-spinner.ts +2 -1
  284. package/src/elements/gtk-stack-page.ts +112 -0
  285. package/src/elements/gtk-stack-sidebar.ts +2 -1
  286. package/src/elements/gtk-stack-switcher.ts +2 -1
  287. package/src/elements/gtk-stack.ts +52 -6
  288. package/src/elements/gtk-switch.ts +2 -1
  289. package/src/elements/gtk-text-view.ts +2 -1
  290. package/src/elements/gtk-text.ts +2 -1
  291. package/src/elements/gtk-tree-expander.ts +5 -1
  292. package/src/elements/gtk-video.ts +2 -1
  293. package/src/elements/gtk-viewport.ts +6 -1
  294. package/src/elements/gtk-window-controls.ts +2 -1
  295. package/src/elements/gtk-window-handle.ts +6 -1
  296. package/src/elements/gtk-window.ts +57 -7
  297. package/src/gio.spec.ts +13 -3
  298. package/src/glib.spec.ts +9 -0
  299. package/src/gobject-elements.ts +44 -2
  300. package/src/gtk-label.spec.ts +39 -0
  301. package/src/gtk-scrolled-window.spec.ts +6 -6
  302. package/src/gtk-stack.spec.ts +170 -0
  303. package/src/gtk-value-doors.spec.ts +19 -0
  304. package/src/gtk-window.spec.ts +2 -2
  305. package/src/gtksource/gtk-source-view.ts +2 -1
  306. package/src/{icon-registry.spec.ts → icon-masks.spec.ts} +4 -100
  307. package/src/icon-theme.spec.ts +69 -124
  308. package/src/icon-theme.ts +29 -119
  309. package/src/index.ts +5 -9
  310. package/src/keyboard-operable.spec.ts +3 -3
  311. package/src/learn6502-window.spec.ts +113 -0
  312. package/src/namespace/adw.ts +1 -1
  313. package/src/namespace/gdk.ts +1 -0
  314. package/src/namespace/gio.ts +8 -0
  315. package/src/namespace/glib.ts +4 -0
  316. package/src/namespace/gtk.ts +2 -0
  317. package/src/shared-tree-builder.ts +131 -13
  318. package/src/shared-trees.spec.ts +15 -1
  319. package/src/signals.ts +11 -2
  320. package/src/slotted-children.spec.ts +24 -0
  321. package/src/slotted-children.ts +18 -2
  322. package/src/source-view/adw-source-view.ts +2 -1
  323. package/src/split-button.spec.ts +1 -1
  324. package/src/style-manager.spec.ts +13 -0
  325. package/src/style-manager.ts +6 -0
  326. package/src/styles.generated.ts +1 -1
  327. package/src/test.browser.mts +16 -2
  328. package/src/value-lists.spec.ts +3 -3
  329. package/src/widget-element.ts +75 -0
  330. package/src/widget-map.spec.ts +116 -0
  331. package/src/widget-mapping.ts +100 -0
  332. package/src/widget-visible.spec.ts +148 -0
  333. package/src/window-maximize.spec.ts +93 -0
  334. package/lib/types/icon-registry.d.ts +0 -37
  335. package/src/icon-registry.ts +0 -163
@@ -20,7 +20,7 @@
20
20
  // properties of the same name, hyphenated):
21
21
  // application-name the application's display name (shown as a title-1)
22
22
  // application-icon an icon name, by convention the application ID; drawn in
23
- // colour once `registerColorIcon(id, …)` registered it, else
23
+ // colour from the app's GResource icons (ADR 0116), else
24
24
  // as a symbolic glyph or `image-missing` (`<gtk-image>`'s
25
25
  // lookup); absent one, no icon is drawn
26
26
  // developer-name the developer / vendor line below the name
@@ -34,16 +34,22 @@
34
34
  // license the license text/name (Legal page); with a `license-url`
35
35
  // the name becomes a link
36
36
  // license-url a URL the license name links to
37
+ // release-notes AppStream release-notes markup — a What's New row + page,
38
+ // the buffer from the core's `releaseNotesBuffer`
39
+ // release-notes-version the version the What's New heading names, else `version`
40
+ // debug-info an opaque blob — a Troubleshooting row + page with Copy Text
37
41
  // open (boolean) whether the dialog is presented
38
42
  //
39
43
  // List-valued credits are set via properties (string arrays), mirroring the
40
44
  // AdwAboutDialog `developers` / `designers` / `artists` / `documenters` properties
41
45
  // — entries may be `Name`, `Name <email>` or `Name https://url`, parsed by the
42
- // core's `parseCreditPerson` (`parse_person`).
46
+ // core's `parseCreditPerson` (`parse_person`). `add_link (title, url)` appends a
47
+ // Details-page link row, as on GTK.
43
48
  //
44
- // NOT implemented here, so the core derivations see them empty: `release-notes` +
45
- // the What's New page, `debug-info` + the Troubleshooting page, `add_link`,
46
- // `add_credit_section`, `translator-credits` and the Acknowledgements page.
49
+ // NOT implemented here, so the core derivations see them empty: `add_credit_section`,
50
+ // `translator-credits`, the Acknowledgements page, and the debug page's "Save As…"
51
+ // button (`debug-info-filename`), which needs a file dialog. `new_from_appdata` is
52
+ // refused by name: it needs an AppStream parser.
47
53
  //
48
54
  // Events (CustomEvent, bubbles): `notify::open` (detail `{ open }`), `closed`, and
49
55
  // `activate-link` (detail `{ uri }`, CANCELABLE — the signal's `true_handled`
@@ -63,21 +69,29 @@ import {
63
69
  ADW_ABOUT_DIALOG_LABELS,
64
70
  type AdwCreditPerson,
65
71
  GTK_LICENSE,
72
+ type ReleaseNotesSegment,
73
+ Toast,
66
74
  aboutDialogVisibility,
67
75
  creditsSections,
68
76
  legalSectionVisible,
77
+ refuseNewFromAppdata,
78
+ releaseNotesBuffer,
69
79
  stripMnemonic,
70
80
  } from '@gjsify/adwaita-core';
71
81
 
82
+ import { webClipboardHost } from '../clipboard-host.js';
83
+ import type { AdwToastOverlay } from './adw-toast-overlay.js';
84
+ import './adw-toast-overlay.js';
72
85
  import { createGtkImage } from './gtk-image.js';
73
86
  import { AdwModalSurface } from './modal-surface.js';
87
+ import { WidgetElement } from '../widget-element.js';
74
88
 
75
89
  /** A template label with its mnemonic marker removed — this renderer has no accelerator layer. */
76
90
  function rowLabel(key: keyof typeof ADW_ABOUT_DIALOG_LABELS): string {
77
91
  return stripMnemonic(ADW_ABOUT_DIALOG_LABELS[key]);
78
92
  }
79
93
 
80
- export class AdwAboutDialog extends HTMLElement {
94
+ export class AdwAboutDialog extends WidgetElement {
81
95
  private _initialized = false;
82
96
 
83
97
  // Layout nodes (rebuilt from attributes on each render).
@@ -94,6 +108,15 @@ export class AdwAboutDialog extends HTMLElement {
94
108
  private _artists: string[] = [];
95
109
  private _documenters: string[] = [];
96
110
 
111
+ /** `add_link` rows, in order; `has_custom_links` latches with the first. */
112
+ private _links: { title: string; url: string }[] = [];
113
+ /**
114
+ * The What's New buffer. Only the two release-notes setters rebuild it, never
115
+ * `version` (`update_release_notes` is called from those two alone).
116
+ */
117
+ private _releaseNotesSegments: ReleaseNotesSegment[] = [];
118
+ private _toastOverlay!: AdwToastOverlay;
119
+
97
120
  static get observedAttributes() {
98
121
  return [
99
122
  'application-name',
@@ -107,10 +130,18 @@ export class AdwAboutDialog extends HTMLElement {
107
130
  'copyright',
108
131
  'license',
109
132
  'license-url',
133
+ 'release-notes',
134
+ 'release-notes-version',
135
+ 'debug-info',
110
136
  'open',
111
137
  ];
112
138
  }
113
139
 
140
+ /** `adw_about_dialog_new_from_appdata`, refused by name. */
141
+ static new_from_appdata(_resourcePath: string, _releaseNotesVersion?: string | null): never {
142
+ refuseNewFromAppdata();
143
+ }
144
+
114
145
  get applicationName(): string {
115
146
  return this.getAttribute('application-name') ?? '';
116
147
  }
@@ -199,6 +230,36 @@ export class AdwAboutDialog extends HTMLElement {
199
230
  this.setAttribute('license-url', value);
200
231
  }
201
232
 
233
+ get releaseNotes(): string {
234
+ return this.getAttribute('release-notes') ?? '';
235
+ }
236
+
237
+ set releaseNotes(value: string) {
238
+ this.setAttribute('release-notes', value);
239
+ }
240
+
241
+ get releaseNotesVersion(): string {
242
+ return this.getAttribute('release-notes-version') ?? '';
243
+ }
244
+
245
+ set releaseNotesVersion(value: string) {
246
+ this.setAttribute('release-notes-version', value);
247
+ }
248
+
249
+ get debugInfo(): string {
250
+ return this.getAttribute('debug-info') ?? '';
251
+ }
252
+
253
+ set debugInfo(value: string) {
254
+ this.setAttribute('debug-info', value);
255
+ }
256
+
257
+ /** `adw_about_dialog_add_link`: a Details-page link row; `_` marks a mnemonic. */
258
+ add_link(title: string, url: string): void {
259
+ this._links.push({ title, url });
260
+ if (this._initialized) this._render();
261
+ }
262
+
202
263
  get open(): boolean {
203
264
  return this.hasAttribute('open');
204
265
  }
@@ -269,6 +330,11 @@ export class AdwAboutDialog extends HTMLElement {
269
330
  // revealer shows it separately in GTK.
270
331
  this._sheetEl.setAttribute('aria-label', ADW_ABOUT_DIALOG_LABELS.dialogTitle);
271
332
 
333
+ // The template's `toast_overlay`, around the navigation view: "Copied to
334
+ // clipboard" is shown inside the sheet.
335
+ this._toastOverlay = document.createElement('adw-toast-overlay') as AdwToastOverlay;
336
+ this._sheetEl.appendChild(this._toastOverlay);
337
+
272
338
  this.replaceChildren(this._scrimEl, this._sheetEl);
273
339
 
274
340
  // The role, `aria-modal`, Escape, the Tab trap and the return-focus. No
@@ -286,8 +352,19 @@ export class AdwAboutDialog extends HTMLElement {
286
352
  }
287
353
 
288
354
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
289
- if (!this._initialized) return;
290
355
  if (oldValue === newValue) return;
356
+ // Before the guard: the heading reads `version` as it is when the NOTES change.
357
+ if (name === 'release-notes' || name === 'release-notes-version') {
358
+ this._releaseNotesSegments = releaseNotesBuffer(
359
+ {
360
+ releaseNotes: this.releaseNotes,
361
+ releaseNotesVersion: this.releaseNotesVersion,
362
+ version: this.version,
363
+ },
364
+ ADW_ABOUT_DIALOG_LABELS,
365
+ ).segments;
366
+ }
367
+ if (!this._initialized) return;
291
368
  if (name === 'open') {
292
369
  this._syncOpen();
293
370
  this.dispatchEvent(new CustomEvent('notify::open', { bubbles: true, detail: { open: this.open } }));
@@ -344,20 +421,31 @@ export class AdwAboutDialog extends HTMLElement {
344
421
  website: this.website,
345
422
  supportUrl: this.supportUrl,
346
423
  issueUrl: this.issueUrl,
424
+ debugInfo: this.debugInfo,
425
+ releaseNotes: this.releaseNotes,
426
+ hasCustomLinks: this._links.length > 0,
347
427
  hasCredits: sections.length > 0,
348
428
  hasLegal: this._hasLegal(),
349
429
  });
350
430
 
431
+ this._navView?.remove();
351
432
  this._navView = document.createElement('adw-navigation-view');
352
433
  this._navView.append(this._buildMainPage(visibility));
353
434
 
354
- // The Details page exists exactly when its row does — `details_row` is
435
+ // A subpage exists exactly when its row does — `details_row` is
355
436
  // `has_comments || show_links`, i.e. "the page has content".
437
+ if (visibility.whatsNewRow) this._navView.append(this._buildWhatsNewPage());
356
438
  if (visibility.detailsRow) this._navView.append(this._buildDetailsPage(visibility));
439
+ if (visibility.troubleshootingRow) {
440
+ this._navView.append(this._buildTroubleshootingPage(), this._buildDebugInfoPage());
441
+ }
357
442
  if (visibility.creditsRow) this._navView.append(this._buildCreditsPage(sections));
358
443
  if (visibility.legalRow) this._navView.append(this._buildLegalPage());
359
444
 
360
- this._sheetEl.replaceChildren(this._navView);
445
+ // Straight into the overlay's content box: appended to the overlay itself, the view
446
+ // is re-homed a microtask later, and that move drops the focus `present` put in it.
447
+ const content = this._toastOverlay.querySelector(':scope > .adw-toast-overlay-content');
448
+ (content ?? this._toastOverlay).appendChild(this._navView);
361
449
 
362
450
  this.classList.toggle('open', this.open);
363
451
  }
@@ -471,6 +559,9 @@ export class AdwAboutDialog extends HTMLElement {
471
559
  // support_group, credits_legal_group) — groups, not one list, and the
472
560
  // stylesheet already spaces consecutive `.adw-about-dialog-rows` apart.
473
561
  const detailsGroupRows: HTMLElement[] = [];
562
+ if (visibility.whatsNewRow) {
563
+ detailsGroupRows.push(this._buildNavRow(rowLabel('whatsNewRow'), 'whatsnew'));
564
+ }
474
565
  if (visibility.detailsRow) {
475
566
  detailsGroupRows.push(this._buildNavRow(rowLabel('detailsRow'), 'details'));
476
567
  }
@@ -485,6 +576,9 @@ export class AdwAboutDialog extends HTMLElement {
485
576
  if (visibility.issueRow) {
486
577
  supportGroupRows.push(this._buildLinkRow(rowLabel('issueRow'), this.issueUrl));
487
578
  }
579
+ if (visibility.troubleshootingRow) {
580
+ supportGroupRows.push(this._buildNavRow(rowLabel('troubleshootingRow'), 'troubleshooting'));
581
+ }
488
582
 
489
583
  const creditsLegalRows: HTMLElement[] = [];
490
584
  if (visibility.creditsRow) creditsLegalRows.push(this._buildNavRow(rowLabel('creditsRow'), 'credits'));
@@ -559,12 +653,61 @@ export class AdwAboutDialog extends HTMLElement {
559
653
  if (visibility.detailsWebsiteRow) {
560
654
  rows.push(this._buildLinkRow(rowLabel('websiteRow'), this.website));
561
655
  }
656
+ for (const link of this._links) rows.push(this._buildLinkRow(stripMnemonic(link.title), link.url));
562
657
  body.appendChild(this._buildGroup('links', rows));
563
658
  }
564
659
 
565
660
  return page;
566
661
  }
567
662
 
663
+ /** The release-notes buffer as tagged runs, white space kept (a GtkTextView). */
664
+ private _buildWhatsNewPage(): HTMLElement {
665
+ const { page, body } = this._buildPage('whatsnew', ADW_ABOUT_DIALOG_LABELS.whatsNewPage, false);
666
+ const notes = document.createElement('div');
667
+ notes.className = 'adw-about-dialog-release-notes';
668
+ for (const segment of this._releaseNotesSegments) {
669
+ const span = document.createElement('span');
670
+ if (segment.tag !== null) span.dataset['tag'] = segment.tag;
671
+ span.textContent = segment.text;
672
+ notes.appendChild(span);
673
+ }
674
+ body.appendChild(notes);
675
+ return page;
676
+ }
677
+
678
+ private _buildTroubleshootingPage(): HTMLElement {
679
+ const { page, body } = this._buildPage('troubleshooting', ADW_ABOUT_DIALOG_LABELS.troubleshootingPage, false);
680
+ const intro = document.createElement('p');
681
+ intro.className = 'adw-about-dialog-comments';
682
+ intro.textContent = ADW_ABOUT_DIALOG_LABELS.troubleshootingIntro;
683
+ body.append(intro, this._buildGroup(null, [this._buildNavRow(rowLabel('debugInfoRow'), 'debuginfo')]));
684
+ return page;
685
+ }
686
+
687
+ /** The debug text and Copy Text — the `about.copy-property` action on `debug-info`. */
688
+ private _buildDebugInfoPage(): HTMLElement {
689
+ const { page, body } = this._buildPage('debuginfo', ADW_ABOUT_DIALOG_LABELS.debugInfoPage, false);
690
+ const text = document.createElement('pre');
691
+ text.className = 'adw-about-dialog-debug-info';
692
+ text.textContent = this.debugInfo;
693
+
694
+ const copy = document.createElement('button');
695
+ copy.type = 'button';
696
+ copy.className = 'adw-button pill adw-about-dialog-copy';
697
+ copy.textContent = rowLabel('copyText');
698
+ copy.addEventListener('click', () => this._copyProperty(this.debugInfo));
699
+
700
+ body.append(text, copy);
701
+ return page;
702
+ }
703
+
704
+ /** `copy_property_cb`: an empty value copies nothing and shows no toast. */
705
+ private _copyProperty(value: string): void {
706
+ if (value.length === 0) return;
707
+ void Promise.resolve(webClipboardHost.writeText(value)).catch(() => undefined);
708
+ this._toastOverlay.add_toast(new Toast({ title: ADW_ABOUT_DIALOG_LABELS.copiedToast }));
709
+ }
710
+
568
711
  private _buildLinkRow(title: string, uri: string): HTMLElement {
569
712
  const row = document.createElement('adw-action-row');
570
713
  row.setAttribute('title', title);
@@ -31,6 +31,7 @@ import { installElementApi } from '../gobject-elements.js';
31
31
  import type { DispatchedSignals } from '../signals.js';
32
32
  import { type AdwRowActivation, attachRowActivation } from './row-activation.js';
33
33
  import { applyRowLineClamp, parseRowLinesAttribute } from '../row-line-clamp.js';
34
+ import { TooltipElement } from '../widget-element.js';
34
35
 
35
36
  /**
36
37
  * Attributes whose change means the activatable widget's sensitivity may have
@@ -45,7 +46,7 @@ function isSensitive(widget: HTMLElement): boolean {
45
46
  return widget.getAttribute('aria-disabled') !== 'true';
46
47
  }
47
48
 
48
- export class AdwActionRow extends HTMLElement {
49
+ export class AdwActionRow extends TooltipElement {
49
50
  /** The GTK signals this element dispatches, each with the DOM event it arrives as (ADR 0093). */
50
51
  static readonly signals: DispatchedSignals = { activated: 'activated' };
51
52