@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.
- package/dist/adwaita-web.css +8066 -3033
- package/dist/adwaita-web.css.map +1 -1
- package/lib/types/adw-application-window.spec.d.ts +1 -0
- package/lib/types/adw-bin.spec.d.ts +1 -0
- package/lib/types/adw-breakpoint-bin.spec.d.ts +1 -0
- package/lib/types/adw-clamp-scrollable.spec.d.ts +1 -0
- package/lib/types/adw-multi-layout-view.spec.d.ts +1 -0
- package/lib/types/adw-preferences-row.spec.d.ts +1 -0
- package/lib/types/adw-shortcuts.spec.d.ts +1 -0
- package/lib/types/adw-tab-bar.spec.d.ts +1 -0
- package/lib/types/adw-tab-button.spec.d.ts +1 -0
- package/lib/types/adw-tab-overview.spec.d.ts +1 -0
- package/lib/types/adw-view-switcher-sidebar.spec.d.ts +1 -0
- package/lib/types/adw-window.spec.d.ts +1 -0
- package/lib/types/breakpoints.d.ts +14 -3
- package/lib/types/construct-vectors.spec.d.ts +1 -0
- package/lib/types/elements/adw-application-window.d.ts +27 -0
- package/lib/types/elements/adw-bin.d.ts +17 -0
- package/lib/types/elements/adw-breakpoint-bin.d.ts +67 -0
- package/lib/types/elements/adw-clamp-scrollable.d.ts +38 -0
- package/lib/types/elements/adw-dialog.d.ts +10 -0
- package/lib/types/elements/adw-layout-slot.d.ts +19 -0
- package/lib/types/elements/adw-multi-layout-view.d.ts +101 -0
- package/lib/types/elements/adw-preferences-row.d.ts +31 -0
- package/lib/types/elements/adw-shortcuts-dialog.d.ts +13 -0
- package/lib/types/elements/adw-shortcuts-item.d.ts +36 -0
- package/lib/types/elements/adw-shortcuts-section.d.ts +14 -0
- package/lib/types/elements/adw-sidebar.d.ts +5 -0
- package/lib/types/elements/adw-switch-row.d.ts +3 -0
- package/lib/types/elements/adw-tab-bar.d.ts +108 -0
- package/lib/types/elements/adw-tab-button.d.ts +32 -0
- package/lib/types/elements/adw-tab-overview.d.ts +199 -0
- package/lib/types/elements/adw-tab-view.d.ts +19 -23
- package/lib/types/elements/adw-view-switcher-sidebar.d.ts +84 -0
- package/lib/types/elements/adw-window.d.ts +40 -0
- package/lib/types/elements/gtk-about-dialog.d.ts +146 -0
- package/lib/types/elements/gtk-application-window.d.ts +34 -0
- package/lib/types/elements/gtk-aspect-frame.d.ts +27 -0
- package/lib/types/elements/gtk-button.d.ts +9 -0
- package/lib/types/elements/gtk-calendar.d.ts +159 -0
- package/lib/types/elements/gtk-center-box.d.ts +39 -0
- package/lib/types/elements/gtk-color-dialog-button.d.ts +69 -0
- package/lib/types/elements/gtk-column-view.d.ts +50 -0
- package/lib/types/elements/gtk-drag-icon.d.ts +78 -0
- package/lib/types/elements/gtk-drawing-area.d.ts +95 -0
- package/lib/types/elements/gtk-editable-label.d.ts +33 -0
- package/lib/types/elements/gtk-emoji-chooser.d.ts +84 -0
- package/lib/types/elements/gtk-entry.d.ts +20 -1
- package/lib/types/elements/gtk-expander.d.ts +49 -0
- package/lib/types/elements/gtk-fixed.d.ts +13 -0
- package/lib/types/elements/gtk-flow-box-child.d.ts +14 -0
- package/lib/types/elements/gtk-flow-box.d.ts +87 -0
- package/lib/types/elements/gtk-font-dialog-button.d.ts +83 -0
- package/lib/types/elements/gtk-frame.d.ts +24 -0
- package/lib/types/elements/gtk-gl-area.d.ts +136 -0
- package/lib/types/elements/gtk-graphics-offload.d.ts +24 -0
- package/lib/types/elements/gtk-grid-view.d.ts +39 -0
- package/lib/types/elements/gtk-grid.d.ts +27 -0
- package/lib/types/elements/gtk-header-bar.d.ts +60 -0
- package/lib/types/elements/gtk-inscription.d.ts +64 -0
- package/lib/types/elements/gtk-label.d.ts +3 -0
- package/lib/types/elements/gtk-level-bar.d.ts +59 -0
- package/lib/types/elements/gtk-link-button.d.ts +29 -0
- package/lib/types/elements/gtk-list-box-row.d.ts +54 -0
- package/lib/types/elements/gtk-list-box.d.ts +100 -0
- package/lib/types/elements/gtk-list-view.d.ts +73 -0
- package/lib/types/elements/gtk-media-controls.d.ts +142 -0
- package/lib/types/elements/gtk-notebook.d.ts +148 -0
- package/lib/types/elements/gtk-overlay.d.ts +22 -0
- package/lib/types/elements/gtk-page-setup-unix-dialog.d.ts +87 -0
- package/lib/types/elements/gtk-paned.d.ts +121 -0
- package/lib/types/elements/gtk-password-entry.d.ts +27 -0
- package/lib/types/elements/gtk-picture.d.ts +66 -0
- package/lib/types/elements/gtk-popover-bin.d.ts +82 -0
- package/lib/types/elements/gtk-popover-menu-bar.d.ts +66 -0
- package/lib/types/elements/gtk-popover-menu.d.ts +83 -0
- package/lib/types/elements/gtk-popover.d.ts +28 -3
- package/lib/types/elements/gtk-print-unix-dialog.d.ts +167 -0
- package/lib/types/elements/gtk-revealer.d.ts +55 -0
- package/lib/types/elements/gtk-scale-button.d.ts +59 -0
- package/lib/types/elements/gtk-scale.d.ts +98 -0
- package/lib/types/elements/gtk-scrollbar.d.ts +124 -0
- package/lib/types/elements/gtk-scrolled-window.d.ts +121 -0
- package/lib/types/elements/gtk-search-bar.d.ts +39 -0
- package/lib/types/elements/gtk-search-entry.d.ts +27 -0
- package/lib/types/elements/gtk-separator.d.ts +10 -0
- package/lib/types/elements/gtk-spin-button.d.ts +94 -0
- package/lib/types/elements/gtk-spinner.d.ts +14 -0
- package/lib/types/elements/gtk-stack-sidebar.d.ts +43 -0
- package/lib/types/elements/gtk-stack-switcher.d.ts +58 -0
- package/lib/types/elements/gtk-stack.d.ts +154 -0
- package/lib/types/elements/gtk-switch.d.ts +4 -1
- package/lib/types/elements/gtk-text-view.d.ts +62 -0
- package/lib/types/elements/gtk-text.d.ts +45 -0
- package/lib/types/elements/gtk-toggle-button.d.ts +45 -0
- package/lib/types/elements/gtk-tree-expander.d.ts +38 -0
- package/lib/types/elements/gtk-video.d.ts +97 -0
- package/lib/types/elements/gtk-viewport.d.ts +84 -0
- package/lib/types/elements/gtk-window-controls.d.ts +80 -0
- package/lib/types/elements/gtk-window-handle.d.ts +39 -0
- package/lib/types/elements/gtk-window.d.ts +97 -0
- package/lib/types/elements/justification.d.ts +2 -0
- package/lib/types/elements/popover-menu.d.ts +18 -0
- package/lib/types/elements/roving-focus.d.ts +29 -1
- package/lib/types/emoji-data.d.ts +38 -0
- package/lib/types/font-description.d.ts +96 -0
- package/lib/types/gtk-about-dialog.spec.d.ts +1 -0
- package/lib/types/gtk-action-bar.spec.d.ts +1 -0
- package/lib/types/gtk-application-window.spec.d.ts +1 -0
- package/lib/types/gtk-aspect-frame.spec.d.ts +1 -0
- package/lib/types/gtk-calendar.spec.d.ts +1 -0
- package/lib/types/gtk-center-box.spec.d.ts +1 -0
- package/lib/types/gtk-color-dialog-button.spec.d.ts +1 -0
- package/lib/types/gtk-column-view.spec.d.ts +1 -0
- package/lib/types/gtk-drag-icon.spec.d.ts +1 -0
- package/lib/types/gtk-drawing-area.spec.d.ts +1 -0
- package/lib/types/gtk-editable-label.spec.d.ts +1 -0
- package/lib/types/gtk-emoji-chooser.spec.d.ts +1 -0
- package/lib/types/gtk-expander.spec.d.ts +1 -0
- package/lib/types/gtk-fixed.spec.d.ts +1 -0
- package/lib/types/gtk-flow-box.spec.d.ts +1 -0
- package/lib/types/gtk-font-dialog-button.spec.d.ts +1 -0
- package/lib/types/gtk-frame.spec.d.ts +1 -0
- package/lib/types/gtk-gl-area.spec.d.ts +1 -0
- package/lib/types/gtk-graphics-offload.spec.d.ts +1 -0
- package/lib/types/gtk-grid-view.spec.d.ts +1 -0
- package/lib/types/gtk-grid.spec.d.ts +1 -0
- package/lib/types/gtk-header-bar.spec.d.ts +1 -0
- package/lib/types/gtk-inscription.spec.d.ts +1 -0
- package/lib/types/gtk-level-bar.spec.d.ts +1 -0
- package/lib/types/gtk-link-button.spec.d.ts +1 -0
- package/lib/types/gtk-list-box.spec.d.ts +1 -0
- package/lib/types/gtk-list-view.spec.d.ts +1 -0
- package/lib/types/gtk-media-controls.spec.d.ts +1 -0
- package/lib/types/gtk-notebook.spec.d.ts +1 -0
- package/lib/types/gtk-overlay.spec.d.ts +1 -0
- package/lib/types/gtk-paned.spec.d.ts +1 -0
- package/lib/types/gtk-password-entry.spec.d.ts +1 -0
- package/lib/types/gtk-picture.spec.d.ts +1 -0
- package/lib/types/gtk-popover-bin.spec.d.ts +1 -0
- package/lib/types/gtk-popover-menu-bar.spec.d.ts +1 -0
- package/lib/types/gtk-popover-menu.spec.d.ts +1 -0
- package/lib/types/gtk-popover-role.spec.d.ts +1 -0
- package/lib/types/gtk-popover.spec.d.ts +1 -0
- package/lib/types/gtk-print-dialogs.spec.d.ts +1 -0
- package/lib/types/gtk-revealer.spec.d.ts +1 -0
- package/lib/types/gtk-scale-button.spec.d.ts +1 -0
- package/lib/types/gtk-scale.spec.d.ts +1 -0
- package/lib/types/gtk-scrollbar.spec.d.ts +1 -0
- package/lib/types/gtk-scrolled-window.spec.d.ts +1 -0
- package/lib/types/gtk-search-bar.spec.d.ts +1 -0
- package/lib/types/gtk-search-entry.spec.d.ts +1 -0
- package/lib/types/gtk-separator.spec.d.ts +1 -0
- package/lib/types/gtk-spin-button.spec.d.ts +1 -0
- package/lib/types/gtk-spinner.spec.d.ts +1 -0
- package/lib/types/gtk-stack-sidebar.spec.d.ts +1 -0
- package/lib/types/gtk-stack-switcher.spec.d.ts +1 -0
- package/lib/types/gtk-stack.spec.d.ts +1 -0
- package/lib/types/gtk-text-view.spec.d.ts +1 -0
- package/lib/types/gtk-text.spec.d.ts +1 -0
- package/lib/types/gtk-toggle-button.spec.d.ts +1 -0
- package/lib/types/gtk-tree-expander.spec.d.ts +1 -0
- package/lib/types/gtk-video.spec.d.ts +1 -0
- package/lib/types/gtk-viewport.spec.d.ts +1 -0
- package/lib/types/gtk-window-controls.spec.d.ts +1 -0
- package/lib/types/gtk-window-handle.spec.d.ts +1 -0
- package/lib/types/gtk-window.spec.d.ts +1 -0
- package/lib/types/index.d.ts +4 -1
- package/lib/types/list-view-dom.d.ts +44 -0
- package/lib/types/namespace/adw.d.ts +12 -0
- package/lib/types/namespace/gtk.d.ts +61 -0
- package/lib/types/page-setup.d.ts +100 -0
- package/lib/types/scroll-shading.d.ts +15 -1
- package/lib/types/shared-tree-builder.d.ts +30 -2
- package/lib/types/signals.d.ts +4 -0
- package/lib/types/styles.generated.d.ts +1 -1
- package/lib/types/tab-chip.d.ts +73 -0
- package/lib/types/template-classes.d.ts +11 -0
- package/package.json +12 -8
- package/scss/_action_row.scss +2 -2
- package/scss/_application_window.scss +26 -0
- package/scss/_aspect_frame.scss +25 -0
- package/scss/_bin.scss +26 -0
- package/scss/_button.scss +45 -0
- package/scss/_calendar.scss +176 -0
- package/scss/_center_box.scss +25 -0
- package/scss/_checks.scss +6 -1
- package/scss/_clamp_scrollable.scss +28 -0
- package/scss/_color_button.scss +67 -0
- package/scss/_column_view.scss +126 -0
- package/scss/_drag_icon.scss +55 -0
- package/scss/_drawing.scss +85 -0
- package/scss/_emoji_chooser.scss +213 -0
- package/scss/_entry.scss +13 -5
- package/scss/_entry_row.scss +1 -1
- package/scss/_expander.scss +113 -0
- package/scss/_fixed.scss +29 -0
- package/scss/_flow_box.scss +94 -0
- package/scss/_font_button.scss +63 -0
- package/scss/_frame.scss +41 -0
- package/scss/_grid.scss +19 -0
- package/scss/_grid_view.scss +46 -0
- package/scss/_gtk_about_dialog.scss +186 -0
- package/scss/_headerbar.scss +132 -0
- package/scss/_icons.generated.scss +186 -0
- package/scss/_inscription.scss +125 -0
- package/scss/_level_bar.scss +190 -0
- package/scss/_link.scss +82 -0
- package/scss/_list_box.scss +88 -0
- package/scss/_list_view.scss +96 -0
- package/scss/_media_controls.scss +139 -0
- package/scss/_overlay.scss +68 -0
- package/scss/_paned.scss +130 -0
- package/scss/_password_entry.scss +83 -0
- package/scss/_picture.scss +80 -0
- package/scss/_popover_bin.scss +53 -0
- package/scss/_popover_menu_bar.scss +104 -0
- package/scss/_preferences_row.scss +51 -0
- package/scss/_print_dialogs.scss +328 -0
- package/scss/_reset.scss +21 -19
- package/scss/_revealer.scss +37 -0
- package/scss/_row.scss +20 -5
- package/scss/_scale.scss +298 -0
- package/scss/_scale_button.scss +167 -0
- package/scss/_scrollbar.scss +230 -0
- package/scss/_scrolled_window.scss +131 -0
- package/scss/_search_bar.scss +118 -0
- package/scss/_search_entry.scss +86 -0
- package/scss/_separator.scss +44 -0
- package/scss/_shortcuts_dialog.scss +100 -0
- package/scss/_spin_button.scss +172 -0
- package/scss/_spin_row.scss +56 -8
- package/scss/_spinner.scss +85 -4
- package/scss/_stack.scss +729 -0
- package/scss/_switch.scss +13 -5
- package/scss/_switch_row.scss +10 -0
- package/scss/_tab_bar.scss +317 -0
- package/scss/_tab_button.scss +98 -0
- package/scss/_tab_overview.scss +483 -0
- package/scss/_text.scss +182 -0
- package/scss/_theme.scss +1 -1
- package/scss/_tree_expander.scss +62 -0
- package/scss/_variables.scss +1 -1
- package/scss/_video.scss +146 -0
- package/scss/_view_switcher_sidebar.scss +112 -0
- package/scss/_viewport.scss +50 -0
- package/scss/_window.scss +118 -1
- package/scss/_window_handle.scss +20 -0
- package/scss/adwaita-skin.scss +109 -0
- package/src/adw-action-rows.spec.ts +76 -0
- package/src/adw-application-window.spec.ts +118 -0
- package/src/adw-bin.spec.ts +75 -0
- package/src/adw-breakpoint-bin.spec.ts +324 -0
- package/src/adw-clamp-scrollable.spec.ts +189 -0
- package/src/adw-multi-layout-view.spec.ts +243 -0
- package/src/adw-preferences-row.spec.ts +164 -0
- package/src/adw-row-state.spec.ts +142 -0
- package/src/adw-shortcuts.spec.ts +155 -0
- package/src/adw-tab-bar.spec.ts +287 -0
- package/src/adw-tab-button.spec.ts +101 -0
- package/src/adw-tab-overview.spec.ts +443 -0
- package/src/adw-view-switcher-sidebar.spec.ts +281 -0
- package/src/adw-window.spec.ts +129 -0
- package/src/breakpoints.ts +25 -8
- package/src/capabilities.d.mts +3 -0
- package/src/capabilities.mjs +18 -0
- package/src/connect-lifecycle.spec.ts +12 -0
- package/src/construct-vectors.spec.ts +175 -0
- package/src/elements/adw-application-window.ts +154 -0
- package/src/elements/adw-bin.ts +101 -0
- package/src/elements/adw-breakpoint-bin.ts +287 -0
- package/src/elements/adw-clamp-scrollable.ts +207 -0
- package/src/elements/adw-dialog.ts +19 -0
- package/src/elements/adw-layout-slot.ts +95 -0
- package/src/elements/adw-multi-layout-view.ts +326 -0
- package/src/elements/adw-preferences-row.ts +150 -0
- package/src/elements/adw-shortcuts-dialog.ts +52 -0
- package/src/elements/adw-shortcuts-item.ts +171 -0
- package/src/elements/adw-shortcuts-section.ts +86 -0
- package/src/elements/adw-sidebar.ts +42 -3
- package/src/elements/adw-switch-row.ts +28 -1
- package/src/elements/adw-tab-bar.ts +529 -0
- package/src/elements/adw-tab-button.ts +194 -0
- package/src/elements/adw-tab-overview.ts +1011 -0
- package/src/elements/adw-tab-view.ts +66 -145
- package/src/elements/adw-toggle-group.ts +20 -5
- package/src/elements/adw-view-stack.ts +18 -0
- package/src/elements/adw-view-switcher-sidebar.ts +332 -0
- package/src/elements/adw-window.ts +185 -11
- package/src/elements/checks.ts +35 -8
- package/src/elements/gtk-about-dialog.ts +811 -0
- package/src/elements/gtk-application-window.ts +108 -0
- package/src/elements/gtk-aspect-frame.ts +160 -0
- package/src/elements/gtk-button.ts +12 -0
- package/src/elements/gtk-calendar.ts +757 -0
- package/src/elements/gtk-center-box.ts +184 -0
- package/src/elements/gtk-color-dialog-button.ts +278 -0
- package/src/elements/gtk-column-view.ts +320 -0
- package/src/elements/gtk-drag-icon.ts +257 -0
- package/src/elements/gtk-drawing-area.ts +303 -0
- package/src/elements/gtk-editable-label.ts +204 -0
- package/src/elements/gtk-emoji-chooser.ts +542 -0
- package/src/elements/gtk-entry.ts +39 -5
- package/src/elements/gtk-expander.ts +301 -0
- package/src/elements/gtk-fixed.ts +99 -0
- package/src/elements/gtk-flow-box-child.ts +68 -0
- package/src/elements/gtk-flow-box.ts +480 -0
- package/src/elements/gtk-font-dialog-button.ts +432 -0
- package/src/elements/gtk-frame.ts +174 -0
- package/src/elements/gtk-gl-area.ts +476 -0
- package/src/elements/gtk-graphics-offload.ts +130 -0
- package/src/elements/gtk-grid-view.ts +168 -0
- package/src/elements/gtk-grid.ts +127 -0
- package/src/elements/gtk-header-bar.ts +273 -0
- package/src/elements/gtk-inscription.ts +387 -0
- package/src/elements/gtk-label.ts +19 -11
- package/src/elements/gtk-level-bar.ts +323 -0
- package/src/elements/gtk-link-button.ts +138 -0
- package/src/elements/gtk-list-box-row.ts +195 -0
- package/src/elements/gtk-list-box.ts +413 -0
- package/src/elements/gtk-list-view.ts +370 -0
- package/src/elements/gtk-media-controls.ts +509 -0
- package/src/elements/gtk-notebook.ts +664 -0
- package/src/elements/gtk-overlay.ts +149 -0
- package/src/elements/gtk-page-setup-unix-dialog.ts +420 -0
- package/src/elements/gtk-paned.ts +597 -0
- package/src/elements/gtk-password-entry.ts +170 -0
- package/src/elements/gtk-picture.ts +254 -0
- package/src/elements/gtk-popover-bin.ts +332 -0
- package/src/elements/gtk-popover-menu-bar.ts +355 -0
- package/src/elements/gtk-popover-menu.ts +339 -0
- package/src/elements/gtk-popover.ts +92 -10
- package/src/elements/gtk-print-unix-dialog.ts +989 -0
- package/src/elements/gtk-progress-bar.ts +24 -11
- package/src/elements/gtk-revealer.ts +406 -0
- package/src/elements/gtk-scale-button.ts +358 -0
- package/src/elements/gtk-scale.ts +492 -0
- package/src/elements/gtk-scrollbar.ts +528 -0
- package/src/elements/gtk-scrolled-window.ts +642 -0
- package/src/elements/gtk-search-bar.ts +200 -0
- package/src/elements/gtk-search-entry.ts +172 -0
- package/src/elements/gtk-separator.ts +52 -0
- package/src/elements/gtk-spin-button.ts +475 -0
- package/src/elements/gtk-spinner.ts +126 -0
- package/src/elements/gtk-stack-sidebar.ts +212 -0
- package/src/elements/gtk-stack-switcher.ts +279 -0
- package/src/elements/gtk-stack.ts +748 -0
- package/src/elements/gtk-switch.ts +52 -19
- package/src/elements/gtk-text-view.ts +290 -0
- package/src/elements/gtk-text.ts +219 -0
- package/src/elements/gtk-toggle-button.ts +239 -0
- package/src/elements/gtk-tree-expander.ts +243 -0
- package/src/elements/gtk-video.ts +423 -0
- package/src/elements/gtk-viewport.ts +277 -0
- package/src/elements/gtk-window-controls.ts +341 -0
- package/src/elements/gtk-window-handle.ts +221 -0
- package/src/elements/gtk-window.ts +366 -0
- package/src/elements/justification.ts +24 -0
- package/src/elements/popover-menu.ts +24 -0
- package/src/elements/roving-focus.ts +53 -21
- package/src/emoji-data.ts +577 -0
- package/src/entry-rows.spec.ts +31 -0
- package/src/font-description.ts +238 -0
- package/src/gtk-about-dialog.spec.ts +250 -0
- package/src/gtk-action-bar.spec.ts +89 -0
- package/src/gtk-application-window.spec.ts +107 -0
- package/src/gtk-aspect-frame.spec.ts +114 -0
- package/src/gtk-calendar.spec.ts +589 -0
- package/src/gtk-center-box.spec.ts +125 -0
- package/src/gtk-color-dialog-button.spec.ts +141 -0
- package/src/gtk-column-view.spec.ts +154 -0
- package/src/gtk-drag-icon.spec.ts +190 -0
- package/src/gtk-drawing-area.spec.ts +211 -0
- package/src/gtk-editable-label.spec.ts +190 -0
- package/src/gtk-emoji-chooser.spec.ts +173 -0
- package/src/gtk-entry.spec.ts +23 -0
- package/src/gtk-expander.spec.ts +170 -0
- package/src/gtk-fixed.spec.ts +97 -0
- package/src/gtk-flow-box.spec.ts +289 -0
- package/src/gtk-font-dialog-button.spec.ts +166 -0
- package/src/gtk-frame.spec.ts +119 -0
- package/src/gtk-gl-area.spec.ts +361 -0
- package/src/gtk-graphics-offload.spec.ts +119 -0
- package/src/gtk-grid-view.spec.ts +106 -0
- package/src/gtk-grid.spec.ts +122 -0
- package/src/gtk-header-bar.spec.ts +202 -0
- package/src/gtk-inscription.spec.ts +235 -0
- package/src/gtk-level-bar.spec.ts +199 -0
- package/src/gtk-link-button.spec.ts +117 -0
- package/src/gtk-list-box.spec.ts +422 -0
- package/src/gtk-list-view.spec.ts +203 -0
- package/src/gtk-media-controls.spec.ts +295 -0
- package/src/gtk-notebook.spec.ts +546 -0
- package/src/gtk-overlay.spec.ts +141 -0
- package/src/gtk-paned.spec.ts +267 -0
- package/src/gtk-password-entry.spec.ts +150 -0
- package/src/gtk-picture.spec.ts +172 -0
- package/src/gtk-popover-bin.spec.ts +229 -0
- package/src/gtk-popover-menu-bar.spec.ts +296 -0
- package/src/gtk-popover-menu.spec.ts +261 -0
- package/src/gtk-popover-role.spec.ts +138 -0
- package/src/gtk-popover.spec.ts +264 -0
- package/src/gtk-print-dialogs.spec.ts +251 -0
- package/src/gtk-revealer.spec.ts +164 -0
- package/src/gtk-scale-button.spec.ts +218 -0
- package/src/gtk-scale.spec.ts +213 -0
- package/src/gtk-scrollbar.spec.ts +244 -0
- package/src/gtk-scrolled-window.spec.ts +262 -0
- package/src/gtk-search-bar.spec.ts +179 -0
- package/src/gtk-search-entry.spec.ts +142 -0
- package/src/gtk-separator.spec.ts +74 -0
- package/src/gtk-spin-button.spec.ts +186 -0
- package/src/gtk-spinner.spec.ts +130 -0
- package/src/gtk-stack-sidebar.spec.ts +217 -0
- package/src/gtk-stack-switcher.spec.ts +249 -0
- package/src/gtk-stack.spec.ts +432 -0
- package/src/gtk-text-view.spec.ts +189 -0
- package/src/gtk-text.spec.ts +163 -0
- package/src/gtk-toggle-button.spec.ts +186 -0
- package/src/gtk-tree-expander.spec.ts +201 -0
- package/src/gtk-video.spec.ts +240 -0
- package/src/gtk-viewport.spec.ts +140 -0
- package/src/gtk-window-controls.spec.ts +232 -0
- package/src/gtk-window-handle.spec.ts +158 -0
- package/src/gtk-window.spec.ts +190 -0
- package/src/index.ts +9 -1
- package/src/keyboard-operable.spec.ts +33 -1
- package/src/list-view-dom.ts +121 -0
- package/src/namespace/adw.ts +12 -0
- package/src/namespace/gtk.ts +61 -0
- package/src/page-setup.ts +222 -0
- package/src/scroll-shading.ts +18 -1
- package/src/shared-tree-builder.ts +263 -21
- package/src/signals.ts +15 -0
- package/src/style-classes.spec.ts +9 -8
- package/src/styles.generated.ts +1 -1
- package/src/tab-chip.ts +200 -0
- package/src/template-classes.ts +45 -0
- package/src/test.browser.mts +152 -0
package/scss/adwaita-skin.scss
CHANGED
|
@@ -27,6 +27,15 @@
|
|
|
27
27
|
@use 'labels';
|
|
28
28
|
// <gtk-box>. Before every widget, which may place its own children in one.
|
|
29
29
|
@use 'box';
|
|
30
|
+
// The five Gtk layout containers after it, and they are here for ONE reason each: nothing
|
|
31
|
+
// downstream of `box` needs to place children in one, and the frame's 1px border is the
|
|
32
|
+
// only rule libadwaita writes for any of the five (`_misc.scss:4-15`) — so they belong with
|
|
33
|
+
// the primitive they build on rather than in the widget run below.
|
|
34
|
+
@use 'frame';
|
|
35
|
+
@use 'aspect_frame';
|
|
36
|
+
@use 'center_box';
|
|
37
|
+
@use 'grid';
|
|
38
|
+
@use 'fixed';
|
|
30
39
|
// The REST of libadwaita's documented style-class surface — the widget-
|
|
31
40
|
// independent half: the surfaces (`.background`, `.view`, `.frame`), `.card` and
|
|
32
41
|
// the two boxed lists, `.toolbar`, `.spacer`, `.osd`, `.linked`, the app-icon
|
|
@@ -37,14 +46,32 @@
|
|
|
37
46
|
// documented surface and fails on a class with no rule behind it.
|
|
38
47
|
@use 'style_classes';
|
|
39
48
|
@use 'window';
|
|
49
|
+
@use 'application_window';
|
|
50
|
+
// <adw-header-bar>, <gtk-header-bar> AND <gtk-window-controls>, in ONE partial because
|
|
51
|
+
// upstream's `_header-bar.scss` styles `headerbar`, `windowcontrols` and `windowtitle`
|
|
52
|
+
// together — and because a bar's frame buttons ARE its window controls.
|
|
40
53
|
@use 'headerbar';
|
|
41
54
|
@use 'action_bar';
|
|
42
55
|
@use 'window_title';
|
|
43
56
|
@use 'button';
|
|
57
|
+
// The four button-derived nodes below, in the order of `src/elements/`: each one
|
|
58
|
+
// renders a `.adw-button` of its own, so each rule comes AFTER `button` rather than
|
|
59
|
+
// before it — `button.link`'s transparent background is the whole point of a link and
|
|
60
|
+
// `.adw-button`'s resting fill must not win it on source order.
|
|
61
|
+
@use 'link';
|
|
62
|
+
@use 'scale_button';
|
|
63
|
+
@use 'color_button';
|
|
64
|
+
@use 'font_button';
|
|
44
65
|
@use 'button_content';
|
|
45
66
|
// The ONE popover surface. Emitted BEFORE the widgets that host one, so a
|
|
46
67
|
// consumer's (or a widget's) own higher-specificity rule still wins over it.
|
|
47
68
|
@use 'popover';
|
|
69
|
+
// <gtk-popover-menu>, <gtk-popover-menu-bar> and <gtk-popover-bin>. All three AFTER
|
|
70
|
+
// `popover`, because every surface they own is `<gtk-popover>`'s and none of them restates
|
|
71
|
+
// it — they add the menubar's item rules and the bin's `.has-open-popup`, and libadwaita
|
|
72
|
+
// puts both in the same file as `popover.menu` for the same reason.
|
|
73
|
+
@use 'popover_menu_bar';
|
|
74
|
+
@use 'popover_bin';
|
|
48
75
|
@use 'split_button';
|
|
49
76
|
@use 'menu_button';
|
|
50
77
|
@use 'drop_down';
|
|
@@ -54,14 +81,73 @@
|
|
|
54
81
|
// own copy of it until it was lifted out of `adw-switch-row {}`.
|
|
55
82
|
@use 'switch';
|
|
56
83
|
@use 'entry';
|
|
84
|
+
@use 'search_entry';
|
|
85
|
+
@use 'password_entry';
|
|
86
|
+
@use 'separator';
|
|
87
|
+
// `<gtk-text>`, `<gtk-text-view>` and `<gtk-editable-label>` — the widgets whose content is
|
|
88
|
+
// text, and the two libadwaita blocks that paint a `text` node.
|
|
89
|
+
@use 'text';
|
|
90
|
+
// `<gtk-search-bar>`, which reads the header-bar tokens rather than the header bar's rules.
|
|
91
|
+
@use 'search_bar';
|
|
92
|
+
// <gtk-drawing-area>, the one widget of the gtk/drawing page that carries a rule of its
|
|
93
|
+
// own. No dependency on anything above it — it styles one canvas — so the order here is
|
|
94
|
+
// placement, not precedence.
|
|
95
|
+
@use 'drawing';
|
|
96
|
+
// The `dnd` node, which libadwaita styles once for the whole widget
|
|
97
|
+
// (`_common.scss:30-32`) and which is otherwise geometry: a drag icon has no parent to lay
|
|
98
|
+
// out in, because it is a GtkRoot with its own surface. No dependency on anything above it.
|
|
99
|
+
@use 'drag_icon';
|
|
100
|
+
// The layout CONTAINERS GTK owns and libadwaita only styles. `_paned` draws the divider as
|
|
101
|
+
// an inset box-shadow on the `separator` node a `GtkPanedHandle` carries, which is a
|
|
102
|
+
// different rule from `<gtk-separator>`'s own fill — so it needs its own partial rather
|
|
103
|
+
// than a class the separator's rule would fight over.
|
|
104
|
+
@use 'overlay';
|
|
105
|
+
@use 'revealer';
|
|
106
|
+
@use 'paned';
|
|
107
|
+
@use 'expander';
|
|
57
108
|
// The two form-control primitives, in ONE partial because upstream merges them
|
|
58
109
|
// (there is no `_radio.scss` in libadwaita) — see _checks.scss.
|
|
59
110
|
@use 'checks';
|
|
111
|
+
@use 'spin_button';
|
|
112
|
+
@use 'scale';
|
|
60
113
|
@use 'progress_bar';
|
|
114
|
+
// <gtk-level-bar>, next to the progress bar it is easy to confuse with. It has no
|
|
115
|
+
// dependency on anything above it, so the order here is readability, not precedence.
|
|
116
|
+
@use 'level_bar';
|
|
117
|
+
// The three views, in dependency order: `list_view` declares the selectable-row mixin
|
|
118
|
+
// and the rubber band that the other two include.
|
|
119
|
+
@use 'list_view';
|
|
120
|
+
@use 'grid_view';
|
|
121
|
+
@use 'column_view';
|
|
122
|
+
@use 'tree_expander';
|
|
123
|
+
// The media group, in dependency order and nothing else: `picture` fits a replaced
|
|
124
|
+
// element, `inscription` is text measured in characters and lines, `video` lays an
|
|
125
|
+
// overlay out and hosts a `media_controls` inside its revealer, so `media_controls`
|
|
126
|
+
// comes after `video` only in the sense that `video` NAMES it — neither partial reads
|
|
127
|
+
// the other, and the order here is readability, not precedence.
|
|
128
|
+
@use 'picture';
|
|
129
|
+
@use 'inscription';
|
|
130
|
+
@use 'video';
|
|
131
|
+
@use 'media_controls';
|
|
132
|
+
// The two child-holding containers. `list_box` comes first only because it reads like
|
|
133
|
+
// `list_view`; nothing here is a `@use` of the other, and `flow_box` includes the selectable
|
|
134
|
+
// mixin from `list_view` above for the cell's four state colours.
|
|
135
|
+
@use 'list_box';
|
|
136
|
+
@use 'flow_box';
|
|
137
|
+
@use 'calendar';
|
|
61
138
|
@use 'preferences';
|
|
139
|
+
@use 'preferences_row';
|
|
62
140
|
@use 'card';
|
|
63
141
|
@use 'data_grid';
|
|
142
|
+
@use 'bin';
|
|
64
143
|
@use 'clamp';
|
|
144
|
+
// <gtk-stack> AND <gtk-stack-switcher> AND <gtk-stack-sidebar>, in ONE partial: upstream
|
|
145
|
+
// styles the switcher's buttons out of `_buttons.scss` and the sidebar's rows out of
|
|
146
|
+
// `_sidebars.scss`, so a stack and the two things that switch over it share styles.
|
|
147
|
+
@use 'stack';
|
|
148
|
+
@use 'clamp_scrollable';
|
|
149
|
+
// <adw-spinner> AND <gtk-spinner>, in ONE partial because upstream's
|
|
150
|
+
// `_spinner.scss` styles `spinner` and `image.spinner` in the same file.
|
|
65
151
|
@use 'spinner';
|
|
66
152
|
// <adw-shortcut-label>'s keycaps. After `labels`, because a separator inside it
|
|
67
153
|
// is an ordinary `.dimmed`.
|
|
@@ -80,24 +166,47 @@
|
|
|
80
166
|
@use 'password_entry_row';
|
|
81
167
|
@use 'toast';
|
|
82
168
|
@use 'toolbar_view';
|
|
169
|
+
// The scrolling trio, beside `_scrolling.scss`'s edge indicators: the scrollbar first,
|
|
170
|
+
// because the scrolled window's grid places it, and the viewport before the window, because
|
|
171
|
+
// the window's grid has a cell for it.
|
|
172
|
+
@use 'scrollbar';
|
|
173
|
+
@use 'viewport';
|
|
174
|
+
@use 'scrolled_window';
|
|
175
|
+
@use 'window_handle';
|
|
83
176
|
@use 'scrolling';
|
|
84
177
|
@use 'wrap_box';
|
|
85
178
|
@use 'panes';
|
|
86
179
|
@use 'overlay_split_view';
|
|
87
180
|
@use 'navigation_split_view';
|
|
88
181
|
@use 'carousel';
|
|
182
|
+
// <adw-tab-bar> BEFORE <adw-tab-view>, and only because upstream writes both in ONE file:
|
|
183
|
+
// `tabbar`, `tabbox` and `tab` (_tab-view.scss:1-95). The chip rules here and the merged
|
|
184
|
+
// bar's are the same declarations against the same class names, so whichever partial is
|
|
185
|
+
// emitted second would win on source order for a document that nests one bar in the other.
|
|
186
|
+
@use 'tab_bar';
|
|
89
187
|
@use 'tab_view';
|
|
90
188
|
@use 'view_switcher';
|
|
91
189
|
@use 'inline_view_switcher';
|
|
92
190
|
@use 'view_stack';
|
|
93
191
|
@use 'view_switcher_bar';
|
|
192
|
+
@use 'tab_button';
|
|
193
|
+
@use 'tab_overview';
|
|
194
|
+
@use 'view_switcher_sidebar';
|
|
94
195
|
@use 'navigation_view';
|
|
95
196
|
@use 'bottom_sheet';
|
|
96
197
|
@use 'sidebar';
|
|
198
|
+
// GTK's own dialogs: the about window's layout, the emoji chooser's nodes, and the two
|
|
199
|
+
// Unix print dialogs. After `popover` and `entry`, which the emoji chooser hosts.
|
|
200
|
+
@use 'gtk_about_dialog';
|
|
201
|
+
@use 'emoji_chooser';
|
|
202
|
+
@use 'print_dialogs';
|
|
97
203
|
@use 'about_dialog';
|
|
98
204
|
@use 'alert_dialog';
|
|
99
205
|
@use 'preferences_dialog';
|
|
100
206
|
@use 'dialog';
|
|
207
|
+
// After 'dialog': the shortcuts dialog IS an <adw-dialog> and adds sections and rows
|
|
208
|
+
// inside its content area, so its own rules have to come after the chrome they sit in.
|
|
209
|
+
@use 'shortcuts_dialog';
|
|
101
210
|
// Last among the widgets: an authored `halign` / `valign` is placement the author asked
|
|
102
211
|
// for, and an element rule that sets a margin must not win it back on source order.
|
|
103
212
|
@use 'widget';
|
|
@@ -246,6 +246,82 @@ export const AdwActionRowsTest = async () => {
|
|
|
246
246
|
}
|
|
247
247
|
});
|
|
248
248
|
|
|
249
|
+
await describe('<adw-switch-row> prefix slot (inherited add_prefix)', async () => {
|
|
250
|
+
// Routing a live child and then deriving the box's emptiness are TWO observers in
|
|
251
|
+
// a chain: `slotted-children` moves the node into the box, and only that move is
|
|
252
|
+
// what `bindEmptySections` observes. One checkpoint sees the routing, two see the
|
|
253
|
+
// derivation.
|
|
254
|
+
const settleSlot = async () => {
|
|
255
|
+
await Promise.resolve();
|
|
256
|
+
await Promise.resolve();
|
|
257
|
+
};
|
|
258
|
+
await it('routes a DECLARED slot="prefix" child into the prefix box', () => {
|
|
259
|
+
// Adw.SwitchRow IS an AdwActionRow (adw-switch-row.c:50), so `add_prefix`
|
|
260
|
+
// and the box that carries it are inherited, not a web-only addition.
|
|
261
|
+
// The child is authored BEFORE the row reaches the document, which is the
|
|
262
|
+
// install pass rather than the observer.
|
|
263
|
+
const host = document.createElement('div');
|
|
264
|
+
document.body.appendChild(host);
|
|
265
|
+
const row = document.createElement('adw-switch-row') as AdwSwitchRow;
|
|
266
|
+
const icon = document.createElement('span');
|
|
267
|
+
icon.id = 'lead';
|
|
268
|
+
icon.setAttribute('slot', 'prefix');
|
|
269
|
+
row.appendChild(icon);
|
|
270
|
+
host.appendChild(row);
|
|
271
|
+
|
|
272
|
+
expect(icon.parentElement?.className).toBe('adw-switch-row-prefix');
|
|
273
|
+
host.remove();
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
await it('hides the box while it is empty', () => {
|
|
277
|
+
const { el: row, host } = mount<AdwSwitchRow>('adw-switch-row');
|
|
278
|
+
const box = row.querySelector('.adw-switch-row-prefix') as HTMLElement;
|
|
279
|
+
expect(box.hidden).toBe(true);
|
|
280
|
+
host.remove();
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
await it('routes a prefix appended AFTER connect, and un-hides the box', async () => {
|
|
284
|
+
// The live half: a renderer mounts the row and then appends the icon, which
|
|
285
|
+
// is a MutationObserver callback rather than the install pass — the incident
|
|
286
|
+
// `src/slotted-children.ts` records for 42 elements that snapshotted instead.
|
|
287
|
+
const { el: row, host } = mount<AdwSwitchRow>('adw-switch-row');
|
|
288
|
+
const box = row.querySelector('.adw-switch-row-prefix') as HTMLElement;
|
|
289
|
+
|
|
290
|
+
const icon = document.createElement('span');
|
|
291
|
+
icon.setAttribute('slot', 'prefix');
|
|
292
|
+
row.appendChild(icon);
|
|
293
|
+
await settleSlot();
|
|
294
|
+
|
|
295
|
+
expect(icon.parentElement).toBe(box);
|
|
296
|
+
expect(box.hidden).toBe(false);
|
|
297
|
+
host.remove();
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
await it('shows it again when the last prefix child leaves', async () => {
|
|
301
|
+
const { el: row, host } = mount<AdwSwitchRow>('adw-switch-row');
|
|
302
|
+
const icon = document.createElement('span');
|
|
303
|
+
icon.setAttribute('slot', 'prefix');
|
|
304
|
+
row.appendChild(icon);
|
|
305
|
+
await settleSlot();
|
|
306
|
+
const box = row.querySelector('.adw-switch-row-prefix') as HTMLElement;
|
|
307
|
+
|
|
308
|
+
expect(box.hidden).toBe(false);
|
|
309
|
+
icon.remove();
|
|
310
|
+
await Promise.resolve();
|
|
311
|
+
expect(box.hidden).toBe(true);
|
|
312
|
+
host.remove();
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
await it('exposes the box as prefixSection for the imperative spelling', () => {
|
|
316
|
+
const { el: row, host } = mount<AdwSwitchRow>('adw-switch-row');
|
|
317
|
+
const icon = document.createElement('span');
|
|
318
|
+
row.prefixSection.appendChild(icon);
|
|
319
|
+
|
|
320
|
+
expect(icon.parentElement).toBe(row.prefixSection);
|
|
321
|
+
host.remove();
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
|
|
249
325
|
await describe('<adw-button-row> (libadwaita conformance vectors)', async () => {
|
|
250
326
|
for (const vector of BUTTON_ROW_ICON_VECTORS) {
|
|
251
327
|
await it(`${JSON.stringify([vector.startIconName, vector.endIconName])} — ${vector.rule}`, () => {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// DOM-level behaviour tests for <adw-application-window>. Runs in a real browser via the
|
|
2
|
+
// @gjsify/adwaita-web browser test axis (tests/browser Playwright harness). The custom
|
|
3
|
+
// elements are registered by importing the package root in test.browser.mts; these specs
|
|
4
|
+
// create elements via document.createElement and assert their DOM behaviour.
|
|
5
|
+
//
|
|
6
|
+
// The subject is the MENUBAR and the inheritance: `Adw.ApplicationWindow` is
|
|
7
|
+
// `Adw.Window` plus `Gtk.ApplicationWindow:show-menubar`, so the window half is
|
|
8
|
+
// <adw-window>'s spec and only the delta is asserted here.
|
|
9
|
+
import { describe, it, expect } from '@gjsify/unit';
|
|
10
|
+
|
|
11
|
+
import type { AdwApplicationWindow } from './elements/adw-application-window.js';
|
|
12
|
+
|
|
13
|
+
const MENU_MODEL = [
|
|
14
|
+
{
|
|
15
|
+
label: 'File',
|
|
16
|
+
submenu: [
|
|
17
|
+
{ label: 'New Window', action: 'app.new-window' },
|
|
18
|
+
{ label: 'Quit', action: 'app.quit' },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{ label: 'Help', action: 'app.help' },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
function makeWindow(model: unknown = MENU_MODEL): AdwApplicationWindow {
|
|
25
|
+
const el = document.createElement('adw-application-window') as AdwApplicationWindow;
|
|
26
|
+
el.setAttribute('menu-model', JSON.stringify(model));
|
|
27
|
+
el.innerHTML = '<p>Content</p>';
|
|
28
|
+
document.body.appendChild(el);
|
|
29
|
+
return el;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const AdwApplicationWindowTest = async () => {
|
|
33
|
+
await describe('adw-application-window is an adw-window', async () => {
|
|
34
|
+
await it('places children in the inherited content area', async () => {
|
|
35
|
+
const win = makeWindow();
|
|
36
|
+
expect(win.querySelector('.adw-window-content')?.querySelector('p')?.textContent).toBe('Content');
|
|
37
|
+
win.remove();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
await it('keeps the inherited size request', async () => {
|
|
41
|
+
const win = makeWindow();
|
|
42
|
+
expect(win.style.width).toBe('360px');
|
|
43
|
+
win.setAttribute('width', '520');
|
|
44
|
+
expect(win.style.width).toBe('520px');
|
|
45
|
+
win.remove();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
await describe('adw-application-window menubar', async () => {
|
|
50
|
+
await it('draws no bar without show-menubar', async () => {
|
|
51
|
+
const win = makeWindow();
|
|
52
|
+
expect(win.showMenubar).toBe(false);
|
|
53
|
+
expect(win.menubar?.hidden).toBe(true);
|
|
54
|
+
win.remove();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await it('draws no bar for an application that installed no menu', async () => {
|
|
58
|
+
// The GTK half of the same rule: a window with no model has no menubar,
|
|
59
|
+
// however the flag reads.
|
|
60
|
+
const win = makeWindow([]);
|
|
61
|
+
win.setAttribute('show-menubar', '');
|
|
62
|
+
expect(win.menubar?.hidden).toBe(true);
|
|
63
|
+
win.remove();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
await it('a submenu becomes a menu button and a bare item a flat button', async () => {
|
|
67
|
+
const win = makeWindow();
|
|
68
|
+
win.setAttribute('show-menubar', '');
|
|
69
|
+
|
|
70
|
+
expect(win.menubar?.hidden).toBe(false);
|
|
71
|
+
const menuButton = win.menubar?.querySelector('gtk-menu-button');
|
|
72
|
+
expect(menuButton?.getAttribute('menu-title')).toBe('File');
|
|
73
|
+
const help = win.menubar?.querySelector('gtk-button');
|
|
74
|
+
expect(help?.getAttribute('label')).toBe('Help');
|
|
75
|
+
win.remove();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
await it('the menubar sits above the content, inside the content area', async () => {
|
|
79
|
+
// It is a child of `.adw-window-content` rather than a sibling: the window's
|
|
80
|
+
// own slot binding would re-home a sibling into the content on the next tick.
|
|
81
|
+
const win = makeWindow();
|
|
82
|
+
win.setAttribute('show-menubar', '');
|
|
83
|
+
expect(win.contentArea.firstElementChild).toBe(win.menubar);
|
|
84
|
+
win.remove();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await it('the flag alone shows and hides the bar without a rebuild', async () => {
|
|
88
|
+
const win = makeWindow();
|
|
89
|
+
win.setAttribute('show-menubar', '');
|
|
90
|
+
expect(win.menubar?.hidden).toBe(false);
|
|
91
|
+
win.removeAttribute('show-menubar');
|
|
92
|
+
expect(win.menubar?.hidden).toBe(true);
|
|
93
|
+
win.remove();
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
await it('a bare item reports its activation the way every menu surface does', async () => {
|
|
97
|
+
const win = makeWindow();
|
|
98
|
+
win.setAttribute('show-menubar', '');
|
|
99
|
+
const seen: unknown[] = [];
|
|
100
|
+
win.addEventListener('menu-item-activated', (e) => seen.push((e as CustomEvent).detail));
|
|
101
|
+
(win.menubar?.querySelector('gtk-button') as HTMLButtonElement | null)?.click();
|
|
102
|
+
expect(seen).toStrictEqual([{ id: 'Help', label: 'Help', path: [1] }]);
|
|
103
|
+
win.remove();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
await it('a broken model is dropped rather than thrown', async () => {
|
|
107
|
+
// `parseMenuModel` is total by construction: a typo in markup must not take
|
|
108
|
+
// the window down with it.
|
|
109
|
+
const win = document.createElement('adw-application-window') as AdwApplicationWindow;
|
|
110
|
+
win.setAttribute('menu-model', '{not json');
|
|
111
|
+
win.setAttribute('show-menubar', '');
|
|
112
|
+
document.body.appendChild(win);
|
|
113
|
+
expect(win.menuModel).toStrictEqual([]);
|
|
114
|
+
expect(win.menubar?.hidden).toBe(true);
|
|
115
|
+
win.remove();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// DOM-level tests for <adw-bin>: the ONE child a bin holds, that `setChild` REPLACES
|
|
2
|
+
// rather than stacks (adw-bin.c:193-219), and that a child which already has a parent
|
|
3
|
+
// is refused the way C's `g_return_if_fail (gtk_widget_get_parent (child) == NULL)`
|
|
4
|
+
// refuses it.
|
|
5
|
+
import { describe, expect, it } from '@gjsify/unit';
|
|
6
|
+
|
|
7
|
+
import type { AdwBin } from './elements/adw-bin.js';
|
|
8
|
+
|
|
9
|
+
function mount(children: Node[] = []): { el: AdwBin; host: HTMLElement } {
|
|
10
|
+
const host = document.createElement('div');
|
|
11
|
+
document.body.appendChild(host);
|
|
12
|
+
const el = document.createElement('adw-bin') as AdwBin;
|
|
13
|
+
host.appendChild(el);
|
|
14
|
+
for (const child of children) el.appendChild(child);
|
|
15
|
+
return { el, host };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const AdwBinTest = async () => {
|
|
19
|
+
await describe('<adw-bin> one child', async () => {
|
|
20
|
+
await it('holds whatever it was given, and reports it as `child`', () => {
|
|
21
|
+
const label = document.createElement('div');
|
|
22
|
+
const { el, host } = mount([label]);
|
|
23
|
+
expect(el.child).toBe(label);
|
|
24
|
+
expect(el.childElementCount).toBe(1);
|
|
25
|
+
host.remove();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
await it('a second child REPLACES the first, which is what adw_bin_set_child does', async () => {
|
|
29
|
+
const first = document.createElement('div');
|
|
30
|
+
const second = document.createElement('div');
|
|
31
|
+
const { el, host } = mount([first]);
|
|
32
|
+
el.appendChild(second);
|
|
33
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 0));
|
|
34
|
+
expect(el.child).toBe(second);
|
|
35
|
+
expect(el.childElementCount).toBe(1);
|
|
36
|
+
expect(first.parentNode).toBeNull();
|
|
37
|
+
host.remove();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
await it('setChild notifies once, and not for the child it already holds', async () => {
|
|
41
|
+
const { el, host } = mount();
|
|
42
|
+
const details: unknown[] = [];
|
|
43
|
+
el.addEventListener('notify::child', (event) => details.push((event as CustomEvent).detail));
|
|
44
|
+
const child = document.createElement('div');
|
|
45
|
+
el.child = child;
|
|
46
|
+
expect(el.child).toBe(child);
|
|
47
|
+
el.setChild(child);
|
|
48
|
+
expect(details).toStrictEqual([{ child }]);
|
|
49
|
+
host.remove();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
await it('refuses a child that already has a parent, as C does', () => {
|
|
53
|
+
const other = document.createElement('div');
|
|
54
|
+
document.body.appendChild(other);
|
|
55
|
+
const stray = document.createElement('span');
|
|
56
|
+
other.appendChild(stray);
|
|
57
|
+
const { el, host } = mount();
|
|
58
|
+
expect(() => el.setChild(stray)).toThrow();
|
|
59
|
+
expect(el.child).toBeNull();
|
|
60
|
+
host.remove();
|
|
61
|
+
other.remove();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
await it('an empty bin is a block box, and its only child fills it', () => {
|
|
65
|
+
const { el, host } = mount([document.createElement('div')]);
|
|
66
|
+
// A bin takes the size it is GIVEN and hands all of it to the child, which
|
|
67
|
+
// `GtkBinLayout` does on both axes (gtkbinlayout.c:81).
|
|
68
|
+
el.style.height = '120px';
|
|
69
|
+
expect(getComputedStyle(el).display).toBe('block');
|
|
70
|
+
const child = el.firstElementChild as HTMLElement;
|
|
71
|
+
expect(child.getBoundingClientRect().height).toBe(120);
|
|
72
|
+
host.remove();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
};
|