@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,729 @@
1
+ // _stack.scss — <gtk-stack>: one visible child out of many, with the animated
2
+ // change between them.
3
+ //
4
+ // Upstream libadwaita styles the stack itself NOT AT ALL: `stack` appears in exactly
5
+ // two rules of the whole stylesheet — `notebook > stack:not(:only-child)` for the
6
+ // background (refs/libadwaita/src/stylesheet/widgets/_notebook.scss:213-215) and the
7
+ // `stackswitcher`/`placessidebar` drop-target carve-out
8
+ // (refs/libadwaita/src/stylesheet/_common.scss:81-89). Everything visible about a stack
9
+ // is GTK's own node contract, which C declares: the `stack` css name and the GROUP
10
+ // accessible role (gtkstack.c:1067-1068), the child that is laid out at all
11
+ // (:2778-2831), the overlapping pair a transition paints (:1509-1519, :2662-2700) and
12
+ // the measured size (:2833-2945). What follows is that contract written as CSS, with the
13
+ // two libadwaita rules that reach a stack carried over verbatim where they apply.
14
+ //
15
+ // `<gtk-stack-switcher>` and `<gtk-stack-sidebar>` extend this same partial: libadwaita
16
+ // styles their internals out of `_buttons.scss` and `_sidebars.scss` respectively, so the
17
+ // three widgets share one stylesheet the way upstream shares three files.
18
+ //
19
+ // Reference: refs/gtk/gtk/gtkstack.c
20
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_notebook.scss:213-215
21
+ // Copyright (c) The GTK Team. LGPLv2.1+.
22
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
23
+ // Modifications: Adapted for @gjsify/adwaita-web Web Components.
24
+
25
+ gtk-stack {
26
+ display: flex;
27
+ box-sizing: border-box;
28
+ position: relative;
29
+ min-width: 0;
30
+ min-height: 0;
31
+
32
+ // GTK allocates every child the stack's own size and lays out only the visible one
33
+ // (gtkstack.c:2778-2831), so a page is a stretched box: `flex: 1 1 auto` plus the
34
+ // cross-axis stretch `align-items: stretch` already gives. A page with a size
35
+ // request of its own keeps it — `flex-basis: auto` is what makes the basis the
36
+ // content rather than 0.
37
+ > .adw-stack-page {
38
+ box-sizing: border-box;
39
+ flex: 1 1 auto;
40
+ min-width: 0;
41
+ min-height: 0;
42
+
43
+ &:not(.visible-page) {
44
+ display: none;
45
+ }
46
+
47
+ // An animated page is positioned, because two pages overlap for its duration
48
+ // (gtkstack.c:1509-1519 keeps `last_visible_child` alive until the tracker is
49
+ // AFTER, and the snapshot node paints both, :2662-2700).
50
+ &.transitioning-in,
51
+ &.transitioning-out {
52
+ position: absolute;
53
+ inset: 0;
54
+ display: flex;
55
+ flex-direction: column;
56
+ }
57
+ }
58
+
59
+ // `hhomogeneous` is TRUE by default (gtkstack.c:981-987), and the measure pass then
60
+ // looks at the VISIBLE child alone on that axis (gtkstack.c:2899-2905) — the stack is
61
+ // as big as the current page. Turned off, the stack is as big as the LARGEST page,
62
+ // which is `max-content` on the cross axis and `flex: 1 1 auto` along the main one.
63
+ &:not([hhomogeneous]) > .adw-stack-page {
64
+ flex: 0 1 auto;
65
+ width: max-content;
66
+ max-width: 100%;
67
+ }
68
+
69
+ &:not([vhomogeneous]) > .adw-stack-page {
70
+ height: max-content;
71
+ max-height: 100%;
72
+ }
73
+
74
+ // `interpolate-size` (gtkstack.c:2148-2172) smooths the SIZE change too, by
75
+ // interpolating the measured min/natural between the two pages (gtkstack.c:2847-2859,
76
+ // :2935-2943). A browser negotiates one layout, so the analogue is a CSS transition
77
+ // on the stack's own box for the duration of the page change — which is the same
78
+ // promise, reached through the mechanism this renderer actually has.
79
+ &[interpolate-size] {
80
+ transition-property: width, height;
81
+ transition-duration: var(--stack-transition-duration, 200ms);
82
+ transition-timing-function: cubic-bezier(0.2, 0, 0, 1);
83
+ }
84
+ }
85
+
86
+ // ── Transitions ────────────────────────────────────────────────────────────
87
+ // `transition-duration` is the progress tracker's length (gtkstack.c:1408-1411) and
88
+ // `transition-running` is the flag the tick callback sets and clears
89
+ // (gtkstack.c:1283-1286, :1313-1315). Every animation below is therefore written for
90
+ // the FORWARD direction and mirrored by `animation-direction: reverse` for a backward
91
+ // one — which is what `get_simple_transition_type` decides in C (gtkstack.c:1539-1556),
92
+ // the incoming page sitting after the outgoing one meaning forward.
93
+ // The mixins take the property/value PAIRS as a map and interpolate whole declarations,
94
+ // because a declaration list cannot be interpolated into a `from { … }` block: `@content`
95
+ // would be the way to accept declarations, but the keyframe names then cannot vary.
96
+ @mixin stack-transition($name, $in-from, $in-to, $out-from, $out-to) {
97
+ &[data-transition-type='#{$name}'] > .adw-stack-page.transitioning-in {
98
+ animation-name: stack-in-#{$name};
99
+ animation-duration: var(--stack-transition-duration, 200ms);
100
+ animation-fill-mode: both;
101
+ }
102
+
103
+ &[data-transition-type='#{$name}'] > .adw-stack-page.transitioning-out {
104
+ animation-name: stack-out-#{$name};
105
+ animation-duration: var(--stack-transition-duration, 200ms);
106
+ animation-fill-mode: both;
107
+ }
108
+
109
+ @keyframes stack-in-#{$name} {
110
+ from {
111
+ @each $prop, $value in $in-from {
112
+ #{$prop}: $value;
113
+ }
114
+ }
115
+
116
+ to {
117
+ @each $prop, $value in $in-to {
118
+ #{$prop}: $value;
119
+ }
120
+ }
121
+ }
122
+
123
+ @keyframes stack-out-#{$name} {
124
+ from {
125
+ @each $prop, $value in $out-from {
126
+ #{$prop}: $value;
127
+ }
128
+ }
129
+
130
+ to {
131
+ @each $prop, $value in $out-to {
132
+ #{$prop}: $value;
133
+ }
134
+ }
135
+ }
136
+ }
137
+
138
+ @mixin stack-transition-in-only($name, $in-from, $in-to) {
139
+ &[data-transition-type='#{$name}'] > .adw-stack-page.transitioning-in {
140
+ animation-name: stack-in-#{$name};
141
+ animation-duration: var(--stack-transition-duration, 200ms);
142
+ animation-fill-mode: both;
143
+ }
144
+
145
+ @keyframes stack-in-#{$name} {
146
+ from {
147
+ @each $prop, $value in $in-from {
148
+ #{$prop}: $value;
149
+ }
150
+ }
151
+
152
+ to {
153
+ @each $prop, $value in $in-to {
154
+ #{$prop}: $value;
155
+ }
156
+ }
157
+ }
158
+ }
159
+
160
+ // CROSSFADE — GTK_STACK_TRANSITION_TYPE_CROSSFADE (gtkstack.c:98): both pages are on
161
+ // screen at once and their opacity is interpolated (gtkstack.c:2432-2454).
162
+ @include stack-transition(crossfade, (opacity: 0), (opacity: 1), (opacity: 1), (opacity: 0));
163
+
164
+ // SLIDE — `slide-right` … `slide-down` (gtkstack.c:99-102). The outgoing page LEAVES in
165
+ // the named direction and the incoming one arrives from the opposite side, which is why
166
+ // one pair of keyframes covers both (gtkstack.c:2597-2660).
167
+ @include stack-transition(
168
+ slide-right,
169
+ (transform: translateX(-100%)),
170
+ (transform: translateX(0)),
171
+ (transform: translateX(0)),
172
+ (transform: translateX(100%))
173
+ );
174
+ @include stack-transition(
175
+ slide-left,
176
+ (transform: translateX(100%)),
177
+ (transform: translateX(0)),
178
+ (transform: translateX(0)),
179
+ (transform: translateX(-100%))
180
+ );
181
+ @include stack-transition(
182
+ slide-up,
183
+ (transform: translateY(100%)),
184
+ (transform: translateY(0)),
185
+ (transform: translateY(0)),
186
+ (transform: translateY(-100%))
187
+ );
188
+ @include stack-transition(
189
+ slide-down,
190
+ (transform: translateY(-100%)),
191
+ (transform: translateY(0)),
192
+ (transform: translateY(0)),
193
+ (transform: translateY(100%))
194
+ );
195
+
196
+ // THE TWO-WAY TYPES HAVE NO RULES OF THEIR OWN. `slide-left-right`, `slide-up-down`,
197
+ // the four `over-*-*` pairs and `rotate-left-right` (gtkstack.c:103-106, :118) are
198
+ // resolved by `get_simple_transition_type` into ONE of the one-directional types above,
199
+ // before the animation starts (gtkstack.c:1546-1561, :1162-1200) — so the element
200
+ // writes `slide-left` or `slide-right` into `data-transition-type` and never the
201
+ // two-way nick. That is C's own arrangement, and it is why this partial has no
202
+ // direction attribute to key on.
203
+
204
+ // OVER-… — the incoming page slides IN OVER the outgoing one, which stays put
205
+ // (gtk_stack_snapshot_over, gtkstack.c:2456-2513).
206
+ @include stack-transition-in-only(over-up, (transform: translateY(100%)), (transform: translateY(0)));
207
+ @include stack-transition-in-only(over-down, (transform: translateY(-100%)), (transform: translateY(0)));
208
+ @include stack-transition-in-only(over-left, (transform: translateX(100%)), (transform: translateX(0)));
209
+ @include stack-transition-in-only(over-right, (transform: translateX(-100%)), (transform: translateX(0)));
210
+
211
+ // UNDER-… — the incoming page slides in UNDERNEATH the outgoing one, which therefore
212
+ // gets the z-index it does not have for OVER (gtkstack.c:2456-2513).
213
+ @include stack-transition-in-only(under-up, (transform: translateY(100%)), (transform: translateY(0)));
214
+ @include stack-transition-in-only(under-down, (transform: translateY(-100%)), (transform: translateY(0)));
215
+ @include stack-transition-in-only(under-left, (transform: translateX(100%)), (transform: translateX(0)));
216
+ @include stack-transition-in-only(under-right, (transform: translateX(-100%)), (transform: translateX(0)));
217
+
218
+ // The stacking order is the whole difference between OVER and UNDER, and it is a single
219
+ // declaration: the outgoing page stays above the incoming one for UNDER, and below it
220
+ // for OVER.
221
+ gtk-stack[data-transition-type^='over-'] > .adw-stack-page.transitioning-in {
222
+ z-index: 1;
223
+ }
224
+
225
+ gtk-stack[data-transition-type^='under-'] > .adw-stack-page.transitioning-out {
226
+ z-index: 1;
227
+ }
228
+
229
+ // ROTATE — `rotate-left` / `rotate-right` / `rotate-left-right` (gtkstack.c:116-118):
230
+ // a Y-axis rotation of the crossfade, `perspective` standing in for GTK's 3D context.
231
+ @include stack-transition-in-only(
232
+ rotate-left,
233
+ (transform: perspective(800px) rotateY(90deg)),
234
+ (transform: perspective(800px) rotateY(0deg))
235
+ );
236
+ @include stack-transition-in-only(
237
+ rotate-right,
238
+ (transform: perspective(800px) rotateY(-90deg)),
239
+ (transform: perspective(800px) rotateY(0deg))
240
+ );
241
+
242
+ // CUBE (gtkstack.c:107) and the transition's `NONE`: no animation, so nothing to write.
243
+ // `gtk_stack_start_transition` skips the whole tracker when the effective type is NONE
244
+ // or the duration is 0 (gtkstack.c:1400-1403), which is what the element does too — the
245
+ // `transition-running` attribute is simply never set.
246
+ // ── Gtk.StackSwitcher ──────────────────────────────────────────────────────
247
+ // A linked row of toggle buttons, one per page (gtkstackswitcher.c:277-300), and C puts
248
+ // the `.linked` class on the switcher itself (gtkstackswitcher.c:49-57) so the buttons
249
+ // share one rounded group instead of being individually rounded.
250
+ gtk-stack-switcher {
251
+ display: flex;
252
+ box-sizing: border-box;
253
+ min-width: 0;
254
+
255
+ > .adw-stack-switcher-button {
256
+ display: inline-flex;
257
+ flex: 1 1 0;
258
+ min-width: 0;
259
+ align-items: center;
260
+ justify-content: center;
261
+ gap: 6px;
262
+ box-sizing: border-box;
263
+ margin: 0;
264
+ padding: 3px 12px;
265
+ min-height: 30px;
266
+ border: 1px solid var(--border-color, var(--separator-color));
267
+ background-color: var(--button-bg-color);
268
+ color: var(--window-fg-color);
269
+ font-family: var(--font-family);
270
+ font-size: var(--font-size-base);
271
+ cursor: pointer;
272
+ user-select: none;
273
+ -webkit-user-select: none;
274
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
275
+
276
+ // `.linked` (gtkstackswitcher.c:49-57): the inner corners lose their radius and
277
+ // the neighbours' borders collapse, so the row reads as one control. This is the
278
+ // same shape `_linked.scss` builds for `.linked > button` in libadwaita.
279
+ &:first-child {
280
+ border-start-start-radius: var(--button-radius);
281
+ border-end-start-radius: var(--button-radius);
282
+ }
283
+
284
+ &:last-child {
285
+ border-start-end-radius: var(--button-radius);
286
+ border-end-end-radius: var(--button-radius);
287
+ }
288
+
289
+ &:not(:first-child) {
290
+ border-inline-start-width: 0;
291
+ }
292
+
293
+ &:not(:last-child) {
294
+ border-inline-end-width: 0;
295
+ }
296
+
297
+ &:hover {
298
+ background-color: var(--button-hover-color);
299
+ }
300
+
301
+ &:active {
302
+ background-color: var(--button-active-color);
303
+ }
304
+
305
+ &:focus-visible {
306
+ outline: 2px solid var(--accent-color);
307
+ outline-offset: -2px;
308
+ }
309
+
310
+ // The active button is the SELECTED page: `on_button_toggled` drives the stack's
311
+ // selection from the toggle (gtkstackswitcher.c:117-133), so the checked styling
312
+ // has to sit on the same state. `_buttons.scss` gives the checked button the
313
+ // `--button-active-color` fill, and the switcher's own padding is widened by
314
+ // 6px on each side for the needs-attention dot (_buttons.scss:282-292).
315
+ &.active {
316
+ background-color: var(--button-active-color);
317
+ color: var(--window-fg-color);
318
+ }
319
+
320
+ &:disabled {
321
+ opacity: var(--strong-disabled-opacity, 0.45);
322
+
323
+ > * {
324
+ opacity: 1;
325
+ }
326
+ }
327
+
328
+ .adw-stack-switcher-title {
329
+ min-width: 0;
330
+ overflow: hidden;
331
+ text-overflow: ellipsis;
332
+ white-space: nowrap;
333
+ }
334
+
335
+ .adw-stack-switcher-icon {
336
+ flex: none;
337
+ width: 16px;
338
+ height: 16px;
339
+ }
340
+
341
+ // `%needs_attention` (_buttons.scss:294-300, _sidebars.scss:101-105): a 6px dot
342
+ // behind the label, drawn rather than themed, because a custom SVG mask has no
343
+ // libadwaita counterpart to borrow.
344
+ &.needs-attention::after {
345
+ content: '';
346
+ display: inline-block;
347
+ width: 6px;
348
+ height: 6px;
349
+ margin-inline-start: 6px;
350
+ border-radius: 50%;
351
+ background-color: var(--accent-bg-color);
352
+ }
353
+ }
354
+
355
+ // `icon-button` vs `text-button` (gtkstackswitcher.c:158-176): an icon-only button
356
+ // gets a square min-width, a titled one a 100px floor (`&.text-button { min-width:
357
+ // 100px }`, _buttons.scss:296).
358
+ &[data-button-mode='icon'] > .adw-stack-switcher-button {
359
+ min-width: 34px;
360
+ }
361
+
362
+ &[data-button-mode='text'] > .adw-stack-switcher-button {
363
+ min-width: 100px;
364
+ }
365
+
366
+ // `GtkStackSwitcher` is a `GtkOrientable` (gtkstackswitcher.c:47), so the row can be
367
+ // vertical — the C installs a GtkBoxLayout whose orientation follows the property
368
+ // (:500-513).
369
+ &[orientation='vertical'] {
370
+ flex-direction: column;
371
+
372
+ > .adw-stack-switcher-button {
373
+ flex: 0 1 auto;
374
+
375
+ &:not(:first-child) {
376
+ border-inline-start-width: 1px;
377
+ border-inline-end-width: 1px;
378
+ border-top-width: 0;
379
+ }
380
+
381
+ &:not(:last-child) {
382
+ border-bottom-width: 0;
383
+ }
384
+ }
385
+ }
386
+ }
387
+
388
+ // ── Gtk.StackSidebar ───────────────────────────────────────────────────────
389
+ // `stacksidebar row` — a vertical list of the stack's pages
390
+ // (refs/libadwaita/src/stylesheet/widgets/_sidebars.scss:95-108): 10px 4px padding, a
391
+ // label inset by 6px, and the same `.needs-attention` treatment. The rows live in a
392
+ // `.navigation-sidebar` list (gtkstacksidebar.c:155), which is the list libadwaita
393
+ // already styles — so the list's own background comes from there and this partial only
394
+ // gives the ROW its metrics.
395
+ gtk-stack-sidebar {
396
+ display: flex;
397
+ flex-direction: column;
398
+ box-sizing: border-box;
399
+ overflow-y: auto;
400
+
401
+ > .adw-stack-sidebar-list {
402
+ display: flex;
403
+ flex-direction: column;
404
+ box-sizing: border-box;
405
+ }
406
+
407
+ > .adw-stack-sidebar-list > .adw-stack-sidebar-row {
408
+ display: flex;
409
+ align-items: center;
410
+ gap: 6px;
411
+ box-sizing: border-box;
412
+ padding: 10px 4px;
413
+ min-height: 36px;
414
+ border: none;
415
+ background: none;
416
+ color: inherit;
417
+ font-family: var(--font-family);
418
+ font-size: var(--font-size-base);
419
+ text-align: start;
420
+ cursor: pointer;
421
+ transition: background-color 150ms ease-in-out;
422
+
423
+ &:hover {
424
+ background-color: var(--button-hover-color);
425
+ }
426
+
427
+ &:active {
428
+ background-color: var(--button-active-color);
429
+ }
430
+
431
+ &:focus-visible {
432
+ outline: 2px solid var(--accent-color);
433
+ outline-offset: -2px;
434
+ }
435
+
436
+ // The row carries the selection, exactly as a `GtkListBoxRow` does
437
+ // (gtkstacksidebar.c:317-338 selects and unselects rows).
438
+ &.selected {
439
+ background-color: var(--button-active-color);
440
+ color: var(--window-fg-color);
441
+ }
442
+
443
+ .adw-stack-sidebar-title {
444
+ min-width: 0;
445
+ overflow: hidden;
446
+ text-overflow: ellipsis;
447
+ white-space: nowrap;
448
+ // `> label { padding-left: 6px; padding-right: 6px }`
449
+ // (_sidebars.scss:97-100), here as padding so the ellipsis measures right.
450
+ padding: 0 6px;
451
+ }
452
+
453
+ // `%needs_attention` (_sidebars.scss:101-105): a 6px dot in front of the label,
454
+ // drawn as a gradient because a custom SVG mask has no libadwaita counterpart
455
+ // to borrow.
456
+ &.needs-attention .adw-stack-sidebar-title {
457
+ background-image: radial-gradient(circle, var(--accent-bg-color) 6px, transparent 6px);
458
+ background-size: 6px 6px;
459
+ background-repeat: no-repeat;
460
+ background-position: left center;
461
+ }
462
+ }
463
+ }
464
+
465
+ // ── Gtk.Notebook ───────────────────────────────────────────────────────────
466
+ // A stack with its own tab bar on one edge — which libadwaita styles in full, in
467
+ // ONE file, because the tab strip is styled as part of the notebook rather than as a
468
+ // widget of its own: refs/libadwaita/src/stylesheet/widgets/_notebook.scss.
469
+ //
470
+ // The node tree is C's and libadwaita's: `notebook > header > tabs > tab` for the strip
471
+ // and `notebook > stack:not(:only-child)` for the page area (_notebook.scss:4-10,
472
+ // :213-215). The `:not(:only-child)` on the page area is there for a "hidden" notebook
473
+ // whose header is the stack's only sibling — the element reproduces the intent directly,
474
+ // by giving the page area its background only when the header is there too.
475
+ //
476
+ // `show-border` IS a CSS CLASS in C and not a branch of this rule: `gtk_notebook_set_show_border`
477
+ // adds `.frame` and clearing the property removes it (gtknotebook.c:6134-6146), and this
478
+ // stylesheet carries libadwaita's rule for that class already — `frame, .frame { border: 1px
479
+ // solid $border_color }` (widgets/_misc.scss:4-7), ported whole into `_style_classes.scss` — so
480
+ // the element toggles the class and nothing here restates it. Its own docs say the bevel only
481
+ // shows when the TABS are not (gtknotebook.c:6125-6131), which is what the header's border below
482
+ // does to it.
483
+ @each $pos, $edge, $shadow in (
484
+ ('top', 'bottom', 'inset 0 -4px'),
485
+ ('bottom', 'top', 'inset 0 4px'),
486
+ ('left', 'right', 'inset -4px 0'),
487
+ ('right', 'left', 'inset 4px 0'),
488
+ ) {
489
+ // The header's border is on the edge FACING the pages — `&.top { border-bottom-style:
490
+ // solid }` and its three siblings (_notebook.scss:12-58) — and the tab strip is pulled
491
+ // onto it by the negative margin just below, so the tab's own inset shadow lands ON the
492
+ // border line. Written as four rules rather than nested under `&`, because the edge is a
493
+ // property of the NOTEBOOK and a tab is three levels down from it.
494
+ gtk-notebook[data-tab-pos='#{$pos}'] > .adw-notebook-header {
495
+ border-#{$edge}-style: solid;
496
+ }
497
+
498
+ // `> tabs { margin-bottom: -2px }` on `.top` (_notebook.scss:15, and its siblings): the
499
+ // strip overlaps the border by one more pixel, so a 37 px tab makes a 37 px header.
500
+ gtk-notebook[data-tab-pos='#{$pos}'] > .adw-notebook-header > .adw-notebook-tabs {
501
+ margin-#{$edge}: -2px;
502
+ }
503
+
504
+ // `:hover` and `:checked` each get the same inset, in the border colour and in the
505
+ // accent respectively (_notebook.scss:17-19 and its three siblings). The shadow is a
506
+ // whole `box-shadow` value rather than a bare inset, so it is interpolated whole.
507
+ gtk-notebook[data-tab-pos='#{$pos}'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab:hover {
508
+ box-shadow: #{$shadow} var(--border-color, var(--separator-color));
509
+ }
510
+
511
+ gtk-notebook[data-tab-pos='#{$pos}'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab.active {
512
+ box-shadow: #{$shadow} var(--accent-bg-color);
513
+ }
514
+ }
515
+
516
+ gtk-notebook {
517
+ display: flex;
518
+ box-sizing: border-box;
519
+ min-width: 0;
520
+ min-height: 0;
521
+ background-color: var(--view-bg-color);
522
+ color: var(--view-fg-color);
523
+
524
+ // `tab-pos` decides the EDGE, not the document order, so the two directions are one
525
+ // `flex-direction` each rather than a re-ordering of the children — and RTL swaps left
526
+ // and right (`get_effective_tab_pos`, gtknotebook.c:1741-1756), which is what the
527
+ // `data-tab-pos` the element reflects is for.
528
+ &[data-tab-pos='top'] {
529
+ flex-direction: column;
530
+ }
531
+
532
+ &[data-tab-pos='bottom'] {
533
+ flex-direction: column-reverse;
534
+ }
535
+
536
+ &[data-tab-pos='left'] {
537
+ flex-direction: row;
538
+ }
539
+
540
+ &[data-tab-pos='right'] {
541
+ flex-direction: row-reverse;
542
+ }
543
+
544
+ > .adw-notebook-header {
545
+ flex: none;
546
+ box-sizing: border-box;
547
+ padding: 1px;
548
+
549
+ // `border-width: 1px` with no style, so that only the edge `@each` above turns
550
+ // solid is drawn: a GTK border is `none` until something says otherwise
551
+ // (_notebook.scss:6-9).
552
+ border-width: 1px;
553
+ border-style: none;
554
+ border-color: var(--border-color, var(--separator-color));
555
+ background-clip: padding-box;
556
+
557
+ // `gtk_widget_set_visible (header_widget, show_tabs)` (gtknotebook.c:5467).
558
+ &[hidden] {
559
+ display: none;
560
+ }
561
+ }
562
+
563
+ // `> tabs { margin: -1px }` (_notebook.scss:11) plus the four-pixel inner padding
564
+ // `_notebook.scss:165-207`, which keep the strip off the header's own padding and off
565
+ // the border `@each` drew on the facing edge.
566
+ > .adw-notebook-header > .adw-notebook-tabs {
567
+ display: flex;
568
+ align-items: stretch;
569
+ margin: -1px;
570
+ padding: 0 4px;
571
+
572
+ // `scrollable`'s arrows are not ported (gtknotebook.c:1139-1148), so the strip
573
+ // overflows and scrolls instead of the two arrow buttons GTK scrolls with.
574
+ overflow-x: auto;
575
+ scrollbar-width: none;
576
+ -ms-overflow-style: none;
577
+
578
+ &::-webkit-scrollbar {
579
+ display: none;
580
+ }
581
+ }
582
+
583
+ // The two vertical edges turn the strip: the padding and the margin that were
584
+ // horizontal become vertical, and so does the overflow (_notebook.scss:188-207).
585
+ &[data-tab-pos='left'] > .adw-notebook-header > .adw-notebook-tabs,
586
+ &[data-tab-pos='right'] > .adw-notebook-header > .adw-notebook-tabs {
587
+ flex-direction: column;
588
+ padding: 4px 0;
589
+ overflow-x: visible;
590
+ overflow-y: auto;
591
+ }
592
+
593
+ // …and the four-pixel gap between two tabs, which was `margin-left/right: 4px` on the
594
+ // horizontal edges and is `margin-top/bottom: 4px` on the vertical ones
595
+ // (_notebook.scss:181-183, mirrored at :197-199).
596
+ &[data-tab-pos='left'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab,
597
+ &[data-tab-pos='right'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab {
598
+ margin: 4px 0;
599
+ }
600
+
601
+ > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab {
602
+ display: inline-flex;
603
+ align-items: center;
604
+ justify-content: center;
605
+
606
+ // GTK's `min-height`/`min-width` size the CONTENT box, so the padding comes on top:
607
+ // 30 + 3 + 4 = 37 high, 30 + 2 * 12 = 54 wide, measured on a native Gtk.Notebook.
608
+ box-sizing: content-box;
609
+
610
+ // `min-height: 30px; min-width: 30px; padding: 3px 12px; font-weight: normal`
611
+ // (_notebook.scss:117-124) and the four-pixel gap `margin-left/right: 4px`
612
+ // (_notebook.scss:181-183, mirrored at :197-199).
613
+ min-width: 30px;
614
+ min-height: 30px;
615
+ margin: 0 4px;
616
+ padding: 3px 12px;
617
+ border: none;
618
+ border-radius: var(--button-radius);
619
+ background: none;
620
+ color: inherit;
621
+ font-family: var(--font-family);
622
+ font-size: var(--font-size-base);
623
+ font-weight: normal;
624
+ line-height: 1;
625
+ white-space: nowrap;
626
+ cursor: pointer;
627
+ user-select: none;
628
+ -webkit-user-select: none;
629
+ transition: background-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
630
+
631
+ // `tab-fill` (TRUE by default, gtknotebook.c:672-681) only decides whether an
632
+ // EXPANDED tab fills the space it was given; without `tab-expand` a tab keeps its
633
+ // natural width, which the native measurement shows (54 px, not stretched).
634
+ flex: 0 0 auto;
635
+
636
+ &.expand {
637
+ flex: 1 1 0;
638
+ min-width: 0;
639
+ }
640
+
641
+ // `$hover_color` (color-mix in srgb currentColor 7%, transparent), the pair
642
+ // `&:hover, &:active` sets (_notebook.scss:126-128, _colors.scss:268).
643
+ &:hover,
644
+ &:active {
645
+ background-color: color-mix(in srgb, currentColor 7%, transparent);
646
+ }
647
+
648
+ // `:checked` on the tab, which C sets when the page becomes current
649
+ // (gtknotebook.c:5466) — `$selected_color` behind it (_colors.scss:270) and the
650
+ // accent underline of `_notebook.scss:19` in front of it.
651
+ &.active {
652
+ background-color: color-mix(in srgb, currentColor 10%, transparent);
653
+ }
654
+
655
+ // The focus ring, `focus-ring("> header > tabs > tab:checked", $offset: -2px)`
656
+ // (_notebook.scss:3).
657
+ &:focus-visible {
658
+ outline: 2px solid var(--accent-color);
659
+ outline-offset: -2px;
660
+ }
661
+
662
+ // A page whose child is hidden takes its tab with it
663
+ // (`gtk_widget_set_visible (page->tab_label, … && gtk_widget_get_visible
664
+ // (page->child))`, gtknotebook.c:4117-4118), which is what `tab.hidden` reflects.
665
+ &[hidden] {
666
+ display: none;
667
+ }
668
+ }
669
+
670
+ // `&.top > tabs > tab { padding-bottom: 4px }` and its mirror (_notebook.scss:209-210).
671
+ &:not([data-tab-pos]) > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab,
672
+ &[data-tab-pos='top'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab {
673
+ padding-bottom: 4px;
674
+ }
675
+
676
+ &[data-tab-pos='bottom'] > .adw-notebook-header > .adw-notebook-tabs > .adw-notebook-tab {
677
+ padding-top: 4px;
678
+ }
679
+
680
+ // The page area, which is a GtkStack inside the C (`gtk_stack_set_visible_child` at
681
+ // gtknotebook.c:5476) and so is one visible child here. `notebook > stack:not(:only-
682
+ // child)` gives it the view background (_notebook.scss:213-215).
683
+ > .adw-notebook-page {
684
+ box-sizing: border-box;
685
+ flex: 1 1 auto;
686
+ min-width: 0;
687
+ min-height: 0;
688
+
689
+ &:not(.visible-page) {
690
+ display: none;
691
+ }
692
+ }
693
+
694
+ // `enable-popup`'s menu (gtknotebook.c:6420-6462 builds it, :2684-2692 pops it up),
695
+ // as a DOM listbox over the page.
696
+ > .adw-notebook-menu {
697
+ position: absolute;
698
+ z-index: 20;
699
+ box-sizing: border-box;
700
+ min-width: 160px;
701
+ padding: var(--spacing-xs) 0;
702
+ border-radius: var(--window-radius);
703
+ background-color: var(--window-bg-color);
704
+ color: var(--window-fg-color);
705
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 2px 8px 2px rgba(0, 0, 0, 0.06);
706
+ }
707
+
708
+ > .adw-notebook-menu > .adw-notebook-menu-item {
709
+ display: block;
710
+ box-sizing: border-box;
711
+ width: 100%;
712
+ min-height: 30px;
713
+ margin: 0 var(--spacing-xs) 2px;
714
+ padding: 3px 14px;
715
+ border: none;
716
+ border-radius: var(--button-radius);
717
+ background: none;
718
+ color: inherit;
719
+ font-family: var(--font-family);
720
+ font-size: var(--font-size-base);
721
+ text-align: start;
722
+ cursor: pointer;
723
+
724
+ &:hover,
725
+ &[aria-selected='true'] {
726
+ background-color: var(--button-active-color);
727
+ }
728
+ }
729
+ }