@sqlrooms/deck 0.29.0-rc.11 → 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 (154) hide show
  1. package/README.md +193 -35
  2. package/dist/BlockMapSettings.d.ts.map +1 -1
  3. package/dist/BlockMapSettings.js +4 -16
  4. package/dist/BlockMapSettings.js.map +1 -1
  5. package/dist/DashboardMapSettings.d.ts.map +1 -1
  6. package/dist/DashboardMapSettings.js +7 -10
  7. package/dist/DashboardMapSettings.js.map +1 -1
  8. package/dist/DeckJsonMap.d.ts.map +1 -1
  9. package/dist/DeckJsonMap.js +75 -23
  10. package/dist/DeckJsonMap.js.map +1 -1
  11. package/dist/DeckJsonMapSpec.d.ts +41 -0
  12. package/dist/DeckJsonMapSpec.d.ts.map +1 -1
  13. package/dist/DeckJsonMapSpec.js +2 -0
  14. package/dist/DeckJsonMapSpec.js.map +1 -1
  15. package/dist/DeckMapBasemapSelect.d.ts +9 -0
  16. package/dist/DeckMapBasemapSelect.d.ts.map +1 -0
  17. package/dist/DeckMapBasemapSelect.js +20 -0
  18. package/dist/DeckMapBasemapSelect.js.map +1 -0
  19. package/dist/DeckMapDefaultStylesProvider.d.ts +13 -19
  20. package/dist/DeckMapDefaultStylesProvider.d.ts.map +1 -1
  21. package/dist/DeckMapDefaultStylesProvider.js +11 -18
  22. package/dist/DeckMapDefaultStylesProvider.js.map +1 -1
  23. package/dist/DeckMapSurface.d.ts +1 -1
  24. package/dist/DeckMapSurface.js +1 -1
  25. package/dist/DeckMapSurface.js.map +1 -1
  26. package/dist/DeckMapsSlice.d.ts +5 -0
  27. package/dist/DeckMapsSlice.d.ts.map +1 -1
  28. package/dist/DeckMapsSlice.js +6 -3
  29. package/dist/DeckMapsSlice.js.map +1 -1
  30. package/dist/MapSettings.d.ts +14 -0
  31. package/dist/MapSettings.d.ts.map +1 -1
  32. package/dist/MapSettings.js +548 -192
  33. package/dist/MapSettings.js.map +1 -1
  34. package/dist/MapSettingsControls.d.ts +8 -1
  35. package/dist/MapSettingsControls.d.ts.map +1 -1
  36. package/dist/MapSettingsControls.js +24 -2
  37. package/dist/MapSettingsControls.js.map +1 -1
  38. package/dist/ai.d.ts.map +1 -1
  39. package/dist/ai.js +20 -12
  40. package/dist/ai.js.map +1 -1
  41. package/dist/aiNormalize.d.ts.map +1 -1
  42. package/dist/aiNormalize.js +2 -1
  43. package/dist/aiNormalize.js.map +1 -1
  44. package/dist/basemap.d.ts +23 -0
  45. package/dist/basemap.d.ts.map +1 -0
  46. package/dist/basemap.js +23 -0
  47. package/dist/basemap.js.map +1 -0
  48. package/dist/block.d.ts +1 -1
  49. package/dist/block.d.ts.map +1 -1
  50. package/dist/block.js +13 -9
  51. package/dist/block.js.map +1 -1
  52. package/dist/createOrUpdateDeckMapResource.d.ts +6 -2
  53. package/dist/createOrUpdateDeckMapResource.d.ts.map +1 -1
  54. package/dist/createOrUpdateDeckMapResource.js +57 -4
  55. package/dist/createOrUpdateDeckMapResource.js.map +1 -1
  56. package/dist/datasets/PreparedDatasetStore.d.ts +3 -4
  57. package/dist/datasets/PreparedDatasetStore.d.ts.map +1 -1
  58. package/dist/datasets/PreparedDatasetStore.js +4 -8
  59. package/dist/datasets/PreparedDatasetStore.js.map +1 -1
  60. package/dist/datasets/helpers.d.ts +39 -2
  61. package/dist/datasets/helpers.d.ts.map +1 -1
  62. package/dist/datasets/helpers.js +86 -3
  63. package/dist/datasets/helpers.js.map +1 -1
  64. package/dist/datasets/usePreparedDatasetStates.d.ts.map +1 -1
  65. package/dist/datasets/usePreparedDatasetStates.js +12 -8
  66. package/dist/datasets/usePreparedDatasetStates.js.map +1 -1
  67. package/dist/index.d.ts +6 -3
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +5 -2
  70. package/dist/index.js.map +1 -1
  71. package/dist/json/colorScaleFunction.d.ts +12 -4
  72. package/dist/json/colorScaleFunction.d.ts.map +1 -1
  73. package/dist/json/colorScaleFunction.js.map +1 -1
  74. package/dist/json/compileColorScale.d.ts +3 -2
  75. package/dist/json/compileColorScale.d.ts.map +1 -1
  76. package/dist/json/compileColorScale.js +16 -1
  77. package/dist/json/compileColorScale.js.map +1 -1
  78. package/dist/json/createDeckJsonConfiguration.d.ts.map +1 -1
  79. package/dist/json/createDeckJsonConfiguration.js +235 -175
  80. package/dist/json/createDeckJsonConfiguration.js.map +1 -1
  81. package/dist/json/defaultClasses.d.ts.map +1 -1
  82. package/dist/json/defaultClasses.js +3 -3
  83. package/dist/json/defaultClasses.js.map +1 -1
  84. package/dist/json/extractColorScaleLegends.d.ts.map +1 -1
  85. package/dist/json/extractColorScaleLegends.js +41 -26
  86. package/dist/json/extractColorScaleLegends.js.map +1 -1
  87. package/dist/json/heatmapDefaults.d.ts +17 -7
  88. package/dist/json/heatmapDefaults.d.ts.map +1 -1
  89. package/dist/json/heatmapDefaults.js +54 -12
  90. package/dist/json/heatmapDefaults.js.map +1 -1
  91. package/dist/json/layers/DeckHeatmapLayer.d.ts +32 -0
  92. package/dist/json/layers/DeckHeatmapLayer.d.ts.map +1 -0
  93. package/dist/json/layers/DeckHeatmapLayer.js +69 -0
  94. package/dist/json/layers/DeckHeatmapLayer.js.map +1 -0
  95. package/dist/json/layers/index.d.ts +1 -0
  96. package/dist/json/layers/index.d.ts.map +1 -1
  97. package/dist/json/layers/index.js +1 -0
  98. package/dist/json/layers/index.js.map +1 -1
  99. package/dist/json/rewriteGeoArrowAccessors.d.ts.map +1 -1
  100. package/dist/json/rewriteGeoArrowAccessors.js +13 -5
  101. package/dist/json/rewriteGeoArrowAccessors.js.map +1 -1
  102. package/dist/json/scaleFunction.d.ts +5 -8
  103. package/dist/json/scaleFunction.d.ts.map +1 -1
  104. package/dist/json/scaleFunction.js +30 -5
  105. package/dist/json/scaleFunction.js.map +1 -1
  106. package/dist/mapAiConfig.d.ts +6 -0
  107. package/dist/mapAiConfig.d.ts.map +1 -1
  108. package/dist/mapAiConfig.js +7 -0
  109. package/dist/mapAiConfig.js.map +1 -1
  110. package/dist/mapAiSharedInstructions.d.ts +1 -1
  111. package/dist/mapAiSharedInstructions.d.ts.map +1 -1
  112. package/dist/mapAiSharedInstructions.js +4 -3
  113. package/dist/mapAiSharedInstructions.js.map +1 -1
  114. package/dist/mapConfig.d.ts +6 -1
  115. package/dist/mapConfig.d.ts.map +1 -1
  116. package/dist/mapConfig.js +28 -3
  117. package/dist/mapConfig.js.map +1 -1
  118. package/dist/mapConfigUtils.d.ts +22 -0
  119. package/dist/mapConfigUtils.d.ts.map +1 -1
  120. package/dist/mapConfigUtils.js +152 -5
  121. package/dist/mapConfigUtils.js.map +1 -1
  122. package/dist/mapLayerConfigUtils.d.ts +55 -0
  123. package/dist/mapLayerConfigUtils.d.ts.map +1 -1
  124. package/dist/mapLayerConfigUtils.js +222 -11
  125. package/dist/mapLayerConfigUtils.js.map +1 -1
  126. package/dist/mapResourceAuthoring.d.ts +1 -1
  127. package/dist/mapResourceAuthoring.d.ts.map +1 -1
  128. package/dist/mapResourceAuthoring.js +14 -7
  129. package/dist/mapResourceAuthoring.js.map +1 -1
  130. package/dist/mapStyles.d.ts +16 -0
  131. package/dist/mapStyles.d.ts.map +1 -0
  132. package/dist/mapStyles.js +32 -0
  133. package/dist/mapStyles.js.map +1 -0
  134. package/dist/prepare/prepareDeckDataset.d.ts.map +1 -1
  135. package/dist/prepare/prepareDeckDataset.js +1 -0
  136. package/dist/prepare/prepareDeckDataset.js.map +1 -1
  137. package/dist/prepare/types.d.ts +3 -0
  138. package/dist/prepare/types.d.ts.map +1 -1
  139. package/dist/prepare/types.js.map +1 -1
  140. package/dist/prepare/wkbDecoder.d.ts.map +1 -1
  141. package/dist/prepare/wkbDecoder.js +62 -16
  142. package/dist/prepare/wkbDecoder.js.map +1 -1
  143. package/dist/prepare/wkbParser.d.ts +2 -0
  144. package/dist/prepare/wkbParser.d.ts.map +1 -1
  145. package/dist/prepare/wkbParser.js +1 -0
  146. package/dist/prepare/wkbParser.js.map +1 -1
  147. package/dist/protomapsStyles.d.ts +18 -0
  148. package/dist/protomapsStyles.d.ts.map +1 -0
  149. package/dist/protomapsStyles.js +38 -0
  150. package/dist/protomapsStyles.js.map +1 -0
  151. package/dist/types.d.ts +13 -0
  152. package/dist/types.d.ts.map +1 -1
  153. package/dist/types.js.map +1 -1
  154. package/package.json +11 -9
@@ -1 +1 @@
1
- {"version":3,"file":"MapSettings.js","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["import {FC, useCallback, useMemo, useState} from 'react';\nimport {\n getTableIdentity,\n resolveTableReference,\n type DataTable,\n} from '@sqlrooms/duckdb';\nimport {\n binnedNumericSchemes,\n categoricalSchemes,\n continuousDivergingSchemes,\n continuousSequentialSchemes,\n continuousSequentialInterpolators,\n parseColorString,\n} from '@sqlrooms/color-scales';\nimport type {ColorScaleConfig, ColorScaleScheme} from '@sqlrooms/color-scales';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Slider,\n ScrollArea,\n SettingsPanelHeader,\n Switch,\n} from '@sqlrooms/ui';\nimport {isDeckMapTableDatasetSource, type DeckMapConfig} from './mapConfig';\nimport {\n clearDeckMapLayerColorScale,\n createDeckMapLayerColorScale,\n DECK_MAP_COLOR_SCALE_TYPE_OPTIONS,\n DECK_MAP_LAYER_TYPE_OPTIONS,\n getDeckMapColorAccessorOptions,\n getDeckMapLayerDatasetId,\n getDeckMapLayerColorScale,\n getDeckMapLayerRecords,\n setDeckMapLayerColorScale,\n setDeckMapLayerGeometryColumn,\n setDeckMapLayerHexagonColumn,\n setDeckMapLayerArcColumns,\n setDeckMapLayerTimestampColumn,\n setDeckMapLayerType,\n updateDeckMapLayer,\n type DeckMapLayerColorAccessor,\n type DeckMapLayerRecord,\n usesGeometryColumnSetting,\n usesH3ColumnSetting,\n usesArcColumnSetting,\n usesRadiusSetting,\n usesColumnRadiusSetting,\n usesTripsSettings,\n usesExtrusionSettings,\n} from './mapLayerConfigUtils';\nimport {\n DeckMapCodeViewerPanel,\n DeckMapCodeViewToggleButton,\n DeckMapColumnSelector as ColumnSelector,\n DeckMapColumnsProvider as ColumnsProvider,\n DeckMapSettingsField as Field,\n DeckMapTableSelector as DataTableSelector,\n} from './MapSettingsControls';\nimport {regenerateMapConfigForTable} from './mapConfigUtils';\nimport {useDeckMapDatasetSchema} from './useDeckMapDatasetSchema';\n\nconst HEATMAP_COLOR_STEPS = 6;\nconst EMPTY_COLUMNS: DataTable['columns'] = [];\n\nfunction schemeToColorRange(\n scheme: string,\n): Array<[number, number, number, number]> {\n const interpolator =\n continuousSequentialInterpolators[\n scheme as keyof typeof continuousSequentialInterpolators\n ];\n if (!interpolator) {\n return continuousSequentialInterpolators.Viridis\n ? Array.from({length: HEATMAP_COLOR_STEPS}, (_, i) =>\n parseColorString(\n continuousSequentialInterpolators.Viridis(\n i / (HEATMAP_COLOR_STEPS - 1),\n ),\n ),\n )\n : [];\n }\n return Array.from({length: HEATMAP_COLOR_STEPS}, (_, i) =>\n parseColorString(interpolator(i / (HEATMAP_COLOR_STEPS - 1))),\n );\n}\n\nfunction detectHeatmapScheme(colorRange: unknown): string {\n if (!Array.isArray(colorRange) || colorRange.length === 0) return 'Viridis';\n for (const scheme of continuousSequentialSchemes) {\n const sampled = schemeToColorRange(scheme);\n if (sampled.length === colorRange.length) {\n const matches = sampled.every((color, idx) => {\n const actual = colorRange[idx];\n if (!Array.isArray(actual)) return false;\n return (\n Math.abs(color[0] - actual[0]) < 2 &&\n Math.abs(color[1] - actual[1]) < 2 &&\n Math.abs(color[2] - actual[2]) < 2\n );\n });\n if (matches) return scheme;\n }\n }\n return 'Viridis';\n}\n\nexport interface DeckMapSettingsPanelProps {\n title: string;\n selectedTable?: string;\n config: DeckMapConfig;\n tables: DataTable[];\n onClose?: () => void;\n onTableChange: (table: DataTable) => void;\n onTitleChange: (title: string) => void;\n onConfigChange: (config: DeckMapConfig) => void;\n readOnly?: boolean;\n}\n\nfunction getSchemeOptions(type: ColorScaleConfig['type']) {\n if (type === 'categorical') {\n return categoricalSchemes;\n }\n if (type === 'diverging') {\n return continuousDivergingSchemes;\n }\n if (type === 'sequential') {\n return continuousSequentialSchemes;\n }\n // Quantile/quantize/threshold: ColorBrewer only (Viridis → sequential).\n return binnedNumericSchemes;\n}\n\nexport const DeckMapSettingsPanel: FC<DeckMapSettingsPanelProps> = ({\n title,\n selectedTable,\n config,\n tables,\n onClose,\n onTableChange,\n onTitleChange,\n onConfigChange,\n readOnly,\n}) => {\n const [layerIndex, setLayerIndex] = useState(0);\n const [colorAccessor, setColorAccessor] =\n useState<DeckMapLayerColorAccessor>('getFillColor');\n const [viewMode, setViewMode] = useState<'settings' | 'code'>('settings');\n\n const selectedDataTable = useMemo(\n () =>\n selectedTable\n ? resolveTableReference(tables, selectedTable).table\n : undefined,\n [selectedTable, tables],\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n if (readOnly) return;\n onTableChange(table);\n },\n [onTableChange, readOnly],\n );\n\n const mapConfig = config;\n const serializedMapConfig = useMemo(\n () => JSON.stringify(config, null, 2),\n [config],\n );\n const showCode = viewMode === 'code';\n const layers = getDeckMapLayerRecords(mapConfig);\n const activeLayerIndex = Math.min(layerIndex, Math.max(layers.length - 1, 0));\n const activeLayer = layers[activeLayerIndex];\n const activeLayerDatasetId = getDeckMapLayerDatasetId(activeLayer);\n const activeLayerDataset = activeLayerDatasetId\n ? mapConfig.datasets?.[activeLayerDatasetId]\n : undefined;\n\n // Resolve the structured source table separately from the compiled dataset\n // output. Coordinate selectors edit the source transform, while render\n // bindings such as geometry/color/elevation target output columns.\n const activeLayerDatasetSource = activeLayerDataset?.source;\n const fallbackTableName = isDeckMapTableDatasetSource(\n activeLayerDatasetSource,\n )\n ? activeLayerDatasetSource.tableName\n : undefined;\n const fallbackTable = useMemo(\n () =>\n fallbackTableName\n ? resolveTableReference(tables, fallbackTableName).table\n : undefined,\n [fallbackTableName, tables],\n );\n const sourceDataTable = selectedDataTable ?? fallbackTable;\n const sourceColumns = sourceDataTable?.columns ?? EMPTY_COLUMNS;\n const resolvedActiveLayerDatasetSource = useMemo(() => {\n if (!activeLayerDatasetSource) {\n return selectedDataTable\n ? {tableName: getTableIdentity(selectedDataTable.table)}\n : undefined;\n }\n if (!isDeckMapTableDatasetSource(activeLayerDatasetSource)) {\n return activeLayerDatasetSource;\n }\n\n return {\n tableName: selectedDataTable\n ? getTableIdentity(selectedDataTable.table)\n : activeLayerDatasetSource.tableName,\n ...(activeLayerDatasetSource.transformSql\n ? {transformSql: activeLayerDatasetSource.transformSql}\n : {}),\n };\n }, [activeLayerDatasetSource, selectedDataTable]);\n const datasetSchema = useDeckMapDatasetSchema({\n source: resolvedActiveLayerDatasetSource,\n sourceColumns,\n });\n const outputColumns = datasetSchema.outputColumns;\n const dataOutputColumns = datasetSchema.dataOutputColumns;\n const datasetSchemaErrorMessage = datasetSchema.error?.message;\n\n const showGeometryColumnSetting = usesGeometryColumnSetting(\n activeLayer?.['@@type'],\n );\n const showH3ColumnSetting = usesH3ColumnSetting(activeLayer?.['@@type']);\n const showArcColumnSetting = usesArcColumnSetting(activeLayer?.['@@type']);\n const showRadiusSetting = usesRadiusSetting(activeLayer?.['@@type']);\n const showColumnRadiusSetting = usesColumnRadiusSetting(\n activeLayer?.['@@type'],\n );\n const showTripsSettings = usesTripsSettings(activeLayer?.['@@type']);\n const showExtrusionSettings = usesExtrusionSettings(activeLayer?.['@@type']);\n const colorAccessorOptions = getDeckMapColorAccessorOptions(\n activeLayer?.['@@type'],\n );\n const effectiveColorAccessor =\n colorAccessorOptions.find((option) => option.value === colorAccessor)\n ?.value ?? colorAccessorOptions[0]?.value;\n const isGeoJsonLayer = activeLayer?.['@@type'] === 'GeoJsonLayer';\n const pointRadiusPixels = isGeoJsonLayer\n ? typeof activeLayer?.getPointRadius === 'number'\n ? activeLayer.getPointRadius\n : ((activeLayer?.pointRadiusMinPixels as number | undefined) ?? 2)\n : activeLayer?.radiusUnits === 'pixels' &&\n typeof activeLayer?.getRadius === 'number'\n ? activeLayer.getRadius\n : ((activeLayer?.radiusMinPixels as number | undefined) ?? 2);\n const colorScale = effectiveColorAccessor\n ? getDeckMapLayerColorScale(activeLayer, effectiveColorAccessor)\n : undefined;\n const colorScaleType = colorScale?.type ?? 'sequential';\n const schemeOptions = getSchemeOptions(colorScaleType);\n const isHeatmapLayer = activeLayer?.['@@type'] === 'GeoArrowHeatmapLayer';\n const firstColumnName = dataOutputColumns[0]?.name;\n\n const applyConfig = useCallback(\n (nextConfig: DeckMapConfig) => {\n if (readOnly) return;\n onConfigChange(nextConfig);\n },\n [onConfigChange, readOnly],\n );\n\n const updateColorScale = (patch: {\n field?: string;\n type?: ColorScaleConfig['type'];\n scheme?: ColorScaleScheme;\n }) => {\n const field = patch.field ?? colorScale?.field ?? firstColumnName;\n if (!field || !effectiveColorAccessor) return;\n\n const type = patch.type ?? colorScale?.type ?? 'sequential';\n const scheme =\n patch.scheme ??\n (patch.type && patch.type !== colorScale?.type\n ? undefined\n : colorScale?.scheme);\n\n applyConfig(\n setDeckMapLayerColorScale(\n mapConfig,\n activeLayerIndex,\n effectiveColorAccessor,\n createDeckMapLayerColorScale({\n field,\n type,\n scheme,\n title: field,\n }),\n ),\n );\n };\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <SettingsPanelHeader\n title=\"Map settings\"\n className=\"shrink-0 p-2\"\n actions={\n <DeckMapCodeViewToggleButton\n label={showCode ? 'Show settings' : 'View code'}\n selected={showCode}\n onClick={() =>\n setViewMode((currentViewMode) =>\n currentViewMode === 'code' ? 'settings' : 'code',\n )\n }\n />\n }\n onClose={onClose}\n closeLabel=\"Close map settings\"\n />\n\n {showCode ? (\n <DeckMapCodeViewerPanel\n value={serializedMapConfig}\n copyTooltipLabel=\"Copy map config\"\n />\n ) : (\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-radix-scroll-area-viewport]>div]:!block\">\n <div className=\"flex flex-col gap-2 p-2 pt-0\">\n <Field label=\"Title\">\n <input\n value={title}\n onChange={(e) => onTitleChange(e.target.value)}\n placeholder=\"Map title\"\n disabled={readOnly}\n className=\"border-input placeholder:text-muted-foreground focus-visible:ring-ring h-8 w-full rounded-md border bg-transparent px-3 py-2 text-xs font-medium shadow-sm outline-hidden transition-colors focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </Field>\n\n <Field label=\"Dataset\" required>\n <DataTableSelector\n onChange={handleTableChange}\n tables={tables}\n value={selectedDataTable}\n disabled={readOnly}\n />\n </Field>\n\n {layers.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {layers.length > 1 && (\n <Field label=\"Layer\">\n <Select\n value={String(activeLayerIndex)}\n onValueChange={(value) => setLayerIndex(Number(value))}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {layers.map((layer, index) => (\n <SelectItem key={index} value={String(index)}>\n {String(layer.id ?? `Layer ${index + 1}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n )}\n\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">Visible</span>\n <Switch\n checked={activeLayer?.visible !== false}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n visible: checked,\n }),\n ),\n )\n }\n />\n </div>\n\n <Field label=\"Layer type\">\n <Select\n value={\n typeof activeLayer?.['@@type'] === 'string'\n ? activeLayer['@@type']\n : undefined\n }\n onValueChange={(value) =>\n applyConfig(\n setDeckMapLayerType(mapConfig, activeLayerIndex, value),\n )\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select layer type\" />\n </SelectTrigger>\n <SelectContent>\n {DECK_MAP_LAYER_TYPE_OPTIONS.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n\n {(datasetSchema.isLoading || datasetSchemaErrorMessage) && (\n <div className=\"text-muted-foreground rounded-md border px-2 py-1.5 text-xs\">\n {datasetSchema.isLoading\n ? 'Inspecting dataset schema...'\n : `Dataset schema unavailable: ${datasetSchemaErrorMessage}`}\n </div>\n )}\n\n {showTripsSettings && (\n <>\n {outputColumns.length > 0 && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Timestamp column\" required>\n <ColumnSelector\n value={\n (\n activeLayer?._sqlroomsBinding as Record<\n string,\n unknown\n >\n )?.timestampColumn as string | undefined\n }\n onChange={(timestampColumn) =>\n applyConfig(\n setDeckMapLayerTimestampColumn(\n mapConfig,\n activeLayerIndex,\n timestampColumn,\n ),\n )\n }\n placeholder=\"Select timestamp column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n <Field\n label={`Line width: ${(activeLayer?.widthMinPixels as number | undefined) ?? 3}px`}\n >\n <Slider\n min={1}\n max={20}\n step={1}\n value={[\n (activeLayer?.widthMinPixels as number | undefined) ??\n 3,\n ]}\n onValueChange={(values) => {\n const value = values[0] ?? 3;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n widthMinPixels: value,\n }),\n ),\n );\n }}\n />\n </Field>\n <Field\n label={`Trail length: ${Math.round(((activeLayer?._trailLengthFactor as number | undefined) ?? 0.4) * 100)}%`}\n >\n <Slider\n min={5}\n max={100}\n step={5}\n value={[\n Math.round(\n ((activeLayer?._trailLengthFactor as\n | number\n | undefined) ?? 0.4) * 100,\n ),\n ]}\n onValueChange={(values) => {\n const value = (values[0] ?? 40) / 100;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n _trailLengthFactor: value,\n }),\n ),\n );\n }}\n />\n </Field>\n </>\n )}\n\n {isHeatmapLayer ? (\n <div className=\"flex flex-col gap-2 rounded-md border p-2\">\n <span className=\"text-xs font-medium\">\n Color scheme (density)\n </span>\n <Field label=\"Scheme\">\n <Select\n value={detectHeatmapScheme(activeLayer?.colorRange)}\n onValueChange={(value) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n colorRange: schemeToColorRange(value),\n }),\n ),\n )\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {continuousSequentialSchemes.map((scheme) => (\n <SelectItem key={scheme} value={scheme}>\n {scheme}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n </div>\n ) : (\n <div className=\"flex flex-col gap-2 rounded-md border p-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Color scale</span>\n <Switch\n checked={Boolean(colorScale)}\n onCheckedChange={(checked) => {\n if (!effectiveColorAccessor) return;\n if (checked) {\n updateColorScale({});\n return;\n }\n applyConfig(\n clearDeckMapLayerColorScale(\n mapConfig,\n activeLayerIndex,\n effectiveColorAccessor,\n ),\n );\n }}\n disabled={!firstColumnName || !effectiveColorAccessor}\n />\n </div>\n\n {effectiveColorAccessor && (\n <Field label=\"Color property\">\n <Select\n value={effectiveColorAccessor}\n onValueChange={(value) =>\n setColorAccessor(value as DeckMapLayerColorAccessor)\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {colorAccessorOptions.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n )}\n\n {colorScale && dataOutputColumns.length > 0 && (\n <ColumnsProvider columns={dataOutputColumns}>\n <Field label=\"Color field\" required>\n {colorScaleType === 'categorical' ? (\n <ColumnSelector.Categorical\n value={colorScale.field}\n onChange={(field) => updateColorScale({field})}\n disabled={readOnly}\n />\n ) : (\n <ColumnSelector.Quantitative\n value={colorScale.field}\n onChange={(field) => updateColorScale({field})}\n disabled={readOnly}\n />\n )}\n </Field>\n </ColumnsProvider>\n )}\n\n {colorScale && (\n <>\n <Field label=\"Scale type\">\n <Select\n value={colorScaleType}\n onValueChange={(value) =>\n updateColorScale({\n type: value as ColorScaleConfig['type'],\n })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DECK_MAP_COLOR_SCALE_TYPE_OPTIONS.map(\n (option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n >\n {option.label}\n </SelectItem>\n ),\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field label=\"Scheme\">\n <Select\n value={colorScale.scheme}\n onValueChange={(value) =>\n updateColorScale({\n scheme: value as ColorScaleScheme,\n })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {schemeOptions.map((scheme) => (\n <SelectItem key={scheme} value={scheme}>\n {scheme}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n </>\n )}\n </div>\n )}\n </div>\n )}\n\n {isHeatmapLayer && (\n <Field\n label={`Radius: ${(activeLayer?.radiusPixels as number | undefined) ?? 30}px`}\n >\n <div className=\"pt-0.5\">\n <Slider\n min={1}\n max={100}\n step={1}\n value={[\n (activeLayer?.radiusPixels as number | undefined) ?? 30,\n ]}\n onValueChange={(values) => {\n const value = values[0] ?? 30;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n radiusPixels: value,\n }),\n ),\n );\n }}\n />\n </div>\n </Field>\n )}\n\n {showRadiusSetting && (\n <Field label={`Point radius: ${pointRadiusPixels}px`}>\n <div className=\"pt-0.5\">\n <Slider\n min={1}\n max={50}\n step={1}\n value={[pointRadiusPixels]}\n onValueChange={(values) => {\n const value = values[0] ?? 2;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => {\n const nextLayer: DeckMapLayerRecord =\n layer['@@type'] === 'GeoJsonLayer'\n ? {\n ...layer,\n pointRadiusUnits: 'pixels',\n pointRadiusMinPixels: value,\n pointRadiusMaxPixels: Math.max(\n value,\n (layer.pointRadiusMaxPixels as\n | number\n | undefined) ?? value,\n ),\n getPointRadius: value,\n }\n : {\n ...layer,\n radiusMinPixels: value,\n radiusMaxPixels: Math.max(\n value,\n (layer.radiusMaxPixels as\n | number\n | undefined) ?? value,\n ),\n };\n\n if (\n layer['@@type'] !== 'GeoJsonLayer' &&\n layer.radiusUnits === 'pixels' &&\n typeof layer.getRadius !== 'string'\n ) {\n nextLayer.getRadius = value;\n }\n\n return nextLayer;\n },\n ),\n );\n }}\n />\n </div>\n </Field>\n )}\n\n {showColumnRadiusSetting && (\n <Field\n label={`Column radius: ${(activeLayer?.radius as number | undefined) ?? 50}m`}\n >\n <div className=\"pt-0.5\">\n <Slider\n min={1}\n max={10000}\n step={1}\n value={[(activeLayer?.radius as number | undefined) ?? 50]}\n onValueChange={(values) => {\n const value = values[0] ?? 50;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n radius: value,\n }),\n ),\n );\n }}\n />\n </div>\n </Field>\n )}\n\n {outputColumns.length > 0 && showGeometryColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Geometry column\" required>\n <ColumnSelector\n value={activeLayerDataset?.geometryColumn}\n onChange={(geometryColumn) =>\n applyConfig(\n setDeckMapLayerGeometryColumn(\n mapConfig,\n activeLayerIndex,\n geometryColumn,\n ),\n )\n }\n placeholder=\"Select geometry column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {outputColumns.length > 0 && showH3ColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"H3 column\" required>\n <ColumnSelector\n value={\n (activeLayer?._sqlroomsBinding as Record<string, unknown>)\n ?.hexagonColumn as string | undefined\n }\n onChange={(hexagonColumn) =>\n applyConfig(\n setDeckMapLayerHexagonColumn(\n mapConfig,\n activeLayerIndex,\n hexagonColumn,\n ),\n )\n }\n placeholder=\"Select H3 index column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {outputColumns.length > 0 && showArcColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Source geometry\" required>\n <ColumnSelector\n value={\n (activeLayer?._sqlroomsBinding as Record<string, unknown>)\n ?.sourceGeometryColumn as string | undefined\n }\n onChange={(sourceGeometryColumn) =>\n applyConfig(\n setDeckMapLayerArcColumns(mapConfig, activeLayerIndex, {\n sourceGeometryColumn,\n }),\n )\n }\n placeholder=\"Select source geometry...\"\n disabled={readOnly}\n />\n </Field>\n <Field label=\"Target geometry\" required>\n <ColumnSelector\n value={\n (activeLayer?._sqlroomsBinding as Record<string, unknown>)\n ?.targetGeometryColumn as string | undefined\n }\n onChange={(targetGeometryColumn) =>\n applyConfig(\n setDeckMapLayerArcColumns(mapConfig, activeLayerIndex, {\n targetGeometryColumn,\n }),\n )\n }\n placeholder=\"Select target geometry...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {showArcColumnSetting && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">Flat lines</span>\n <Switch\n checked={activeLayer?.getHeight === 0}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n getHeight: checked ? 0 : undefined,\n }),\n ),\n )\n }\n />\n </div>\n )}\n\n {showArcColumnSetting && (\n <Field\n label={`Line width: ${(activeLayer?.widthMinPixels as number | undefined) ?? 1}px`}\n >\n <Slider\n min={1}\n max={20}\n step={1}\n value={[\n (activeLayer?.widthMinPixels as number | undefined) ?? 1,\n ]}\n onValueChange={(values) => {\n const value = values[0] ?? 1;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n widthMinPixels: value,\n }),\n ),\n );\n }}\n />\n </Field>\n )}\n\n {showExtrusionSettings && (\n <div className=\"flex flex-col gap-2 rounded-md border p-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Extrusion</span>\n <Switch\n checked={Boolean(activeLayer?.extruded)}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n extruded: checked,\n getElevation: checked\n ? (layer.getElevation ?? 1)\n : layer.getElevation,\n }),\n ),\n )\n }\n />\n </div>\n\n {Boolean(activeLayer?.extruded) &&\n dataOutputColumns.length > 0 && (\n <ColumnsProvider columns={dataOutputColumns}>\n <Field label=\"Elevation column\">\n <ColumnSelector.Numeric\n value={(() => {\n const elev = activeLayer?.getElevation;\n if (\n elev &&\n typeof elev === 'object' &&\n '@@function' in (elev as object)\n ) {\n return (elev as Record<string, unknown>).field as\n | string\n | undefined;\n }\n if (\n typeof elev === 'string' &&\n elev.startsWith('@@=')\n ) {\n return elev.slice(3);\n }\n return undefined;\n })()}\n onChange={(elevationColumn) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n getElevation: elevationColumn\n ? {\n '@@function': 'scale',\n field: elevationColumn,\n type: 'linear',\n domain: 'auto',\n range: [0, 200],\n }\n : undefined,\n elevationScale: layer.elevationScale ?? 1,\n }),\n ),\n )\n }\n placeholder=\"Select elevation column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {Boolean(activeLayer?.extruded) && (\n <Field\n label={`Elevation scale: ${(activeLayer?.elevationScale as number | undefined) ?? 1}x`}\n >\n <div className=\"pt-1.5\">\n <Slider\n min={0.01}\n max={100}\n step={0.01}\n value={[\n (activeLayer?.elevationScale as number | undefined) ??\n 1,\n ]}\n onValueChange={(values) => {\n const value = values[0] ?? 1;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n elevationScale: value,\n }),\n ),\n );\n }}\n />\n </div>\n </Field>\n )}\n </div>\n )}\n\n {sourceDataTable &&\n !showGeometryColumnSetting &&\n !showH3ColumnSetting &&\n !showArcColumnSetting && (\n <ColumnsProvider columns={sourceColumns}>\n <Field label=\"Latitude column\" required>\n <ColumnSelector.Numeric\n value={mapConfig.fitToData?.latitudeColumn}\n onChange={(latitudeColumn) => {\n const longitudeColumn =\n mapConfig.fitToData?.longitudeColumn;\n applyConfig(\n regenerateMapConfigForTable(\n {config: mapConfig},\n sourceDataTable,\n longitudeColumn,\n latitudeColumn,\n ) as DeckMapConfig,\n );\n }}\n disabled={readOnly}\n />\n </Field>\n <Field label=\"Longitude column\" required>\n <ColumnSelector.Numeric\n value={mapConfig.fitToData?.longitudeColumn}\n onChange={(longitudeColumn) => {\n const latitudeColumn =\n mapConfig.fitToData?.latitudeColumn;\n applyConfig(\n regenerateMapConfigForTable(\n {config: mapConfig},\n sourceDataTable,\n longitudeColumn,\n latitudeColumn,\n ) as DeckMapConfig,\n );\n }}\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n </div>\n </ScrollArea>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MapSettings.js","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type MutableRefObject,\n type ReactNode,\n} from 'react';\nimport {\n getTableIdentity,\n resolveTableReference,\n type DataTable,\n} from '@sqlrooms/duckdb';\nimport {\n binnedNumericSchemes,\n categoricalSchemeColors,\n categoricalSchemes,\n continuousDivergingInterpolators,\n continuousDivergingSchemes,\n continuousSequentialSchemes,\n continuousSequentialInterpolators,\n parseColorString,\n} from '@sqlrooms/color-scales';\nimport type {ColorScaleConfig, ColorScaleScheme} from '@sqlrooms/color-scales';\nimport {\n cn,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Slider,\n ScrollArea,\n SettingsPanelHeader,\n Switch,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {AlertTriangleIcon} from 'lucide-react';\nimport {DeckMapBasemapSelect} from './DeckMapBasemapSelect';\nimport {isDeckMapTableDatasetSource, type DeckMapConfig} from './mapConfig';\nimport {\n clearDeckMapLayerColorScale,\n createDeckMapLayerColorScale,\n DECK_MAP_COLOR_SCALE_TYPE_OPTIONS,\n DECK_MAP_DEFAULT_LAYER_COLOR,\n DECK_MAP_DEFAULT_STROKE_COLOR,\n DECK_MAP_LAYER_TYPE_OPTIONS,\n deckMapRgbaToHex,\n getDeckMapColorAccessorOptions,\n getDeckMapLayerDatasetId,\n getDeckMapLayerColorScale,\n getDeckMapLayerExtruded,\n getDeckMapLayerFlatColor,\n getDeckMapLayerRecords,\n setDeckMapLayerFlatColor,\n setDeckMapLayerGeometryColumn,\n setDeckMapLayerHexagonColumn,\n setDeckMapLayerArcColumns,\n setDeckMapLayerTimestampColumn,\n setDeckMapLayerType,\n setDeckMapLayerColumnRadius,\n updateDeckMapLayer,\n type DeckMapLayerColorAccessor,\n type DeckMapLayerRecord,\n usesGeometryColumnSetting,\n usesH3ColumnSetting,\n usesArcColumnSetting,\n usesRadiusSetting,\n usesColumnRadiusSetting,\n usesTripsSettings,\n usesExtrusionSettings,\n usesStrokeSetting,\n usesStrokeExtrusionWarning,\n getDeckMapLayerStrokeDefault,\n getDeckMapColorScaleOpacity,\n getDeckMapLayerChannelOpacityPercent,\n detachDeckMapLayerOpacity,\n replaceDeckMapLayerColorScalesWithFlat,\n replaceDeckMapLayerColorScaleWithFlat,\n} from './mapLayerConfigUtils';\nimport {\n DeckMapCodeViewerPanel,\n DeckMapCodeViewToggleButton,\n DeckMapColumnSelector as ColumnSelector,\n DeckMapColumnsProvider as ColumnsProvider,\n DeckMapSettingsField as Field,\n DeckMapTableSelector as DataTableSelector,\n filterDeckMapColumns,\n isDeckMapCategoricalColorColumn,\n} from './MapSettingsControls';\nimport {regenerateMapConfigForTable} from './mapConfigUtils';\nimport {useDeckMapDatasetSchema} from './useDeckMapDatasetSchema';\nimport {\n detectHeatmapScheme,\n heatmapSchemeToColorRange,\n} from './json/heatmapDefaults';\n\nconst EMPTY_COLUMNS: DataTable['columns'] = [];\n\nfunction getColorScaleColumnKind(\n type: ColorScaleConfig['type'],\n): 'quantitative' | 'categorical' {\n return type === 'categorical' ? 'categorical' : 'quantitative';\n}\n\n/** Color-scale type matching the field's column kind. */\nfunction resolveColorScaleTypeForField(\n columns: DataTable['columns'],\n field: string | undefined,\n preferredType: ColorScaleConfig['type'],\n): ColorScaleConfig['type'] {\n if (!field) return preferredType;\n const column = columns.find((candidate) => candidate.name === field);\n if (!column?.type) return preferredType;\n // String/boolean/binary fields only work with categorical scales.\n if (isDeckMapCategoricalColorColumn(column)) {\n return 'categorical';\n }\n return preferredType;\n}\n\n/** First selectable color-scale field for this type. */\nfunction getDefaultColorScaleField(\n columns: DataTable['columns'],\n type: ColorScaleConfig['type'],\n preferred?: string,\n): string | undefined {\n const colorable = filterDeckMapColumns(columns, 'colorable');\n if (preferred && colorable.some((column) => column.name === preferred)) {\n return preferred;\n }\n const matchingKind = filterDeckMapColumns(\n colorable,\n getColorScaleColumnKind(type),\n );\n return matchingKind[0]?.name ?? colorable[0]?.name;\n}\n\n/** Pick field first, then coerce scale type to match that field. */\nexport function resolveColorScaleFieldAndType(\n columns: DataTable['columns'],\n preferredType: ColorScaleConfig['type'],\n preferredField?: string,\n): {field: string; type: ColorScaleConfig['type']} | undefined {\n const field = getDefaultColorScaleField(\n columns,\n preferredType,\n preferredField,\n );\n if (!field) return undefined;\n return {\n field,\n type: resolveColorScaleTypeForField(columns, field, preferredType),\n };\n}\n\nexport interface DeckMapSettingsPanelProps {\n title: string;\n selectedTable?: string;\n config: DeckMapConfig;\n tables: DataTable[];\n onClose?: () => void;\n onTableChange: (table: DataTable) => void;\n onTitleChange: (title: string) => void;\n onConfigChange: (config: DeckMapConfig) => void;\n readOnly?: boolean;\n /** Custom maps stay on the JSON editor so basic controls cannot clobber them. */\n customConfig?: boolean;\n /**\n * Document maps own their dataset in `config.datasets`. Prefer that table\n * over `selectedTable`, which is only a sidecar. Dashboards leave this false\n * so the shared dashboard selected table is shown.\n */\n preferDatasetSource?: boolean;\n}\n\nfunction getSchemeOptions(type: ColorScaleConfig['type']) {\n if (type === 'categorical') {\n return categoricalSchemes;\n }\n if (type === 'diverging') {\n return continuousDivergingSchemes;\n }\n if (type === 'sequential') {\n return continuousSequentialSchemes;\n }\n // Quantile/quantize/threshold: ColorBrewer only (Viridis → sequential).\n return binnedNumericSchemes;\n}\n\nconst SCHEME_PREVIEW_STEPS = 24;\n\n/** Sample CSS colors for scheme dropdown previews. */\nfunction getSchemePreviewColors(\n scheme: string,\n type: ColorScaleConfig['type'],\n): string[] {\n if (type === 'categorical') {\n const colors =\n categoricalSchemeColors[scheme as keyof typeof categoricalSchemeColors];\n return colors ? [...colors] : [];\n }\n\n const interpolator =\n type === 'diverging'\n ? continuousDivergingInterpolators[\n scheme as keyof typeof continuousDivergingInterpolators\n ]\n : (continuousSequentialInterpolators[\n scheme as keyof typeof continuousSequentialInterpolators\n ] ??\n continuousDivergingInterpolators[\n scheme as keyof typeof continuousDivergingInterpolators\n ]);\n\n if (!interpolator) return [];\n return Array.from({length: SCHEME_PREVIEW_STEPS}, (_, i) =>\n interpolator(i / (SCHEME_PREVIEW_STEPS - 1)),\n );\n}\n\n/** Edge-to-edge CSS gradient for a scheme (no fringe gaps). */\nfunction getSchemePreviewGradient(\n colors: string[],\n type: ColorScaleConfig['type'],\n): string | undefined {\n if (colors.length === 0) return undefined;\n if (type === 'categorical') {\n const stops = colors.flatMap((color, index) => {\n const start = (index / colors.length) * 100;\n const end = ((index + 1) / colors.length) * 100;\n return [`${color} ${start}%`, `${color} ${end}%`];\n });\n return `linear-gradient(to right, ${stops.join(', ')})`;\n }\n return `linear-gradient(to right, ${colors.join(', ')})`;\n}\n\nconst ColorSchemeOptionLabel: FC<{\n scheme: string;\n type: ColorScaleConfig['type'];\n}> = ({scheme, type}) => {\n const colors = getSchemePreviewColors(scheme, type);\n const gradient = getSchemePreviewGradient(colors, type);\n return (\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n {gradient ? (\n <span\n aria-hidden\n className=\"h-3 w-20 shrink-0 overflow-hidden rounded-sm\"\n style={{backgroundImage: gradient}}\n />\n ) : null}\n <span className=\"truncate\">{scheme}</span>\n </span>\n );\n};\n\n/** Compact color swatch; native picker is visually hidden. */\nconst ColorSwatchInput: FC<{\n value: string;\n onChange: (hex: string) => void;\n disabled?: boolean;\n 'aria-label': string;\n}> = ({value, onChange, disabled, 'aria-label': ariaLabel}) => (\n <label\n className={cn(\n 'border-input relative h-5 w-9 shrink-0 overflow-hidden rounded-[3px] border',\n 'ring-offset-background focus-within:ring-ring focus-within:ring-1 focus-within:ring-offset-1',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n )}\n style={{backgroundColor: value}}\n >\n <input\n type=\"color\"\n aria-label={ariaLabel}\n value={value}\n disabled={disabled}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n onChange={(event) => onChange(event.target.value)}\n />\n </label>\n);\n\nfunction opacityPercentToAlpha(percent: number): number {\n return Math.round((Math.max(0, Math.min(100, percent)) / 100) * 255);\n}\n\nfunction getLayerOpacityPercent(layer: DeckMapLayerRecord | undefined): number {\n const opacity = layer?.opacity;\n if (typeof opacity === 'number' && Number.isFinite(opacity)) {\n return Math.round(Math.max(0, Math.min(1, opacity)) * 100);\n }\n return 100;\n}\n\nconst SettingsSliderField: FC<{\n label: string;\n children: ReactNode;\n}> = ({label, children}) => (\n <Field label={label}>\n <div className=\"pt-0.5\">{children}</div>\n </Field>\n);\n\nconst AppearanceOpacitySlider: FC<{\n valuePercent: number;\n onChange: (percent: number) => void;\n disabled?: boolean;\n}> = ({valuePercent, onChange, disabled}) => (\n <SettingsSliderField label={`Opacity: ${valuePercent}%`}>\n <Slider\n min={0}\n max={100}\n step={1}\n value={[valuePercent]}\n disabled={disabled}\n onValueChange={(values) => onChange(values[0] ?? valuePercent)}\n />\n </SettingsSliderField>\n);\n\ntype AppearanceColorChannelProps = {\n accessor: DeckMapLayerColorAccessor;\n layer: DeckMapLayerRecord | undefined;\n columns: DataTable['columns'];\n mapConfig: DeckMapConfig;\n layerIndex: number;\n applyConfig: (config: DeckMapConfig) => void;\n lastColorScaleFieldsRef: MutableRefObject<\n Partial<Record<DeckMapLayerColorAccessor, string>>\n >;\n readOnly?: boolean;\n /** Stroke enable switch. */\n enabled?: boolean;\n onEnabledChange?: (enabled: boolean) => void;\n enableLabel?: string;\n defaultFlatColor?: readonly [number, number, number, number];\n widthPixels?: number;\n onWidthChange?: (width: number) => void;\n widthLabel?: string;\n radiusValue?: number;\n onRadiusChange?: (radius: number) => void;\n radiusLabel?: string;\n radiusUnit?: string;\n radiusMin?: number;\n radiusMax?: number;\n radiusStep?: number;\n /** Warning that strokes are ignored while the layer is extruded. */\n extrusionDisablesStroke?: boolean;\n};\n\nconst AppearanceColorChannel: FC<AppearanceColorChannelProps> = ({\n accessor,\n layer,\n columns,\n mapConfig,\n layerIndex,\n applyConfig,\n lastColorScaleFieldsRef,\n readOnly,\n enabled,\n onEnabledChange,\n enableLabel = 'Enabled',\n defaultFlatColor = DECK_MAP_DEFAULT_LAYER_COLOR,\n widthPixels,\n onWidthChange,\n widthLabel = 'Width',\n radiusValue,\n onRadiusChange,\n radiusLabel = 'Radius',\n radiusUnit = '',\n radiusMin = 0.1,\n radiusMax = 50,\n radiusStep = 0.1,\n extrusionDisablesStroke = false,\n}) => {\n const colorScale = getDeckMapLayerColorScale(layer, accessor);\n const flatColor = getDeckMapLayerFlatColor(layer, accessor) ?? [\n ...defaultFlatColor,\n ];\n const colorScaleType = colorScale?.type ?? 'sequential';\n const schemeOptions = getSchemeOptions(colorScaleType);\n // Don't read lastColorScaleFieldsRef during render (react-hooks/refs).\n const defaultField = getDefaultColorScaleField(columns, colorScaleType);\n const showControls = enabled !== false;\n const opacityPercent = getDeckMapLayerChannelOpacityPercent(\n layer,\n accessor,\n flatColor[3] ?? 255,\n );\n\n const updateColorScale = (patch: {\n field?: string;\n type?: ColorScaleConfig['type'];\n scheme?: ColorScaleScheme;\n }) => {\n const preferredField =\n patch.field ??\n colorScale?.field ??\n lastColorScaleFieldsRef.current[accessor];\n const resolved = resolveColorScaleFieldAndType(\n columns,\n patch.type ?? colorScale?.type ?? 'sequential',\n preferredField,\n );\n if (!resolved) return;\n const {field, type} = resolved;\n\n lastColorScaleFieldsRef.current[accessor] = field;\n const scheme =\n patch.scheme ??\n (patch.type && patch.type !== colorScale?.type\n ? undefined\n : type !== colorScale?.type\n ? undefined\n : colorScale?.scheme);\n\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => {\n const detached = detachDeckMapLayerOpacity(nextLayer);\n const existingScale = getDeckMapLayerColorScale(detached, accessor);\n const currentFlat =\n getDeckMapLayerFlatColor(detached, accessor) ?? flatColor;\n return {\n ...detached,\n [accessor]: createDeckMapLayerColorScale({\n field,\n type,\n scheme,\n title: field,\n opacity: existingScale\n ? getDeckMapColorScaleOpacity(existingScale)\n : (currentFlat[3] ?? 255) / 255,\n }),\n };\n }),\n );\n };\n\n return (\n <div className=\"flex flex-col gap-2\">\n {onEnabledChange ? (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-1 text-xs font-medium\">\n {enableLabel}\n {extrusionDisablesStroke ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"inline-flex\"\n aria-label=\"no strokes with extrusion enabled\"\n >\n <AlertTriangleIcon className=\"h-3.5 w-3.5 text-amber-500\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n no strokes with extrusion enabled\n </TooltipContent>\n </Tooltip>\n ) : null}\n </span>\n <Switch\n checked={enabled !== false}\n onCheckedChange={onEnabledChange}\n aria-label={enableLabel}\n />\n </div>\n ) : null}\n\n {showControls && onWidthChange && widthPixels !== undefined ? (\n <SettingsSliderField\n label={`${widthLabel}: ${Number(widthPixels.toFixed(1))}px`}\n >\n <Slider\n min={0.1}\n max={20}\n step={0.1}\n value={[widthPixels]}\n onValueChange={(values) => onWidthChange(values[0] ?? 1)}\n />\n </SettingsSliderField>\n ) : null}\n\n {showControls && onRadiusChange && radiusValue !== undefined ? (\n <SettingsSliderField\n label={`${radiusLabel}: ${\n radiusStep < 1 ? Number(radiusValue.toFixed(1)) : radiusValue\n }${radiusUnit}`}\n >\n <Slider\n min={radiusMin}\n max={radiusMax}\n step={radiusStep}\n value={[radiusValue]}\n onValueChange={(values) => onRadiusChange(values[0] ?? radiusValue)}\n />\n </SettingsSliderField>\n ) : null}\n\n {showControls ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Color scale</span>\n <Switch\n checked={Boolean(colorScale)}\n disabled={readOnly || (!colorScale && !defaultField)}\n aria-label=\"Color scale\"\n onCheckedChange={(checked) => {\n if (checked) {\n updateColorScale({});\n return;\n }\n if (colorScale?.field) {\n lastColorScaleFieldsRef.current[accessor] = colorScale.field;\n }\n applyConfig(\n clearDeckMapLayerColorScale(mapConfig, layerIndex, accessor),\n );\n }}\n />\n </div>\n\n {!colorScale ? (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Color</span>\n <ColorSwatchInput\n aria-label=\"Color\"\n value={deckMapRgbaToHex(flatColor)}\n disabled={readOnly}\n onChange={(hex) => {\n const next = parseColorString(hex, flatColor[3] ?? 255);\n applyConfig(\n setDeckMapLayerFlatColor(\n mapConfig,\n layerIndex,\n accessor,\n next,\n ),\n );\n }}\n />\n </div>\n ) : null}\n\n {colorScale ? (\n <div className=\"flex flex-col gap-2\">\n {columns.length > 0 ? (\n <ColumnsProvider columns={columns}>\n <Field label=\"Field\" required>\n <ColumnSelector.Colorable\n value={colorScale.field}\n onChange={(field) => updateColorScale({field})}\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n ) : null}\n <Field label=\"Type\">\n <Select\n value={colorScaleType}\n onValueChange={(value) =>\n updateColorScale({type: value as ColorScaleConfig['type']})\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DECK_MAP_COLOR_SCALE_TYPE_OPTIONS.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n <Field label=\"Scheme\">\n <Select\n value={colorScale.scheme}\n onValueChange={(value) =>\n updateColorScale({scheme: value as ColorScaleScheme})\n }\n >\n <SelectTrigger className=\"w-full [&>span]:line-clamp-none\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {schemeOptions.map((scheme) => (\n <SelectItem key={scheme} value={scheme}>\n <ColorSchemeOptionLabel\n scheme={scheme}\n type={colorScaleType}\n />\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n </div>\n ) : null}\n\n <AppearanceOpacitySlider\n valuePercent={opacityPercent}\n disabled={readOnly}\n onChange={(percent) => {\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => {\n const detached = detachDeckMapLayerOpacity(nextLayer);\n if (colorScale) {\n const scale =\n getDeckMapLayerColorScale(detached, accessor) ??\n colorScale;\n return {\n ...detached,\n [accessor]: {\n ...scale,\n opacity: percent / 100,\n },\n };\n }\n const current =\n getDeckMapLayerFlatColor(detached, accessor) ?? flatColor;\n return {\n ...detached,\n [accessor]: [\n current[0],\n current[1],\n current[2],\n opacityPercentToAlpha(percent),\n ],\n };\n }),\n );\n }}\n />\n </>\n ) : null}\n </div>\n );\n};\n\n/** Arc source/target colors; optional shared color scale. */\nconst AppearanceArcColorPanel: FC<{\n layer: DeckMapLayerRecord | undefined;\n columns: DataTable['columns'];\n mapConfig: DeckMapConfig;\n layerIndex: number;\n applyConfig: (config: DeckMapConfig) => void;\n lastColorScaleFieldsRef: MutableRefObject<\n Partial<Record<DeckMapLayerColorAccessor, string>>\n >;\n readOnly?: boolean;\n}> = ({\n layer,\n columns,\n mapConfig,\n layerIndex,\n applyConfig,\n lastColorScaleFieldsRef,\n readOnly,\n}) => {\n const sourceScale = getDeckMapLayerColorScale(layer, 'getSourceColor');\n const targetScale = getDeckMapLayerColorScale(layer, 'getTargetColor');\n const colorScale = sourceScale ?? targetScale;\n const colorScaleType = colorScale?.type ?? 'sequential';\n const schemeOptions = getSchemeOptions(colorScaleType);\n // Don't read lastColorScaleFieldsRef during render (react-hooks/refs).\n const defaultField = getDefaultColorScaleField(columns, colorScaleType);\n const sourceFlat = getDeckMapLayerFlatColor(layer, 'getSourceColor') ?? [\n ...DECK_MAP_DEFAULT_LAYER_COLOR,\n ];\n const targetFlat = getDeckMapLayerFlatColor(layer, 'getTargetColor') ?? [\n ...DECK_MAP_DEFAULT_LAYER_COLOR,\n ];\n const opacityPercent = Math.round(\n (getDeckMapLayerChannelOpacityPercent(\n layer,\n 'getSourceColor',\n sourceFlat[3] ?? 255,\n ) +\n getDeckMapLayerChannelOpacityPercent(\n layer,\n 'getTargetColor',\n targetFlat[3] ?? 255,\n )) /\n 2,\n );\n\n const applySharedColorScale = (patch: {\n field?: string;\n type?: ColorScaleConfig['type'];\n scheme?: ColorScaleScheme;\n }) => {\n const preferredField =\n patch.field ??\n colorScale?.field ??\n lastColorScaleFieldsRef.current.getSourceColor ??\n lastColorScaleFieldsRef.current.getTargetColor;\n const resolved = resolveColorScaleFieldAndType(\n columns,\n patch.type ?? colorScale?.type ?? 'sequential',\n preferredField,\n );\n if (!resolved) return;\n const {field, type} = resolved;\n\n lastColorScaleFieldsRef.current.getSourceColor = field;\n lastColorScaleFieldsRef.current.getTargetColor = field;\n const scheme =\n patch.scheme ??\n (patch.type && patch.type !== colorScale?.type\n ? undefined\n : type !== colorScale?.type\n ? undefined\n : colorScale?.scheme);\n\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => {\n const detached = detachDeckMapLayerOpacity(nextLayer);\n const existing =\n getDeckMapLayerColorScale(detached, 'getSourceColor') ??\n getDeckMapLayerColorScale(detached, 'getTargetColor');\n const source =\n getDeckMapLayerFlatColor(detached, 'getSourceColor') ?? sourceFlat;\n const target =\n getDeckMapLayerFlatColor(detached, 'getTargetColor') ?? targetFlat;\n const opacity = existing\n ? getDeckMapColorScaleOpacity(existing)\n : Math.round(((source[3] ?? 255) + (target[3] ?? 255)) / 2) / 255;\n const scale = createDeckMapLayerColorScale({\n field,\n type,\n scheme,\n title: field,\n opacity,\n });\n return {\n ...detached,\n getSourceColor: scale,\n getTargetColor: scale,\n };\n }),\n );\n };\n\n const setFlatColor = (\n accessor: 'getSourceColor' | 'getTargetColor',\n color: readonly [number, number, number, number],\n ) => {\n applyConfig(\n setDeckMapLayerFlatColor(mapConfig, layerIndex, accessor, color),\n );\n };\n\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Color scale</span>\n <Switch\n checked={Boolean(colorScale)}\n disabled={readOnly || (!colorScale && !defaultField)}\n aria-label=\"Color scale\"\n onCheckedChange={(checked) => {\n if (checked) {\n applySharedColorScale({});\n return;\n }\n if (colorScale?.field) {\n lastColorScaleFieldsRef.current.getSourceColor = colorScale.field;\n lastColorScaleFieldsRef.current.getTargetColor = colorScale.field;\n }\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => {\n const replacements: Partial<\n Record<\n DeckMapLayerColorAccessor,\n readonly [number, number, number, number]\n >\n > = {};\n if (getDeckMapLayerColorScale(nextLayer, 'getSourceColor')) {\n replacements.getSourceColor = DECK_MAP_DEFAULT_LAYER_COLOR;\n }\n if (getDeckMapLayerColorScale(nextLayer, 'getTargetColor')) {\n replacements.getTargetColor = DECK_MAP_DEFAULT_LAYER_COLOR;\n }\n return replaceDeckMapLayerColorScalesWithFlat(\n nextLayer,\n replacements,\n );\n }),\n );\n }}\n />\n </div>\n\n {!colorScale ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Source color</span>\n <ColorSwatchInput\n aria-label=\"Source color\"\n value={deckMapRgbaToHex(sourceFlat)}\n disabled={readOnly}\n onChange={(hex) => {\n const next = parseColorString(hex, sourceFlat[3] ?? 255);\n setFlatColor('getSourceColor', next);\n }}\n />\n </div>\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Target color</span>\n <ColorSwatchInput\n aria-label=\"Target color\"\n value={deckMapRgbaToHex(targetFlat)}\n disabled={readOnly}\n onChange={(hex) => {\n const next = parseColorString(hex, targetFlat[3] ?? 255);\n setFlatColor('getTargetColor', next);\n }}\n />\n </div>\n </>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {columns.length > 0 ? (\n <ColumnsProvider columns={columns}>\n <Field label=\"Field\" required>\n <ColumnSelector.Colorable\n value={colorScale.field}\n onChange={(field) => applySharedColorScale({field})}\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n ) : null}\n <Field label=\"Type\">\n <Select\n value={colorScaleType}\n onValueChange={(value) =>\n applySharedColorScale({\n type: value as ColorScaleConfig['type'],\n })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DECK_MAP_COLOR_SCALE_TYPE_OPTIONS.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n <Field label=\"Scheme\">\n <Select\n value={colorScale.scheme}\n onValueChange={(value) =>\n applySharedColorScale({scheme: value as ColorScaleScheme})\n }\n >\n <SelectTrigger className=\"w-full [&>span]:line-clamp-none\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {schemeOptions.map((scheme) => (\n <SelectItem key={scheme} value={scheme}>\n <ColorSchemeOptionLabel\n scheme={scheme}\n type={colorScaleType}\n />\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n </div>\n )}\n\n <AppearanceOpacitySlider\n valuePercent={opacityPercent}\n disabled={readOnly}\n onChange={(percent) => {\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => {\n const detached = detachDeckMapLayerOpacity(nextLayer);\n if (colorScale) {\n const scale =\n getDeckMapLayerColorScale(detached, 'getSourceColor') ??\n getDeckMapLayerColorScale(detached, 'getTargetColor') ??\n colorScale;\n const nextScale = {...scale, opacity: percent / 100};\n return {\n ...detached,\n getSourceColor: nextScale,\n getTargetColor: nextScale,\n };\n }\n const alpha = opacityPercentToAlpha(percent);\n const source =\n getDeckMapLayerFlatColor(detached, 'getSourceColor') ??\n sourceFlat;\n const target =\n getDeckMapLayerFlatColor(detached, 'getTargetColor') ??\n targetFlat;\n return {\n ...detached,\n getSourceColor: [source[0], source[1], source[2], alpha],\n getTargetColor: [target[0], target[1], target[2], alpha],\n };\n }),\n );\n }}\n />\n </div>\n );\n};\n\nconst AppearanceExtrusionPanel: FC<{\n layer: DeckMapLayerRecord | undefined;\n columns: DataTable['columns'];\n mapConfig: DeckMapConfig;\n layerIndex: number;\n applyConfig: (config: DeckMapConfig) => void;\n readOnly?: boolean;\n}> = ({layer, columns, mapConfig, layerIndex, applyConfig, readOnly}) => {\n const extruded = getDeckMapLayerExtruded(layer);\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">Extruded</span>\n <Switch\n checked={extruded}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => ({\n ...nextLayer,\n extruded: checked,\n getElevation: checked\n ? (nextLayer.getElevation ?? 1)\n : nextLayer.getElevation,\n })),\n )\n }\n />\n </div>\n\n {extruded && columns.length > 0 ? (\n <ColumnsProvider columns={columns}>\n <Field label=\"Elevation column\">\n <ColumnSelector.Numeric\n value={(() => {\n const elev = layer?.getElevation;\n if (\n elev &&\n typeof elev === 'object' &&\n '@@function' in (elev as object)\n ) {\n return (elev as Record<string, unknown>).field as\n | string\n | undefined;\n }\n if (typeof elev === 'string' && elev.startsWith('@@=')) {\n return elev.slice(3);\n }\n return undefined;\n })()}\n onChange={(elevationColumn) =>\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => ({\n ...nextLayer,\n getElevation: elevationColumn\n ? {\n '@@function': 'scale',\n field: elevationColumn,\n type: 'linear',\n domain: 'auto',\n range: [0, 200],\n }\n : undefined,\n elevationScale: nextLayer.elevationScale ?? 1,\n })),\n )\n }\n placeholder=\"Select elevation column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n ) : null}\n\n {extruded ? (\n <SettingsSliderField\n label={`Elevation scale: ${(layer?.elevationScale as number | undefined) ?? 1}x`}\n >\n <Slider\n min={0.01}\n max={1000}\n step={0.01}\n value={[(layer?.elevationScale as number | undefined) ?? 1]}\n onValueChange={(values) => {\n const value = values[0] ?? 1;\n applyConfig(\n updateDeckMapLayer(mapConfig, layerIndex, (nextLayer) => ({\n ...nextLayer,\n elevationScale: value,\n })),\n );\n }}\n />\n </SettingsSliderField>\n ) : null}\n </div>\n );\n};\n\nexport const DeckMapSettingsPanel: FC<DeckMapSettingsPanelProps> = ({\n title,\n selectedTable,\n config,\n tables,\n onClose,\n onTableChange,\n onTitleChange,\n onConfigChange,\n readOnly,\n customConfig = false,\n preferDatasetSource = false,\n}) => {\n const [layerIndex, setLayerIndex] = useState(0);\n const [viewMode, setViewMode] = useState<'settings' | 'code'>(\n customConfig ? 'code' : 'settings',\n );\n // Last color-scale field per accessor (restored when re-enabling a scale).\n const lastColorScaleFieldsRef = useRef<\n Partial<Record<DeckMapLayerColorAccessor, string>>\n >({});\n\n const selectedDataTable = useMemo(\n () =>\n selectedTable\n ? resolveTableReference(tables, selectedTable).table\n : undefined,\n [selectedTable, tables],\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n if (readOnly) return;\n onTableChange(table);\n },\n [onTableChange, readOnly],\n );\n\n const mapConfig = config;\n const serializedMapConfig = useMemo(\n () => JSON.stringify(config, null, 2),\n [config],\n );\n const showCode = customConfig || viewMode === 'code';\n const layers = getDeckMapLayerRecords(mapConfig);\n const activeLayerIndex = Math.min(layerIndex, Math.max(layers.length - 1, 0));\n const activeLayer = layers[activeLayerIndex];\n const activeLayerDatasetId = getDeckMapLayerDatasetId(activeLayer);\n const activeLayerDataset = activeLayerDatasetId\n ? mapConfig.datasets?.[activeLayerDatasetId]\n : undefined;\n\n // Source table (coords/transform) vs compiled output columns (bindings).\n const activeLayerDatasetSource = activeLayerDataset?.source;\n const fallbackTableName = isDeckMapTableDatasetSource(\n activeLayerDatasetSource,\n )\n ? activeLayerDatasetSource.tableName\n : undefined;\n const fallbackTable = useMemo(\n () =>\n fallbackTableName\n ? resolveTableReference(tables, fallbackTableName).table\n : undefined,\n [fallbackTableName, tables],\n );\n const sourceDataTable = preferDatasetSource\n ? (fallbackTable ?? selectedDataTable)\n : (selectedDataTable ?? fallbackTable);\n const sourceColumns = sourceDataTable?.columns ?? EMPTY_COLUMNS;\n const resolvedActiveLayerDatasetSource = useMemo(() => {\n if (!activeLayerDatasetSource) {\n return selectedDataTable\n ? {tableName: getTableIdentity(selectedDataTable.table)}\n : undefined;\n }\n if (!isDeckMapTableDatasetSource(activeLayerDatasetSource)) {\n return activeLayerDatasetSource;\n }\n\n return {\n tableName:\n !preferDatasetSource && selectedDataTable\n ? getTableIdentity(selectedDataTable.table)\n : activeLayerDatasetSource.tableName,\n ...(activeLayerDatasetSource.transformSql\n ? {transformSql: activeLayerDatasetSource.transformSql}\n : {}),\n };\n }, [activeLayerDatasetSource, preferDatasetSource, selectedDataTable]);\n const datasetSchema = useDeckMapDatasetSchema({\n source: resolvedActiveLayerDatasetSource,\n sourceColumns,\n });\n const outputColumns = datasetSchema.outputColumns;\n const dataOutputColumns = datasetSchema.dataOutputColumns;\n const datasetSchemaErrorMessage = datasetSchema.error?.message;\n\n const showGeometryColumnSetting = usesGeometryColumnSetting(\n activeLayer?.['@@type'],\n );\n const showH3ColumnSetting = usesH3ColumnSetting(activeLayer?.['@@type']);\n const showArcColumnSetting = usesArcColumnSetting(activeLayer?.['@@type']);\n const showRadiusSetting = usesRadiusSetting(activeLayer?.['@@type']);\n const showColumnRadiusSetting = usesColumnRadiusSetting(\n activeLayer?.['@@type'],\n );\n const showTripsSettings = usesTripsSettings(activeLayer?.['@@type']);\n const showExtrusionSettings = usesExtrusionSettings(activeLayer?.['@@type']);\n const showStrokeSetting = usesStrokeSetting(activeLayer?.['@@type']);\n const strokeEnabled =\n typeof activeLayer?.stroked === 'boolean'\n ? activeLayer.stroked\n : getDeckMapLayerStrokeDefault(activeLayer?.['@@type'], {\n extruded: getDeckMapLayerExtruded(activeLayer),\n });\n const strokeWidthPixels =\n activeLayer?.lineWidthUnits === 'pixels' &&\n typeof activeLayer?.getLineWidth === 'number'\n ? activeLayer.getLineWidth\n : ((activeLayer?.lineWidthMinPixels as number | undefined) ?? 1);\n const colorAccessorOptions = getDeckMapColorAccessorOptions(\n activeLayer?.['@@type'],\n );\n const hasFillColor = colorAccessorOptions.some(\n (option) => option.value === 'getFillColor',\n );\n const hasLineColor = colorAccessorOptions.some(\n (option) => option.value === 'getLineColor',\n );\n const hasPathColor = colorAccessorOptions.some(\n (option) => option.value === 'getColor',\n );\n const hasSourceColor = colorAccessorOptions.some(\n (option) => option.value === 'getSourceColor',\n );\n const hasTargetColor = colorAccessorOptions.some(\n (option) => option.value === 'getTargetColor',\n );\n const isPathLayer = activeLayer?.['@@type'] === 'GeoArrowPathLayer';\n const isGeoJsonLayer = activeLayer?.['@@type'] === 'GeoJsonLayer';\n // Keep unknown types visible if the layer already uses them.\n const activeLayerType =\n typeof activeLayer?.['@@type'] === 'string'\n ? activeLayer['@@type']\n : undefined;\n const layerTypeOptions: ReadonlyArray<{value: string; label: string}> =\n activeLayerType &&\n !DECK_MAP_LAYER_TYPE_OPTIONS.some(\n (option) => option.value === activeLayerType,\n )\n ? [\n ...DECK_MAP_LAYER_TYPE_OPTIONS,\n {value: activeLayerType, label: activeLayerType},\n ]\n : DECK_MAP_LAYER_TYPE_OPTIONS;\n // GeoJsonLayer uses pointRadius* / getPointRadius; scatterplot uses radius* / getRadius.\n const pointRadiusPixels = isGeoJsonLayer\n ? activeLayer?.pointRadiusUnits === 'pixels' &&\n typeof activeLayer?.getPointRadius === 'number'\n ? activeLayer.getPointRadius\n : ((activeLayer?.pointRadiusMinPixels as number | undefined) ?? 2)\n : activeLayer?.radiusUnits === 'pixels' &&\n typeof activeLayer?.getRadius === 'number'\n ? activeLayer.getRadius\n : ((activeLayer?.radiusMinPixels as number | undefined) ?? 2);\n const isHeatmapLayer = activeLayer?.['@@type'] === 'GeoArrowHeatmapLayer';\n const showAppearanceCard = isHeatmapLayer || colorAccessorOptions.length > 0;\n const lineWidthPixels =\n activeLayer?.widthUnits === 'pixels' &&\n typeof activeLayer?.getWidth === 'number'\n ? activeLayer.getWidth\n : ((activeLayer?.widthMinPixels as number | undefined) ??\n (showTripsSettings ? 3 : 1));\n\n const applyConfig = useCallback(\n (nextConfig: DeckMapConfig) => {\n if (readOnly) return;\n onConfigChange(nextConfig);\n },\n [onConfigChange, readOnly],\n );\n\n // Drop point/heatmap radius leftovers on Column layers (pixels vs meters).\n useEffect(() => {\n if (!showColumnRadiusSetting || !activeLayer || readOnly) return;\n const needsHeal =\n activeLayer.radiusUnits === 'pixels' ||\n activeLayer.getRadius !== undefined ||\n activeLayer.radiusMinPixels !== undefined ||\n activeLayer.radiusMaxPixels !== undefined ||\n activeLayer.radiusPixels !== undefined;\n if (!needsHeal) return;\n const radius =\n typeof activeLayer.radius === 'number' &&\n Number.isFinite(activeLayer.radius) &&\n activeLayer.radius > 0\n ? activeLayer.radius\n : 50;\n applyConfig(\n setDeckMapLayerColumnRadius(mapConfig, activeLayerIndex, radius),\n );\n }, [\n activeLayer,\n activeLayerIndex,\n applyConfig,\n mapConfig,\n readOnly,\n showColumnRadiusSetting,\n ]);\n\n // Fix path/arc/trips where widthMaxPixels < widthMinPixels (clamps the slider).\n useEffect(() => {\n const isLineWidthLayer =\n showTripsSettings ||\n activeLayer?.['@@type'] === 'GeoArrowPathLayer' ||\n showArcColumnSetting;\n if (!isLineWidthLayer || !activeLayer || readOnly) return;\n\n const min =\n typeof activeLayer.widthMinPixels === 'number'\n ? activeLayer.widthMinPixels\n : undefined;\n const max =\n typeof activeLayer.widthMaxPixels === 'number'\n ? activeLayer.widthMaxPixels\n : undefined;\n if (min === undefined || max === undefined || max >= min) return;\n\n applyConfig(\n updateDeckMapLayer(mapConfig, activeLayerIndex, (layer) => ({\n ...layer,\n widthMinPixels: Math.min(min, max),\n widthMaxPixels: Math.max(min, max),\n })),\n );\n }, [\n activeLayer,\n activeLayerIndex,\n applyConfig,\n mapConfig,\n readOnly,\n showArcColumnSetting,\n showTripsSettings,\n ]);\n\n const setStrokeWidth = (value: number) => {\n applyConfig(\n updateDeckMapLayer(mapConfig, activeLayerIndex, (layer) => {\n const nextLayer: DeckMapLayerRecord = {\n ...layer,\n lineWidthUnits: 'pixels',\n lineWidthMinPixels: value,\n lineWidthMaxPixels: value,\n };\n if (typeof layer.getLineWidth !== 'string') {\n nextLayer.getLineWidth = value;\n }\n return nextLayer;\n }),\n );\n };\n\n const setLineWidth = (value: number) => {\n applyConfig(\n updateDeckMapLayer(mapConfig, activeLayerIndex, (layer) => {\n const nextLayer: DeckMapLayerRecord = {\n ...layer,\n widthUnits: 'pixels',\n widthMinPixels: value,\n widthMaxPixels: value,\n };\n if (typeof layer.getWidth !== 'string') {\n nextLayer.getWidth = value;\n }\n return nextLayer;\n }),\n );\n };\n\n const setPointRadius = (value: number) => {\n applyConfig(\n updateDeckMapLayer(mapConfig, activeLayerIndex, (layer) => {\n if (layer['@@type'] === 'GeoJsonLayer') {\n const nextLayer: DeckMapLayerRecord = {\n ...layer,\n pointRadiusUnits: 'pixels',\n pointRadiusMinPixels: value,\n pointRadiusMaxPixels: value,\n };\n if (typeof layer.getPointRadius !== 'string') {\n nextLayer.getPointRadius = value;\n }\n return nextLayer;\n }\n\n const nextLayer: DeckMapLayerRecord = {\n ...layer,\n radiusUnits: 'pixels',\n radiusMinPixels: value,\n radiusMaxPixels: value,\n };\n if (typeof layer.getRadius !== 'string') {\n nextLayer.getRadius = value;\n }\n return nextLayer;\n }),\n );\n };\n\n const setColumnRadius = (value: number) => {\n applyConfig(\n setDeckMapLayerColumnRadius(mapConfig, activeLayerIndex, value),\n );\n };\n\n const fillRadiusProps = showRadiusSetting\n ? {\n radiusValue: pointRadiusPixels,\n onRadiusChange: setPointRadius,\n radiusLabel: 'Point radius',\n radiusUnit: 'px',\n radiusMin: 0.1,\n radiusMax: 50,\n radiusStep: 0.1,\n }\n : showColumnRadiusSetting\n ? {\n radiusValue: (activeLayer?.radius as number | undefined) ?? 50,\n onRadiusChange: setColumnRadius,\n radiusLabel: 'Column radius',\n radiusUnit: 'm',\n radiusMin: 1,\n radiusMax: 10000,\n radiusStep: 1,\n }\n : {};\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <SettingsPanelHeader\n title=\"Map settings\"\n className=\"shrink-0 p-2\"\n actions={\n customConfig ? undefined : (\n <DeckMapCodeViewToggleButton\n label={showCode ? 'Show settings' : 'View code'}\n selected={showCode}\n onClick={() =>\n setViewMode((currentViewMode) =>\n currentViewMode === 'code' ? 'settings' : 'code',\n )\n }\n />\n )\n }\n onClose={onClose}\n closeLabel=\"Close map settings\"\n />\n\n <div className=\"flex shrink-0 flex-col gap-2 px-2 pb-2\">\n <Field label=\"Title\">\n <input\n value={title}\n onChange={(e) => onTitleChange(e.target.value)}\n placeholder=\"Map title\"\n disabled={readOnly}\n className=\"border-input placeholder:text-muted-foreground focus-visible:ring-ring h-8 w-full rounded-md border bg-transparent px-3 py-2 text-xs font-medium shadow-sm outline-hidden transition-colors focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </Field>\n <DeckMapBasemapSelect\n config={config}\n onConfigChange={onConfigChange}\n readOnly={readOnly}\n />\n </div>\n {showCode ? (\n <DeckMapCodeViewerPanel\n value={serializedMapConfig}\n copyTooltipLabel=\"Copy map config\"\n />\n ) : (\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-radix-scroll-area-viewport]>div]:!block\">\n <div className=\"flex flex-col gap-2 p-2 pt-0\">\n <Field label=\"Dataset\" required>\n <DataTableSelector\n onChange={handleTableChange}\n tables={tables}\n value={sourceDataTable}\n disabled={readOnly}\n />\n </Field>\n\n {layers.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {layers.length > 1 && (\n <Field label=\"Layer\">\n <Select\n value={String(activeLayerIndex)}\n onValueChange={(value) => setLayerIndex(Number(value))}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {layers.map((layer, index) => (\n <SelectItem key={index} value={String(index)}>\n {String(layer.id ?? `Layer ${index + 1}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n )}\n\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">Visible</span>\n <Switch\n checked={activeLayer?.visible !== false}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n visible: checked,\n }),\n ),\n )\n }\n />\n </div>\n\n <Field label=\"Layer type\">\n <Select\n value={\n typeof activeLayer?.['@@type'] === 'string'\n ? activeLayer['@@type']\n : undefined\n }\n onValueChange={(value) =>\n applyConfig(\n setDeckMapLayerType(mapConfig, activeLayerIndex, value),\n )\n }\n >\n <SelectTrigger className=\"w-full text-xs\">\n <SelectValue placeholder=\"Select layer type\" />\n </SelectTrigger>\n <SelectContent>\n {layerTypeOptions.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n className=\"text-xs\"\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n\n {(datasetSchema.isLoading || datasetSchemaErrorMessage) && (\n <div className=\"text-muted-foreground rounded-md border px-2 py-1.5 text-xs\">\n {datasetSchema.isLoading\n ? 'Inspecting dataset schema...'\n : `Dataset schema unavailable: ${datasetSchemaErrorMessage}`}\n </div>\n )}\n\n {showAppearanceCard && (\n <Field label=\"Appearance\">\n <div className=\"flex flex-col gap-2 rounded-md border p-2\">\n {isHeatmapLayer ? (\n <>\n <SettingsSliderField\n label={`Radius: ${(activeLayer?.radiusPixels as number | undefined) ?? 30}px`}\n >\n <Slider\n min={1}\n max={100}\n step={1}\n value={[\n (activeLayer?.radiusPixels as\n | number\n | undefined) ?? 30,\n ]}\n onValueChange={(values) => {\n const value = values[0] ?? 30;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n radiusPixels: value,\n }),\n ),\n );\n }}\n />\n </SettingsSliderField>\n <Select\n value={detectHeatmapScheme(activeLayer?.colorRange)}\n onValueChange={(value) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n colorRange:\n heatmapSchemeToColorRange(value),\n }),\n ),\n )\n }\n >\n <SelectTrigger className=\"w-full [&>span]:line-clamp-none\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {continuousSequentialSchemes.map((scheme) => (\n <SelectItem key={scheme} value={scheme}>\n <ColorSchemeOptionLabel\n scheme={scheme}\n type=\"sequential\"\n />\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <AppearanceOpacitySlider\n valuePercent={getLayerOpacityPercent(activeLayer)}\n disabled={readOnly}\n onChange={(percent) => {\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n opacity: percent / 100,\n }),\n ),\n );\n }}\n />\n </>\n ) : (\n <>\n {(showTripsSettings ||\n isPathLayer ||\n showArcColumnSetting) && (\n <SettingsSliderField\n label={`${\n showTripsSettings ? 'Trip width' : 'Line width'\n }: ${lineWidthPixels}px`}\n >\n <Slider\n min={1}\n max={20}\n step={1}\n value={[lineWidthPixels]}\n onValueChange={(values) =>\n setLineWidth(values[0] ?? lineWidthPixels)\n }\n />\n </SettingsSliderField>\n )}\n\n {showArcColumnSetting ? (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium\">\n Flat lines\n </span>\n <Switch\n checked={activeLayer?.getHeight === 0}\n onCheckedChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n getHeight: checked ? 0 : undefined,\n }),\n ),\n )\n }\n />\n </div>\n ) : null}\n\n {showTripsSettings ? (\n <SettingsSliderField\n label={`Trail length: ${Math.round(((activeLayer?._trailLengthFactor as number | undefined) ?? 0.4) * 100)}%`}\n >\n <Slider\n min={5}\n max={100}\n step={5}\n value={[\n Math.round(\n ((activeLayer?._trailLengthFactor as\n | number\n | undefined) ?? 0.4) * 100,\n ),\n ]}\n onValueChange={(values) => {\n const value = (values[0] ?? 40) / 100;\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => ({\n ...layer,\n _trailLengthFactor: value,\n }),\n ),\n );\n }}\n />\n </SettingsSliderField>\n ) : null}\n\n {hasFillColor && hasLineColor && showStrokeSetting ? (\n <Tabs\n key={`appearance-fill-stroke${showExtrusionSettings ? '-extrusion' : ''}`}\n defaultValue=\"fill\"\n className=\"w-full\"\n >\n <TabsList\n className={`grid h-8 w-full ${showExtrusionSettings ? 'grid-cols-3' : 'grid-cols-2'}`}\n >\n <TabsTrigger value=\"fill\" className=\"text-xs\">\n Fill\n </TabsTrigger>\n <TabsTrigger value=\"stroke\" className=\"text-xs\">\n Stroke\n </TabsTrigger>\n {showExtrusionSettings ? (\n <TabsTrigger\n value=\"extrusion\"\n className=\"text-xs\"\n >\n Extrusion\n </TabsTrigger>\n ) : null}\n </TabsList>\n <TabsContent value=\"fill\" className=\"mt-2\">\n <AppearanceColorChannel\n accessor=\"getFillColor\"\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={\n lastColorScaleFieldsRef\n }\n readOnly={readOnly}\n {...fillRadiusProps}\n />\n </TabsContent>\n <TabsContent value=\"stroke\" className=\"mt-2\">\n <AppearanceColorChannel\n accessor=\"getLineColor\"\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={\n lastColorScaleFieldsRef\n }\n readOnly={readOnly}\n enabled={strokeEnabled}\n onEnabledChange={(checked) =>\n applyConfig(\n updateDeckMapLayer(\n mapConfig,\n activeLayerIndex,\n (layer) => {\n if (checked) {\n return {...layer, stroked: true};\n }\n // Clear stroke color scale when stroke is off.\n const next: DeckMapLayerRecord = {\n ...layer,\n stroked: false,\n };\n if (\n getDeckMapLayerColorScale(\n next,\n 'getLineColor',\n )\n ) {\n return replaceDeckMapLayerColorScaleWithFlat(\n next,\n 'getLineColor',\n DECK_MAP_DEFAULT_STROKE_COLOR,\n );\n }\n return next;\n },\n ),\n )\n }\n enableLabel=\"Stroke\"\n defaultFlatColor={\n DECK_MAP_DEFAULT_STROKE_COLOR\n }\n widthPixels={strokeWidthPixels}\n onWidthChange={setStrokeWidth}\n widthLabel=\"Stroke width\"\n extrusionDisablesStroke={\n usesStrokeExtrusionWarning(\n activeLayer?.['@@type'],\n ) && getDeckMapLayerExtruded(activeLayer)\n }\n />\n </TabsContent>\n {showExtrusionSettings ? (\n <TabsContent value=\"extrusion\" className=\"mt-2\">\n <AppearanceExtrusionPanel\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n readOnly={readOnly}\n />\n </TabsContent>\n ) : null}\n </Tabs>\n ) : hasFillColor && showExtrusionSettings ? (\n <Tabs\n key=\"appearance-fill-extrusion\"\n defaultValue=\"fill\"\n className=\"w-full\"\n >\n <TabsList className=\"grid h-8 w-full grid-cols-2\">\n <TabsTrigger value=\"fill\" className=\"text-xs\">\n Fill\n </TabsTrigger>\n <TabsTrigger\n value=\"extrusion\"\n className=\"text-xs\"\n >\n Extrusion\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"fill\" className=\"mt-2\">\n <AppearanceColorChannel\n accessor=\"getFillColor\"\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={\n lastColorScaleFieldsRef\n }\n readOnly={readOnly}\n {...fillRadiusProps}\n />\n </TabsContent>\n <TabsContent value=\"extrusion\" className=\"mt-2\">\n <AppearanceExtrusionPanel\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n readOnly={readOnly}\n />\n </TabsContent>\n </Tabs>\n ) : hasFillColor ? (\n <AppearanceColorChannel\n accessor=\"getFillColor\"\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={lastColorScaleFieldsRef}\n readOnly={readOnly}\n {...fillRadiusProps}\n />\n ) : null}\n\n {hasSourceColor && hasTargetColor ? (\n <AppearanceArcColorPanel\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={lastColorScaleFieldsRef}\n readOnly={readOnly}\n />\n ) : null}\n\n {hasPathColor ? (\n <AppearanceColorChannel\n accessor=\"getColor\"\n layer={activeLayer}\n columns={dataOutputColumns}\n mapConfig={mapConfig}\n layerIndex={activeLayerIndex}\n applyConfig={applyConfig}\n lastColorScaleFieldsRef={lastColorScaleFieldsRef}\n readOnly={readOnly}\n />\n ) : null}\n </>\n )}\n </div>\n </Field>\n )}\n\n {outputColumns.length > 0 && showGeometryColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Geometry column\" required>\n <ColumnSelector\n value={activeLayerDataset?.geometryColumn}\n onChange={(geometryColumn) =>\n applyConfig(\n setDeckMapLayerGeometryColumn(\n mapConfig,\n activeLayerIndex,\n geometryColumn,\n ),\n )\n }\n placeholder=\"Select geometry column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {outputColumns.length > 0 && showTripsSettings && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Timestamp column\" required>\n <ColumnSelector\n value={\n (\n activeLayer?._sqlroomsBinding as Record<\n string,\n unknown\n >\n )?.timestampColumn as string | undefined\n }\n onChange={(timestampColumn) =>\n applyConfig(\n setDeckMapLayerTimestampColumn(\n mapConfig,\n activeLayerIndex,\n timestampColumn,\n ),\n )\n }\n placeholder=\"Select timestamp column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {outputColumns.length > 0 && showH3ColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"H3 column\" required>\n <ColumnSelector\n value={\n (\n activeLayer?._sqlroomsBinding as Record<\n string,\n unknown\n >\n )?.hexagonColumn as string | undefined\n }\n onChange={(hexagonColumn) =>\n applyConfig(\n setDeckMapLayerHexagonColumn(\n mapConfig,\n activeLayerIndex,\n hexagonColumn,\n ),\n )\n }\n placeholder=\"Select H3 index column...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n\n {outputColumns.length > 0 && showArcColumnSetting && (\n <ColumnsProvider columns={outputColumns}>\n <Field label=\"Source geometry\" required>\n <ColumnSelector\n value={\n (\n activeLayer?._sqlroomsBinding as Record<\n string,\n unknown\n >\n )?.sourceGeometryColumn as string | undefined\n }\n onChange={(sourceGeometryColumn) =>\n applyConfig(\n setDeckMapLayerArcColumns(\n mapConfig,\n activeLayerIndex,\n {\n sourceGeometryColumn,\n },\n ),\n )\n }\n placeholder=\"Select source geometry...\"\n disabled={readOnly}\n />\n </Field>\n <Field label=\"Target geometry\" required>\n <ColumnSelector\n value={\n (\n activeLayer?._sqlroomsBinding as Record<\n string,\n unknown\n >\n )?.targetGeometryColumn as string | undefined\n }\n onChange={(targetGeometryColumn) =>\n applyConfig(\n setDeckMapLayerArcColumns(\n mapConfig,\n activeLayerIndex,\n {\n targetGeometryColumn,\n },\n ),\n )\n }\n placeholder=\"Select target geometry...\"\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n </div>\n )}\n\n {sourceDataTable &&\n !showGeometryColumnSetting &&\n !showH3ColumnSetting &&\n !showArcColumnSetting && (\n <ColumnsProvider columns={sourceColumns}>\n <Field label=\"Latitude column\" required>\n <ColumnSelector.Numeric\n value={mapConfig.fitToData?.latitudeColumn}\n onChange={(latitudeColumn) => {\n const longitudeColumn =\n mapConfig.fitToData?.longitudeColumn;\n applyConfig(\n regenerateMapConfigForTable(\n {config: mapConfig},\n sourceDataTable,\n longitudeColumn,\n latitudeColumn,\n ) as DeckMapConfig,\n );\n }}\n disabled={readOnly}\n />\n </Field>\n <Field label=\"Longitude column\" required>\n <ColumnSelector.Numeric\n value={mapConfig.fitToData?.longitudeColumn}\n onChange={(longitudeColumn) => {\n const latitudeColumn =\n mapConfig.fitToData?.latitudeColumn;\n applyConfig(\n regenerateMapConfigForTable(\n {config: mapConfig},\n sourceDataTable,\n longitudeColumn,\n latitudeColumn,\n ) as DeckMapConfig,\n );\n }}\n disabled={readOnly}\n />\n </Field>\n </ColumnsProvider>\n )}\n </div>\n </ScrollArea>\n )}\n </div>\n );\n};\n"]}
@@ -4,7 +4,13 @@ export declare const DeckMapSettingsField: FC<PropsWithChildren<{
4
4
  label: string;
5
5
  required?: boolean;
6
6
  }>>;
7
- export type DeckMapColumnKind = 'all' | 'numeric' | 'quantitative' | 'categorical';
7
+ export type DeckMapColumnKind = 'all' | 'numeric' | 'quantitative' | 'categorical'
8
+ /** Numeric/temporal + string columns usable for color scales. */
9
+ | 'colorable';
10
+ /** True for columns that can drive a color scale (excludes geometry blobs/structs). */
11
+ export declare function isDeckMapColorableColumn(column: TableColumn): boolean;
12
+ /** String/boolean (and binary) fields that need a categorical color scale. */
13
+ export declare function isDeckMapCategoricalColorColumn(column: TableColumn): boolean;
8
14
  export declare function filterDeckMapColumns(columns: TableColumn[], kind: DeckMapColumnKind): TableColumn[];
9
15
  export declare const DeckMapColumnsProvider: FC<PropsWithChildren<{
10
16
  columns: TableColumn[];
@@ -21,6 +27,7 @@ export declare const DeckMapColumnSelector: FC<DeckMapColumnSelectorProps> & {
21
27
  Numeric: (props: Omit<DeckMapColumnSelectorProps, "kind">) => import("react/jsx-runtime").JSX.Element;
22
28
  Quantitative: (props: Omit<DeckMapColumnSelectorProps, "kind">) => import("react/jsx-runtime").JSX.Element;
23
29
  Categorical: (props: Omit<DeckMapColumnSelectorProps, "kind">) => import("react/jsx-runtime").JSX.Element;
30
+ Colorable: (props: Omit<DeckMapColumnSelectorProps, "kind">) => import("react/jsx-runtime").JSX.Element;
24
31
  };
25
32
  export declare const DeckMapTableSelector: FC<{
26
33
  tables: DataTable[];
@@ -1 +1 @@
1
- {"version":3,"file":"MapSettingsControls.d.ts","sourceRoot":"","sources":["../src/MapSettingsControls.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,oBAAoB,EAAE,EAAE,CACnC,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC,CASvD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,SAAS,GACT,cAAc,GACd,aAAa,CAAC;AAElB,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,EAAE,iBAAiB,iBASxB;AAID,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAC,CAAC,CAK5C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAqDF,eAAO,MAAM,qBAAqB;qBACf,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;0BAGnC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;yBAGzC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;CAG7D,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAoDA,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAoBA,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAkBA,CAAC"}
1
+ {"version":3,"file":"MapSettingsControls.d.ts","sourceRoot":"","sources":["../src/MapSettingsControls.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,oBAAoB,EAAE,EAAE,CACnC,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC,CASvD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,SAAS,GACT,cAAc,GACd,aAAa;AACf,iEAAiE;GAC/D,WAAW,CAAC;AAEhB,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAKrE;AAED,8EAA8E;AAC9E,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAS5E;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,EAAE,iBAAiB,iBAUxB;AAID,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAC,CAAC,CAK5C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAqDF,eAAO,MAAM,qBAAqB;qBACf,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;0BAGnC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;yBAGzC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;uBAG1C,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;CAG3D,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAoDA,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAoBA,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAkBA,CAAC"}
@@ -1,9 +1,28 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getTableDisplayName, getTableIdentity, isColumnCategorical, isColumnNumeric, isColumnQuantitative, } from '@sqlrooms/duckdb';
2
+ import { getTableDisplayName, getTableIdentity, isColumnCategorical, isColumnNumeric, isColumnQuantitative, getColumnTypeCategory, } from '@sqlrooms/duckdb';
3
3
  import { Button, cn, Combobox, CopyButton, ScrollArea, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
4
4
  import { CodeIcon, TableIcon } from 'lucide-react';
5
5
  import { createContext, useContext, } from 'react';
6
6
  export const DeckMapSettingsField = ({ label, required, children }) => (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("label", { className: "text-xs font-medium", children: [label, required && _jsx("span", { className: "text-destructive ml-1", children: "*" })] }), _jsx("div", { className: "grid items-end gap-2", children: children })] }));
7
+ /** True for columns that can drive a color scale (excludes geometry blobs/structs). */
8
+ export function isDeckMapColorableColumn(column) {
9
+ if (!column.type)
10
+ return false;
11
+ if (isColumnQuantitative(column.type))
12
+ return true;
13
+ const category = getColumnTypeCategory(column.type);
14
+ return category === 'string' || category === 'boolean';
15
+ }
16
+ /** String/boolean (and binary) fields that need a categorical color scale. */
17
+ export function isDeckMapCategoricalColorColumn(column) {
18
+ if (!column.type || isColumnQuantitative(column.type))
19
+ return false;
20
+ const category = getColumnTypeCategory(column.type);
21
+ return (category === 'string' ||
22
+ category === 'boolean' ||
23
+ category === 'binary' ||
24
+ isColumnCategorical(column.type));
25
+ }
7
26
  export function filterDeckMapColumns(columns, kind) {
8
27
  if (kind === 'all')
9
28
  return columns;
@@ -14,7 +33,9 @@ export function filterDeckMapColumns(columns, kind) {
14
33
  return isColumnNumeric(column.type);
15
34
  if (kind === 'quantitative')
16
35
  return isColumnQuantitative(column.type);
17
- return isColumnCategorical(column.type);
36
+ if (kind === 'colorable')
37
+ return isDeckMapColorableColumn(column);
38
+ return isDeckMapCategoricalColorColumn(column);
18
39
  });
19
40
  }
20
41
  const DeckMapColumnsContext = createContext([]);
@@ -30,6 +51,7 @@ export const DeckMapColumnSelector = Object.assign(DeckMapColumnSelectorRoot, {
30
51
  Numeric: (props) => (_jsx(DeckMapColumnSelectorRoot, { ...props, kind: "numeric" })),
31
52
  Quantitative: (props) => (_jsx(DeckMapColumnSelectorRoot, { ...props, kind: "quantitative" })),
32
53
  Categorical: (props) => (_jsx(DeckMapColumnSelectorRoot, { ...props, kind: "categorical" })),
54
+ Colorable: (props) => (_jsx(DeckMapColumnSelectorRoot, { ...props, kind: "colorable" })),
33
55
  });
34
56
  export const DeckMapTableSelector = ({ tables, value, onChange, disabled }) => {
35
57
  const identity = value ? getTableIdentity(value.table) : '';