@sqlrooms/deck 0.29.0-rc.12 → 0.29.0-rc.13

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 (55) hide show
  1. package/README.md +144 -22
  2. package/dist/DeckJsonMap.d.ts.map +1 -1
  3. package/dist/DeckJsonMap.js +58 -12
  4. package/dist/DeckJsonMap.js.map +1 -1
  5. package/dist/DeckMapBasemapSelect.d.ts +9 -0
  6. package/dist/DeckMapBasemapSelect.d.ts.map +1 -0
  7. package/dist/DeckMapBasemapSelect.js +20 -0
  8. package/dist/DeckMapBasemapSelect.js.map +1 -0
  9. package/dist/DeckMapDefaultStylesProvider.d.ts +13 -19
  10. package/dist/DeckMapDefaultStylesProvider.d.ts.map +1 -1
  11. package/dist/DeckMapDefaultStylesProvider.js +11 -18
  12. package/dist/DeckMapDefaultStylesProvider.js.map +1 -1
  13. package/dist/DeckMapsSlice.d.ts +5 -0
  14. package/dist/DeckMapsSlice.d.ts.map +1 -1
  15. package/dist/DeckMapsSlice.js +6 -3
  16. package/dist/DeckMapsSlice.js.map +1 -1
  17. package/dist/MapSettings.d.ts.map +1 -1
  18. package/dist/MapSettings.js +3 -2
  19. package/dist/MapSettings.js.map +1 -1
  20. package/dist/ai.d.ts.map +1 -1
  21. package/dist/ai.js +15 -10
  22. package/dist/ai.js.map +1 -1
  23. package/dist/basemap.d.ts +23 -0
  24. package/dist/basemap.d.ts.map +1 -0
  25. package/dist/basemap.js +23 -0
  26. package/dist/basemap.js.map +1 -0
  27. package/dist/block.d.ts.map +1 -1
  28. package/dist/block.js +12 -8
  29. package/dist/block.js.map +1 -1
  30. package/dist/index.d.ts +4 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/mapAiSharedInstructions.d.ts.map +1 -1
  35. package/dist/mapAiSharedInstructions.js +1 -0
  36. package/dist/mapAiSharedInstructions.js.map +1 -1
  37. package/dist/mapConfig.d.ts +5 -0
  38. package/dist/mapConfig.d.ts.map +1 -1
  39. package/dist/mapConfig.js +28 -3
  40. package/dist/mapConfig.js.map +1 -1
  41. package/dist/mapConfigUtils.d.ts.map +1 -1
  42. package/dist/mapConfigUtils.js +7 -2
  43. package/dist/mapConfigUtils.js.map +1 -1
  44. package/dist/mapStyles.d.ts +16 -0
  45. package/dist/mapStyles.d.ts.map +1 -0
  46. package/dist/mapStyles.js +32 -0
  47. package/dist/mapStyles.js.map +1 -0
  48. package/dist/protomapsStyles.d.ts +18 -0
  49. package/dist/protomapsStyles.d.ts.map +1 -0
  50. package/dist/protomapsStyles.js +38 -0
  51. package/dist/protomapsStyles.js.map +1 -0
  52. package/dist/types.d.ts +13 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js.map +1 -1
  55. package/package.json +11 -9
@@ -43,6 +43,7 @@ export type DeckMapConfig = {
43
43
  spec: DeckJsonMapProps['spec'];
44
44
  datasets: Record<string, DeckMapDatasetConfig>;
45
45
  configMode?: DeckMapConfigMode;
46
+ /** Built-in basemap ID (`light`/`dark`) or custom style URL. */
46
47
  mapStyle?: string;
47
48
  mapProps?: Record<string, unknown>;
48
49
  showLegends?: boolean;
@@ -51,6 +52,10 @@ export type DeckMapConfig = {
51
52
  dataPolicy?: DeckMapDataPolicyOverride;
52
53
  settingsOpen?: boolean;
53
54
  };
55
+ /** Adds a creation-time basemap default while preserving explicit custom styles. */
56
+ export declare function withDefaultDeckMapStyle(config: DeckMapConfig): DeckMapConfig;
57
+ /** Retains a map's basemap on config replacement unless a new style is supplied. */
58
+ export declare function withPreservedDeckMapStyle(config: DeckMapConfig, previousConfig: DeckMapConfig | null): DeckMapConfig;
54
59
  /** Creates the portable empty configuration used for a new Deck map. */
55
60
  export declare function createEmptyDeckMapConfig(): DeckMapConfig;
56
61
  /** Adapter-facing dashboard panel shape; document resources never store it. */
@@ -1 +1 @@
1
- {"version":3,"file":"mapConfig.d.ts","sourceRoot":"","sources":["../src/mapConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapConfig.d.ts","sourceRoot":"","sources":["../src/mapConfig.ts"],"names":[],"mappings":"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"}
package/dist/mapConfig.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
+ import { getDefaultDeckMapStyle } from './mapStyles';
2
3
  export const DECK_MAP_DASHBOARD_PANEL_TYPE = 'deck-json-map';
3
4
  export const DEFAULT_DECK_MAP_MAX_DATA_POINTS = 100_000;
4
5
  /** Returns whether a map dataset source is a pinned literal SQL query. */
@@ -9,15 +10,39 @@ export function isDeckMapSqlDatasetSource(source) {
9
10
  export function isDeckMapTableDatasetSource(source) {
10
11
  return Boolean(source && 'tableName' in source);
11
12
  }
13
+ /** Adds a creation-time basemap default while preserving explicit custom styles. */
14
+ export function withDefaultDeckMapStyle(config) {
15
+ return config.mapStyle || config.mapProps?.mapStyle
16
+ ? config
17
+ : { ...config, mapStyle: getDefaultDeckMapStyle() };
18
+ }
19
+ /** Retains a map's basemap on config replacement unless a new style is supplied. */
20
+ export function withPreservedDeckMapStyle(config, previousConfig) {
21
+ if (config.mapStyle || config.mapProps?.mapStyle)
22
+ return config;
23
+ if (previousConfig?.mapStyle) {
24
+ return { ...config, mapStyle: previousConfig.mapStyle };
25
+ }
26
+ if (previousConfig?.mapProps?.mapStyle) {
27
+ return {
28
+ ...config,
29
+ mapProps: {
30
+ ...config.mapProps,
31
+ mapStyle: previousConfig.mapProps.mapStyle,
32
+ },
33
+ };
34
+ }
35
+ return config;
36
+ }
12
37
  /** Creates the portable empty configuration used for a new Deck map. */
13
38
  export function createEmptyDeckMapConfig() {
14
- return {
39
+ return withDefaultDeckMapStyle({
15
40
  spec: {
16
41
  initialViewState: { longitude: 0, latitude: 20, zoom: 1.5 },
17
42
  layers: [],
18
43
  },
19
44
  datasets: {},
20
- };
45
+ });
21
46
  }
22
47
  export const isDeckMapDashboardSqlDatasetSource = isDeckMapSqlDatasetSource;
23
48
  export const isDeckMapDashboardTableDatasetSource = isDeckMapTableDatasetSource;
@@ -28,7 +53,7 @@ export function createDeckMapDashboardPanelConfig(options) {
28
53
  id: createId(),
29
54
  type: DECK_MAP_DASHBOARD_PANEL_TYPE,
30
55
  title: title ?? 'Map',
31
- config: JSON.parse(JSON.stringify(config)),
56
+ config: JSON.parse(JSON.stringify(withDefaultDeckMapStyle(config))),
32
57
  };
33
58
  }
34
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mapConfig.js","sourceRoot":"","sources":["../src/mapConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAO9C,MAAM,CAAC,MAAM,6BAA6B,GAAG,eAAe,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,OAAO,CAAC;AAgBxD,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CACvC,MAAwC;IAExC,OAAO,OAAO,CAAC,MAAM,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CACzC,MAAwC;IAExC,OAAO,OAAO,CAAC,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,CAAC;AAClD,CAAC;AA2CD,wEAAwE;AACxE,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE;YACJ,gBAAgB,EAAE,EAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAC;YACzD,MAAM,EAAE,EAAE;SACX;QACD,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AASD,MAAM,CAAC,MAAM,kCAAkC,GAAG,yBAAyB,CAAC;AAC5E,MAAM,CAAC,MAAM,oCAAoC,GAAG,2BAA2B,CAAC;AAMhF,oEAAoE;AACpE,MAAM,UAAU,iCAAiC,CAC/C,OAAiD;IAEjD,MAAM,EAAC,KAAK,EAAE,GAAG,MAAM,EAAC,GAAG,OAAO,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,KAAK,IAAI,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAA4B;KACtE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA+B;IAE/B,IACE,CAAC,MAAM,CAAC,IAAI;QACZ,CAAC,MAAM,CAAC,QAAQ;QAChB,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport type {\n DeckJsonMapProps,\n DeckSqlDatasetInput,\n DeckTableDatasetInput,\n} from './types';\n\nexport const DECK_MAP_DASHBOARD_PANEL_TYPE = 'deck-json-map';\nexport const DEFAULT_DECK_MAP_MAX_DATA_POINTS = 100_000;\n\nexport type DeckMapDataPolicyOverride = {\n disabled?: boolean;\n maxRows?: number;\n reason?: string;\n};\n\nexport type DeckMapDatasetSource =\n | Pick<DeckSqlDatasetInput, 'sqlQuery'>\n | Pick<DeckTableDatasetInput, 'tableName' | 'transformSql'>;\n\nexport type DeckMapDatasetConfig = Omit<DeckSqlDatasetInput, 'sqlQuery'> & {\n source?: DeckMapDatasetSource;\n};\n\n/** Returns whether a map dataset source is a pinned literal SQL query. */\nexport function isDeckMapSqlDatasetSource(\n source: DeckMapDatasetSource | undefined,\n): source is Pick<DeckSqlDatasetInput, 'sqlQuery'> {\n return Boolean(source && 'sqlQuery' in source);\n}\n\n/** Returns whether a map dataset source is backed by a named table. */\nexport function isDeckMapTableDatasetSource(\n source: DeckMapDatasetSource | undefined,\n): source is Pick<DeckTableDatasetInput, 'tableName' | 'transformSql'> {\n return Boolean(source && 'tableName' in source);\n}\n\nexport type DeckMapInteractionConfig = {\n type: 'point-radius-brush';\n dataset: string;\n longitudeColumn: string;\n latitudeColumn: string;\n radiusMeters?: number;\n event?: 'hover' | 'click';\n};\n\nexport type DeckMapFitToDataConfig = {\n dataset: string;\n longitudeColumn?: string;\n latitudeColumn?: string;\n geometryColumn?: string;\n /**\n * Multiple geometry columns whose extents should be combined when fitting\n * the view. Used for arc layers that have separate source and target\n * geometries — a single `geometryColumn` would only cover one endpoint.\n */\n geometryColumns?: string[];\n h3Column?: string;\n padding?: number;\n maxZoom?: number;\n};\n\nexport type DeckMapConfigMode = 'basic' | 'custom';\n\n/** Durable, host-neutral Deck map configuration. */\nexport type DeckMapConfig = {\n spec: DeckJsonMapProps['spec'];\n datasets: Record<string, DeckMapDatasetConfig>;\n configMode?: DeckMapConfigMode;\n mapStyle?: string;\n mapProps?: Record<string, unknown>;\n showLegends?: boolean;\n interaction?: DeckMapInteractionConfig;\n fitToData?: DeckMapFitToDataConfig;\n dataPolicy?: DeckMapDataPolicyOverride;\n settingsOpen?: boolean;\n};\n\n/** Creates the portable empty configuration used for a new Deck map. */\nexport function createEmptyDeckMapConfig(): DeckMapConfig {\n return {\n spec: {\n initialViewState: {longitude: 0, latitude: 20, zoom: 1.5},\n layers: [],\n },\n datasets: {},\n };\n}\n\n/** Adapter-facing dashboard panel shape; document resources never store it. */\nexport type DeckMapDashboardPanelConfig = DeckMapConfig;\nexport type DeckMapDashboardDatasetConfig = DeckMapDatasetConfig;\nexport type DeckMapDashboardDatasetSource = DeckMapDatasetSource;\nexport type DeckMapDashboardInteractionConfig = DeckMapInteractionConfig;\nexport type DeckMapDashboardFitToDataConfig = DeckMapFitToDataConfig;\n\nexport const isDeckMapDashboardSqlDatasetSource = isDeckMapSqlDatasetSource;\nexport const isDeckMapDashboardTableDatasetSource = isDeckMapTableDatasetSource;\n\nexport type CreateDeckMapDashboardPanelConfigOptions = DeckMapConfig & {\n title?: string;\n};\n\n/** Creates a Mosaic panel only for the opt-in dashboard adapter. */\nexport function createDeckMapDashboardPanelConfig(\n options: CreateDeckMapDashboardPanelConfigOptions,\n) {\n const {title, ...config} = options;\n return {\n id: createId(),\n type: DECK_MAP_DASHBOARD_PANEL_TYPE,\n title: title ?? 'Map',\n config: JSON.parse(JSON.stringify(config)) as Record<string, unknown>,\n };\n}\n\n/**\n * Returns a record as a Deck map config when it has the required top-level\n * spec and dataset registry, otherwise returns `null`.\n */\nexport function asDeckJsonMapConfig(\n config: Record<string, unknown>,\n): DeckMapConfig | null {\n if (\n !config.spec ||\n !config.datasets ||\n typeof config.datasets !== 'object' ||\n Array.isArray(config.datasets)\n ) {\n return null;\n }\n return config as DeckMapConfig;\n}\n"]}
1
+ {"version":3,"file":"mapConfig.js","sourceRoot":"","sources":["../src/mapConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAOnD,MAAM,CAAC,MAAM,6BAA6B,GAAG,eAAe,CAAC;AAC7D,MAAM,CAAC,MAAM,gCAAgC,GAAG,OAAO,CAAC;AAgBxD,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CACvC,MAAwC;IAExC,OAAO,OAAO,CAAC,MAAM,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CACzC,MAAwC;IAExC,OAAO,OAAO,CAAC,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,CAAC;AAClD,CAAC;AA4CD,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CAAC,MAAqB;IAC3D,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ;QACjD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,EAAC,CAAC;AACtD,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,cAAoC;IAEpC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ;QAAE,OAAO,MAAM,CAAC;IAChE,IAAI,cAAc,EAAE,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAC,CAAC;IACxD,CAAC;IACD,IAAI,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ;aAC3C;SACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,wBAAwB;IACtC,OAAO,uBAAuB,CAAC;QAC7B,IAAI,EAAE;YACJ,gBAAgB,EAAE,EAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAC;YACzD,MAAM,EAAE,EAAE;SACX;QACD,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;AACL,CAAC;AASD,MAAM,CAAC,MAAM,kCAAkC,GAAG,yBAAyB,CAAC;AAC5E,MAAM,CAAC,MAAM,oCAAoC,GAAG,2BAA2B,CAAC;AAMhF,oEAAoE;AACpE,MAAM,UAAU,iCAAiC,CAC/C,OAAiD;IAEjD,MAAM,EAAC,KAAK,EAAE,GAAG,MAAM,EAAC,GAAG,OAAO,CAAC;IACnC,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,KAAK,IAAI,KAAK;QACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAChB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CACrB;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA+B;IAE/B,IACE,CAAC,MAAM,CAAC,IAAI;QACZ,CAAC,MAAM,CAAC,QAAQ;QAChB,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {getDefaultDeckMapStyle} from './mapStyles';\nimport type {\n DeckJsonMapProps,\n DeckSqlDatasetInput,\n DeckTableDatasetInput,\n} from './types';\n\nexport const DECK_MAP_DASHBOARD_PANEL_TYPE = 'deck-json-map';\nexport const DEFAULT_DECK_MAP_MAX_DATA_POINTS = 100_000;\n\nexport type DeckMapDataPolicyOverride = {\n disabled?: boolean;\n maxRows?: number;\n reason?: string;\n};\n\nexport type DeckMapDatasetSource =\n | Pick<DeckSqlDatasetInput, 'sqlQuery'>\n | Pick<DeckTableDatasetInput, 'tableName' | 'transformSql'>;\n\nexport type DeckMapDatasetConfig = Omit<DeckSqlDatasetInput, 'sqlQuery'> & {\n source?: DeckMapDatasetSource;\n};\n\n/** Returns whether a map dataset source is a pinned literal SQL query. */\nexport function isDeckMapSqlDatasetSource(\n source: DeckMapDatasetSource | undefined,\n): source is Pick<DeckSqlDatasetInput, 'sqlQuery'> {\n return Boolean(source && 'sqlQuery' in source);\n}\n\n/** Returns whether a map dataset source is backed by a named table. */\nexport function isDeckMapTableDatasetSource(\n source: DeckMapDatasetSource | undefined,\n): source is Pick<DeckTableDatasetInput, 'tableName' | 'transformSql'> {\n return Boolean(source && 'tableName' in source);\n}\n\nexport type DeckMapInteractionConfig = {\n type: 'point-radius-brush';\n dataset: string;\n longitudeColumn: string;\n latitudeColumn: string;\n radiusMeters?: number;\n event?: 'hover' | 'click';\n};\n\nexport type DeckMapFitToDataConfig = {\n dataset: string;\n longitudeColumn?: string;\n latitudeColumn?: string;\n geometryColumn?: string;\n /**\n * Multiple geometry columns whose extents should be combined when fitting\n * the view. Used for arc layers that have separate source and target\n * geometries — a single `geometryColumn` would only cover one endpoint.\n */\n geometryColumns?: string[];\n h3Column?: string;\n padding?: number;\n maxZoom?: number;\n};\n\nexport type DeckMapConfigMode = 'basic' | 'custom';\n\n/** Durable, host-neutral Deck map configuration. */\nexport type DeckMapConfig = {\n spec: DeckJsonMapProps['spec'];\n datasets: Record<string, DeckMapDatasetConfig>;\n configMode?: DeckMapConfigMode;\n /** Built-in basemap ID (`light`/`dark`) or custom style URL. */\n mapStyle?: string;\n mapProps?: Record<string, unknown>;\n showLegends?: boolean;\n interaction?: DeckMapInteractionConfig;\n fitToData?: DeckMapFitToDataConfig;\n dataPolicy?: DeckMapDataPolicyOverride;\n settingsOpen?: boolean;\n};\n\n/** Adds a creation-time basemap default while preserving explicit custom styles. */\nexport function withDefaultDeckMapStyle(config: DeckMapConfig): DeckMapConfig {\n return config.mapStyle || config.mapProps?.mapStyle\n ? config\n : {...config, mapStyle: getDefaultDeckMapStyle()};\n}\n\n/** Retains a map's basemap on config replacement unless a new style is supplied. */\nexport function withPreservedDeckMapStyle(\n config: DeckMapConfig,\n previousConfig: DeckMapConfig | null,\n): DeckMapConfig {\n if (config.mapStyle || config.mapProps?.mapStyle) return config;\n if (previousConfig?.mapStyle) {\n return {...config, mapStyle: previousConfig.mapStyle};\n }\n if (previousConfig?.mapProps?.mapStyle) {\n return {\n ...config,\n mapProps: {\n ...config.mapProps,\n mapStyle: previousConfig.mapProps.mapStyle,\n },\n };\n }\n return config;\n}\n\n/** Creates the portable empty configuration used for a new Deck map. */\nexport function createEmptyDeckMapConfig(): DeckMapConfig {\n return withDefaultDeckMapStyle({\n spec: {\n initialViewState: {longitude: 0, latitude: 20, zoom: 1.5},\n layers: [],\n },\n datasets: {},\n });\n}\n\n/** Adapter-facing dashboard panel shape; document resources never store it. */\nexport type DeckMapDashboardPanelConfig = DeckMapConfig;\nexport type DeckMapDashboardDatasetConfig = DeckMapDatasetConfig;\nexport type DeckMapDashboardDatasetSource = DeckMapDatasetSource;\nexport type DeckMapDashboardInteractionConfig = DeckMapInteractionConfig;\nexport type DeckMapDashboardFitToDataConfig = DeckMapFitToDataConfig;\n\nexport const isDeckMapDashboardSqlDatasetSource = isDeckMapSqlDatasetSource;\nexport const isDeckMapDashboardTableDatasetSource = isDeckMapTableDatasetSource;\n\nexport type CreateDeckMapDashboardPanelConfigOptions = DeckMapConfig & {\n title?: string;\n};\n\n/** Creates a Mosaic panel only for the opt-in dashboard adapter. */\nexport function createDeckMapDashboardPanelConfig(\n options: CreateDeckMapDashboardPanelConfigOptions,\n) {\n const {title, ...config} = options;\n return {\n id: createId(),\n type: DECK_MAP_DASHBOARD_PANEL_TYPE,\n title: title ?? 'Map',\n config: JSON.parse(\n JSON.stringify(withDefaultDeckMapStyle(config)),\n ) as Record<string, unknown>,\n };\n}\n\n/**\n * Returns a record as a Deck map config when it has the required top-level\n * spec and dataset registry, otherwise returns `null`.\n */\nexport function asDeckJsonMapConfig(\n config: Record<string, unknown>,\n): DeckMapConfig | null {\n if (\n !config.spec ||\n !config.datasets ||\n typeof config.datasets !== 'object' ||\n Array.isArray(config.datasets)\n ) {\n return null;\n }\n return config as DeckMapConfig;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mapConfigUtils.d.ts","sourceRoot":"","sources":["../src/mapConfigUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapConfigUtils.d.ts","sourceRoot":"","sources":["../src/mapConfigUtils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { getRawSqlTableReference, makeQualifiedTableName, quoteParsedRawSqlTableReference, } from '@sqlrooms/duckdb';
2
2
  import { createDeckMapDashboardPanelConfig, isDeckMapTableDatasetSource, } from './mapConfig';
3
3
  import { DECK_TABLE_DATASET_SOURCE_RELATION } from './datasets/tableDatasetSql';
4
+ import { getDefaultDeckMapStyle } from './mapStyles';
4
5
  const LONGITUDE_COLUMN_NAMES = ['longitude', 'lon', 'lng', 'long', 'x'];
5
6
  const LATITUDE_COLUMN_NAMES = ['latitude', 'lat', 'y'];
6
7
  const GEOMETRY_COLUMN_NAMES = ['geometry', 'geom'];
@@ -549,7 +550,7 @@ export function createDeckMapConfigForTable(options) {
549
550
  },
550
551
  }
551
552
  : {}),
552
- ...(options.mapStyle ? { mapStyle: options.mapStyle } : {}),
553
+ mapStyle: options.mapStyle ?? getDefaultDeckMapStyle(),
553
554
  };
554
555
  }
555
556
  export const createDeckMapDashboardConfigForTable = createDeckMapConfigForTable;
@@ -588,7 +589,11 @@ export function regenerateMapConfigForTable(panel, table, longitudeColumn, latit
588
589
  });
589
590
  const nextDataset = Object.values(nextConfig.datasets)[0];
590
591
  if (existingDatasetIds.length === 0) {
591
- return nextConfig;
592
+ return {
593
+ ...nextConfig,
594
+ mapStyle: existingConfig.mapStyle,
595
+ mapProps: existingConfig.mapProps,
596
+ };
592
597
  }
593
598
  if (existingDatasetIds.length === 1 && nextDataset) {
594
599
  const datasetId = existingDatasetIds[0];
@@ -1 +1 @@
1
- {"version":3,"file":"mapConfigUtils.js","sourceRoot":"","sources":["../src/mapConfigUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getRawSqlTableReference,\n makeQualifiedTableName,\n quoteParsedRawSqlTableReference,\n type DataTable,\n type RawSqlTableReference,\n} from '@sqlrooms/duckdb';\nimport {\n createDeckMapDashboardPanelConfig,\n isDeckMapTableDatasetSource,\n type DeckMapDashboardPanelConfig,\n type DeckMapConfig,\n} from './mapConfig';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\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\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction updateDeckMapGeometryColumnBindings(\n config: DeckMapDashboardPanelConfig,\n datasetId: string,\n geometryColumn: string | undefined,\n) {\n if (!geometryColumn || !isRecord(config.spec)) return config;\n const layers = config.spec.layers;\n if (!Array.isArray(layers)) return config;\n\n let changed = false;\n const nextLayers = layers.map((layer) => {\n if (!isRecord(layer) || !isRecord(layer._sqlroomsBinding)) return layer;\n const binding = layer._sqlroomsBinding;\n if (\n binding.dataset !== datasetId ||\n typeof binding.geometryColumn !== 'string'\n ) {\n return layer;\n }\n changed = true;\n return {\n ...layer,\n _sqlroomsBinding: {...binding, geometryColumn},\n };\n });\n\n return changed\n ? {...config, spec: {...config.spec, layers: nextLayers}}\n : config;\n}\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\nfunction resolveDeckMapCoordinateColumnNames(options: {\n columns: DeckMapConfigColumn[];\n longitudeColumn?: string;\n latitudeColumn?: string;\n}) {\n const longitudeColumn =\n options.longitudeColumn ||\n findColumnByName(options.columns, LONGITUDE_COLUMN_NAMES);\n const latitudeColumn =\n options.latitudeColumn ||\n findColumnByName(options.columns, LATITUDE_COLUMN_NAMES);\n return longitudeColumn && latitudeColumn\n ? {longitudeColumn, latitudeColumn}\n : null;\n}\n\nexport function findDeckMapLongitudeLatitudeColumns(\n columns?: DeckMapConfigColumn[],\n) {\n if (!columns) return null;\n return resolveDeckMapCoordinateColumnNames({columns});\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 // Native DuckDB GEOMETRY is not an encoding hint — the dataset pipeline\n // projects it through ST_AsWKB via DESCRIBE + SELECT * REPLACE.\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): RawSqlTableReference {\n if (typeof tableReference === 'string') {\n const rawSqlTableReference =\n quoteParsedRawSqlTableReference(tableReference);\n if (!rawSqlTableReference) {\n throw new Error(`Invalid deck map table reference \"${tableReference}\".`);\n }\n return rawSqlTableReference;\n }\n if (!tableReference.table) {\n throw new Error('Deck map table reference object requires a table name.');\n }\n return getRawSqlTableReference(\n makeQualifiedTableName({\n database: tableReference.database,\n schema: tableReference.schema,\n table: tableReference.table,\n }),\n );\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\n/**\n * Builds the standard lon/lat → WKB point transform SQL used by Deck map\n * datasets that follow the selected table via {@link DECK_TABLE_DATASET_SOURCE_RELATION}.\n */\nexport function createDeckMapPointTransformSql(options: {\n longitudeColumn: string;\n latitudeColumn: string;\n geometryColumn: string;\n}) {\n const quotedLongitude = quoteDeckMapSqlIdentifier(options.longitudeColumn);\n const quotedLatitude = quoteDeckMapSqlIdentifier(options.latitudeColumn);\n\n return [\n `SELECT *, ST_AsWKB(ST_Point(${quotedLongitude}, ${quotedLatitude})) AS ${quoteDeckMapSqlIdentifier(options.geometryColumn)}`,\n `FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n `WHERE ${quotedLongitude} IS NOT NULL AND ${quotedLatitude} IS NOT NULL`,\n ].join(' ');\n}\n\nconst DECK_MAP_POINT_LAYER_TYPES = new Set([\n 'GeoArrowScatterplotLayer',\n 'GeoArrowHeatmapLayer',\n 'GeoArrowColumnLayer',\n 'GeoJsonLayer',\n]);\n\n/** Structured provenance for a table-backed longitude/latitude point dataset. */\nexport type DeckMapPointBinding = {\n dataset: string;\n longitudeColumn: string;\n latitudeColumn: string;\n geometryColumn?: string;\n};\n\nfunction isDeckMapConfigRecord(\n value: unknown,\n): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction deckMapLayerTargetsDataset(options: {\n layer: Record<string, unknown>;\n datasetId: string;\n datasetIds: string[];\n}) {\n const binding = isDeckMapConfigRecord(options.layer._sqlroomsBinding)\n ? options.layer._sqlroomsBinding\n : undefined;\n const boundDataset = binding?.dataset;\n\n if (typeof boundDataset === 'string') {\n return boundDataset === options.datasetId;\n }\n\n return options.datasetIds.length === 1 && options.layer.data === undefined;\n}\n\nfunction normalizeDeckMapPointLayers<T extends unknown[]>(options: {\n layers: T;\n datasetId: string;\n datasetIds: string[];\n geometryColumn: string;\n}): T {\n let changed = false;\n const layers = options.layers.map((layer) => {\n if (!isDeckMapConfigRecord(layer)) {\n return layer;\n }\n\n const layerType = layer['@@type'];\n if (\n typeof layerType !== 'string' ||\n !DECK_MAP_POINT_LAYER_TYPES.has(layerType) ||\n !deckMapLayerTargetsDataset({\n layer,\n datasetId: options.datasetId,\n datasetIds: options.datasetIds,\n })\n ) {\n return layer;\n }\n\n changed = true;\n const binding = isDeckMapConfigRecord(layer._sqlroomsBinding)\n ? layer._sqlroomsBinding\n : {};\n const geometryBinding = {...binding};\n delete geometryBinding.longitudeColumn;\n delete geometryBinding.latitudeColumn;\n const pointLayer = {...layer};\n delete pointLayer.getPosition;\n\n return {\n ...pointLayer,\n _sqlroomsBinding: {\n ...geometryBinding,\n dataset:\n typeof binding.dataset === 'string'\n ? binding.dataset\n : options.datasetId,\n geometryColumn: options.geometryColumn,\n },\n };\n });\n\n return (changed ? layers : options.layers) as T;\n}\n\n/**\n * Applies a structured longitude/latitude point binding to a native Deck map\n * config. The generated geometry SQL intentionally comes from the same\n * canonical helper used by first-party map builders.\n */\nexport function applyDeckMapPointBinding<\n T extends DeckMapDashboardPanelConfig,\n>(options: {\n config: T;\n pointBinding: DeckMapPointBinding;\n sourceColumns: readonly DeckMapConfigColumn[];\n}): T {\n const {config, pointBinding} = options;\n const datasetId = pointBinding.dataset.trim();\n const longitudeColumn = pointBinding.longitudeColumn.trim();\n const latitudeColumn = pointBinding.latitudeColumn.trim();\n if (!datasetId || !longitudeColumn || !latitudeColumn) {\n throw new Error(\n 'Point binding requires dataset, longitudeColumn, and latitudeColumn.',\n );\n }\n\n const dataset = config.datasets[datasetId];\n if (!dataset) {\n throw new Error(`Point binding references unknown dataset \"${datasetId}\".`);\n }\n if (!isDeckMapTableDatasetSource(dataset.source)) {\n throw new Error(\n `Point binding dataset \"${datasetId}\" must use source.tableName.`,\n );\n }\n\n const geometryColumn =\n pointBinding.geometryColumn?.trim() || DEFAULT_GEOMETRY_COLUMN;\n const sourceColumnNames = new Set(\n options.sourceColumns.map((column) => column.name.toLowerCase()),\n );\n for (const [bindingName, columnName] of [\n ['longitudeColumn', longitudeColumn],\n ['latitudeColumn', latitudeColumn],\n ] as const) {\n if (!sourceColumnNames.has(columnName.toLowerCase())) {\n throw new Error(\n `Point binding ${bindingName} \"${columnName}\" was not found in source columns.`,\n );\n }\n }\n if (sourceColumnNames.has(geometryColumn.toLowerCase())) {\n throw new Error(\n `Point binding geometryColumn \"${geometryColumn}\" conflicts with an existing source column.`,\n );\n }\n const datasetIds = Object.keys(config.datasets);\n let parsedSpec: unknown = config.spec;\n if (typeof parsedSpec === 'string') {\n try {\n parsedSpec = JSON.parse(parsedSpec);\n } catch {\n // Durable resource validation reports the invalid serialized spec.\n }\n }\n const spec = isDeckMapConfigRecord(parsedSpec)\n ? {\n ...parsedSpec,\n ...(Array.isArray(parsedSpec.layers)\n ? {\n layers: normalizeDeckMapPointLayers({\n layers: parsedSpec.layers,\n datasetId,\n datasetIds,\n geometryColumn,\n }),\n }\n : {}),\n }\n : parsedSpec;\n let fitToData = config.fitToData;\n if (isDeckMapConfigRecord(fitToData) && fitToData.dataset === datasetId) {\n const geometryFit = {...fitToData};\n delete geometryFit.longitudeColumn;\n delete geometryFit.latitudeColumn;\n delete geometryFit.geometryColumns;\n delete geometryFit.h3Column;\n fitToData = {...geometryFit, geometryColumn};\n } else if (!fitToData) {\n fitToData = {\n dataset: datasetId,\n geometryColumn,\n padding: 40,\n maxZoom: 12,\n };\n }\n const interaction =\n config.interaction?.type === 'point-radius-brush' &&\n config.interaction.dataset === datasetId\n ? {...config.interaction, longitudeColumn, latitudeColumn}\n : config.interaction;\n\n return {\n ...config,\n spec,\n ...(interaction !== config.interaction ? {interaction} : {}),\n datasets: {\n ...config.datasets,\n [datasetId]: {\n ...dataset,\n source: {\n tableName: dataset.source.tableName,\n transformSql: createDeckMapPointTransformSql({\n longitudeColumn,\n latitudeColumn,\n geometryColumn,\n }),\n },\n geometryColumn,\n geometryEncodingHint: 'wkb',\n },\n },\n fitToData,\n } as T;\n}\n\n/**\n * Post-normalizes an existing Deck map config so table-backed lon/lat datasets\n * without `transformSql`, `sqlQuery`, or a native geometry column get a WKB\n * point transform, geometry bindings, and `fitToData.geometryColumn` alignment.\n *\n * Prefer this for AI/tool configs that arrive without a transform. Fresh configs\n * from {@link createDeckMapDashboardConfigForTable} already include the transform;\n * this helper patches in place without rebuilding layers.\n */\nexport function normalizeDeckMapPointConfig<\n T extends DeckMapDashboardPanelConfig,\n>(options: {\n config: T;\n resolveTable: (tableName: string) => DataTable | undefined;\n}): T {\n const {config, resolveTable} = options;\n const datasets = isDeckMapConfigRecord(config.datasets)\n ? config.datasets\n : undefined;\n if (!datasets) {\n return config;\n }\n\n const datasetIds = Object.keys(datasets);\n let nextDatasets = datasets;\n let nextSpec = config.spec;\n let nextFitToData = config.fitToData;\n let changed = false;\n\n for (const [datasetId, datasetValue] of Object.entries(datasets)) {\n if (!isDeckMapConfigRecord(datasetValue)) {\n continue;\n }\n const dataset = datasetValue;\n\n const source = isDeckMapConfigRecord(dataset.source as unknown)\n ? (dataset.source as Record<string, unknown>)\n : undefined;\n const tableName =\n typeof source?.tableName === 'string' ? source.tableName : undefined;\n const configuredGeometryColumn =\n typeof dataset.geometryColumn === 'string'\n ? dataset.geometryColumn.trim()\n : undefined;\n if (\n !tableName ||\n source?.sqlQuery ||\n source?.transformSql ||\n (configuredGeometryColumn &&\n configuredGeometryColumn !== DEFAULT_GEOMETRY_COLUMN)\n ) {\n continue;\n }\n\n const table = resolveTable(tableName);\n if (\n configuredGeometryColumn === DEFAULT_GEOMETRY_COLUMN &&\n table?.columns.some((column) => column.name === configuredGeometryColumn)\n ) {\n continue;\n }\n if (findGeometryColumn(table)) {\n continue;\n }\n const coordinateColumns = findLongitudeLatitudeColumns(table);\n if (!coordinateColumns) {\n continue;\n }\n\n const geometryColumn = DEFAULT_GEOMETRY_COLUMN;\n\n nextDatasets = {\n ...nextDatasets,\n [datasetId]: {\n ...dataset,\n source: {\n ...source,\n tableName,\n transformSql: createDeckMapPointTransformSql({\n ...coordinateColumns,\n geometryColumn,\n }),\n },\n geometryColumn,\n geometryEncodingHint: 'wkb',\n },\n };\n\n if (\n isDeckMapConfigRecord(nextSpec) &&\n Array.isArray(nextSpec.layers) &&\n nextSpec.layers.length > 0\n ) {\n nextSpec = {\n ...nextSpec,\n layers: normalizeDeckMapPointLayers({\n layers: nextSpec.layers,\n datasetId,\n datasetIds,\n geometryColumn,\n }),\n };\n }\n\n nextFitToData =\n isDeckMapConfigRecord(nextFitToData) &&\n nextFitToData.dataset === datasetId\n ? {\n ...nextFitToData,\n geometryColumn,\n }\n : (nextFitToData ?? {\n dataset: datasetId,\n geometryColumn,\n padding: 40,\n maxZoom: 12,\n });\n\n changed = true;\n }\n\n if (!changed) {\n return config;\n }\n\n return {\n ...config,\n spec: nextSpec,\n datasets: nextDatasets,\n fitToData: nextFitToData,\n } as T;\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 createDeckMapConfigForTable(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}): DeckMapConfig {\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 ? options.sourceSqlQuery\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 : {\n tableName: options.tableReference\n ? quoteDeckMapSqlTableReference(options.tableReference)\n : options.tableName,\n transformSql: createDeckMapPointTransformSql({\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: {\n dataset: datasetId,\n ...(detectedGeometryColumn\n ? {geometryColumn: detectedGeometryColumn.geometryColumn}\n : {}),\n },\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 : detectedGeometryColumn\n ? {\n fitToData: {\n dataset: datasetId,\n geometryColumn: detectedGeometryColumn.geometryColumn,\n padding: 40,\n maxZoom: 12,\n },\n }\n : {}),\n ...(options.mapStyle ? {mapStyle: options.mapStyle} : {}),\n };\n}\n\nexport const createDeckMapDashboardConfigForTable = createDeckMapConfigForTable;\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 ...createDeckMapConfigForTable(options),\n });\n}\n\n/**\n * Regenerates a map's dataset source and fit configuration for a table while\n * preserving an existing single dataset ID so retained layer bindings remain\n * valid. Empty maps adopt the generated dataset and layer spec. Returns the\n * existing config unchanged when the table has no supported geospatial columns\n * or when multiple datasets make the target ambiguous.\n */\nexport function regenerateMapConfigForTable(\n panel: {config: Record<string, unknown>},\n table: DataTable,\n longitudeColumn?: string,\n latitudeColumn?: string,\n) {\n const coordinateColumns = resolveDeckMapCoordinateColumnNames({\n columns: table.columns,\n longitudeColumn,\n latitudeColumn,\n });\n if (!coordinateColumns && !findGeometryColumn(table)) {\n return panel.config;\n }\n\n const existingConfig = panel.config as DeckMapDashboardPanelConfig;\n const existingDatasetIds = Object.keys(existingConfig.datasets ?? {});\n if (existingDatasetIds.length > 1) return panel.config;\n\n const nextConfig = createDeckMapConfigForTable({\n tableName: table.tableName,\n columns: table.columns,\n tableReference: table.table,\n longitudeColumn: coordinateColumns?.longitudeColumn,\n latitudeColumn: coordinateColumns?.latitudeColumn,\n });\n const nextDataset = Object.values(nextConfig.datasets)[0];\n\n if (existingDatasetIds.length === 0) {\n return nextConfig;\n }\n\n if (existingDatasetIds.length === 1 && nextDataset) {\n const datasetId = existingDatasetIds[0]!;\n return updateDeckMapGeometryColumnBindings(\n {\n ...existingConfig,\n datasets: {[datasetId]: nextDataset},\n fitToData: nextConfig.fitToData\n ? {...nextConfig.fitToData, dataset: datasetId}\n : existingConfig.fitToData,\n },\n datasetId,\n nextDataset.geometryColumn,\n );\n }\n\n // Preserve existing layer spec (layer types, styling, bindings) — only\n // update the dataset source and fitToData so the data re-fetches with the\n // new coordinate columns.\n return {\n ...existingConfig,\n datasets: nextConfig.datasets,\n fitToData: nextConfig.fitToData ?? existingConfig.fitToData,\n };\n}\n\n/**\n * Applies a document map table pick: regenerate geospatial config when\n * possible, otherwise retarget the single table-backed dataset.\n */\nexport function applyDeckMapTableSelection(\n config: DeckMapConfig,\n table: DataTable,\n longitudeColumn?: string,\n latitudeColumn?: string,\n): DeckMapConfig {\n const regenerated = regenerateMapConfigForTable(\n {config},\n table,\n longitudeColumn,\n latitudeColumn,\n );\n if (regenerated !== config) {\n return regenerated as DeckMapConfig;\n }\n\n const datasetIds = Object.keys(config.datasets ?? {});\n if (datasetIds.length !== 1) return config;\n const datasetId = datasetIds[0]!;\n const dataset = config.datasets[datasetId];\n if (!dataset || !isDeckMapTableDatasetSource(dataset.source)) {\n return config;\n }\n\n const tableName = quoteDeckMapSqlTableReference(table.table);\n if (dataset.source.tableName === tableName) return config;\n\n return {\n ...config,\n datasets: {\n ...config.datasets,\n [datasetId]: {\n ...dataset,\n source: {\n ...dataset.source,\n tableName,\n },\n },\n },\n };\n}\n"]}
1
+ {"version":3,"file":"mapConfigUtils.js","sourceRoot":"","sources":["../src/mapConfigUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getRawSqlTableReference,\n makeQualifiedTableName,\n quoteParsedRawSqlTableReference,\n type DataTable,\n type RawSqlTableReference,\n} from '@sqlrooms/duckdb';\nimport {\n createDeckMapDashboardPanelConfig,\n isDeckMapTableDatasetSource,\n type DeckMapDashboardPanelConfig,\n type DeckMapConfig,\n} from './mapConfig';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\nimport type {GeometryEncodingHint} from './prepare/types';\nimport {getDefaultDeckMapStyle} from './mapStyles';\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\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction updateDeckMapGeometryColumnBindings(\n config: DeckMapDashboardPanelConfig,\n datasetId: string,\n geometryColumn: string | undefined,\n) {\n if (!geometryColumn || !isRecord(config.spec)) return config;\n const layers = config.spec.layers;\n if (!Array.isArray(layers)) return config;\n\n let changed = false;\n const nextLayers = layers.map((layer) => {\n if (!isRecord(layer) || !isRecord(layer._sqlroomsBinding)) return layer;\n const binding = layer._sqlroomsBinding;\n if (\n binding.dataset !== datasetId ||\n typeof binding.geometryColumn !== 'string'\n ) {\n return layer;\n }\n changed = true;\n return {\n ...layer,\n _sqlroomsBinding: {...binding, geometryColumn},\n };\n });\n\n return changed\n ? {...config, spec: {...config.spec, layers: nextLayers}}\n : config;\n}\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\nfunction resolveDeckMapCoordinateColumnNames(options: {\n columns: DeckMapConfigColumn[];\n longitudeColumn?: string;\n latitudeColumn?: string;\n}) {\n const longitudeColumn =\n options.longitudeColumn ||\n findColumnByName(options.columns, LONGITUDE_COLUMN_NAMES);\n const latitudeColumn =\n options.latitudeColumn ||\n findColumnByName(options.columns, LATITUDE_COLUMN_NAMES);\n return longitudeColumn && latitudeColumn\n ? {longitudeColumn, latitudeColumn}\n : null;\n}\n\nexport function findDeckMapLongitudeLatitudeColumns(\n columns?: DeckMapConfigColumn[],\n) {\n if (!columns) return null;\n return resolveDeckMapCoordinateColumnNames({columns});\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 // Native DuckDB GEOMETRY is not an encoding hint — the dataset pipeline\n // projects it through ST_AsWKB via DESCRIBE + SELECT * REPLACE.\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): RawSqlTableReference {\n if (typeof tableReference === 'string') {\n const rawSqlTableReference =\n quoteParsedRawSqlTableReference(tableReference);\n if (!rawSqlTableReference) {\n throw new Error(`Invalid deck map table reference \"${tableReference}\".`);\n }\n return rawSqlTableReference;\n }\n if (!tableReference.table) {\n throw new Error('Deck map table reference object requires a table name.');\n }\n return getRawSqlTableReference(\n makeQualifiedTableName({\n database: tableReference.database,\n schema: tableReference.schema,\n table: tableReference.table,\n }),\n );\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\n/**\n * Builds the standard lon/lat → WKB point transform SQL used by Deck map\n * datasets that follow the selected table via {@link DECK_TABLE_DATASET_SOURCE_RELATION}.\n */\nexport function createDeckMapPointTransformSql(options: {\n longitudeColumn: string;\n latitudeColumn: string;\n geometryColumn: string;\n}) {\n const quotedLongitude = quoteDeckMapSqlIdentifier(options.longitudeColumn);\n const quotedLatitude = quoteDeckMapSqlIdentifier(options.latitudeColumn);\n\n return [\n `SELECT *, ST_AsWKB(ST_Point(${quotedLongitude}, ${quotedLatitude})) AS ${quoteDeckMapSqlIdentifier(options.geometryColumn)}`,\n `FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n `WHERE ${quotedLongitude} IS NOT NULL AND ${quotedLatitude} IS NOT NULL`,\n ].join(' ');\n}\n\nconst DECK_MAP_POINT_LAYER_TYPES = new Set([\n 'GeoArrowScatterplotLayer',\n 'GeoArrowHeatmapLayer',\n 'GeoArrowColumnLayer',\n 'GeoJsonLayer',\n]);\n\n/** Structured provenance for a table-backed longitude/latitude point dataset. */\nexport type DeckMapPointBinding = {\n dataset: string;\n longitudeColumn: string;\n latitudeColumn: string;\n geometryColumn?: string;\n};\n\nfunction isDeckMapConfigRecord(\n value: unknown,\n): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction deckMapLayerTargetsDataset(options: {\n layer: Record<string, unknown>;\n datasetId: string;\n datasetIds: string[];\n}) {\n const binding = isDeckMapConfigRecord(options.layer._sqlroomsBinding)\n ? options.layer._sqlroomsBinding\n : undefined;\n const boundDataset = binding?.dataset;\n\n if (typeof boundDataset === 'string') {\n return boundDataset === options.datasetId;\n }\n\n return options.datasetIds.length === 1 && options.layer.data === undefined;\n}\n\nfunction normalizeDeckMapPointLayers<T extends unknown[]>(options: {\n layers: T;\n datasetId: string;\n datasetIds: string[];\n geometryColumn: string;\n}): T {\n let changed = false;\n const layers = options.layers.map((layer) => {\n if (!isDeckMapConfigRecord(layer)) {\n return layer;\n }\n\n const layerType = layer['@@type'];\n if (\n typeof layerType !== 'string' ||\n !DECK_MAP_POINT_LAYER_TYPES.has(layerType) ||\n !deckMapLayerTargetsDataset({\n layer,\n datasetId: options.datasetId,\n datasetIds: options.datasetIds,\n })\n ) {\n return layer;\n }\n\n changed = true;\n const binding = isDeckMapConfigRecord(layer._sqlroomsBinding)\n ? layer._sqlroomsBinding\n : {};\n const geometryBinding = {...binding};\n delete geometryBinding.longitudeColumn;\n delete geometryBinding.latitudeColumn;\n const pointLayer = {...layer};\n delete pointLayer.getPosition;\n\n return {\n ...pointLayer,\n _sqlroomsBinding: {\n ...geometryBinding,\n dataset:\n typeof binding.dataset === 'string'\n ? binding.dataset\n : options.datasetId,\n geometryColumn: options.geometryColumn,\n },\n };\n });\n\n return (changed ? layers : options.layers) as T;\n}\n\n/**\n * Applies a structured longitude/latitude point binding to a native Deck map\n * config. The generated geometry SQL intentionally comes from the same\n * canonical helper used by first-party map builders.\n */\nexport function applyDeckMapPointBinding<\n T extends DeckMapDashboardPanelConfig,\n>(options: {\n config: T;\n pointBinding: DeckMapPointBinding;\n sourceColumns: readonly DeckMapConfigColumn[];\n}): T {\n const {config, pointBinding} = options;\n const datasetId = pointBinding.dataset.trim();\n const longitudeColumn = pointBinding.longitudeColumn.trim();\n const latitudeColumn = pointBinding.latitudeColumn.trim();\n if (!datasetId || !longitudeColumn || !latitudeColumn) {\n throw new Error(\n 'Point binding requires dataset, longitudeColumn, and latitudeColumn.',\n );\n }\n\n const dataset = config.datasets[datasetId];\n if (!dataset) {\n throw new Error(`Point binding references unknown dataset \"${datasetId}\".`);\n }\n if (!isDeckMapTableDatasetSource(dataset.source)) {\n throw new Error(\n `Point binding dataset \"${datasetId}\" must use source.tableName.`,\n );\n }\n\n const geometryColumn =\n pointBinding.geometryColumn?.trim() || DEFAULT_GEOMETRY_COLUMN;\n const sourceColumnNames = new Set(\n options.sourceColumns.map((column) => column.name.toLowerCase()),\n );\n for (const [bindingName, columnName] of [\n ['longitudeColumn', longitudeColumn],\n ['latitudeColumn', latitudeColumn],\n ] as const) {\n if (!sourceColumnNames.has(columnName.toLowerCase())) {\n throw new Error(\n `Point binding ${bindingName} \"${columnName}\" was not found in source columns.`,\n );\n }\n }\n if (sourceColumnNames.has(geometryColumn.toLowerCase())) {\n throw new Error(\n `Point binding geometryColumn \"${geometryColumn}\" conflicts with an existing source column.`,\n );\n }\n const datasetIds = Object.keys(config.datasets);\n let parsedSpec: unknown = config.spec;\n if (typeof parsedSpec === 'string') {\n try {\n parsedSpec = JSON.parse(parsedSpec);\n } catch {\n // Durable resource validation reports the invalid serialized spec.\n }\n }\n const spec = isDeckMapConfigRecord(parsedSpec)\n ? {\n ...parsedSpec,\n ...(Array.isArray(parsedSpec.layers)\n ? {\n layers: normalizeDeckMapPointLayers({\n layers: parsedSpec.layers,\n datasetId,\n datasetIds,\n geometryColumn,\n }),\n }\n : {}),\n }\n : parsedSpec;\n let fitToData = config.fitToData;\n if (isDeckMapConfigRecord(fitToData) && fitToData.dataset === datasetId) {\n const geometryFit = {...fitToData};\n delete geometryFit.longitudeColumn;\n delete geometryFit.latitudeColumn;\n delete geometryFit.geometryColumns;\n delete geometryFit.h3Column;\n fitToData = {...geometryFit, geometryColumn};\n } else if (!fitToData) {\n fitToData = {\n dataset: datasetId,\n geometryColumn,\n padding: 40,\n maxZoom: 12,\n };\n }\n const interaction =\n config.interaction?.type === 'point-radius-brush' &&\n config.interaction.dataset === datasetId\n ? {...config.interaction, longitudeColumn, latitudeColumn}\n : config.interaction;\n\n return {\n ...config,\n spec,\n ...(interaction !== config.interaction ? {interaction} : {}),\n datasets: {\n ...config.datasets,\n [datasetId]: {\n ...dataset,\n source: {\n tableName: dataset.source.tableName,\n transformSql: createDeckMapPointTransformSql({\n longitudeColumn,\n latitudeColumn,\n geometryColumn,\n }),\n },\n geometryColumn,\n geometryEncodingHint: 'wkb',\n },\n },\n fitToData,\n } as T;\n}\n\n/**\n * Post-normalizes an existing Deck map config so table-backed lon/lat datasets\n * without `transformSql`, `sqlQuery`, or a native geometry column get a WKB\n * point transform, geometry bindings, and `fitToData.geometryColumn` alignment.\n *\n * Prefer this for AI/tool configs that arrive without a transform. Fresh configs\n * from {@link createDeckMapDashboardConfigForTable} already include the transform;\n * this helper patches in place without rebuilding layers.\n */\nexport function normalizeDeckMapPointConfig<\n T extends DeckMapDashboardPanelConfig,\n>(options: {\n config: T;\n resolveTable: (tableName: string) => DataTable | undefined;\n}): T {\n const {config, resolveTable} = options;\n const datasets = isDeckMapConfigRecord(config.datasets)\n ? config.datasets\n : undefined;\n if (!datasets) {\n return config;\n }\n\n const datasetIds = Object.keys(datasets);\n let nextDatasets = datasets;\n let nextSpec = config.spec;\n let nextFitToData = config.fitToData;\n let changed = false;\n\n for (const [datasetId, datasetValue] of Object.entries(datasets)) {\n if (!isDeckMapConfigRecord(datasetValue)) {\n continue;\n }\n const dataset = datasetValue;\n\n const source = isDeckMapConfigRecord(dataset.source as unknown)\n ? (dataset.source as Record<string, unknown>)\n : undefined;\n const tableName =\n typeof source?.tableName === 'string' ? source.tableName : undefined;\n const configuredGeometryColumn =\n typeof dataset.geometryColumn === 'string'\n ? dataset.geometryColumn.trim()\n : undefined;\n if (\n !tableName ||\n source?.sqlQuery ||\n source?.transformSql ||\n (configuredGeometryColumn &&\n configuredGeometryColumn !== DEFAULT_GEOMETRY_COLUMN)\n ) {\n continue;\n }\n\n const table = resolveTable(tableName);\n if (\n configuredGeometryColumn === DEFAULT_GEOMETRY_COLUMN &&\n table?.columns.some((column) => column.name === configuredGeometryColumn)\n ) {\n continue;\n }\n if (findGeometryColumn(table)) {\n continue;\n }\n const coordinateColumns = findLongitudeLatitudeColumns(table);\n if (!coordinateColumns) {\n continue;\n }\n\n const geometryColumn = DEFAULT_GEOMETRY_COLUMN;\n\n nextDatasets = {\n ...nextDatasets,\n [datasetId]: {\n ...dataset,\n source: {\n ...source,\n tableName,\n transformSql: createDeckMapPointTransformSql({\n ...coordinateColumns,\n geometryColumn,\n }),\n },\n geometryColumn,\n geometryEncodingHint: 'wkb',\n },\n };\n\n if (\n isDeckMapConfigRecord(nextSpec) &&\n Array.isArray(nextSpec.layers) &&\n nextSpec.layers.length > 0\n ) {\n nextSpec = {\n ...nextSpec,\n layers: normalizeDeckMapPointLayers({\n layers: nextSpec.layers,\n datasetId,\n datasetIds,\n geometryColumn,\n }),\n };\n }\n\n nextFitToData =\n isDeckMapConfigRecord(nextFitToData) &&\n nextFitToData.dataset === datasetId\n ? {\n ...nextFitToData,\n geometryColumn,\n }\n : (nextFitToData ?? {\n dataset: datasetId,\n geometryColumn,\n padding: 40,\n maxZoom: 12,\n });\n\n changed = true;\n }\n\n if (!changed) {\n return config;\n }\n\n return {\n ...config,\n spec: nextSpec,\n datasets: nextDatasets,\n fitToData: nextFitToData,\n } as T;\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 createDeckMapConfigForTable(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}): DeckMapConfig {\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 ? options.sourceSqlQuery\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 : {\n tableName: options.tableReference\n ? quoteDeckMapSqlTableReference(options.tableReference)\n : options.tableName,\n transformSql: createDeckMapPointTransformSql({\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: {\n dataset: datasetId,\n ...(detectedGeometryColumn\n ? {geometryColumn: detectedGeometryColumn.geometryColumn}\n : {}),\n },\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 : detectedGeometryColumn\n ? {\n fitToData: {\n dataset: datasetId,\n geometryColumn: detectedGeometryColumn.geometryColumn,\n padding: 40,\n maxZoom: 12,\n },\n }\n : {}),\n mapStyle: options.mapStyle ?? getDefaultDeckMapStyle(),\n };\n}\n\nexport const createDeckMapDashboardConfigForTable = createDeckMapConfigForTable;\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 ...createDeckMapConfigForTable(options),\n });\n}\n\n/**\n * Regenerates a map's dataset source and fit configuration for a table while\n * preserving an existing single dataset ID so retained layer bindings remain\n * valid. Empty maps adopt the generated dataset and layer spec. Returns the\n * existing config unchanged when the table has no supported geospatial columns\n * or when multiple datasets make the target ambiguous.\n */\nexport function regenerateMapConfigForTable(\n panel: {config: Record<string, unknown>},\n table: DataTable,\n longitudeColumn?: string,\n latitudeColumn?: string,\n) {\n const coordinateColumns = resolveDeckMapCoordinateColumnNames({\n columns: table.columns,\n longitudeColumn,\n latitudeColumn,\n });\n if (!coordinateColumns && !findGeometryColumn(table)) {\n return panel.config;\n }\n\n const existingConfig = panel.config as DeckMapDashboardPanelConfig;\n const existingDatasetIds = Object.keys(existingConfig.datasets ?? {});\n if (existingDatasetIds.length > 1) return panel.config;\n\n const nextConfig = createDeckMapConfigForTable({\n tableName: table.tableName,\n columns: table.columns,\n tableReference: table.table,\n longitudeColumn: coordinateColumns?.longitudeColumn,\n latitudeColumn: coordinateColumns?.latitudeColumn,\n });\n const nextDataset = Object.values(nextConfig.datasets)[0];\n\n if (existingDatasetIds.length === 0) {\n return {\n ...nextConfig,\n mapStyle: existingConfig.mapStyle,\n mapProps: existingConfig.mapProps,\n };\n }\n\n if (existingDatasetIds.length === 1 && nextDataset) {\n const datasetId = existingDatasetIds[0]!;\n return updateDeckMapGeometryColumnBindings(\n {\n ...existingConfig,\n datasets: {[datasetId]: nextDataset},\n fitToData: nextConfig.fitToData\n ? {...nextConfig.fitToData, dataset: datasetId}\n : existingConfig.fitToData,\n },\n datasetId,\n nextDataset.geometryColumn,\n );\n }\n\n // Preserve existing layer spec (layer types, styling, bindings) — only\n // update the dataset source and fitToData so the data re-fetches with the\n // new coordinate columns.\n return {\n ...existingConfig,\n datasets: nextConfig.datasets,\n fitToData: nextConfig.fitToData ?? existingConfig.fitToData,\n };\n}\n\n/**\n * Applies a document map table pick: regenerate geospatial config when\n * possible, otherwise retarget the single table-backed dataset.\n */\nexport function applyDeckMapTableSelection(\n config: DeckMapConfig,\n table: DataTable,\n longitudeColumn?: string,\n latitudeColumn?: string,\n): DeckMapConfig {\n const regenerated = regenerateMapConfigForTable(\n {config},\n table,\n longitudeColumn,\n latitudeColumn,\n );\n if (regenerated !== config) {\n return regenerated as DeckMapConfig;\n }\n\n const datasetIds = Object.keys(config.datasets ?? {});\n if (datasetIds.length !== 1) return config;\n const datasetId = datasetIds[0]!;\n const dataset = config.datasets[datasetId];\n if (!dataset || !isDeckMapTableDatasetSource(dataset.source)) {\n return config;\n }\n\n const tableName = quoteDeckMapSqlTableReference(table.table);\n if (dataset.source.tableName === tableName) return config;\n\n return {\n ...config,\n datasets: {\n ...config.datasets,\n [datasetId]: {\n ...dataset,\n source: {\n ...dataset.source,\n tableName,\n },\n },\n },\n };\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { type ResolvedTheme } from '@sqlrooms/ui';
2
+ /** Built-in basemaps offered in map settings. IDs are persisted in map configs. */
3
+ export declare const DECK_MAP_BASEMAP_STYLES: readonly [{
4
+ readonly id: "light";
5
+ readonly label: "Light";
6
+ readonly theme: "light";
7
+ }, {
8
+ readonly id: "dark";
9
+ readonly label: "Dark";
10
+ readonly theme: "dark";
11
+ }];
12
+ /** Returns the theme variant for a built-in basemap ID, if recognized. */
13
+ export declare function getDeckMapStyleTheme(style: unknown): ResolvedTheme | undefined;
14
+ /** Snapshots the current app theme as a portable basemap ID at map creation. */
15
+ export declare function getDefaultDeckMapStyle(theme?: ResolvedTheme): string;
16
+ //# sourceMappingURL=mapStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapStyles.d.ts","sourceRoot":"","sources":["../src/mapStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,aAAa,EAAC,MAAM,cAAc,CAAC;AAE1D,mFAAmF;AACnF,eAAO,MAAM,uBAAuB;;;;;;;;EAG1B,CAAC;AAEX,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,aAAa,GAAG,SAAS,CAM3B;AAYD,gFAAgF;AAChF,wBAAgB,sBAAsB,CACpC,KAAK,GAAE,aAAiC,GACvC,MAAM,CAER"}
@@ -0,0 +1,32 @@
1
+ import { getTheme } from '@sqlrooms/ui';
2
+ /** Built-in basemaps offered in map settings. IDs are persisted in map configs. */
3
+ export const DECK_MAP_BASEMAP_STYLES = [
4
+ { id: 'light', label: 'Light', theme: 'light' },
5
+ { id: 'dark', label: 'Dark', theme: 'dark' },
6
+ ];
7
+ /** Returns the theme variant for a built-in basemap ID, if recognized. */
8
+ export function getDeckMapStyleTheme(style) {
9
+ // Preserve selections saved by early versions of the Protomaps defaults.
10
+ if (style === 'protomaps-light')
11
+ return 'light';
12
+ if (style === 'protomaps-dark')
13
+ return 'dark';
14
+ return DECK_MAP_BASEMAP_STYLES.find((candidate) => candidate.id === style)
15
+ ?.theme;
16
+ }
17
+ function getCurrentTheme() {
18
+ // ThemeProvider applies the resolved theme here, including hosts with a
19
+ // custom storage key and default theme (such as the CLI).
20
+ if (typeof document !== 'undefined') {
21
+ if (document.documentElement.classList.contains('dark'))
22
+ return 'dark';
23
+ if (document.documentElement.classList.contains('light'))
24
+ return 'light';
25
+ }
26
+ return getTheme();
27
+ }
28
+ /** Snapshots the current app theme as a portable basemap ID at map creation. */
29
+ export function getDefaultDeckMapStyle(theme = getCurrentTheme()) {
30
+ return theme;
31
+ }
32
+ //# sourceMappingURL=mapStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapStyles.js","sourceRoot":"","sources":["../src/mapStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAqB,MAAM,cAAc,CAAC;AAE1D,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,EAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC;IAC7C,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC;CAClC,CAAC;AAEX,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,yEAAyE;IACzE,IAAI,KAAK,KAAK,iBAAiB;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,KAAK,gBAAgB;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC;QACxE,EAAE,KAAK,CAAC;AACZ,CAAC;AAED,SAAS,eAAe;IACtB,wEAAwE;IACxE,0DAA0D;IAC1D,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACvE,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IAC3E,CAAC;IACD,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACpC,QAAuB,eAAe,EAAE;IAExC,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import {getTheme, type ResolvedTheme} from '@sqlrooms/ui';\n\n/** Built-in basemaps offered in map settings. IDs are persisted in map configs. */\nexport const DECK_MAP_BASEMAP_STYLES = [\n {id: 'light', label: 'Light', theme: 'light'},\n {id: 'dark', label: 'Dark', theme: 'dark'},\n] as const;\n\n/** Returns the theme variant for a built-in basemap ID, if recognized. */\nexport function getDeckMapStyleTheme(\n style: unknown,\n): ResolvedTheme | undefined {\n // Preserve selections saved by early versions of the Protomaps defaults.\n if (style === 'protomaps-light') return 'light';\n if (style === 'protomaps-dark') return 'dark';\n return DECK_MAP_BASEMAP_STYLES.find((candidate) => candidate.id === style)\n ?.theme;\n}\n\nfunction getCurrentTheme(): ResolvedTheme {\n // ThemeProvider applies the resolved theme here, including hosts with a\n // custom storage key and default theme (such as the CLI).\n if (typeof document !== 'undefined') {\n if (document.documentElement.classList.contains('dark')) return 'dark';\n if (document.documentElement.classList.contains('light')) return 'light';\n }\n return getTheme();\n}\n\n/** Snapshots the current app theme as a portable basemap ID at map creation. */\nexport function getDefaultDeckMapStyle(\n theme: ResolvedTheme = getCurrentTheme(),\n): string {\n return theme;\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ResolvedTheme } from '@sqlrooms/ui';
2
+ import type { StyleSpecification } from 'maplibre-gl';
3
+ import type { DeckMapBasemapProvider } from './basemap';
4
+ /** Supported Protomaps palettes: light, dark, white, black, and grayscale. */
5
+ export type ProtomapsFlavor = 'light' | 'dark' | 'white' | 'black' | 'grayscale';
6
+ /**
7
+ * Creates a MapLibre style using the hosted Protomaps v4 vector tiles API.
8
+ * The browser-visible API key should be scoped to the host application's origins.
9
+ */
10
+ export declare function createProtomapsStyle(flavor: ProtomapsFlavor, apiKey: string): StyleSpecification;
11
+ /** Creates neutral light/dark Protomaps basemap styles. */
12
+ export declare function createProtomapsDefaultStyles(apiKey: string): Record<ResolvedTheme, StyleSpecification>;
13
+ /**
14
+ * Creates a cached Protomaps provider for createDeckMapsSlice or DeckJsonMap.
15
+ * A missing/blank key returns no style, allowing the default basemaps to load.
16
+ */
17
+ export declare function createProtomapsBasemapProvider(apiKey?: string): DeckMapBasemapProvider;
18
+ //# sourceMappingURL=protomapsStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protomapsStyles.d.ts","sourceRoot":"","sources":["../src/protomapsStyles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,WAAW,CAAC;AAEtD,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,MAAM,GACN,OAAO,GACP,OAAO,GACP,WAAW,CAAC;AAEhB;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAiBpB;AAED,2DAA2D;AAC3D,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAK3C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,MAAM,GACd,sBAAsB,CAIxB"}
@@ -0,0 +1,38 @@
1
+ import { layers, namedFlavor } from '@protomaps/basemaps';
2
+ /**
3
+ * Creates a MapLibre style using the hosted Protomaps v4 vector tiles API.
4
+ * The browser-visible API key should be scoped to the host application's origins.
5
+ */
6
+ export function createProtomapsStyle(flavor, apiKey) {
7
+ return {
8
+ version: 8,
9
+ glyphs: 'https://protomaps.github.io/basemaps-assets/fonts/{fontstack}/{range}.pbf',
10
+ sprite: `https://protomaps.github.io/basemaps-assets/sprites/v4/${flavor}`,
11
+ sources: {
12
+ protomaps: {
13
+ type: 'vector',
14
+ url: `https://api.protomaps.com/tiles/v4.json?key=${encodeURIComponent(apiKey)}`,
15
+ attribution: '<a href="https://protomaps.com">Protomaps</a> ' +
16
+ '© <a href="https://openstreetmap.org">OpenStreetMap</a>',
17
+ },
18
+ },
19
+ layers: layers('protomaps', namedFlavor(flavor), { lang: 'en' }),
20
+ };
21
+ }
22
+ /** Creates neutral light/dark Protomaps basemap styles. */
23
+ export function createProtomapsDefaultStyles(apiKey) {
24
+ return {
25
+ light: createProtomapsStyle('white', apiKey),
26
+ dark: createProtomapsStyle('black', apiKey),
27
+ };
28
+ }
29
+ /**
30
+ * Creates a cached Protomaps provider for createDeckMapsSlice or DeckJsonMap.
31
+ * A missing/blank key returns no style, allowing the default basemaps to load.
32
+ */
33
+ export function createProtomapsBasemapProvider(apiKey) {
34
+ const key = apiKey?.trim();
35
+ const styles = key ? createProtomapsDefaultStyles(key) : undefined;
36
+ return (theme) => styles?.[theme];
37
+ }
38
+ //# sourceMappingURL=protomapsStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protomapsStyles.js","sourceRoot":"","sources":["../src/protomapsStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAaxD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAuB,EACvB,MAAc;IAEd,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EACJ,2EAA2E;QAC7E,MAAM,EAAE,0DAA0D,MAAM,EAAE;QAC1E,OAAO,EAAE;YACP,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,+CAA+C,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAChF,WAAW,EACT,gDAAgD;oBAChD,yDAAyD;aAC5D;SACF;QACD,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,4BAA4B,CAC1C,MAAc;IAEd,OAAO;QACL,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC5C,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import {layers, namedFlavor} from '@protomaps/basemaps';\nimport type {ResolvedTheme} from '@sqlrooms/ui';\nimport type {StyleSpecification} from 'maplibre-gl';\nimport type {DeckMapBasemapProvider} from './basemap';\n\n/** Supported Protomaps palettes: light, dark, white, black, and grayscale. */\nexport type ProtomapsFlavor =\n | 'light'\n | 'dark'\n | 'white'\n | 'black'\n | 'grayscale';\n\n/**\n * Creates a MapLibre style using the hosted Protomaps v4 vector tiles API.\n * The browser-visible API key should be scoped to the host application's origins.\n */\nexport function createProtomapsStyle(\n flavor: ProtomapsFlavor,\n apiKey: string,\n): StyleSpecification {\n return {\n version: 8,\n glyphs:\n 'https://protomaps.github.io/basemaps-assets/fonts/{fontstack}/{range}.pbf',\n sprite: `https://protomaps.github.io/basemaps-assets/sprites/v4/${flavor}`,\n sources: {\n protomaps: {\n type: 'vector',\n url: `https://api.protomaps.com/tiles/v4.json?key=${encodeURIComponent(apiKey)}`,\n attribution:\n '<a href=\"https://protomaps.com\">Protomaps</a> ' +\n '© <a href=\"https://openstreetmap.org\">OpenStreetMap</a>',\n },\n },\n layers: layers('protomaps', namedFlavor(flavor), {lang: 'en'}),\n };\n}\n\n/** Creates neutral light/dark Protomaps basemap styles. */\nexport function createProtomapsDefaultStyles(\n apiKey: string,\n): Record<ResolvedTheme, StyleSpecification> {\n return {\n light: createProtomapsStyle('white', apiKey),\n dark: createProtomapsStyle('black', apiKey),\n };\n}\n\n/**\n * Creates a cached Protomaps provider for createDeckMapsSlice or DeckJsonMap.\n * A missing/blank key returns no style, allowing the default basemaps to load.\n */\nexport function createProtomapsBasemapProvider(\n apiKey?: string,\n): DeckMapBasemapProvider {\n const key = apiKey?.trim();\n const styles = key ? createProtomapsDefaultStyles(key) : undefined;\n return (theme) => styles?.[theme];\n}\n"]}
package/dist/types.d.ts CHANGED
@@ -2,6 +2,7 @@ import type * as arrow from 'apache-arrow';
2
2
  import type { ComponentProps, ReactNode } from 'react';
3
3
  import type DeckGLReact from '@deck.gl/react';
4
4
  import type { MapProps } from 'react-map-gl/maplibre';
5
+ import type { DeckMapBasemapProvider } from './basemap';
5
6
  type DeckProps = ComponentProps<typeof DeckGLReact>;
6
7
  import type { GeometryEncodingHint, PreparedDeckDataset } from './prepare/types';
7
8
  export type { ColorScaleFunction, DeckJsonMapLayerSpec, DeckJsonMapSpec, LayerBindingConfig, LayerBindingProps, } from './DeckJsonMapSpec';
@@ -66,10 +67,17 @@ export type DeckJsonMapHandle = {
66
67
  pitch?: number;
67
68
  }) => void;
68
69
  };
70
+ /**
71
+ * Renders a JSON deck.gl specification with named datasets in a room store.
72
+ * A per-map basemap provider overrides the room's provider; explicit custom
73
+ * map styles take precedence over both providers.
74
+ */
69
75
  export type DeckJsonMapProps = {
70
76
  spec: string | Record<string, unknown>;
71
77
  datasets: Record<string, DeckDatasetInput>;
72
78
  mapStyle?: string;
79
+ /** Overrides the room's optional basemap provider for this map instance. */
80
+ basemapProvider?: DeckMapBasemapProvider;
73
81
  /**
74
82
  * When true, deck.gl renders into the map's own WebGL context rather than
75
83
  * creating a separate overlay canvas. This halves the number of WebGL
@@ -78,6 +86,11 @@ export type DeckJsonMapProps = {
78
86
  */
79
87
  interleaved?: boolean;
80
88
  deckProps?: Partial<DeckProps>;
89
+ /**
90
+ * MapLibre runtime props. Drawing-buffer preservation defaults to true so
91
+ * DOM image capture includes the basemap and interleaved deck layers.
92
+ * Set canvasContextAttributes.preserveDrawingBuffer to false to opt out.
93
+ */
81
94
  mapProps?: Partial<MapProps>;
82
95
  showLegends?: boolean;
83
96
  className?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,WAAW,CAAC;AAEtD,KAAK,SAAS,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AACpD,OAAO,KAAK,EAAC,oBAAoB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAE/E,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,KAAK,eAAe,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,0BAA0B,GAC1B,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,2BAA2B,GAC3B,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AAEpC,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG;IACzD,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,qBAAqB,GACrB,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAC,GACnB;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAC,GAChD;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAC7C,IAAI,CAAC;IACV,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,mBAAmB,CAE9B;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,qBAAqB,CAEhC;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,0BAA0B,CAErC"}