From 7a7d620659e9b243d1fbdee3eb28c1ca5ae6b8bd Mon Sep 17 00:00:00 2001 From: charlieforward9 Date: Wed, 4 Mar 2026 23:55:28 -0500 Subject: [PATCH 1/3] Revert "refactor: remove preact dependency from widgets module" This reverts commit a622dbc982b1a96f1577f88ca666887a5394acc3. --- modules/widgets/src/widgets/html-overlay-widget.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/widgets/src/widgets/html-overlay-widget.tsx b/modules/widgets/src/widgets/html-overlay-widget.tsx index b2ea63ff2..26d5d60ef 100644 --- a/modules/widgets/src/widgets/html-overlay-widget.tsx +++ b/modules/widgets/src/widgets/html-overlay-widget.tsx @@ -26,11 +26,7 @@ export type HtmlOverlayWidgetProps = WidgetProps & { /** Create an overlay root for custom rendering. */ onCreateOverlay?: (container: HTMLElement) => unknown; /** Render into a previously created overlay root. */ - onRenderOverlay?: ( - overlayRoot: unknown, - element: JSX.Element | null, - container: HTMLElement - ) => void; + onRenderOverlay?: (overlayRoot: unknown, element: JSX.Element | null, container: HTMLElement) => void; }; const ROOT_STYLE: Partial = { From f0f42e9461a1c725555135ec5ec3001c44216f0d Mon Sep 17 00:00:00 2001 From: charlieforward9 Date: Thu, 5 Mar 2026 00:16:17 -0500 Subject: [PATCH 2/3] fix(widgets): restore Preact as JSX renderer, fix deck.gl/core type compat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Align with @deck.gl/widgets design intent: Preact internally, VanillaJS public API. Fixes TypeScript errors when vendor source is aliased into a React project. - Add /** @jsxImportSource preact */ pragma to all .tsx widget files so TypeScript uses Preact's JSX factory instead of React's when compiling under the main project tsconfig - Remove redundant `deck?: Deck | null` redeclaration from HtmlOverlayWidget, PanWidget, ZoomRangeWidget — base Widget class already declares it; the null type conflicted with Widget.deck which is Deck | undefined - Change this.deck = null → this.deck = undefined in onRemove() to match base class type (Deck | undefined, not Deck | null) - Widen hasViewManager() parameter to Deck | null | undefined to match callers using this.deck which is now Deck | undefined Co-Authored-By: Claude Sonnet 4.6 --- modules/widgets/src/widgets/html-overlay-item.tsx | 1 + modules/widgets/src/widgets/html-overlay-widget.tsx | 4 ++-- modules/widgets/src/widgets/html-tooltip-widget.tsx | 1 + modules/widgets/src/widgets/long-press-button.tsx | 1 + modules/widgets/src/widgets/pan-widget.tsx | 5 +++-- modules/widgets/src/widgets/view-manager-utils.ts | 2 +- modules/widgets/src/widgets/zoom-range-widget.tsx | 5 +++-- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/widgets/src/widgets/html-overlay-item.tsx b/modules/widgets/src/widgets/html-overlay-item.tsx index 9827c7756..21cdfa456 100644 --- a/modules/widgets/src/widgets/html-overlay-item.tsx +++ b/modules/widgets/src/widgets/html-overlay-item.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import type {ComponentChildren, JSX} from 'preact'; diff --git a/modules/widgets/src/widgets/html-overlay-widget.tsx b/modules/widgets/src/widgets/html-overlay-widget.tsx index 26d5d60ef..e7c2185a6 100644 --- a/modules/widgets/src/widgets/html-overlay-widget.tsx +++ b/modules/widgets/src/widgets/html-overlay-widget.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import { cloneElement, @@ -54,7 +55,6 @@ export class HtmlOverlayWidget< placement: WidgetPlacement = 'fill'; className = 'deck-widget-html-overlay'; - deck?: Deck | null = null; protected viewport: Viewport | null = null; protected overlayRoot: unknown = null; protected overlayRootInitialized = false; @@ -79,7 +79,7 @@ export class HtmlOverlayWidget< } override onRemove(): void { - this.deck = null; + this.deck = undefined; this.viewport = null; this.overlayRoot = null; this.overlayRootInitialized = false; diff --git a/modules/widgets/src/widgets/html-tooltip-widget.tsx b/modules/widgets/src/widgets/html-tooltip-widget.tsx index 9013e39bf..4ffea7945 100644 --- a/modules/widgets/src/widgets/html-tooltip-widget.tsx +++ b/modules/widgets/src/widgets/html-tooltip-widget.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import type {ComponentChildren, VNode} from 'preact'; import type {PickingInfo, WidgetProps, Viewport} from '@deck.gl/core'; diff --git a/modules/widgets/src/widgets/long-press-button.tsx b/modules/widgets/src/widgets/long-press-button.tsx index fc5fb5eca..ffae13c43 100644 --- a/modules/widgets/src/widgets/long-press-button.tsx +++ b/modules/widgets/src/widgets/long-press-button.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import {Component, type ComponentChildren} from 'preact'; diff --git a/modules/widgets/src/widgets/pan-widget.tsx b/modules/widgets/src/widgets/pan-widget.tsx index d712002bd..6f7eb7688 100644 --- a/modules/widgets/src/widgets/pan-widget.tsx +++ b/modules/widgets/src/widgets/pan-widget.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import {render} from 'preact'; import type {JSX} from 'preact'; @@ -60,7 +61,7 @@ export class PanWidget extends Widget { placement: WidgetPlacement = 'top-left'; className = 'deck-widget-pan'; - deck?: Deck | null = null; + step: number; constructor(props: PanWidgetProps = {}) { @@ -91,7 +92,7 @@ export class PanWidget extends Widget { } override onRemove(): void { - this.deck = null; + this.deck = undefined; } override onRenderHTML(rootElement: HTMLElement): void { diff --git a/modules/widgets/src/widgets/view-manager-utils.ts b/modules/widgets/src/widgets/view-manager-utils.ts index eb5a2d7b8..4d9c57112 100644 --- a/modules/widgets/src/widgets/view-manager-utils.ts +++ b/modules/widgets/src/widgets/view-manager-utils.ts @@ -12,7 +12,7 @@ export type DeckWithViewManager = Deck & { }; }; -export function hasViewManager(deck: Deck | null): deck is DeckWithViewManager { +export function hasViewManager(deck: Deck | null | undefined): deck is DeckWithViewManager { return Boolean(deck && typeof deck === 'object' && 'viewManager' in deck); } diff --git a/modules/widgets/src/widgets/zoom-range-widget.tsx b/modules/widgets/src/widgets/zoom-range-widget.tsx index de257c0e6..6a7c055b0 100644 --- a/modules/widgets/src/widgets/zoom-range-widget.tsx +++ b/modules/widgets/src/widgets/zoom-range-widget.tsx @@ -1,6 +1,7 @@ // deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors +/** @jsxImportSource preact */ import {render} from 'preact'; import type {JSX} from 'preact'; @@ -75,7 +76,7 @@ export class ZoomRangeWidget extends Widget { placement: WidgetPlacement = 'top-left'; className = 'deck-widget-zoom-range'; - deck?: Deck | null = null; + step: number; currentZoom = 0; inferredMinZoom: number | null = null; @@ -109,7 +110,7 @@ export class ZoomRangeWidget extends Widget { } override onRemove(): void { - this.deck = null; + this.deck = undefined; } override onRenderHTML(rootElement: HTMLElement): void { From 5c2fa00ceffa05d02d41946a6f7e0e2eae8caffa Mon Sep 17 00:00:00 2001 From: charlieforward9 Date: Thu, 5 Mar 2026 00:42:23 -0500 Subject: [PATCH 3/3] style: prettier format html-overlay-widget.tsx Co-Authored-By: Claude Sonnet 4.6 --- modules/widgets/src/widgets/html-overlay-widget.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/widgets/src/widgets/html-overlay-widget.tsx b/modules/widgets/src/widgets/html-overlay-widget.tsx index e7c2185a6..d080ada53 100644 --- a/modules/widgets/src/widgets/html-overlay-widget.tsx +++ b/modules/widgets/src/widgets/html-overlay-widget.tsx @@ -27,7 +27,11 @@ export type HtmlOverlayWidgetProps = WidgetProps & { /** Create an overlay root for custom rendering. */ onCreateOverlay?: (container: HTMLElement) => unknown; /** Render into a previously created overlay root. */ - onRenderOverlay?: (overlayRoot: unknown, element: JSX.Element | null, container: HTMLElement) => void; + onRenderOverlay?: ( + overlayRoot: unknown, + element: JSX.Element | null, + container: HTMLElement + ) => void; }; const ROOT_STYLE: Partial = {