@gjsify/adwaita-web 0.54.0 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adwaita-web.css +8066 -3033
- package/dist/adwaita-web.css.map +1 -1
- package/lib/types/adw-application-window.spec.d.ts +1 -0
- package/lib/types/adw-bin.spec.d.ts +1 -0
- package/lib/types/adw-breakpoint-bin.spec.d.ts +1 -0
- package/lib/types/adw-clamp-scrollable.spec.d.ts +1 -0
- package/lib/types/adw-multi-layout-view.spec.d.ts +1 -0
- package/lib/types/adw-preferences-row.spec.d.ts +1 -0
- package/lib/types/adw-shortcuts.spec.d.ts +1 -0
- package/lib/types/adw-tab-bar.spec.d.ts +1 -0
- package/lib/types/adw-tab-button.spec.d.ts +1 -0
- package/lib/types/adw-tab-overview.spec.d.ts +1 -0
- package/lib/types/adw-view-switcher-sidebar.spec.d.ts +1 -0
- package/lib/types/adw-window.spec.d.ts +1 -0
- package/lib/types/breakpoints.d.ts +14 -3
- package/lib/types/construct-vectors.spec.d.ts +1 -0
- package/lib/types/elements/adw-application-window.d.ts +27 -0
- package/lib/types/elements/adw-bin.d.ts +17 -0
- package/lib/types/elements/adw-breakpoint-bin.d.ts +67 -0
- package/lib/types/elements/adw-clamp-scrollable.d.ts +38 -0
- package/lib/types/elements/adw-dialog.d.ts +10 -0
- package/lib/types/elements/adw-layout-slot.d.ts +19 -0
- package/lib/types/elements/adw-multi-layout-view.d.ts +101 -0
- package/lib/types/elements/adw-preferences-row.d.ts +31 -0
- package/lib/types/elements/adw-shortcuts-dialog.d.ts +13 -0
- package/lib/types/elements/adw-shortcuts-item.d.ts +36 -0
- package/lib/types/elements/adw-shortcuts-section.d.ts +14 -0
- package/lib/types/elements/adw-sidebar.d.ts +5 -0
- package/lib/types/elements/adw-switch-row.d.ts +3 -0
- package/lib/types/elements/adw-tab-bar.d.ts +108 -0
- package/lib/types/elements/adw-tab-button.d.ts +32 -0
- package/lib/types/elements/adw-tab-overview.d.ts +199 -0
- package/lib/types/elements/adw-tab-view.d.ts +19 -23
- package/lib/types/elements/adw-view-switcher-sidebar.d.ts +84 -0
- package/lib/types/elements/adw-window.d.ts +40 -0
- package/lib/types/elements/gtk-about-dialog.d.ts +146 -0
- package/lib/types/elements/gtk-application-window.d.ts +34 -0
- package/lib/types/elements/gtk-aspect-frame.d.ts +27 -0
- package/lib/types/elements/gtk-button.d.ts +9 -0
- package/lib/types/elements/gtk-calendar.d.ts +159 -0
- package/lib/types/elements/gtk-center-box.d.ts +39 -0
- package/lib/types/elements/gtk-color-dialog-button.d.ts +69 -0
- package/lib/types/elements/gtk-column-view.d.ts +50 -0
- package/lib/types/elements/gtk-drag-icon.d.ts +78 -0
- package/lib/types/elements/gtk-drawing-area.d.ts +95 -0
- package/lib/types/elements/gtk-editable-label.d.ts +33 -0
- package/lib/types/elements/gtk-emoji-chooser.d.ts +84 -0
- package/lib/types/elements/gtk-entry.d.ts +20 -1
- package/lib/types/elements/gtk-expander.d.ts +49 -0
- package/lib/types/elements/gtk-fixed.d.ts +13 -0
- package/lib/types/elements/gtk-flow-box-child.d.ts +14 -0
- package/lib/types/elements/gtk-flow-box.d.ts +87 -0
- package/lib/types/elements/gtk-font-dialog-button.d.ts +83 -0
- package/lib/types/elements/gtk-frame.d.ts +24 -0
- package/lib/types/elements/gtk-gl-area.d.ts +136 -0
- package/lib/types/elements/gtk-graphics-offload.d.ts +24 -0
- package/lib/types/elements/gtk-grid-view.d.ts +39 -0
- package/lib/types/elements/gtk-grid.d.ts +27 -0
- package/lib/types/elements/gtk-header-bar.d.ts +60 -0
- package/lib/types/elements/gtk-inscription.d.ts +64 -0
- package/lib/types/elements/gtk-label.d.ts +3 -0
- package/lib/types/elements/gtk-level-bar.d.ts +59 -0
- package/lib/types/elements/gtk-link-button.d.ts +29 -0
- package/lib/types/elements/gtk-list-box-row.d.ts +54 -0
- package/lib/types/elements/gtk-list-box.d.ts +100 -0
- package/lib/types/elements/gtk-list-view.d.ts +73 -0
- package/lib/types/elements/gtk-media-controls.d.ts +142 -0
- package/lib/types/elements/gtk-notebook.d.ts +148 -0
- package/lib/types/elements/gtk-overlay.d.ts +22 -0
- package/lib/types/elements/gtk-page-setup-unix-dialog.d.ts +87 -0
- package/lib/types/elements/gtk-paned.d.ts +121 -0
- package/lib/types/elements/gtk-password-entry.d.ts +27 -0
- package/lib/types/elements/gtk-picture.d.ts +66 -0
- package/lib/types/elements/gtk-popover-bin.d.ts +82 -0
- package/lib/types/elements/gtk-popover-menu-bar.d.ts +66 -0
- package/lib/types/elements/gtk-popover-menu.d.ts +83 -0
- package/lib/types/elements/gtk-popover.d.ts +28 -3
- package/lib/types/elements/gtk-print-unix-dialog.d.ts +167 -0
- package/lib/types/elements/gtk-revealer.d.ts +55 -0
- package/lib/types/elements/gtk-scale-button.d.ts +59 -0
- package/lib/types/elements/gtk-scale.d.ts +98 -0
- package/lib/types/elements/gtk-scrollbar.d.ts +124 -0
- package/lib/types/elements/gtk-scrolled-window.d.ts +121 -0
- package/lib/types/elements/gtk-search-bar.d.ts +39 -0
- package/lib/types/elements/gtk-search-entry.d.ts +27 -0
- package/lib/types/elements/gtk-separator.d.ts +10 -0
- package/lib/types/elements/gtk-spin-button.d.ts +94 -0
- package/lib/types/elements/gtk-spinner.d.ts +14 -0
- package/lib/types/elements/gtk-stack-sidebar.d.ts +43 -0
- package/lib/types/elements/gtk-stack-switcher.d.ts +58 -0
- package/lib/types/elements/gtk-stack.d.ts +154 -0
- package/lib/types/elements/gtk-switch.d.ts +4 -1
- package/lib/types/elements/gtk-text-view.d.ts +62 -0
- package/lib/types/elements/gtk-text.d.ts +45 -0
- package/lib/types/elements/gtk-toggle-button.d.ts +45 -0
- package/lib/types/elements/gtk-tree-expander.d.ts +38 -0
- package/lib/types/elements/gtk-video.d.ts +97 -0
- package/lib/types/elements/gtk-viewport.d.ts +84 -0
- package/lib/types/elements/gtk-window-controls.d.ts +80 -0
- package/lib/types/elements/gtk-window-handle.d.ts +39 -0
- package/lib/types/elements/gtk-window.d.ts +97 -0
- package/lib/types/elements/justification.d.ts +2 -0
- package/lib/types/elements/popover-menu.d.ts +18 -0
- package/lib/types/elements/roving-focus.d.ts +29 -1
- package/lib/types/emoji-data.d.ts +38 -0
- package/lib/types/font-description.d.ts +96 -0
- package/lib/types/gtk-about-dialog.spec.d.ts +1 -0
- package/lib/types/gtk-action-bar.spec.d.ts +1 -0
- package/lib/types/gtk-application-window.spec.d.ts +1 -0
- package/lib/types/gtk-aspect-frame.spec.d.ts +1 -0
- package/lib/types/gtk-calendar.spec.d.ts +1 -0
- package/lib/types/gtk-center-box.spec.d.ts +1 -0
- package/lib/types/gtk-color-dialog-button.spec.d.ts +1 -0
- package/lib/types/gtk-column-view.spec.d.ts +1 -0
- package/lib/types/gtk-drag-icon.spec.d.ts +1 -0
- package/lib/types/gtk-drawing-area.spec.d.ts +1 -0
- package/lib/types/gtk-editable-label.spec.d.ts +1 -0
- package/lib/types/gtk-emoji-chooser.spec.d.ts +1 -0
- package/lib/types/gtk-expander.spec.d.ts +1 -0
- package/lib/types/gtk-fixed.spec.d.ts +1 -0
- package/lib/types/gtk-flow-box.spec.d.ts +1 -0
- package/lib/types/gtk-font-dialog-button.spec.d.ts +1 -0
- package/lib/types/gtk-frame.spec.d.ts +1 -0
- package/lib/types/gtk-gl-area.spec.d.ts +1 -0
- package/lib/types/gtk-graphics-offload.spec.d.ts +1 -0
- package/lib/types/gtk-grid-view.spec.d.ts +1 -0
- package/lib/types/gtk-grid.spec.d.ts +1 -0
- package/lib/types/gtk-header-bar.spec.d.ts +1 -0
- package/lib/types/gtk-inscription.spec.d.ts +1 -0
- package/lib/types/gtk-level-bar.spec.d.ts +1 -0
- package/lib/types/gtk-link-button.spec.d.ts +1 -0
- package/lib/types/gtk-list-box.spec.d.ts +1 -0
- package/lib/types/gtk-list-view.spec.d.ts +1 -0
- package/lib/types/gtk-media-controls.spec.d.ts +1 -0
- package/lib/types/gtk-notebook.spec.d.ts +1 -0
- package/lib/types/gtk-overlay.spec.d.ts +1 -0
- package/lib/types/gtk-paned.spec.d.ts +1 -0
- package/lib/types/gtk-password-entry.spec.d.ts +1 -0
- package/lib/types/gtk-picture.spec.d.ts +1 -0
- package/lib/types/gtk-popover-bin.spec.d.ts +1 -0
- package/lib/types/gtk-popover-menu-bar.spec.d.ts +1 -0
- package/lib/types/gtk-popover-menu.spec.d.ts +1 -0
- package/lib/types/gtk-popover-role.spec.d.ts +1 -0
- package/lib/types/gtk-popover.spec.d.ts +1 -0
- package/lib/types/gtk-print-dialogs.spec.d.ts +1 -0
- package/lib/types/gtk-revealer.spec.d.ts +1 -0
- package/lib/types/gtk-scale-button.spec.d.ts +1 -0
- package/lib/types/gtk-scale.spec.d.ts +1 -0
- package/lib/types/gtk-scrollbar.spec.d.ts +1 -0
- package/lib/types/gtk-scrolled-window.spec.d.ts +1 -0
- package/lib/types/gtk-search-bar.spec.d.ts +1 -0
- package/lib/types/gtk-search-entry.spec.d.ts +1 -0
- package/lib/types/gtk-separator.spec.d.ts +1 -0
- package/lib/types/gtk-spin-button.spec.d.ts +1 -0
- package/lib/types/gtk-spinner.spec.d.ts +1 -0
- package/lib/types/gtk-stack-sidebar.spec.d.ts +1 -0
- package/lib/types/gtk-stack-switcher.spec.d.ts +1 -0
- package/lib/types/gtk-stack.spec.d.ts +1 -0
- package/lib/types/gtk-text-view.spec.d.ts +1 -0
- package/lib/types/gtk-text.spec.d.ts +1 -0
- package/lib/types/gtk-toggle-button.spec.d.ts +1 -0
- package/lib/types/gtk-tree-expander.spec.d.ts +1 -0
- package/lib/types/gtk-video.spec.d.ts +1 -0
- package/lib/types/gtk-viewport.spec.d.ts +1 -0
- package/lib/types/gtk-window-controls.spec.d.ts +1 -0
- package/lib/types/gtk-window-handle.spec.d.ts +1 -0
- package/lib/types/gtk-window.spec.d.ts +1 -0
- package/lib/types/index.d.ts +4 -1
- package/lib/types/list-view-dom.d.ts +44 -0
- package/lib/types/namespace/adw.d.ts +12 -0
- package/lib/types/namespace/gtk.d.ts +61 -0
- package/lib/types/page-setup.d.ts +100 -0
- package/lib/types/scroll-shading.d.ts +15 -1
- package/lib/types/shared-tree-builder.d.ts +30 -2
- package/lib/types/signals.d.ts +4 -0
- package/lib/types/styles.generated.d.ts +1 -1
- package/lib/types/tab-chip.d.ts +73 -0
- package/lib/types/template-classes.d.ts +11 -0
- package/package.json +12 -8
- package/scss/_action_row.scss +2 -2
- package/scss/_application_window.scss +26 -0
- package/scss/_aspect_frame.scss +25 -0
- package/scss/_bin.scss +26 -0
- package/scss/_button.scss +45 -0
- package/scss/_calendar.scss +176 -0
- package/scss/_center_box.scss +25 -0
- package/scss/_checks.scss +6 -1
- package/scss/_clamp_scrollable.scss +28 -0
- package/scss/_color_button.scss +67 -0
- package/scss/_column_view.scss +126 -0
- package/scss/_drag_icon.scss +55 -0
- package/scss/_drawing.scss +85 -0
- package/scss/_emoji_chooser.scss +213 -0
- package/scss/_entry.scss +13 -5
- package/scss/_entry_row.scss +1 -1
- package/scss/_expander.scss +113 -0
- package/scss/_fixed.scss +29 -0
- package/scss/_flow_box.scss +94 -0
- package/scss/_font_button.scss +63 -0
- package/scss/_frame.scss +41 -0
- package/scss/_grid.scss +19 -0
- package/scss/_grid_view.scss +46 -0
- package/scss/_gtk_about_dialog.scss +186 -0
- package/scss/_headerbar.scss +132 -0
- package/scss/_icons.generated.scss +186 -0
- package/scss/_inscription.scss +125 -0
- package/scss/_level_bar.scss +190 -0
- package/scss/_link.scss +82 -0
- package/scss/_list_box.scss +88 -0
- package/scss/_list_view.scss +96 -0
- package/scss/_media_controls.scss +139 -0
- package/scss/_overlay.scss +68 -0
- package/scss/_paned.scss +130 -0
- package/scss/_password_entry.scss +83 -0
- package/scss/_picture.scss +80 -0
- package/scss/_popover_bin.scss +53 -0
- package/scss/_popover_menu_bar.scss +104 -0
- package/scss/_preferences_row.scss +51 -0
- package/scss/_print_dialogs.scss +328 -0
- package/scss/_reset.scss +21 -19
- package/scss/_revealer.scss +37 -0
- package/scss/_row.scss +20 -5
- package/scss/_scale.scss +298 -0
- package/scss/_scale_button.scss +167 -0
- package/scss/_scrollbar.scss +230 -0
- package/scss/_scrolled_window.scss +131 -0
- package/scss/_search_bar.scss +118 -0
- package/scss/_search_entry.scss +86 -0
- package/scss/_separator.scss +44 -0
- package/scss/_shortcuts_dialog.scss +100 -0
- package/scss/_spin_button.scss +172 -0
- package/scss/_spin_row.scss +56 -8
- package/scss/_spinner.scss +85 -4
- package/scss/_stack.scss +729 -0
- package/scss/_switch.scss +13 -5
- package/scss/_switch_row.scss +10 -0
- package/scss/_tab_bar.scss +317 -0
- package/scss/_tab_button.scss +98 -0
- package/scss/_tab_overview.scss +483 -0
- package/scss/_text.scss +182 -0
- package/scss/_theme.scss +1 -1
- package/scss/_tree_expander.scss +62 -0
- package/scss/_variables.scss +1 -1
- package/scss/_video.scss +146 -0
- package/scss/_view_switcher_sidebar.scss +112 -0
- package/scss/_viewport.scss +50 -0
- package/scss/_window.scss +118 -1
- package/scss/_window_handle.scss +20 -0
- package/scss/adwaita-skin.scss +109 -0
- package/src/adw-action-rows.spec.ts +76 -0
- package/src/adw-application-window.spec.ts +118 -0
- package/src/adw-bin.spec.ts +75 -0
- package/src/adw-breakpoint-bin.spec.ts +324 -0
- package/src/adw-clamp-scrollable.spec.ts +189 -0
- package/src/adw-multi-layout-view.spec.ts +243 -0
- package/src/adw-preferences-row.spec.ts +164 -0
- package/src/adw-row-state.spec.ts +142 -0
- package/src/adw-shortcuts.spec.ts +155 -0
- package/src/adw-tab-bar.spec.ts +287 -0
- package/src/adw-tab-button.spec.ts +101 -0
- package/src/adw-tab-overview.spec.ts +443 -0
- package/src/adw-view-switcher-sidebar.spec.ts +281 -0
- package/src/adw-window.spec.ts +129 -0
- package/src/breakpoints.ts +25 -8
- package/src/capabilities.d.mts +3 -0
- package/src/capabilities.mjs +18 -0
- package/src/connect-lifecycle.spec.ts +12 -0
- package/src/construct-vectors.spec.ts +175 -0
- package/src/elements/adw-application-window.ts +154 -0
- package/src/elements/adw-bin.ts +101 -0
- package/src/elements/adw-breakpoint-bin.ts +287 -0
- package/src/elements/adw-clamp-scrollable.ts +207 -0
- package/src/elements/adw-dialog.ts +19 -0
- package/src/elements/adw-layout-slot.ts +95 -0
- package/src/elements/adw-multi-layout-view.ts +326 -0
- package/src/elements/adw-preferences-row.ts +150 -0
- package/src/elements/adw-shortcuts-dialog.ts +52 -0
- package/src/elements/adw-shortcuts-item.ts +171 -0
- package/src/elements/adw-shortcuts-section.ts +86 -0
- package/src/elements/adw-sidebar.ts +42 -3
- package/src/elements/adw-switch-row.ts +28 -1
- package/src/elements/adw-tab-bar.ts +529 -0
- package/src/elements/adw-tab-button.ts +194 -0
- package/src/elements/adw-tab-overview.ts +1011 -0
- package/src/elements/adw-tab-view.ts +66 -145
- package/src/elements/adw-toggle-group.ts +20 -5
- package/src/elements/adw-view-stack.ts +18 -0
- package/src/elements/adw-view-switcher-sidebar.ts +332 -0
- package/src/elements/adw-window.ts +185 -11
- package/src/elements/checks.ts +35 -8
- package/src/elements/gtk-about-dialog.ts +811 -0
- package/src/elements/gtk-application-window.ts +108 -0
- package/src/elements/gtk-aspect-frame.ts +160 -0
- package/src/elements/gtk-button.ts +12 -0
- package/src/elements/gtk-calendar.ts +757 -0
- package/src/elements/gtk-center-box.ts +184 -0
- package/src/elements/gtk-color-dialog-button.ts +278 -0
- package/src/elements/gtk-column-view.ts +320 -0
- package/src/elements/gtk-drag-icon.ts +257 -0
- package/src/elements/gtk-drawing-area.ts +303 -0
- package/src/elements/gtk-editable-label.ts +204 -0
- package/src/elements/gtk-emoji-chooser.ts +542 -0
- package/src/elements/gtk-entry.ts +39 -5
- package/src/elements/gtk-expander.ts +301 -0
- package/src/elements/gtk-fixed.ts +99 -0
- package/src/elements/gtk-flow-box-child.ts +68 -0
- package/src/elements/gtk-flow-box.ts +480 -0
- package/src/elements/gtk-font-dialog-button.ts +432 -0
- package/src/elements/gtk-frame.ts +174 -0
- package/src/elements/gtk-gl-area.ts +476 -0
- package/src/elements/gtk-graphics-offload.ts +130 -0
- package/src/elements/gtk-grid-view.ts +168 -0
- package/src/elements/gtk-grid.ts +127 -0
- package/src/elements/gtk-header-bar.ts +273 -0
- package/src/elements/gtk-inscription.ts +387 -0
- package/src/elements/gtk-label.ts +19 -11
- package/src/elements/gtk-level-bar.ts +323 -0
- package/src/elements/gtk-link-button.ts +138 -0
- package/src/elements/gtk-list-box-row.ts +195 -0
- package/src/elements/gtk-list-box.ts +413 -0
- package/src/elements/gtk-list-view.ts +370 -0
- package/src/elements/gtk-media-controls.ts +509 -0
- package/src/elements/gtk-notebook.ts +664 -0
- package/src/elements/gtk-overlay.ts +149 -0
- package/src/elements/gtk-page-setup-unix-dialog.ts +420 -0
- package/src/elements/gtk-paned.ts +597 -0
- package/src/elements/gtk-password-entry.ts +170 -0
- package/src/elements/gtk-picture.ts +254 -0
- package/src/elements/gtk-popover-bin.ts +332 -0
- package/src/elements/gtk-popover-menu-bar.ts +355 -0
- package/src/elements/gtk-popover-menu.ts +339 -0
- package/src/elements/gtk-popover.ts +92 -10
- package/src/elements/gtk-print-unix-dialog.ts +989 -0
- package/src/elements/gtk-progress-bar.ts +24 -11
- package/src/elements/gtk-revealer.ts +406 -0
- package/src/elements/gtk-scale-button.ts +358 -0
- package/src/elements/gtk-scale.ts +492 -0
- package/src/elements/gtk-scrollbar.ts +528 -0
- package/src/elements/gtk-scrolled-window.ts +642 -0
- package/src/elements/gtk-search-bar.ts +200 -0
- package/src/elements/gtk-search-entry.ts +172 -0
- package/src/elements/gtk-separator.ts +52 -0
- package/src/elements/gtk-spin-button.ts +475 -0
- package/src/elements/gtk-spinner.ts +126 -0
- package/src/elements/gtk-stack-sidebar.ts +212 -0
- package/src/elements/gtk-stack-switcher.ts +279 -0
- package/src/elements/gtk-stack.ts +748 -0
- package/src/elements/gtk-switch.ts +52 -19
- package/src/elements/gtk-text-view.ts +290 -0
- package/src/elements/gtk-text.ts +219 -0
- package/src/elements/gtk-toggle-button.ts +239 -0
- package/src/elements/gtk-tree-expander.ts +243 -0
- package/src/elements/gtk-video.ts +423 -0
- package/src/elements/gtk-viewport.ts +277 -0
- package/src/elements/gtk-window-controls.ts +341 -0
- package/src/elements/gtk-window-handle.ts +221 -0
- package/src/elements/gtk-window.ts +366 -0
- package/src/elements/justification.ts +24 -0
- package/src/elements/popover-menu.ts +24 -0
- package/src/elements/roving-focus.ts +53 -21
- package/src/emoji-data.ts +577 -0
- package/src/entry-rows.spec.ts +31 -0
- package/src/font-description.ts +238 -0
- package/src/gtk-about-dialog.spec.ts +250 -0
- package/src/gtk-action-bar.spec.ts +89 -0
- package/src/gtk-application-window.spec.ts +107 -0
- package/src/gtk-aspect-frame.spec.ts +114 -0
- package/src/gtk-calendar.spec.ts +589 -0
- package/src/gtk-center-box.spec.ts +125 -0
- package/src/gtk-color-dialog-button.spec.ts +141 -0
- package/src/gtk-column-view.spec.ts +154 -0
- package/src/gtk-drag-icon.spec.ts +190 -0
- package/src/gtk-drawing-area.spec.ts +211 -0
- package/src/gtk-editable-label.spec.ts +190 -0
- package/src/gtk-emoji-chooser.spec.ts +173 -0
- package/src/gtk-entry.spec.ts +23 -0
- package/src/gtk-expander.spec.ts +170 -0
- package/src/gtk-fixed.spec.ts +97 -0
- package/src/gtk-flow-box.spec.ts +289 -0
- package/src/gtk-font-dialog-button.spec.ts +166 -0
- package/src/gtk-frame.spec.ts +119 -0
- package/src/gtk-gl-area.spec.ts +361 -0
- package/src/gtk-graphics-offload.spec.ts +119 -0
- package/src/gtk-grid-view.spec.ts +106 -0
- package/src/gtk-grid.spec.ts +122 -0
- package/src/gtk-header-bar.spec.ts +202 -0
- package/src/gtk-inscription.spec.ts +235 -0
- package/src/gtk-level-bar.spec.ts +199 -0
- package/src/gtk-link-button.spec.ts +117 -0
- package/src/gtk-list-box.spec.ts +422 -0
- package/src/gtk-list-view.spec.ts +203 -0
- package/src/gtk-media-controls.spec.ts +295 -0
- package/src/gtk-notebook.spec.ts +546 -0
- package/src/gtk-overlay.spec.ts +141 -0
- package/src/gtk-paned.spec.ts +267 -0
- package/src/gtk-password-entry.spec.ts +150 -0
- package/src/gtk-picture.spec.ts +172 -0
- package/src/gtk-popover-bin.spec.ts +229 -0
- package/src/gtk-popover-menu-bar.spec.ts +296 -0
- package/src/gtk-popover-menu.spec.ts +261 -0
- package/src/gtk-popover-role.spec.ts +138 -0
- package/src/gtk-popover.spec.ts +264 -0
- package/src/gtk-print-dialogs.spec.ts +251 -0
- package/src/gtk-revealer.spec.ts +164 -0
- package/src/gtk-scale-button.spec.ts +218 -0
- package/src/gtk-scale.spec.ts +213 -0
- package/src/gtk-scrollbar.spec.ts +244 -0
- package/src/gtk-scrolled-window.spec.ts +262 -0
- package/src/gtk-search-bar.spec.ts +179 -0
- package/src/gtk-search-entry.spec.ts +142 -0
- package/src/gtk-separator.spec.ts +74 -0
- package/src/gtk-spin-button.spec.ts +186 -0
- package/src/gtk-spinner.spec.ts +130 -0
- package/src/gtk-stack-sidebar.spec.ts +217 -0
- package/src/gtk-stack-switcher.spec.ts +249 -0
- package/src/gtk-stack.spec.ts +432 -0
- package/src/gtk-text-view.spec.ts +189 -0
- package/src/gtk-text.spec.ts +163 -0
- package/src/gtk-toggle-button.spec.ts +186 -0
- package/src/gtk-tree-expander.spec.ts +201 -0
- package/src/gtk-video.spec.ts +240 -0
- package/src/gtk-viewport.spec.ts +140 -0
- package/src/gtk-window-controls.spec.ts +232 -0
- package/src/gtk-window-handle.spec.ts +158 -0
- package/src/gtk-window.spec.ts +190 -0
- package/src/index.ts +9 -1
- package/src/keyboard-operable.spec.ts +33 -1
- package/src/list-view-dom.ts +121 -0
- package/src/namespace/adw.ts +12 -0
- package/src/namespace/gtk.ts +61 -0
- package/src/page-setup.ts +222 -0
- package/src/scroll-shading.ts +18 -1
- package/src/shared-tree-builder.ts +263 -21
- package/src/signals.ts +15 -0
- package/src/style-classes.spec.ts +9 -8
- package/src/styles.generated.ts +1 -1
- package/src/tab-chip.ts +200 -0
- package/src/template-classes.ts +45 -0
- package/src/test.browser.mts +152 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
// <gtk-list-view> — a list of rows built from a model and a factory, the web counterpart
|
|
2
|
+
// of `Gtk.ListView`.
|
|
3
|
+
//
|
|
4
|
+
// THE MODEL IS ADR 0046'S, THE SELECTION IS THE WIDGET'S (ADR 0089). GTK's `model`
|
|
5
|
+
// property is a `Gtk.SelectionModel` — a `Gio.ListModel` with a selection layered over it
|
|
6
|
+
// — and ADR 0046 declined that layering as a portable value, twice. So `model` here is the
|
|
7
|
+
// same `AdwListModel` `<gtk-drop-down>` takes, and WHICH selection model would have
|
|
8
|
+
// wrapped it is `selection-mode`, an attribute on the widget. `ListViewState` in
|
|
9
|
+
// `@gjsify/adwaita-core` owns the rules (ADR 0004): `listViewSelect` is
|
|
10
|
+
// `gtk_list_base_select_item` plus the three models' answers, so this element, the grid
|
|
11
|
+
// view and the column view cannot drift into three selection behaviours.
|
|
12
|
+
//
|
|
13
|
+
// THE FACTORY IS A FUNCTION, `AdwListItemFactory<Node>` — `GtkSignalListItemFactory`'s
|
|
14
|
+
// setup+bind collapsed into one call, since this port builds a node per item instead of
|
|
15
|
+
// recycling. With no factory a GTK list view draws EMPTY rows; the port's default draws
|
|
16
|
+
// the item's label (`defaultListItemFactory`), because an empty gallery row is
|
|
17
|
+
// indistinguishable from a broken one.
|
|
18
|
+
//
|
|
19
|
+
// THE MODEL IS SPLICED, NOT REBUILT. `ListViewState` reports WHERE the model changed —
|
|
20
|
+
// `Gio.ListModel::items-changed`, one splice per assignment — so a model that gained one
|
|
21
|
+
// item inserts ONE row and leaves the others, with their focus and their scroll position,
|
|
22
|
+
// standing. Each row asks the list where it IS rather than closing over the index it was
|
|
23
|
+
// built at, the defect `<gtk-drop-down>` recorded when its own rebuild became a splice.
|
|
24
|
+
//
|
|
25
|
+
// Attributes (all GIR property names):
|
|
26
|
+
// model — JSON array: `["a"]` or `[{"value":"a","label":"A"}]`.
|
|
27
|
+
// selection-mode — none | single | multiple; the port's name for which
|
|
28
|
+
// `Gtk.SelectionModel` wraps the model.
|
|
29
|
+
// show-separators — boolean; the `.separators` style class GTK sets.
|
|
30
|
+
// single-click-activate — boolean; activate on one click, select on hover.
|
|
31
|
+
// enable-rubberband — boolean; drag the background to select a run (multiple only).
|
|
32
|
+
// tab-behavior — all | item | cell; `GtkListTabBehavior`.
|
|
33
|
+
// orientation — horizontal | vertical, `GtkOrientable`'s.
|
|
34
|
+
// Properties: model, factory, selected (number[]), selectionMode, showSeparators,
|
|
35
|
+
// singleClickActivate, enableRubberband, tabBehavior, orientation.
|
|
36
|
+
// Events:
|
|
37
|
+
// `activate` (CustomEvent, bubbles, detail = { position }) — `GtkListView::activate`.
|
|
38
|
+
// `notify::selected` (CustomEvent, bubbles, detail = { selected }) — every change,
|
|
39
|
+
// programmatic included, the way GObject notifies.
|
|
40
|
+
// A11Y: `listbox` with `option` rows while anything is selectable, `list`/`listitem` when
|
|
41
|
+
// `selection-mode` is `none`. GTK declares `LIST`/`LIST_ITEM` unconditionally
|
|
42
|
+
// (gtklistview.c:1013), which in ARIA carries no selection at all — `aria-selected` is
|
|
43
|
+
// not valid on a `listitem` — so announcing a list would hide the widget's whole job.
|
|
44
|
+
// Arrow keys, Home and End come from `attachRovingFocus`, which is also what makes the
|
|
45
|
+
// roving tabindex `tab-behavior: item` hands out navigable.
|
|
46
|
+
//
|
|
47
|
+
// Reference: refs/gtk/gtk/gtklistview.c:42-149 (the widget, its CSS nodes and its role)
|
|
48
|
+
// Reference: refs/gtk/gtk/gtklistfactorywidget.c:405-497 (click, modifiers, hover)
|
|
49
|
+
// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss:5-45 (listview, row)
|
|
50
|
+
// Copyright (c) GNOME contributors (GTK/libadwaita). LGPLv2.1+.
|
|
51
|
+
// Modifications: Implemented as a Web Component for @gjsify/adwaita-web.
|
|
52
|
+
|
|
53
|
+
import {
|
|
54
|
+
ListViewState,
|
|
55
|
+
normalizeComboOptions,
|
|
56
|
+
normalizeListSelectionMode,
|
|
57
|
+
parseListModel,
|
|
58
|
+
type AdwComboOption,
|
|
59
|
+
type AdwListItemFactory,
|
|
60
|
+
type AdwListItemsChanged,
|
|
61
|
+
type AdwListModelInput,
|
|
62
|
+
type AdwListSelectionMode,
|
|
63
|
+
type BoxOrientation,
|
|
64
|
+
} from '@gjsify/adwaita-core';
|
|
65
|
+
|
|
66
|
+
import { attachRubberBand, defaultListItemFactory } from '../list-view-dom.js';
|
|
67
|
+
import { bindSlottedChildren } from '../slotted-children.js';
|
|
68
|
+
import { stringListSlot } from '../string-list-slot.js';
|
|
69
|
+
|
|
70
|
+
import { attachRovingFocus } from './roving-focus.js';
|
|
71
|
+
|
|
72
|
+
/** `GtkListTabBehavior`'s nicks — `cell` behaves as `item` outside a cell-based view. */
|
|
73
|
+
export type GtkListTabBehavior = 'all' | 'item' | 'cell';
|
|
74
|
+
|
|
75
|
+
const TAB_BEHAVIORS: ReadonlySet<string> = new Set(['all', 'item', 'cell']);
|
|
76
|
+
|
|
77
|
+
/** An unknown nick is `all`, the ParamSpec's default (gtklistview.c:965-969). */
|
|
78
|
+
export function normalizeListTabBehavior(raw: string | null | undefined): GtkListTabBehavior {
|
|
79
|
+
return raw !== null && raw !== undefined && TAB_BEHAVIORS.has(raw) ? (raw as GtkListTabBehavior) : 'all';
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class GtkListView extends HTMLElement {
|
|
83
|
+
protected _listEl!: HTMLDivElement;
|
|
84
|
+
protected _rows: HTMLElement[] = [];
|
|
85
|
+
/** The model + selection machine all three views share (ADR 0004, ADR 0089). */
|
|
86
|
+
protected readonly _state = new ListViewState();
|
|
87
|
+
protected _factory: AdwListItemFactory<Node> = defaultListItemFactory;
|
|
88
|
+
private _initialized = false;
|
|
89
|
+
|
|
90
|
+
static get observedAttributes() {
|
|
91
|
+
return [
|
|
92
|
+
'model',
|
|
93
|
+
'selection-mode',
|
|
94
|
+
'show-separators',
|
|
95
|
+
'single-click-activate',
|
|
96
|
+
'enable-rubberband',
|
|
97
|
+
'tab-behavior',
|
|
98
|
+
'orientation',
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** The list model (`Gtk.ListView:model`, minus the selection ADR 0046 declined). */
|
|
103
|
+
get model(): AdwComboOption[] {
|
|
104
|
+
return this._state.model;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
set model(value: AdwListModelInput) {
|
|
108
|
+
this._state.setModel(normalizeComboOptions(value));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** The per-item renderer — `Gtk.ListView:factory`, as one function. */
|
|
112
|
+
get factory(): AdwListItemFactory<Node> {
|
|
113
|
+
return this._factory;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
set factory(value: AdwListItemFactory<Node> | null) {
|
|
117
|
+
this._factory = typeof value === 'function' ? value : defaultListItemFactory;
|
|
118
|
+
this._renderRows();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** The selected positions, ascending. Assigning replaces the selection. */
|
|
122
|
+
get selected(): number[] {
|
|
123
|
+
return this._state.selection;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
set selected(value: Iterable<number> | number | null) {
|
|
127
|
+
const positions = typeof value === 'number' ? [value] : (value ?? []);
|
|
128
|
+
this._state.setSelection(positions);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
get selectionMode(): AdwListSelectionMode {
|
|
132
|
+
return normalizeListSelectionMode(this.getAttribute('selection-mode'));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
set selectionMode(value: AdwListSelectionMode) {
|
|
136
|
+
this.setAttribute('selection-mode', value);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
get showSeparators(): boolean {
|
|
140
|
+
return this.hasAttribute('show-separators');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
set showSeparators(value: boolean) {
|
|
144
|
+
this.toggleAttribute('show-separators', !!value);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
get singleClickActivate(): boolean {
|
|
148
|
+
return this.hasAttribute('single-click-activate');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
set singleClickActivate(value: boolean) {
|
|
152
|
+
this.toggleAttribute('single-click-activate', !!value);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
get enableRubberband(): boolean {
|
|
156
|
+
return this.hasAttribute('enable-rubberband');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
set enableRubberband(value: boolean) {
|
|
160
|
+
this.toggleAttribute('enable-rubberband', !!value);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
get tabBehavior(): GtkListTabBehavior {
|
|
164
|
+
return normalizeListTabBehavior(this.getAttribute('tab-behavior'));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
set tabBehavior(value: GtkListTabBehavior) {
|
|
168
|
+
this.setAttribute('tab-behavior', value);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* `GtkOrientable:orientation` — which way the rows run.
|
|
173
|
+
*
|
|
174
|
+
* VERTICAL by default, and NOT through `normalizeBoxOrientation`: that helper is
|
|
175
|
+
* `GtkBox`'s parser and answers the interface default, horizontal. `GtkListBase` sets
|
|
176
|
+
* `priv->orientation = GTK_ORIENTATION_VERTICAL` in its own init
|
|
177
|
+
* (gtklistbase.c:2070), which is why every GTK list view scrolls DOWN out of the box.
|
|
178
|
+
* Taking the shared helper's default here put `.horizontal` on every list view,
|
|
179
|
+
* flowed the rows across, pointed the arrow keys at the wrong axis and stopped the
|
|
180
|
+
* `show-separators` rule matching — one wrong default, three symptoms.
|
|
181
|
+
*/
|
|
182
|
+
get orientation(): BoxOrientation {
|
|
183
|
+
return this.getAttribute('orientation') === 'horizontal' ? 'horizontal' : 'vertical';
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
set orientation(value: BoxOrientation) {
|
|
187
|
+
this.setAttribute('orientation', value);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
connectedCallback() {
|
|
191
|
+
if (this._initialized) return;
|
|
192
|
+
this._initialized = true;
|
|
193
|
+
|
|
194
|
+
this.classList.add(this._viewClass, 'view');
|
|
195
|
+
this._listEl = document.createElement('div');
|
|
196
|
+
this._listEl.className = 'adw-list-view-rows';
|
|
197
|
+
this.appendChild(this._listEl);
|
|
198
|
+
|
|
199
|
+
// A `<gtk-string-list slot="model">` child is the list a `.blp` authored (ADR 0072),
|
|
200
|
+
// consumed before the attribute seed so an authored model wins over an absent one.
|
|
201
|
+
bindSlottedChildren(this, [stringListSlot((model) => this._state.setModel(model))]).install(this._listEl);
|
|
202
|
+
|
|
203
|
+
// Seed BEFORE anything subscribes, so the first render is not driven by a splice.
|
|
204
|
+
if (this._state.count === 0) this._state.setModel(parseListModel(this.getAttribute('model')));
|
|
205
|
+
this._state.setSelectionMode(this.selectionMode);
|
|
206
|
+
this._state.subscribeItems((change) => this._applyItemsChanged(change));
|
|
207
|
+
this._state.subscribeSelection(() => this._onSelectionChanged());
|
|
208
|
+
|
|
209
|
+
attachRovingFocus({
|
|
210
|
+
host: this,
|
|
211
|
+
// A FUNCTION, because `orientation` is a live property: the helper is installed
|
|
212
|
+
// once and the axis its arrow keys move along changes with the attribute.
|
|
213
|
+
orientation: () => this.orientation,
|
|
214
|
+
items: () => this._rows,
|
|
215
|
+
select: (row) => this._selectRow(row, {}),
|
|
216
|
+
});
|
|
217
|
+
attachRubberBand({
|
|
218
|
+
host: this,
|
|
219
|
+
surface: this._listEl,
|
|
220
|
+
enabled: () => this.enableRubberband && this._state.selectionMode === 'multiple',
|
|
221
|
+
rows: () => this._rows,
|
|
222
|
+
selectPositions: (positions) => this._state.setSelection(positions, true),
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
this._applyAttributes();
|
|
226
|
+
this._renderRows();
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
attributeChangedCallback(name?: string) {
|
|
230
|
+
if (!this._initialized) return;
|
|
231
|
+
if (name === 'model') {
|
|
232
|
+
// No render call: the splice subscription owns the DOM half, so the markup door
|
|
233
|
+
// and the property door cannot drift into two update paths.
|
|
234
|
+
this._state.setModel(parseListModel(this.getAttribute('model')));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (name === 'selection-mode') this._state.setSelectionMode(this.selectionMode);
|
|
238
|
+
this._applyAttributes();
|
|
239
|
+
if (name === 'selection-mode' || name === 'tab-behavior') this._renderRows();
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** The classes and ARIA that follow directly from the attributes. */
|
|
243
|
+
protected _applyAttributes(): void {
|
|
244
|
+
const orientation = this.orientation;
|
|
245
|
+
this.classList.toggle('separators', this.showSeparators);
|
|
246
|
+
this.classList.toggle('horizontal', orientation === 'horizontal');
|
|
247
|
+
const selectable = this._state.selectionMode !== 'none';
|
|
248
|
+
this.setAttribute('role', selectable ? 'listbox' : 'list');
|
|
249
|
+
if (this._state.selectionMode === 'multiple') this.setAttribute('aria-multiselectable', 'true');
|
|
250
|
+
else this.removeAttribute('aria-multiselectable');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* The class the HOST wears. GTK names its views by CSS node — `listview`, `gridview`,
|
|
255
|
+
* `columnview` — and the three partials select on the tag, so this is what a consumer
|
|
256
|
+
* or a page rule has to spell; a subclass wearing the base's class would offer one
|
|
257
|
+
* name for two widgets.
|
|
258
|
+
*/
|
|
259
|
+
protected get _viewClass(): string {
|
|
260
|
+
return 'adw-list-view';
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/** The CSS node name GTK gives each child — `row` here, `child` in a grid view. */
|
|
264
|
+
protected get _rowClass(): string {
|
|
265
|
+
return 'adw-list-view-row';
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/** Build every row from scratch — the factory changed, or the view did. */
|
|
269
|
+
protected _renderRows(): void {
|
|
270
|
+
if (!this._initialized) return;
|
|
271
|
+
this._listEl.replaceChildren();
|
|
272
|
+
this._rows = [];
|
|
273
|
+
for (let position = 0; position < this._state.count; position++) {
|
|
274
|
+
const row = this._createRow(position);
|
|
275
|
+
if (row === null) continue;
|
|
276
|
+
this._listEl.appendChild(row);
|
|
277
|
+
this._rows.push(row);
|
|
278
|
+
}
|
|
279
|
+
this._syncSelectedStates();
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** One row: the factory's node inside the element GTK calls `row`. */
|
|
283
|
+
protected _createRow(position: number): HTMLElement | null {
|
|
284
|
+
const context = this._state.itemContext(position);
|
|
285
|
+
if (context === null) return null;
|
|
286
|
+
const row = document.createElement('div');
|
|
287
|
+
row.className = `${this._rowClass} activatable`;
|
|
288
|
+
row.setAttribute('role', this._state.selectionMode === 'none' ? 'listitem' : 'option');
|
|
289
|
+
// `tab-behavior: all` makes every row its own tab stop; `item` and `cell` hand out
|
|
290
|
+
// a roving tabindex, which `attachRovingFocus` is what makes navigable.
|
|
291
|
+
row.tabIndex = this.tabBehavior === 'all' ? 0 : -1;
|
|
292
|
+
row.appendChild(this._factory(context));
|
|
293
|
+
|
|
294
|
+
row.addEventListener('click', (event) => {
|
|
295
|
+
this._selectRow(row, { modify: event.ctrlKey || event.metaKey, extend: event.shiftKey });
|
|
296
|
+
if (this.singleClickActivate) this._activateRow(row);
|
|
297
|
+
});
|
|
298
|
+
// A double click activates unless single-click already did
|
|
299
|
+
// (gtklistfactorywidget.c:423-430).
|
|
300
|
+
row.addEventListener('dblclick', () => {
|
|
301
|
+
if (!this.singleClickActivate) this._activateRow(row);
|
|
302
|
+
});
|
|
303
|
+
row.addEventListener('pointerenter', () => {
|
|
304
|
+
// `single-click-activate` also means "select on hover", with no modifiers
|
|
305
|
+
// (gtklistfactorywidget.c:482-496).
|
|
306
|
+
if (this.singleClickActivate) this._selectRow(row, {});
|
|
307
|
+
});
|
|
308
|
+
row.addEventListener('keydown', (event) => {
|
|
309
|
+
if (event.key !== 'Enter' && event.key !== ' ') return;
|
|
310
|
+
event.preventDefault();
|
|
311
|
+
if (event.key === ' ') this._selectRow(row, { modify: event.ctrlKey, extend: event.shiftKey });
|
|
312
|
+
else this._activateRow(row);
|
|
313
|
+
});
|
|
314
|
+
return row;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private _selectRow(row: HTMLElement, step: { modify?: boolean; extend?: boolean }): void {
|
|
318
|
+
const position = this._rows.indexOf(row);
|
|
319
|
+
if (position < 0) return;
|
|
320
|
+
this._state.selectItem(position, step);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
private _activateRow(row: HTMLElement): void {
|
|
324
|
+
const position = this._rows.indexOf(row);
|
|
325
|
+
if (position < 0) return;
|
|
326
|
+
this.dispatchEvent(new CustomEvent('activate', { bubbles: true, detail: { position } }));
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
private _onSelectionChanged(): void {
|
|
330
|
+
this._syncSelectedStates();
|
|
331
|
+
this.dispatchEvent(
|
|
332
|
+
new CustomEvent('notify::selected', { bubbles: true, detail: { selected: this._state.selection } }),
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/** The per-row selected state, and the one tab stop a roving tabindex leaves open. */
|
|
337
|
+
protected _syncSelectedStates(): void {
|
|
338
|
+
const selection = new Set(this._state.selection);
|
|
339
|
+
const roving = this.tabBehavior !== 'all';
|
|
340
|
+
const cursor = selection.size > 0 ? Math.min(...selection) : 0;
|
|
341
|
+
this._rows.forEach((row, position) => {
|
|
342
|
+
const isSelected = selection.has(position);
|
|
343
|
+
row.classList.toggle('selected', isSelected);
|
|
344
|
+
if (this._state.selectionMode === 'none') row.removeAttribute('aria-selected');
|
|
345
|
+
else row.setAttribute('aria-selected', String(isSelected));
|
|
346
|
+
if (roving) row.tabIndex = position === cursor ? 0 : -1;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Apply one `items-changed` — remove `removed` rows at `position`, insert `added`
|
|
352
|
+
* fresh ones there, leave every other row standing.
|
|
353
|
+
*/
|
|
354
|
+
private _applyItemsChanged(change: AdwListItemsChanged): void {
|
|
355
|
+
if (!this._initialized) return;
|
|
356
|
+
for (const removed of this._rows.splice(change.position, change.removed)) removed.remove();
|
|
357
|
+
const before = this._rows[change.position] ?? null;
|
|
358
|
+
const inserted: HTMLElement[] = [];
|
|
359
|
+
for (let i = 0; i < change.added; i++) {
|
|
360
|
+
const row = this._createRow(change.position + i);
|
|
361
|
+
if (row === null) continue;
|
|
362
|
+
this._listEl.insertBefore(row, before);
|
|
363
|
+
inserted.push(row);
|
|
364
|
+
}
|
|
365
|
+
this._rows.splice(change.position, 0, ...inserted);
|
|
366
|
+
this._syncSelectedStates();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
customElements.define('gtk-list-view', GtkListView);
|