Skip to content

Version packages - #70

Merged
xinaesthete merged 1 commit into
mainfrom
changeset-release/main
Jul 27, 2026
Merged

Version packages#70
xinaesthete merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@spatialdata/core@0.3.0

Minor Changes

  • #88 6e153a6 Thanks @xinaesthete! - Non-blocking shapes loading + a vertex-pulling FlatPolygonLayer.

    Shapes no longer gate first paint. The geometry column is decoded (WKB → flat buffers)
    and tessellated into render topology inside the geometry worker and transferred back
    zero-copy; ShapesResolver.blockingResources is now [], and a main-thread tessellation
    fallback covers the no-worker path. This removes the full-element main-thread WKB decode
    that previously blocked behind the "Loading layer data…" overlay, and it lets Visium HD
    square_002um (~2.7M polygons) load without running out of memory.

    Polygon shapes now render through a new hand-rolled FlatPolygonLayer
    (@spatialdata/layers) instead of deck's SolidPolygonLayer + a PathLayer outline:

    • Vertex pulling — an attribute-less draw where the vertex shader reconstructs each
      vertex's position and a boundary edge-distance from two shared geometry textures via
      gl_VertexID, and imputes an anti-aliased outline with fwidth in the fragment shader
      (no separate outline layer). Per-frame cost ≈ the fill; geometry memory ≈ the stock
      indexed fill. Works on arbitrary polygons (cell segmentation, not just grids).
    • Feature state via a per-feature colour texture (the reusable "table column →
      buffer" primitive): colour-by-column, hide, and fade re-upload only a small texture,
      never the geometry buffers. Picking colours are computed in-shader from the feature
      index.
    • Outline is a lightened derivation of the fill, width-capped to a fraction of each
      shape's on-screen size and faded out for sub-pixel shapes — clear when zoomed in,
      non-dominating (no moiré) when zoomed out.

    New/changed public surface: @spatialdata/core exports tessellateFlatPolygons /
    TessellatedPolygons and carries the tessellated topology on ShapesRenderData;
    @spatialdata/layers exports FlatPolygonLayer. @spatialdata/vis decouples the
    one-shot auto-fit from the shapes-blocking transition so a shapes-only view still frames
    correctly.

    Also fixes a fill-colour "one column behind" bug (the feature-state runtime cache is now
    keyed on the fill-colour entry identity, not just its column signature); the hover/pan
    buffer-thrash from unstable deck updateTrigger arrays; and a per-feature colour-buffer
    thrash where two shapes layers sharing the default feature-state runtime rebuilt each
    other's (million-element) colour buffer on every frame — the FlatPolygonLayer colour
    cache is now keyed per layer.

    Known follow-ups: the main-thread GPU texture upload (~seconds on the largest elements)
    is not yet off the main thread — a WGSL/WebGPU variant (storage buffers instead of
    texture-packing) is the intended fix; explicit per-feature stroke override on the polygon
    path; non-blocking associated-table load.

Patch Changes

  • #89 e94ba97 Thanks @xinaesthete! - Points: feature selection now works on large elements, and persists by name.

    Selections persist as feature names. PointsLayerConfig.featureNames is the
    durable, serializable form and what the UI writes. Codes are app-assigned for a
    dictionary-only element (a Xenium transcripts has feature_name and no code
    column), so a stored code could silently come back meaning a different feature.
    featureCodes still works and still takes effect at runtime, but names win when
    both are present. resolveFeatureSelectionCodes / featureNamesForCodes are
    exported from @spatialdata/core for converting between the two.

    The feature scan now completes on large elements. Previously, selecting a
    feature on a multi-million-row element frequently never resolved — the scan
    plateaued part-way through and the layer sat there. It now reads through
    ParquetFile.stream({ columns, rowGroups }), which fetches per column chunk, so
    the projection reaches the network instead of pulling whole row groups — all 12
    columns of a Xenium transcripts to use three. The scan runs in the points
    worker, keeping the parquet decode off the main thread. Selecting one gene from a 12.1M-row element now
    settles in ~1.0s, with main-thread time roughly a third of what the pre-streaming
    path cost.

    Also fixed along the way: a full-dataset catalog scan being silently cancelled by
    the resident preview settling underneath it (leaving counts stuck and colours
    mismatched); row-group chunks handing out the cached footer buffer, which the
    worker transfer detached (DataCloneError, dropping the element onto whole-file
    reads); parquet part layout being re-probed on every call; a server that answers
    a directory path with 500 rather than 404 wedging part traversal; and point size
    not accounting for an element's transform scale.

    Known limitation: for a dictionary-only element the fallback catalog path cannot
    tally per-feature counts, and it settles successfully without them — so the
    retry path does not repair it and counts stay absent for the session. Names and
    selection are unaffected. Treat a missing count as unknown, not zero, and do not
    read the presence of counts as a signal that the scan completed.

  • #80 ab1b809 Thanks @xinaesthete! - Points/transcript rendering: composite layer, loading engine, and size controls.

    Points elements render through the @spatialdata/layers PointsLayer composite
    (ADR 0003) via a store-agnostic resolvePointsRenderResource boundary, backed by
    a new React-free PointsDataEngine that owns points loading, caching, and
    render-resource resolution. @spatialdata/core gains the points I/O foundation
    (bounded/capped loading, Morton tiling metadata, feature catalog, an opt-in
    worker, and vendored parquet-wasm with row-group range reads). SpatialCanvas adds
    a point-size control; preloaded points are sized in world units so they scale
    with zoom, clamped to a pixel range.

  • Updated dependencies [e343a72]:

    • zarrextra@0.3.0

@spatialdata/layers@0.3.0

Minor Changes

  • #88 6e153a6 Thanks @xinaesthete! - Non-blocking shapes loading + a vertex-pulling FlatPolygonLayer.

    Shapes no longer gate first paint. The geometry column is decoded (WKB → flat buffers)
    and tessellated into render topology inside the geometry worker and transferred back
    zero-copy; ShapesResolver.blockingResources is now [], and a main-thread tessellation
    fallback covers the no-worker path. This removes the full-element main-thread WKB decode
    that previously blocked behind the "Loading layer data…" overlay, and it lets Visium HD
    square_002um (~2.7M polygons) load without running out of memory.

    Polygon shapes now render through a new hand-rolled FlatPolygonLayer
    (@spatialdata/layers) instead of deck's SolidPolygonLayer + a PathLayer outline:

    • Vertex pulling — an attribute-less draw where the vertex shader reconstructs each
      vertex's position and a boundary edge-distance from two shared geometry textures via
      gl_VertexID, and imputes an anti-aliased outline with fwidth in the fragment shader
      (no separate outline layer). Per-frame cost ≈ the fill; geometry memory ≈ the stock
      indexed fill. Works on arbitrary polygons (cell segmentation, not just grids).
    • Feature state via a per-feature colour texture (the reusable "table column →
      buffer" primitive): colour-by-column, hide, and fade re-upload only a small texture,
      never the geometry buffers. Picking colours are computed in-shader from the feature
      index.
    • Outline is a lightened derivation of the fill, width-capped to a fraction of each
      shape's on-screen size and faded out for sub-pixel shapes — clear when zoomed in,
      non-dominating (no moiré) when zoomed out.

    New/changed public surface: @spatialdata/core exports tessellateFlatPolygons /
    TessellatedPolygons and carries the tessellated topology on ShapesRenderData;
    @spatialdata/layers exports FlatPolygonLayer. @spatialdata/vis decouples the
    one-shot auto-fit from the shapes-blocking transition so a shapes-only view still frames
    correctly.

    Also fixes a fill-colour "one column behind" bug (the feature-state runtime cache is now
    keyed on the fill-colour entry identity, not just its column signature); the hover/pan
    buffer-thrash from unstable deck updateTrigger arrays; and a per-feature colour-buffer
    thrash where two shapes layers sharing the default feature-state runtime rebuilt each
    other's (million-element) colour buffer on every frame — the FlatPolygonLayer colour
    cache is now keyed per layer.

    Known follow-ups: the main-thread GPU texture upload (~seconds on the largest elements)
    is not yet off the main thread — a WGSL/WebGPU variant (storage buffers instead of
    texture-packing) is the intended fix; explicit per-feature stroke override on the polygon
    path; non-blocking associated-table load.

Patch Changes

  • #71 bd594e2 Thanks @xinaesthete! - Fix multiscale labels rendering with an obviously wrong (vertically stretched, mis-placed) transformation when zoomed out past the coarsest resolution level.

    The MultiscaleLabelsTileLayer was configured with minZoom: -20, so deck.gl kept subdividing the tile grid below the deepest available resolution level. Past that level getTileData clamps to the deepest loader and returns the same data, but the tile bbox keeps doubling — so the bounds formula stretched that fixed data across an ever-larger world rect, far beyond the image extent. minZoom is now capped at -(loader.length - 1), matching Viv's MultiscaleImageLayer, so the coarsest real tiles stay correctly placed at any zoom-out.

    Also adds the bbox-culling guards Viv's renderSubLayers applies (skip tiles with negative bbox edges or zero-sized data) for defense in depth. This is the underlying cause that #44 only masked by making sublayer ids unique.

  • #89 e94ba97 Thanks @xinaesthete! - Points: feature selection now works on large elements, and persists by name.

    Selections persist as feature names. PointsLayerConfig.featureNames is the
    durable, serializable form and what the UI writes. Codes are app-assigned for a
    dictionary-only element (a Xenium transcripts has feature_name and no code
    column), so a stored code could silently come back meaning a different feature.
    featureCodes still works and still takes effect at runtime, but names win when
    both are present. resolveFeatureSelectionCodes / featureNamesForCodes are
    exported from @spatialdata/core for converting between the two.

    The feature scan now completes on large elements. Previously, selecting a
    feature on a multi-million-row element frequently never resolved — the scan
    plateaued part-way through and the layer sat there. It now reads through
    ParquetFile.stream({ columns, rowGroups }), which fetches per column chunk, so
    the projection reaches the network instead of pulling whole row groups — all 12
    columns of a Xenium transcripts to use three. The scan runs in the points
    worker, keeping the parquet decode off the main thread. Selecting one gene from a 12.1M-row element now
    settles in ~1.0s, with main-thread time roughly a third of what the pre-streaming
    path cost.

    Also fixed along the way: a full-dataset catalog scan being silently cancelled by
    the resident preview settling underneath it (leaving counts stuck and colours
    mismatched); row-group chunks handing out the cached footer buffer, which the
    worker transfer detached (DataCloneError, dropping the element onto whole-file
    reads); parquet part layout being re-probed on every call; a server that answers
    a directory path with 500 rather than 404 wedging part traversal; and point size
    not accounting for an element's transform scale.

    Known limitation: for a dictionary-only element the fallback catalog path cannot
    tally per-feature counts, and it settles successfully without them — so the
    retry path does not repair it and counts stay absent for the session. Names and
    selection are unaffected. Treat a missing count as unknown, not zero, and do not
    read the presence of counts as a signal that the scan completed.

  • #80 ab1b809 Thanks @xinaesthete! - Points/transcript rendering: composite layer, loading engine, and size controls.

    Points elements render through the @spatialdata/layers PointsLayer composite
    (ADR 0003) via a store-agnostic resolvePointsRenderResource boundary, backed by
    a new React-free PointsDataEngine that owns points loading, caching, and
    render-resource resolution. @spatialdata/core gains the points I/O foundation
    (bounded/capped loading, Morton tiling metadata, feature catalog, an opt-in
    worker, and vendored parquet-wasm with row-group range reads). SpatialCanvas adds
    a point-size control; preloaded points are sized in world units so they scale
    with zoom, clamped to a pixel range.

  • #79 8607083 Thanks @xinaesthete! - SpatialCanvas hover/picking performance and Rules-of-React cleanup.

    Picking/tooltip performance:

    • New hoverTooltipMode prop ('off' | 'simple' | 'aggregate', default
      'aggregate') on SpatialCanvas and SpatialCanvasViewer, with a matching
      selector in the SpatialCanvas UI. 'aggregate' reports every feature under
      the cursor across layers (pickMultipleObjects GPU passes); 'simple'
      resolves the single top-most pick deck.gl already does for hover/highlight;
      'off' makes shape layers non-pickable entirely (no autoHighlight, no
      picking-buffer render) — the cheapest mode. Replaces the earlier boolean
      aggregateHoverTooltips.
    • Picking stays live through pan/zoom. The shapes layer keeps a pickingEnabled
      option (@spatialdata/layers) that 'off' mode uses to drop picking, but it
      is no longer toggled by camera gestures — the FlatPolygonLayer pick pass is a
      single cheap vertex-pulled draw, so no gesture gate is needed.
    • Hover tooltip resolution is suppressed while a pointer button is held (drag),
      and the per-missing-layer supplemental aggregation pick is collapsed into a
      single batched pick. The hover-tooltip machinery (pick → tooltip → portal) is a
      single useHoverFeatureTooltip hook shared by both canvas surfaces.

    Rules-of-React fixes (eslint-plugin-react-hooks, pnpm lint:react now clean and
    the react-lint CI job is required): removed ref reads/writes during render and
    replaced setState-in-effect patterns with derived state in @spatialdata/react
    useSpatialData and the vis Transforms, Table, Shapes, ImageView, and
    SpatialCanvas components.

  • Updated dependencies [e94ba97, ab1b809, 6e153a6]:

    • @spatialdata/core@0.3.0

@spatialdata/vis@0.3.0

Minor Changes

  • #88 6e153a6 Thanks @xinaesthete! - Non-blocking shapes loading + a vertex-pulling FlatPolygonLayer.

    Shapes no longer gate first paint. The geometry column is decoded (WKB → flat buffers)
    and tessellated into render topology inside the geometry worker and transferred back
    zero-copy; ShapesResolver.blockingResources is now [], and a main-thread tessellation
    fallback covers the no-worker path. This removes the full-element main-thread WKB decode
    that previously blocked behind the "Loading layer data…" overlay, and it lets Visium HD
    square_002um (~2.7M polygons) load without running out of memory.

    Polygon shapes now render through a new hand-rolled FlatPolygonLayer
    (@spatialdata/layers) instead of deck's SolidPolygonLayer + a PathLayer outline:

    • Vertex pulling — an attribute-less draw where the vertex shader reconstructs each
      vertex's position and a boundary edge-distance from two shared geometry textures via
      gl_VertexID, and imputes an anti-aliased outline with fwidth in the fragment shader
      (no separate outline layer). Per-frame cost ≈ the fill; geometry memory ≈ the stock
      indexed fill. Works on arbitrary polygons (cell segmentation, not just grids).
    • Feature state via a per-feature colour texture (the reusable "table column →
      buffer" primitive): colour-by-column, hide, and fade re-upload only a small texture,
      never the geometry buffers. Picking colours are computed in-shader from the feature
      index.
    • Outline is a lightened derivation of the fill, width-capped to a fraction of each
      shape's on-screen size and faded out for sub-pixel shapes — clear when zoomed in,
      non-dominating (no moiré) when zoomed out.

    New/changed public surface: @spatialdata/core exports tessellateFlatPolygons /
    TessellatedPolygons and carries the tessellated topology on ShapesRenderData;
    @spatialdata/layers exports FlatPolygonLayer. @spatialdata/vis decouples the
    one-shot auto-fit from the shapes-blocking transition so a shapes-only view still frames
    correctly.

    Also fixes a fill-colour "one column behind" bug (the feature-state runtime cache is now
    keyed on the fill-colour entry identity, not just its column signature); the hover/pan
    buffer-thrash from unstable deck updateTrigger arrays; and a per-feature colour-buffer
    thrash where two shapes layers sharing the default feature-state runtime rebuilt each
    other's (million-element) colour buffer on every frame — the FlatPolygonLayer colour
    cache is now keyed per layer.

    Known follow-ups: the main-thread GPU texture upload (~seconds on the largest elements)
    is not yet off the main thread — a WGSL/WebGPU variant (storage buffers instead of
    texture-packing) is the intended fix; explicit per-feature stroke override on the polygon
    path; non-blocking associated-table load.

  • #79 8607083 Thanks @xinaesthete! - SpatialCanvas hover/picking performance and Rules-of-React cleanup.

    Picking/tooltip performance:

    • New hoverTooltipMode prop ('off' | 'simple' | 'aggregate', default
      'aggregate') on SpatialCanvas and SpatialCanvasViewer, with a matching
      selector in the SpatialCanvas UI. 'aggregate' reports every feature under
      the cursor across layers (pickMultipleObjects GPU passes); 'simple'
      resolves the single top-most pick deck.gl already does for hover/highlight;
      'off' makes shape layers non-pickable entirely (no autoHighlight, no
      picking-buffer render) — the cheapest mode. Replaces the earlier boolean
      aggregateHoverTooltips.
    • Picking stays live through pan/zoom. The shapes layer keeps a pickingEnabled
      option (@spatialdata/layers) that 'off' mode uses to drop picking, but it
      is no longer toggled by camera gestures — the FlatPolygonLayer pick pass is a
      single cheap vertex-pulled draw, so no gesture gate is needed.
    • Hover tooltip resolution is suppressed while a pointer button is held (drag),
      and the per-missing-layer supplemental aggregation pick is collapsed into a
      single batched pick. The hover-tooltip machinery (pick → tooltip → portal) is a
      single useHoverFeatureTooltip hook shared by both canvas surfaces.

    Rules-of-React fixes (eslint-plugin-react-hooks, pnpm lint:react now clean and
    the react-lint CI job is required): removed ref reads/writes during render and
    replaced setState-in-effect patterns with derived state in @spatialdata/react
    useSpatialData and the vis Transforms, Table, Shapes, ImageView, and
    SpatialCanvas components.

Patch Changes

  • #68 25124c5 Thanks @xinaesthete! - Bump viv to 0.22.0 and deck.gl/luma.gl ecosystem to 9.3.5

  • #86 716bc44 Thanks @xinaesthete! - useLayerData consumes the Resource Resolvers via a single reconcile loop.

    useLayerData now drives layer loading through @spatialdata/core's
    SpatialEntryStore.reconcile() over per-kind ResourceResolvers — PointsResolver
    / ShapesResolver from core, ImagesResolver / LabelsResolver from vis
    instead of the previous per-kind Promise.all load switch. Shapes geometry/tooltip/
    fill-colour rows, image and labels channel defaults, and points preload are all read
    from their resolvers; points continue to run through the stable PointsDataEngine,
    which the store borrows via a non-owning proxy so a dataset swap does not dispose it.

    Purely an internal restructuring behind ADR 0004 (Step 1 consumption): the 17-member
    public surface is unchanged and guarded by useLayerData.spec.tsx.

  • #75 f109b95 Thanks @xinaesthete! - Auto-select the coordinate system when a SpatialData object has exactly one. Previously the picker started unselected (showing "Select a coordinate system") even when there was only one choice, and a separate effect would eagerly pick the first of several. Now selection defaults only in the unambiguous single-coordinate-system case; multi-system datasets still require an explicit choice.

  • #89 e94ba97 Thanks @xinaesthete! - Points: feature selection now works on large elements, and persists by name.

    Selections persist as feature names. PointsLayerConfig.featureNames is the
    durable, serializable form and what the UI writes. Codes are app-assigned for a
    dictionary-only element (a Xenium transcripts has feature_name and no code
    column), so a stored code could silently come back meaning a different feature.
    featureCodes still works and still takes effect at runtime, but names win when
    both are present. resolveFeatureSelectionCodes / featureNamesForCodes are
    exported from @spatialdata/core for converting between the two.

    The feature scan now completes on large elements. Previously, selecting a
    feature on a multi-million-row element frequently never resolved — the scan
    plateaued part-way through and the layer sat there. It now reads through
    ParquetFile.stream({ columns, rowGroups }), which fetches per column chunk, so
    the projection reaches the network instead of pulling whole row groups — all 12
    columns of a Xenium transcripts to use three. The scan runs in the points
    worker, keeping the parquet decode off the main thread. Selecting one gene from a 12.1M-row element now
    settles in ~1.0s, with main-thread time roughly a third of what the pre-streaming
    path cost.

    Also fixed along the way: a full-dataset catalog scan being silently cancelled by
    the resident preview settling underneath it (leaving counts stuck and colours
    mismatched); row-group chunks handing out the cached footer buffer, which the
    worker transfer detached (DataCloneError, dropping the element onto whole-file
    reads); parquet part layout being re-probed on every call; a server that answers
    a directory path with 500 rather than 404 wedging part traversal; and point size
    not accounting for an element's transform scale.

    Known limitation: for a dictionary-only element the fallback catalog path cannot
    tally per-feature counts, and it settles successfully without them — so the
    retry path does not repair it and counts stay absent for the session. Names and
    selection are unaffected. Treat a missing count as unknown, not zero, and do not
    read the presence of counts as a signal that the scan completed.

  • #80 ab1b809 Thanks @xinaesthete! - Points/transcript rendering: composite layer, loading engine, and size controls.

    Points elements render through the @spatialdata/layers PointsLayer composite
    (ADR 0003) via a store-agnostic resolvePointsRenderResource boundary, backed by
    a new React-free PointsDataEngine that owns points loading, caching, and
    render-resource resolution. @spatialdata/core gains the points I/O foundation
    (bounded/capped loading, Morton tiling metadata, feature catalog, an opt-in
    worker, and vendored parquet-wasm with row-group range reads). SpatialCanvas adds
    a point-size control; preloaded points are sized in world units so they scale
    with zoom, clamped to a pixel range.

  • #69 e343a72 Thanks @xinaesthete! - Switch HTJ2K codec from @cornerstonejs/codec-openjph to openjph-wasm, which correctly round-trips multi-component (volumetric) HTJ2K data. The cornerstone build silently dropped components 2..N on decode; openjph-wasm handles arbitrary component counts losslessly.

    Also adds true z>1 multi-component chunk support: z-planes are now encoded as components of a single codestream rather than one plane per chunk. Exports Htj2kPlane from the package index.

  • Updated dependencies [bd594e2, e94ba97, ab1b809, 6e153a6, 8607083, e343a72]:

    • @spatialdata/layers@0.3.0
    • @spatialdata/core@0.3.0
    • @spatialdata/react@0.3.0
    • zarrextra@0.3.0
    • @spatialdata/avivatorish@0.3.0

zarrextra@0.3.0

Minor Changes

  • #69 e343a72 Thanks @xinaesthete! - Switch HTJ2K codec from @cornerstonejs/codec-openjph to openjph-wasm, which correctly round-trips multi-component (volumetric) HTJ2K data. The cornerstone build silently dropped components 2..N on decode; openjph-wasm handles arbitrary component counts losslessly.

    Also adds true z>1 multi-component chunk support: z-planes are now encoded as components of a single codestream rather than one plane per chunk. Exports Htj2kPlane from the package index.

@spatialdata/avivatorish@0.3.0

Patch Changes

  • Updated dependencies [e343a72]:
    • zarrextra@0.3.0

@spatialdata/react@0.3.0

Patch Changes

  • #79 8607083 Thanks @xinaesthete! - SpatialCanvas hover/picking performance and Rules-of-React cleanup.

    Picking/tooltip performance:

    • New hoverTooltipMode prop ('off' | 'simple' | 'aggregate', default
      'aggregate') on SpatialCanvas and SpatialCanvasViewer, with a matching
      selector in the SpatialCanvas UI. 'aggregate' reports every feature under
      the cursor across layers (pickMultipleObjects GPU passes); 'simple'
      resolves the single top-most pick deck.gl already does for hover/highlight;
      'off' makes shape layers non-pickable entirely (no autoHighlight, no
      picking-buffer render) — the cheapest mode. Replaces the earlier boolean
      aggregateHoverTooltips.
    • Picking stays live through pan/zoom. The shapes layer keeps a pickingEnabled
      option (@spatialdata/layers) that 'off' mode uses to drop picking, but it
      is no longer toggled by camera gestures — the FlatPolygonLayer pick pass is a
      single cheap vertex-pulled draw, so no gesture gate is needed.
    • Hover tooltip resolution is suppressed while a pointer button is held (drag),
      and the per-missing-layer supplemental aggregation pick is collapsed into a
      single batched pick. The hover-tooltip machinery (pick → tooltip → portal) is a
      single useHoverFeatureTooltip hook shared by both canvas surfaces.

    Rules-of-React fixes (eslint-plugin-react-hooks, pnpm lint:react now clean and
    the react-lint CI job is required): removed ref reads/writes during render and
    replaced setState-in-effect patterns with derived state in @spatialdata/react
    useSpatialData and the vis Transforms, Table, Shapes, ImageView, and
    SpatialCanvas components.

  • Updated dependencies [e94ba97, ab1b809, 6e153a6]:

    • @spatialdata/core@0.3.0

@github-actions
github-actions Bot force-pushed the changeset-release/main branch 10 times, most recently from 6956a6c to 5e3f46f Compare July 6, 2026 10:36
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 2 times, most recently from 938f668 to b148add Compare July 6, 2026 16:13
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 8 times, most recently from a339278 to e408285 Compare July 20, 2026 07:15
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from e408285 to a3a44d7 Compare July 27, 2026 16:05
@xinaesthete
xinaesthete merged commit 9a13e3c into main Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant