@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
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
// DOM-level tests for <gtk-media-controls>. Two of the three blocks below test pure
|
|
2
|
+
// functions rather than DOM, and that is the point: `totem_time_to_string` is the one piece
|
|
3
|
+
// of non-trivial arithmetic in this widget, and getting its four shapes and its one-second
|
|
4
|
+
// bump wrong would produce a bar that reads plausibly and is off by one at every boundary.
|
|
5
|
+
// The DOM block covers what a string test cannot — that the bar is INSENSITIVE with no
|
|
6
|
+
// stream, which is the template's own `sensitive` 0.
|
|
7
|
+
import { describe, expect, it } from '@gjsify/unit';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
GtkMediaControls,
|
|
11
|
+
mediaTimeToString,
|
|
12
|
+
volumeIconFor,
|
|
13
|
+
type GtkMediaControls as GtkMediaControlsElement,
|
|
14
|
+
} from './elements/gtk-media-controls.js';
|
|
15
|
+
|
|
16
|
+
function mount(withMedia: boolean): { el: GtkMediaControlsElement; host: HTMLElement; media: HTMLVideoElement | null } {
|
|
17
|
+
const host = document.createElement('div');
|
|
18
|
+
document.body.appendChild(host);
|
|
19
|
+
const el = document.createElement('gtk-media-controls') as GtkMediaControlsElement;
|
|
20
|
+
let media: HTMLVideoElement | null = null;
|
|
21
|
+
if (withMedia) {
|
|
22
|
+
// The template's `controls_revealer` child: the controls bar lives INSIDE the video,
|
|
23
|
+
// so the nearest ancestor video is the stream.
|
|
24
|
+
const video = document.createElement('gtk-video');
|
|
25
|
+
media = document.createElement('video');
|
|
26
|
+
video.appendChild(media);
|
|
27
|
+
video.appendChild(el);
|
|
28
|
+
host.appendChild(video);
|
|
29
|
+
} else {
|
|
30
|
+
host.appendChild(el);
|
|
31
|
+
}
|
|
32
|
+
return { el, host, media };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const GtkMediaControlsTest = async () => {
|
|
36
|
+
await describe('totem_time_to_string', async () => {
|
|
37
|
+
await it('formats elapsed time as m:ss, with the minutes UNPADDED', () => {
|
|
38
|
+
// gtkmediacontrols.c:126-131 — `g_strdup_printf ("%d:%02d", min, sec)`. The
|
|
39
|
+
// minutes are NOT `%02d`, so five minutes is "5:02" and not "05:02".
|
|
40
|
+
expect(mediaTimeToString(0)).toBe('0:00');
|
|
41
|
+
expect(mediaTimeToString(5)).toBe('0:05');
|
|
42
|
+
expect(mediaTimeToString(302)).toBe('5:02');
|
|
43
|
+
expect(mediaTimeToString(599)).toBe('9:59');
|
|
44
|
+
expect(mediaTimeToString(600)).toBe('10:00');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await it('only grows an HOURS field when there is an hour to show', () => {
|
|
48
|
+
// gtkmediacontrols.c:95 — `if (hour > 0 || force_hour)`. An eleven-minute video is
|
|
49
|
+
// "11:03", not "0:11:03"; the hour field appears at one hour.
|
|
50
|
+
expect(mediaTimeToString(660)).toBe('11:00');
|
|
51
|
+
expect(mediaTimeToString(3599)).toBe('59:59');
|
|
52
|
+
expect(mediaTimeToString(3600)).toBe('1:00:00');
|
|
53
|
+
expect(mediaTimeToString(9 * 3600 + 5 * 60 + 2)).toBe('9:05:02');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
await it("the remaining forms are NEGATIVE, which is the C's own sign", () => {
|
|
57
|
+
// gtkmediacontrols.c:117-123 and :99-104 — "-%d:%02d" and "-%d:%02d:%02d".
|
|
58
|
+
expect(mediaTimeToString(302, true)).toBe('-5:03');
|
|
59
|
+
expect(mediaTimeToString(9 * 3600 + 302, true)).toBe('-9:05:03');
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
await it('BUMPS THE TOTAL BY ONE when showing what remains', () => {
|
|
63
|
+
// gtkmediacontrols.c:81-82 — `if (remaining) _time++;`, and `_time` is the whole
|
|
64
|
+
// count, not the seconds field. So the increment is only VISIBLE in the seconds
|
|
65
|
+
// when the input's own seconds are zero, and it CARRIES at 59 the way any
|
|
66
|
+
// increment does: 300 s of remaining is "-5:01", and 359 s is a flat "6:00".
|
|
67
|
+
// Reading the C's line as "+1 to the seconds" gives "-5:03" for 300 s, which is
|
|
68
|
+
// one second more than the count GTK actually holds.
|
|
69
|
+
expect(mediaTimeToString(300, true)).toBe('-5:01');
|
|
70
|
+
// 359 s + 1 s is 360 s, so the minute field carries to 6 and the sign stays —
|
|
71
|
+
// `remaining` is still set, and the short remaining form is `-%d:%02d`.
|
|
72
|
+
expect(mediaTimeToString(359, true)).toBe('-6:00');
|
|
73
|
+
expect(mediaTimeToString(0, true)).toBe('-0:01');
|
|
74
|
+
// An hour-carrying remainder carries too: 3599 s + 1 s is 3600, an hour, so the
|
|
75
|
+
// long format appears — the same hour branch the elapsed form takes, and the
|
|
76
|
+
// negative sign rides along with it because `remaining` is still set.
|
|
77
|
+
expect(mediaTimeToString(3599, true)).toBe('-1:00:00');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
await it('force_hour is the only thing that puts hours on a short video', () => {
|
|
81
|
+
// gtkmediacontrols.c:95. GTK passes FALSE at every call site (:358, :364, :389),
|
|
82
|
+
// so nothing in the widget forces it — it is part of the function's contract.
|
|
83
|
+
expect(mediaTimeToString(302, false, true)).toBe('0:05:02');
|
|
84
|
+
expect(mediaTimeToString(302, true, true)).toBe('-0:05:03');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await it('truncates rather than rounds', () => {
|
|
88
|
+
// The C works in whole seconds throughout (`_time = (int) (usecs / G_USEC_PER_SEC)`,
|
|
89
|
+
// :79), so 59.9 s is the 59th second and not the 60th.
|
|
90
|
+
expect(mediaTimeToString(59.9)).toBe('0:59');
|
|
91
|
+
expect(mediaTimeToString(0.999)).toBe('0:00');
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
await it('passes a negative through as the C does, because the C guards upstream', () => {
|
|
95
|
+
// `totem_time_to_string` does NOT floor, and `%` in C99 keeps the sign of the
|
|
96
|
+
// dividend: for -5 the second is -5, `0 - (-5)` leaves `_time` at 0, and both the
|
|
97
|
+
// minute and the hour come out zero — so the C formats `%d:%02d` of 0 and -5, which
|
|
98
|
+
// is the nonsense `0:-5`. There is no clamp here to borrow, and adding one would be
|
|
99
|
+
// a fix the C does not have. The guard is in the CALLER instead
|
|
100
|
+
// (`duration > timestamp ? duration - timestamp : 0`, :364), which is where this
|
|
101
|
+
// port has it too — so a negative never reaches the formatter from the widget.
|
|
102
|
+
expect(mediaTimeToString(-5)).toBe('0:-5');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
await describe('volumeIconFor', async () => {
|
|
107
|
+
await it('takes the four NAMES from GtkVolumeButton, in ITS order', () => {
|
|
108
|
+
// `GtkVolumeButton:use-symbolic` defaults TRUE and is a CONSTRUCT property, so
|
|
109
|
+
// `gtk_volume_button_set_property` installs `icons_symbolic` before anything
|
|
110
|
+
// reads it (gtkvolumebutton.c:142-148, :186-188). The names in play therefore
|
|
111
|
+
// CARRY the suffix — the template's own list at gtk/ui/gtkvolumebutton.ui:12-15
|
|
112
|
+
// is what a non-symbolic button would use, and it is not what GTK ends up with.
|
|
113
|
+
expect(volumeIconFor(0)).toBe('audio-volume-muted-symbolic');
|
|
114
|
+
expect(volumeIconFor(0.2)).toBe('audio-volume-low-symbolic');
|
|
115
|
+
expect(volumeIconFor(0.5)).toBe('audio-volume-medium-symbolic');
|
|
116
|
+
expect(volumeIconFor(1)).toBe('audio-volume-high-symbolic');
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
await it('splits at a HALF, because the icon list has four entries and two ends', () => {
|
|
120
|
+
// gtkscalebutton.c:1098-1101 — `step = (upper − lower) / (num_icons − 2)`, and the
|
|
121
|
+
// list's `[0]` and `[1]` are already spoken for by the exact `lower` and the exact
|
|
122
|
+
// `upper`. For `volume_adjustment`'s 0…1 that leaves a step of 0.5, NOT thirds.
|
|
123
|
+
// `high` is full scale alone; `low` is the lower half, `medium` the upper one.
|
|
124
|
+
expect(volumeIconFor(0.499)).toBe('audio-volume-low-symbolic');
|
|
125
|
+
expect(volumeIconFor(0.5)).toBe('audio-volume-medium-symbolic');
|
|
126
|
+
expect(volumeIconFor(0.999)).toBe('audio-volume-medium-symbolic');
|
|
127
|
+
// The C's `(guint)` cast truncates rather than rounds, so just under a half is
|
|
128
|
+
// still `low` and just under 1 is still `medium`.
|
|
129
|
+
expect(volumeIconFor(0.9)).toBe('audio-volume-medium-symbolic');
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
await it('is silent at the bottom whatever the range says, which is the muted arm', () => {
|
|
133
|
+
// gtkscalebutton.c:1088-1090 — `value == get_lower` takes `icons[0]`, and
|
|
134
|
+
// `icons[0]` of the volume button is the muted name. Out-of-range levels clamp to
|
|
135
|
+
// the adjustment's own ends, so a negative level is silence rather than the low name.
|
|
136
|
+
expect(volumeIconFor(-1)).toBe('audio-volume-muted-symbolic');
|
|
137
|
+
expect(volumeIconFor(0)).toBe('audio-volume-muted-symbolic');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
await describe('<gtk-media-controls> the template tree', async () => {
|
|
142
|
+
await it('builds the six nodes ui/gtkmediacontrols.ui declares, in order', () => {
|
|
143
|
+
const { el, host } = mount(true);
|
|
144
|
+
const box = el.querySelector('.adw-media-controls-box') as HTMLElement;
|
|
145
|
+
expect(box.children[0].classList.contains('adw-media-controls-button')).toBe(true);
|
|
146
|
+
const timeBox = box.children[1] as HTMLElement;
|
|
147
|
+
expect(timeBox.querySelector('.adw-media-controls-time-label')).not.toBe(null);
|
|
148
|
+
expect(timeBox.querySelector('.adw-media-controls-seek-scale')).not.toBe(null);
|
|
149
|
+
expect(timeBox.querySelector('.adw-media-controls-duration-label')).not.toBe(null);
|
|
150
|
+
expect(box.children[2].classList.contains('adw-media-controls-volume-button')).toBe(true);
|
|
151
|
+
host.remove();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
await it("carries the template's OWN accessibility labels", () => {
|
|
155
|
+
// ui/gtkmediacontrols.ui — `label` "Position" on the scale, `label` "Volume" on
|
|
156
|
+
// the volume button. Both are in the template's own <accessibility> blocks.
|
|
157
|
+
const { el, host } = mount(true);
|
|
158
|
+
const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
|
|
159
|
+
const volume = el.querySelector('.adw-media-controls-volume-button') as HTMLButtonElement;
|
|
160
|
+
expect(scale.getAttribute('aria-label')).toBe('Position');
|
|
161
|
+
expect(volume.getAttribute('aria-label')).toBe('Volume');
|
|
162
|
+
host.remove();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
await it('puts the volume scale in a POPOVER, because GtkVolumeButton is one', () => {
|
|
166
|
+
const { el, host } = mount(true);
|
|
167
|
+
const popover = el.querySelector('.adw-media-controls-volume-popover') as HTMLElement;
|
|
168
|
+
const scale = popover.querySelector('.adw-media-controls-volume-scale') as HTMLInputElement;
|
|
169
|
+
expect(popover.hidden).toBe(true);
|
|
170
|
+
// volume_adjustment: upper 1, step-increment 0.1, value 1.
|
|
171
|
+
expect(scale.min).toBe('0');
|
|
172
|
+
expect(scale.max).toBe('1');
|
|
173
|
+
expect(scale.step).toBe('0.1');
|
|
174
|
+
expect(scale.value).toBe('1');
|
|
175
|
+
host.remove();
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
await describe('<gtk-media-controls> sensitivity', async () => {
|
|
180
|
+
await it("is INSENSITIVE with no stream, which is the template's `sensitive` 0", () => {
|
|
181
|
+
// ui/gtkmediacontrols.ui — `<property name="sensitive">0</property>` on the box.
|
|
182
|
+
// `gtk_media_controls_new()` therefore produces a bar you cannot press, and
|
|
183
|
+
// `gtk_media_controls_set_sensitive` is what re-enables it.
|
|
184
|
+
const { el, host } = mount(false);
|
|
185
|
+
expect(el.sensitive).toBe(false);
|
|
186
|
+
expect(el.classList.contains('insensitive')).toBe(true);
|
|
187
|
+
expect((el.querySelector('.adw-media-controls-button') as HTMLButtonElement).disabled).toBe(true);
|
|
188
|
+
expect((el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement).disabled).toBe(true);
|
|
189
|
+
host.remove();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
await it('is live once a media element is adopted from the enclosing video', () => {
|
|
193
|
+
const { el, host } = mount(true);
|
|
194
|
+
expect(el.sensitive).toBe(true);
|
|
195
|
+
expect(el.classList.contains('insensitive')).toBe(false);
|
|
196
|
+
expect((el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement).disabled).toBe(false);
|
|
197
|
+
host.remove();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
await describe('<gtk-media-controls> the seek scale', async () => {
|
|
202
|
+
await it("starts on the template's placeholder upper of 10, in SECONDS", () => {
|
|
203
|
+
// time_adjustment in ui/gtkmediacontrols.ui: upper 10, step-increment 1,
|
|
204
|
+
// page-increment 10. Every real duration arrives by resetting the range, so the
|
|
205
|
+
// numbers on the scale are seconds — and 10 is the pre-stream placeholder, not a
|
|
206
|
+
// range a user can seek within.
|
|
207
|
+
const { el, host } = mount(true);
|
|
208
|
+
const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
|
|
209
|
+
expect(scale.min).toBe('0');
|
|
210
|
+
expect(scale.max).toBe('10');
|
|
211
|
+
expect(scale.step).toBe('1');
|
|
212
|
+
host.remove();
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
await it('the DURATION label is hidden while there is no duration', () => {
|
|
216
|
+
// gtkmediacontrols.c:391 — `gtk_widget_set_visible (controls->duration_label,
|
|
217
|
+
// duration > 0)`. With no duration the POSITION label takes the elapsed time
|
|
218
|
+
// alone (:358-359), because there is no total to compare it against.
|
|
219
|
+
const { el, host } = mount(true);
|
|
220
|
+
const duration = el.querySelector('.adw-media-controls-duration-label') as HTMLElement;
|
|
221
|
+
expect(duration.hidden).toBe(true);
|
|
222
|
+
expect(el.querySelector('.adw-media-controls-time-label')!.textContent).toBe('0:00');
|
|
223
|
+
host.remove();
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
await it('the DURATION label shows what REMAINS, negatively, once a duration exists', () => {
|
|
227
|
+
// gtkmediacontrols.c:389 — `totem_time_to_string (duration > timestamp ? … : 0,
|
|
228
|
+
// TRUE, FALSE)`. So it is the REMAINING label, and the position label is the
|
|
229
|
+
// elapsed one — the names are a misnomer worth stating.
|
|
230
|
+
const { el, host, media } = mount(true);
|
|
231
|
+
Object.defineProperty(media!, 'duration', { value: 362, configurable: true });
|
|
232
|
+
media!.dispatchEvent(new Event('durationchange'));
|
|
233
|
+
expect(el.querySelector('.adw-media-controls-duration-label')!.textContent).toBe('-6:03');
|
|
234
|
+
expect(el.querySelector('.adw-media-controls-time-label')!.textContent).toBe('0:00');
|
|
235
|
+
host.remove();
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
await it("a known duration RESETS the scale's range to the media's own", () => {
|
|
239
|
+
const { el, host, media } = mount(true);
|
|
240
|
+
Object.defineProperty(media!, 'duration', { value: 754, configurable: true });
|
|
241
|
+
media!.dispatchEvent(new Event('durationchange'));
|
|
242
|
+
const scale = el.querySelector('.adw-media-controls-seek-scale') as HTMLInputElement;
|
|
243
|
+
expect(scale.max).toBe('754');
|
|
244
|
+
host.remove();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
await it('both labels use TABULAR figures, so the scale does not shift sideways', () => {
|
|
248
|
+
// ui/gtkmediacontrols.ui — `font-features "tnum=1"` on BOTH labels. Load-bearing,
|
|
249
|
+
// not cosmetic: a position counting 9→10 must not change its own width.
|
|
250
|
+
const { el, host } = mount(true);
|
|
251
|
+
const time = el.querySelector('.adw-media-controls-time-label') as HTMLElement;
|
|
252
|
+
const duration = el.querySelector('.adw-media-controls-duration-label') as HTMLElement;
|
|
253
|
+
expect(getComputedStyle(time).fontVariantNumeric).toBe('tabular-nums');
|
|
254
|
+
expect(getComputedStyle(duration).fontVariantNumeric).toBe('tabular-nums');
|
|
255
|
+
host.remove();
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
await describe('<gtk-media-controls> the play button', async () => {
|
|
260
|
+
await it('plays a paused media and pauses a playing one', () => {
|
|
261
|
+
// ui/gtkmediacontrols.ui — `play_button_clicked` is the button's only action.
|
|
262
|
+
const { el, host, media } = mount(true);
|
|
263
|
+
let played = false;
|
|
264
|
+
media!.play = () => {
|
|
265
|
+
played = true;
|
|
266
|
+
return Promise.resolve();
|
|
267
|
+
};
|
|
268
|
+
Object.defineProperty(media!, 'paused', { value: true, configurable: true });
|
|
269
|
+
const button = el.querySelector('.adw-media-controls-button') as HTMLButtonElement;
|
|
270
|
+
button.click();
|
|
271
|
+
expect(played).toBe(true);
|
|
272
|
+
|
|
273
|
+
let paused = false;
|
|
274
|
+
Object.defineProperty(media!, 'paused', { value: false, configurable: true });
|
|
275
|
+
media!.pause = () => {
|
|
276
|
+
paused = true;
|
|
277
|
+
};
|
|
278
|
+
button.click();
|
|
279
|
+
expect(paused).toBe(true);
|
|
280
|
+
host.remove();
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
await it('shows the pause glyph while playing and the play glyph when stopped', () => {
|
|
284
|
+
// ui/gtkvideo.ui's `play_button` carries `media-playback-start-symbolic`, and
|
|
285
|
+
// `gtk_video_update_playing`'s counterpart swaps it while the media plays.
|
|
286
|
+
const { el, host, media } = mount(true);
|
|
287
|
+
const icon = () =>
|
|
288
|
+
el.querySelector('.adw-media-controls-button gtk-image')?.getAttribute('icon-name') ?? null;
|
|
289
|
+
expect(icon()).toBe('media-playback-start-symbolic');
|
|
290
|
+
media!.dispatchEvent(new Event('play'));
|
|
291
|
+
expect(icon()).toBe('media-playback-pause-symbolic');
|
|
292
|
+
host.remove();
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
};
|