@gjsify/adwaita-web 0.54.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 (439) hide show
  1. package/dist/adwaita-web.css +8066 -3033
  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 +1 -1
  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/style-classes.spec.ts +9 -8
  436. package/src/styles.generated.ts +1 -1
  437. package/src/tab-chip.ts +200 -0
  438. package/src/template-classes.ts +45 -0
  439. package/src/test.browser.mts +152 -0
@@ -0,0 +1,577 @@
1
+ // The emoji a `<gtk-emoji-chooser>` shows, and the words it searches.
2
+ //
3
+ // WHY THIS TABLE IS SMALL, AND WHAT IT IS NOT
4
+ //
5
+ // `GtkEmojiChooser` loads its emoji from `/org/gtk/libgtk/emoji/<lang>.data`, a
6
+ // COMPILED GVariant resource of about 1.2 MB per language, read at runtime through
7
+ // `g_resources_lookup_data` (gtkemojichooser.c:648-680). It carries, per emoji, the code
8
+ // points (a 0 stands for the variation selector or the skin-tone modifier), the English
9
+ // name, the localised name and two keyword lists — and the search matches the NAMES AND
10
+ // KEYWORDS, never the glyph (gtkemojichooser.c:896-958). Nothing in a browser can read
11
+ // that blob: it is a GVariant serialisation, and shipping it would mean shipping GTK's
12
+ // compiled resource.
13
+ //
14
+ // So the replica carries a curated table with the same SHAPE — code points, name,
15
+ // keywords — in GTK's own ten sections with GTK's own headings, and says so where it is
16
+ // visible: the `emoji-picked` signal carries the same Unicode sequence, the search
17
+ // matches the same token lists with the same prefix rule, and the sections are the
18
+ // struct order of `GtkEmojiChooser`. Every derivation that READS this file lives in the
19
+ // element; nothing here decides anything.
20
+ //
21
+ // SECTION ORDER is the struct order (gtkemojichooser.c:216-228) and the order
22
+ // `setup_section` registers them in (gtkemojichooser.c:1075-1085): recent first, then
23
+ // the nine categories by ascending group (people 0, body 1, nature 3, food 4, travel 5,
24
+ // activities 6, objects 7, symbols 8, flags 9 — group 2 is absent upstream). The
25
+ // HEADINGS are the `.ui` labels with their `emoji category` context, mnemonics absent
26
+ // because the `.ui` headings have none: "Smileys & People", "Body & Clothing",
27
+ // "Animals & Nature", "Food & Drink", "Travel & Places", "Activities", "Objects",
28
+ // "Symbols", "Flags".
29
+
30
+ /** One emoji entry: the code points and the words the search reads. */
31
+ export interface EmojiEntry {
32
+ /** The code points, as one string — a ZWJ sequence is already spelled out. */
33
+ readonly text: string;
34
+ /** The English name — `filter_func`'s second list. */
35
+ readonly name: string;
36
+ /** Search keywords, one word each — `filter_func`'s third list. */
37
+ readonly keywords: readonly string[];
38
+ }
39
+
40
+ /** One `EmojiSection`, with the heading and the toolbar button's own label. */
41
+ export interface EmojiCategory {
42
+ /** The section key: `recent`, `people`, … */
43
+ readonly id: string;
44
+ /** The heading above the section, `''` for the one without (recent). */
45
+ readonly heading: string;
46
+ /** The `.ui` tooltip of the toolbar button, which for every section but recent is its heading. */
47
+ readonly tooltip: string;
48
+ /** The emoji, in the order GTK appends them. */
49
+ readonly entries: readonly EmojiEntry[];
50
+ }
51
+
52
+ /** One table row. Keywords are space-separated because `match_tokens` prefixes per WORD. */
53
+ function row(text: string, name: string, keywords = ''): EmojiEntry {
54
+ return { text, name, keywords: keywords === '' ? [] : keywords.split(' ') };
55
+ }
56
+
57
+ /** `MAX_RECENT` — 7 columns by 3 rows (gtkemojichooser.c:363). */
58
+ export const EMOJI_MAX_RECENT = 7 * 3;
59
+
60
+ /** `EMOJI_SKIN_TONES` — `1F3FB`…`1F3FF`, the five modifiers (gtkemojichooser.c:530). */
61
+ export const EMOJI_SKIN_TONES: readonly string[] = ['\u{1F3FB}', '\u{1F3FC}', '\u{1F3FD}', '\u{1F3FE}', '\u{1F3FF}'];
62
+
63
+ /** `has_variations` (gtkemojichooser.c:489-508) — whether an entry carries a skin slot. */
64
+ export function hasVariations(entry: EmojiEntry): boolean {
65
+ return [...entry.text].some((character) => EMOJI_SKIN_TONES.includes(character));
66
+ }
67
+
68
+ const PEOPLE: readonly EmojiEntry[] = [
69
+ row('\u{1F600}', 'grinning face', 'smile happy joy grin'),
70
+ row('\u{1F603}', 'grinning face with big eyes', 'smile happy joy'),
71
+ row('\u{1F604}', 'grinning face with smiling eyes', 'smile happy joy'),
72
+ row('\u{1F601}', 'beaming face with smiling eyes', 'smile happy'),
73
+ row('\u{1F602}', 'face with tears of joy', 'laugh joy cry'),
74
+ row('\u{1F923}', 'rolling on the floor laughing', 'laugh rofl joy'),
75
+ row('\u{1F642}', 'slightly smiling face', 'smile'),
76
+ row('\u{1F609}', 'winking face', 'wink joke flirt'),
77
+ row('\u{1F60A}', 'smiling face with smiling eyes', 'blush happy'),
78
+ row('\u{1F607}', 'smiling face with halo', 'angel innocent'),
79
+ row('\u{1F970}', 'smiling face with hearts', 'love affection'),
80
+ row('\u{1F60D}', 'smiling face with heart-eyes', 'love crush'),
81
+ row('\u{1F618}', 'face blowing a kiss', 'kiss love'),
82
+ row('\u{1F617}', 'kissing face', 'kiss love'),
83
+ row('\u{263A}\uFE0F', 'smiling face', 'smile happy'),
84
+ row('\u{1F60B}', 'face savoring food', 'yum delicious tasty'),
85
+ row('\u{1F61B}', 'face with tongue', 'tongue silly'),
86
+ row('\u{1F92A}', 'zany face', 'crazy goofy wild'),
87
+ row('\u{1F61F}', 'worried face', 'worried sad'),
88
+ row('\u{1F641}', 'slightly frowning face', 'sad frown'),
89
+ row('\u{2639}\uFE0F', 'frowning face', 'sad frown'),
90
+ row('\u{1F62E}', 'face with open mouth', 'surprised wow'),
91
+ row('\u{1F632}', 'astonished face', 'surprised wow'),
92
+ row('\u{1F633}', 'flushed face', 'blush embarrassed'),
93
+ row('\u{1F97A}', 'pleading face', 'please puppy'),
94
+ row('\u{1F626}', 'frowning face with open mouth', 'frown disappointed'),
95
+ row('\u{1F628}', 'fearful face', 'fear scared'),
96
+ row('\u{1F630}', 'anxious face with sweat', 'nervous anxious'),
97
+ row('\u{1F622}', 'crying face', 'cry sad tear'),
98
+ row('\u{1F62D}', 'loudly crying face', 'cry sad sob'),
99
+ row('\u{1F636}', 'face without mouth', 'silent speechless'),
100
+ row('\u{1F60F}', 'smirking face', 'smirk'),
101
+ row('\u{1F612}', 'unamused face', 'meh unhappy'),
102
+ row('\u{1F644}', 'face with rolling eyes', 'eyeroll annoyed'),
103
+ row('\u{1F62C}', 'grimacing face', 'grimace awkward'),
104
+ row('\u{1F925}', 'lying face', 'liar pinocchio'),
105
+ row('\u{1F60E}', 'smiling face with sunglasses', 'cool sunglasses'),
106
+ row('\u{1F913}', 'nerd face', 'nerd geek glasses'),
107
+ row('\u{1F9D0}', 'face with monocle', 'fancy monocle'),
108
+ row('\u{1F9D1}', 'person', 'adult human'),
109
+ row('\u{1F468}', 'man', 'adult male'),
110
+ row('\u{1F469}', 'woman', 'adult female'),
111
+ row('\u{1F467}', 'girl', 'child female'),
112
+ row('\u{1F466}', 'boy', 'child male'),
113
+ row('\u{1F476}', 'baby', 'child infant'),
114
+ // The one entry whose codes carry a `1F3FB` slot, which is what
115
+ // `has_variations` looks for and what a long press opens a popover over.
116
+ row('\u{1F476}\u{1F3FB}', 'child: light skin tone', 'child skin tone'),
117
+ row('\u{1F9D1}\u200D\u{1F4BB}', 'technologist', 'coder computer'),
118
+ row('\u{1F477}', 'construction worker', 'builder work'),
119
+ row('\u{1F575}\uFE0F', 'detective', 'spy sleuth'),
120
+ row('\u{1F934}', 'prince', 'crown royal'),
121
+ row('\u{1F478}', 'princess', 'crown royal'),
122
+ row('\u{1F470}', 'person with veil', 'bride wedding'),
123
+ row('\u{1F935}', 'person in tuxedo', 'formal groom'),
124
+ row('\u{1F385}', 'Santa Claus', 'christmas santa'),
125
+ row('\u{1F936}', 'Mrs. Claus', 'christmas santa'),
126
+ row('\u{1F9B8}', 'superhero', 'hero power'),
127
+ row('\u{1F9B9}', 'supervillain', 'villain power'),
128
+ row('\u{1F9D9}', 'mage', 'wizard magic'),
129
+ row('\u{1F9DA}', 'fairy', 'magic wings'),
130
+ row('\u{1F9DB}', 'vampire', 'dracula horror'),
131
+ row('\u{1F9DC}', 'merperson', 'mermaid merman'),
132
+ row('\u{1F9DD}', 'elf', 'fantasy pointy'),
133
+ row('\u{1F9DF}', 'zombie', 'undead horror'),
134
+ row('\u{1F486}', 'person getting massage', 'spa head'),
135
+ row('\u{1F487}', 'person getting haircut', 'barber salon'),
136
+ row('\u{1F6B6}', 'person walking', 'walk pedestrian'),
137
+ row('\u{1F3C3}', 'person running', 'run marathon'),
138
+ row('\u{1F483}', 'woman dancing', 'dance ballet'),
139
+ row('\u{1F46A}', 'family', 'parents child'),
140
+ row('\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}', 'people holding hands', 'family couple'),
141
+ ];
142
+
143
+ const BODY: readonly EmojiEntry[] = [
144
+ row('\u{1F44B}', 'waving hand', 'wave hello goodbye'),
145
+ row('\u{270B}\uFE0F', 'raised hand', 'stop highfive'),
146
+ row('\u{1F44D}', 'thumbs up', 'like yes approve'),
147
+ row('\u{1F44E}', 'thumbs down', 'dislike no'),
148
+ row('\u{1F44C}', 'OK hand', 'ok perfect'),
149
+ row('\u{1F44F}', 'clapping hands', 'applause praise'),
150
+ row('\u{1F450}', 'open hands', 'hug open'),
151
+ row('\u{1F64C}', 'raising hands', 'celebrate praise'),
152
+ row('\u{1F64F}', 'folded hands', 'pray thanks'),
153
+ row('\u{1F91D}', 'handshake', 'deal agreement'),
154
+ row('\u{1F918}', 'sign of the horns', 'rock metal'),
155
+ row('\u{1F448}', 'backhand index pointing left', 'point direction'),
156
+ row('\u{1F449}', 'backhand index pointing right', 'point direction'),
157
+ row('\u{261D}\uFE0F', 'index pointing up', 'point one'),
158
+ row('\u{270D}\uFE0F', 'writing hand', 'write pen'),
159
+ row('\u{1F91E}', 'crossed fingers', 'luck hope'),
160
+ row('\u{1F4AA}', 'flexed biceps', 'muscle strong'),
161
+ row('\u{1F9E0}', 'brain', 'mind smart'),
162
+ row('\u{1F440}', 'eyes', 'look see watch'),
163
+ row('\u{1F9E3}', 'ear', 'hear listen'),
164
+ row('\u{1F443}', 'nose', 'smell'),
165
+ row('\u{1F9B0}', 'red hair', 'ginger hair'),
166
+ row('\u{1F6C0}', 'bathing', 'bath shower'),
167
+ row('\u{1F6CD}', 'shower', 'bath clean'),
168
+ row('\u{1F9BD}', 'probing cane', 'blind accessibility'),
169
+ row('\u{1F9BC}', 'motorized wheelchair', 'accessibility'),
170
+ row('\u{1F9AF}', 'person with white cane', 'blind accessibility'),
171
+ row('\u{1F3CB}\uFE0F', 'weight lifting', 'gym sport'),
172
+ row('\u{1F46B}', 'woman and man holding hands', 'couple family'),
173
+ row('\u{1F46C}', 'men holding hands', 'couple'),
174
+ row('\u{1F46D}', 'women holding hands', 'couple'),
175
+ row('\u{1F48F}', 'kiss', 'love couple'),
176
+ row('\u{1F491}', 'couple with heart', 'love wedding'),
177
+ row('\u{1F46E}', 'police officer', 'cop law'),
178
+ row('\u{1F477}', 'person with skullcap', 'worker'),
179
+ row('\u{1F977}', 'ninja', 'martialarts'),
180
+ row('\u{1F9D7}', 'person climbing', 'sport'),
181
+ row('\u{1F938}', 'person cartwheeling', 'gymnastics'),
182
+ row('\u{1F93C}', 'people wrestling', 'sport wrestle'),
183
+ row('\u{1F46F}', 'people with bunny ears', 'costume'),
184
+ row('\u{1F9D5}', 'woman with headscarf', 'hijab clothing'),
185
+ row('\u{1F45E}', 'man’s shoe', 'clothing'),
186
+ row('\u{1F455}', 't-shirt', 'clothing shirt'),
187
+ row('\u{1F456}', 'jeans', 'clothing trousers'),
188
+ row('\u{1F454}', 'necktie', 'clothing formal'),
189
+ row('\u{1F457}', 'dress', 'clothing'),
190
+ row('\u{1F458}', 'kimono', 'clothing'),
191
+ row('\u{1F97B}', 'sari', 'clothing'),
192
+ row('\u{1F459}', 'bikini', 'clothing swimsuit'),
193
+ row('\u{1F45A}', 'woman’s clothes', 'clothing dress'),
194
+ row('\u{1FA71}', 'one-piece swimsuit', 'clothing swimsuit'),
195
+ row('\u{1F451}', 'woman’s hat', 'clothing'),
196
+ row('\u{1F452}', 'glasses', 'clothing eyewear'),
197
+ row('\u{1F3A9}', 'top hat', 'clothing'),
198
+ row('\u{1F393}', 'graduation cap', 'clothing education'),
199
+ row('\u{1F9E2}', 'billed cap', 'clothing hat'),
200
+ row('\u{1F45C}', 'running shoe', 'clothing sneaker'),
201
+ row('\u{1F461}', 'woman’s heel', 'clothing shoe'),
202
+ row('\u{1F6E0}\uFE0F', 'hammer and wrench', 'tool repair'),
203
+ ];
204
+
205
+ const NATURE: readonly EmojiEntry[] = [
206
+ row('\u{1F412}', 'monkey', 'animal primate'),
207
+ row('\u{1F98D}', 'gorilla', 'animal ape'),
208
+ row('\u{1F415}', 'dog', 'animal pet'),
209
+ row('\u{1F436}', 'dog face', 'animal pet'),
210
+ row('\u{1F429}', 'poodle', 'dog animal'),
211
+ row('\u{1F43A}', 'wolf', 'animal'),
212
+ row('\u{1F98A}', 'fox', 'animal'),
213
+ row('\u{1F431}', 'cat face', 'animal pet'),
214
+ row('\u{1F981}', 'lion', 'animal cat'),
215
+ row('\u{1F42F}', 'tiger face', 'animal cat'),
216
+ row('\u{1F405}', 'tiger', 'animal'),
217
+ row('\u{1F406}', 'leopard', 'animal cat'),
218
+ row('\u{1F434}', 'horse face', 'animal'),
219
+ row('\u{1F984}', 'unicorn', 'animal fantasy'),
220
+ row('\u{1FAC}', 'unicorn face', 'animal fantasy'),
221
+ row('\u{1F993}', 'zebra', 'animal'),
222
+ row('\u{1F98C}', 'deer', 'animal'),
223
+ row('\u{1F42E}', 'cow face', 'animal'),
224
+ row('\u{1F437}', 'pig face', 'animal'),
225
+ row('\u{1F42A}', 'camel', 'animal desert'),
226
+ row('\u{1F992}', 'giraffe', 'animal'),
227
+ row('\u{1F418}', 'elephant', 'animal'),
228
+ row('\u{1F99B}', 'rhinoceros', 'animal'),
229
+ row('\u{1F430}', 'rabbit face', 'animal pet'),
230
+ row('\u{1F43B}', 'bear', 'animal'),
231
+ row('\u{1F428}', 'koala', 'animal'),
232
+ row('\u{1F43C}', 'panda', 'animal'),
233
+ row('\u{1F9A5}', 'sloth', 'animal'),
234
+ row('\u{1F9A6}', 'otter', 'animal'),
235
+ row('\u{1F998}', 'kangaroo', 'animal'),
236
+ row('\u{1F414}', 'chicken', 'bird animal'),
237
+ row('\u{1F427}', 'penguin', 'bird animal'),
238
+ row('\u{1F986}', 'duck', 'bird animal'),
239
+ row('\u{1F989}', 'owl', 'bird animal'),
240
+ row('\u{1F438}', 'frog', 'animal'),
241
+ row('\u{1F422}', 'turtle', 'animal reptile'),
242
+ row('\u{1F40D}', 'snake', 'animal reptile'),
243
+ row('\u{1F433}', 'dragon face', 'animal fantasy'),
244
+ row('\u{1F996}', 'T-Rex', 'animal dinosaur'),
245
+ row('\u{1F42C}', 'dolphin', 'animal sea'),
246
+ row('\u{1F988}', 'shark', 'animal sea'),
247
+ row('\u{1F419}', 'octopus', 'animal sea'),
248
+ row('\u{1F41B}', 'bug', 'animal insect'),
249
+ row('\u{1F98B}', 'butterfly', 'animal insect'),
250
+ row('\u{1F577}\uFE0F', 'spider', 'animal insect'),
251
+ row('\u{1F338}', 'cherry blossom', 'flower spring'),
252
+ row('\u{1F33A}', 'hibiscus', 'flower'),
253
+ row('\u{1F33B}', 'sunflower', 'flower sun'),
254
+ row('\u{1F337}', 'tulip', 'flower'),
255
+ row('\u{1F331}', 'seedling', 'plant nature'),
256
+ row('\u{1F332}', 'evergreen tree', 'plant nature'),
257
+ row('\u{1F333}', 'deciduous tree', 'plant nature'),
258
+ row('\u{1F334}', 'palm tree', 'plant nature'),
259
+ row('\u{1F335}', 'cactus', 'plant'),
260
+ row('\u{1F340}', 'four leaf clover', 'plant luck'),
261
+ row('\u{1F341}', 'maple leaf', 'plant autumn'),
262
+ row('\u{1F342}', 'fallen leaf', 'plant autumn'),
263
+ row('\u{1F343}', 'leaf fluttering in wind', 'plant wind'),
264
+ ];
265
+
266
+ const FOOD: readonly EmojiEntry[] = [
267
+ row('\u{1F347}', 'grapes', 'fruit'),
268
+ row('\u{1F348}', 'melon', 'fruit'),
269
+ row('\u{1F349}', 'watermelon', 'fruit'),
270
+ row('\u{1F34A}', 'tangerine', 'fruit citrus'),
271
+ row('\u{1F34B}', 'lemon', 'fruit citrus'),
272
+ row('\u{1F34C}', 'banana', 'fruit'),
273
+ row('\u{1F34D}', 'pineapple', 'fruit'),
274
+ row('\u{1F34E}', 'red apple', 'fruit'),
275
+ row('\u{1F350}', 'pear', 'fruit'),
276
+ row('\u{1F351}', 'peach', 'fruit'),
277
+ row('\u{1F352}', 'cherries', 'fruit'),
278
+ row('\u{1F353}', 'strawberry', 'fruit'),
279
+ row('\u{1F95D}', 'kiwi fruit', 'fruit'),
280
+ row('\u{1F34F}', 'tomato', 'fruit vegetable'),
281
+ row('\u{1F950}', 'croissant', 'food bread'),
282
+ row('\u{1F956}', 'flatbread', 'food bread'),
283
+ row('\u{1F968}', 'pretzel', 'food'),
284
+ row('\u{1F96F}', 'bagel', 'food bread'),
285
+ row('\u{1F95E}', 'pancakes', 'food breakfast'),
286
+ row('\u{1F9C0}', 'cheese wedge', 'food dairy'),
287
+ row('\u{1F356}', 'meat on bone', 'food'),
288
+ row('\u{1F357}', 'poultry leg', 'food chicken'),
289
+ row('\u{1F969}', 'cut of meat', 'food'),
290
+ row('\u{1F953}', 'bacon', 'food'),
291
+ row('\u{1F354}', 'hamburger', 'food'),
292
+ row('\u{1F35F}', 'french fries', 'food'),
293
+ row('\u{1F355}', 'pizza', 'food'),
294
+ row('\u{1F32D}', 'hot dog', 'food'),
295
+ row('\u{1F96A}', 'sandwich', 'food lunch'),
296
+ row('\u{1F32E}', 'taco', 'food'),
297
+ row('\u{1F32F}', 'burrito', 'food'),
298
+ row('\u{1F957}', 'green salad', 'food vegetable'),
299
+ row('\u{1F37F}', 'popcorn', 'food snack'),
300
+ row('\u{1F363}', 'sushi', 'food japanese'),
301
+ row('\u{1F364}', 'fish cake with swirl', 'food'),
302
+ row('\u{1F365}', 'soft ice cream', 'food dessert'),
303
+ row('\u{1F366}', 'soft serve', 'food dessert'),
304
+ row('\u{1F368}', 'ice cream', 'food dessert'),
305
+ row('\u{1F382}', 'birthday cake', 'food dessert'),
306
+ row('\u{1F9C1}', 'cupcake', 'food dessert'),
307
+ row('\u{1F967}', 'pie', 'food dessert'),
308
+ row('\u{1F36B}', 'chocolate bar', 'food dessert'),
309
+ row('\u{1F36C}', 'candy', 'food sweet'),
310
+ row('\u{1F36D}', 'lollipop', 'food sweet'),
311
+ row('\u{2615}', 'hot beverage', 'drink coffee tea'),
312
+ row('\u{1FAD6}', 'teapot', 'drink tea'),
313
+ row('\u{1F376}', 'teacup without handle', 'drink tea'),
314
+ row('\u{1F377}', 'wine glass', 'drink'),
315
+ row('\u{1F378}', 'cocktail glass', 'drink'),
316
+ row('\u{1F37A}', 'beer mug', 'drink'),
317
+ row('\u{1F942}', 'clinking glasses', 'drink cheers'),
318
+ row('\u{1F962}', 'chopsticks', 'food utensil'),
319
+ row('\u{1F374}', 'fork and knife', 'food utensil'),
320
+ row('\u{1F944}', 'spoon', 'food utensil'),
321
+ ];
322
+
323
+ const TRAVEL: readonly EmojiEntry[] = [
324
+ row('\u{1F30D}', 'globe showing Europe-Africa', 'world earth'),
325
+ row('\u{1F30E}', 'globe showing Americas', 'world earth'),
326
+ row('\u{1F30F}', 'globe showing Asia-Australia', 'world earth'),
327
+ row('\u{1F5FA}\uFE0F', 'world map', 'map'),
328
+ row('\u{26F0}\uFE0F', 'mountain', 'travel nature'),
329
+ row('\u{1F30B}', 'volcano', 'travel nature'),
330
+ row('\u{1F3D5}\uFE0F', 'camping', 'travel nature'),
331
+ row('\u{1F3D6}\uFE0F', 'beach with umbrella', 'travel sea'),
332
+ row('\u{1F3DC}', 'desert', 'travel nature'),
333
+ row('\u{1F3DD}\uFE0F', 'desert island', 'travel sea'),
334
+ row('\u{1F3DE}\uFE0F', 'national park', 'travel nature'),
335
+ row('\u{1F3DF}\uFE0F', 'stadium', 'travel sport'),
336
+ row('\u{1F3DB}\uFE0F', 'classical building', 'travel'),
337
+ row('\u{1F3D7}\uFE0F', 'buildings', 'travel'),
338
+ row('\u{1F3E0}', 'house', 'home building'),
339
+ row('\u{1F3E1}', 'house with garden', 'home'),
340
+ row('\u{1F3E2}', 'office building', 'work'),
341
+ row('\u{1F3E4}', 'post office', 'building'),
342
+ row('\u{1F3E5}', 'hospital', 'building health'),
343
+ row('\u{1F3E8}', 'hotel', 'travel building'),
344
+ row('\u{1F3EA}', 'convenience store', 'building shop'),
345
+ row('\u{1F3EB}', 'school', 'building education'),
346
+ row('\u{1F3EF}', 'castle', 'building'),
347
+ row('\u{26EA}', 'church', 'building religion'),
348
+ row('\u{26E9}\uFE0F', 'shinto torii gate', 'japan'),
349
+ row('\u{1F6D1}', 'fountain', 'building'),
350
+ row('\u{1F5FC}\uFE0F', 'tower', 'building'),
351
+ row('\u{1F5FD}', 'Statue of Liberty', 'travel usa'),
352
+ row('\u{1F5DB}\uFE0F', 'Mount Rushmore', 'travel usa'),
353
+ row('\u{1F9F2}', 'carousel horse', 'travel fair'),
354
+ row('\u{1F680}', 'rocket', 'travel space'),
355
+ row('\u{1F6F8}', 'flying saucer', 'travel space'),
356
+ row('\u{1F6CE}\uFE0F', 'bellhop bell', 'travel hotel'),
357
+ row('\u{1F9F3}', 'luggage', 'travel'),
358
+ row('\u{1F9ED}', 'compass', 'travel navigate'),
359
+ row('\u{231B}\uFE0F', 'hourglass done', 'time'),
360
+ row('\u{23F0}', 'alarm clock', 'time'),
361
+ row('\u{1F682}', 'locomotive', 'travel train'),
362
+ row('\u{1F686}', 'train', 'travel'),
363
+ row('\u{1F687}', 'metro', 'travel subway'),
364
+ row('\u{1F689}', 'station', 'travel'),
365
+ row('\u{1F68C}', 'bus', 'travel'),
366
+ row('\u{1F691}', 'ambulance', 'emergency'),
367
+ row('\u{1F693}', 'police car', 'emergency'),
368
+ row('\u{1F695}', 'taxi', 'travel'),
369
+ row('\u{1F697}', 'automobile', 'travel car'),
370
+ row('\u{1F699}', 'sport utility vehicle', 'car'),
371
+ row('\u{1F6B2}', 'bicycle', 'vehicle'),
372
+ row('\u{1F6F4}', 'kick scooter', 'vehicle'),
373
+ row('\u{26FA}', 'tent', 'travel camping'),
374
+ ];
375
+
376
+ const ACTIVITIES: readonly EmojiEntry[] = [
377
+ row('\u{1F383}', 'jack-o-lantern', 'halloween pumpkin'),
378
+ row('\u{1F384}', 'Christmas tree', 'christmas'),
379
+ row('\u{1F386}', 'fireworks', 'celebration'),
380
+ row('\u{2728}', 'sparkles', 'celebration magic'),
381
+ row('\u{1F388}', 'balloon', 'party'),
382
+ row('\u{1F389}', 'party popper', 'party celebration'),
383
+ row('\u{1F38A}', 'confetti ball', 'party'),
384
+ row('\u{1F381}', 'wrapped gift', 'present birthday'),
385
+ row('\u{1F397}\uFE0F', 'reminder ribbon', 'awareness'),
386
+ row('\u{1F3AB}', 'ticket', 'event'),
387
+ row('\u{1F3C6}', 'trophy', 'award win'),
388
+ row('\u{1F947}', '1st place medal', 'award win'),
389
+ row('\u{1F3BE}', 'tennis', 'sport'),
390
+ row('\u{1F3C8}', 'American football', 'sport'),
391
+ row('\u{1F3D1}', 'field hockey', 'sport'),
392
+ row('\u{1F3D2}', 'ice hockey', 'sport'),
393
+ row('\u{1F3B3}', 'bowling', 'sport'),
394
+ row('\u{1F3D0}', 'volleyball', 'sport'),
395
+ row('\u{1F94E}', 'lacrosse', 'sport'),
396
+ row('\u{26BD}', 'soccer ball', 'sport football'),
397
+ row('\u{26BE}', 'baseball', 'sport'),
398
+ row('\u{1F3CA}', 'swimming', 'sport'),
399
+ row('\u{1F3BF}', 'skis', 'sport winter'),
400
+ row('\u{26F7}\uFE0F', 'skier', 'sport winter'),
401
+ row('\u{1F6F9}', 'skateboard', 'sport'),
402
+ row('\u{1F3BD}', 'running shirt', 'sport'),
403
+ row('\u{1F3AF}', 'bullseye', 'sport game target'),
404
+ row('\u{1F3B1}', 'pool 8 ball', 'game'),
405
+ row('\u{1F3B2}', 'game die', 'game dice'),
406
+ row('\u{1F0CF}', 'joker', 'game cards'),
407
+ row('\u{1F579}\uFE0F', 'joystick', 'game'),
408
+ row('\u{1F3AE}', 'video game', 'game'),
409
+ row('\u{1F9E9}', 'puzzle piece', 'game'),
410
+ row('\u{1F9F8}', 'teddy bear', 'toy'),
411
+ row('\u{1FA85}', 'pinata', 'toy party'),
412
+ row('\u{1FA86}', 'nesting dolls', 'toy'),
413
+ row('\u{1F3AD}', 'performing arts', 'theatre'),
414
+ row('\u{1F3BC}', 'musical score', 'music'),
415
+ row('\u{1F3A4}', 'microphone', 'music sing'),
416
+ row('\u{1F3A7}', 'headphones', 'music listen'),
417
+ row('\u{1F3B8}', 'guitar', 'music'),
418
+ row('\u{1F941}', 'drum', 'music'),
419
+ row('\u{1F3A8}', 'artist palette', 'art paint'),
420
+ row('\u{1F58C}\uFE0F', 'paintbrush', 'art paint'),
421
+ row('\u{1F9F5}', 'thread', 'sew'),
422
+ row('\u{1FAA1}', 'sewing needle', 'sew'),
423
+ ];
424
+
425
+ const OBJECTS: readonly EmojiEntry[] = [
426
+ row('\u{1F9F1}', 'brick', 'object build'),
427
+ row('\u{1FA91}', 'shovel', 'object tool'),
428
+ row('\u{1FAA9}', 'mirror ball', 'object'),
429
+ row('\u{1F9EF}', 'fire extinguisher', 'object safety'),
430
+ row('\u{1F6E0}\uFE0F', 'hammer and wrench', 'tool'),
431
+ row('\u{2692}\uFE0F', 'hammer and pick', 'tool'),
432
+ row('\u{1F527}', 'wrench', 'tool'),
433
+ row('\u{1FA9B}', 'screwdriver', 'tool'),
434
+ row('\u{2699}\uFE0F', 'gear', 'tool cog'),
435
+ row('\u{1F5DC}\uFE0F', 'clamp', 'tool'),
436
+ row('\u{1F512}', 'locked with key', 'object security'),
437
+ row('\u{1F513}', 'unlocked', 'object security'),
438
+ row('\u{1F511}', 'key', 'object'),
439
+ row('\u{1F5DD}\uFE0F', 'old key', 'object'),
440
+ row('\u{1F528}', 'hammer', 'tool'),
441
+ row('\u{1F52B}', 'water pistol', 'object toy'),
442
+ row('\u{1FA93}', 'carpentry saw', 'tool'),
443
+ row('\u{1F4A1}', 'light bulb', 'object idea'),
444
+ row('\u{1F526}', 'flashlight', 'object'),
445
+ row('\u{1F52C}', 'microscope', 'object lab'),
446
+ row('\u{1F52D}', 'telescope', 'object'),
447
+ row('\u{1F4BB}', 'laptop', 'object computer'),
448
+ row('\u{1F5A5}\uFE0F', 'desktop computer', 'object computer'),
449
+ row('\u{1F5A8}\uFE0F', 'printer', 'object office'),
450
+ row('\u{2328}\uFE0F', 'keyboard', 'object computer'),
451
+ row('\u{1F5B1}\uFE0F', 'computer mouse', 'object computer'),
452
+ row('\u{1F4BE}', 'floppy disk', 'object'),
453
+ row('\u{1F4DA}', 'books', 'object reading'),
454
+ row('\u{1F4D3}', 'notebook', 'object writing'),
455
+ row('\u{1F4CA}', 'bar chart', 'object data'),
456
+ row('\u{1F4CB}', 'clipboard', 'object office'),
457
+ row('\u{1F4CC}', 'pushpin', 'object office'),
458
+ row('\u{1F4CE}', 'paperclip', 'object office'),
459
+ row('\u{1F4CF}', 'straight ruler', 'object office'),
460
+ row('\u{2702}\uFE0F', 'scissors', 'object office'),
461
+ row('\u{1F5D1}\uFE0F', 'card file box', 'object office'),
462
+ row('\u{1F5D2}\uFE0F', 'file cabinet', 'object office'),
463
+ row('\u{1F5D3}\uFE0F', 'wastebasket', 'object office'),
464
+ row('\u{1F9FC}', 'window', 'object house'),
465
+ row('\u{1F6D9}', 'elevator', 'object building'),
466
+ row('\u{1F6DD}', 'radio', 'object'),
467
+ row('\u{1F6DE}', 'video camera', 'object record'),
468
+ row('\u{26AF}', 'white flag', 'object surrender'),
469
+ ];
470
+
471
+ const SYMBOLS: readonly EmojiEntry[] = [
472
+ row('\u{1F520}', 'input latin letters', 'symbol text'),
473
+ row('\u{1F521}', 'lowercase', 'symbol text'),
474
+ row('\u{1F522}', 'uppercase', 'symbol text'),
475
+ row('\u{1F170}\uFE0F', 'A button', 'symbol letter'),
476
+ row('\u{1F18E}', 'AB button', 'symbol letters'),
477
+ row('\u{1F191}\uFE0F', 'CL button', 'symbol'),
478
+ row('\u{1F192}\uFE0F', 'COOL button', 'symbol'),
479
+ row('\u{1F193}\uFE0F', 'FREE button', 'symbol'),
480
+ row('\u{1F194}\uFE0F', 'ID button', 'symbol'),
481
+ row('\u{1F195}\uFE0F', 'NEW button', 'symbol'),
482
+ row('\u{1F196}\uFE0F', 'OK button', 'symbol'),
483
+ row('\u{1F197}\uFE0F', 'SOS button', 'symbol'),
484
+ row('\u{1F198}\uFE0F', 'VS button', 'symbol'),
485
+ row('\u{1F199}\uFE0F', 'UP button', 'symbol'),
486
+ row('\u{1F534}', 'red circle', 'symbol shape'),
487
+ row('\u{1F7E0}', 'orange circle', 'symbol shape'),
488
+ row('\u{1F7E1}', 'yellow circle', 'symbol shape'),
489
+ row('\u{1F7E2}', 'green circle', 'symbol shape'),
490
+ row('\u{1F535}', 'blue circle', 'symbol shape'),
491
+ row('\u{1F7E3}', 'purple circle', 'symbol shape'),
492
+ row('\u{26AA}', 'black circle', 'symbol shape'),
493
+ row('\u{26AB}', 'white circle', 'symbol shape'),
494
+ row('\u{1F7E7}', 'red square', 'symbol shape'),
495
+ row('\u{1F7E8}', 'yellow square', 'symbol shape'),
496
+ row('\u{1F7E9}', 'green square', 'symbol shape'),
497
+ row('\u{1F7E6}', 'blue square', 'symbol shape'),
498
+ row('\u{1F7EA}', 'purple square', 'symbol shape'),
499
+ row('\u{2B1B}', 'black large square', 'symbol shape'),
500
+ row('\u{2B1C}', 'white large square', 'symbol shape'),
501
+ row('\u{1F536}', 'large orange diamond', 'symbol shape'),
502
+ row('\u{1F537}', 'large blue diamond', 'symbol shape'),
503
+ row('\u{1F53A}', 'red triangle pointed up', 'symbol shape'),
504
+ row('\u{1F53B}', 'red triangle pointed down', 'symbol shape'),
505
+ row('\u{25B6}\uFE0F', 'black right-pointing triangle', 'symbol shape'),
506
+ row('\u{25C0}\uFE0F', 'black left-pointing triangle', 'symbol shape'),
507
+ row('\u{25B2}\uFE0F', 'black up-pointing triangle', 'symbol shape'),
508
+ row('\u{25BC}\uFE0F', 'black down-pointing triangle', 'symbol shape'),
509
+ row('\u{2753}', 'red question mark', 'symbol'),
510
+ row('\u{2757}', 'red exclamation mark', 'symbol'),
511
+ row('\u{2049}\uFE0F', 'red exclamation question mark', 'symbol'),
512
+ row('\u{1F4A4}', 'zzz', 'symbol sleep'),
513
+ row('\u{267B}', 'recycling symbol', 'symbol green'),
514
+ row('\u{262E}', 'information', 'symbol info'),
515
+ row('\u{26A0}\uFE0F', 'warning', 'symbol caution'),
516
+ row('\u{2714}\uFE0F', 'check mark button', 'symbol done yes'),
517
+ row('\u{2716}\uFE0F', 'multiply', 'symbol no'),
518
+ row('\u{2795}', 'plus', 'symbol math'),
519
+ row('\u{2796}', 'minus', 'symbol math'),
520
+ row('\u{2797}', 'divide', 'symbol math'),
521
+ row('\u{1F6AB}', 'prohibited', 'symbol no'),
522
+ row('\u{1F6B3}', 'no bicycles', 'symbol no'),
523
+ row('\u{1F6AD}', 'no smoking', 'symbol no'),
524
+ row('\u{1F6AF}', 'no littering', 'symbol no'),
525
+ row('\u{1F6B1}', 'non-potable water', 'symbol no'),
526
+ row('\u{1F51E}', 'no one under eighteen', 'symbol age'),
527
+ row('\u{1F3C1}', 'chequered flag', 'symbol sport'),
528
+ row('\u{1F6A9}', 'triangular flag', 'symbol'),
529
+ row('\u{1F38C}', 'crossed flags', 'symbol'),
530
+ row('\u{1F3F4}', 'black flag', 'symbol'),
531
+ row('\u{1F3F3}\uFE0F', 'white flag', 'symbol surrender'),
532
+ row('\u{1F3F3}\u200D\u{1F308}', 'rainbow flag', 'symbol pride'),
533
+ ];
534
+
535
+ const FLAGS: readonly EmojiEntry[] = [
536
+ row('\u{1F1E6}\u{1F1E8}', 'flag: Bolivia', 'flag country'),
537
+ row('\u{1F1E7}\u{1F1F7}', 'flag: Brazil', 'flag country'),
538
+ row('\u{1F1E9}\u{1F1EA}', 'flag: Germany', 'flag country deutschland'),
539
+ row('\u{1F1EB}\u{1F1F7}', 'flag: France', 'flag country'),
540
+ row('\u{1F1EE}\u{1F1F3}', 'flag: United Kingdom', 'flag country britain uk'),
541
+ row('\u{1F1EF}\u{1F1F5}', 'flag: Japan', 'flag country japan'),
542
+ row('\u{1F1F3}\u{1F1F1}', 'flag: United States', 'flag country usa'),
543
+ row('\u{1F1F8}\u{1F1EA}', 'flag: Sweden', 'flag country'),
544
+ row('\u{1F1F8}\u{1F1F0}', 'flag: Denmark', 'flag country'),
545
+ row('\u{1F1F9}\u{1F1F7}', 'flag: Turkey', 'flag country'),
546
+ row('\u{1F1FA}\u{1F1F8}', 'flag: Spain', 'flag country'),
547
+ ];
548
+
549
+ /**
550
+ * The nine category sections, in `setup_section`'s registration order. `recent` is NOT
551
+ * here: its emoji come from `GSettings` (`recently-used-emoji`), so the element owns
552
+ * that list and this table does not know about it.
553
+ */
554
+ export const EMOJI_CATEGORIES: readonly EmojiCategory[] = [
555
+ { id: 'people', heading: 'Smileys & People', tooltip: 'Smileys & People', entries: PEOPLE },
556
+ { id: 'body', heading: 'Body & Clothing', tooltip: 'Body & Clothing', entries: BODY },
557
+ { id: 'nature', heading: 'Animals & Nature', tooltip: 'Animals & Nature', entries: NATURE },
558
+ { id: 'food', heading: 'Food & Drink', tooltip: 'Food & Drink', entries: FOOD },
559
+ { id: 'travel', heading: 'Travel & Places', tooltip: 'Travel & Places', entries: TRAVEL },
560
+ { id: 'activities', heading: 'Activities', tooltip: 'Activities', entries: ACTIVITIES },
561
+ { id: 'objects', heading: 'Objects', tooltip: 'Objects', entries: OBJECTS },
562
+ { id: 'symbols', heading: 'Symbols', tooltip: 'Symbols', entries: SYMBOLS },
563
+ { id: 'flags', heading: 'Flags', tooltip: 'Flags', entries: FLAGS },
564
+ ];
565
+
566
+ /** The section ids in order, `recent` FIRST — the struct order of `GtkEmojiChooser`. */
567
+ export const EMOJI_SECTION_IDS: readonly string[] = ['recent', ...EMOJI_CATEGORIES.map((c) => c.id)];
568
+
569
+ /** The heading of a section, `''` for `recent` — the one with no heading widget at all. */
570
+ export function emojiHeading(id: string): string {
571
+ return EMOJI_CATEGORIES.find((category) => category.id === id)?.heading ?? '';
572
+ }
573
+
574
+ /** The toolbar button's tooltip for a section: its heading, or `Recent` for the first. */
575
+ export function emojiTooltip(id: string): string {
576
+ return id === 'recent' ? 'Recent' : (EMOJI_CATEGORIES.find((category) => category.id === id)?.tooltip ?? '');
577
+ }
@@ -150,6 +150,37 @@ export const AdwEntryRowsTest = async () => {
150
150
  });
151
151
  });
152
152
 
153
+ // Upstream's `row.entry > .editable-area > .edit-icon` (_lists.scss:194-196) sizes the
154
+ // pencil's BOX: a 24px floor with 5px of padding around the glyph. `test.browser.mts`
155
+ // imports the package for its side effects, so the stylesheet is in the document and
156
+ // this reads the SHIPPED rule rather than the SCSS source. GTK's own box measures 40x34
157
+ // (the toolkit's symbolic is 30x24), so only the floor is comparable.
158
+ await describe('adw-entry-row edit icon box', async () => {
159
+ for (const [tag, prefix] of [
160
+ ['adw-entry-row', 'adw-entry-row'],
161
+ ['adw-password-entry-row', 'adw-password-entry-row'],
162
+ ] as const) {
163
+ await it(`<${tag}> gives its pencil a 24px floor and 5px of padding`, () => {
164
+ const parts = mount(tag, prefix);
165
+ const style = getComputedStyle(parts.editIcon);
166
+ expect(style.minWidth).toBe('24px');
167
+ expect(style.minHeight).toBe('24px');
168
+ expect(style.padding).toBe('5px');
169
+ parts.host.remove();
170
+ });
171
+ }
172
+
173
+ await it('leaves the row the 12px that upstream padding and margin add up to', () => {
174
+ // `.editable-area { padding: 0 6px }` (:192) + `.edit-icon { margin-left: 6px }`
175
+ // (:198-200). These rows carry that as ONE `gap`, so the margin must not be
176
+ // added on top of it.
177
+ const parts = mount('adw-entry-row', 'adw-entry-row');
178
+ expect(getComputedStyle(parts.editIcon).marginLeft).toBe('0px');
179
+ expect(getComputedStyle(parts.row).gap).toBe('12px');
180
+ parts.host.remove();
181
+ });
182
+ });
183
+
153
184
  await describe('adw-entry-row Enter dispatch (text_activated_cb)', async () => {
154
185
  for (const { name, steps, activation, rule } of ENTRY_ROW_ACTIVATION_VECTORS) {
155
186
  await it(`${name} — ${rule}`, () => {