@gjsify/adwaita-web 0.54.0 → 0.56.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 (479) hide show
  1. package/README.md +8 -0
  2. package/dist/adwaita-web.css +8146 -3011
  3. package/dist/adwaita-web.css.map +1 -1
  4. package/lib/types/adw-application-window.spec.d.ts +1 -0
  5. package/lib/types/adw-bin.spec.d.ts +1 -0
  6. package/lib/types/adw-breakpoint-bin.spec.d.ts +1 -0
  7. package/lib/types/adw-clamp-scrollable.spec.d.ts +1 -0
  8. package/lib/types/adw-multi-layout-view.spec.d.ts +1 -0
  9. package/lib/types/adw-preferences-row.spec.d.ts +1 -0
  10. package/lib/types/adw-shortcuts.spec.d.ts +1 -0
  11. package/lib/types/adw-status-page.spec.d.ts +1 -0
  12. package/lib/types/adw-tab-bar.spec.d.ts +1 -0
  13. package/lib/types/adw-tab-button.spec.d.ts +1 -0
  14. package/lib/types/adw-tab-overview.spec.d.ts +1 -0
  15. package/lib/types/adw-view-switcher-sidebar.spec.d.ts +1 -0
  16. package/lib/types/adw-window.spec.d.ts +1 -0
  17. package/lib/types/attributes.d.ts +19 -0
  18. package/lib/types/breakpoints.d.ts +14 -3
  19. package/lib/types/construct-vectors.spec.d.ts +1 -0
  20. package/lib/types/elements/adw-action-row.d.ts +4 -0
  21. package/lib/types/elements/adw-application-window.d.ts +27 -0
  22. package/lib/types/elements/adw-bin.d.ts +17 -0
  23. package/lib/types/elements/adw-breakpoint-bin.d.ts +67 -0
  24. package/lib/types/elements/adw-clamp-scrollable.d.ts +38 -0
  25. package/lib/types/elements/adw-combo-row.d.ts +4 -0
  26. package/lib/types/elements/adw-dialog.d.ts +10 -0
  27. package/lib/types/elements/adw-entry-row.d.ts +6 -0
  28. package/lib/types/elements/adw-expander-row.d.ts +2 -0
  29. package/lib/types/elements/adw-header-bar.d.ts +6 -0
  30. package/lib/types/elements/adw-layout-slot.d.ts +19 -0
  31. package/lib/types/elements/adw-multi-layout-view.d.ts +101 -0
  32. package/lib/types/elements/adw-overlay-split-view.d.ts +13 -0
  33. package/lib/types/elements/adw-preferences-row.d.ts +31 -0
  34. package/lib/types/elements/adw-shortcuts-dialog.d.ts +13 -0
  35. package/lib/types/elements/adw-shortcuts-item.d.ts +36 -0
  36. package/lib/types/elements/adw-shortcuts-section.d.ts +14 -0
  37. package/lib/types/elements/adw-sidebar.d.ts +8 -2
  38. package/lib/types/elements/adw-spin-row.d.ts +6 -0
  39. package/lib/types/elements/adw-switch-row.d.ts +7 -0
  40. package/lib/types/elements/adw-tab-bar.d.ts +108 -0
  41. package/lib/types/elements/adw-tab-button.d.ts +32 -0
  42. package/lib/types/elements/adw-tab-overview.d.ts +199 -0
  43. package/lib/types/elements/adw-tab-view.d.ts +19 -23
  44. package/lib/types/elements/adw-toggle-group.d.ts +17 -0
  45. package/lib/types/elements/adw-view-switcher-sidebar.d.ts +84 -0
  46. package/lib/types/elements/adw-window.d.ts +40 -0
  47. package/lib/types/elements/gtk-about-dialog.d.ts +146 -0
  48. package/lib/types/elements/gtk-application-window.d.ts +34 -0
  49. package/lib/types/elements/gtk-aspect-frame.d.ts +27 -0
  50. package/lib/types/elements/gtk-button.d.ts +9 -0
  51. package/lib/types/elements/gtk-calendar.d.ts +159 -0
  52. package/lib/types/elements/gtk-center-box.d.ts +39 -0
  53. package/lib/types/elements/gtk-color-dialog-button.d.ts +69 -0
  54. package/lib/types/elements/gtk-column-view.d.ts +50 -0
  55. package/lib/types/elements/gtk-drag-icon.d.ts +78 -0
  56. package/lib/types/elements/gtk-drawing-area.d.ts +95 -0
  57. package/lib/types/elements/gtk-editable-label.d.ts +33 -0
  58. package/lib/types/elements/gtk-emoji-chooser.d.ts +84 -0
  59. package/lib/types/elements/gtk-entry.d.ts +20 -1
  60. package/lib/types/elements/gtk-expander.d.ts +49 -0
  61. package/lib/types/elements/gtk-fixed.d.ts +13 -0
  62. package/lib/types/elements/gtk-flow-box-child.d.ts +14 -0
  63. package/lib/types/elements/gtk-flow-box.d.ts +87 -0
  64. package/lib/types/elements/gtk-font-dialog-button.d.ts +83 -0
  65. package/lib/types/elements/gtk-frame.d.ts +24 -0
  66. package/lib/types/elements/gtk-gl-area.d.ts +136 -0
  67. package/lib/types/elements/gtk-graphics-offload.d.ts +24 -0
  68. package/lib/types/elements/gtk-grid-view.d.ts +39 -0
  69. package/lib/types/elements/gtk-grid.d.ts +27 -0
  70. package/lib/types/elements/gtk-header-bar.d.ts +60 -0
  71. package/lib/types/elements/gtk-inscription.d.ts +64 -0
  72. package/lib/types/elements/gtk-label.d.ts +3 -0
  73. package/lib/types/elements/gtk-level-bar.d.ts +59 -0
  74. package/lib/types/elements/gtk-link-button.d.ts +29 -0
  75. package/lib/types/elements/gtk-list-box-row.d.ts +54 -0
  76. package/lib/types/elements/gtk-list-box.d.ts +100 -0
  77. package/lib/types/elements/gtk-list-view.d.ts +73 -0
  78. package/lib/types/elements/gtk-media-controls.d.ts +142 -0
  79. package/lib/types/elements/gtk-notebook.d.ts +148 -0
  80. package/lib/types/elements/gtk-overlay.d.ts +22 -0
  81. package/lib/types/elements/gtk-page-setup-unix-dialog.d.ts +87 -0
  82. package/lib/types/elements/gtk-paned.d.ts +121 -0
  83. package/lib/types/elements/gtk-password-entry.d.ts +27 -0
  84. package/lib/types/elements/gtk-picture.d.ts +66 -0
  85. package/lib/types/elements/gtk-popover-bin.d.ts +82 -0
  86. package/lib/types/elements/gtk-popover-menu-bar.d.ts +66 -0
  87. package/lib/types/elements/gtk-popover-menu.d.ts +83 -0
  88. package/lib/types/elements/gtk-popover.d.ts +28 -3
  89. package/lib/types/elements/gtk-print-unix-dialog.d.ts +167 -0
  90. package/lib/types/elements/gtk-revealer.d.ts +55 -0
  91. package/lib/types/elements/gtk-scale-button.d.ts +59 -0
  92. package/lib/types/elements/gtk-scale.d.ts +98 -0
  93. package/lib/types/elements/gtk-scrollbar.d.ts +124 -0
  94. package/lib/types/elements/gtk-scrolled-window.d.ts +129 -0
  95. package/lib/types/elements/gtk-search-bar.d.ts +39 -0
  96. package/lib/types/elements/gtk-search-entry.d.ts +27 -0
  97. package/lib/types/elements/gtk-separator.d.ts +10 -0
  98. package/lib/types/elements/gtk-spin-button.d.ts +94 -0
  99. package/lib/types/elements/gtk-spinner.d.ts +14 -0
  100. package/lib/types/elements/gtk-stack-sidebar.d.ts +43 -0
  101. package/lib/types/elements/gtk-stack-switcher.d.ts +58 -0
  102. package/lib/types/elements/gtk-stack.d.ts +154 -0
  103. package/lib/types/elements/gtk-switch.d.ts +4 -1
  104. package/lib/types/elements/gtk-text-view.d.ts +62 -0
  105. package/lib/types/elements/gtk-text.d.ts +45 -0
  106. package/lib/types/elements/gtk-toggle-button.d.ts +45 -0
  107. package/lib/types/elements/gtk-tree-expander.d.ts +38 -0
  108. package/lib/types/elements/gtk-video.d.ts +97 -0
  109. package/lib/types/elements/gtk-viewport.d.ts +84 -0
  110. package/lib/types/elements/gtk-window-controls.d.ts +80 -0
  111. package/lib/types/elements/gtk-window-handle.d.ts +39 -0
  112. package/lib/types/elements/gtk-window.d.ts +103 -0
  113. package/lib/types/elements/justification.d.ts +2 -0
  114. package/lib/types/elements/popover-menu.d.ts +18 -0
  115. package/lib/types/elements/roving-focus.d.ts +29 -1
  116. package/lib/types/emoji-data.d.ts +38 -0
  117. package/lib/types/font-description.d.ts +96 -0
  118. package/lib/types/gtk-about-dialog.spec.d.ts +1 -0
  119. package/lib/types/gtk-action-bar.spec.d.ts +1 -0
  120. package/lib/types/gtk-application-window.spec.d.ts +1 -0
  121. package/lib/types/gtk-aspect-frame.spec.d.ts +1 -0
  122. package/lib/types/gtk-calendar.spec.d.ts +1 -0
  123. package/lib/types/gtk-center-box.spec.d.ts +1 -0
  124. package/lib/types/gtk-color-dialog-button.spec.d.ts +1 -0
  125. package/lib/types/gtk-column-view.spec.d.ts +1 -0
  126. package/lib/types/gtk-drag-icon.spec.d.ts +1 -0
  127. package/lib/types/gtk-drawing-area.spec.d.ts +1 -0
  128. package/lib/types/gtk-editable-label.spec.d.ts +1 -0
  129. package/lib/types/gtk-emoji-chooser.spec.d.ts +1 -0
  130. package/lib/types/gtk-expander.spec.d.ts +1 -0
  131. package/lib/types/gtk-fixed.spec.d.ts +1 -0
  132. package/lib/types/gtk-flow-box.spec.d.ts +1 -0
  133. package/lib/types/gtk-font-dialog-button.spec.d.ts +1 -0
  134. package/lib/types/gtk-frame.spec.d.ts +1 -0
  135. package/lib/types/gtk-gl-area.spec.d.ts +1 -0
  136. package/lib/types/gtk-graphics-offload.spec.d.ts +1 -0
  137. package/lib/types/gtk-grid-view.spec.d.ts +1 -0
  138. package/lib/types/gtk-grid.spec.d.ts +1 -0
  139. package/lib/types/gtk-header-bar.spec.d.ts +1 -0
  140. package/lib/types/gtk-inscription.spec.d.ts +1 -0
  141. package/lib/types/gtk-level-bar.spec.d.ts +1 -0
  142. package/lib/types/gtk-link-button.spec.d.ts +1 -0
  143. package/lib/types/gtk-list-box.spec.d.ts +1 -0
  144. package/lib/types/gtk-list-view.spec.d.ts +1 -0
  145. package/lib/types/gtk-media-controls.spec.d.ts +1 -0
  146. package/lib/types/gtk-notebook.spec.d.ts +1 -0
  147. package/lib/types/gtk-overlay.spec.d.ts +1 -0
  148. package/lib/types/gtk-paned.spec.d.ts +1 -0
  149. package/lib/types/gtk-password-entry.spec.d.ts +1 -0
  150. package/lib/types/gtk-picture.spec.d.ts +1 -0
  151. package/lib/types/gtk-popover-bin.spec.d.ts +1 -0
  152. package/lib/types/gtk-popover-menu-bar.spec.d.ts +1 -0
  153. package/lib/types/gtk-popover-menu.spec.d.ts +1 -0
  154. package/lib/types/gtk-popover-role.spec.d.ts +1 -0
  155. package/lib/types/gtk-popover.spec.d.ts +1 -0
  156. package/lib/types/gtk-print-dialogs.spec.d.ts +1 -0
  157. package/lib/types/gtk-revealer.spec.d.ts +1 -0
  158. package/lib/types/gtk-scale-button.spec.d.ts +1 -0
  159. package/lib/types/gtk-scale.spec.d.ts +1 -0
  160. package/lib/types/gtk-scrollbar.spec.d.ts +1 -0
  161. package/lib/types/gtk-scrolled-window.spec.d.ts +1 -0
  162. package/lib/types/gtk-search-bar.spec.d.ts +1 -0
  163. package/lib/types/gtk-search-entry.spec.d.ts +1 -0
  164. package/lib/types/gtk-separator.spec.d.ts +1 -0
  165. package/lib/types/gtk-spin-button.spec.d.ts +1 -0
  166. package/lib/types/gtk-spinner.spec.d.ts +1 -0
  167. package/lib/types/gtk-stack-sidebar.spec.d.ts +1 -0
  168. package/lib/types/gtk-stack-switcher.spec.d.ts +1 -0
  169. package/lib/types/gtk-stack.spec.d.ts +1 -0
  170. package/lib/types/gtk-text-view.spec.d.ts +1 -0
  171. package/lib/types/gtk-text.spec.d.ts +1 -0
  172. package/lib/types/gtk-toggle-button.spec.d.ts +1 -0
  173. package/lib/types/gtk-tree-expander.spec.d.ts +1 -0
  174. package/lib/types/gtk-video.spec.d.ts +1 -0
  175. package/lib/types/gtk-viewport.spec.d.ts +1 -0
  176. package/lib/types/gtk-window-controls.spec.d.ts +1 -0
  177. package/lib/types/gtk-window-handle.spec.d.ts +1 -0
  178. package/lib/types/gtk-window.spec.d.ts +1 -0
  179. package/lib/types/index.d.ts +4 -1
  180. package/lib/types/list-view-dom.d.ts +44 -0
  181. package/lib/types/namespace/adw.d.ts +12 -0
  182. package/lib/types/namespace/gtk.d.ts +61 -0
  183. package/lib/types/page-setup.d.ts +100 -0
  184. package/lib/types/row-line-clamp.d.ts +20 -0
  185. package/lib/types/row-tooltip.d.ts +8 -0
  186. package/lib/types/row-tooltip.spec.d.ts +1 -0
  187. package/lib/types/scroll-shading.d.ts +15 -1
  188. package/lib/types/shared-tree-builder.d.ts +75 -17
  189. package/lib/types/shared-tree-mount.spec.d.ts +1 -0
  190. package/lib/types/signals.d.ts +4 -0
  191. package/lib/types/styles.generated.d.ts +1 -1
  192. package/lib/types/tab-chip.d.ts +73 -0
  193. package/lib/types/template-classes.d.ts +11 -0
  194. package/lib/types/widget-size.spec.d.ts +1 -0
  195. package/package.json +12 -8
  196. package/scss/_action_row.scss +41 -17
  197. package/scss/_application_window.scss +26 -0
  198. package/scss/_aspect_frame.scss +25 -0
  199. package/scss/_bin.scss +26 -0
  200. package/scss/_button.scss +45 -0
  201. package/scss/_button_row.scss +5 -0
  202. package/scss/_calendar.scss +176 -0
  203. package/scss/_center_box.scss +25 -0
  204. package/scss/_checks.scss +6 -1
  205. package/scss/_clamp_scrollable.scss +28 -0
  206. package/scss/_color_button.scss +67 -0
  207. package/scss/_column_view.scss +126 -0
  208. package/scss/_drag_icon.scss +55 -0
  209. package/scss/_drawing.scss +85 -0
  210. package/scss/_emoji_chooser.scss +213 -0
  211. package/scss/_entry.scss +13 -5
  212. package/scss/_entry_row.scss +1 -1
  213. package/scss/_expander.scss +113 -0
  214. package/scss/_expander_row.scss +36 -3
  215. package/scss/_fixed.scss +29 -0
  216. package/scss/_flow_box.scss +94 -0
  217. package/scss/_font_button.scss +63 -0
  218. package/scss/_frame.scss +41 -0
  219. package/scss/_grid.scss +19 -0
  220. package/scss/_grid_view.scss +46 -0
  221. package/scss/_gtk_about_dialog.scss +186 -0
  222. package/scss/_headerbar.scss +134 -1
  223. package/scss/_icons.generated.scss +186 -0
  224. package/scss/_inscription.scss +125 -0
  225. package/scss/_level_bar.scss +190 -0
  226. package/scss/_link.scss +82 -0
  227. package/scss/_list_box.scss +88 -0
  228. package/scss/_list_view.scss +96 -0
  229. package/scss/_media_controls.scss +139 -0
  230. package/scss/_overlay.scss +68 -0
  231. package/scss/_paned.scss +130 -0
  232. package/scss/_password_entry.scss +83 -0
  233. package/scss/_picture.scss +80 -0
  234. package/scss/_popover_bin.scss +53 -0
  235. package/scss/_popover_menu_bar.scss +104 -0
  236. package/scss/_preferences_row.scss +60 -0
  237. package/scss/_print_dialogs.scss +328 -0
  238. package/scss/_reset.scss +21 -19
  239. package/scss/_revealer.scss +37 -0
  240. package/scss/_row.scss +36 -5
  241. package/scss/_scale.scss +298 -0
  242. package/scss/_scale_button.scss +167 -0
  243. package/scss/_scrollbar.scss +230 -0
  244. package/scss/_scrolled_window.scss +131 -0
  245. package/scss/_search_bar.scss +118 -0
  246. package/scss/_search_entry.scss +86 -0
  247. package/scss/_separator.scss +44 -0
  248. package/scss/_shortcuts_dialog.scss +100 -0
  249. package/scss/_spin_button.scss +172 -0
  250. package/scss/_spin_row.scss +56 -8
  251. package/scss/_spinner.scss +85 -4
  252. package/scss/_stack.scss +729 -0
  253. package/scss/_status_page.scss +1 -1
  254. package/scss/_switch.scss +13 -5
  255. package/scss/_switch_row.scss +10 -0
  256. package/scss/_tab_bar.scss +317 -0
  257. package/scss/_tab_button.scss +98 -0
  258. package/scss/_tab_overview.scss +483 -0
  259. package/scss/_text.scss +182 -0
  260. package/scss/_theme.scss +1 -1
  261. package/scss/_toggle_group.scss +28 -0
  262. package/scss/_tree_expander.scss +62 -0
  263. package/scss/_variables.scss +1 -1
  264. package/scss/_video.scss +146 -0
  265. package/scss/_view_switcher_sidebar.scss +112 -0
  266. package/scss/_viewport.scss +50 -0
  267. package/scss/_widget.scss +14 -3
  268. package/scss/_window.scss +131 -2
  269. package/scss/_window_handle.scss +20 -0
  270. package/scss/adwaita-skin.scss +109 -0
  271. package/src/adw-action-rows.spec.ts +331 -0
  272. package/src/adw-application-window.spec.ts +118 -0
  273. package/src/adw-bin.spec.ts +75 -0
  274. package/src/adw-breakpoint-bin.spec.ts +324 -0
  275. package/src/adw-clamp-scrollable.spec.ts +189 -0
  276. package/src/adw-header-bar.spec.ts +18 -0
  277. package/src/adw-multi-layout-view.spec.ts +243 -0
  278. package/src/adw-preferences-row.spec.ts +164 -0
  279. package/src/adw-row-state.spec.ts +142 -0
  280. package/src/adw-shortcuts.spec.ts +155 -0
  281. package/src/adw-status-page.spec.ts +124 -0
  282. package/src/adw-tab-bar.spec.ts +287 -0
  283. package/src/adw-tab-button.spec.ts +101 -0
  284. package/src/adw-tab-overview.spec.ts +443 -0
  285. package/src/adw-view-switcher-sidebar.spec.ts +281 -0
  286. package/src/adw-window.spec.ts +129 -0
  287. package/src/attributes.ts +52 -0
  288. package/src/breakpoints.ts +25 -8
  289. package/src/capabilities.d.mts +3 -0
  290. package/src/capabilities.mjs +21 -0
  291. package/src/connect-lifecycle.spec.ts +12 -0
  292. package/src/construct-vectors.spec.ts +175 -0
  293. package/src/elements/adw-action-row.ts +31 -2
  294. package/src/elements/adw-alert-dialog.ts +4 -1
  295. package/src/elements/adw-application-window.ts +154 -0
  296. package/src/elements/adw-bin.ts +101 -0
  297. package/src/elements/adw-breakpoint-bin.ts +287 -0
  298. package/src/elements/adw-button-row.ts +7 -1
  299. package/src/elements/adw-clamp-scrollable.ts +207 -0
  300. package/src/elements/adw-combo-row.ts +26 -1
  301. package/src/elements/adw-dialog.ts +19 -0
  302. package/src/elements/adw-entry-row.ts +22 -12
  303. package/src/elements/adw-expander-row.ts +34 -1
  304. package/src/elements/adw-header-bar.ts +18 -4
  305. package/src/elements/adw-layout-slot.ts +95 -0
  306. package/src/elements/adw-multi-layout-view.ts +326 -0
  307. package/src/elements/adw-overlay-split-view.ts +29 -6
  308. package/src/elements/adw-preferences-row.ts +153 -0
  309. package/src/elements/adw-shortcuts-dialog.ts +52 -0
  310. package/src/elements/adw-shortcuts-item.ts +171 -0
  311. package/src/elements/adw-shortcuts-section.ts +86 -0
  312. package/src/elements/adw-sidebar.ts +74 -7
  313. package/src/elements/adw-spin-row.ts +37 -2
  314. package/src/elements/adw-status-page.ts +10 -2
  315. package/src/elements/adw-switch-row.ts +53 -2
  316. package/src/elements/adw-tab-bar.ts +529 -0
  317. package/src/elements/adw-tab-button.ts +194 -0
  318. package/src/elements/adw-tab-overview.ts +1011 -0
  319. package/src/elements/adw-tab-view.ts +66 -145
  320. package/src/elements/adw-toggle-group.ts +138 -14
  321. package/src/elements/adw-view-stack.ts +18 -0
  322. package/src/elements/adw-view-switcher-sidebar.ts +332 -0
  323. package/src/elements/adw-window.ts +190 -11
  324. package/src/elements/checks.ts +35 -8
  325. package/src/elements/gtk-about-dialog.ts +811 -0
  326. package/src/elements/gtk-application-window.ts +108 -0
  327. package/src/elements/gtk-aspect-frame.ts +160 -0
  328. package/src/elements/gtk-button.ts +12 -0
  329. package/src/elements/gtk-calendar.ts +757 -0
  330. package/src/elements/gtk-center-box.ts +184 -0
  331. package/src/elements/gtk-color-dialog-button.ts +278 -0
  332. package/src/elements/gtk-column-view.ts +320 -0
  333. package/src/elements/gtk-drag-icon.ts +257 -0
  334. package/src/elements/gtk-drawing-area.ts +303 -0
  335. package/src/elements/gtk-editable-label.ts +204 -0
  336. package/src/elements/gtk-emoji-chooser.ts +542 -0
  337. package/src/elements/gtk-entry.ts +39 -5
  338. package/src/elements/gtk-expander.ts +301 -0
  339. package/src/elements/gtk-fixed.ts +99 -0
  340. package/src/elements/gtk-flow-box-child.ts +68 -0
  341. package/src/elements/gtk-flow-box.ts +480 -0
  342. package/src/elements/gtk-font-dialog-button.ts +432 -0
  343. package/src/elements/gtk-frame.ts +174 -0
  344. package/src/elements/gtk-gl-area.ts +476 -0
  345. package/src/elements/gtk-graphics-offload.ts +130 -0
  346. package/src/elements/gtk-grid-view.ts +168 -0
  347. package/src/elements/gtk-grid.ts +127 -0
  348. package/src/elements/gtk-header-bar.ts +273 -0
  349. package/src/elements/gtk-inscription.ts +387 -0
  350. package/src/elements/gtk-label.ts +19 -11
  351. package/src/elements/gtk-level-bar.ts +323 -0
  352. package/src/elements/gtk-link-button.ts +138 -0
  353. package/src/elements/gtk-list-box-row.ts +195 -0
  354. package/src/elements/gtk-list-box.ts +413 -0
  355. package/src/elements/gtk-list-view.ts +370 -0
  356. package/src/elements/gtk-media-controls.ts +509 -0
  357. package/src/elements/gtk-notebook.ts +664 -0
  358. package/src/elements/gtk-overlay.ts +149 -0
  359. package/src/elements/gtk-page-setup-unix-dialog.ts +420 -0
  360. package/src/elements/gtk-paned.ts +597 -0
  361. package/src/elements/gtk-password-entry.ts +170 -0
  362. package/src/elements/gtk-picture.ts +254 -0
  363. package/src/elements/gtk-popover-bin.ts +332 -0
  364. package/src/elements/gtk-popover-menu-bar.ts +355 -0
  365. package/src/elements/gtk-popover-menu.ts +339 -0
  366. package/src/elements/gtk-popover.ts +92 -10
  367. package/src/elements/gtk-print-unix-dialog.ts +989 -0
  368. package/src/elements/gtk-progress-bar.ts +24 -11
  369. package/src/elements/gtk-revealer.ts +406 -0
  370. package/src/elements/gtk-scale-button.ts +358 -0
  371. package/src/elements/gtk-scale.ts +492 -0
  372. package/src/elements/gtk-scrollbar.ts +528 -0
  373. package/src/elements/gtk-scrolled-window.ts +653 -0
  374. package/src/elements/gtk-search-bar.ts +200 -0
  375. package/src/elements/gtk-search-entry.ts +172 -0
  376. package/src/elements/gtk-separator.ts +52 -0
  377. package/src/elements/gtk-spin-button.ts +475 -0
  378. package/src/elements/gtk-spinner.ts +126 -0
  379. package/src/elements/gtk-stack-sidebar.ts +212 -0
  380. package/src/elements/gtk-stack-switcher.ts +279 -0
  381. package/src/elements/gtk-stack.ts +748 -0
  382. package/src/elements/gtk-switch.ts +52 -19
  383. package/src/elements/gtk-text-view.ts +290 -0
  384. package/src/elements/gtk-text.ts +219 -0
  385. package/src/elements/gtk-toggle-button.ts +239 -0
  386. package/src/elements/gtk-tree-expander.ts +243 -0
  387. package/src/elements/gtk-video.ts +423 -0
  388. package/src/elements/gtk-viewport.ts +277 -0
  389. package/src/elements/gtk-window-controls.ts +341 -0
  390. package/src/elements/gtk-window-handle.ts +221 -0
  391. package/src/elements/gtk-window.ts +372 -0
  392. package/src/elements/justification.ts +24 -0
  393. package/src/elements/popover-menu.ts +24 -0
  394. package/src/elements/roving-focus.ts +53 -21
  395. package/src/emoji-data.ts +577 -0
  396. package/src/entry-rows.spec.ts +31 -0
  397. package/src/font-description.ts +238 -0
  398. package/src/gtk-about-dialog.spec.ts +250 -0
  399. package/src/gtk-action-bar.spec.ts +89 -0
  400. package/src/gtk-application-window.spec.ts +107 -0
  401. package/src/gtk-aspect-frame.spec.ts +114 -0
  402. package/src/gtk-calendar.spec.ts +589 -0
  403. package/src/gtk-center-box.spec.ts +125 -0
  404. package/src/gtk-color-dialog-button.spec.ts +141 -0
  405. package/src/gtk-column-view.spec.ts +154 -0
  406. package/src/gtk-drag-icon.spec.ts +190 -0
  407. package/src/gtk-drawing-area.spec.ts +211 -0
  408. package/src/gtk-editable-label.spec.ts +190 -0
  409. package/src/gtk-emoji-chooser.spec.ts +173 -0
  410. package/src/gtk-entry.spec.ts +23 -0
  411. package/src/gtk-expander.spec.ts +170 -0
  412. package/src/gtk-fixed.spec.ts +97 -0
  413. package/src/gtk-flow-box.spec.ts +289 -0
  414. package/src/gtk-font-dialog-button.spec.ts +166 -0
  415. package/src/gtk-frame.spec.ts +119 -0
  416. package/src/gtk-gl-area.spec.ts +361 -0
  417. package/src/gtk-graphics-offload.spec.ts +119 -0
  418. package/src/gtk-grid-view.spec.ts +106 -0
  419. package/src/gtk-grid.spec.ts +122 -0
  420. package/src/gtk-header-bar.spec.ts +202 -0
  421. package/src/gtk-inscription.spec.ts +235 -0
  422. package/src/gtk-level-bar.spec.ts +199 -0
  423. package/src/gtk-link-button.spec.ts +117 -0
  424. package/src/gtk-list-box.spec.ts +422 -0
  425. package/src/gtk-list-view.spec.ts +203 -0
  426. package/src/gtk-media-controls.spec.ts +295 -0
  427. package/src/gtk-notebook.spec.ts +546 -0
  428. package/src/gtk-overlay.spec.ts +141 -0
  429. package/src/gtk-paned.spec.ts +267 -0
  430. package/src/gtk-password-entry.spec.ts +150 -0
  431. package/src/gtk-picture.spec.ts +172 -0
  432. package/src/gtk-popover-bin.spec.ts +229 -0
  433. package/src/gtk-popover-menu-bar.spec.ts +296 -0
  434. package/src/gtk-popover-menu.spec.ts +261 -0
  435. package/src/gtk-popover-role.spec.ts +138 -0
  436. package/src/gtk-popover.spec.ts +264 -0
  437. package/src/gtk-print-dialogs.spec.ts +251 -0
  438. package/src/gtk-revealer.spec.ts +164 -0
  439. package/src/gtk-scale-button.spec.ts +218 -0
  440. package/src/gtk-scale.spec.ts +213 -0
  441. package/src/gtk-scrollbar.spec.ts +244 -0
  442. package/src/gtk-scrolled-window.spec.ts +262 -0
  443. package/src/gtk-search-bar.spec.ts +179 -0
  444. package/src/gtk-search-entry.spec.ts +142 -0
  445. package/src/gtk-separator.spec.ts +74 -0
  446. package/src/gtk-spin-button.spec.ts +186 -0
  447. package/src/gtk-spinner.spec.ts +130 -0
  448. package/src/gtk-stack-sidebar.spec.ts +217 -0
  449. package/src/gtk-stack-switcher.spec.ts +249 -0
  450. package/src/gtk-stack.spec.ts +432 -0
  451. package/src/gtk-text-view.spec.ts +189 -0
  452. package/src/gtk-text.spec.ts +163 -0
  453. package/src/gtk-toggle-button.spec.ts +186 -0
  454. package/src/gtk-tree-expander.spec.ts +201 -0
  455. package/src/gtk-video.spec.ts +240 -0
  456. package/src/gtk-viewport.spec.ts +140 -0
  457. package/src/gtk-window-controls.spec.ts +232 -0
  458. package/src/gtk-window-handle.spec.ts +158 -0
  459. package/src/gtk-window.spec.ts +202 -0
  460. package/src/index.ts +9 -1
  461. package/src/keyboard-operable.spec.ts +77 -9
  462. package/src/list-view-dom.ts +121 -0
  463. package/src/namespace/adw.ts +12 -0
  464. package/src/namespace/gtk.ts +61 -0
  465. package/src/page-setup.ts +222 -0
  466. package/src/row-line-clamp.ts +74 -0
  467. package/src/row-tooltip.spec.ts +313 -0
  468. package/src/row-tooltip.ts +52 -0
  469. package/src/scroll-shading.ts +18 -1
  470. package/src/shared-tree-builder.ts +336 -41
  471. package/src/shared-tree-mount.spec.ts +130 -0
  472. package/src/shared-trees.spec.ts +15 -0
  473. package/src/signals.ts +15 -0
  474. package/src/style-classes.spec.ts +9 -8
  475. package/src/styles.generated.ts +1 -1
  476. package/src/tab-chip.ts +200 -0
  477. package/src/template-classes.ts +45 -0
  478. package/src/test.browser.mts +160 -0
  479. package/src/widget-size.spec.ts +117 -0
@@ -24,6 +24,13 @@ adw-toggle-group {
24
24
  border-radius: var(--button-radius);
25
25
  background-color: var(--button-bg-color);
26
26
 
27
+ // `toggle-group:disabled` (libadwaita `_toggle-group.scss:16`) — the whole group's
28
+ // background mixed toward transparent. Written against `[disabled]` and not `:disabled`:
29
+ // a custom element is never `:disabled`, the way `_expander.scss` records.
30
+ &[disabled] {
31
+ background-color: color-mix(in srgb, var(--button-bg-color) var(--disabled-opacity), transparent);
32
+ }
33
+
27
34
  .adw-toggle-group-inner {
28
35
  display: flex;
29
36
  align-items: stretch;
@@ -70,6 +77,20 @@ adw-toggle-group {
70
77
  outline-offset: 1px;
71
78
  }
72
79
 
80
+ // A `<button disabled>` carries GTK's `:disabled` dimming — `_buttons.scss:58`,
81
+ // `filter: Opacity(var(--disabled-opacity))` — and `cursor: default` with it
82
+ // (`_button.scss`). Hover and active are suppressed because a disabled button takes
83
+ // neither, so the hover fill would linger over a toggle that cannot be pressed.
84
+ &:disabled {
85
+ opacity: var(--disabled-opacity);
86
+ cursor: default;
87
+
88
+ &:hover,
89
+ &:active {
90
+ background-color: transparent;
91
+ }
92
+ }
93
+
73
94
  // The active toggle — a raised white chip, the way libadwaita draws it.
74
95
  &.active {
75
96
  background-color: var(--active-toggle-bg-color);
@@ -81,6 +102,13 @@ adw-toggle-group {
81
102
  &:hover {
82
103
  background-color: var(--active-toggle-bg-color);
83
104
  }
105
+
106
+ // The raised chip is what makes it read as raised; libadwaita drops the shadow on a
107
+ // disabled active toggle (`_toggle-group.scss:131`) so an unavailable choice does not
108
+ // look pressed.
109
+ &:disabled {
110
+ box-shadow: none;
111
+ }
84
112
  }
85
113
  }
86
114
 
@@ -0,0 +1,62 @@
1
+ // _tree_expander.scss — <gtk-tree-expander>: the indents and the disclosure arrow in
2
+ // front of a tree row's contents.
3
+ //
4
+ // libadwaita gives the widget itself ONE declaration — `treeexpander { border-spacing:
5
+ // 4px }` (_column-view.scss:128-130), which is the gap between the indents, the expander
6
+ // and the child — and styles the arrow through the generic `expander` node: a 16×16 box
7
+ // drawn with `pan-end-symbolic`, turning to `pan-down-symbolic` when `:checked`
8
+ // (_expanders.scss:1-10).
9
+ //
10
+ // An INDENT has no rule upstream at all: `GtkBuiltinIcon` with css-name `indent` draws
11
+ // nothing and occupies the icon's own 16px. That is why the indent below is a fixed box
12
+ // rather than a margin on the child — the child keeps its own box, and an expandable row
13
+ // and its leaf sibling line up because they have the SAME number of boxes in front of
14
+ // them, which is the whole point of `indent-for-icon`.
15
+ //
16
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_column-view.scss:128-130
17
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_expanders.scss:1-10
18
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
19
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
20
+
21
+ gtk-tree-expander {
22
+ display: flex;
23
+ align-items: center;
24
+ // `border-spacing: 4px` between every node the widget holds.
25
+ gap: 4px;
26
+ box-sizing: border-box;
27
+
28
+ &:focus-visible {
29
+ outline: 2px solid var(--accent-color);
30
+ outline-offset: -2px;
31
+ border-radius: var(--button-radius);
32
+ }
33
+
34
+ .adw-tree-expander-indent {
35
+ flex: none;
36
+ display: block;
37
+ // The `indent` node is an icon-sized box that draws nothing.
38
+ width: 16px;
39
+ height: 16px;
40
+ }
41
+
42
+ .adw-tree-expander-icon {
43
+ flex: none;
44
+ opacity: 0.7;
45
+ transform: rotate(0deg);
46
+ transition: transform 0.2s ease-out;
47
+ cursor: pointer;
48
+
49
+ // `:checked` turns pan-end into pan-down; one quarter turn is the same picture.
50
+ &.expanded {
51
+ transform: rotate(90deg);
52
+ }
53
+
54
+ &:hover {
55
+ opacity: 1;
56
+ }
57
+ }
58
+
59
+ &[aria-disabled='true'] .adw-tree-expander-icon {
60
+ filter: opacity(var(--disabled-opacity));
61
+ }
62
+ }
@@ -76,7 +76,7 @@
76
76
  --button-active-color: rgba(0, 0, 6, 0.19);
77
77
 
78
78
  // Entries
79
- --entry-bg-color: #ffffff;
79
+ --entry-bg-color: rgba(0, 0, 6, 0.1);
80
80
  --entry-border-color: rgba(0, 0, 6, 0.18);
81
81
  --entry-border-hover-color: rgba(0, 0, 6, 0.28);
82
82
 
@@ -0,0 +1,146 @@
1
+ // _video.scss — <gtk-video>: the overlay, the big circular play glyph, and the controls
2
+ // bar that reveals itself for three seconds.
3
+ //
4
+ // libadwaita styles `GtkVideo` in ONE place, and it is three lines
5
+ // (refs/libadwaita/src/stylesheet/widgets/_misc.scss:74-81):
6
+ //
7
+ // video {
8
+ // & image.osd {
9
+ // min-width: 64px;
10
+ // min-height: 64px;
11
+ // border-radius: 32px;
12
+ // }
13
+ // }
14
+ //
15
+ // Those three values are kept VERBATIM below, and the reason they are interesting is that
16
+ // they are a `.circular` button at a LARGER size: libadwaita's own circular button is 34px
17
+ // with a 9999px radius (refs/libadwaita/src/stylesheet/widgets/_buttons.scss:311-319), and
18
+ // the video's icon is 64px with a 32px radius — half its own width, which for a circle is
19
+ // the same shape at twice the size. So the radius here is `min-width / 2` and not the 9999px
20
+ // the button uses, and that difference is upstream's, not a porting shortcut.
21
+ //
22
+ // The `.osd` HALF is `%osd` (refs/libadwaita/src/stylesheet/_common.scss:43-60): the
23
+ // on-screen-display surface — a translucent dark plate, a near-white foreground and the
24
+ // accent colours recomputed to sit on it. `_style_classes.scss` already owns `.osd` for every
25
+ // widget, so the icon here gets it for free and nothing in this partial restates it.
26
+ //
27
+ // The controls bar wears `.osd` AND `.bottom` (refs/gtk/gtk/ui/gtkvideo.ui). `.osd` is the
28
+ // half with a rule — the same `%osd` surface — and `.bottom` is a PLACEMENT class with no
29
+ // libadwaita rule anywhere: `grep` over `refs/libadwaita/src/stylesheet/` finds `bottom`
30
+ // only on `bottom-sheet`, `bottom-bar`, `notebook.bottom` and `colorchooser.bottom`, none of
31
+ // which is a video. It is GTK's own hint from the template and it is honoured here as the
32
+ // vertical placement it plainly is — the bar sits at the end of the cross axis — with the
33
+ // padding the `.osd` toolbar takes (12px, refs/libadwaita/src/stylesheet/widgets/
34
+ // _toolbars.scss:96-100).
35
+ //
36
+ // THE REVEALER IS A TRANSITION, NOT A TOGGLE WITH A DELAY. `gtk_video_reveal_controls`
37
+ // (gtkvideo.c:125-133) reveals a `GtkRevealer` and arms a 3 s timeout that hides it again,
38
+ // and the motion controller re-arms on every movement — so the bar is out after three
39
+ // seconds of stillness, not three seconds after the first movement, and the element's
40
+ // `revealControls()` re-arms for the same reason. The `transition` below is the revealer's
41
+ // own cross-fade, and `.revealed` is the only state selector: there is no `hidden` to fight
42
+ // because the revealer never leaves the layout.
43
+ //
44
+ // `graphics-offload` HAS NO RULE, AND SAYS SO. `GtkGraphicsOffload` moves a subtree into a
45
+ // shared GL texture so it and its neighbours composite on the GPU; CSS has no such
46
+ // mechanism, so the class the element sets is deliberately UNSTYLED. A page may target it,
47
+ // nothing in this package does, and the property is observed rather than listed as a gap in
48
+ // `check-adwaita-element-properties.mjs` — the property is read and written faithfully, what
49
+ // it does not buy is a faster composite.
50
+ //
51
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss:74-81 (the whole GtkVideo
52
+ // block), _common.scss:43-60 (`%osd`), _buttons.scss:311-319 (`.circular`),
53
+ // _toolbars.scss:96-100 (`.toolbar.osd`)
54
+ // Reference: refs/gtk/gtk/ui/gtkvideo.ui (the `.osd .circular` icon, the `.osd .bottom`
55
+ // controls, the 3 s reveal), gtkvideo.c:125-133
56
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
57
+ // Copyright (c) The GTK Team. LGPLv2.1+.
58
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
59
+
60
+ gtk-video {
61
+ position: relative;
62
+ display: block;
63
+ overflow: hidden;
64
+
65
+ // The overlay of ui/gtkvideo.ui: the media underneath, the icon over it, the revealer
66
+ // over that.
67
+ .adw-video-surface {
68
+ position: relative;
69
+ display: flex;
70
+
71
+ > video {
72
+ width: 100%;
73
+ height: 100%;
74
+ object-fit: contain;
75
+ }
76
+ }
77
+
78
+ // `ui/gtkvideo.ui`'s `overlay_icon`: `halign`/`valign` 3, i.e. FILL, which is what makes
79
+ // it centred in an overlay on both axes — GTK's own `GTK_ALIGN_FILL` on an overlay child
80
+ // stretches it, and this is the web's answer for "fill the overlay and centre inside it".
81
+ .adw-video-overlay-icon {
82
+ position: absolute;
83
+ inset: 0;
84
+ margin: auto;
85
+
86
+ // `min-width: 64px; min-height: 64px; border-radius: 32px` — libadwaita's own three
87
+ // lines for `video image.osd` (_misc.scss:76-80). The radius is half the width, which is
88
+ // the same shape `.circular` gives at 34px (_buttons.scss:311-319) at twice the size.
89
+ min-width: 64px;
90
+ min-height: 64px;
91
+ border-radius: 32px;
92
+
93
+ // `GtkImage`'s icon inside the button, and `icon-size` 2 in the template
94
+ // (ui/gtkvideo.ui) is GTK's dialog-scale — which is the 64px above.
95
+ display: flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ padding: 0;
99
+ border: none;
100
+ // A GtkImage with `has-frame` unset inside an OSD plate: the plate IS the surface, so
101
+ // the button adds no background of its own.
102
+ background: none;
103
+ color: inherit;
104
+ cursor: pointer;
105
+
106
+ // `gtk_video_update_playing` (gtkvideo.c:665) sets the icon's VISIBILITY to
107
+ // `!playing`, so this is `visibility` rather than `display`: the icon keeps its box and
108
+ // the OSD plate under it is unaffected either way, which is what `[hidden]` would also
109
+ // give — but `hidden` is the UA rule and this one is the C's.
110
+ &[hidden] {
111
+ visibility: hidden;
112
+ }
113
+ }
114
+
115
+ // `ui/gtkvideo.ui`'s `controls_revealer`: a `GtkRevealer` with `valign` 2 (END) and
116
+ // `transition-type` 1 (CROSS-FADE), and `measure` 1 so the bar is allocated even while
117
+ // hidden — which is why this is an opacity transition and not `display: none`.
118
+ .adw-video-controls-revealer {
119
+ position: absolute;
120
+ inset: auto 0 0 0;
121
+ opacity: 0;
122
+ pointer-events: none;
123
+ transition: opacity 150ms ease-out;
124
+
125
+ &.revealed {
126
+ opacity: 1;
127
+ pointer-events: auto;
128
+ }
129
+
130
+ // `.osd .bottom` (ui/gtkvideo.ui). The bar is `osd` — the `%osd` surface from
131
+ // `_common.scss:43-60` — with the padding a standalone OSD toolbar takes: 12px against
132
+ // the 6px of a plain one (_toolbars.scss:91-102).
133
+ gtk-media-controls {
134
+ padding: 12px;
135
+ }
136
+ }
137
+
138
+ // Playing hides the overlay icon and shows nothing over the frames. Declared as a class so
139
+ // a page can see the state without reading the icon's `hidden`, and because GTK's own state
140
+ // is a widget VISIBILITY (gtkvideo.c:665) rather than a style class.
141
+ &.playing .adw-video-overlay-icon {
142
+ pointer-events: none;
143
+ }
144
+
145
+ // `GtkVideo:graphics-offload` — deliberately UNSTYLED. See the header.
146
+ }
@@ -0,0 +1,112 @@
1
+ // _view_switcher_sidebar.scss — <adw-view-switcher-sidebar>: an <adw-sidebar> driven
2
+ // from an <adw-view-stack>'s page list. libadwaita styles exactly ONE thing of its own —
3
+ // the row indicator, and only the number/dot shape inside it — because the sidebar look
4
+ // comes from `_sidebars.scss` and this element drives that widget rather than
5
+ // reimplementing it.
6
+ //
7
+ // Ported from `view-switcher-sidebar .indicator` (adw-view-switcher-sidebar.c:133-181):
8
+ // · `background: color-mix(in srgb, currentColor 40%, transparent)`, `border-radius: 999px`
9
+ // · `min-width/min-height: 1.6em`, `font-weight: bold`, `font-size: smaller`
10
+ // · `.dot` shrinks it to 8×8 — the unread mark with no count
11
+ // · `> label` is white with 6px of padding each side
12
+ // · `.needs-attention` swaps in `--accent-bg-color`/`--accent-fg-color`
13
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss:250-277
14
+ // Reference: refs/libadwaita/src/adw-view-switcher-sidebar.c:104-112, :133-181, :225-249
15
+ // Copyright (c) 2025 GNOME Foundation Inc. (libadwaita). LGPLv2.1-or-later.
16
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
17
+
18
+ adw-view-switcher-sidebar {
19
+ display: flex;
20
+ flex-direction: column;
21
+ box-sizing: border-box;
22
+ min-height: 0;
23
+ color: inherit;
24
+ }
25
+
26
+ adw-view-switcher-sidebar > .view-switcher-sidebar-box {
27
+ position: relative;
28
+ display: flex;
29
+ flex: 1 1 auto;
30
+ min-height: 0;
31
+ }
32
+
33
+ adw-view-switcher-sidebar > adw-sidebar {
34
+ flex: 1 1 auto;
35
+ min-height: 0;
36
+ }
37
+
38
+ adw-view-switcher-sidebar > .view-switcher-sidebar-placeholder {
39
+ position: absolute;
40
+ inset: 0;
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ box-sizing: border-box;
45
+ background-color: var(--sidebar-bg-color, var(--window-bg-color));
46
+ color: var(--sidebar-fg-color, var(--window-fg-color));
47
+ }
48
+
49
+ adw-view-switcher-sidebar > .view-switcher-sidebar-placeholder[hidden] {
50
+ display: none;
51
+ }
52
+
53
+ // `&:not(.page).empty statuspage { @extend .compact }` — the empty state is compact in
54
+ // sidebar mode and a full page in `page` mode, where it is one of several boxed pages.
55
+ adw-view-switcher-sidebar.page > .view-switcher-sidebar-placeholder {
56
+ position: static;
57
+ margin: var(--spacing-m);
58
+ }
59
+
60
+ adw-view-switcher-sidebar > .view-switcher-sidebar-prefix,
61
+ adw-view-switcher-sidebar > .view-switcher-sidebar-suffix {
62
+ flex-shrink: 0;
63
+ }
64
+
65
+ adw-view-switcher-sidebar > .view-switcher-sidebar-prefix:empty,
66
+ adw-view-switcher-sidebar > .view-switcher-sidebar-suffix:empty,
67
+ adw-view-switcher-sidebar > .view-switcher-sidebar-placeholder:empty {
68
+ display: none;
69
+ }
70
+
71
+ // --- The row indicator ----------------------------------------------------
72
+
73
+ adw-view-switcher-sidebar .indicator {
74
+ display: inline-flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ flex-shrink: 0;
78
+ box-sizing: border-box;
79
+ min-width: 1.6em;
80
+ min-height: 1.6em;
81
+ margin-inline-start: auto;
82
+ border-radius: 999px;
83
+ background: color-mix(in srgb, currentColor 40%, transparent);
84
+ font-weight: bold;
85
+ font-size: smaller;
86
+ line-height: 1;
87
+ }
88
+
89
+ adw-view-switcher-sidebar .indicator[hidden] {
90
+ display: none;
91
+ }
92
+
93
+ adw-view-switcher-sidebar .indicator.dot {
94
+ min-width: 8px;
95
+ min-height: 8px;
96
+ }
97
+
98
+ adw-view-switcher-sidebar .indicator > label,
99
+ adw-view-switcher-sidebar .indicator > .numeric {
100
+ color: white;
101
+ padding-left: 6px;
102
+ padding-right: 6px;
103
+ }
104
+
105
+ adw-view-switcher-sidebar .indicator.needs-attention {
106
+ background: var(--accent-bg-color);
107
+ }
108
+
109
+ adw-view-switcher-sidebar .indicator.needs-attention > label,
110
+ adw-view-switcher-sidebar .indicator.needs-attention > .numeric {
111
+ color: var(--accent-fg-color);
112
+ }
@@ -0,0 +1,50 @@
1
+ // _viewport.scss — <gtk-viewport>: the scrollport a `GtkScrolledWindow` puts its child in.
2
+ //
3
+ // LIBADWAITA STYLES NOTHING HERE, and that is the whole file's justification for existing:
4
+ // `_scrolling.scss` has rules for `scrollbar` and for `scrolledwindow` and none for
5
+ // `viewport`, because GTK gives the node no surface to paint (gtkviewport.c:353). What is
6
+ // below is therefore the CSS of the NODE GTK builds — the measurement, the clipping and the
7
+ // one allocation `gtk_viewport_size_allocate` performs — and each declaration says which half
8
+ // of it it is.
9
+ //
10
+ // THE CHILD IS ALLOCATED ITS NATURAL SIZE. GTK measures the child and hands it that
11
+ // (gtkviewport.c:517-560), so content wider than the window scrolls sideways instead of being
12
+ // squeezed into it. A flex container whose items are `flex: none` is that rule in CSS:
13
+ // `flex-basis: auto` sizes an item to its content and `flex-shrink: 0` keeps it there, and
14
+ // `align-items: flex-start` stops the cross axis from stretching it to fill.
15
+ //
16
+ // THE SCROLLING IS THE PLATFORM'S. GTK's viewport translates its child by the adjustment
17
+ // instead of scrolling it, and the browser's equivalent of a scrollport that scrolls is a
18
+ // scroll container — with the SCROLLBAR hidden, because in GTK those belong to the scrolled
19
+ // window (which builds them, gtkscrolledwindow.c:4356-4363) and never to the viewport. The one
20
+ // consequence worth writing down is the momentum after a touch release: GTK's
21
+ // `GtkKineticScrolling` is a deceleration curve a page cannot hand a browser, so what a reader
22
+ // gets is the platform's own — see `GtkScrolledWindow:kinetic-scrolling`.
23
+ //
24
+ // `overflow: auto`, not `hidden`: a browser clamps either way, but only `auto` runs the
25
+ // platform's momentum and rubber-banding, which is the whole of what a touch scroll does here.
26
+
27
+ gtk-viewport {
28
+ display: flex;
29
+ // A COLUMN, which is a statement about markup rather than about GTK: a GtkViewport holds
30
+ // exactly ONE child, so a row and a column are the same layout there. Markup can hand a
31
+ // viewport several children, and stacking them is the arrangement every one of them came
32
+ // for — a row would lay ten labels side by side, which is the one answer no reader of a
33
+ // scrollable expects. A single child is unaffected by the direction.
34
+ flex-direction: column;
35
+ align-items: flex-start;
36
+ justify-content: flex-start;
37
+ overflow: auto;
38
+ // Both axes' scrollbars, hidden — `-webkit-scrollbar` for the engine that honours
39
+ // `scrollbar-width: none` only since 121, the pairing `_carousel.scss` already uses.
40
+ scrollbar-width: none;
41
+
42
+ &::-webkit-scrollbar {
43
+ display: none;
44
+ }
45
+
46
+ // `flex: none` is `flex: 0 0 auto` — GTK's "the child's natural size, not less".
47
+ > * {
48
+ flex: none;
49
+ }
50
+ }
package/scss/_widget.scss CHANGED
@@ -4,7 +4,8 @@
4
4
  // projected `.blp` hands them to `buildSharedTree` as attributes (`halign="center"`). Until
5
5
  // this partial nothing read them, so the gallery's bottom sheet stretched the button its
6
6
  // Blueprint centres. The margins are not here: an attribute cannot carry a length into CSS
7
- // portably, so `shared-tree-builder.ts` writes them as inline style.
7
+ // portably, so `shared-tree-builder.ts` writes them as inline style — and so are
8
+ // `width-request` / `height-request`, as the `min-width` / `min-height` they are.
8
9
  //
9
10
  // ALIGNMENT IS AN AUTO MARGIN, because that is the one CSS placement that means the same on
10
11
  // both axes of a flex container and of a grid: GTK allocates a non-FILL child its natural
@@ -49,7 +50,17 @@
49
50
  margin-block: auto;
50
51
  }
51
52
 
52
- gtk-box:not([orientation='vertical']) > [hexpand],
53
- gtk-box[orientation='vertical'] > [vexpand] {
53
+ gtk-box:not([orientation='vertical']) > [hexpand]:not([hexpand='false']),
54
+ gtk-box[orientation='vertical'] > [vexpand]:not([vexpand='false']) {
54
55
  flex-grow: 1;
55
56
  }
57
+
58
+ // An AUTHORED `hexpand: false` is the one case where absence is not enough: a widget that
59
+ // grows by default (`<gtk-scrolled-window>` is `flex: 1 1 0%`, the allocation of a window in a
60
+ // column) must stop, and GTK then gives it its NATURAL size rather than nothing — hence the
61
+ // `auto` basis, not just a zero grow. `width-request` (an inline `min-width`) is the floor.
62
+ gtk-box:not([orientation='vertical']) > [hexpand='false'],
63
+ gtk-box[orientation='vertical'] > [vexpand='false'] {
64
+ flex-grow: 0;
65
+ flex-basis: auto;
66
+ }
package/scss/_window.scss CHANGED
@@ -1,11 +1,16 @@
1
1
  // _window.scss — adw-window styling.
2
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss (the frame; the
3
+ // `.maximized`/`.fullscreen` rules at 66-72 are the ones an in-page frame can use)
2
4
  // Reference: refs/adwaita-web/adwaita-web/scss/_window.scss
3
- // Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss
4
5
  // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
5
6
  // Copyright (c) 2025 csm (adwaita-web). MIT License.
6
7
  // Modifications: Adapted for @gjsify/adwaita-web Web Components.
7
8
 
8
- adw-window {
9
+ // `adw-application-window` is `adw-window` plus a menubar (it extends the class and adds nothing
10
+ // else), so it is the same frame: without this an application window was an inline box with no
11
+ // size at all, and a tree rooted at one measured 0 x 0.
12
+ adw-window,
13
+ adw-application-window {
9
14
  display: flex;
10
15
  flex-direction: column;
11
16
  background-color: var(--window-bg-color);
@@ -20,4 +25,128 @@ adw-window {
20
25
  overflow: hidden;
21
26
  outline: 1px solid rgb(255 255 255 / 7%);
22
27
  outline-offset: -1px;
28
+
29
+ // `window.maximized` / `window.fullscreen` zero the radius and drop the shadow
30
+ // (_window.scss:66-72). A page-sized window IS the maximised one here: the frame
31
+ // is in-page, so there is nothing outside it to cast a shadow on.
32
+ &.maximized,
33
+ &.fullscreen {
34
+ --window-radius: 0px;
35
+ outline: none;
36
+ box-shadow: none;
37
+ }
38
+ }
39
+
40
+ // The content area — the one child slot `Adw.Window:content` fills. It takes the
41
+ // window's own column, so a toolbar view dropped in stretches both ways.
42
+ .adw-window-content {
43
+ display: flex;
44
+ flex: 1 1 auto;
45
+ flex-direction: column;
46
+ min-height: 0;
47
+ min-width: 0;
48
+ }
49
+
50
+ // A window hands its one child the WHOLE allocation, whatever that child's own expand flags say.
51
+ // On the web a box is only as tall as what it holds, so the `Gtk.Box` a `.blp` roots its content
52
+ // in stopped at its header bar and the split view below it drew a quarter of the window.
53
+ .adw-window-content > gtk-box {
54
+ flex: 1 1 auto;
55
+ min-height: 0;
56
+ }
57
+
58
+ // <gtk-window> — the GTK frame, in the SAME file upstream styles `Adw.Window` in: libadwaita
59
+ // keys `window { &.csd { … } }` off the GtkWindow CSS node
60
+ // (refs/libadwaita/src/stylesheet/widgets/_window.scss:1-31), and this element IS a window
61
+ // as far as the stylesheet is concerned.
62
+ //
63
+ // The frame rules are `<adw-window>`'s, restated for the `gtk-` tag rather than shared
64
+ // through a selector list: `_reset.scss` re-roots the box model at each registered element,
65
+ // and a shared `adw-window, gtk-window` block would put two component resets in one rule.
66
+ //
67
+ // NOT the same as `<adw-window>`, deliberately. `Adw.Window` is a plain styled container —
68
+ // nothing about it is GTK's `GtkWindow` — while this one answers the FRAME properties:
69
+ // `decorated` drops the titlebar strip, `maximized` and `fullscreened` square the corners
70
+ // off and drop the shadow (`_window.scss:66-72`), and the strip itself is either the
71
+ // application's `titlebar` or the two `<gtk-window-controls>` a server-side decoration would
72
+ // have had. See `gtk-window.ts` for the whole list and each source line.
73
+ gtk-window,
74
+ gtk-application-window {
75
+ display: flex;
76
+ flex-direction: column;
77
+ position: relative;
78
+ box-sizing: border-box;
79
+ background-color: var(--window-bg-color);
80
+ color: var(--window-fg-color);
81
+ font-family: var(--font-family);
82
+ font-size: var(--font-size-base);
83
+ border-radius: var(--window-radius);
84
+ outline: 1px solid rgb(255 255 255 / 7%);
85
+ outline-offset: -1px;
86
+ box-shadow:
87
+ 0 0 14px 5px rgb(0 0 0 / 15%),
88
+ 0 0 5px 2px rgb(0 0 0 / 10%),
89
+ 0 0 0 1px rgb(0 0 0 / 5%);
90
+ overflow: hidden;
91
+
92
+ // `_window.scss:66-72` — a maximized or fullscreen window fills the screen, so it has no
93
+ // corners to round and no frame to cast a shadow from.
94
+ &.maximized,
95
+ &.fullscreen {
96
+ --window-radius: 0px;
97
+ outline: none;
98
+ box-shadow: none;
99
+ }
100
+
101
+ // The strip: an application's `titlebar` slot, or the two window-control groups and the
102
+ // window's own title. `min-width: 0` on the title is what lets a long one ellipsize
103
+ // instead of pushing the end controls out of the frame.
104
+ > .adw-gtk-window-titlebar {
105
+ display: flex;
106
+ align-items: center;
107
+ flex-shrink: 0;
108
+ min-height: 47px;
109
+ background-color: var(--headerbar-bg-color);
110
+ color: var(--headerbar-fg-color);
111
+ box-shadow: inset 0 -1px var(--headerbar-shade-color);
112
+
113
+ > .adw-gtk-window-title {
114
+ flex: 1;
115
+ min-width: 0;
116
+ padding: 0 12px;
117
+ font-weight: bold;
118
+ text-align: center;
119
+ white-space: nowrap;
120
+ overflow: hidden;
121
+ text-overflow: ellipsis;
122
+ }
123
+
124
+ // A window with no title shows no title; GTK would draw the empty SSD label, and an
125
+ // empty flex track is exactly that.
126
+ &:has(> .adw-gtk-window-title:not([title])) > .adw-gtk-window-title {
127
+ display: none;
128
+ }
129
+ }
130
+
131
+ > .adw-gtk-application-window-menubar {
132
+ display: flex;
133
+ align-items: center;
134
+ flex-shrink: 0;
135
+ gap: 6px;
136
+ padding: 0 6px;
137
+ background-color: var(--headerbar-bg-color);
138
+ color: var(--headerbar-fg-color);
139
+ box-shadow: inset 0 -1px var(--headerbar-shade-color);
140
+ }
141
+
142
+ // `Gtk.Box`'s own `border-spacing` is 0 here; the gap between the window's children is the
143
+ // application's business, and the content box exists so it can have one without the strip
144
+ // taking part.
145
+ > .adw-gtk-window-content {
146
+ display: flex;
147
+ flex-direction: column;
148
+ flex: 1;
149
+ min-height: 0;
150
+ overflow: auto;
151
+ }
23
152
  }
@@ -0,0 +1,20 @@
1
+ // _window_handle.scss — <gtk-window-handle>: the box GTK's `GtkBinLayout` gives the child.
2
+ //
3
+ // `gtk_window_handle_class_init` sets `GTK_TYPE_BIN_LAYOUT` and the `windowhandle` CSS name
4
+ // (gtkwindowhandle.c:553-554), and libadwaita has NO rule for either — the widget contributes
5
+ // no surface, a shadow or a border, only the titlebar's gestures. `display: contents` is that
6
+ // in CSS: the child keeps its own box, participates in its PARENT's layout as if the handle
7
+ // were not there, and a titlebar strip can go anywhere a header bar goes without moving
8
+ // anything around it.
9
+ //
10
+ // `user-select: none` is the one declaration that is not C: a titlebar is dragged, not
11
+ // selected, and GTK's drag gesture swallows the text selection a browser would otherwise
12
+ // start on the way to a triple click.
13
+
14
+ gtk-window-handle {
15
+ display: contents;
16
+
17
+ // The drag belongs to the strip, not to the text inside it, and a double click on the
18
+ // title is the `toggle-maximize` gesture rather than a word selection.
19
+ user-select: none;
20
+ }