@gjsify/adwaita-web 0.53.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/dist/adwaita-web.css +8070 -3037
  2. package/dist/adwaita-web.css.map +1 -1
  3. package/lib/types/adw-application-window.spec.d.ts +1 -0
  4. package/lib/types/adw-bin.spec.d.ts +1 -0
  5. package/lib/types/adw-breakpoint-bin.spec.d.ts +1 -0
  6. package/lib/types/adw-clamp-scrollable.spec.d.ts +1 -0
  7. package/lib/types/adw-multi-layout-view.spec.d.ts +1 -0
  8. package/lib/types/adw-preferences-row.spec.d.ts +1 -0
  9. package/lib/types/adw-shortcuts.spec.d.ts +1 -0
  10. package/lib/types/adw-tab-bar.spec.d.ts +1 -0
  11. package/lib/types/adw-tab-button.spec.d.ts +1 -0
  12. package/lib/types/adw-tab-overview.spec.d.ts +1 -0
  13. package/lib/types/adw-view-switcher-sidebar.spec.d.ts +1 -0
  14. package/lib/types/adw-window.spec.d.ts +1 -0
  15. package/lib/types/breakpoints.d.ts +14 -3
  16. package/lib/types/construct-vectors.spec.d.ts +1 -0
  17. package/lib/types/elements/adw-application-window.d.ts +27 -0
  18. package/lib/types/elements/adw-bin.d.ts +17 -0
  19. package/lib/types/elements/adw-breakpoint-bin.d.ts +67 -0
  20. package/lib/types/elements/adw-clamp-scrollable.d.ts +38 -0
  21. package/lib/types/elements/adw-dialog.d.ts +10 -0
  22. package/lib/types/elements/adw-layout-slot.d.ts +19 -0
  23. package/lib/types/elements/adw-multi-layout-view.d.ts +101 -0
  24. package/lib/types/elements/adw-preferences-row.d.ts +31 -0
  25. package/lib/types/elements/adw-shortcuts-dialog.d.ts +13 -0
  26. package/lib/types/elements/adw-shortcuts-item.d.ts +36 -0
  27. package/lib/types/elements/adw-shortcuts-section.d.ts +14 -0
  28. package/lib/types/elements/adw-sidebar.d.ts +5 -0
  29. package/lib/types/elements/adw-switch-row.d.ts +3 -0
  30. package/lib/types/elements/adw-tab-bar.d.ts +108 -0
  31. package/lib/types/elements/adw-tab-button.d.ts +32 -0
  32. package/lib/types/elements/adw-tab-overview.d.ts +199 -0
  33. package/lib/types/elements/adw-tab-view.d.ts +19 -23
  34. package/lib/types/elements/adw-view-switcher-sidebar.d.ts +84 -0
  35. package/lib/types/elements/adw-window.d.ts +40 -0
  36. package/lib/types/elements/gtk-about-dialog.d.ts +146 -0
  37. package/lib/types/elements/gtk-application-window.d.ts +34 -0
  38. package/lib/types/elements/gtk-aspect-frame.d.ts +27 -0
  39. package/lib/types/elements/gtk-button.d.ts +9 -0
  40. package/lib/types/elements/gtk-calendar.d.ts +159 -0
  41. package/lib/types/elements/gtk-center-box.d.ts +39 -0
  42. package/lib/types/elements/gtk-color-dialog-button.d.ts +69 -0
  43. package/lib/types/elements/gtk-column-view.d.ts +50 -0
  44. package/lib/types/elements/gtk-drag-icon.d.ts +78 -0
  45. package/lib/types/elements/gtk-drawing-area.d.ts +95 -0
  46. package/lib/types/elements/gtk-editable-label.d.ts +33 -0
  47. package/lib/types/elements/gtk-emoji-chooser.d.ts +84 -0
  48. package/lib/types/elements/gtk-entry.d.ts +20 -1
  49. package/lib/types/elements/gtk-expander.d.ts +49 -0
  50. package/lib/types/elements/gtk-fixed.d.ts +13 -0
  51. package/lib/types/elements/gtk-flow-box-child.d.ts +14 -0
  52. package/lib/types/elements/gtk-flow-box.d.ts +87 -0
  53. package/lib/types/elements/gtk-font-dialog-button.d.ts +83 -0
  54. package/lib/types/elements/gtk-frame.d.ts +24 -0
  55. package/lib/types/elements/gtk-gl-area.d.ts +136 -0
  56. package/lib/types/elements/gtk-graphics-offload.d.ts +24 -0
  57. package/lib/types/elements/gtk-grid-view.d.ts +39 -0
  58. package/lib/types/elements/gtk-grid.d.ts +27 -0
  59. package/lib/types/elements/gtk-header-bar.d.ts +60 -0
  60. package/lib/types/elements/gtk-inscription.d.ts +64 -0
  61. package/lib/types/elements/gtk-label.d.ts +3 -0
  62. package/lib/types/elements/gtk-level-bar.d.ts +59 -0
  63. package/lib/types/elements/gtk-link-button.d.ts +29 -0
  64. package/lib/types/elements/gtk-list-box-row.d.ts +54 -0
  65. package/lib/types/elements/gtk-list-box.d.ts +100 -0
  66. package/lib/types/elements/gtk-list-view.d.ts +73 -0
  67. package/lib/types/elements/gtk-media-controls.d.ts +142 -0
  68. package/lib/types/elements/gtk-notebook.d.ts +148 -0
  69. package/lib/types/elements/gtk-overlay.d.ts +22 -0
  70. package/lib/types/elements/gtk-page-setup-unix-dialog.d.ts +87 -0
  71. package/lib/types/elements/gtk-paned.d.ts +121 -0
  72. package/lib/types/elements/gtk-password-entry.d.ts +27 -0
  73. package/lib/types/elements/gtk-picture.d.ts +66 -0
  74. package/lib/types/elements/gtk-popover-bin.d.ts +82 -0
  75. package/lib/types/elements/gtk-popover-menu-bar.d.ts +66 -0
  76. package/lib/types/elements/gtk-popover-menu.d.ts +83 -0
  77. package/lib/types/elements/gtk-popover.d.ts +28 -3
  78. package/lib/types/elements/gtk-print-unix-dialog.d.ts +167 -0
  79. package/lib/types/elements/gtk-revealer.d.ts +55 -0
  80. package/lib/types/elements/gtk-scale-button.d.ts +59 -0
  81. package/lib/types/elements/gtk-scale.d.ts +98 -0
  82. package/lib/types/elements/gtk-scrollbar.d.ts +124 -0
  83. package/lib/types/elements/gtk-scrolled-window.d.ts +121 -0
  84. package/lib/types/elements/gtk-search-bar.d.ts +39 -0
  85. package/lib/types/elements/gtk-search-entry.d.ts +27 -0
  86. package/lib/types/elements/gtk-separator.d.ts +10 -0
  87. package/lib/types/elements/gtk-spin-button.d.ts +94 -0
  88. package/lib/types/elements/gtk-spinner.d.ts +14 -0
  89. package/lib/types/elements/gtk-stack-sidebar.d.ts +43 -0
  90. package/lib/types/elements/gtk-stack-switcher.d.ts +58 -0
  91. package/lib/types/elements/gtk-stack.d.ts +154 -0
  92. package/lib/types/elements/gtk-switch.d.ts +4 -1
  93. package/lib/types/elements/gtk-text-view.d.ts +62 -0
  94. package/lib/types/elements/gtk-text.d.ts +45 -0
  95. package/lib/types/elements/gtk-toggle-button.d.ts +45 -0
  96. package/lib/types/elements/gtk-tree-expander.d.ts +38 -0
  97. package/lib/types/elements/gtk-video.d.ts +97 -0
  98. package/lib/types/elements/gtk-viewport.d.ts +84 -0
  99. package/lib/types/elements/gtk-window-controls.d.ts +80 -0
  100. package/lib/types/elements/gtk-window-handle.d.ts +39 -0
  101. package/lib/types/elements/gtk-window.d.ts +97 -0
  102. package/lib/types/elements/justification.d.ts +2 -0
  103. package/lib/types/elements/popover-menu.d.ts +18 -0
  104. package/lib/types/elements/roving-focus.d.ts +29 -1
  105. package/lib/types/emoji-data.d.ts +38 -0
  106. package/lib/types/font-description.d.ts +96 -0
  107. package/lib/types/gtk-about-dialog.spec.d.ts +1 -0
  108. package/lib/types/gtk-action-bar.spec.d.ts +1 -0
  109. package/lib/types/gtk-application-window.spec.d.ts +1 -0
  110. package/lib/types/gtk-aspect-frame.spec.d.ts +1 -0
  111. package/lib/types/gtk-calendar.spec.d.ts +1 -0
  112. package/lib/types/gtk-center-box.spec.d.ts +1 -0
  113. package/lib/types/gtk-color-dialog-button.spec.d.ts +1 -0
  114. package/lib/types/gtk-column-view.spec.d.ts +1 -0
  115. package/lib/types/gtk-drag-icon.spec.d.ts +1 -0
  116. package/lib/types/gtk-drawing-area.spec.d.ts +1 -0
  117. package/lib/types/gtk-editable-label.spec.d.ts +1 -0
  118. package/lib/types/gtk-emoji-chooser.spec.d.ts +1 -0
  119. package/lib/types/gtk-expander.spec.d.ts +1 -0
  120. package/lib/types/gtk-fixed.spec.d.ts +1 -0
  121. package/lib/types/gtk-flow-box.spec.d.ts +1 -0
  122. package/lib/types/gtk-font-dialog-button.spec.d.ts +1 -0
  123. package/lib/types/gtk-frame.spec.d.ts +1 -0
  124. package/lib/types/gtk-gl-area.spec.d.ts +1 -0
  125. package/lib/types/gtk-graphics-offload.spec.d.ts +1 -0
  126. package/lib/types/gtk-grid-view.spec.d.ts +1 -0
  127. package/lib/types/gtk-grid.spec.d.ts +1 -0
  128. package/lib/types/gtk-header-bar.spec.d.ts +1 -0
  129. package/lib/types/gtk-inscription.spec.d.ts +1 -0
  130. package/lib/types/gtk-level-bar.spec.d.ts +1 -0
  131. package/lib/types/gtk-link-button.spec.d.ts +1 -0
  132. package/lib/types/gtk-list-box.spec.d.ts +1 -0
  133. package/lib/types/gtk-list-view.spec.d.ts +1 -0
  134. package/lib/types/gtk-media-controls.spec.d.ts +1 -0
  135. package/lib/types/gtk-notebook.spec.d.ts +1 -0
  136. package/lib/types/gtk-overlay.spec.d.ts +1 -0
  137. package/lib/types/gtk-paned.spec.d.ts +1 -0
  138. package/lib/types/gtk-password-entry.spec.d.ts +1 -0
  139. package/lib/types/gtk-picture.spec.d.ts +1 -0
  140. package/lib/types/gtk-popover-bin.spec.d.ts +1 -0
  141. package/lib/types/gtk-popover-menu-bar.spec.d.ts +1 -0
  142. package/lib/types/gtk-popover-menu.spec.d.ts +1 -0
  143. package/lib/types/gtk-popover-role.spec.d.ts +1 -0
  144. package/lib/types/gtk-popover.spec.d.ts +1 -0
  145. package/lib/types/gtk-print-dialogs.spec.d.ts +1 -0
  146. package/lib/types/gtk-revealer.spec.d.ts +1 -0
  147. package/lib/types/gtk-scale-button.spec.d.ts +1 -0
  148. package/lib/types/gtk-scale.spec.d.ts +1 -0
  149. package/lib/types/gtk-scrollbar.spec.d.ts +1 -0
  150. package/lib/types/gtk-scrolled-window.spec.d.ts +1 -0
  151. package/lib/types/gtk-search-bar.spec.d.ts +1 -0
  152. package/lib/types/gtk-search-entry.spec.d.ts +1 -0
  153. package/lib/types/gtk-separator.spec.d.ts +1 -0
  154. package/lib/types/gtk-spin-button.spec.d.ts +1 -0
  155. package/lib/types/gtk-spinner.spec.d.ts +1 -0
  156. package/lib/types/gtk-stack-sidebar.spec.d.ts +1 -0
  157. package/lib/types/gtk-stack-switcher.spec.d.ts +1 -0
  158. package/lib/types/gtk-stack.spec.d.ts +1 -0
  159. package/lib/types/gtk-text-view.spec.d.ts +1 -0
  160. package/lib/types/gtk-text.spec.d.ts +1 -0
  161. package/lib/types/gtk-toggle-button.spec.d.ts +1 -0
  162. package/lib/types/gtk-tree-expander.spec.d.ts +1 -0
  163. package/lib/types/gtk-video.spec.d.ts +1 -0
  164. package/lib/types/gtk-viewport.spec.d.ts +1 -0
  165. package/lib/types/gtk-window-controls.spec.d.ts +1 -0
  166. package/lib/types/gtk-window-handle.spec.d.ts +1 -0
  167. package/lib/types/gtk-window.spec.d.ts +1 -0
  168. package/lib/types/index.d.ts +4 -1
  169. package/lib/types/list-view-dom.d.ts +44 -0
  170. package/lib/types/namespace/adw.d.ts +12 -0
  171. package/lib/types/namespace/gtk.d.ts +61 -0
  172. package/lib/types/page-setup.d.ts +100 -0
  173. package/lib/types/scroll-shading.d.ts +15 -1
  174. package/lib/types/shared-tree-builder.d.ts +30 -2
  175. package/lib/types/signals.d.ts +4 -0
  176. package/lib/types/styles.generated.d.ts +1 -1
  177. package/lib/types/tab-chip.d.ts +73 -0
  178. package/lib/types/template-classes.d.ts +11 -0
  179. package/package.json +12 -8
  180. package/scss/_action_row.scss +2 -2
  181. package/scss/_application_window.scss +26 -0
  182. package/scss/_aspect_frame.scss +25 -0
  183. package/scss/_bin.scss +26 -0
  184. package/scss/_button.scss +45 -0
  185. package/scss/_calendar.scss +176 -0
  186. package/scss/_center_box.scss +25 -0
  187. package/scss/_checks.scss +6 -1
  188. package/scss/_clamp_scrollable.scss +28 -0
  189. package/scss/_color_button.scss +67 -0
  190. package/scss/_column_view.scss +126 -0
  191. package/scss/_drag_icon.scss +55 -0
  192. package/scss/_drawing.scss +85 -0
  193. package/scss/_emoji_chooser.scss +213 -0
  194. package/scss/_entry.scss +13 -5
  195. package/scss/_entry_row.scss +1 -1
  196. package/scss/_expander.scss +113 -0
  197. package/scss/_fixed.scss +29 -0
  198. package/scss/_flow_box.scss +94 -0
  199. package/scss/_font_button.scss +63 -0
  200. package/scss/_frame.scss +41 -0
  201. package/scss/_grid.scss +19 -0
  202. package/scss/_grid_view.scss +46 -0
  203. package/scss/_gtk_about_dialog.scss +186 -0
  204. package/scss/_headerbar.scss +132 -0
  205. package/scss/_icons.generated.scss +186 -0
  206. package/scss/_inscription.scss +125 -0
  207. package/scss/_level_bar.scss +190 -0
  208. package/scss/_link.scss +82 -0
  209. package/scss/_list_box.scss +88 -0
  210. package/scss/_list_view.scss +96 -0
  211. package/scss/_media_controls.scss +139 -0
  212. package/scss/_overlay.scss +68 -0
  213. package/scss/_paned.scss +130 -0
  214. package/scss/_password_entry.scss +83 -0
  215. package/scss/_picture.scss +80 -0
  216. package/scss/_popover_bin.scss +53 -0
  217. package/scss/_popover_menu_bar.scss +104 -0
  218. package/scss/_preferences_row.scss +51 -0
  219. package/scss/_print_dialogs.scss +328 -0
  220. package/scss/_reset.scss +21 -19
  221. package/scss/_revealer.scss +37 -0
  222. package/scss/_row.scss +20 -5
  223. package/scss/_scale.scss +298 -0
  224. package/scss/_scale_button.scss +167 -0
  225. package/scss/_scrollbar.scss +230 -0
  226. package/scss/_scrolled_window.scss +131 -0
  227. package/scss/_search_bar.scss +118 -0
  228. package/scss/_search_entry.scss +86 -0
  229. package/scss/_separator.scss +44 -0
  230. package/scss/_shortcuts_dialog.scss +100 -0
  231. package/scss/_spin_button.scss +172 -0
  232. package/scss/_spin_row.scss +56 -8
  233. package/scss/_spinner.scss +85 -4
  234. package/scss/_stack.scss +729 -0
  235. package/scss/_switch.scss +13 -5
  236. package/scss/_switch_row.scss +10 -0
  237. package/scss/_tab_bar.scss +317 -0
  238. package/scss/_tab_button.scss +98 -0
  239. package/scss/_tab_overview.scss +483 -0
  240. package/scss/_text.scss +182 -0
  241. package/scss/_theme.scss +1 -1
  242. package/scss/_tree_expander.scss +62 -0
  243. package/scss/_variables.scss +43 -21
  244. package/scss/_video.scss +146 -0
  245. package/scss/_view_switcher_sidebar.scss +112 -0
  246. package/scss/_viewport.scss +50 -0
  247. package/scss/_window.scss +118 -1
  248. package/scss/_window_handle.scss +20 -0
  249. package/scss/adwaita-skin.scss +109 -0
  250. package/src/adw-action-rows.spec.ts +76 -0
  251. package/src/adw-application-window.spec.ts +118 -0
  252. package/src/adw-bin.spec.ts +75 -0
  253. package/src/adw-breakpoint-bin.spec.ts +324 -0
  254. package/src/adw-clamp-scrollable.spec.ts +189 -0
  255. package/src/adw-multi-layout-view.spec.ts +243 -0
  256. package/src/adw-preferences-row.spec.ts +164 -0
  257. package/src/adw-row-state.spec.ts +142 -0
  258. package/src/adw-shortcuts.spec.ts +155 -0
  259. package/src/adw-tab-bar.spec.ts +287 -0
  260. package/src/adw-tab-button.spec.ts +101 -0
  261. package/src/adw-tab-overview.spec.ts +443 -0
  262. package/src/adw-view-switcher-sidebar.spec.ts +281 -0
  263. package/src/adw-window.spec.ts +129 -0
  264. package/src/breakpoints.ts +25 -8
  265. package/src/capabilities.d.mts +3 -0
  266. package/src/capabilities.mjs +18 -0
  267. package/src/connect-lifecycle.spec.ts +12 -0
  268. package/src/construct-vectors.spec.ts +175 -0
  269. package/src/elements/adw-application-window.ts +154 -0
  270. package/src/elements/adw-bin.ts +101 -0
  271. package/src/elements/adw-breakpoint-bin.ts +287 -0
  272. package/src/elements/adw-clamp-scrollable.ts +207 -0
  273. package/src/elements/adw-dialog.ts +19 -0
  274. package/src/elements/adw-layout-slot.ts +95 -0
  275. package/src/elements/adw-multi-layout-view.ts +326 -0
  276. package/src/elements/adw-preferences-row.ts +150 -0
  277. package/src/elements/adw-shortcuts-dialog.ts +52 -0
  278. package/src/elements/adw-shortcuts-item.ts +171 -0
  279. package/src/elements/adw-shortcuts-section.ts +86 -0
  280. package/src/elements/adw-sidebar.ts +42 -3
  281. package/src/elements/adw-switch-row.ts +28 -1
  282. package/src/elements/adw-tab-bar.ts +529 -0
  283. package/src/elements/adw-tab-button.ts +194 -0
  284. package/src/elements/adw-tab-overview.ts +1011 -0
  285. package/src/elements/adw-tab-view.ts +66 -145
  286. package/src/elements/adw-toggle-group.ts +20 -5
  287. package/src/elements/adw-view-stack.ts +18 -0
  288. package/src/elements/adw-view-switcher-sidebar.ts +332 -0
  289. package/src/elements/adw-window.ts +185 -11
  290. package/src/elements/checks.ts +35 -8
  291. package/src/elements/gtk-about-dialog.ts +811 -0
  292. package/src/elements/gtk-application-window.ts +108 -0
  293. package/src/elements/gtk-aspect-frame.ts +160 -0
  294. package/src/elements/gtk-button.ts +12 -0
  295. package/src/elements/gtk-calendar.ts +757 -0
  296. package/src/elements/gtk-center-box.ts +184 -0
  297. package/src/elements/gtk-color-dialog-button.ts +278 -0
  298. package/src/elements/gtk-column-view.ts +320 -0
  299. package/src/elements/gtk-drag-icon.ts +257 -0
  300. package/src/elements/gtk-drawing-area.ts +303 -0
  301. package/src/elements/gtk-editable-label.ts +204 -0
  302. package/src/elements/gtk-emoji-chooser.ts +542 -0
  303. package/src/elements/gtk-entry.ts +39 -5
  304. package/src/elements/gtk-expander.ts +301 -0
  305. package/src/elements/gtk-fixed.ts +99 -0
  306. package/src/elements/gtk-flow-box-child.ts +68 -0
  307. package/src/elements/gtk-flow-box.ts +480 -0
  308. package/src/elements/gtk-font-dialog-button.ts +432 -0
  309. package/src/elements/gtk-frame.ts +174 -0
  310. package/src/elements/gtk-gl-area.ts +476 -0
  311. package/src/elements/gtk-graphics-offload.ts +130 -0
  312. package/src/elements/gtk-grid-view.ts +168 -0
  313. package/src/elements/gtk-grid.ts +127 -0
  314. package/src/elements/gtk-header-bar.ts +273 -0
  315. package/src/elements/gtk-inscription.ts +387 -0
  316. package/src/elements/gtk-label.ts +19 -11
  317. package/src/elements/gtk-level-bar.ts +323 -0
  318. package/src/elements/gtk-link-button.ts +138 -0
  319. package/src/elements/gtk-list-box-row.ts +195 -0
  320. package/src/elements/gtk-list-box.ts +413 -0
  321. package/src/elements/gtk-list-view.ts +370 -0
  322. package/src/elements/gtk-media-controls.ts +509 -0
  323. package/src/elements/gtk-notebook.ts +664 -0
  324. package/src/elements/gtk-overlay.ts +149 -0
  325. package/src/elements/gtk-page-setup-unix-dialog.ts +420 -0
  326. package/src/elements/gtk-paned.ts +597 -0
  327. package/src/elements/gtk-password-entry.ts +170 -0
  328. package/src/elements/gtk-picture.ts +254 -0
  329. package/src/elements/gtk-popover-bin.ts +332 -0
  330. package/src/elements/gtk-popover-menu-bar.ts +355 -0
  331. package/src/elements/gtk-popover-menu.ts +339 -0
  332. package/src/elements/gtk-popover.ts +92 -10
  333. package/src/elements/gtk-print-unix-dialog.ts +989 -0
  334. package/src/elements/gtk-progress-bar.ts +24 -11
  335. package/src/elements/gtk-revealer.ts +406 -0
  336. package/src/elements/gtk-scale-button.ts +358 -0
  337. package/src/elements/gtk-scale.ts +492 -0
  338. package/src/elements/gtk-scrollbar.ts +528 -0
  339. package/src/elements/gtk-scrolled-window.ts +642 -0
  340. package/src/elements/gtk-search-bar.ts +200 -0
  341. package/src/elements/gtk-search-entry.ts +172 -0
  342. package/src/elements/gtk-separator.ts +52 -0
  343. package/src/elements/gtk-spin-button.ts +475 -0
  344. package/src/elements/gtk-spinner.ts +126 -0
  345. package/src/elements/gtk-stack-sidebar.ts +212 -0
  346. package/src/elements/gtk-stack-switcher.ts +279 -0
  347. package/src/elements/gtk-stack.ts +748 -0
  348. package/src/elements/gtk-switch.ts +52 -19
  349. package/src/elements/gtk-text-view.ts +290 -0
  350. package/src/elements/gtk-text.ts +219 -0
  351. package/src/elements/gtk-toggle-button.ts +239 -0
  352. package/src/elements/gtk-tree-expander.ts +243 -0
  353. package/src/elements/gtk-video.ts +423 -0
  354. package/src/elements/gtk-viewport.ts +277 -0
  355. package/src/elements/gtk-window-controls.ts +341 -0
  356. package/src/elements/gtk-window-handle.ts +221 -0
  357. package/src/elements/gtk-window.ts +366 -0
  358. package/src/elements/justification.ts +24 -0
  359. package/src/elements/popover-menu.ts +24 -0
  360. package/src/elements/roving-focus.ts +53 -21
  361. package/src/emoji-data.ts +577 -0
  362. package/src/entry-rows.spec.ts +31 -0
  363. package/src/font-description.ts +238 -0
  364. package/src/gtk-about-dialog.spec.ts +250 -0
  365. package/src/gtk-action-bar.spec.ts +89 -0
  366. package/src/gtk-application-window.spec.ts +107 -0
  367. package/src/gtk-aspect-frame.spec.ts +114 -0
  368. package/src/gtk-calendar.spec.ts +589 -0
  369. package/src/gtk-center-box.spec.ts +125 -0
  370. package/src/gtk-color-dialog-button.spec.ts +141 -0
  371. package/src/gtk-column-view.spec.ts +154 -0
  372. package/src/gtk-drag-icon.spec.ts +190 -0
  373. package/src/gtk-drawing-area.spec.ts +211 -0
  374. package/src/gtk-editable-label.spec.ts +190 -0
  375. package/src/gtk-emoji-chooser.spec.ts +173 -0
  376. package/src/gtk-entry.spec.ts +23 -0
  377. package/src/gtk-expander.spec.ts +170 -0
  378. package/src/gtk-fixed.spec.ts +97 -0
  379. package/src/gtk-flow-box.spec.ts +289 -0
  380. package/src/gtk-font-dialog-button.spec.ts +166 -0
  381. package/src/gtk-frame.spec.ts +119 -0
  382. package/src/gtk-gl-area.spec.ts +361 -0
  383. package/src/gtk-graphics-offload.spec.ts +119 -0
  384. package/src/gtk-grid-view.spec.ts +106 -0
  385. package/src/gtk-grid.spec.ts +122 -0
  386. package/src/gtk-header-bar.spec.ts +202 -0
  387. package/src/gtk-inscription.spec.ts +235 -0
  388. package/src/gtk-level-bar.spec.ts +199 -0
  389. package/src/gtk-link-button.spec.ts +117 -0
  390. package/src/gtk-list-box.spec.ts +422 -0
  391. package/src/gtk-list-view.spec.ts +203 -0
  392. package/src/gtk-media-controls.spec.ts +295 -0
  393. package/src/gtk-notebook.spec.ts +546 -0
  394. package/src/gtk-overlay.spec.ts +141 -0
  395. package/src/gtk-paned.spec.ts +267 -0
  396. package/src/gtk-password-entry.spec.ts +150 -0
  397. package/src/gtk-picture.spec.ts +172 -0
  398. package/src/gtk-popover-bin.spec.ts +229 -0
  399. package/src/gtk-popover-menu-bar.spec.ts +296 -0
  400. package/src/gtk-popover-menu.spec.ts +261 -0
  401. package/src/gtk-popover-role.spec.ts +138 -0
  402. package/src/gtk-popover.spec.ts +264 -0
  403. package/src/gtk-print-dialogs.spec.ts +251 -0
  404. package/src/gtk-revealer.spec.ts +164 -0
  405. package/src/gtk-scale-button.spec.ts +218 -0
  406. package/src/gtk-scale.spec.ts +213 -0
  407. package/src/gtk-scrollbar.spec.ts +244 -0
  408. package/src/gtk-scrolled-window.spec.ts +262 -0
  409. package/src/gtk-search-bar.spec.ts +179 -0
  410. package/src/gtk-search-entry.spec.ts +142 -0
  411. package/src/gtk-separator.spec.ts +74 -0
  412. package/src/gtk-spin-button.spec.ts +186 -0
  413. package/src/gtk-spinner.spec.ts +130 -0
  414. package/src/gtk-stack-sidebar.spec.ts +217 -0
  415. package/src/gtk-stack-switcher.spec.ts +249 -0
  416. package/src/gtk-stack.spec.ts +432 -0
  417. package/src/gtk-text-view.spec.ts +189 -0
  418. package/src/gtk-text.spec.ts +163 -0
  419. package/src/gtk-toggle-button.spec.ts +186 -0
  420. package/src/gtk-tree-expander.spec.ts +201 -0
  421. package/src/gtk-video.spec.ts +240 -0
  422. package/src/gtk-viewport.spec.ts +140 -0
  423. package/src/gtk-window-controls.spec.ts +232 -0
  424. package/src/gtk-window-handle.spec.ts +158 -0
  425. package/src/gtk-window.spec.ts +190 -0
  426. package/src/index.ts +9 -1
  427. package/src/keyboard-operable.spec.ts +33 -1
  428. package/src/list-view-dom.ts +121 -0
  429. package/src/namespace/adw.ts +12 -0
  430. package/src/namespace/gtk.ts +61 -0
  431. package/src/page-setup.ts +222 -0
  432. package/src/scroll-shading.ts +18 -1
  433. package/src/shared-tree-builder.ts +263 -21
  434. package/src/signals.ts +15 -0
  435. package/src/source-view/theme.ts +11 -5
  436. package/src/style-classes.spec.ts +9 -8
  437. package/src/styles.generated.ts +1 -1
  438. package/src/tab-chip.ts +200 -0
  439. package/src/template-classes.ts +45 -0
  440. package/src/test.browser.mts +152 -0
@@ -0,0 +1,295 @@
1
+ // DOM-level tests for <gtk-media-controls>. Two of the three blocks below test pure
2
+ // functions rather than DOM, and that is the point: `totem_time_to_string` is the one piece
3
+ // of non-trivial arithmetic in this widget, and getting its four shapes and its one-second
4
+ // bump wrong would produce a bar that reads plausibly and is off by one at every boundary.
5
+ // The DOM block covers what a string test cannot — that the bar is INSENSITIVE with no
6
+ // stream, which is the template's own `sensitive` 0.
7
+ import { describe, expect, it } from '@gjsify/unit';
8
+
9
+ import {
10
+ GtkMediaControls,
11
+ mediaTimeToString,
12
+ volumeIconFor,
13
+ type GtkMediaControls as GtkMediaControlsElement,
14
+ } from './elements/gtk-media-controls.js';
15
+
16
+ function mount(withMedia: boolean): { el: GtkMediaControlsElement; host: HTMLElement; media: HTMLVideoElement | null } {
17
+ const host = document.createElement('div');
18
+ document.body.appendChild(host);
19
+ const el = document.createElement('gtk-media-controls') as GtkMediaControlsElement;
20
+ let media: HTMLVideoElement | null = null;
21
+ if (withMedia) {
22
+ // The template's `controls_revealer` child: the controls bar lives INSIDE the video,
23
+ // so the nearest ancestor video is the stream.
24
+ const video = document.createElement('gtk-video');
25
+ media = document.createElement('video');
26
+ video.appendChild(media);
27
+ video.appendChild(el);
28
+ host.appendChild(video);
29
+ } else {
30
+ host.appendChild(el);
31
+ }
32
+ return { el, host, media };
33
+ }
34
+
35
+ export const GtkMediaControlsTest = async () => {
36
+ await describe('totem_time_to_string', async () => {
37
+ await it('formats elapsed time as m:ss, with the minutes UNPADDED', () => {
38
+ // gtkmediacontrols.c:126-131 — `g_strdup_printf ("%d:%02d", min, sec)`. The
39
+ // minutes are NOT `%02d`, so five minutes is "5:02" and not "05:02".
40
+ expect(mediaTimeToString(0)).toBe('0:00');
41
+ expect(mediaTimeToString(5)).toBe('0:05');
42
+ expect(mediaTimeToString(302)).toBe('5:02');
43
+ expect(mediaTimeToString(599)).toBe('9:59');
44
+ expect(mediaTimeToString(600)).toBe('10:00');
45
+ });
46
+
47
+ await it('only grows an HOURS field when there is an hour to show', () => {
48
+ // gtkmediacontrols.c:95 — `if (hour > 0 || force_hour)`. An eleven-minute video is
49
+ // "11:03", not "0:11:03"; the hour field appears at one hour.
50
+ expect(mediaTimeToString(660)).toBe('11:00');
51
+ expect(mediaTimeToString(3599)).toBe('59:59');
52
+ expect(mediaTimeToString(3600)).toBe('1:00:00');
53
+ expect(mediaTimeToString(9 * 3600 + 5 * 60 + 2)).toBe('9:05:02');
54
+ });
55
+
56
+ await it("the remaining forms are NEGATIVE, which is the C's own sign", () => {
57
+ // gtkmediacontrols.c:117-123 and :99-104 — "-%d:%02d" and "-%d:%02d:%02d".
58
+ expect(mediaTimeToString(302, true)).toBe('-5:03');
59
+ expect(mediaTimeToString(9 * 3600 + 302, true)).toBe('-9:05:03');
60
+ });
61
+
62
+ await it('BUMPS THE TOTAL BY ONE when showing what remains', () => {
63
+ // gtkmediacontrols.c:81-82 — `if (remaining) _time++;`, and `_time` is the whole
64
+ // count, not the seconds field. So the increment is only VISIBLE in the seconds
65
+ // when the input's own seconds are zero, and it CARRIES at 59 the way any
66
+ // increment does: 300 s of remaining is "-5:01", and 359 s is a flat "6:00".
67
+ // Reading the C's line as "+1 to the seconds" gives "-5:03" for 300 s, which is
68
+ // one second more than the count GTK actually holds.
69
+ expect(mediaTimeToString(300, true)).toBe('-5:01');
70
+ // 359 s + 1 s is 360 s, so the minute field carries to 6 and the sign stays —
71
+ // `remaining` is still set, and the short remaining form is `-%d:%02d`.
72
+ expect(mediaTimeToString(359, true)).toBe('-6:00');
73
+ expect(mediaTimeToString(0, true)).toBe('-0:01');
74
+ // An hour-carrying remainder carries too: 3599 s + 1 s is 3600, an hour, so the
75
+ // long format appears — the same hour branch the elapsed form takes, and the
76
+ // negative sign rides along with it because `remaining` is still set.
77
+ expect(mediaTimeToString(3599, true)).toBe('-1:00:00');
78
+ });
79
+
80
+ await it('force_hour is the only thing that puts hours on a short video', () => {
81
+ // gtkmediacontrols.c:95. GTK passes FALSE at every call site (:358, :364, :389),
82
+ // so nothing in the widget forces it — it is part of the function's contract.
83
+ expect(mediaTimeToString(302, false, true)).toBe('0:05:02');
84
+ expect(mediaTimeToString(302, true, true)).toBe('-0:05:03');
85
+ });
86
+
87
+ await it('truncates rather than rounds', () => {
88
+ // The C works in whole seconds throughout (`_time = (int) (usecs / G_USEC_PER_SEC)`,
89
+ // :79), so 59.9 s is the 59th second and not the 60th.
90
+ expect(mediaTimeToString(59.9)).toBe('0:59');
91
+ expect(mediaTimeToString(0.999)).toBe('0:00');
92
+ });
93
+
94
+ await it('passes a negative through as the C does, because the C guards upstream', () => {
95
+ // `totem_time_to_string` does NOT floor, and `%` in C99 keeps the sign of the
96
+ // dividend: for -5 the second is -5, `0 - (-5)` leaves `_time` at 0, and both the
97
+ // minute and the hour come out zero — so the C formats `%d:%02d` of 0 and -5, which
98
+ // is the nonsense `0:-5`. There is no clamp here to borrow, and adding one would be
99
+ // a fix the C does not have. The guard is in the CALLER instead
100
+ // (`duration > timestamp ? duration - timestamp : 0`, :364), which is where this
101
+ // port has it too — so a negative never reaches the formatter from the widget.
102
+ expect(mediaTimeToString(-5)).toBe('0:-5');
103
+ });
104
+ });
105
+
106
+ await describe('volumeIconFor', async () => {
107
+ await it('takes the four NAMES from GtkVolumeButton, in ITS order', () => {
108
+ // `GtkVolumeButton:use-symbolic` defaults TRUE and is a CONSTRUCT property, so
109
+ // `gtk_volume_button_set_property` installs `icons_symbolic` before anything
110
+ // reads it (gtkvolumebutton.c:142-148, :186-188). The names in play therefore
111
+ // CARRY the suffix — the template's own list at gtk/ui/gtkvolumebutton.ui:12-15
112
+ // is what a non-symbolic button would use, and it is not what GTK ends up with.
113
+ expect(volumeIconFor(0)).toBe('audio-volume-muted-symbolic');
114
+ expect(volumeIconFor(0.2)).toBe('audio-volume-low-symbolic');
115
+ expect(volumeIconFor(0.5)).toBe('audio-volume-medium-symbolic');
116
+ expect(volumeIconFor(1)).toBe('audio-volume-high-symbolic');
117
+ });
118
+
119
+ await it('splits at a HALF, because the icon list has four entries and two ends', () => {
120
+ // gtkscalebutton.c:1098-1101 — `step = (upper − lower) / (num_icons − 2)`, and the
121
+ // list's `[0]` and `[1]` are already spoken for by the exact `lower` and the exact
122
+ // `upper`. For `volume_adjustment`'s 0…1 that leaves a step of 0.5, NOT thirds.
123
+ // `high` is full scale alone; `low` is the lower half, `medium` the upper one.
124
+ expect(volumeIconFor(0.499)).toBe('audio-volume-low-symbolic');
125
+ expect(volumeIconFor(0.5)).toBe('audio-volume-medium-symbolic');
126
+ expect(volumeIconFor(0.999)).toBe('audio-volume-medium-symbolic');
127
+ // The C's `(guint)` cast truncates rather than rounds, so just under a half is
128
+ // still `low` and just under 1 is still `medium`.
129
+ expect(volumeIconFor(0.9)).toBe('audio-volume-medium-symbolic');
130
+ });
131
+
132
+ await it('is silent at the bottom whatever the range says, which is the muted arm', () => {
133
+ // gtkscalebutton.c:1088-1090 — `value == get_lower` takes `icons[0]`, and
134
+ // `icons[0]` of the volume button is the muted name. Out-of-range levels clamp to
135
+ // the adjustment's own ends, so a negative level is silence rather than the low name.
136
+ expect(volumeIconFor(-1)).toBe('audio-volume-muted-symbolic');
137
+ expect(volumeIconFor(0)).toBe('audio-volume-muted-symbolic');
138
+ });
139
+ });
140
+
141
+ await describe('<gtk-media-controls> the template tree', async () => {
142
+ await it('builds the six nodes ui/gtkmediacontrols.ui declares, in order', () => {
143
+ const { el, host } = mount(true);
144
+ const box = el.querySelector('.adw-media-controls-box') as HTMLElement;
145
+ expect(box.children[0].classList.contains('adw-media-controls-button')).toBe(true);
146
+ const timeBox = box.children[1] as HTMLElement;
147
+ expect(timeBox.querySelector('.adw-media-controls-time-label')).not.toBe(null);
148
+ expect(timeBox.querySelector('.adw-media-controls-seek-scale')).not.toBe(null);
149
+ expect(timeBox.querySelector('.adw-media-controls-duration-label')).not.toBe(null);
150
+ expect(box.children[2].classList.contains('adw-media-controls-volume-button')).toBe(true);
151
+ host.remove();
152
+ });
153
+
154
+ await it("carries the template's OWN accessibility labels", () => {
155
+ // ui/gtkmediacontrols.ui — `label` "Position" on the scale, `label` "Volume" on
156
+ // the volume button. Both are in the template's own <accessibility> blocks.
157
+ const { el, host } = mount(true);
158
+ const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
159
+ const volume = el.querySelector('.adw-media-controls-volume-button') as HTMLButtonElement;
160
+ expect(scale.getAttribute('aria-label')).toBe('Position');
161
+ expect(volume.getAttribute('aria-label')).toBe('Volume');
162
+ host.remove();
163
+ });
164
+
165
+ await it('puts the volume scale in a POPOVER, because GtkVolumeButton is one', () => {
166
+ const { el, host } = mount(true);
167
+ const popover = el.querySelector('.adw-media-controls-volume-popover') as HTMLElement;
168
+ const scale = popover.querySelector('.adw-media-controls-volume-scale') as HTMLInputElement;
169
+ expect(popover.hidden).toBe(true);
170
+ // volume_adjustment: upper 1, step-increment 0.1, value 1.
171
+ expect(scale.min).toBe('0');
172
+ expect(scale.max).toBe('1');
173
+ expect(scale.step).toBe('0.1');
174
+ expect(scale.value).toBe('1');
175
+ host.remove();
176
+ });
177
+ });
178
+
179
+ await describe('<gtk-media-controls> sensitivity', async () => {
180
+ await it("is INSENSITIVE with no stream, which is the template's `sensitive` 0", () => {
181
+ // ui/gtkmediacontrols.ui — `<property name="sensitive">0</property>` on the box.
182
+ // `gtk_media_controls_new()` therefore produces a bar you cannot press, and
183
+ // `gtk_media_controls_set_sensitive` is what re-enables it.
184
+ const { el, host } = mount(false);
185
+ expect(el.sensitive).toBe(false);
186
+ expect(el.classList.contains('insensitive')).toBe(true);
187
+ expect((el.querySelector('.adw-media-controls-button') as HTMLButtonElement).disabled).toBe(true);
188
+ expect((el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement).disabled).toBe(true);
189
+ host.remove();
190
+ });
191
+
192
+ await it('is live once a media element is adopted from the enclosing video', () => {
193
+ const { el, host } = mount(true);
194
+ expect(el.sensitive).toBe(true);
195
+ expect(el.classList.contains('insensitive')).toBe(false);
196
+ expect((el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement).disabled).toBe(false);
197
+ host.remove();
198
+ });
199
+ });
200
+
201
+ await describe('<gtk-media-controls> the seek scale', async () => {
202
+ await it("starts on the template's placeholder upper of 10, in SECONDS", () => {
203
+ // time_adjustment in ui/gtkmediacontrols.ui: upper 10, step-increment 1,
204
+ // page-increment 10. Every real duration arrives by resetting the range, so the
205
+ // numbers on the scale are seconds — and 10 is the pre-stream placeholder, not a
206
+ // range a user can seek within.
207
+ const { el, host } = mount(true);
208
+ const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
209
+ expect(scale.min).toBe('0');
210
+ expect(scale.max).toBe('10');
211
+ expect(scale.step).toBe('1');
212
+ host.remove();
213
+ });
214
+
215
+ await it('the DURATION label is hidden while there is no duration', () => {
216
+ // gtkmediacontrols.c:391 — `gtk_widget_set_visible (controls->duration_label,
217
+ // duration > 0)`. With no duration the POSITION label takes the elapsed time
218
+ // alone (:358-359), because there is no total to compare it against.
219
+ const { el, host } = mount(true);
220
+ const duration = el.querySelector('.adw-media-controls-duration-label') as HTMLElement;
221
+ expect(duration.hidden).toBe(true);
222
+ expect(el.querySelector('.adw-media-controls-time-label')!.textContent).toBe('0:00');
223
+ host.remove();
224
+ });
225
+
226
+ await it('the DURATION label shows what REMAINS, negatively, once a duration exists', () => {
227
+ // gtkmediacontrols.c:389 — `totem_time_to_string (duration > timestamp ? … : 0,
228
+ // TRUE, FALSE)`. So it is the REMAINING label, and the position label is the
229
+ // elapsed one — the names are a misnomer worth stating.
230
+ const { el, host, media } = mount(true);
231
+ Object.defineProperty(media!, 'duration', { value: 362, configurable: true });
232
+ media!.dispatchEvent(new Event('durationchange'));
233
+ expect(el.querySelector('.adw-media-controls-duration-label')!.textContent).toBe('-6:03');
234
+ expect(el.querySelector('.adw-media-controls-time-label')!.textContent).toBe('0:00');
235
+ host.remove();
236
+ });
237
+
238
+ await it("a known duration RESETS the scale's range to the media's own", () => {
239
+ const { el, host, media } = mount(true);
240
+ Object.defineProperty(media!, 'duration', { value: 754, configurable: true });
241
+ media!.dispatchEvent(new Event('durationchange'));
242
+ const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
243
+ expect(scale.max).toBe('754');
244
+ host.remove();
245
+ });
246
+
247
+ await it('both labels use TABULAR figures, so the scale does not shift sideways', () => {
248
+ // ui/gtkmediacontrols.ui — `font-features "tnum=1"` on BOTH labels. Load-bearing,
249
+ // not cosmetic: a position counting 9→10 must not change its own width.
250
+ const { el, host } = mount(true);
251
+ const time = el.querySelector('.adw-media-controls-time-label') as HTMLElement;
252
+ const duration = el.querySelector('.adw-media-controls-duration-label') as HTMLElement;
253
+ expect(getComputedStyle(time).fontVariantNumeric).toBe('tabular-nums');
254
+ expect(getComputedStyle(duration).fontVariantNumeric).toBe('tabular-nums');
255
+ host.remove();
256
+ });
257
+ });
258
+
259
+ await describe('<gtk-media-controls> the play button', async () => {
260
+ await it('plays a paused media and pauses a playing one', () => {
261
+ // ui/gtkmediacontrols.ui — `play_button_clicked` is the button's only action.
262
+ const { el, host, media } = mount(true);
263
+ let played = false;
264
+ media!.play = () => {
265
+ played = true;
266
+ return Promise.resolve();
267
+ };
268
+ Object.defineProperty(media!, 'paused', { value: true, configurable: true });
269
+ const button = el.querySelector('.adw-media-controls-button') as HTMLButtonElement;
270
+ button.click();
271
+ expect(played).toBe(true);
272
+
273
+ let paused = false;
274
+ Object.defineProperty(media!, 'paused', { value: false, configurable: true });
275
+ media!.pause = () => {
276
+ paused = true;
277
+ };
278
+ button.click();
279
+ expect(paused).toBe(true);
280
+ host.remove();
281
+ });
282
+
283
+ await it('shows the pause glyph while playing and the play glyph when stopped', () => {
284
+ // ui/gtkvideo.ui's `play_button` carries `media-playback-start-symbolic`, and
285
+ // `gtk_video_update_playing`'s counterpart swaps it while the media plays.
286
+ const { el, host, media } = mount(true);
287
+ const icon = () =>
288
+ el.querySelector('.adw-media-controls-button gtk-image')?.getAttribute('icon-name') ?? null;
289
+ expect(icon()).toBe('media-playback-start-symbolic');
290
+ media!.dispatchEvent(new Event('play'));
291
+ expect(icon()).toBe('media-playback-pause-symbolic');
292
+ host.remove();
293
+ });
294
+ });
295
+ };