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