@sqlrooms/deck 0.29.0-rc.5 → 0.29.0-rc.7

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.
Files changed (75) hide show
  1. package/README.md +24 -2
  2. package/dist/DeckJsonMap.d.ts +1 -1
  3. package/dist/DeckJsonMap.d.ts.map +1 -1
  4. package/dist/DeckJsonMap.js +16 -11
  5. package/dist/DeckJsonMap.js.map +1 -1
  6. package/dist/LatitudeSelector.d.ts +11 -0
  7. package/dist/LatitudeSelector.d.ts.map +1 -0
  8. package/dist/LatitudeSelector.js +25 -0
  9. package/dist/LatitudeSelector.js.map +1 -0
  10. package/dist/LongitudeSelector.d.ts +11 -0
  11. package/dist/LongitudeSelector.d.ts.map +1 -0
  12. package/dist/LongitudeSelector.js +27 -0
  13. package/dist/LongitudeSelector.js.map +1 -0
  14. package/dist/MapSettings.d.ts +10 -0
  15. package/dist/MapSettings.d.ts.map +1 -0
  16. package/dist/MapSettings.js +94 -0
  17. package/dist/MapSettings.js.map +1 -0
  18. package/dist/ai.d.ts +168 -0
  19. package/dist/ai.d.ts.map +1 -0
  20. package/dist/ai.js +232 -0
  21. package/dist/ai.js.map +1 -0
  22. package/dist/dashboard.d.ts.map +1 -1
  23. package/dist/dashboard.js +72 -105
  24. package/dist/dashboard.js.map +1 -1
  25. package/dist/dashboardConfig.d.ts +22 -6
  26. package/dist/dashboardConfig.d.ts.map +1 -1
  27. package/dist/dashboardConfig.js +2 -5
  28. package/dist/dashboardConfig.js.map +1 -1
  29. package/dist/dashboardIntegration.d.ts +3 -0
  30. package/dist/dashboardIntegration.d.ts.map +1 -0
  31. package/dist/dashboardIntegration.js +16 -0
  32. package/dist/dashboardIntegration.js.map +1 -0
  33. package/dist/datasets/PreparedDatasetStore.js +2 -1
  34. package/dist/datasets/PreparedDatasetStore.js.map +1 -1
  35. package/dist/index.d.ts +8 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +5 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/json/colorScaleFunction.d.ts +1 -1
  40. package/dist/json/colorScaleFunction.d.ts.map +1 -1
  41. package/dist/json/colorScaleFunction.js +7 -1
  42. package/dist/json/colorScaleFunction.js.map +1 -1
  43. package/dist/json/extractColorScaleLegends.d.ts.map +1 -1
  44. package/dist/json/extractColorScaleLegends.js +0 -1
  45. package/dist/json/extractColorScaleLegends.js.map +1 -1
  46. package/dist/json/layerCompatibility.d.ts.map +1 -1
  47. package/dist/json/layerCompatibility.js +2 -0
  48. package/dist/json/layerCompatibility.js.map +1 -1
  49. package/dist/mapConfigUtils.d.ts +62 -0
  50. package/dist/mapConfigUtils.d.ts.map +1 -0
  51. package/dist/mapConfigUtils.js +233 -0
  52. package/dist/mapConfigUtils.js.map +1 -0
  53. package/dist/mapDataPolicy.d.ts +4 -0
  54. package/dist/mapDataPolicy.d.ts.map +1 -0
  55. package/dist/mapDataPolicy.js +25 -0
  56. package/dist/mapDataPolicy.js.map +1 -0
  57. package/dist/mapLayerConfigUtils.d.ts +38 -0
  58. package/dist/mapLayerConfigUtils.d.ts.map +1 -0
  59. package/dist/mapLayerConfigUtils.js +185 -0
  60. package/dist/mapLayerConfigUtils.js.map +1 -0
  61. package/dist/prepare/wkbDecoder.d.ts.map +1 -1
  62. package/dist/prepare/wkbDecoder.js +266 -67
  63. package/dist/prepare/wkbDecoder.js.map +1 -1
  64. package/dist/prepare/wkbParser.d.ts +19 -0
  65. package/dist/prepare/wkbParser.d.ts.map +1 -0
  66. package/dist/prepare/wkbParser.js +115 -0
  67. package/dist/prepare/wkbParser.js.map +1 -0
  68. package/dist/types.d.ts +8 -0
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/package.json +8 -6
  72. package/dist/useDeckLayersReadyRedraw.d.ts +0 -13
  73. package/dist/useDeckLayersReadyRedraw.d.ts.map +0 -1
  74. package/dist/useDeckLayersReadyRedraw.js +0 -35
  75. package/dist/useDeckLayersReadyRedraw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapConfigUtils.js","sourceRoot":"","sources":["../src/mapConfigUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {MosaicDashboardPanelConfigType} from '@sqlrooms/mosaic';\nimport type {DataTable} from '@sqlrooms/duckdb';\nimport {\n createDeckMapDashboardPanelConfig,\n type DeckMapDashboardPanelConfig,\n} from './dashboardConfig';\nimport type {GeometryEncodingHint} from './prepare/types';\n\nconst LONGITUDE_COLUMN_NAMES = ['longitude', 'lon', 'lng', 'long', 'x'];\nconst LATITUDE_COLUMN_NAMES = ['latitude', 'lat', 'y'];\nconst GEOMETRY_COLUMN_NAMES = ['geometry', 'geom'];\nconst DEFAULT_GEOMETRY_COLUMN = '__sqlrooms_geom';\nconst DEFAULT_FILL_COLOR = [56, 189, 248, 180] as const;\n\nexport type DeckMapConfigColumn = {name: string; type?: string};\nexport type DeckMapTableReference =\n | string\n | {\n database?: string;\n schema?: string;\n table?: string;\n };\nexport type DeckMapFillColor =\n | [number, number, number]\n | [number, number, number, number];\n\nfunction findColumnByName(\n columns: DeckMapConfigColumn[],\n candidates: string[],\n) {\n const candidateSet = new Set(candidates);\n return columns.find((column) => candidateSet.has(column.name.toLowerCase()))\n ?.name;\n}\n\nexport function findDeckMapLongitudeLatitudeColumns(\n columns?: DeckMapConfigColumn[],\n) {\n if (!columns) return null;\n const longitudeColumn = findColumnByName(columns, LONGITUDE_COLUMN_NAMES);\n const latitudeColumn = findColumnByName(columns, LATITUDE_COLUMN_NAMES);\n return longitudeColumn && latitudeColumn\n ? {longitudeColumn, latitudeColumn}\n : null;\n}\n\nexport function findLongitudeLatitudeColumns(table?: DataTable) {\n if (!table) return null;\n return findDeckMapLongitudeLatitudeColumns(table.columns);\n}\n\nfunction inferGeometryEncodingHint(\n column: DeckMapConfigColumn,\n): GeometryEncodingHint | undefined {\n const type = column.type?.toLowerCase();\n if (!type) return undefined;\n if (\n type.includes('wkb') ||\n type.includes('blob') ||\n type.includes('binary')\n ) {\n return 'wkb';\n }\n if (\n type.includes('wkt') ||\n type.includes('varchar') ||\n type.includes('text')\n ) {\n return 'wkt';\n }\n return undefined;\n}\n\nexport function findDeckMapGeometryColumn(columns?: DeckMapConfigColumn[]) {\n if (!columns) return null;\n\n const namedGeometryColumn = findColumnByName(columns, GEOMETRY_COLUMN_NAMES);\n const geometryColumn =\n (namedGeometryColumn\n ? columns.find((column) => column.name === namedGeometryColumn)\n : undefined) ??\n columns.find((column) => {\n const type = column.type?.toLowerCase() ?? '';\n return type.includes('geometry') || type.includes('geoarrow');\n });\n\n if (!geometryColumn) return null;\n return {\n geometryColumn: geometryColumn.name,\n geometryEncodingHint: inferGeometryEncodingHint(geometryColumn),\n };\n}\n\nexport function findGeometryColumn(table?: DataTable) {\n if (!table) return null;\n return findDeckMapGeometryColumn(table.columns);\n}\n\nexport function quoteDeckMapSqlIdentifier(identifier: string) {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nexport function quoteDeckMapSqlTableReference(\n tableReference: DeckMapTableReference,\n) {\n if (typeof tableReference === 'string') {\n return tableReference\n .split('.')\n .map((part) => quoteDeckMapSqlIdentifier(part))\n .join('.');\n }\n return [tableReference.database, tableReference.schema, tableReference.table]\n .filter((part): part is string => Boolean(part))\n .map(quoteDeckMapSqlIdentifier)\n .join('.');\n}\n\nfunction ensureDeckMapColumnExists(\n columns: DeckMapConfigColumn[],\n columnName: string,\n role: string,\n) {\n if (!columns.some((column) => column.name === columnName)) {\n throw new Error(\n `Unknown ${role} column \"${columnName}\". Available columns: ${columns\n .map((column) => column.name)\n .join(', ')}.`,\n );\n }\n}\n\nfunction resolveDeckMapCoordinateColumns(options: {\n columns: DeckMapConfigColumn[];\n longitudeColumn?: string;\n latitudeColumn?: string;\n}) {\n const coordinates =\n options.longitudeColumn && options.latitudeColumn\n ? {\n longitudeColumn: options.longitudeColumn,\n latitudeColumn: options.latitudeColumn,\n }\n : findDeckMapLongitudeLatitudeColumns(options.columns);\n\n if (!coordinates) {\n throw new Error(\n 'Could not find longitude/latitude columns. Pass longitudeColumn and latitudeColumn explicitly, or provide geometryColumn.',\n );\n }\n\n ensureDeckMapColumnExists(\n options.columns,\n coordinates.longitudeColumn,\n 'longitude',\n );\n ensureDeckMapColumnExists(\n options.columns,\n coordinates.latitudeColumn,\n 'latitude',\n );\n return coordinates;\n}\n\nfunction createDeckMapPointSourceSql(options: {\n sourceSqlQuery?: string;\n tableReference: DeckMapTableReference;\n longitudeColumn: string;\n latitudeColumn: string;\n geometryColumn: string;\n}) {\n const quotedLongitude = quoteDeckMapSqlIdentifier(options.longitudeColumn);\n const quotedLatitude = quoteDeckMapSqlIdentifier(options.latitudeColumn);\n const cleanedSourceSqlQuery = options.sourceSqlQuery\n ?.trim()\n .replace(/(?:\\s*;+\\s*)+$/, '');\n const baseSource = cleanedSourceSqlQuery\n ? `(${cleanedSourceSqlQuery}) AS \"__sqlrooms_dashboard_map_source\"`\n : quoteDeckMapSqlTableReference(options.tableReference);\n\n return [\n `SELECT *, ST_AsWKB(ST_Point(${quotedLongitude}, ${quotedLatitude})) AS ${quoteDeckMapSqlIdentifier(options.geometryColumn)}`,\n `FROM ${baseSource}`,\n `WHERE ${quotedLongitude} IS NOT NULL AND ${quotedLatitude} IS NOT NULL`,\n ].join(' ');\n}\n\nexport function normalizeDeckMapFillColor(\n fillColor?: number[],\n): DeckMapFillColor {\n if (fillColor?.length === 3) {\n return [fillColor[0]!, fillColor[1]!, fillColor[2]!];\n }\n if (fillColor?.length === 4) {\n return [fillColor[0]!, fillColor[1]!, fillColor[2]!, fillColor[3]!];\n }\n return [...DEFAULT_FILL_COLOR];\n}\n\nexport function createDeckMapDashboardConfigForTable(options: {\n tableName: string;\n columns: DeckMapConfigColumn[];\n tableReference?: DeckMapTableReference;\n sourceSqlQuery?: string;\n longitudeColumn?: string;\n latitudeColumn?: string;\n geometryColumn?: string;\n geometryEncodingHint?: GeometryEncodingHint;\n pointRadius?: number;\n fillColor?: DeckMapFillColor;\n mapStyle?: string;\n}): DeckMapDashboardPanelConfig {\n const datasetId = options.tableName;\n const explicitGeometryColumn = options.geometryColumn?.trim() || undefined;\n const detectedCoordinates =\n options.longitudeColumn && options.latitudeColumn\n ? {\n longitudeColumn: options.longitudeColumn,\n latitudeColumn: options.latitudeColumn,\n }\n : findDeckMapLongitudeLatitudeColumns(options.columns);\n const detectedGeometryColumn = explicitGeometryColumn\n ? {\n geometryColumn: explicitGeometryColumn,\n geometryEncodingHint: options.geometryEncodingHint,\n }\n : detectedCoordinates\n ? null\n : findDeckMapGeometryColumn(options.columns);\n const coordinates = detectedGeometryColumn\n ? undefined\n : resolveDeckMapCoordinateColumns({\n columns: options.columns,\n longitudeColumn: options.longitudeColumn,\n latitudeColumn: options.latitudeColumn,\n });\n const geometryColumn =\n detectedGeometryColumn?.geometryColumn ?? DEFAULT_GEOMETRY_COLUMN;\n const geometryEncodingHint =\n options.geometryEncodingHint ??\n detectedGeometryColumn?.geometryEncodingHint;\n const source = coordinates\n ? {\n sqlQuery: createDeckMapPointSourceSql({\n sourceSqlQuery: options.sourceSqlQuery,\n tableReference: options.tableReference ?? options.tableName,\n longitudeColumn: coordinates.longitudeColumn,\n latitudeColumn: coordinates.latitudeColumn,\n geometryColumn,\n }),\n }\n : options.sourceSqlQuery\n ? {sqlQuery: options.sourceSqlQuery}\n : {tableName: options.tableName};\n\n if (detectedGeometryColumn) {\n ensureDeckMapColumnExists(\n options.columns,\n detectedGeometryColumn.geometryColumn,\n 'geometry',\n );\n }\n\n return {\n spec: {\n initialViewState: {longitude: 0, latitude: 20, zoom: 1.5},\n layers: [\n {\n '@@type': coordinates\n ? 'GeoArrowScatterplotLayer'\n : 'GeoArrowPolygonLayer',\n id: datasetId,\n _sqlroomsBinding: {dataset: datasetId},\n filled: true,\n stroked: false,\n pickable: true,\n radiusUnits: 'pixels',\n getRadius: options.pointRadius ?? 4,\n getFillColor: options.fillColor ?? [...DEFAULT_FILL_COLOR],\n },\n ],\n },\n datasets: {\n [datasetId]: {\n source,\n geometryColumn,\n geometryEncodingHint: coordinates ? 'wkb' : geometryEncodingHint,\n },\n },\n ...(coordinates\n ? {\n fitToData: {\n dataset: datasetId,\n longitudeColumn: coordinates.longitudeColumn,\n latitudeColumn: coordinates.latitudeColumn,\n padding: 40,\n maxZoom: 12,\n },\n }\n : {}),\n ...(options.mapStyle ? {mapStyle: options.mapStyle} : {}),\n };\n}\n\nexport function createDeckMapDashboardPanelConfigForTable(options: {\n title?: string;\n tableName: string;\n columns: DeckMapConfigColumn[];\n tableReference?: DeckMapTableReference;\n sourceSqlQuery?: string;\n longitudeColumn?: string;\n latitudeColumn?: string;\n geometryColumn?: string;\n geometryEncodingHint?: GeometryEncodingHint;\n pointRadius?: number;\n fillColor?: DeckMapFillColor;\n mapStyle?: string;\n}) {\n return createDeckMapDashboardPanelConfig({\n title: options.title,\n ...createDeckMapDashboardConfigForTable(options),\n });\n}\n\nexport function regenerateMapConfigForTable(\n panel: MosaicDashboardPanelConfigType,\n table: DataTable,\n longitudeColumn?: string,\n latitudeColumn?: string,\n) {\n if (\n !(longitudeColumn && latitudeColumn) &&\n !findLongitudeLatitudeColumns(table) &&\n !findGeometryColumn(table)\n ) {\n return panel.config;\n }\n\n const existingConfig = panel.config as any;\n const nextConfig = createDeckMapDashboardConfigForTable({\n tableName: table.tableName,\n columns: table.columns,\n tableReference: table.table,\n longitudeColumn,\n latitudeColumn,\n });\n\n return {\n ...existingConfig,\n ...nextConfig,\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ChartDataPolicy } from '@sqlrooms/mosaic';
2
+ import { type DeckMapDashboardPanelConfig } from './dashboardConfig';
3
+ export declare function getDeckMapDataPolicy(config: DeckMapDashboardPanelConfig | null | undefined): ChartDataPolicy;
4
+ //# sourceMappingURL=mapDataPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapDataPolicy.d.ts","sourceRoot":"","sources":["../src/mapDataPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,mBAAmB,CAAC;AAyB3B,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACrD,eAAe,CAQjB"}
@@ -0,0 +1,25 @@
1
+ import { DEFAULT_DECK_MAP_MAX_DATA_POINTS, } from './dashboardConfig';
2
+ const DEFAULT_DECK_MAP_DATA_POLICY_REASON = 'Map panels render source rows as interactive deck.gl features. Filter, aggregate, or switch to a smaller source query before rendering this map.';
3
+ function applyDeckMapDataPolicyOverride(basePolicy, override) {
4
+ if (!override) {
5
+ return basePolicy;
6
+ }
7
+ if (override.disabled) {
8
+ return {
9
+ ...basePolicy,
10
+ disabled: true,
11
+ };
12
+ }
13
+ return {
14
+ ...basePolicy,
15
+ ...(override.maxRows !== undefined ? { maxRows: override.maxRows } : {}),
16
+ ...(override.reason !== undefined ? { reason: override.reason } : {}),
17
+ };
18
+ }
19
+ export function getDeckMapDataPolicy(config) {
20
+ return applyDeckMapDataPolicyOverride({
21
+ maxRows: DEFAULT_DECK_MAP_MAX_DATA_POINTS,
22
+ reason: DEFAULT_DECK_MAP_DATA_POLICY_REASON,
23
+ }, config?.dataPolicy);
24
+ }
25
+ //# sourceMappingURL=mapDataPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapDataPolicy.js","sourceRoot":"","sources":["../src/mapDataPolicy.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gCAAgC,GAGjC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,mCAAmC,GACvC,kJAAkJ,CAAC;AAErJ,SAAS,8BAA8B,CACrC,UAA2B,EAC3B,QAA+C;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,GAAG,UAAU;YACb,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,UAAU;QACb,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAsD;IAEtD,OAAO,8BAA8B,CACnC;QACE,OAAO,EAAE,gCAAgC;QACzC,MAAM,EAAE,mCAAmC;KAC5C,EACD,MAAM,EAAE,UAAU,CACnB,CAAC;AACJ,CAAC","sourcesContent":["import type {ChartDataPolicy} from '@sqlrooms/mosaic';\nimport {\n DEFAULT_DECK_MAP_MAX_DATA_POINTS,\n type DeckMapDashboardPanelConfig,\n type DeckMapDataPolicyOverride,\n} from './dashboardConfig';\n\nconst DEFAULT_DECK_MAP_DATA_POLICY_REASON =\n 'Map panels render source rows as interactive deck.gl features. Filter, aggregate, or switch to a smaller source query before rendering this map.';\n\nfunction applyDeckMapDataPolicyOverride(\n basePolicy: ChartDataPolicy,\n override: DeckMapDataPolicyOverride | undefined,\n): ChartDataPolicy {\n if (!override) {\n return basePolicy;\n }\n if (override.disabled) {\n return {\n ...basePolicy,\n disabled: true,\n };\n }\n return {\n ...basePolicy,\n ...(override.maxRows !== undefined ? {maxRows: override.maxRows} : {}),\n ...(override.reason !== undefined ? {reason: override.reason} : {}),\n };\n}\n\nexport function getDeckMapDataPolicy(\n config: DeckMapDashboardPanelConfig | null | undefined,\n): ChartDataPolicy {\n return applyDeckMapDataPolicyOverride(\n {\n maxRows: DEFAULT_DECK_MAP_MAX_DATA_POINTS,\n reason: DEFAULT_DECK_MAP_DATA_POLICY_REASON,\n },\n config?.dataPolicy,\n );\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import type { ColorScaleConfig, ColorScaleScheme } from '@sqlrooms/color-scales';
2
+ import type { DeckMapDashboardPanelConfig } from './dashboardConfig';
3
+ import type { DeckAutoLayerType } from './types';
4
+ export type DeckMapLayerRecord = Record<string, unknown>;
5
+ export type DeckMapLayerColorScaleFunction = ColorScaleConfig & {
6
+ '@@function': 'colorScale';
7
+ };
8
+ export type DeckMapLayerColorAccessor = 'getFillColor' | 'getLineColor' | 'getColor' | 'getSourceColor' | 'getTargetColor';
9
+ export declare const DECK_MAP_LAYER_TYPE_OPTIONS: ReadonlyArray<{
10
+ value: DeckAutoLayerType | 'GeoArrowSolidPolygonLayer';
11
+ label: string;
12
+ }>;
13
+ export declare const DECK_MAP_COLOR_ACCESSOR_OPTIONS: ReadonlyArray<{
14
+ value: DeckMapLayerColorAccessor;
15
+ label: string;
16
+ }>;
17
+ export declare const DECK_MAP_COLOR_SCALE_TYPE_OPTIONS: ReadonlyArray<{
18
+ value: ColorScaleConfig['type'];
19
+ label: string;
20
+ defaultScheme: ColorScaleScheme;
21
+ }>;
22
+ export declare function getDeckMapLayerRecords(config: DeckMapDashboardPanelConfig): DeckMapLayerRecord[];
23
+ export declare function getDeckMapLayerDatasetId(layer: DeckMapLayerRecord | undefined): string | undefined;
24
+ export declare function usesGeometryColumnSetting(layerType: unknown): boolean;
25
+ export declare function getDeckMapColorAccessorOptions(layerType: unknown): typeof DECK_MAP_COLOR_ACCESSOR_OPTIONS;
26
+ export declare function updateDeckMapLayer(config: DeckMapDashboardPanelConfig, layerIndex: number, updater: (layer: DeckMapLayerRecord) => DeckMapLayerRecord): DeckMapDashboardPanelConfig;
27
+ export declare function setDeckMapLayerType(config: DeckMapDashboardPanelConfig, layerIndex: number, layerType: string): DeckMapDashboardPanelConfig;
28
+ export declare function setDeckMapLayerGeometryColumn(config: DeckMapDashboardPanelConfig, layerIndex: number, geometryColumn: string): DeckMapDashboardPanelConfig;
29
+ export declare function getDeckMapLayerColorScale(layer: DeckMapLayerRecord | undefined, accessor: DeckMapLayerColorAccessor): DeckMapLayerColorScaleFunction | undefined;
30
+ export declare function setDeckMapLayerColorScale(config: DeckMapDashboardPanelConfig, layerIndex: number, accessor: DeckMapLayerColorAccessor, colorScale: DeckMapLayerColorScaleFunction): DeckMapDashboardPanelConfig;
31
+ export declare function clearDeckMapLayerColorScale(config: DeckMapDashboardPanelConfig, layerIndex: number, accessor: DeckMapLayerColorAccessor): DeckMapDashboardPanelConfig;
32
+ export declare function createDeckMapLayerColorScale(options: {
33
+ field: string;
34
+ type?: ColorScaleConfig['type'];
35
+ scheme?: ColorScaleScheme;
36
+ title?: string;
37
+ }): DeckMapLayerColorScaleFunction;
38
+ //# sourceMappingURL=mapLayerConfigUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapLayerConfigUtils.d.ts","sourceRoot":"","sources":["../src/mapLayerConfigUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAG/C,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzD,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,GAAG;IAC9D,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC,cAAc,GACd,cAAc,GACd,UAAU,GACV,gBAAgB,GAChB,gBAAgB,CAAC;AAErB,eAAO,MAAM,2BAA2B,EAAE,aAAa,CAAC;IACtD,KAAK,EAAE,iBAAiB,GAAG,2BAA2B,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;CACf,CAWA,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,aAAa,CAAC;IAC1D,KAAK,EAAE,yBAAyB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,CAMA,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,aAAa,CAAC;IAC5D,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAMA,CAAC;AAuBF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,2BAA2B,GAClC,kBAAkB,EAAE,CAGtB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,kBAAkB,GAAG,SAAS,GACpC,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,WAK3D;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,OAAO,GACjB,OAAO,+BAA+B,CAsBxC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,kBAAkB,GACzD,2BAA2B,CAoB7B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,2BAA2B,CAK7B;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,2BAA2B,CAiB7B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,QAAQ,EAAE,yBAAyB,GAClC,8BAA8B,GAAG,SAAS,CAK5C;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,8BAA8B,GACzC,2BAA2B,CAK7B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,2BAA2B,EACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,yBAAyB,GAClC,2BAA2B,CAM7B;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,8BAA8B,CAuEjC"}
@@ -0,0 +1,185 @@
1
+ import { isColorScaleFunction } from './json/layerConfig';
2
+ export const DECK_MAP_LAYER_TYPE_OPTIONS = [
3
+ { value: 'GeoArrowScatterplotLayer', label: 'Scatterplot' },
4
+ { value: 'GeoArrowHeatmapLayer', label: 'Heatmap' },
5
+ { value: 'GeoArrowColumnLayer', label: 'Column' },
6
+ { value: 'GeoArrowPathLayer', label: 'Path' },
7
+ { value: 'GeoArrowPolygonLayer', label: 'Polygon' },
8
+ { value: 'GeoArrowSolidPolygonLayer', label: 'Solid polygon' },
9
+ { value: 'GeoArrowArcLayer', label: 'Arc' },
10
+ { value: 'GeoArrowTripsLayer', label: 'Trips' },
11
+ { value: 'GeoArrowH3HexagonLayer', label: 'H3 hexagon' },
12
+ { value: 'GeoJsonLayer', label: 'GeoJSON' },
13
+ ];
14
+ export const DECK_MAP_COLOR_ACCESSOR_OPTIONS = [
15
+ { value: 'getFillColor', label: 'Fill color' },
16
+ { value: 'getLineColor', label: 'Line color' },
17
+ { value: 'getColor', label: 'Color' },
18
+ { value: 'getSourceColor', label: 'Source color' },
19
+ { value: 'getTargetColor', label: 'Target color' },
20
+ ];
21
+ export const DECK_MAP_COLOR_SCALE_TYPE_OPTIONS = [
22
+ { value: 'sequential', label: 'Sequential', defaultScheme: 'Viridis' },
23
+ { value: 'diverging', label: 'Diverging', defaultScheme: 'RdBu' },
24
+ { value: 'quantize', label: 'Quantize', defaultScheme: 'YlOrRd' },
25
+ { value: 'quantile', label: 'Quantile', defaultScheme: 'YlOrRd' },
26
+ { value: 'categorical', label: 'Categorical', defaultScheme: 'Tableau10' },
27
+ ];
28
+ const GEOMETRY_COLUMN_LAYER_TYPES = new Set([
29
+ 'geoarrowpolygonlayer',
30
+ 'geoarrowsolidpolygonlayer',
31
+ 'geojsonlayer',
32
+ 'polygonlayer',
33
+ 'solidpolygonlayer',
34
+ 'geojson',
35
+ 'polygon',
36
+ 'solid polygon',
37
+ ]);
38
+ function isRecord(value) {
39
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
40
+ }
41
+ function getObjectSpec(config) {
42
+ return isRecord(config.spec) ? config.spec : undefined;
43
+ }
44
+ export function getDeckMapLayerRecords(config) {
45
+ const layers = getObjectSpec(config)?.layers;
46
+ return Array.isArray(layers) ? layers.filter(isRecord) : [];
47
+ }
48
+ export function getDeckMapLayerDatasetId(layer) {
49
+ const binding = layer?._sqlroomsBinding;
50
+ if (!isRecord(binding))
51
+ return undefined;
52
+ return typeof binding.dataset === 'string' ? binding.dataset : undefined;
53
+ }
54
+ export function usesGeometryColumnSetting(layerType) {
55
+ return (typeof layerType === 'string' &&
56
+ GEOMETRY_COLUMN_LAYER_TYPES.has(layerType.toLowerCase()));
57
+ }
58
+ export function getDeckMapColorAccessorOptions(layerType) {
59
+ if (layerType === 'GeoArrowPathLayer' || layerType === 'GeoArrowTripsLayer') {
60
+ return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter((option) => option.value === 'getColor');
61
+ }
62
+ if (layerType === 'GeoArrowArcLayer') {
63
+ return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter((option) => option.value === 'getSourceColor' || option.value === 'getTargetColor');
64
+ }
65
+ if (layerType === 'GeoArrowHeatmapLayer') {
66
+ return [];
67
+ }
68
+ return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter((option) => option.value === 'getFillColor' || option.value === 'getLineColor');
69
+ }
70
+ export function updateDeckMapLayer(config, layerIndex, updater) {
71
+ const spec = getObjectSpec(config);
72
+ if (!spec || !Array.isArray(spec.layers)) {
73
+ return config;
74
+ }
75
+ const layer = spec.layers[layerIndex];
76
+ if (!isRecord(layer)) {
77
+ return config;
78
+ }
79
+ return {
80
+ ...config,
81
+ spec: {
82
+ ...spec,
83
+ layers: spec.layers.map((candidate, index) => index === layerIndex ? updater({ ...layer }) : candidate),
84
+ },
85
+ };
86
+ }
87
+ export function setDeckMapLayerType(config, layerIndex, layerType) {
88
+ return updateDeckMapLayer(config, layerIndex, (layer) => ({
89
+ ...layer,
90
+ '@@type': layerType,
91
+ }));
92
+ }
93
+ export function setDeckMapLayerGeometryColumn(config, layerIndex, geometryColumn) {
94
+ const layer = getDeckMapLayerRecords(config)[layerIndex];
95
+ const datasetId = getDeckMapLayerDatasetId(layer);
96
+ if (!datasetId || !config.datasets?.[datasetId]) {
97
+ return config;
98
+ }
99
+ return {
100
+ ...config,
101
+ datasets: {
102
+ ...config.datasets,
103
+ [datasetId]: {
104
+ ...config.datasets[datasetId],
105
+ geometryColumn,
106
+ },
107
+ },
108
+ };
109
+ }
110
+ export function getDeckMapLayerColorScale(layer, accessor) {
111
+ const value = layer?.[accessor];
112
+ return isColorScaleFunction(value)
113
+ ? value
114
+ : undefined;
115
+ }
116
+ export function setDeckMapLayerColorScale(config, layerIndex, accessor, colorScale) {
117
+ return updateDeckMapLayer(config, layerIndex, (layer) => ({
118
+ ...layer,
119
+ [accessor]: colorScale,
120
+ }));
121
+ }
122
+ export function clearDeckMapLayerColorScale(config, layerIndex, accessor) {
123
+ return updateDeckMapLayer(config, layerIndex, (layer) => {
124
+ const nextLayer = { ...layer };
125
+ delete nextLayer[accessor];
126
+ return nextLayer;
127
+ });
128
+ }
129
+ export function createDeckMapLayerColorScale(options) {
130
+ const type = options.type ?? 'sequential';
131
+ const scheme = options.scheme ??
132
+ DECK_MAP_COLOR_SCALE_TYPE_OPTIONS.find((option) => option.value === type)
133
+ ?.defaultScheme ??
134
+ 'Viridis';
135
+ const base = {
136
+ '@@function': 'colorScale',
137
+ field: options.field,
138
+ legend: { title: options.title ?? options.field },
139
+ };
140
+ if (type === 'categorical') {
141
+ return {
142
+ ...base,
143
+ type,
144
+ scheme: scheme,
145
+ };
146
+ }
147
+ if (type === 'diverging') {
148
+ return {
149
+ ...base,
150
+ type,
151
+ scheme: scheme,
152
+ domain: 'auto',
153
+ };
154
+ }
155
+ if (type === 'quantize') {
156
+ return {
157
+ ...base,
158
+ type,
159
+ scheme: scheme,
160
+ domain: 'auto',
161
+ };
162
+ }
163
+ if (type === 'quantile') {
164
+ return {
165
+ ...base,
166
+ type,
167
+ scheme: scheme,
168
+ };
169
+ }
170
+ if (type === 'threshold') {
171
+ return {
172
+ ...base,
173
+ type,
174
+ scheme: scheme,
175
+ thresholds: [],
176
+ };
177
+ }
178
+ return {
179
+ ...base,
180
+ type: 'sequential',
181
+ scheme: scheme,
182
+ domain: 'auto',
183
+ };
184
+ }
185
+ //# sourceMappingURL=mapLayerConfigUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapLayerConfigUtils.js","sourceRoot":"","sources":["../src/mapLayerConfigUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ColorScaleConfig, ColorScaleScheme} from '@sqlrooms/color-scales';\nimport type {DeckMapDashboardPanelConfig} from './dashboardConfig';\nimport type {DeckAutoLayerType} from './types';\nimport {isColorScaleFunction} from './json/layerConfig';\n\nexport type DeckMapLayerRecord = Record<string, unknown>;\n\nexport type DeckMapLayerColorScaleFunction = ColorScaleConfig & {\n '@@function': 'colorScale';\n};\n\nexport type DeckMapLayerColorAccessor =\n | 'getFillColor'\n | 'getLineColor'\n | 'getColor'\n | 'getSourceColor'\n | 'getTargetColor';\n\nexport const DECK_MAP_LAYER_TYPE_OPTIONS: ReadonlyArray<{\n value: DeckAutoLayerType | 'GeoArrowSolidPolygonLayer';\n label: string;\n}> = [\n {value: 'GeoArrowScatterplotLayer', label: 'Scatterplot'},\n {value: 'GeoArrowHeatmapLayer', label: 'Heatmap'},\n {value: 'GeoArrowColumnLayer', label: 'Column'},\n {value: 'GeoArrowPathLayer', label: 'Path'},\n {value: 'GeoArrowPolygonLayer', label: 'Polygon'},\n {value: 'GeoArrowSolidPolygonLayer', label: 'Solid polygon'},\n {value: 'GeoArrowArcLayer', label: 'Arc'},\n {value: 'GeoArrowTripsLayer', label: 'Trips'},\n {value: 'GeoArrowH3HexagonLayer', label: 'H3 hexagon'},\n {value: 'GeoJsonLayer', label: 'GeoJSON'},\n];\n\nexport const DECK_MAP_COLOR_ACCESSOR_OPTIONS: ReadonlyArray<{\n value: DeckMapLayerColorAccessor;\n label: string;\n}> = [\n {value: 'getFillColor', label: 'Fill color'},\n {value: 'getLineColor', label: 'Line color'},\n {value: 'getColor', label: 'Color'},\n {value: 'getSourceColor', label: 'Source color'},\n {value: 'getTargetColor', label: 'Target color'},\n];\n\nexport const DECK_MAP_COLOR_SCALE_TYPE_OPTIONS: ReadonlyArray<{\n value: ColorScaleConfig['type'];\n label: string;\n defaultScheme: ColorScaleScheme;\n}> = [\n {value: 'sequential', label: 'Sequential', defaultScheme: 'Viridis'},\n {value: 'diverging', label: 'Diverging', defaultScheme: 'RdBu'},\n {value: 'quantize', label: 'Quantize', defaultScheme: 'YlOrRd'},\n {value: 'quantile', label: 'Quantile', defaultScheme: 'YlOrRd'},\n {value: 'categorical', label: 'Categorical', defaultScheme: 'Tableau10'},\n];\n\nconst GEOMETRY_COLUMN_LAYER_TYPES = new Set([\n 'geoarrowpolygonlayer',\n 'geoarrowsolidpolygonlayer',\n 'geojsonlayer',\n 'polygonlayer',\n 'solidpolygonlayer',\n 'geojson',\n 'polygon',\n 'solid polygon',\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction getObjectSpec(\n config: DeckMapDashboardPanelConfig,\n): Record<string, unknown> | undefined {\n return isRecord(config.spec) ? config.spec : undefined;\n}\n\nexport function getDeckMapLayerRecords(\n config: DeckMapDashboardPanelConfig,\n): DeckMapLayerRecord[] {\n const layers = getObjectSpec(config)?.layers;\n return Array.isArray(layers) ? layers.filter(isRecord) : [];\n}\n\nexport function getDeckMapLayerDatasetId(\n layer: DeckMapLayerRecord | undefined,\n): string | undefined {\n const binding = layer?._sqlroomsBinding;\n if (!isRecord(binding)) return undefined;\n return typeof binding.dataset === 'string' ? binding.dataset : undefined;\n}\n\nexport function usesGeometryColumnSetting(layerType: unknown) {\n return (\n typeof layerType === 'string' &&\n GEOMETRY_COLUMN_LAYER_TYPES.has(layerType.toLowerCase())\n );\n}\n\nexport function getDeckMapColorAccessorOptions(\n layerType: unknown,\n): typeof DECK_MAP_COLOR_ACCESSOR_OPTIONS {\n if (layerType === 'GeoArrowPathLayer' || layerType === 'GeoArrowTripsLayer') {\n return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter(\n (option) => option.value === 'getColor',\n );\n }\n\n if (layerType === 'GeoArrowArcLayer') {\n return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter(\n (option) =>\n option.value === 'getSourceColor' || option.value === 'getTargetColor',\n );\n }\n\n if (layerType === 'GeoArrowHeatmapLayer') {\n return [];\n }\n\n return DECK_MAP_COLOR_ACCESSOR_OPTIONS.filter(\n (option) =>\n option.value === 'getFillColor' || option.value === 'getLineColor',\n );\n}\n\nexport function updateDeckMapLayer(\n config: DeckMapDashboardPanelConfig,\n layerIndex: number,\n updater: (layer: DeckMapLayerRecord) => DeckMapLayerRecord,\n): DeckMapDashboardPanelConfig {\n const spec = getObjectSpec(config);\n if (!spec || !Array.isArray(spec.layers)) {\n return config;\n }\n\n const layer = spec.layers[layerIndex];\n if (!isRecord(layer)) {\n return config;\n }\n\n return {\n ...config,\n spec: {\n ...spec,\n layers: spec.layers.map((candidate, index) =>\n index === layerIndex ? updater({...layer}) : candidate,\n ),\n },\n };\n}\n\nexport function setDeckMapLayerType(\n config: DeckMapDashboardPanelConfig,\n layerIndex: number,\n layerType: string,\n): DeckMapDashboardPanelConfig {\n return updateDeckMapLayer(config, layerIndex, (layer) => ({\n ...layer,\n '@@type': layerType,\n }));\n}\n\nexport function setDeckMapLayerGeometryColumn(\n config: DeckMapDashboardPanelConfig,\n layerIndex: number,\n geometryColumn: string,\n): DeckMapDashboardPanelConfig {\n const layer = getDeckMapLayerRecords(config)[layerIndex];\n const datasetId = getDeckMapLayerDatasetId(layer);\n if (!datasetId || !config.datasets?.[datasetId]) {\n return config;\n }\n\n return {\n ...config,\n datasets: {\n ...config.datasets,\n [datasetId]: {\n ...config.datasets[datasetId],\n geometryColumn,\n },\n },\n };\n}\n\nexport function getDeckMapLayerColorScale(\n layer: DeckMapLayerRecord | undefined,\n accessor: DeckMapLayerColorAccessor,\n): DeckMapLayerColorScaleFunction | undefined {\n const value = layer?.[accessor];\n return isColorScaleFunction(value)\n ? (value as DeckMapLayerColorScaleFunction)\n : undefined;\n}\n\nexport function setDeckMapLayerColorScale(\n config: DeckMapDashboardPanelConfig,\n layerIndex: number,\n accessor: DeckMapLayerColorAccessor,\n colorScale: DeckMapLayerColorScaleFunction,\n): DeckMapDashboardPanelConfig {\n return updateDeckMapLayer(config, layerIndex, (layer) => ({\n ...layer,\n [accessor]: colorScale,\n }));\n}\n\nexport function clearDeckMapLayerColorScale(\n config: DeckMapDashboardPanelConfig,\n layerIndex: number,\n accessor: DeckMapLayerColorAccessor,\n): DeckMapDashboardPanelConfig {\n return updateDeckMapLayer(config, layerIndex, (layer) => {\n const nextLayer = {...layer};\n delete nextLayer[accessor];\n return nextLayer;\n });\n}\n\nexport function createDeckMapLayerColorScale(options: {\n field: string;\n type?: ColorScaleConfig['type'];\n scheme?: ColorScaleScheme;\n title?: string;\n}): DeckMapLayerColorScaleFunction {\n const type = options.type ?? 'sequential';\n const scheme =\n options.scheme ??\n DECK_MAP_COLOR_SCALE_TYPE_OPTIONS.find((option) => option.value === type)\n ?.defaultScheme ??\n 'Viridis';\n const base = {\n '@@function': 'colorScale' as const,\n field: options.field,\n legend: {title: options.title ?? options.field},\n };\n\n if (type === 'categorical') {\n return {\n ...base,\n type,\n scheme: scheme as Extract<\n ColorScaleConfig,\n {type: 'categorical'}\n >['scheme'],\n };\n }\n\n if (type === 'diverging') {\n return {\n ...base,\n type,\n scheme: scheme as Extract<\n ColorScaleConfig,\n {type: 'diverging'}\n >['scheme'],\n domain: 'auto',\n };\n }\n\n if (type === 'quantize') {\n return {\n ...base,\n type,\n scheme: scheme as Extract<ColorScaleConfig, {type: 'quantize'}>['scheme'],\n domain: 'auto',\n };\n }\n\n if (type === 'quantile') {\n return {\n ...base,\n type,\n scheme: scheme as Extract<ColorScaleConfig, {type: 'quantile'}>['scheme'],\n };\n }\n\n if (type === 'threshold') {\n return {\n ...base,\n type,\n scheme: scheme as Extract<\n ColorScaleConfig,\n {type: 'threshold'}\n >['scheme'],\n thresholds: [],\n };\n }\n\n return {\n ...base,\n type: 'sequential',\n scheme: scheme as Extract<ColorScaleConfig, {type: 'sequential'}>['scheme'],\n domain: 'auto',\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wkbDecoder.d.ts","sourceRoot":"","sources":["../../src/prepare/wkbDecoder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAgJvD,eAAO,MAAM,kBAAkB,EAAE,eAuDhC,CAAC"}
1
+ {"version":3,"file":"wkbDecoder.d.ts","sourceRoot":"","sources":["../../src/prepare/wkbDecoder.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAmYvD,eAAO,MAAM,kBAAkB,EAAE,eAsEhC,CAAC"}