@gjsify/adwaita-web 0.54.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/adwaita-web.css +8146 -3011
- 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-status-page.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/attributes.d.ts +19 -0
- package/lib/types/breakpoints.d.ts +14 -3
- package/lib/types/construct-vectors.spec.d.ts +1 -0
- package/lib/types/elements/adw-action-row.d.ts +4 -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-combo-row.d.ts +4 -0
- package/lib/types/elements/adw-dialog.d.ts +10 -0
- package/lib/types/elements/adw-entry-row.d.ts +6 -0
- package/lib/types/elements/adw-expander-row.d.ts +2 -0
- package/lib/types/elements/adw-header-bar.d.ts +6 -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-overlay-split-view.d.ts +13 -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 +8 -2
- package/lib/types/elements/adw-spin-row.d.ts +6 -0
- package/lib/types/elements/adw-switch-row.d.ts +7 -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-toggle-group.d.ts +17 -0
- 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 +129 -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 +103 -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/row-line-clamp.d.ts +20 -0
- package/lib/types/row-tooltip.d.ts +8 -0
- package/lib/types/row-tooltip.spec.d.ts +1 -0
- package/lib/types/scroll-shading.d.ts +15 -1
- package/lib/types/shared-tree-builder.d.ts +75 -17
- package/lib/types/shared-tree-mount.spec.d.ts +1 -0
- 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/lib/types/widget-size.spec.d.ts +1 -0
- package/package.json +12 -8
- package/scss/_action_row.scss +41 -17
- 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/_button_row.scss +5 -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/_expander_row.scss +36 -3
- 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 +134 -1
- 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 +60 -0
- package/scss/_print_dialogs.scss +328 -0
- package/scss/_reset.scss +21 -19
- package/scss/_revealer.scss +37 -0
- package/scss/_row.scss +36 -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/_status_page.scss +1 -1
- 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/_toggle_group.scss +28 -0
- package/scss/_tree_expander.scss +62 -0
- package/scss/_variables.scss +1 -1
- package/scss/_video.scss +146 -0
- package/scss/_view_switcher_sidebar.scss +112 -0
- package/scss/_viewport.scss +50 -0
- package/scss/_widget.scss +14 -3
- package/scss/_window.scss +131 -2
- package/scss/_window_handle.scss +20 -0
- package/scss/adwaita-skin.scss +109 -0
- package/src/adw-action-rows.spec.ts +331 -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-header-bar.spec.ts +18 -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-status-page.spec.ts +124 -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/attributes.ts +52 -0
- package/src/breakpoints.ts +25 -8
- package/src/capabilities.d.mts +3 -0
- package/src/capabilities.mjs +21 -0
- package/src/connect-lifecycle.spec.ts +12 -0
- package/src/construct-vectors.spec.ts +175 -0
- package/src/elements/adw-action-row.ts +31 -2
- package/src/elements/adw-alert-dialog.ts +4 -1
- 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-button-row.ts +7 -1
- package/src/elements/adw-clamp-scrollable.ts +207 -0
- package/src/elements/adw-combo-row.ts +26 -1
- package/src/elements/adw-dialog.ts +19 -0
- package/src/elements/adw-entry-row.ts +22 -12
- package/src/elements/adw-expander-row.ts +34 -1
- package/src/elements/adw-header-bar.ts +18 -4
- package/src/elements/adw-layout-slot.ts +95 -0
- package/src/elements/adw-multi-layout-view.ts +326 -0
- package/src/elements/adw-overlay-split-view.ts +29 -6
- package/src/elements/adw-preferences-row.ts +153 -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 +74 -7
- package/src/elements/adw-spin-row.ts +37 -2
- package/src/elements/adw-status-page.ts +10 -2
- package/src/elements/adw-switch-row.ts +53 -2
- 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 +138 -14
- 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 +190 -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 +653 -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 +372 -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 +202 -0
- package/src/index.ts +9 -1
- package/src/keyboard-operable.spec.ts +77 -9
- 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/row-line-clamp.ts +74 -0
- package/src/row-tooltip.spec.ts +313 -0
- package/src/row-tooltip.ts +52 -0
- package/src/scroll-shading.ts +18 -1
- package/src/shared-tree-builder.ts +336 -41
- package/src/shared-tree-mount.spec.ts +130 -0
- package/src/shared-trees.spec.ts +15 -0
- package/src/signals.ts +15 -0
- package/src/style-classes.spec.ts +9 -8
- package/src/styles.generated.ts +1 -1
- package/src/tab-chip.ts +200 -0
- package/src/template-classes.ts +45 -0
- package/src/test.browser.mts +160 -0
- package/src/widget-size.spec.ts +117 -0
|
@@ -22,9 +22,14 @@
|
|
|
22
22
|
// <adw-sidebar-section title="…"> — a titled group of items. An untitled
|
|
23
23
|
// section renders a separator before its rows (first section: nothing),
|
|
24
24
|
// mirroring AdwSidebar's stack header (title vs separator child).
|
|
25
|
-
// <adw-sidebar-item title="…" subtitle="…" icon-name="…" disabled hidden
|
|
25
|
+
// <adw-sidebar-item title="…" subtitle="…" icon-name="…" disabled hidden
|
|
26
|
+
// needs-attention badge-number="3"> —
|
|
26
27
|
// one row. `disabled` is AdwSidebarItem:enabled=false (bound to the row's
|
|
27
|
-
// `sensitive`), `hidden` is AdwSidebarItem:visible=false
|
|
28
|
+
// `sensitive`), `hidden` is AdwSidebarItem:visible=false, and the last two are the
|
|
29
|
+
// INDICATOR `AdwViewSwitcherSidebar` puts in `AdwSidebarItem:suffix`
|
|
30
|
+
// (`update_badge`, adw-view-switcher-sidebar.c:133-181): a bare dot for
|
|
31
|
+
// `needs-attention` with no count, a `999+`-capped label once there is one, and
|
|
32
|
+
// `.needs-attention` on the bin when attention is asked for either way.
|
|
28
33
|
// Attributes (on <adw-sidebar>):
|
|
29
34
|
// mode (sidebar | page, default sidebar) — mirrors Adw.Sidebar:mode.
|
|
30
35
|
// selected (zero-based flat item index; anything that is not a valid position
|
|
@@ -45,6 +50,7 @@
|
|
|
45
50
|
// Modifications: Implemented as a Web Component for @gjsify/adwaita-web; the
|
|
46
51
|
// icon nodes are <gtk-image>.
|
|
47
52
|
|
|
53
|
+
import { viewSwitcherBadgeLabel } from '@gjsify/adwaita-core';
|
|
48
54
|
import {
|
|
49
55
|
ADW_SIDEBAR_NO_SELECTION,
|
|
50
56
|
SidebarState,
|
|
@@ -58,6 +64,7 @@ import {
|
|
|
58
64
|
|
|
59
65
|
import { createGtkImage } from './gtk-image.js';
|
|
60
66
|
import { attachRovingFocus } from './roving-focus.js';
|
|
67
|
+
import { booleanAttribute } from '../attributes.js';
|
|
61
68
|
|
|
62
69
|
// The sidebar consumes its declared children and drops them from the tree, so a later
|
|
63
70
|
// `setAttribute` on one cannot find its sidebar with `closest()`. These keep the link —
|
|
@@ -69,28 +76,51 @@ const sectionBindings = new WeakMap<AdwSidebarSection, { sidebar: AdwSidebar; sp
|
|
|
69
76
|
/** A single sidebar item. Child of <adw-sidebar-section>; consumed at connect time. */
|
|
70
77
|
export class AdwSidebarItem extends HTMLElement {
|
|
71
78
|
static get observedAttributes() {
|
|
72
|
-
return [
|
|
79
|
+
return [
|
|
80
|
+
'title',
|
|
81
|
+
'subtitle',
|
|
82
|
+
'icon-name',
|
|
83
|
+
'disabled',
|
|
84
|
+
'hidden',
|
|
85
|
+
'enabled',
|
|
86
|
+
'visible',
|
|
87
|
+
'needs-attention',
|
|
88
|
+
'badge-number',
|
|
89
|
+
];
|
|
73
90
|
}
|
|
74
91
|
|
|
75
92
|
/**
|
|
76
|
-
* `AdwSidebarItem:enabled`, under the GIR name — the `disabled` attribute inverted.
|
|
77
|
-
* property is what lets an authored `enabled: false` reach this item through the
|
|
93
|
+
* `AdwSidebarItem:enabled`, under the GIR name — the `disabled` attribute inverted.
|
|
94
|
+
* The property is what lets an authored `enabled: false` reach this item through the
|
|
78
95
|
* shared-tree builder, which writes a `false` through the element's own property.
|
|
96
|
+
* Reads both the presence-based `disabled` and value-based `enabled` attributes.
|
|
79
97
|
*/
|
|
80
98
|
get enabled(): boolean {
|
|
99
|
+
// Value-based `enabled` attribute takes precedence (shared-tree builder writes it).
|
|
100
|
+
const enabledAttr = this.getAttribute('enabled');
|
|
101
|
+
if (enabledAttr !== null) return booleanAttribute(enabledAttr, true);
|
|
102
|
+
// Fall back to presence-based `disabled` attribute.
|
|
81
103
|
return !this.hasAttribute('disabled');
|
|
82
104
|
}
|
|
83
105
|
|
|
84
106
|
set enabled(value: boolean) {
|
|
107
|
+
// Write both for compatibility: value-based `enabled` and presence-based `disabled`.
|
|
108
|
+
this.setAttribute('enabled', value ? 'true' : 'false');
|
|
85
109
|
this.toggleAttribute('disabled', !value);
|
|
86
110
|
}
|
|
87
111
|
|
|
88
112
|
/** `AdwSidebarItem:visible` — the `hidden` attribute inverted, for the same reason. */
|
|
89
113
|
get visible(): boolean {
|
|
114
|
+
// Value-based `visible` attribute takes precedence (shared-tree builder writes it).
|
|
115
|
+
const visibleAttr = this.getAttribute('visible');
|
|
116
|
+
if (visibleAttr !== null) return booleanAttribute(visibleAttr, true);
|
|
117
|
+
// Fall back to presence-based `hidden` attribute.
|
|
90
118
|
return !this.hasAttribute('hidden');
|
|
91
119
|
}
|
|
92
120
|
|
|
93
121
|
set visible(value: boolean) {
|
|
122
|
+
// Write both for compatibility: value-based `visible` and presence-based `hidden`.
|
|
123
|
+
this.setAttribute('visible', value ? 'true' : 'false');
|
|
94
124
|
this.toggleAttribute('hidden', !value);
|
|
95
125
|
}
|
|
96
126
|
|
|
@@ -103,7 +133,11 @@ export class AdwSidebarItem extends HTMLElement {
|
|
|
103
133
|
else if (name === 'subtitle') binding.spec.subtitle = value;
|
|
104
134
|
else if (name === 'icon-name') binding.spec.iconName = value;
|
|
105
135
|
else if (name === 'disabled') binding.spec.enabled = newValue === null;
|
|
136
|
+
else if (name === 'enabled') binding.spec.enabled = booleanAttribute(newValue, true);
|
|
106
137
|
else if (name === 'hidden') binding.spec.visible = newValue === null;
|
|
138
|
+
else if (name === 'visible') binding.spec.visible = booleanAttribute(newValue, true);
|
|
139
|
+
else if (name === 'needs-attention') binding.spec.needsAttention = newValue === null;
|
|
140
|
+
else if (name === 'badge-number') binding.spec.badgeNumber = Number.parseInt(value, 10) || 0;
|
|
107
141
|
|
|
108
142
|
binding.sidebar.refresh();
|
|
109
143
|
}
|
|
@@ -255,8 +289,12 @@ export class AdwSidebar extends HTMLElement {
|
|
|
255
289
|
title: itemEl.getAttribute('title') ?? '',
|
|
256
290
|
subtitle: itemEl.getAttribute('subtitle') ?? '',
|
|
257
291
|
iconName: itemEl.getAttribute('icon-name') ?? '',
|
|
258
|
-
|
|
259
|
-
visible
|
|
292
|
+
// Use the element's own property getters, which read both value-based
|
|
293
|
+
// (`enabled`/`visible`) and presence-based (`disabled`/`hidden`) attributes.
|
|
294
|
+
enabled: itemEl.enabled,
|
|
295
|
+
visible: itemEl.visible,
|
|
296
|
+
badgeNumber: Number.parseInt(itemEl.getAttribute('badge-number') ?? '0', 10) || 0,
|
|
297
|
+
needsAttention: itemEl.hasAttribute('needs-attention'),
|
|
260
298
|
};
|
|
261
299
|
itemBindings.set(itemEl, { sidebar: this, spec: item });
|
|
262
300
|
items.push(item);
|
|
@@ -391,6 +429,12 @@ export class AdwSidebar extends HTMLElement {
|
|
|
391
429
|
|
|
392
430
|
row.appendChild(textEl);
|
|
393
431
|
|
|
432
|
+
// `update_badge` (adw-view-switcher-sidebar.c:133-181): no attention and no count
|
|
433
|
+
// means NO bin at all, a count means the bin loses `.dot` and gains the label, and
|
|
434
|
+
// a drop back to zero takes the label away and puts `.dot` back. The cap is
|
|
435
|
+
// `> 999`, which is `viewSwitcherBadgeLabel`'s rule, so 999 itself prints.
|
|
436
|
+
row.appendChild(this._createIndicator(item));
|
|
437
|
+
|
|
394
438
|
// Page mode adds a trailing chevron on every row, the way the boxed-list
|
|
395
439
|
// AdwActionRow carries a `go-next-symbolic` arrow.
|
|
396
440
|
row.appendChild(createGtkImage('go-next', 'adw-sidebar-item-arrow'));
|
|
@@ -400,6 +444,29 @@ export class AdwSidebar extends HTMLElement {
|
|
|
400
444
|
return row;
|
|
401
445
|
}
|
|
402
446
|
|
|
447
|
+
/**
|
|
448
|
+
* The item's INDICATOR bin — C's `AdwBin` with `.indicator`, `.dot` and the
|
|
449
|
+
* optional `.needs-attention`, holding an `AdwFadingLabel`'s worth of text.
|
|
450
|
+
*/
|
|
451
|
+
private _createIndicator(item: AdwSidebarItemSpec): HTMLElement {
|
|
452
|
+
const badge = item.badgeNumber ?? 0;
|
|
453
|
+
const attention = item.needsAttention === true;
|
|
454
|
+
const bin = document.createElement('span');
|
|
455
|
+
bin.className = 'indicator';
|
|
456
|
+
// Hidden, not absent: `set_suffix (item, NULL)` in C REMOVES the bin, and the
|
|
457
|
+
// difference is only observable through the suffix property.
|
|
458
|
+
bin.hidden = !attention && badge === 0;
|
|
459
|
+
bin.classList.toggle('dot', badge === 0);
|
|
460
|
+
bin.classList.toggle('needs-attention', attention);
|
|
461
|
+
if (badge > 0) {
|
|
462
|
+
const label = document.createElement('span');
|
|
463
|
+
label.className = 'numeric';
|
|
464
|
+
label.textContent = viewSwitcherBadgeLabel(badge);
|
|
465
|
+
bin.appendChild(label);
|
|
466
|
+
}
|
|
467
|
+
return bin;
|
|
468
|
+
}
|
|
469
|
+
|
|
403
470
|
private _applyMode(): void {
|
|
404
471
|
const page = this._state.mode === 'page';
|
|
405
472
|
this.classList.toggle('page', page);
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
// `adjustment:` sets the property to a whole new object: an unwritten field takes the
|
|
25
25
|
// adjustment's own default, not what the row held (`ADJUSTMENT_AUTHORED_VECTORS`).
|
|
26
26
|
//
|
|
27
|
+
// ATTRIBUTES: `adjustment` (the range, JSON), `value`, `title`, `subtitle`, and
|
|
28
|
+
// `title-lines` / `subtitle-lines` — clamp either label to N lines, `0` = unlimited,
|
|
29
|
+
// the AdwActionRow pspec's sentinel (`@girs/adw-1`, min 0, default 0).
|
|
30
|
+
// `tooltip-text` (`Gtk.Widget:tooltip-text`) — the row's tooltip (`src/row-tooltip.ts`).
|
|
31
|
+
|
|
27
32
|
// Adapted from Adwaita Web UI Framework (https://github.com/mclellac/adwaita-web).
|
|
28
33
|
// Copyright (c) 2025 csm. MIT License.
|
|
29
34
|
// Modifications: Reimplemented as Web Component for @gjsify/adwaita-web;
|
|
@@ -34,7 +39,9 @@ import { SpinState, deriveRowLabels, normalizeAdjustment, parseAdjustment } from
|
|
|
34
39
|
import type { AdwAdjustment, AdwAdjustmentInput } from '@gjsify/adwaita-core';
|
|
35
40
|
import { attributeOf } from '@gjsify/adwaita-core/tags';
|
|
36
41
|
|
|
42
|
+
import { applyRowTooltip } from '../row-tooltip.js';
|
|
37
43
|
import { bindSlottedChildren } from '../slotted-children.js';
|
|
44
|
+
import { applyRowLineClamp, parseRowLinesAttribute } from '../row-line-clamp.js';
|
|
38
45
|
|
|
39
46
|
/** `Gtk.Adjustment`'s six properties, as `AdwAdjustmentInput` names them. */
|
|
40
47
|
const ADJUSTMENT_FIELDS = ['value', 'lower', 'upper', 'stepIncrement', 'pageIncrement', 'pageSize'] as const;
|
|
@@ -58,6 +65,10 @@ function authoredAdjustment(node: Node): AdwAdjustmentInput {
|
|
|
58
65
|
|
|
59
66
|
export class AdwSpinRow extends HTMLElement {
|
|
60
67
|
private _input!: HTMLInputElement;
|
|
68
|
+
/** The label column — kept for `tooltip-text`, which the browser reads off a PART. */
|
|
69
|
+
private _textEl!: HTMLDivElement;
|
|
70
|
+
/** The −/input/+ box — the other half of the row's surface. */
|
|
71
|
+
private _controlEl!: HTMLDivElement;
|
|
61
72
|
private _titleEl!: HTMLSpanElement;
|
|
62
73
|
private _subtitleEl!: HTMLSpanElement;
|
|
63
74
|
/** The headless adjustment: the range, the clamp and the two signals (ADR 0004, ADR 0047). */
|
|
@@ -65,7 +76,7 @@ export class AdwSpinRow extends HTMLElement {
|
|
|
65
76
|
private _initialized = false;
|
|
66
77
|
|
|
67
78
|
static get observedAttributes() {
|
|
68
|
-
return ['title', 'subtitle', 'value', 'adjustment'];
|
|
79
|
+
return ['title', 'subtitle', 'value', 'adjustment', 'tooltip-text', 'title-lines', 'subtitle-lines'];
|
|
69
80
|
}
|
|
70
81
|
|
|
71
82
|
get value(): number {
|
|
@@ -107,6 +118,7 @@ export class AdwSpinRow extends HTMLElement {
|
|
|
107
118
|
|
|
108
119
|
const text = document.createElement('div');
|
|
109
120
|
text.className = 'adw-row-text';
|
|
121
|
+
this._textEl = text;
|
|
110
122
|
this._titleEl = document.createElement('span');
|
|
111
123
|
this._titleEl.className = 'adw-row-title';
|
|
112
124
|
this._subtitleEl = document.createElement('span');
|
|
@@ -115,6 +127,7 @@ export class AdwSpinRow extends HTMLElement {
|
|
|
115
127
|
|
|
116
128
|
const control = document.createElement('div');
|
|
117
129
|
control.className = 'adw-spin-control';
|
|
130
|
+
this._controlEl = control;
|
|
118
131
|
|
|
119
132
|
const decBtn = document.createElement('button');
|
|
120
133
|
decBtn.className = 'adw-spin-dec';
|
|
@@ -164,7 +177,16 @@ export class AdwSpinRow extends HTMLElement {
|
|
|
164
177
|
|
|
165
178
|
attributeChangedCallback(name: string, _old: string | null, val: string | null) {
|
|
166
179
|
if (!this._initialized) return;
|
|
167
|
-
if (
|
|
180
|
+
if (
|
|
181
|
+
name === 'title' ||
|
|
182
|
+
name === 'subtitle' ||
|
|
183
|
+
name === 'tooltip-text' ||
|
|
184
|
+
// The two `*-lines` attributes are LABEL geometry, not the adjustment: without
|
|
185
|
+
// this branch they fell through to the `setValue` below, so `title-lines="1"`
|
|
186
|
+
// set the numeric value to 1 and clamped nothing.
|
|
187
|
+
name === 'title-lines' ||
|
|
188
|
+
name === 'subtitle-lines'
|
|
189
|
+
) {
|
|
168
190
|
this._renderText();
|
|
169
191
|
return;
|
|
170
192
|
}
|
|
@@ -186,6 +208,19 @@ export class AdwSpinRow extends HTMLElement {
|
|
|
186
208
|
this._titleEl.hidden = !labels.titleVisible;
|
|
187
209
|
this._subtitleEl.textContent = labels.subtitle;
|
|
188
210
|
this._subtitleEl.hidden = !labels.subtitleVisible;
|
|
211
|
+
applyRowTooltip(this, [this._textEl, this._controlEl]);
|
|
212
|
+
this._applyLineClamping();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Apply CSS line-clamping based on title-lines/subtitle-lines attributes. */
|
|
216
|
+
private _applyLineClamping(): void {
|
|
217
|
+
applyRowLineClamp({
|
|
218
|
+
titleEl: this._titleEl,
|
|
219
|
+
subtitleEl: this._subtitleEl,
|
|
220
|
+
textContainerEl: this._titleEl.parentElement!,
|
|
221
|
+
getTitleLines: () => parseRowLinesAttribute(this.getAttribute('title-lines')),
|
|
222
|
+
getSubtitleLines: () => parseRowLinesAttribute(this.getAttribute('subtitle-lines')),
|
|
223
|
+
});
|
|
189
224
|
}
|
|
190
225
|
|
|
191
226
|
/** A stepper press — the interactive path, so it emits `notify::value`. */
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// <adw-status-page> — A centered empty/placeholder state: a large symbolic
|
|
2
2
|
// icon, a title, a description and an optional action (slotted child).
|
|
3
3
|
// Attributes: icon (symbolic name, with or without -symbolic) or icon-name, the GObject
|
|
4
|
-
// spelling a projected `.blp` writes; title, description.
|
|
4
|
+
// spelling a projected `.blp` writes; title, description, and the boolean compact.
|
|
5
5
|
// Reference: refs/adwaita-web/adwaita-web/scss/_status_page.scss
|
|
6
6
|
// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (AdwStatusPage)
|
|
7
|
+
// Reference: refs/libadwaita/doc/style-classes.md (Compact Status Page)
|
|
7
8
|
// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.
|
|
8
9
|
// Modifications: Implemented as a Web Component for @gjsify/adwaita-web; the
|
|
9
10
|
// icon node is <gtk-image>.
|
|
@@ -22,7 +23,7 @@ export class AdwStatusPage extends HTMLElement {
|
|
|
22
23
|
private _initialized = false;
|
|
23
24
|
|
|
24
25
|
static get observedAttributes() {
|
|
25
|
-
return ['icon', 'icon-name', 'title', 'description'];
|
|
26
|
+
return ['icon', 'icon-name', 'title', 'description', 'compact'];
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
connectedCallback() {
|
|
@@ -64,6 +65,13 @@ export class AdwStatusPage extends HTMLElement {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
private _render() {
|
|
68
|
+
// `.compact` (style-classes.md "Compact Status Page") is keyed off the HOST by
|
|
69
|
+
// `_status_page.scss`, so this door writes the class itself. ADDED, never toggled:
|
|
70
|
+
// `shared-tree-builder.ts` puts a `.blp`'s `styles ["compact"]` on this same class,
|
|
71
|
+
// and a `toggle` would strip it on the first attribute change — `title`, on any page
|
|
72
|
+
// that sets one. Additive, the way `gtk_button_add_css_class` is.
|
|
73
|
+
if (this.hasAttribute('compact')) this.classList.add('compact');
|
|
74
|
+
|
|
67
75
|
const icon = this.getAttribute('icon') ?? this.getAttribute('icon-name');
|
|
68
76
|
// The element swaps the mask class and keeps the size class.
|
|
69
77
|
this._iconEl.iconName = icon;
|
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
// - clicking the ROW toggles: `adw_switch_row_init` points the activatable-widget at the
|
|
11
11
|
// slider, so the title is part of the control, not just the handle.
|
|
12
12
|
//
|
|
13
|
+
// Slots: `slot="prefix"` holds a leading icon/widget, exactly as on
|
|
14
|
+
// `<adw-action-row>` — libadwaita's AdwSwitchRow IS an AdwActionRow
|
|
15
|
+
// (adw-switch-row.c:50), so `add_prefix` is inherited, not invented here.
|
|
16
|
+
//
|
|
17
|
+
// ATTRIBUTES: `title`, `subtitle`, `active`, `tooltip-text` (`Gtk.Widget:tooltip-text`),
|
|
18
|
+
// and `title-lines` / `subtitle-lines` —
|
|
19
|
+
// clamp either label to N lines, `0` = unlimited, the AdwActionRow pspec's sentinel
|
|
20
|
+
// (`@girs/adw-1`, min 0, default 0).
|
|
13
21
|
// Adapted from Adwaita Web UI Framework (https://github.com/mclellac/adwaita-web).
|
|
14
22
|
// Copyright (c) 2025 csm. MIT License.
|
|
15
23
|
// Modifications: Reimplemented as Web Component for @gjsify/adwaita-web;
|
|
@@ -18,6 +26,11 @@
|
|
|
18
26
|
|
|
19
27
|
import { SwitchRowState, deriveRowLabels } from '@gjsify/adwaita-core';
|
|
20
28
|
|
|
29
|
+
import { bindEmptySections } from '../empty-sections.js';
|
|
30
|
+
import { applyRowTooltip } from '../row-tooltip.js';
|
|
31
|
+
import { bindSlottedChildren } from '../slotted-children.js';
|
|
32
|
+
import { applyRowLineClamp, parseRowLinesAttribute } from '../row-line-clamp.js';
|
|
33
|
+
|
|
21
34
|
// SIDE-EFFECT import, deliberately separate from the type import below: it guarantees
|
|
22
35
|
// `gtk-switch` is defined before this module's `customElements.define` can upgrade a
|
|
23
36
|
// server-rendered `<adw-switch-row>` and build one. A combined `import { GtkSwitch }`
|
|
@@ -30,6 +43,9 @@ import type { GtkSwitch } from './gtk-switch.js';
|
|
|
30
43
|
|
|
31
44
|
export class AdwSwitchRow extends HTMLElement {
|
|
32
45
|
private _switchEl!: GtkSwitch;
|
|
46
|
+
private _prefixEl!: HTMLDivElement;
|
|
47
|
+
/** The label column — kept for `tooltip-text`, which the browser reads off a PART. */
|
|
48
|
+
private _textEl!: HTMLDivElement;
|
|
33
49
|
private _titleEl!: HTMLSpanElement;
|
|
34
50
|
private _subtitleEl!: HTMLSpanElement;
|
|
35
51
|
/** The headless active flag + its notify rule (ADR 0004). */
|
|
@@ -37,7 +53,12 @@ export class AdwSwitchRow extends HTMLElement {
|
|
|
37
53
|
private _initialized = false;
|
|
38
54
|
|
|
39
55
|
static get observedAttributes() {
|
|
40
|
-
return ['title', 'subtitle', 'active'];
|
|
56
|
+
return ['title', 'subtitle', 'active', 'tooltip-text', 'title-lines', 'subtitle-lines'];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** The start (prefix) section — append icons/widgets here imperatively. */
|
|
60
|
+
get prefixSection(): HTMLDivElement {
|
|
61
|
+
return this._prefixEl;
|
|
41
62
|
}
|
|
42
63
|
|
|
43
64
|
get active(): boolean {
|
|
@@ -56,17 +77,32 @@ export class AdwSwitchRow extends HTMLElement {
|
|
|
56
77
|
|
|
57
78
|
const text = document.createElement('div');
|
|
58
79
|
text.className = 'adw-row-text';
|
|
80
|
+
this._textEl = text;
|
|
59
81
|
this._titleEl = document.createElement('span');
|
|
60
82
|
this._titleEl.className = 'adw-row-title';
|
|
61
83
|
this._subtitleEl = document.createElement('span');
|
|
62
84
|
this._subtitleEl.className = 'adw-row-subtitle';
|
|
63
85
|
text.append(this._titleEl, this._subtitleEl);
|
|
64
86
|
|
|
87
|
+
this._prefixEl = document.createElement('div');
|
|
88
|
+
this._prefixEl.className = 'adw-switch-row-prefix';
|
|
89
|
+
|
|
65
90
|
this._switchEl = document.createElement('gtk-switch') as GtkSwitch;
|
|
66
91
|
// adw-switch-row.c:159 — the slider is not a focus target; the ROW is.
|
|
67
92
|
this._switchEl.unfocusable = true;
|
|
68
93
|
|
|
69
|
-
|
|
94
|
+
// The prefix stays LIVE, as on every other slotted row: an icon appended with
|
|
95
|
+
// `slot="prefix"` after connect has to land where the declared one does.
|
|
96
|
+
// `src/slotted-children.ts` carries the incident.
|
|
97
|
+
bindSlottedChildren(this, [{ name: 'prefix', into: this._prefixEl }]).install(
|
|
98
|
+
this._prefixEl,
|
|
99
|
+
text,
|
|
100
|
+
this._switchEl,
|
|
101
|
+
);
|
|
102
|
+
// Same reason as the action row's: an icon appended into `prefixSection` is a
|
|
103
|
+
// childList change no attribute callback hears, so the section would stay hidden
|
|
104
|
+
// and the icon measure 0x0. AFTER the routing — it derives once synchronously.
|
|
105
|
+
bindEmptySections(this._prefixEl);
|
|
70
106
|
|
|
71
107
|
this._state.setActive(this.hasAttribute('active'));
|
|
72
108
|
this._switchEl.active = this._state.active;
|
|
@@ -133,6 +169,21 @@ export class AdwSwitchRow extends HTMLElement {
|
|
|
133
169
|
this._titleEl.hidden = !titleVisible;
|
|
134
170
|
this._subtitleEl.textContent = subtitle;
|
|
135
171
|
this._subtitleEl.hidden = !subtitleVisible;
|
|
172
|
+
// The switch is NOT a part here: `unfocusable` and consumer-facing, and a
|
|
173
|
+
// tooltip the consumer put on it has to keep winning over the row's.
|
|
174
|
+
applyRowTooltip(this, [this._prefixEl, this._textEl]);
|
|
175
|
+
this._applyLineClamping();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Apply CSS line-clamping based on title-lines/subtitle-lines attributes. */
|
|
179
|
+
private _applyLineClamping(): void {
|
|
180
|
+
applyRowLineClamp({
|
|
181
|
+
titleEl: this._titleEl,
|
|
182
|
+
subtitleEl: this._subtitleEl,
|
|
183
|
+
textContainerEl: this._titleEl.parentElement!,
|
|
184
|
+
getTitleLines: () => parseRowLinesAttribute(this.getAttribute('title-lines')),
|
|
185
|
+
getSubtitleLines: () => parseRowLinesAttribute(this.getAttribute('subtitle-lines')),
|
|
186
|
+
});
|
|
136
187
|
}
|
|
137
188
|
}
|
|
138
189
|
|