feat(core): Implement async picking TODO items#10020
Merged
ibgreen merged 145 commits intoib/async-deck-pickingfrom Mar 28, 2026
Merged
feat(core): Implement async picking TODO items#10020ibgreen merged 145 commits intoib/async-deck-pickingfrom
ibgreen merged 145 commits intoib/async-deck-pickingfrom
Conversation
* Add viewId prop to all widgets for multi-view support Introduces a standardized `viewId` prop to all widget components, enabling them to attach to specific views when using multiple views. Updates defaultProps, constructors, and setProps methods to handle the new prop, and improves JSDoc comments for clarity. Also adds copyright headers to several files for consistency. * Refactor widget exports and update overview documentation Reorganized widget exports in index.ts into clearer categories: navigation, geospatial, view, information, control, and utility widgets. Updated the overview documentation to reflect the new structure and added missing widgets to the lists for improved clarity and discoverability. * Refactor widget docs to centralize WidgetProps Updated widget documentation to reference generic WidgetProps from core/widget.md, removing redundant prop listings from individual widget docs. This improves consistency and maintainability by centralizing prop definitions and reducing duplication. * Add usage sections and version badges to widget docs Updated documentation for multiple deck.gl widgets to include 'Usage' sections and version badges, improving clarity and consistency. * Document default prop values for widget API Updates API reference docs for all widgets to consistently document default values for props, improving clarity for users. Default values are now listed before descriptions for easier reference. * Add usage section to TimelineWidget docs * Add source links to widget API docs * Audit widget docs for missing props Added documentation for GimbalWidget, InfoWidget, ResetViewWidget, and ScreenshotWidget * [fix] Invoke onViewModeChange callback on mode select The ViewSelectorWidget now calls the onViewModeChange callback when the view mode is changed, enabling external handling of view mode changes. Updated documentation to reflect this behavior. * Remove 'none' option from initialTheme prop docs Updated the documentation for the ThemeWidget to remove the 'none' value from the initialTheme prop, clarifying that only 'auto', 'light', and 'dark' are valid options. * Fix merge for context menu widget doc * Fix inline CSS type * Refactor widget imports for type-only usage Updated imports in all widget components to use type-only imports for WidgetProps, WidgetPlacement, and related types from @deck.gl/core. * Fix link * Add placement and viewId props to StatsWidget Introduces 'placement' and 'viewId' properties to StatsWidget for improved positioning and multi-view support. * Update widget.md Co-authored-by: felixpalmer <felixpalmer@gmail.com> * alphabetical --------- Co-authored-by: felixpalmer <felixpalmer@gmail.com>
* Add deck.gl widgets 9.2 test apps Renamed and added new example apps for deck.gl widgets 9.2, including single and multi-view setups. Upgraded dependencies to @deck.gl/core, @deck.gl/layers, and @deck.gl/widgets v9.2.0-beta.1. Refactored LayerListWidget to extend Widget from @deck.gl/core. * fix: zoom transitions in non-geo views * fix: reset in multi-view apps * add: button text to theme * fix: animate and design fps widget * fix: gimbal in non-default views and multi-views * fix: timeline themed icon * fix: stats update on redraw * fix: loading status was flipped * stylesheet * Add --button-text-color CSS variable to docs Documents the new --button-text-color variable in the widget styling reference, including its default value and link to CSS color documentation. * types on IconButton * Refactor widget types for view state support Updated Widget and ResetViewWidget to support generic view state types using ViewOrViews and ViewStateMap. Matches `Deck`'s initialViewState type * Update test/apps/widgets-multi-view-9.2/package.json Co-authored-by: felixpalmer <felixpalmer@gmail.com> * Update test/apps/widgets-9.2/package.json Co-authored-by: felixpalmer <felixpalmer@gmail.com> * Add documentation for widgets with multiple views Introduces a new section explaining how to position widgets relative to deck.gl views using `viewId` and `placement` props. Provides example configuration and HTML structure, along with remarks and references to related guides. * Add data filtering to GeoJsonLayer with timeline control Introduces DataFilterExtension to the GeoJsonLayer, enabling dynamic filtering based on the 'scalerank' property. The timeline widget now updates the filter range interactively, allowing users to control visible features by time. * Refactor button components for improved type safety and fix lints * Add customizable --menu-gap CSS variable for menus * Refactor IconMenu to use elements instead of icon functions Updated IconMenu and related usage to accept JSX elements for icons instead of icon functions. Adjusted menu item definitions and rendering logic accordingly, and replaced inline menu styles with class-based styling and ButtonGroup/GroupedIconButton components for improved structure and maintainability. --------- Co-authored-by: felixpalmer <felixpalmer@gmail.com>
* Update docs for luma.gl v9 and API changes Revised documentation to reflect luma.gl v9 updates, including changes to GPU parameter handling, device initialization, and usage of string constants over WebGL constants. * Sections and better formatting * Update upgrade-guide.md * Remove outdated note about setting GPU parameters Deleted a note referencing the use of the `onDeviceInitialized` callback and luma.gl's `setParameters` method as an alternative way to set GPU parameters, likely due to deprecation or changes in recommended practices.
Co-authored-by: Chris Gervang <chrisgervang@users.noreply.github.com>
Swapped session times and details for Chris Kapp and Chris Gervang/Adam Krebs, updated speaker images, titles, and company logos. Added a break & networking divider at 14:00 and adjusted subsequent session times to reflect the new schedule.
Pivoting the topic of my taqlk to be more about react google maps in general.
Signed-off-by: dependabot[bot] <support@github.com>
Updated Node.js version requirement and governance links.
ibgreen
approved these changes
Mar 28, 2026
Collaborator
ibgreen
left a comment
There was a problem hiding this comment.
Looks good, I will push some improvements and land.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completes the remaining core implementation items from the async deck picking API, specifically wiring up the async path end-to-end and adding test coverage.
Background
The async picking API (
pickObjectAsync,pickMultipleObjectsAsync,pickObjectsAsync) was added as a public API surface but the internal implementation had gaps: the async picker methods still called synchronous GPU readback, event-driven hover/click picking skipped WebGPU entirely, and no tests existed for the async paths.Change List
deck-picker.ts:_pickClosestObjectAsyncand_pickVisibleObjectsAsyncwere calling synchronous_drawAndSampleinternally — replaced withawait _drawAndSampleAsyncdeck.ts—_pickAndCallback(): Replaced synchronous_pickwith async_pickAsync(fire-and-forget viavoid+.catch):_pickRequest.eventbefore awaiting to prevent duplicate processing on subsequent frames{x, y, radius, mode}before awaiting to avoid race conditions from mouse movement during async GPU readbackprops.onErrorDeck#async pickingindeck.spec.tsandDeckPicker#pick async emptyindeck-picker.spec.tscoveringpickObjectAsync,pickMultipleObjectsAsync, andpickObjectsAsync🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.