@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
@@ -0,0 +1,200 @@
1
+ // <gtk-search-bar> — `Gtk.SearchBar`, the strip that reveals a search entry when search starts.
2
+ //
3
+ // IT IS A REVEALER, AND THE PROPERTY IS THE REVEALER'S. `GtkSearchBar` is
4
+ // `searchbar > revealer > box > { child, button.close }` (gtksearchbar.c:66-81,368-390), and
5
+ // `search-mode-enabled` IS `reveal-child` on that revealer (gtksearchbar.c:512-517,183-205)
6
+ // — the C's own getter reads the revealer, not a flag. So one attribute decides both whether
7
+ // the strip is shown and whether the search is on, which is what makes the element's state
8
+ // a single boolean.
9
+ //
10
+ // WHAT TURNS IT ON, all four from the C: `search-mode-enabled` set by the application
11
+ // (:512-517), typing into the connected editable (`input-intercepted`, :210-218), Escape on
12
+ // a search entry (`stop-search`, :174-177) and the close button (:207-209). TWO things turn
13
+ // it off, and the second is the C's own rule: hiding clears the entry's text
14
+ // (`reveal_child_changed_cb`, :183-205), so a search that is dismissed leaves nothing behind.
15
+ //
16
+ // THE ENTRY IS THE CHILD, AND THE C IS EXPLICIT ABOUT WHICH KINDS. `connect_entry` takes any
17
+ // `GtkEditable`, and `reveal_child_changed_cb` branches three ways: a `GtkEntry` is focused
18
+ // without selecting, a `GtkSearchEntry` is focused outright, and anything else is only
19
+ // cleared. A `searchbar` element therefore takes an ordinary editable child — a
20
+ // `<gtk-search-entry>` when the port has one, a `<gtk-entry>` today — and focuses it.
21
+ //
22
+ // `key-capture-widget` is a WIDGET, so it is not an attribute: `keyCaptureWidget` is a
23
+ // property, and the element listens on that element in the CAPTURE phase, which is the one
24
+ // door GTK opens too ("the events are only 'captured' in the bubble phase",
25
+ // gtksearchbar.c:525-540). A printable key then goes into the entry, which is what the C's
26
+ // forward does ("the bar will be shown, and the entry populated with the entered text").
27
+ //
28
+ // A11y: `Gtk.SearchBar` uses `AccessibleRole.search` (gtksearchbar.c:390), so the host says
29
+ // so. A collapsed strip is `inert`, which is the CSS-shaped form of GTK not mapping the
30
+ // revealer's child at all (:368-390) — without it the entry would stay in the tab order of a
31
+ // bar nobody can see.
32
+ //
33
+ // Reference: refs/gtk/gtk/gtksearchbar.c:66-81 (the node tree and the role), 174-218 (the
34
+ // four ways search starts and the two it stops), 237-390 (the pspecs, the revealer, the
35
+ // close button), 512-556 (search mode, close button, key capture)
36
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss:113-185 (searchbar)
37
+ // Copyright (c) The GTK Team, GNOME contributors. LGPLv2.1+.
38
+ // Modifications: Implemented as a Web Component for @gjsify/adwaita-web.
39
+
40
+ export class GtkSearchBar extends HTMLElement {
41
+ private _box!: HTMLDivElement;
42
+ private _center!: HTMLDivElement;
43
+ private _close!: HTMLButtonElement;
44
+ private _initialized = false;
45
+ private _capture: HTMLElement | null = null;
46
+ private readonly _onCapturedKey = (event: KeyboardEvent): void => this._captureKey(event);
47
+ private readonly _onInput = (): void => this._revealFromTyping();
48
+
49
+ static get observedAttributes() {
50
+ return ['search-mode-enabled', 'show-close-button'];
51
+ }
52
+
53
+ /** `Gtk.SearchBar:search-mode-enabled` — the revealer's `reveal-child`. Defaults FALSE. */
54
+ get searchModeEnabled(): boolean {
55
+ return this.hasAttribute('search-mode-enabled');
56
+ }
57
+
58
+ set searchModeEnabled(value: boolean) {
59
+ this.toggleAttribute('search-mode-enabled', !!value);
60
+ }
61
+
62
+ /** `Gtk.SearchBar:show-close-button` — the `.close` button at the end of the box. */
63
+ get showCloseButton(): boolean {
64
+ return this.hasAttribute('show-close-button');
65
+ }
66
+
67
+ set showCloseButton(value: boolean) {
68
+ this.toggleAttribute('show-close-button', !!value);
69
+ }
70
+
71
+ /** `Gtk.SearchBar:key-capture-widget` — where printable keys start a search. */
72
+ get keyCaptureWidget(): HTMLElement | null {
73
+ return this._capture;
74
+ }
75
+
76
+ set keyCaptureWidget(widget: HTMLElement | null) {
77
+ if (this._capture === widget) return;
78
+ this._capture?.removeEventListener('keydown', this._onCapturedKey, true);
79
+ this._capture = widget;
80
+ this._capture?.addEventListener('keydown', this._onCapturedKey, true);
81
+ }
82
+
83
+ /** The editable the C's `connect_entry` would have bound: the first field inside the bar. */
84
+ get entry(): HTMLInputElement | HTMLTextAreaElement | null {
85
+ return this.querySelector<HTMLInputElement | HTMLTextAreaElement>('input, textarea');
86
+ }
87
+
88
+ connectedCallback() {
89
+ if (this._initialized) return;
90
+ this._initialized = true;
91
+
92
+ this.setAttribute('role', 'search');
93
+
94
+ this._center = document.createElement('div');
95
+ this._center.className = 'adw-search-bar-center';
96
+ // Whatever the author put inside the bar is the child, moved into the box's centre —
97
+ // the `GtkCenterBox` the C builds around it (gtksearchbar.c:378-386).
98
+ this._center.append(...this.childNodes);
99
+
100
+ this._close = document.createElement('button');
101
+ this._close.className = 'adw-search-bar-close';
102
+ this._close.type = 'button';
103
+ this._close.setAttribute('aria-label', 'Close search');
104
+ this._close.addEventListener('click', () => (this.searchModeEnabled = false));
105
+
106
+ this._box = document.createElement('div');
107
+ this._box.className = 'adw-search-bar-box';
108
+ this._box.append(this._center, this._close);
109
+ this.replaceChildren(this._box);
110
+
111
+ // `input-intercepted`: typing into the connected editable reveals the bar
112
+ // (gtksearchbar.c:210-218). Captured, because the editable may be nested two
113
+ // elements deep — a `<gtk-entry>` keeps its own `<input>`.
114
+ this.addEventListener('input', this._onInput);
115
+ this.addEventListener('keydown', (event) => {
116
+ if (event.key === 'Escape') this.searchModeEnabled = false;
117
+ });
118
+
119
+ this._render();
120
+ }
121
+
122
+ disconnectedCallback() {
123
+ this.keyCaptureWidget = null;
124
+ }
125
+
126
+ attributeChangedCallback(name: string, _old: string | null, _value: string | null) {
127
+ if (!this._initialized) return;
128
+ if (name === 'search-mode-enabled') {
129
+ this._applyReveal();
130
+ this.dispatchEvent(
131
+ new CustomEvent('notify::search-mode-enabled', {
132
+ bubbles: true,
133
+ detail: { searchModeEnabled: this.searchModeEnabled },
134
+ }),
135
+ );
136
+ return;
137
+ }
138
+ if (name === 'show-close-button') {
139
+ // The C notifies only when the button's visibility ACTUALLY changed
140
+ // (gtksearchbar.c:526-530), and `toggleAttribute` is idempotent, so an unchanged
141
+ // value never reaches here.
142
+ this._render();
143
+ this.dispatchEvent(
144
+ new CustomEvent('notify::show-close-button', {
145
+ bubbles: true,
146
+ detail: { showCloseButton: this.showCloseButton },
147
+ }),
148
+ );
149
+ }
150
+ }
151
+
152
+ private _render(): void {
153
+ const revealed = this.searchModeEnabled;
154
+ this.classList.toggle('revealed', revealed);
155
+ // A collapsed revealer's child is not mapped in GTK, so it is not focusable there
156
+ // either; `inert` is what says that without taking the strip out of the layout.
157
+ this._box.inert = !revealed;
158
+ this._close.hidden = !this.showCloseButton;
159
+ }
160
+
161
+ /**
162
+ * `reveal_child_changed_cb` (gtksearchbar.c:183-205): revealing focuses the entry,
163
+ * hiding clears it. Run on a real CHANGE only — at init the C's own notify fires before
164
+ * the handler is connected, so a child that arrives with the bar is left alone.
165
+ */
166
+ private _applyReveal(): void {
167
+ this._render();
168
+ const entry = this.entry;
169
+ if (entry === null) return;
170
+ if (this.searchModeEnabled) entry.focus();
171
+ else entry.value = '';
172
+ }
173
+
174
+ private _revealFromTyping(): void {
175
+ if (this.searchModeEnabled) return;
176
+ this.searchModeEnabled = true;
177
+ this.entry?.focus();
178
+ }
179
+
180
+ /**
181
+ * The key-capture path (gtksearchbar.c:525-556): a printable key on the capture widget
182
+ * opens the bar and goes into the entry, which is what forwarding the event does in the C.
183
+ * Modified keys and the functional keys are left alone — GTK forwards them, but a bar
184
+ * that opened on every arrow key would not be a search bar.
185
+ */
186
+ private _captureKey(event: KeyboardEvent): void {
187
+ if (event.defaultPrevented || event.ctrlKey || event.altKey || event.metaKey) return;
188
+ if (event.key.length !== 1) return;
189
+ const entry = this.entry;
190
+ this.searchModeEnabled = true;
191
+ if (entry === null) return;
192
+ event.preventDefault();
193
+ entry.focus();
194
+ const start = entry.selectionStart ?? entry.value.length;
195
+ const end = entry.selectionEnd ?? start;
196
+ entry.setRangeText(event.key, start, end, 'end');
197
+ }
198
+ }
199
+
200
+ customElements.define('gtk-search-bar', GtkSearchBar);
@@ -0,0 +1,172 @@
1
+ // <gtk-search-entry> — a field for typing a query: a magnifying-glass leading while it is
2
+ // empty, a clear button trailing once it is not, and a signal that waits until the user
3
+ // STOPS typing.
4
+ //
5
+ // THE DELAY IS THE POINT, and it is a property: `search-delay` is 150 ms by default
6
+ // (gtksearchentry.c:539-542, and `gtk_search_entry_init` sets the same, :847) and
7
+ // `search-changed` fires once it has elapsed. C's `gtk_search_entry_changed` has one
8
+ // asymmetry that is easy to lose — going EMPTY fires IMMEDIATELY and cancels any pending
9
+ // timeout (:785-792), because an empty query is not a filter and waiting would make the
10
+ // results flash. Only a non-empty change is queued, and each keystroke REPLACES the queue
11
+ // (`reset_timeout`, :765-774).
12
+ //
13
+ // `Gtk.SearchEntry` is not a `Gtk.Entry` in C either (a sibling implementing `GtkEditable`),
14
+ // and it EXTENDS `<gtk-entry>` here for the same reason `<gtk-password-entry>` does: the
15
+ // browser has one `<input>` and `GtkEntry` owns it.
16
+ //
17
+ // KEYS: <kbd>Enter</kbd> is `activate`, <kbd>Escape</kbd> is `stop-search`,
18
+ // <kbd>Ctrl</kbd>+<kbd>g</kbd> is `next-match` and <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd>
19
+ // is `previous-match` — C's own default bindings (gtksearchentry.c:687-701). They are
20
+ // keybinding SIGNALS, so they are dispatched as events for a host to handle rather than
21
+ // acted on here.
22
+ //
23
+ // NOT PORTED: `key-capture-widget` (a `Gtk.Widget`, so a slot rather than an attribute, and
24
+ // only meaningful inside a `Gtk.SearchBar` this renderer has no concept of);
25
+ // `input-purpose` / `input-hints` / `activates-default` are in `KNOWN_GAPS`.
26
+ //
27
+ // A11Y: `Gtk.AccessibleRole.search_box` (gtksearchentry.c:704) is `role="searchbox"`.
28
+ //
29
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_entries.scss:1-96 (entry.search)
30
+ // Reference: refs/gtk/gtk/gtksearchentry.c (properties, signals, bindings, changed, init)
31
+ // Copyright (c) GNOME contributors (libadwaita, GTK). LGPLv2.1+.
32
+ // Modifications: Implemented as a Web Component for @gjsify/adwaita-web.
33
+
34
+ import { createGtkImage, type GtkImage } from './gtk-image.js';
35
+
36
+ import { GtkEntry } from './gtk-entry.js';
37
+
38
+ /** `GtkSearchEntry:search-delay`'s default, in ms (gtksearchentry.c:539-542). */
39
+ const DEFAULT_SEARCH_DELAY = 150;
40
+
41
+ export class GtkSearchEntry extends GtkEntry {
42
+ private _searchIcon!: GtkImage;
43
+ private _clear!: HTMLButtonElement;
44
+ private _clearIcon!: GtkImage;
45
+ private _timeout: number | null = null;
46
+
47
+ static get observedAttributes(): string[] {
48
+ return [...GtkEntry.observedAttributes, 'search-delay'];
49
+ }
50
+
51
+ /** `GtkSearchEntry:search-delay` — ms from the last keypress to `search-changed`. */
52
+ get searchDelay(): number {
53
+ const declared = Number.parseInt(this.getAttribute('search-delay') ?? '', 10);
54
+ return Number.isFinite(declared) && declared >= 0 ? declared : DEFAULT_SEARCH_DELAY;
55
+ }
56
+
57
+ set searchDelay(value: number) {
58
+ this.setAttribute('search-delay', String(value));
59
+ }
60
+
61
+ /** Whether there is text, which is what decides the two icons. */
62
+ private get _empty(): boolean {
63
+ return this._input ? this._input.value === '' : this.getAttribute('value') === '';
64
+ }
65
+
66
+ override connectedCallback(): void {
67
+ super.connectedCallback();
68
+
69
+ // C's `gtk_search_entry_init` search icon: presentational, always leading.
70
+ this._searchIcon = createGtkImage('system-search-symbolic', 'adw-search-entry-icon');
71
+
72
+ // `gtk_icon_release` empties the field (gtksearchentry.c:747-752).
73
+ this._clear = document.createElement('button');
74
+ this._clear.type = 'button';
75
+ this._clear.className = 'adw-button flat circular icon-only adw-search-entry-clear';
76
+ this._clearIcon = createGtkImage('edit-clear-symbolic', 'adw-search-entry-clear-icon');
77
+ this._clear.append(this._clearIcon);
78
+ this._clear.title = 'Clear Entry';
79
+ this._clear.setAttribute('aria-label', 'Clear Entry');
80
+ this._clear.addEventListener('click', () => {
81
+ this._input.value = '';
82
+ this._onChanged();
83
+ this._input.focus();
84
+ });
85
+ this._clear.addEventListener('mousedown', (event) => event.preventDefault());
86
+
87
+ this.replaceChildren(this._searchIcon, this._input, this._clear);
88
+ this.setAttribute('role', 'searchbox');
89
+
90
+ this._input.addEventListener('input', () => this._onChanged());
91
+ this._input.addEventListener('keydown', (event) => this._onKeyDown(event));
92
+ this._render();
93
+ }
94
+
95
+ override attributeChangedCallback(name: string, oldValue: string | null, value: string | null): void {
96
+ super.attributeChangedCallback(name, oldValue, value);
97
+ // A pending timeout belongs to the delay that is being replaced: C's setter only
98
+ // notifies, and the NEXT change queues against the new one — but a timeout armed
99
+ // under the old delay must not fire on the new one, so it is dropped here.
100
+ if (name === 'search-delay' && this._clear) this._cancel();
101
+ }
102
+
103
+ override disconnectedCallback(): void {
104
+ this._cancel();
105
+ super.disconnectedCallback();
106
+ }
107
+
108
+ /**
109
+ * `gtk_search_entry_changed` (gtksearchentry.c:776-803) over `reset_timeout`.
110
+ *
111
+ * Empty is immediate and cancels; non-empty replaces the queue. `clearTimeout` before
112
+ * arming is `reset_timeout`'s `g_source_remove`, and without it two keystrokes would
113
+ * fire the signal twice.
114
+ */
115
+ private _onChanged(): void {
116
+ this._cancel();
117
+ if (this._empty) {
118
+ this._render();
119
+ this.dispatchEvent(new CustomEvent('search-changed', { bubbles: true, detail: { value: '' } }));
120
+ return;
121
+ }
122
+ this._render();
123
+ const delay = this.searchDelay;
124
+ // `g_timeout_add (0, …)` is an idle, not a no-op: it runs on the next iteration of
125
+ // the main loop, which is one turn of the event loop and not "immediately".
126
+ this._timeout = window.setTimeout(() => {
127
+ this._timeout = null;
128
+ this.dispatchEvent(
129
+ new CustomEvent('search-changed', { bubbles: true, detail: { value: this._input.value } }),
130
+ );
131
+ }, delay);
132
+ }
133
+
134
+ private _cancel(): void {
135
+ if (this._timeout === null) return;
136
+ clearTimeout(this._timeout);
137
+ this._timeout = null;
138
+ }
139
+
140
+ private _onKeyDown(event: KeyboardEvent): void {
141
+ switch (event.key) {
142
+ // `activate` is NOT handled here: `<gtk-entry>` already dispatches it on Enter,
143
+ // and C binds the same `activate` SIGNAL the inner `Gtk.Text` raises
144
+ // (activate_cb, gtksearchentry.c:816-821) — one signal, one dispatch.
145
+ case 'Escape':
146
+ event.preventDefault();
147
+ this.dispatchEvent(new CustomEvent('stop-search', { bubbles: true }));
148
+ break;
149
+ case 'g':
150
+ // C binds these on Apple to Meta and elsewhere to Control
151
+ // (gtksearchentry.c:678-696); a browser reports neither as `ctrlKey` on
152
+ // macOS, so both are accepted and the host decides which one it meant.
153
+ if (!event.ctrlKey && !event.metaKey) return;
154
+ event.preventDefault();
155
+ this.dispatchEvent(
156
+ new CustomEvent(event.shiftKey ? 'previous-match' : 'next-match', { bubbles: true }),
157
+ );
158
+ break;
159
+ default:
160
+ return;
161
+ }
162
+ }
163
+
164
+ private _render(): void {
165
+ if (!this._clear) return;
166
+ // C toggles the CLEAR icon's visibility on the text; the search icon is always
167
+ // present and purely presentational.
168
+ this._clear.hidden = this._empty;
169
+ }
170
+ }
171
+
172
+ customElements.define('gtk-search-entry', GtkSearchEntry);
@@ -0,0 +1,52 @@
1
+ // <gtk-separator> — a one-pixel rule between two groups of widgets.
2
+ //
3
+ // ONE property, `orientation`, which is `GtkOrientable`'s: `horizontal` (the default) draws a
4
+ // line that runs ACROSS, `vertical` one that runs DOWN. Parsed by the same
5
+ // `normalizeBoxOrientation` as `<gtk-box>`, because both read one GtkOrientable property and
6
+ // an unknown value means the default in both.
7
+ //
8
+ // The element carries the orientation twice, as GTK does: the attribute is the property, and
9
+ // a `horizontal` / `vertical` CLASS on the host is the CSS state `separator.spacer.horizontal`
10
+ // selects on (`_separator.scss`). `.spacer` is libadwaita's style class for a gap that draws
11
+ // nothing, so it is the author's to set (`class="spacer"`, a `.blp`'s `styles ["spacer"]`).
12
+ //
13
+ // A11Y: `role="separator"` with `aria-orientation`, GtkSeparator's own role.
14
+ //
15
+ // Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (separator)
16
+ // Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
17
+ // Modifications: Implemented as a Web Component for @gjsify/adwaita-web.
18
+
19
+ import { normalizeBoxOrientation, type BoxOrientation } from '@gjsify/adwaita-core';
20
+
21
+ export class GtkSeparator extends HTMLElement {
22
+ static get observedAttributes() {
23
+ return ['orientation'];
24
+ }
25
+
26
+ /** `GtkOrientable:orientation` — `horizontal` (the default) or `vertical`. */
27
+ get orientation(): BoxOrientation {
28
+ return normalizeBoxOrientation(this.getAttribute('orientation'));
29
+ }
30
+
31
+ set orientation(value: BoxOrientation) {
32
+ this.setAttribute('orientation', value);
33
+ }
34
+
35
+ connectedCallback() {
36
+ this.setAttribute('role', 'separator');
37
+ this._render();
38
+ }
39
+
40
+ attributeChangedCallback() {
41
+ if (this.isConnected) this._render();
42
+ }
43
+
44
+ private _render(): void {
45
+ const orientation = this.orientation;
46
+ this.classList.toggle('horizontal', orientation === 'horizontal');
47
+ this.classList.toggle('vertical', orientation === 'vertical');
48
+ this.setAttribute('aria-orientation', orientation);
49
+ }
50
+ }
51
+
52
+ customElements.define('gtk-separator', GtkSeparator);