@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.
- package/README.md +193 -35
- package/dist/BlockMapSettings.d.ts.map +1 -1
- package/dist/BlockMapSettings.js +4 -16
- package/dist/BlockMapSettings.js.map +1 -1
- package/dist/DashboardMapSettings.d.ts.map +1 -1
- package/dist/DashboardMapSettings.js +7 -10
- package/dist/DashboardMapSettings.js.map +1 -1
- package/dist/DeckJsonMap.d.ts.map +1 -1
- package/dist/DeckJsonMap.js +75 -23
- package/dist/DeckJsonMap.js.map +1 -1
- package/dist/DeckJsonMapSpec.d.ts +41 -0
- package/dist/DeckJsonMapSpec.d.ts.map +1 -1
- package/dist/DeckJsonMapSpec.js +2 -0
- package/dist/DeckJsonMapSpec.js.map +1 -1
- package/dist/DeckMapBasemapSelect.d.ts +9 -0
- package/dist/DeckMapBasemapSelect.d.ts.map +1 -0
- package/dist/DeckMapBasemapSelect.js +20 -0
- package/dist/DeckMapBasemapSelect.js.map +1 -0
- package/dist/DeckMapDefaultStylesProvider.d.ts +13 -19
- package/dist/DeckMapDefaultStylesProvider.d.ts.map +1 -1
- package/dist/DeckMapDefaultStylesProvider.js +11 -18
- package/dist/DeckMapDefaultStylesProvider.js.map +1 -1
- package/dist/DeckMapSurface.d.ts +1 -1
- package/dist/DeckMapSurface.js +1 -1
- package/dist/DeckMapSurface.js.map +1 -1
- package/dist/DeckMapsSlice.d.ts +5 -0
- package/dist/DeckMapsSlice.d.ts.map +1 -1
- package/dist/DeckMapsSlice.js +6 -3
- package/dist/DeckMapsSlice.js.map +1 -1
- package/dist/MapSettings.d.ts +14 -0
- package/dist/MapSettings.d.ts.map +1 -1
- package/dist/MapSettings.js +548 -192
- package/dist/MapSettings.js.map +1 -1
- package/dist/MapSettingsControls.d.ts +8 -1
- package/dist/MapSettingsControls.d.ts.map +1 -1
- package/dist/MapSettingsControls.js +24 -2
- package/dist/MapSettingsControls.js.map +1 -1
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +20 -12
- package/dist/ai.js.map +1 -1
- package/dist/aiNormalize.d.ts.map +1 -1
- package/dist/aiNormalize.js +2 -1
- package/dist/aiNormalize.js.map +1 -1
- package/dist/basemap.d.ts +23 -0
- package/dist/basemap.d.ts.map +1 -0
- package/dist/basemap.js +23 -0
- package/dist/basemap.js.map +1 -0
- package/dist/block.d.ts +1 -1
- package/dist/block.d.ts.map +1 -1
- package/dist/block.js +13 -9
- package/dist/block.js.map +1 -1
- package/dist/createOrUpdateDeckMapResource.d.ts +6 -2
- package/dist/createOrUpdateDeckMapResource.d.ts.map +1 -1
- package/dist/createOrUpdateDeckMapResource.js +57 -4
- package/dist/createOrUpdateDeckMapResource.js.map +1 -1
- package/dist/datasets/PreparedDatasetStore.d.ts +3 -4
- package/dist/datasets/PreparedDatasetStore.d.ts.map +1 -1
- package/dist/datasets/PreparedDatasetStore.js +4 -8
- package/dist/datasets/PreparedDatasetStore.js.map +1 -1
- package/dist/datasets/helpers.d.ts +39 -2
- package/dist/datasets/helpers.d.ts.map +1 -1
- package/dist/datasets/helpers.js +86 -3
- package/dist/datasets/helpers.js.map +1 -1
- package/dist/datasets/usePreparedDatasetStates.d.ts.map +1 -1
- package/dist/datasets/usePreparedDatasetStates.js +12 -8
- package/dist/datasets/usePreparedDatasetStates.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/json/colorScaleFunction.d.ts +12 -4
- package/dist/json/colorScaleFunction.d.ts.map +1 -1
- package/dist/json/colorScaleFunction.js.map +1 -1
- package/dist/json/compileColorScale.d.ts +3 -2
- package/dist/json/compileColorScale.d.ts.map +1 -1
- package/dist/json/compileColorScale.js +16 -1
- package/dist/json/compileColorScale.js.map +1 -1
- package/dist/json/createDeckJsonConfiguration.d.ts.map +1 -1
- package/dist/json/createDeckJsonConfiguration.js +235 -175
- package/dist/json/createDeckJsonConfiguration.js.map +1 -1
- package/dist/json/defaultClasses.d.ts.map +1 -1
- package/dist/json/defaultClasses.js +3 -3
- package/dist/json/defaultClasses.js.map +1 -1
- package/dist/json/extractColorScaleLegends.d.ts.map +1 -1
- package/dist/json/extractColorScaleLegends.js +41 -26
- package/dist/json/extractColorScaleLegends.js.map +1 -1
- package/dist/json/heatmapDefaults.d.ts +17 -7
- package/dist/json/heatmapDefaults.d.ts.map +1 -1
- package/dist/json/heatmapDefaults.js +54 -12
- package/dist/json/heatmapDefaults.js.map +1 -1
- package/dist/json/layers/DeckHeatmapLayer.d.ts +32 -0
- package/dist/json/layers/DeckHeatmapLayer.d.ts.map +1 -0
- package/dist/json/layers/DeckHeatmapLayer.js +69 -0
- package/dist/json/layers/DeckHeatmapLayer.js.map +1 -0
- package/dist/json/layers/index.d.ts +1 -0
- package/dist/json/layers/index.d.ts.map +1 -1
- package/dist/json/layers/index.js +1 -0
- package/dist/json/layers/index.js.map +1 -1
- package/dist/json/rewriteGeoArrowAccessors.d.ts.map +1 -1
- package/dist/json/rewriteGeoArrowAccessors.js +13 -5
- package/dist/json/rewriteGeoArrowAccessors.js.map +1 -1
- package/dist/json/scaleFunction.d.ts +5 -8
- package/dist/json/scaleFunction.d.ts.map +1 -1
- package/dist/json/scaleFunction.js +30 -5
- package/dist/json/scaleFunction.js.map +1 -1
- package/dist/mapAiConfig.d.ts +6 -0
- package/dist/mapAiConfig.d.ts.map +1 -1
- package/dist/mapAiConfig.js +7 -0
- package/dist/mapAiConfig.js.map +1 -1
- package/dist/mapAiSharedInstructions.d.ts +1 -1
- package/dist/mapAiSharedInstructions.d.ts.map +1 -1
- package/dist/mapAiSharedInstructions.js +4 -3
- package/dist/mapAiSharedInstructions.js.map +1 -1
- package/dist/mapConfig.d.ts +6 -1
- package/dist/mapConfig.d.ts.map +1 -1
- package/dist/mapConfig.js +28 -3
- package/dist/mapConfig.js.map +1 -1
- package/dist/mapConfigUtils.d.ts +22 -0
- package/dist/mapConfigUtils.d.ts.map +1 -1
- package/dist/mapConfigUtils.js +152 -5
- package/dist/mapConfigUtils.js.map +1 -1
- package/dist/mapLayerConfigUtils.d.ts +55 -0
- package/dist/mapLayerConfigUtils.d.ts.map +1 -1
- package/dist/mapLayerConfigUtils.js +222 -11
- package/dist/mapLayerConfigUtils.js.map +1 -1
- package/dist/mapResourceAuthoring.d.ts +1 -1
- package/dist/mapResourceAuthoring.d.ts.map +1 -1
- package/dist/mapResourceAuthoring.js +14 -7
- package/dist/mapResourceAuthoring.js.map +1 -1
- package/dist/mapStyles.d.ts +16 -0
- package/dist/mapStyles.d.ts.map +1 -0
- package/dist/mapStyles.js +32 -0
- package/dist/mapStyles.js.map +1 -0
- package/dist/prepare/prepareDeckDataset.d.ts.map +1 -1
- package/dist/prepare/prepareDeckDataset.js +1 -0
- package/dist/prepare/prepareDeckDataset.js.map +1 -1
- package/dist/prepare/types.d.ts +3 -0
- package/dist/prepare/types.d.ts.map +1 -1
- package/dist/prepare/types.js.map +1 -1
- package/dist/prepare/wkbDecoder.d.ts.map +1 -1
- package/dist/prepare/wkbDecoder.js +62 -16
- package/dist/prepare/wkbDecoder.js.map +1 -1
- package/dist/prepare/wkbParser.d.ts +2 -0
- package/dist/prepare/wkbParser.d.ts.map +1 -1
- package/dist/prepare/wkbParser.js +1 -0
- package/dist/prepare/wkbParser.js.map +1 -1
- package/dist/protomapsStyles.d.ts +18 -0
- package/dist/protomapsStyles.d.ts.map +1 -0
- package/dist/protomapsStyles.js +38 -0
- package/dist/protomapsStyles.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +11 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeckMapSurface.js","sourceRoot":"","sources":["../src/DeckMapSurface.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {DataTable} from '@sqlrooms/duckdb';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport {DeckJsonMap} from './DeckJsonMap';\nimport type {DeckMapResource, DeckMapRuntimeIssue} from './DeckMapsSlice';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\nimport {\n isDeckMapSqlDatasetSource,\n isDeckMapTableDatasetSource,\n} from './mapConfig';\nimport {getDeckMapDataPolicy, type DeckMapDataPolicy} from './mapDataPolicy';\nimport {getDeckMapResourceConfigIssues} from './mapResourceAuthoring';\nimport {\n getDeckMapDatasetSource,\n resolveDeckMapFitToData,\n useDeckMapFitController,\n} from './mapFit';\nimport type {\n DeckDatasetInput,\n DeckJsonMapHandle,\n PreparedDeckDatasetState,\n} from './types';\n\nfunction sampleDatasetSql(sql: string, maxRows: number) {\n const sourceSql = sql.trim().replace(/(?:\\s*;+\\s*)+$/, '');\n return `SELECT * FROM (${sourceSql}) USING SAMPLE ${maxRows} ROWS`;\n}\n\nfunction applyDataPolicy(\n input: DeckDatasetInput,\n policy: DeckMapDataPolicy,\n): DeckDatasetInput {\n if (policy.disabled) return input;\n const maxRows = Math.max(1, Math.floor(policy.maxRows));\n if ('sqlQuery' in input) {\n return {...input, sqlQuery: sampleDatasetSql(input.sqlQuery, maxRows)};\n }\n if ('tableName' in input) {\n return {\n ...input,\n transformSql: sampleDatasetSql(\n input.transformSql ??\n `SELECT * FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n maxRows,\n ),\n };\n }\n return input;\n}\n\n/**\n * Host-neutral data boundary for Deck map resources. Worksheet maps use the\n * direct adapter below and are intentionally independent: no Mosaic selection\n * or cross-filter state is read or published.\n */\nexport type DeckMapDataAdapter = {\n resolveDatasets: (options: {\n mapId: string;\n map: DeckMapResource;\n }) => Record<string, DeckDatasetInput>;\n /** Resolves an unsampled dataset input for fit-to-data bounds queries. */\n resolveFitDataset?: (options: {\n mapId: string;\n map: DeckMapResource;\n datasetId: string;\n }) => DeckDatasetInput | undefined;\n getTableColumns?: (tableName: string) => DataTable['columns'] | undefined;\n};\n\nfunction resolveDirectDeckMapDatasets(\n map: DeckMapResource,\n dataPolicy?: DeckMapDataPolicy,\n) {\n const resolved: Record<string, DeckDatasetInput> = {};\n // A top-level selected table is only an unambiguous override when the map\n // has one table-backed dataset. Multi-source maps retain authored tables.\n const tableDatasetCount = Object.values(map.config.datasets).filter(\n (dataset) => isDeckMapTableDatasetSource(dataset.source),\n ).length;\n for (const [datasetId, dataset] of Object.entries(map.config.datasets)) {\n const {source, ...datasetConfig} = dataset;\n let input: DeckDatasetInput | undefined;\n if (isDeckMapSqlDatasetSource(source)) {\n input = {...datasetConfig, sqlQuery: source.sqlQuery};\n } else if (isDeckMapTableDatasetSource(source)) {\n input = {\n ...datasetConfig,\n tableName:\n tableDatasetCount === 1\n ? (map.selectedTable ?? source.tableName)\n : source.tableName,\n transformSql: source.transformSql,\n };\n }\n if (input) {\n resolved[datasetId] = dataPolicy\n ? applyDataPolicy(input, dataPolicy)\n : input;\n }\n }\n return resolved;\n}\n\nexport const directDeckMapDataAdapter: DeckMapDataAdapter = {\n resolveDatasets: ({map}) =>\n resolveDirectDeckMapDatasets(map, getDeckMapDataPolicy(map.config)),\n resolveFitDataset: ({map, datasetId}) =>\n resolveDirectDeckMapDatasets(map)[datasetId],\n};\n\nexport type DeckMapSurfaceProps = {\n mapId: string;\n map: DeckMapResource;\n readOnly?: boolean;\n selected?: boolean;\n caption?: string;\n headerActions?: ReactNode;\n fitRequestVersion?: number;\n onUpdateMap: (patch: Partial<DeckMapResource>) => void;\n onReportIssue: (issue: Omit<DeckMapRuntimeIssue, 'mapId'>) => void;\n /** Clears the current issue when its kind matches, or all issues when omitted. */\n onClearIssue: (kind?: DeckMapRuntimeIssue['kind']) => void;\n dataAdapter?: DeckMapDataAdapter;\n};\n\nexport function DeckMapSurface({\n mapId,\n map,\n onReportIssue,\n onClearIssue,\n fitRequestVersion = 0,\n dataAdapter = directDeckMapDataAdapter,\n}: DeckMapSurfaceProps) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const deckMapRef = useRef<DeckJsonMapHandle>(null);\n const datasets = useMemo(\n () => dataAdapter.resolveDatasets({mapId, map}),\n [dataAdapter, map, mapId],\n );\n const configIssues = useMemo(\n () => getDeckMapResourceConfigIssues(map.config, {allowEmpty: true}),\n [map.config],\n );\n useEffect(() => {\n if (configIssues.length > 0) {\n onReportIssue({\n kind: 'config-error',\n message: `${configIssues[0]!.path}: ${configIssues[0]!.message}`,\n recoverable: true,\n details: {issues: configIssues},\n });\n } else {\n onClearIssue('config-error');\n }\n }, [configIssues, onClearIssue, onReportIssue]);\n const handleDatasetStates = useCallback(\n (states: Record<string, PreparedDeckDatasetState>) => {\n const failure = Object.values(states).find(\n (\n state,\n ): state is Extract<PreparedDeckDatasetState, {status: 'error'}> =>\n state.status === 'error',\n );\n if (failure) {\n onReportIssue({\n kind: 'sql-error',\n message: failure.error.message,\n recoverable: true,\n });\n } else if (\n Object.values(states).every((state) => state.status === 'ready')\n ) {\n onClearIssue('sql-error');\n }\n },\n [onClearIssue, onReportIssue],\n );\n useEffect(() => {\n if (configIssues.length === 0 && Object.keys(datasets).length === 0) {\n onClearIssue();\n }\n }, [configIssues, datasets, onClearIssue]);\n const fitToData = useMemo(\n () => resolveDeckMapFitToData(map.config),\n [map.config],\n );\n const fitSource = useMemo(() => {\n if (!fitToData) return null;\n const fitDataset =\n dataAdapter.resolveFitDataset?.({\n mapId,\n map,\n datasetId: fitToData.dataset,\n }) ?? datasets[fitToData.dataset];\n return getDeckMapDatasetSource(fitDataset);\n }, [dataAdapter, datasets, fitToData, map, mapId]);\n const handleFitError = useCallback(\n (error: Error) =>\n onReportIssue({\n kind: 'fit-error',\n message: error.message,\n recoverable: true,\n }),\n [onReportIssue],\n );\n const handleFitSuccess = useCallback(\n () => onClearIssue('fit-error'),\n [onClearIssue],\n );\n useDeckMapFitController({\n scopeId: mapId,\n fitToData,\n source: fitSource,\n container,\n deckMapRef,\n requestVersion: fitRequestVersion,\n autoFit: true,\n onSuccess: handleFitSuccess,\n onError: handleFitError,\n });\n\n if (configIssues.length > 0) {\n return (\n <div className=\"text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n {`Invalid map configuration: ${configIssues[0]!.path}: ${configIssues[0]!.message}`}\n </div>\n );\n }\n if (Object.keys(datasets).length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n Select a geospatial table to configure this map.\n </div>\n );\n }\n return (\n <div ref={setContainer} className=\"h-full min-h-[320px]\">\n <DeckJsonMap\n ref={deckMapRef}\n spec={map.config.spec}\n datasets={datasets}\n mapStyle={map.config.mapStyle}\n mapProps={map.config.mapProps}\n showLegends={map.config.showLegends}\n className=\"h-full min-h-[320px]\"\n onDatasetStatesChange={handleDatasetStates}\n onRenderingError={(error) =>\n onReportIssue({\n kind: 'render-error',\n message: error.message,\n recoverable: true,\n })\n }\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DeckMapSurface.js","sourceRoot":"","sources":["../src/DeckMapSurface.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {DataTable} from '@sqlrooms/duckdb';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport {DeckJsonMap} from './DeckJsonMap';\nimport type {DeckMapResource, DeckMapRuntimeIssue} from './DeckMapsSlice';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\nimport {\n isDeckMapSqlDatasetSource,\n isDeckMapTableDatasetSource,\n} from './mapConfig';\nimport {getDeckMapDataPolicy, type DeckMapDataPolicy} from './mapDataPolicy';\nimport {getDeckMapResourceConfigIssues} from './mapResourceAuthoring';\nimport {\n getDeckMapDatasetSource,\n resolveDeckMapFitToData,\n useDeckMapFitController,\n} from './mapFit';\nimport type {\n DeckDatasetInput,\n DeckJsonMapHandle,\n PreparedDeckDatasetState,\n} from './types';\n\nfunction sampleDatasetSql(sql: string, maxRows: number) {\n const sourceSql = sql.trim().replace(/(?:\\s*;+\\s*)+$/, '');\n return `SELECT * FROM (${sourceSql}) USING SAMPLE ${maxRows} ROWS`;\n}\n\nfunction applyDataPolicy(\n input: DeckDatasetInput,\n policy: DeckMapDataPolicy,\n): DeckDatasetInput {\n if (policy.disabled) return input;\n const maxRows = Math.max(1, Math.floor(policy.maxRows));\n if ('sqlQuery' in input) {\n return {...input, sqlQuery: sampleDatasetSql(input.sqlQuery, maxRows)};\n }\n if ('tableName' in input) {\n return {\n ...input,\n transformSql: sampleDatasetSql(\n input.transformSql ??\n `SELECT * FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n maxRows,\n ),\n };\n }\n return input;\n}\n\n/**\n * Host-neutral data boundary for Deck map resources. Document maps use the\n * direct adapter below and are intentionally independent: no Mosaic selection\n * or cross-filter state is read or published.\n */\nexport type DeckMapDataAdapter = {\n resolveDatasets: (options: {\n mapId: string;\n map: DeckMapResource;\n }) => Record<string, DeckDatasetInput>;\n /** Resolves an unsampled dataset input for fit-to-data bounds queries. */\n resolveFitDataset?: (options: {\n mapId: string;\n map: DeckMapResource;\n datasetId: string;\n }) => DeckDatasetInput | undefined;\n getTableColumns?: (tableName: string) => DataTable['columns'] | undefined;\n};\n\nfunction resolveDirectDeckMapDatasets(\n map: DeckMapResource,\n dataPolicy?: DeckMapDataPolicy,\n) {\n const resolved: Record<string, DeckDatasetInput> = {};\n // A top-level selected table is only an unambiguous override when the map\n // has one table-backed dataset. Multi-source maps retain authored tables.\n const tableDatasetCount = Object.values(map.config.datasets).filter(\n (dataset) => isDeckMapTableDatasetSource(dataset.source),\n ).length;\n for (const [datasetId, dataset] of Object.entries(map.config.datasets)) {\n const {source, ...datasetConfig} = dataset;\n let input: DeckDatasetInput | undefined;\n if (isDeckMapSqlDatasetSource(source)) {\n input = {...datasetConfig, sqlQuery: source.sqlQuery};\n } else if (isDeckMapTableDatasetSource(source)) {\n input = {\n ...datasetConfig,\n tableName:\n tableDatasetCount === 1\n ? (map.selectedTable ?? source.tableName)\n : source.tableName,\n transformSql: source.transformSql,\n };\n }\n if (input) {\n resolved[datasetId] = dataPolicy\n ? applyDataPolicy(input, dataPolicy)\n : input;\n }\n }\n return resolved;\n}\n\nexport const directDeckMapDataAdapter: DeckMapDataAdapter = {\n resolveDatasets: ({map}) =>\n resolveDirectDeckMapDatasets(map, getDeckMapDataPolicy(map.config)),\n resolveFitDataset: ({map, datasetId}) =>\n resolveDirectDeckMapDatasets(map)[datasetId],\n};\n\nexport type DeckMapSurfaceProps = {\n mapId: string;\n map: DeckMapResource;\n readOnly?: boolean;\n selected?: boolean;\n caption?: string;\n headerActions?: ReactNode;\n fitRequestVersion?: number;\n onUpdateMap: (patch: Partial<DeckMapResource>) => void;\n onReportIssue: (issue: Omit<DeckMapRuntimeIssue, 'mapId'>) => void;\n /** Clears the current issue when its kind matches, or all issues when omitted. */\n onClearIssue: (kind?: DeckMapRuntimeIssue['kind']) => void;\n dataAdapter?: DeckMapDataAdapter;\n};\n\nexport function DeckMapSurface({\n mapId,\n map,\n onReportIssue,\n onClearIssue,\n fitRequestVersion = 0,\n dataAdapter = directDeckMapDataAdapter,\n}: DeckMapSurfaceProps) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const deckMapRef = useRef<DeckJsonMapHandle>(null);\n const datasets = useMemo(\n () => dataAdapter.resolveDatasets({mapId, map}),\n [dataAdapter, map, mapId],\n );\n const configIssues = useMemo(\n () => getDeckMapResourceConfigIssues(map.config, {allowEmpty: true}),\n [map.config],\n );\n useEffect(() => {\n if (configIssues.length > 0) {\n onReportIssue({\n kind: 'config-error',\n message: `${configIssues[0]!.path}: ${configIssues[0]!.message}`,\n recoverable: true,\n details: {issues: configIssues},\n });\n } else {\n onClearIssue('config-error');\n }\n }, [configIssues, onClearIssue, onReportIssue]);\n const handleDatasetStates = useCallback(\n (states: Record<string, PreparedDeckDatasetState>) => {\n const failure = Object.values(states).find(\n (\n state,\n ): state is Extract<PreparedDeckDatasetState, {status: 'error'}> =>\n state.status === 'error',\n );\n if (failure) {\n onReportIssue({\n kind: 'sql-error',\n message: failure.error.message,\n recoverable: true,\n });\n } else if (\n Object.values(states).every((state) => state.status === 'ready')\n ) {\n onClearIssue('sql-error');\n }\n },\n [onClearIssue, onReportIssue],\n );\n useEffect(() => {\n if (configIssues.length === 0 && Object.keys(datasets).length === 0) {\n onClearIssue();\n }\n }, [configIssues, datasets, onClearIssue]);\n const fitToData = useMemo(\n () => resolveDeckMapFitToData(map.config),\n [map.config],\n );\n const fitSource = useMemo(() => {\n if (!fitToData) return null;\n const fitDataset =\n dataAdapter.resolveFitDataset?.({\n mapId,\n map,\n datasetId: fitToData.dataset,\n }) ?? datasets[fitToData.dataset];\n return getDeckMapDatasetSource(fitDataset);\n }, [dataAdapter, datasets, fitToData, map, mapId]);\n const handleFitError = useCallback(\n (error: Error) =>\n onReportIssue({\n kind: 'fit-error',\n message: error.message,\n recoverable: true,\n }),\n [onReportIssue],\n );\n const handleFitSuccess = useCallback(\n () => onClearIssue('fit-error'),\n [onClearIssue],\n );\n useDeckMapFitController({\n scopeId: mapId,\n fitToData,\n source: fitSource,\n container,\n deckMapRef,\n requestVersion: fitRequestVersion,\n autoFit: true,\n onSuccess: handleFitSuccess,\n onError: handleFitError,\n });\n\n if (configIssues.length > 0) {\n return (\n <div className=\"text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n {`Invalid map configuration: ${configIssues[0]!.path}: ${configIssues[0]!.message}. Open map settings to change the layer type or fix the config.`}\n </div>\n );\n }\n if (Object.keys(datasets).length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n Select a geospatial table to configure this map.\n </div>\n );\n }\n return (\n <div ref={setContainer} className=\"h-full min-h-[320px]\">\n <DeckJsonMap\n ref={deckMapRef}\n spec={map.config.spec}\n datasets={datasets}\n mapStyle={map.config.mapStyle}\n mapProps={map.config.mapProps}\n showLegends={map.config.showLegends}\n className=\"h-full min-h-[320px]\"\n onDatasetStatesChange={handleDatasetStates}\n onRenderingError={(error) =>\n onReportIssue({\n kind: 'render-error',\n message: error.message,\n recoverable: true,\n })\n }\n />\n </div>\n );\n}\n"]}
|
package/dist/DeckMapsSlice.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type DuckDbSliceState } from '@sqlrooms/duckdb';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import type { DeckMapBasemapProvider } from './basemap';
|
|
3
4
|
import { type DeckMapConfig } from './mapConfig';
|
|
4
5
|
/** Runtime schema for a durable Deck map resource entry. */
|
|
5
6
|
export declare const DeckMapResourceSchema: z.ZodObject<{
|
|
@@ -70,6 +71,8 @@ export type DeckMapRuntimeIssueReporter = {
|
|
|
70
71
|
export type DeckMapsSliceState = {
|
|
71
72
|
deckMaps: {
|
|
72
73
|
config: DeckMapsSliceConfig;
|
|
74
|
+
/** Optional runtime basemap provider shared by maps in this room. */
|
|
75
|
+
basemapProvider?: DeckMapBasemapProvider;
|
|
73
76
|
runtime: {
|
|
74
77
|
issuesByMapId: Record<string, DeckMapRuntimeIssue>;
|
|
75
78
|
};
|
|
@@ -93,6 +96,8 @@ export type DeckMapsSliceState = {
|
|
|
93
96
|
*/
|
|
94
97
|
export declare function createDeckMapsSlice(props?: {
|
|
95
98
|
config?: Partial<DeckMapsSliceConfig>;
|
|
99
|
+
/** Optional host-owned basemaps. The provider is not persisted in map config. */
|
|
100
|
+
basemapProvider?: DeckMapBasemapProvider;
|
|
96
101
|
}): import("zustand").StateCreator<DeckMapsSliceState>;
|
|
97
102
|
/** Selects Deck map and DuckDB state from the current room store. */
|
|
98
103
|
export declare function useStoreWithDeckMaps<T>(selector: (state: DeckMapsSliceState & DuckDbSliceState) => T): T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeckMapsSlice.d.ts","sourceRoot":"","sources":["../src/DeckMapsSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAOvD,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"DeckMapsSlice.d.ts","sourceRoot":"","sources":["../src/DeckMapsSlice.ts"],"names":[],"mappings":"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"}
|
package/dist/DeckMapsSlice.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSlice, useBaseRoomStore, } from '@sqlrooms/room-store';
|
|
2
2
|
import { produce } from 'immer';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { createEmptyDeckMapConfig } from './mapConfig';
|
|
4
|
+
import { createEmptyDeckMapConfig, withDefaultDeckMapStyle, withPreservedDeckMapStyle, } from './mapConfig';
|
|
5
5
|
const DeckMapConfigSchema = z.object({
|
|
6
6
|
spec: z.union([z.string(), z.record(z.string(), z.unknown())]),
|
|
7
7
|
datasets: z.record(z.string(), z.unknown()),
|
|
@@ -33,6 +33,7 @@ export function createDeckMapsSlice(props) {
|
|
|
33
33
|
return createSlice((set, get) => ({
|
|
34
34
|
deckMaps: {
|
|
35
35
|
config: { mapsById: props?.config?.mapsById ?? {} },
|
|
36
|
+
basemapProvider: props?.basemapProvider,
|
|
36
37
|
runtime: { issuesByMapId: {} },
|
|
37
38
|
setConfig: (config) => set((state) => produce(state, (draft) => {
|
|
38
39
|
draft.deckMaps.config = config;
|
|
@@ -42,7 +43,7 @@ export function createDeckMapsSlice(props) {
|
|
|
42
43
|
draft.deckMaps.config.mapsById[id] = {
|
|
43
44
|
id,
|
|
44
45
|
title: options?.title ?? 'Map',
|
|
45
|
-
config: options?.config ?? createEmptyDeckMapConfig(),
|
|
46
|
+
config: withDefaultDeckMapStyle(options?.config ?? createEmptyDeckMapConfig()),
|
|
46
47
|
};
|
|
47
48
|
}
|
|
48
49
|
})),
|
|
@@ -55,7 +56,9 @@ export function createDeckMapsSlice(props) {
|
|
|
55
56
|
const map = draft.deckMaps.config.mapsById[id];
|
|
56
57
|
if (!map)
|
|
57
58
|
throw new Error(`Deck map ${id} was not found`);
|
|
58
|
-
|
|
59
|
+
const config = patch.config &&
|
|
60
|
+
withPreservedDeckMapStyle({ ...patch.config }, map.config);
|
|
61
|
+
Object.assign(map, patch, { id }, config ? { config } : {});
|
|
59
62
|
if (patch.config) {
|
|
60
63
|
const issue = draft.deckMaps.runtime.issuesByMapId[id];
|
|
61
64
|
if (Object.keys(patch.config.datasets).length === 0 ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeckMapsSlice.js","sourceRoot":"","sources":["../src/DeckMapsSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {type DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {\n type BaseRoomStoreState,\n createSlice,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {produce} from 'immer';\nimport {z} from 'zod';\nimport {createEmptyDeckMapConfig, type DeckMapConfig} from './mapConfig';\n\nconst DeckMapConfigSchema = z.object({\n spec: z.union([z.string(), z.record(z.string(), z.unknown())]),\n datasets: z.record(z.string(), z.unknown()),\n configMode: z.enum(['basic', 'custom']).optional(),\n mapStyle: z.string().optional(),\n mapProps: z.record(z.string(), z.unknown()).optional(),\n showLegends: z.boolean().optional(),\n interaction: z.record(z.string(), z.unknown()).optional(),\n fitToData: z.record(z.string(), z.unknown()).optional(),\n dataPolicy: z.record(z.string(), z.unknown()).optional(),\n settingsOpen: z.boolean().optional(),\n});\n\n/** Runtime schema for a durable Deck map resource entry. */\nexport const DeckMapResourceSchema = z.object({\n id: z.string(),\n title: z.string(),\n selectedTable: z.string().optional(),\n config: DeckMapConfigSchema,\n});\n\n/** A durable Deck map resource stored in the room configuration. */\nexport type DeckMapResource = Omit<\n z.infer<typeof DeckMapResourceSchema>,\n 'config'\n> & {\n config: DeckMapConfig;\n};\n\n/** Persistence schema for the Deck maps slice configuration. */\nexport const DeckMapsSliceConfig = z.object({\n mapsById: z.record(z.string(), DeckMapResourceSchema).default({}),\n});\n\n/** Persisted Deck map resources indexed by their stable resource ids. */\nexport type DeckMapsSliceConfig = {\n mapsById: Record<string, DeckMapResource>;\n};\n\n/** Ephemeral rendering or data issue associated with one Deck map resource. */\nexport type DeckMapRuntimeIssue = {\n kind:\n | 'sql-error'\n | 'fit-error'\n | 'render-error'\n | 'data-policy-error'\n | 'config-error';\n mapId: string;\n message: string;\n recoverable: boolean;\n details?: Record<string, unknown>;\n};\n\n/** Callback pair for reporting and clearing ephemeral Deck map issues. */\nexport type DeckMapRuntimeIssueReporter = {\n reportIssue: (issue: DeckMapRuntimeIssue) => void;\n clearIssue: () => void;\n};\n\n/** Room-store state and actions for durable maps and ephemeral runtime issues. */\nexport type DeckMapsSliceState = {\n deckMaps: {\n config: DeckMapsSliceConfig;\n runtime: {issuesByMapId: Record<string, DeckMapRuntimeIssue>};\n setConfig: (config: DeckMapsSliceConfig) => void;\n ensureMap: (\n id: string,\n options?: {title?: string; config?: DeckMapConfig},\n ) => void;\n removeMap: (id: string) => void;\n getMap: (id: string) => DeckMapResource | undefined;\n updateMap: (id: string, patch: Partial<DeckMapResource>) => void;\n setSelectedTable: (id: string, tableName?: string) => void;\n reportMapIssue: (\n id: string,\n issue: Omit<DeckMapRuntimeIssue, 'mapId'>,\n ) => void;\n /** Clears the current issue when its kind matches, or unconditionally when omitted. */\n clearMapIssue: (id: string, kind?: DeckMapRuntimeIssue['kind']) => void;\n };\n};\n\n/**\n * Creates the room-store slice that owns durable Deck map resources and their\n * instance-scoped runtime issues.\n */\nexport function createDeckMapsSlice(props?: {\n config?: Partial<DeckMapsSliceConfig>;\n}) {\n type RootState = BaseRoomStoreState & DuckDbSliceState & DeckMapsSliceState;\n return createSlice<DeckMapsSliceState, RootState>((set, get) => ({\n deckMaps: {\n config: {mapsById: props?.config?.mapsById ?? {}},\n runtime: {issuesByMapId: {}},\n setConfig: (config) =>\n set((state) =>\n produce(state, (draft) => {\n draft.deckMaps.config = config;\n }),\n ),\n ensureMap: (id, options) =>\n set((state) =>\n produce(state, (draft) => {\n if (!draft.deckMaps.config.mapsById[id]) {\n draft.deckMaps.config.mapsById[id] = {\n id,\n title: options?.title ?? 'Map',\n config: options?.config ?? createEmptyDeckMapConfig(),\n };\n }\n }),\n ),\n removeMap: (id) =>\n set((state) =>\n produce(state, (draft) => {\n delete draft.deckMaps.config.mapsById[id];\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }),\n ),\n getMap: (id) => get().deckMaps.config.mapsById[id],\n updateMap: (id, patch) =>\n set((state) =>\n produce(state, (draft) => {\n const map = draft.deckMaps.config.mapsById[id];\n if (!map) throw new Error(`Deck map ${id} was not found`);\n Object.assign(map, patch, {id});\n if (patch.config) {\n const issue = draft.deckMaps.runtime.issuesByMapId[id];\n if (\n Object.keys(patch.config.datasets).length === 0 ||\n issue?.kind === 'render-error'\n ) {\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }\n }\n }),\n ),\n setSelectedTable: (id, tableName) =>\n set((state) =>\n produce(state, (draft) => {\n const map = draft.deckMaps.config.mapsById[id];\n if (!map) throw new Error(`Deck map ${id} was not found`);\n map.selectedTable = tableName;\n }),\n ),\n reportMapIssue: (id, issue) =>\n set((state) =>\n produce(state, (draft) => {\n draft.deckMaps.runtime.issuesByMapId[id] = {...issue, mapId: id};\n }),\n ),\n clearMapIssue: (id, kind) =>\n set((state) =>\n produce(state, (draft) => {\n const issue = draft.deckMaps.runtime.issuesByMapId[id];\n if (!kind || issue?.kind === kind) {\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }\n }),\n ),\n },\n }));\n}\n\n/** Selects Deck map and DuckDB state from the current room store. */\nexport function useStoreWithDeckMaps<T>(\n selector: (state: DeckMapsSliceState & DuckDbSliceState) => T,\n): T {\n return useBaseRoomStore<DeckMapsSliceState & DuckDbSliceState, T>(selector);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DeckMapsSlice.js","sourceRoot":"","sources":["../src/DeckMapsSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {type DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {\n type BaseRoomStoreState,\n createSlice,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {produce} from 'immer';\nimport {z} from 'zod';\nimport type {DeckMapBasemapProvider} from './basemap';\nimport {\n createEmptyDeckMapConfig,\n withDefaultDeckMapStyle,\n withPreservedDeckMapStyle,\n type DeckMapConfig,\n} from './mapConfig';\n\nconst DeckMapConfigSchema = z.object({\n spec: z.union([z.string(), z.record(z.string(), z.unknown())]),\n datasets: z.record(z.string(), z.unknown()),\n configMode: z.enum(['basic', 'custom']).optional(),\n mapStyle: z.string().optional(),\n mapProps: z.record(z.string(), z.unknown()).optional(),\n showLegends: z.boolean().optional(),\n interaction: z.record(z.string(), z.unknown()).optional(),\n fitToData: z.record(z.string(), z.unknown()).optional(),\n dataPolicy: z.record(z.string(), z.unknown()).optional(),\n settingsOpen: z.boolean().optional(),\n});\n\n/** Runtime schema for a durable Deck map resource entry. */\nexport const DeckMapResourceSchema = z.object({\n id: z.string(),\n title: z.string(),\n selectedTable: z.string().optional(),\n config: DeckMapConfigSchema,\n});\n\n/** A durable Deck map resource stored in the room configuration. */\nexport type DeckMapResource = Omit<\n z.infer<typeof DeckMapResourceSchema>,\n 'config'\n> & {\n config: DeckMapConfig;\n};\n\n/** Persistence schema for the Deck maps slice configuration. */\nexport const DeckMapsSliceConfig = z.object({\n mapsById: z.record(z.string(), DeckMapResourceSchema).default({}),\n});\n\n/** Persisted Deck map resources indexed by their stable resource ids. */\nexport type DeckMapsSliceConfig = {\n mapsById: Record<string, DeckMapResource>;\n};\n\n/** Ephemeral rendering or data issue associated with one Deck map resource. */\nexport type DeckMapRuntimeIssue = {\n kind:\n | 'sql-error'\n | 'fit-error'\n | 'render-error'\n | 'data-policy-error'\n | 'config-error';\n mapId: string;\n message: string;\n recoverable: boolean;\n details?: Record<string, unknown>;\n};\n\n/** Callback pair for reporting and clearing ephemeral Deck map issues. */\nexport type DeckMapRuntimeIssueReporter = {\n reportIssue: (issue: DeckMapRuntimeIssue) => void;\n clearIssue: () => void;\n};\n\n/** Room-store state and actions for durable maps and ephemeral runtime issues. */\nexport type DeckMapsSliceState = {\n deckMaps: {\n config: DeckMapsSliceConfig;\n /** Optional runtime basemap provider shared by maps in this room. */\n basemapProvider?: DeckMapBasemapProvider;\n runtime: {issuesByMapId: Record<string, DeckMapRuntimeIssue>};\n setConfig: (config: DeckMapsSliceConfig) => void;\n ensureMap: (\n id: string,\n options?: {title?: string; config?: DeckMapConfig},\n ) => void;\n removeMap: (id: string) => void;\n getMap: (id: string) => DeckMapResource | undefined;\n updateMap: (id: string, patch: Partial<DeckMapResource>) => void;\n setSelectedTable: (id: string, tableName?: string) => void;\n reportMapIssue: (\n id: string,\n issue: Omit<DeckMapRuntimeIssue, 'mapId'>,\n ) => void;\n /** Clears the current issue when its kind matches, or unconditionally when omitted. */\n clearMapIssue: (id: string, kind?: DeckMapRuntimeIssue['kind']) => void;\n };\n};\n\n/**\n * Creates the room-store slice that owns durable Deck map resources and their\n * instance-scoped runtime issues.\n */\nexport function createDeckMapsSlice(props?: {\n config?: Partial<DeckMapsSliceConfig>;\n /** Optional host-owned basemaps. The provider is not persisted in map config. */\n basemapProvider?: DeckMapBasemapProvider;\n}) {\n type RootState = BaseRoomStoreState & DuckDbSliceState & DeckMapsSliceState;\n return createSlice<DeckMapsSliceState, RootState>((set, get) => ({\n deckMaps: {\n config: {mapsById: props?.config?.mapsById ?? {}},\n basemapProvider: props?.basemapProvider,\n runtime: {issuesByMapId: {}},\n setConfig: (config) =>\n set((state) =>\n produce(state, (draft) => {\n draft.deckMaps.config = config;\n }),\n ),\n ensureMap: (id, options) =>\n set((state) =>\n produce(state, (draft) => {\n if (!draft.deckMaps.config.mapsById[id]) {\n draft.deckMaps.config.mapsById[id] = {\n id,\n title: options?.title ?? 'Map',\n config: withDefaultDeckMapStyle(\n options?.config ?? createEmptyDeckMapConfig(),\n ),\n };\n }\n }),\n ),\n removeMap: (id) =>\n set((state) =>\n produce(state, (draft) => {\n delete draft.deckMaps.config.mapsById[id];\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }),\n ),\n getMap: (id) => get().deckMaps.config.mapsById[id],\n updateMap: (id, patch) =>\n set((state) =>\n produce(state, (draft) => {\n const map = draft.deckMaps.config.mapsById[id];\n if (!map) throw new Error(`Deck map ${id} was not found`);\n const config =\n patch.config &&\n withPreservedDeckMapStyle({...patch.config}, map.config);\n Object.assign(map, patch, {id}, config ? {config} : {});\n if (patch.config) {\n const issue = draft.deckMaps.runtime.issuesByMapId[id];\n if (\n Object.keys(patch.config.datasets).length === 0 ||\n issue?.kind === 'render-error'\n ) {\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }\n }\n }),\n ),\n setSelectedTable: (id, tableName) =>\n set((state) =>\n produce(state, (draft) => {\n const map = draft.deckMaps.config.mapsById[id];\n if (!map) throw new Error(`Deck map ${id} was not found`);\n map.selectedTable = tableName;\n }),\n ),\n reportMapIssue: (id, issue) =>\n set((state) =>\n produce(state, (draft) => {\n draft.deckMaps.runtime.issuesByMapId[id] = {...issue, mapId: id};\n }),\n ),\n clearMapIssue: (id, kind) =>\n set((state) =>\n produce(state, (draft) => {\n const issue = draft.deckMaps.runtime.issuesByMapId[id];\n if (!kind || issue?.kind === kind) {\n delete draft.deckMaps.runtime.issuesByMapId[id];\n }\n }),\n ),\n },\n }));\n}\n\n/** Selects Deck map and DuckDB state from the current room store. */\nexport function useStoreWithDeckMaps<T>(\n selector: (state: DeckMapsSliceState & DuckDbSliceState) => T,\n): T {\n return useBaseRoomStore<DeckMapsSliceState & DuckDbSliceState, T>(selector);\n}\n"]}
|
package/dist/MapSettings.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { type DataTable } from '@sqlrooms/duckdb';
|
|
3
|
+
import type { ColorScaleConfig } from '@sqlrooms/color-scales';
|
|
3
4
|
import { type DeckMapConfig } from './mapConfig';
|
|
5
|
+
/** Pick field first, then coerce scale type to match that field. */
|
|
6
|
+
export declare function resolveColorScaleFieldAndType(columns: DataTable['columns'], preferredType: ColorScaleConfig['type'], preferredField?: string): {
|
|
7
|
+
field: string;
|
|
8
|
+
type: ColorScaleConfig['type'];
|
|
9
|
+
} | undefined;
|
|
4
10
|
export interface DeckMapSettingsPanelProps {
|
|
5
11
|
title: string;
|
|
6
12
|
selectedTable?: string;
|
|
@@ -11,6 +17,14 @@ export interface DeckMapSettingsPanelProps {
|
|
|
11
17
|
onTitleChange: (title: string) => void;
|
|
12
18
|
onConfigChange: (config: DeckMapConfig) => void;
|
|
13
19
|
readOnly?: boolean;
|
|
20
|
+
/** Custom maps stay on the JSON editor so basic controls cannot clobber them. */
|
|
21
|
+
customConfig?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Document maps own their dataset in `config.datasets`. Prefer that table
|
|
24
|
+
* over `selectedTable`, which is only a sidecar. Dashboards leave this false
|
|
25
|
+
* so the shared dashboard selected table is shown.
|
|
26
|
+
*/
|
|
27
|
+
preferDatasetSource?: boolean;
|
|
14
28
|
}
|
|
15
29
|
export declare const DeckMapSettingsPanel: FC<DeckMapSettingsPanelProps>;
|
|
16
30
|
//# sourceMappingURL=MapSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapSettings.d.ts","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MapSettings.d.ts","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,EAQH,MAAM,OAAO,CAAC;AACf,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAW1B,OAAO,KAAK,EAAC,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC;AAsB/E,OAAO,EAA8B,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAmG5E,oEAAoE;AACpE,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,EAC7B,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,EACvC,cAAc,CAAC,EAAE,MAAM,GACtB;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;CAAC,GAAG,SAAS,CAW7D;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA80BD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA++B9D,CAAC"}
|