@carto/ps-react-maps 3.0.0-canary.1 → 3.0.0-canary.2

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.
@@ -14,5 +14,5 @@ export interface MeasurementToolsStore {
14
14
  setUnit: (mapId: MeasurementToolsState['mapId'], unit: MeasurementToolsState['unit']) => void;
15
15
  setLocale: (mapId: MeasurementToolsState['mapId'], locale: MeasurementToolsState['locale']) => void;
16
16
  setPositions: (mapId: MeasurementToolsState['mapId'], positions: MeasurementToolsState['positions']) => void;
17
- setEnable: (mapId: MeasurementToolsState['mapId'], enabled: MeasurementToolsState['enabled']) => void;
17
+ setEnabled: (mapId: MeasurementToolsState['mapId'], enabled: MeasurementToolsState['enabled']) => void;
18
18
  }
@@ -82,7 +82,7 @@ export type MeasurementToolChildrenProps<M extends string, T = unknown> = Partia
82
82
  setUnit: (unit: MeasurementToolsState['unit']) => void;
83
83
  setLocale: (locale: MeasurementToolsState['locale']) => void;
84
84
  setPositions: (positions: MeasurementToolsState['positions']) => void;
85
- setEnable: (enabled: MeasurementToolsState['enabled']) => void;
85
+ setEnabled: (enabled: MeasurementToolsState['enabled']) => void;
86
86
  toggleLayer: (enabled: boolean) => void;
87
87
  clearLayer: () => void;
88
88
  };
@@ -29,7 +29,7 @@ export declare function useMeasurementTools({ mapId }: {
29
29
  setLocale: (locale: MeasurementToolsState["locale"]) => void;
30
30
  setPositions: (positions: MeasurementToolsState["positions"]) => void;
31
31
  setUnit: (unit: MeasurementToolsState["unit"]) => void;
32
- setEnable: (enabled: MeasurementToolsState["enabled"]) => void;
32
+ setEnabled: (enabled: MeasurementToolsState["enabled"]) => void;
33
33
  toggleLayer: (enabled: boolean) => void;
34
34
  clearLayer: () => void;
35
35
  setModeInstance: (modeInstance: MeasurementToolsState["modeInstance"]) => void;
@@ -24,18 +24,31 @@ export { MeasurementToolsProvider, useMeasurementToolsState, } from './editable/
24
24
  export { createMeasurementToolsStore } from './editable/measurement-tools/provider/store';
25
25
  export { getCursorDefault, getTooltipDefault } from './helpers';
26
26
  export { MapComponent } from './map';
27
- export type { Layer, LayerStore } from './providers/layers/types';
28
- export { useLayers } from './providers/layers/store';
29
- export type { MapProviderProps, MapStateStore, ViewportRect, } from './providers/map/types';
27
+ export type { ModelProps } from './models/types';
28
+ export { CategoriesModel, useCategories } from './models/categories';
29
+ export { FeaturesModel, useFeatures } from './models/features';
30
+ export { FormulaModel, useFormula } from './models/formula';
31
+ export { HistogramModel, useHistogram } from './models/histogram.';
32
+ export { RangeModel, useRange } from './models/range';
33
+ export { ScatterModel, useScatter } from './models/scatter';
34
+ export { TableModel, useTable } from './models/table';
35
+ export { TimeSeriesModel, useTimeSeries } from './models/time-series';
36
+ export { useWidgetModel } from './models/use-widget-model';
37
+ export type { Layer, LayerStore, LayerLegend } from './providers/layers/types';
38
+ export { useLayerStore } from './providers/layers/store';
39
+ export type { MapProviderProps, MapStore, ViewportRect, } from './providers/map/types';
30
40
  export { transitionFlyConfig } from './providers/map/const';
31
- export { MapProvider, useMapState } from './providers/map/provider';
32
- export { createMapStateStore } from './providers/map/store';
41
+ export { MapProvider, useMapStore } from './providers/map/provider';
42
+ export { createMapStore } from './providers/map/store';
33
43
  export type { QuerySource, Source, SourceStore, TableSource, TilesetSource, } from './providers/sources/types';
34
44
  export { ApiBaseUrl, clientID } from './providers/sources/const';
35
- export { useSource } from './providers/sources/store';
36
- export { useGetLayers } from './use-get-layers';
45
+ export { useSourceStore } from './providers/sources/store';
46
+ export { useLayers } from './use-layers';
47
+ export { useLegend } from './use-legend';
37
48
  export { useMapScreenshot } from './use-map-screenshot';
38
49
  export type { FieldFormatter, Formatter, Formatters, ObjectToHtmlOptions, Value, } from './utils/object-to-html/types';
39
50
  export { formatterTypes } from './utils/object-to-html/const';
40
51
  export { objectToHtml } from './utils/object-to-html/object-to-html';
52
+ export { mappingLegendMeridian } from './utils/mapping-meridian';
53
+ export { sortLayers } from './utils/sort-layers';
41
54
  export { ZoomControls } from './zoom-controls';
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { CategoryRequestOptions, CategoryResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useCategories({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<CategoryRequestOptions, CategoryResponse>): UseQueryResult<CategoryResponse, Error>;
5
+ export declare function CategoriesModel({ children, ...modelProps }: ModelProps<CategoryRequestOptions, CategoryResponse> & {
6
+ children: (props: UseQueryResult<CategoryResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { FeaturesRequestOptions, FeaturesResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useFeatures({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<FeaturesRequestOptions, FeaturesResponse>): UseQueryResult<FeaturesResponse, Error>;
5
+ export declare function FeaturesModel({ children, ...modelProps }: ModelProps<FeaturesRequestOptions, FeaturesResponse> & {
6
+ children: (props: UseQueryResult<FeaturesResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { FormulaRequestOptions, FormulaResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useFormula({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<FormulaRequestOptions, FormulaResponse>): UseQueryResult<FormulaResponse, Error>;
5
+ export declare function FormulaModel({ children, ...modelProps }: ModelProps<FormulaRequestOptions, FormulaResponse> & {
6
+ children: (props: UseQueryResult<FormulaResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { HistogramRequestOptions, HistogramResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useHistogram({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<HistogramRequestOptions, HistogramResponse>): UseQueryResult<HistogramResponse, Error>;
5
+ export declare function HistogramModel({ children, ...modelProps }: ModelProps<HistogramRequestOptions, HistogramResponse> & {
6
+ children: (props: UseQueryResult<HistogramResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { RangeRequestOptions, RangeResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useRange({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<RangeRequestOptions, RangeResponse>): UseQueryResult<RangeResponse, Error>;
5
+ export declare function RangeModel({ children, ...modelProps }: ModelProps<RangeRequestOptions, RangeResponse> & {
6
+ children: (props: UseQueryResult<RangeResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { ScatterRequestOptions, ScatterResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useScatter({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<ScatterRequestOptions, ScatterResponse>): UseQueryResult<ScatterResponse, Error>;
5
+ export declare function ScatterModel({ children, ...modelProps }: ModelProps<ScatterRequestOptions, ScatterResponse> & {
6
+ children: (props: UseQueryResult<ScatterResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { TableRequestOptions, TableResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useTable({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<TableRequestOptions, TableResponse>): UseQueryResult<TableResponse, Error>;
5
+ export declare function TableModel({ children, ...modelProps }: ModelProps<TableRequestOptions, TableResponse> & {
6
+ children: (props: UseQueryResult<TableResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { TimeSeriesRequestOptions, TimeSeriesResponse } from '@carto/api-client';
3
+ import { ModelProps } from './types';
4
+ export declare function useTimeSeries({ accessToken, sourceId, widgetProps, useQueryProps, }: ModelProps<TimeSeriesRequestOptions, TimeSeriesResponse>): UseQueryResult<TimeSeriesResponse, Error>;
5
+ export declare function TimeSeriesModel({ children, ...modelProps }: ModelProps<TimeSeriesRequestOptions, TimeSeriesResponse> & {
6
+ children: (props: UseQueryResult<TimeSeriesResponse, Error>) => React.ReactNode;
7
+ }): import('react').ReactNode;
@@ -0,0 +1,7 @@
1
+ import { UseQueryOptions } from '@tanstack/react-query';
2
+ export interface ModelProps<T, R> {
3
+ accessToken: string;
4
+ sourceId: string;
5
+ widgetProps: T;
6
+ useQueryProps?: Omit<UseQueryOptions<unknown, Error, R>, 'queryKey' | 'queryFn'>;
7
+ }
@@ -0,0 +1 @@
1
+ export declare function useWidgetModel(accessToken: string, sourceId: string): import('@carto/api-client').WidgetRemoteSource<import('node_modules/@carto/api-client/build/widget-sources/widget-source').WidgetSourceProps> | null;
@@ -1,2 +1,2 @@
1
1
  import { LayerStore } from './types';
2
- export declare const useLayers: import('zustand').UseBoundStore<import('zustand').StoreApi<LayerStore>>;
2
+ export declare const useLayerStore: import('zustand').UseBoundStore<import('zustand').StoreApi<LayerStore>>;
@@ -1,9 +1,21 @@
1
+ import { ReactNode } from 'react';
1
2
  import { LayerType } from '../../types';
2
3
  export interface Layer extends LayerType {
4
+ legend?: LayerLegend;
5
+ name?: string;
3
6
  order?: number;
4
- legend?: string;
5
7
  }
6
8
  export interface LayerStore {
7
9
  layers: Record<string, Layer>;
8
10
  setLayer: (id: string, layer?: Partial<Layer>) => void;
9
11
  }
12
+ export interface LayerLegend {
13
+ collapsed?: boolean;
14
+ collapsible?: boolean;
15
+ helperText?: ReactNode;
16
+ maxZoom?: number;
17
+ minZoom?: number;
18
+ opacityControl?: boolean;
19
+ switchable?: boolean;
20
+ variables?: unknown;
21
+ }
@@ -1,4 +1,4 @@
1
1
  import { PropsWithChildren } from 'react';
2
- import { MapProviderProps, MapStateStore } from './types';
2
+ import { MapProviderProps, MapStore } from './types';
3
3
  export declare function MapProvider({ children, values, }: PropsWithChildren<MapProviderProps>): import("react/jsx-runtime").JSX.Element;
4
- export declare function useMapState<T>(selector: (state: MapStateStore) => T): T;
4
+ export declare function useMapStore<T>(selector: (state: MapStore) => T): T;
@@ -1,2 +1,2 @@
1
- import { MapProviderProps, MapStateStore } from './types';
2
- export declare const createMapStateStore: (initProps: MapProviderProps["values"]) => import('zustand').StoreApi<MapStateStore>;
1
+ import { MapProviderProps, MapStore } from './types';
2
+ export declare const createMapStore: (initProps: MapProviderProps["values"]) => import('zustand').StoreApi<MapStore>;
@@ -10,7 +10,7 @@ interface ValueProps {
10
10
  export interface MapProviderProps {
11
11
  values: Omit<ValueProps, 'isLoaded'>[];
12
12
  }
13
- export interface MapStore {
13
+ export interface MapSlice {
14
14
  maps: Record<ValueProps['id'], Pick<ValueProps, 'basemap' | 'isLoaded'> & {
15
15
  instanceRef?: MapComponentProps['instanceRef'];
16
16
  overlayRef?: MapComponentProps['overlayRef'];
@@ -29,14 +29,16 @@ export interface MapStore {
29
29
  addLayers: (id: ValueProps['id'], layers: NonNullable<ValueProps['layers']>) => void;
30
30
  removeLayers: (id: ValueProps['id'], layer: NonNullable<ValueProps['layers']>) => void;
31
31
  }
32
- export interface ViewStateStore {
32
+ export interface ViewStateSlice {
33
+ viewports: Record<ValueProps['id'], WebMercatorViewport | null>;
34
+ updateViewPort: (id: ValueProps['id']) => void;
33
35
  viewStates: Record<ValueProps['id'], ValueProps['viewState']>;
34
36
  setViewState: (id: MapComponentProps['id'], viewState: MapViewState) => void;
35
37
  setZoom: (id: MapComponentProps['id'], zoom: MapViewState['zoom']) => void;
36
38
  setMinZoom: (id: MapComponentProps['id'], minZoom: MapViewState['minZoom']) => void;
37
39
  setMaxZoom: (id: MapComponentProps['id'], maxZoom: MapViewState['maxPitch']) => void;
38
40
  }
39
- export interface CommonStore {
41
+ export interface CommonSlice {
40
42
  fitBounds: (id: ValueProps['id'], bounds: Parameters<WebMercatorViewport['fitBounds']>[0], options?: {
41
43
  boundsOptions?: Parameters<WebMercatorViewport['fitBounds']>[1];
42
44
  viewStateOptions?: Omit<MapViewState, 'latitude' | 'longitude' | 'zoom'>;
@@ -49,7 +51,7 @@ export interface CommonStore {
49
51
  viewStateOptions?: Omit<MapViewState, 'latitude' | 'longitude' | 'zoom'>;
50
52
  }) => void;
51
53
  }
52
- export type MapStateStore = MapStore & ViewStateStore & CommonStore;
54
+ export type MapStore = MapSlice & ViewStateSlice & CommonSlice;
53
55
  export interface ViewportRect {
54
56
  x: number;
55
57
  y: number;
@@ -1,2 +1,3 @@
1
- import { SourceStore } from './types';
2
- export declare const useSource: import('zustand').UseBoundStore<import('zustand').StoreApi<SourceStore>>;
1
+ import { Source, SourceStore } from './types';
2
+ export declare const useSourceStore: import('zustand').UseBoundStore<import('zustand').StoreApi<SourceStore>>;
3
+ export declare function useSource(id: string): Source | undefined;
@@ -1,15 +1,17 @@
1
- import { VectorQuerySourceOptions, VectorTableSourceOptions, VectorTilesetSourceOptions } from '@deck.gl/carto';
1
+ import { WidgetRemoteSource, WidgetRemoteSourceProps, VectorQuerySourceOptions, VectorTableSourceOptions, VectorTilesetSourceOptions, TileFormat } from '@carto/api-client';
2
2
  export type QuerySource = {
3
3
  type: 'query';
4
4
  } & Omit<VectorQuerySourceOptions, 'accessToken' | 'sqlQuery'>;
5
5
  export type TilesetSource = {
6
6
  type: 'tileset';
7
+ tileFormat: TileFormat;
7
8
  } & Omit<VectorTilesetSourceOptions, 'accessToken' | 'tableName'>;
8
9
  export type TableSource = {
9
10
  type: 'table';
10
11
  } & Omit<VectorTableSourceOptions, 'accessToken' | 'tableName'>;
11
12
  export type Source = (QuerySource | TilesetSource | TableSource) & {
12
13
  data: string;
14
+ widgets?: WidgetRemoteSource<WidgetRemoteSourceProps>;
13
15
  };
14
16
  export interface SourceStore {
15
17
  sources: Record<string, Source>;
@@ -1,11 +1,11 @@
1
1
  import { Class, ValueOf } from 'type-fest';
2
2
  import { MutableRefObject, ReactNode, RefObject } from 'react';
3
- import { Layer, MapViewState, PickingInfo, ViewStateChangeParameters } from '@deck.gl/core';
3
+ import { Layer, LayerProps, MapViewState, PickingInfo, ViewStateChangeParameters } from '@deck.gl/core';
4
4
  import { DeckGLProps, DeckGLRef } from '@deck.gl/react';
5
5
  import { MapRef } from 'react-map-gl/maplibre';
6
6
  import { CartoBasemaps, GmapsBasemap, MapsTypes } from './const';
7
7
  import { MapProps, APIProviderProps } from '@vis.gl/react-google-maps';
8
- import { ViewStateStore } from './providers/map/types';
8
+ import { ViewStateSlice } from './providers/map/types';
9
9
  export * from '../types/common';
10
10
  export type BasemapKey = keyof typeof CartoBasemaps | keyof typeof GmapsBasemap;
11
11
  export type BasemapType = ValueOf<typeof MapsTypes>;
@@ -15,9 +15,9 @@ export interface Tooltip extends PickingInfo {
15
15
  className?: string | undefined;
16
16
  style?: Partial<CSSStyleDeclaration> | undefined;
17
17
  }
18
- export interface LayerType<T extends Class<Layer> = Class<Layer>> {
18
+ export interface LayerType<T extends Class<Layer> = Class<Layer>, P extends LayerProps = LayerProps> {
19
19
  type: T | null;
20
- props: unknown;
20
+ props?: Partial<P>;
21
21
  }
22
22
  export type InstanceRef = DeckGLRef;
23
23
  export type OverlayRef = MapRef | google.maps.Map | null | undefined;
@@ -51,6 +51,6 @@ export interface ZoomControlChildrenProps {
51
51
  maxZoom: MapViewState['maxZoom'];
52
52
  minZoom: MapViewState['minZoom'];
53
53
  isLoading: boolean;
54
- setZoom: (zoom: Parameters<ViewStateStore['setZoom']>[1]) => void;
54
+ setZoom: (zoom: Parameters<ViewStateSlice['setZoom']>[1]) => void;
55
55
  flyTo: (viewState: MapViewState) => void;
56
56
  }
@@ -1,4 +1,4 @@
1
1
  import { MapComponentProps } from './types';
2
- export declare function useGetLayers({ id }: {
2
+ export declare function useLayers({ id }: {
3
3
  id: MapComponentProps['id'];
4
4
  }): import('.').Layer[];
@@ -0,0 +1,16 @@
1
+ import { Layer, LayerLegend } from './providers/layers/types';
2
+ export declare function useLegend<T>(layersId: string[], callback: (layer: Layer) => T): {
3
+ legend: T[];
4
+ onChangeVisibility: ({ id, visible, ...legend }: {
5
+ id: string;
6
+ visible: boolean;
7
+ } & Partial<LayerLegend>) => void;
8
+ onChangeOpacity: ({ id, opacity }: {
9
+ id: string;
10
+ opacity: number;
11
+ }) => void;
12
+ onChangRowCollapsed: ({ id, collapsed }: {
13
+ id: string;
14
+ collapsed: boolean;
15
+ }) => void;
16
+ };
@@ -0,0 +1,15 @@
1
+ import { Layer } from '../providers/layers/types';
2
+ export declare function mappingLegendMeridian<T>(layer: Layer): {
3
+ collapsed: boolean | undefined;
4
+ collapsible: boolean | undefined;
5
+ helperText: import('react').ReactNode;
6
+ id: string | undefined;
7
+ legend: T;
8
+ maxZoom: number | undefined;
9
+ minZoom: number | undefined;
10
+ opacity: number;
11
+ opacityControl: boolean | undefined;
12
+ switchable: boolean | undefined;
13
+ title: string | undefined;
14
+ visible: boolean;
15
+ };
@@ -0,0 +1,2 @@
1
+ import { Layer } from '../providers/layers/types';
2
+ export declare function sortLayers(layers: Layer[]): Layer[];
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@carto/ps-react-maps",
3
- "version": "3.0.0-canary.1",
3
+ "version": "3.0.0-canary.2",
4
4
  "description": "CARTO's Professional Service React DeckGL library",
5
5
  "type": "module",
6
6
  "dependencies": {
7
7
  "@turf/turf": "7.1.0"
8
8
  },
9
9
  "devDependencies": {
10
+ "@tanstack/react-query": "5.61.0",
11
+ "@carto/api-client": "0.5.0-alpha.0",
10
12
  "@deck.gl-community/editable-layers": "9.0.3",
11
13
  "@deck.gl/aggregation-layers": "9.0.38",
12
14
  "@deck.gl/carto": "9.0.38",
@@ -22,11 +24,13 @@
22
24
  "convert-units": "3.0.0-beta.7",
23
25
  "html2canvas": "1.4.1",
24
26
  "maplibre-gl": "4.7.1",
25
- "react-map-gl": "7.2.0-beta.1",
27
+ "react-map-gl": "7.1.8",
26
28
  "zustand": "5.0.3",
27
- "@carto/ps-utils": "2.0.0-canary.1"
29
+ "@carto/ps-utils": "2.0.0-canary.2"
28
30
  },
29
31
  "peerDependencies": {
32
+ "@tanstack/react-query": "^5.61.0",
33
+ "@carto/api-client": "^0.5.0-alpha.0",
30
34
  "@deck.gl-community/editable-layers": "^9.0.0",
31
35
  "@deck.gl/aggregation-layers": "^9.0.0",
32
36
  "@deck.gl/carto": "^9.0.0",
@@ -42,9 +46,9 @@
42
46
  "html2canvas": "^1.4.1",
43
47
  "maplibre-gl": "^4.0.0",
44
48
  "react": "^18.0.0 || ^19.0.0",
45
- "react-map-gl": "7.2.0-beta.1",
49
+ "react-map-gl": "^7.1.8",
46
50
  "zustand": "^5.0.0",
47
- "@carto/ps-utils": "2.0.0-canary.1"
51
+ "@carto/ps-utils": "2.0.0-canary.2"
48
52
  },
49
53
  "exports": {
50
54
  ".": {