@sqlrooms/kepler 0.26.1-rc.0 → 0.26.1-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"KeplerSlice.d.ts","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeplerSlice.d.ts","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,17 @@ import { ALL_FIELD_TYPES } from '@kepler.gl/constants';
3
3
  import { castDuckDBTypesForKepler, getDuckDBColumnTypes, getDuckDBColumnTypesMap, restoreGeoarrowMetadata, setGeoArrowWKBExtension, } from '@kepler.gl/duckdb';
4
4
  import { arrowSchemaToFields } from '@kepler.gl/processors';
5
5
  import { INITIAL_UI_STATE, keplerGlReducer, } from '@kepler.gl/reducers';
6
- import KeplerGLSchemaManager from '@kepler.gl/schemas';
6
+ import { KeplerGLSchemaClass } from '@kepler.gl/schemas';
7
7
  import { KeplerTable } from '@kepler.gl/table';
8
8
  import { initApplicationConfig, } from '@kepler.gl/utils';
9
9
  import { createId } from '@paralleldrive/cuid2';
10
10
  import { createSlice, useBaseRoomShellStore, } from '@sqlrooms/room-shell';
11
- import { produce } from 'immer';
11
+ import { produce, setAutoFreeze } from 'immer';
12
+ setAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors
12
13
  import { taskMiddleware } from 'react-palm/tasks';
13
14
  import { compose } from 'redux';
14
15
  import { createLogger } from 'redux-logger';
16
+ const KeplerGLSchemaManager = new KeplerGLSchemaClass();
15
17
  class DesktopKeplerTable extends KeplerTable {
16
18
  static getInputDataValidator = function () {
17
19
  // Default validator accepts only string timestamps
@@ -1 +1 @@
1
- {"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDataToMap,\n deleteEntry,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n wrapTo,\n addLayer as addLayerAction,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {Layer} from '@kepler.gl/layers';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport KeplerGLSchemaManager from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {AddDataToMapPayload} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n RoomShellSliceState,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport * as arrow from 'apache-arrow';\nimport {produce} from 'immer';\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n initialKeplerState?: Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n return {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n },\n ],\n currentMapId: mapId,\n ...props,\n };\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (mapId: string, layer: Layer, datasetId: string) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n setCurrentMapId: (mapId: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string) => string;\n deleteMap: (mapId: string) => void;\n renameMap: (mapId: string, name: string) => void;\n getCurrentMap: () => KeplerMapSchema | undefined;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n initialKeplerState = {\n mapStyle: {styleType: 'positron'} as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n },\n },\n },\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DuckDbSliceState\n >((set, get) => {\n const keplerReducer = keplerGlReducer.initialState(initialKeplerState);\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = config;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n updateMapConfigs();\n get().kepler.syncKeplerDatasets();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const keplerInitialState: KeplerGlReduxState = keplerReducer(\n undefined,\n registerEntry({id: currentMapId}),\n );\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-ignore\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n updateMapConfigs();\n await get().kepler.syncKeplerDatasets();\n requestMapStyle(config.currentMapId);\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addTableToMap: async (mapId, tableName, options = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options}),\n );\n }\n },\n\n getCurrentMap: () => {\n return get().kepler.config.maps.find(\n (map) => map.id === get().kepler.config.currentMapId,\n );\n },\n\n setCurrentMapId: (mapId) => {\n return set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.currentMapId = mapId;\n }),\n );\n },\n\n createMap: (name) => {\n const mapId = createId();\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n });\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: mapId}),\n );\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n return mapId;\n },\n\n async syncKeplerDatasets() {\n for (const mapId of Object.keys(get().kepler.map)) {\n const keplerDatasets = get().kepler.map[mapId]?.visState.datasets;\n for (const {table} of get().db.tables) {\n // TODO: remove this once getDuckDBColumnTypesMap can handle qualified table names\n // const qualifiedTable = table.toString();\n if (\n // !table.schema?.startsWith('__') && // skip internal schemas\n // !keplerDatasets?.[qualifiedTable]\n table.schema === 'main' &&\n !keplerDatasets?.[table.table]\n ) {\n await get().kepler.addTableToMap(mapId, table.table, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps = draft.kepler.config.maps.filter(\n (map) => map.id !== mapId,\n );\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (mapId, tableName, tileset, tileMetadata) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers: true,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: keplerReducer(\n get().kepler.map,\n registerEntry({id: mapId}),\n ),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: map.id}),\n );\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const forwardDispatch = {\n [currentMapId]: getForwardDispatch(currentMapId),\n };\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
1
+ {"version":3,"file":"KeplerSlice.js","sourceRoot":"","sources":["../src/KeplerSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDataToMap,\n deleteEntry,\n ActionTypes as KeplerActionTypes,\n registerEntry,\n removeDataset,\n requestMapStyles,\n wrapTo,\n addLayer as addLayerAction,\n} from '@kepler.gl/actions';\nimport {ALL_FIELD_TYPES, VectorTileDatasetMetadata} from '@kepler.gl/constants';\nimport {\n castDuckDBTypesForKepler,\n getDuckDBColumnTypes,\n getDuckDBColumnTypesMap,\n restoreGeoarrowMetadata,\n setGeoArrowWKBExtension,\n} from '@kepler.gl/duckdb';\nimport {Layer} from '@kepler.gl/layers';\nimport {arrowSchemaToFields} from '@kepler.gl/processors';\nimport {\n INITIAL_UI_STATE,\n keplerGlReducer,\n KeplerGlState,\n MapStyle,\n} from '@kepler.gl/reducers';\nimport {KeplerGLSchemaClass} from '@kepler.gl/schemas';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {AddDataToMapPayload} from '@kepler.gl/types';\nimport {\n DatabaseConnection,\n initApplicationConfig,\n KeplerApplicationConfig,\n} from '@kepler.gl/utils';\nimport {createId} from '@paralleldrive/cuid2';\nimport {DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n RoomShellSliceState,\n useBaseRoomShellStore,\n type StateCreator,\n} from '@sqlrooms/room-shell';\nimport * as arrow from 'apache-arrow';\nimport {produce, setAutoFreeze} from 'immer';\nsetAutoFreeze(false); // Kepler attempts to mutate redux state, so we need to disable immer's auto freeze to avoid errors\nimport {taskMiddleware} from 'react-palm/tasks';\nimport type {\n Action,\n AnyAction,\n MiddlewareAPI,\n Store as ReduxStore,\n} from 'redux';\nimport {compose, Dispatch, Middleware} from 'redux';\nimport {createLogger, ReduxLoggerOptions} from 'redux-logger';\n\nconst KeplerGLSchemaManager = new KeplerGLSchemaClass();\n\nclass DesktopKeplerTable extends KeplerTable {\n static getInputDataValidator = function () {\n // Default validator accepts only string timestamps\n return (d: any) => d;\n };\n}\n\nexport type KeplerGLBasicProps = {\n mapboxApiAccessToken?: string;\n};\n\nexport type CreateKeplerSliceOptions = {\n config?: Partial<KeplerSliceConfig>;\n initialKeplerState?: Partial<KeplerGlState>;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n actionLogging?: boolean | ReduxLoggerOptions;\n middlewares?: Middleware[];\n applicationConfig?: KeplerApplicationConfig;\n /**\n * Called when a kepler action is dispatched\n * @param mapId - The map id\n * @param action - The action\n */\n onAction?: (mapId: string, action: KeplerAction) => void;\n};\n\nexport function createDefaultKeplerConfig(\n props?: Partial<KeplerSliceConfig>,\n): KeplerSliceConfig {\n const mapId = createId();\n return {\n maps: [\n {\n id: mapId,\n name: 'Untitled Map',\n config: undefined,\n },\n ],\n currentMapId: mapId,\n ...props,\n };\n}\n\nexport type KeplerAction = {\n type: string;\n payload?: unknown;\n};\n\nexport function hasMapId(action: KeplerAction): action is KeplerAction & {\n payload: {meta: {_id_: string}};\n} {\n return (\n typeof action.payload === 'object' &&\n action.payload !== null &&\n 'meta' in action.payload &&\n typeof action.payload.meta === 'object' &&\n action.payload.meta !== null &&\n '_id_' in action.payload.meta\n );\n}\n\n// support multiple kepler maps\nexport type KeplerGlReduxState = {[id: string]: KeplerGlState};\nexport type KeplerSliceState = {\n kepler: {\n config: KeplerSliceConfig;\n map: KeplerGlReduxState;\n basicKeplerProps?: Partial<KeplerGLBasicProps>;\n forwardDispatch: {\n [mapId: string]: Dispatch;\n };\n initialize: () => Promise<void>;\n setConfig: (config: KeplerSliceConfig) => void;\n /**\n * Update the datasets in all the kepler map so that they correspond to\n * the latest table schemas in the database\n */\n syncKeplerDatasets: () => Promise<void>;\n addLayer: (mapId: string, layer: Layer, datasetId: string) => void;\n addTableToMap: (\n mapId: string,\n tableName: string,\n options?: AddDataToMapPayload['options'],\n ) => Promise<void>;\n addTileSetToMap: (\n mapId: string,\n tableName: string,\n tileset: {\n name: string;\n type: string;\n metadata: VectorTileDatasetMetadata;\n },\n tileMetadata: Record<string, any>,\n ) => void;\n addConfigToMap: (mapId: string, config: KeplerMapSchema) => void;\n removeDatasetFromMaps: (datasetId: string) => void;\n dispatchAction: (mapId: string, action: KeplerAction) => void;\n setCurrentMapId: (mapId: string) => void;\n /**\n * Create a new map and return the map id\n * @param name - The name of the map\n * @returns The map id\n */\n createMap: (name?: string) => string;\n deleteMap: (mapId: string) => void;\n renameMap: (mapId: string, name: string) => void;\n getCurrentMap: () => KeplerMapSchema | undefined;\n registerKeplerMapIfNotExists: (mapId: string) => void;\n __reduxProviderStore: ReduxStore<KeplerGlReduxState, AnyAction> | undefined;\n };\n};\n\n// Auto save will be triggered in middleware on every kepler action\n// skip these actions to avoid unnecessary save\nconst SKIP_AUTO_SAVE_ACTIONS: string[] = [\n KeplerActionTypes.LAYER_HOVER,\n KeplerActionTypes.UPDATE_MAP,\n];\n\nexport function createKeplerSlice({\n basicKeplerProps = {},\n config: initialConfigProps,\n initialKeplerState = {\n mapStyle: {styleType: 'positron'} as MapStyle,\n uiState: {\n ...INITIAL_UI_STATE,\n currentModal: null,\n mapControls: {\n visibleLayers: INITIAL_UI_STATE.mapControls.visibleLayers,\n mapLegend: {\n show: true,\n active: false,\n },\n toggle3d: {\n show: true,\n active: false,\n },\n },\n },\n },\n actionLogging = false,\n middlewares: additionalMiddlewares = [],\n applicationConfig,\n onAction,\n}: CreateKeplerSliceOptions = {}): StateCreator<KeplerSliceState> {\n const initialConfig = createDefaultKeplerConfig(initialConfigProps);\n initApplicationConfig({\n table: DesktopKeplerTable,\n ...applicationConfig,\n });\n return createSlice<\n KeplerSliceState,\n BaseRoomStoreState & KeplerSliceState & DuckDbSliceState\n >((set, get) => {\n const keplerReducer = keplerGlReducer.initialState(initialKeplerState);\n const middlewares: Middleware[] = [\n taskMiddleware,\n saveKeplerConfigMiddleware,\n ...additionalMiddlewares,\n ];\n\n if (actionLogging) {\n const logger = createLogger(\n actionLogging === true ? {collapsed: true} : actionLogging,\n ) as Middleware;\n middlewares.push(logger);\n }\n\n const storeDispatch: Dispatch<KeplerAction> = (action) => {\n set((state: KeplerSliceState) => ({\n ...state,\n kepler: {\n ...state.kepler,\n map: keplerReducer(state.kepler.map, action),\n },\n }));\n\n // Call onAction if it's defined\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n onAction?.(mapId, action);\n return action;\n };\n // const forwardDispatch: {[id: string]: Dispatch} = {};\n return {\n kepler: {\n config: initialConfig,\n basicKeplerProps,\n map: {},\n dispatchAction: () => {},\n __reduxProviderStore: undefined,\n forwardDispatch: {},\n\n setConfig: (config: KeplerSliceConfig) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config = config;\n }),\n );\n updateMapReduxStates();\n updateForwardDispatch();\n updateMapConfigs();\n get().kepler.syncKeplerDatasets();\n },\n\n async initialize() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const keplerInitialState: KeplerGlReduxState = keplerReducer(\n undefined,\n registerEntry({id: currentMapId}),\n );\n set({\n kepler: {\n ...get().kepler,\n map: keplerInitialState,\n dispatchAction: (mid, action) => {\n // wrapDispatch(wrapTo(mapId)(action));\n const dispatchToMap = get().kepler.forwardDispatch[mid];\n if (dispatchToMap) {\n dispatchToMap(wrapTo(mid, action));\n } else {\n console.error('dispatchAction: mapId not found', mid);\n }\n },\n __reduxProviderStore: {\n dispatch: storeDispatch,\n getState: () => get().kepler.map || {},\n subscribe: () => () => {},\n replaceReducer: () => {},\n // @ts-ignore\n [Symbol.observable]: () => {},\n },\n },\n });\n updateForwardDispatch();\n updateMapConfigs();\n await get().kepler.syncKeplerDatasets();\n requestMapStyle(config.currentMapId);\n },\n\n addLayer: (mapId, layer, datasetId) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addLayerAction(layer, datasetId));\n },\n\n addTableToMap: async (mapId, tableName, options = {}) => {\n const connector = await get().db.getConnector();\n const duckDbColumns = await getDuckDBColumnTypes(\n {\n query: (query: string) => connector.query(query).result,\n } as DatabaseConnection,\n tableName,\n );\n const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);\n const adjustedQuery = castDuckDBTypesForKepler(\n tableName,\n duckDbColumns,\n );\n const arrowResult = await connector.query(adjustedQuery).result;\n setGeoArrowWKBExtension(arrowResult, duckDbColumns);\n // TODO remove once DuckDB doesn't drop geoarrow metadata\n restoreGeoarrowMetadata(arrowResult, {});\n const fields = arrowSchemaToFields(arrowResult, tableDuckDBTypes);\n const cols = Array.from({length: arrowResult.numCols}, (_, i) =>\n arrowResult.getChildAt(i),\n ).filter((col) => col) as arrow.Vector[];\n\n if (fields && cols) {\n const datasets: AddDataToMapPayload['datasets'] = {\n data: {fields, cols, rows: [], arrowTable: arrowResult},\n info: {label: tableName, id: tableName},\n metadata: {tableName},\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({datasets, options}),\n );\n }\n },\n\n getCurrentMap: () => {\n return get().kepler.config.maps.find(\n (map) => map.id === get().kepler.config.currentMapId,\n );\n },\n\n setCurrentMapId: (mapId) => {\n return set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.currentMapId = mapId;\n }),\n );\n },\n\n createMap: (name) => {\n const mapId = createId();\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps.push({\n id: mapId,\n name: name ?? 'Untitled Map',\n });\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: mapId}),\n );\n draft.kepler.forwardDispatch[mapId] = getForwardDispatch(mapId);\n }),\n );\n requestMapStyle(mapId);\n get().kepler.syncKeplerDatasets();\n return mapId;\n },\n\n async syncKeplerDatasets() {\n for (const mapId of Object.keys(get().kepler.map)) {\n const keplerDatasets = get().kepler.map[mapId]?.visState.datasets;\n for (const {table} of get().db.tables) {\n // TODO: remove this once getDuckDBColumnTypesMap can handle qualified table names\n // const qualifiedTable = table.toString();\n if (\n // !table.schema?.startsWith('__') && // skip internal schemas\n // !keplerDatasets?.[qualifiedTable]\n table.schema === 'main' &&\n !keplerDatasets?.[table.table]\n ) {\n await get().kepler.addTableToMap(mapId, table.table, {\n autoCreateLayers: false,\n centerMap: false,\n });\n }\n }\n }\n },\n\n deleteMap: (mapId) => {\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.config.maps = draft.kepler.config.maps.filter(\n (map) => map.id !== mapId,\n );\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n\n delete draft.kepler.forwardDispatch[mapId];\n }),\n );\n },\n\n renameMap: (mapId, name) => {\n set((state) =>\n produce(state, (draft) => {\n const map = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (map) {\n map.name = name;\n }\n }),\n );\n },\n\n addDataToMap: (mapId: string, data: any) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n get().kepler.dispatchAction(mapId, addDataToMap(data));\n },\n\n addTileSetToMap: (mapId, tableName, tileset, tileMetadata) => {\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const dataset = {\n info: {\n label: tileset.name,\n type: tileset.type,\n format: 'rows',\n // important for kepler to reload this tileset\n id: tableName,\n },\n data: {\n fields: tileMetadata?.fields || [],\n rows: [],\n },\n metadata: {\n // duckdb table name\n tableName,\n ...tileMetadata,\n ...tileset.metadata,\n },\n // vector tile layer only supports gpu filtering for now\n supportedFilterTypes: [\n ALL_FIELD_TYPES.real,\n ALL_FIELD_TYPES.integer,\n ],\n disableDataOperation: true,\n };\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({\n datasets: dataset,\n options: {\n autoCreateLayers: true,\n centerMap: true,\n },\n }),\n );\n },\n\n addConfigToMap: (mapId: string, config: any) => {\n // if map not registered, register it\n get().kepler.registerKeplerMapIfNotExists(mapId);\n const parsedConfig = KeplerGLSchemaManager.parseSavedConfig(config);\n if (!parsedConfig) {\n throw new Error('Failed to parse config');\n }\n get().kepler.dispatchAction(\n mapId,\n addDataToMap({config: parsedConfig, datasets: []}),\n );\n },\n\n registerKeplerMapIfNotExists(mapId: string) {\n if (!get().kepler.map[mapId]) {\n set({\n kepler: {\n ...get().kepler,\n map: keplerReducer(\n get().kepler.map,\n registerEntry({id: mapId}),\n ),\n forwardDispatch: {\n ...get().kepler.forwardDispatch,\n [mapId]: getForwardDispatch(mapId),\n },\n },\n });\n requestMapStyle(mapId);\n }\n },\n\n removeDatasetFromMaps: (datasetId: string) => {\n for (const mapId of Object.keys(get().kepler.map)) {\n const map = get().kepler.map[mapId];\n if (map) {\n get().kepler.dispatchAction(mapId, removeDataset(datasetId));\n }\n }\n },\n },\n };\n\n function requestMapStyle(mapId: string) {\n const {mapStyle} = get().kepler.map[mapId] || {};\n const style = mapStyle?.mapStyles[mapStyle.styleType];\n if (style) {\n get().kepler.dispatchAction(\n mapId,\n requestMapStyles({[style.id]: style}),\n );\n }\n }\n\n function saveKeplerConfigMiddleware() {\n return (next: (action: KeplerAction) => void) =>\n (action: KeplerAction) => {\n // get id from kepler action payload meta\n const mapId = hasMapId(action) ? action.payload.meta._id_ : undefined;\n if (!mapId) throw new Error('Map ID not found in action payload');\n const result = next(action);\n if (!SKIP_AUTO_SAVE_ACTIONS.includes(action.type) && mapId) {\n // save kepler config to store\n set((state) =>\n produce(state, (draft) => {\n const mapToSave = draft.kepler.config.maps.find(\n (map) => map.id === mapId,\n );\n if (mapToSave && state.kepler.map?.[mapId]) {\n mapToSave.config = KeplerGLSchemaManager.getConfigToSave(\n state.kepler.map[mapId],\n ) as any;\n }\n }),\n );\n }\n // save kepler config to local storage\n return result;\n };\n }\n\n function updateMapConfigs() {\n const config = get().kepler.config;\n const keplerMaps = config.maps;\n for (const {id, config} of keplerMaps) {\n if (config) {\n get().kepler.addConfigToMap(id, config as unknown as KeplerMapSchema);\n }\n }\n }\n\n function updateMapReduxStates() {\n set((state) =>\n produce(state, (draft) => {\n // Delete redux state of maps that are not in the config\n for (const mapId of Object.keys(draft.kepler.map)) {\n if (!draft.kepler.config.maps.some((map) => map.id === mapId)) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n deleteEntry(mapId),\n );\n }\n }\n // Register redux state of maps that are not in the config\n for (const map of draft.kepler.config.maps) {\n if (!draft.kepler.map[map.id]) {\n draft.kepler.map = keplerReducer(\n draft.kepler.map,\n registerEntry({id: map.id}),\n );\n draft.kepler.forwardDispatch[map.id] = getForwardDispatch(map.id);\n }\n }\n }),\n );\n }\n\n function updateForwardDispatch() {\n const config = get().kepler.config;\n const currentMapId = config.currentMapId;\n const forwardDispatch = {\n [currentMapId]: getForwardDispatch(currentMapId),\n };\n if (config) {\n for (const {id} of config.maps) {\n forwardDispatch[id] = getForwardDispatch(id);\n }\n }\n set((state) =>\n produce(state, (draft) => {\n draft.kepler.forwardDispatch = forwardDispatch;\n }),\n );\n }\n\n function getForwardDispatch(mapId: string): Dispatch<KeplerAction> {\n /** Adapted from applyMiddleware in redux */\n let wrapDispatch: (\n action: KeplerAction,\n ...args: any\n ) => KeplerAction = () => {\n throw new Error(\n 'Dispatching while constructing your middleware is not allowed. ' +\n 'Other middleware would not be applied to this dispatch.',\n );\n };\n const wrapToMap = wrapTo(mapId);\n const middlewareAPI: MiddlewareAPI<any, any> = {\n getState: get,\n dispatch: (action: Action, ...args: any) => {\n // need to forward here as well\n return wrapDispatch(wrapToMap(action), ...args);\n },\n };\n\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n wrapDispatch = compose<Dispatch>(...chain)(storeDispatch);\n return wrapDispatch as Dispatch<KeplerAction>;\n }\n });\n}\n\ntype RoomStateWithDiscuss = RoomShellSliceState & KeplerSliceState;\n\nexport function useStoreWithKepler<T>(\n selector: (state: RoomStateWithDiscuss) => T,\n): T {\n return useBaseRoomShellStore<RoomStateWithDiscuss, T>((state) =>\n selector(state as RoomStateWithDiscuss),\n );\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import { StyledPanelHeaderProps } from '@kepler.gl/components';
2
+ import { KeplerTable } from '@kepler.gl/table';
3
+ import { Field, Filter, RGBColor } from '@kepler.gl/types';
4
+ import React from 'react';
5
+ interface StyledFilterHeaderProps extends StyledPanelHeaderProps {
6
+ $labelRCGColorValues: RGBColor[];
7
+ }
8
+ export declare const StyledFilterHeader: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("styled-components/dist/types").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof StyledPanelHeaderProps> & StyledPanelHeaderProps, StyledFilterHeaderProps>> & Omit<import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, StyledPanelHeaderProps>>, keyof React.Component<any, {}, any>>;
9
+ export type FilterPanelHeaderProps = {
10
+ className?: string;
11
+ datasets: KeplerTable[];
12
+ filter: Filter;
13
+ allAvailableFields?: Field[];
14
+ idx?: number;
15
+ children: React.ReactNode;
16
+ };
17
+ export declare function CustomFilterPanelHeaderFactory(): React.ComponentType<FilterPanelHeaderProps>;
18
+ export {};
19
+ //# sourceMappingURL=CustomFilterPanelHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFilterPanelHeader.d.ts","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAUzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,uBAAwB,SAAQ,sBAAsB;IAC9D,oBAAoB,EAAE,QAAQ,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,kBAAkB,mjBAgB9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAmD5F"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { removeFilter } from '@kepler.gl/actions';
3
+ import { StyledPanelHeader } from '@kepler.gl/components';
4
+ import { createLinearGradient } from '@kepler.gl/utils';
5
+ import { Button, cn, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
6
+ import { Trash } from 'lucide-react';
7
+ import styled from 'styled-components';
8
+ import { useStoreWithKepler } from '../KeplerSlice';
9
+ export const StyledFilterHeader = styled(StyledPanelHeader) `
10
+ cursor: pointer;
11
+ padding: 10px 12px;
12
+
13
+ .field-selector {
14
+ width: 100%;
15
+ flex: 2;
16
+ }
17
+
18
+ border-left: 3px solid;
19
+ ${(props) => props.$labelRCGColorValues && props.$labelRCGColorValues.length > 0
20
+ ? `border-image: ${createLinearGradient('bottom', props.$labelRCGColorValues)} 3;`
21
+ : 'border-color: transparent;'};
22
+ `;
23
+ export function CustomFilterPanelHeaderFactory() {
24
+ const FilterPanelHeader = ({ idx, children, className = '', datasets, filter, }) => {
25
+ const dispatchAction = useStoreWithKepler((state) => state.kepler.dispatchAction);
26
+ const mapId = useStoreWithKepler(
27
+ // TODO: pass the mapId via the props, currentMapId is not necessarily the map where filter is originated from
28
+ (state) => state.kepler.config.currentMapId);
29
+ const filterIdx = useStoreWithKepler((state) => state.kepler.map[mapId]?.visState.filters.findIndex((f) => f.id === filter.id));
30
+ return (_jsxs(StyledFilterHeader, { className: cn('filter-panel__header gap-2', className), "$labelRCGColorValues": Object.values(datasets).map((d) => d.color), children: [_jsx("div", { className: "flex flex-1 overflow-hidden", children: children }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "hover:bg-foreground/10 h-8 w-8", onClick: () => {
31
+ if (filterIdx === undefined) {
32
+ throw new Error('Filter index not found by id ${filter.id}');
33
+ }
34
+ return dispatchAction(mapId, removeFilter(filterIdx));
35
+ }, children: _jsx(Trash, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { children: "Delete Filter" })] })] }));
36
+ };
37
+ return FilterPanelHeader;
38
+ }
39
+ //# sourceMappingURL=CustomFilterPanelHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFilterPanelHeader.js","sourceRoot":"","sources":["../../src/components/CustomFilterPanelHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,MAAM,EACN,EAAE,EACF,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAMlD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CACtC,iBAAiB,CAClB,CAAyB;;;;;;;;;;IAUtB,CAAC,KAAK,EAAE,EAAE,CACV,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;IACjE,CAAC,CAAC,iBAAiB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK;IAClF,CAAC,CAAC,4BAA4B;CACnC,CAAC;AAWF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,GAAG,EACH,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,MAAM,GACiB,EAAE,EAAE;QAC3B,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;QACF,MAAM,KAAK,GAAG,kBAAkB;QAC9B,8GAA8G;QAC9G,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAC5C,CAAC;QACF,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAC1B,CACF,CAAC;QACF,OAAO,CACL,MAAC,kBAAkB,IACjB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,0BAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAC/C,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAC5B,aAED,cAAK,SAAS,EAAC,6BAA6B,YAAE,QAAQ,GAAO,EAC7D,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wCAC5B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;oCAC/D,CAAC;oCACD,OAAO,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;gCACxD,CAAC,YAED,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,GACM,EACjB,KAAC,cAAc,gCAA+B,IACtC,IACS,CACtB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import {removeFilter} from '@kepler.gl/actions';\nimport {StyledPanelHeader, StyledPanelHeaderProps} from '@kepler.gl/components';\nimport {KeplerTable} from '@kepler.gl/table';\nimport {Field, Filter, RGBColor} from '@kepler.gl/types';\nimport {createLinearGradient} from '@kepler.gl/utils';\nimport {\n Button,\n cn,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {Trash} from 'lucide-react';\nimport React from 'react';\nimport styled from 'styled-components';\nimport {useStoreWithKepler} from '../KeplerSlice';\n\ninterface StyledFilterHeaderProps extends StyledPanelHeaderProps {\n $labelRCGColorValues: RGBColor[];\n}\n\nexport const StyledFilterHeader = styled(\n StyledPanelHeader,\n)<StyledFilterHeaderProps>`\n cursor: pointer;\n padding: 10px 12px;\n\n .field-selector {\n width: 100%;\n flex: 2;\n }\n\n border-left: 3px solid;\n ${(props) =>\n props.$labelRCGColorValues && props.$labelRCGColorValues.length > 0\n ? `border-image: ${createLinearGradient('bottom', props.$labelRCGColorValues)} 3;`\n : 'border-color: transparent;'};\n`;\n\nexport type FilterPanelHeaderProps = {\n className?: string;\n datasets: KeplerTable[];\n filter: Filter;\n allAvailableFields?: Field[];\n idx?: number;\n children: React.ReactNode;\n};\n\nexport function CustomFilterPanelHeaderFactory(): React.ComponentType<FilterPanelHeaderProps> {\n const FilterPanelHeader: React.FC<FilterPanelHeaderProps> = ({\n idx,\n children,\n className = '',\n datasets,\n filter,\n }: FilterPanelHeaderProps) => {\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n const mapId = useStoreWithKepler(\n // TODO: pass the mapId via the props, currentMapId is not necessarily the map where filter is originated from\n (state) => state.kepler.config.currentMapId,\n );\n const filterIdx = useStoreWithKepler((state) =>\n state.kepler.map[mapId]?.visState.filters.findIndex(\n (f) => f.id === filter.id,\n ),\n );\n return (\n <StyledFilterHeader\n className={cn('filter-panel__header gap-2', className)}\n $labelRCGColorValues={Object.values(datasets).map(\n (d: KeplerTable) => d.color,\n )}\n >\n <div className=\"flex flex-1 overflow-hidden\">{children}</div>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"hover:bg-foreground/10 h-8 w-8\"\n onClick={() => {\n if (filterIdx === undefined) {\n throw new Error('Filter index not found by id ${filter.id}');\n }\n return dispatchAction(mapId, removeFilter(filterIdx));\n }}\n >\n <Trash className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Delete Filter</TooltipContent>\n </Tooltip>\n </StyledFilterHeader>\n );\n };\n\n return FilterPanelHeader;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"KeplerInjector.d.ts","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,cAAc,8CAAiD,CAAC"}
1
+ {"version":3,"file":"KeplerInjector.d.ts","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"AA+BA,eAAO,MAAM,cAAc,8CAAiD,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { appInjector, provideRecipesToInjector, AddDataButtonFactory, PanelTitleFactory, DndContextFactory, } from '@kepler.gl/components';
2
+ import { appInjector, provideRecipesToInjector, AddDataButtonFactory, PanelTitleFactory, DndContextFactory, FilterPanelHeaderFactory, } from '@kepler.gl/components';
3
3
  import { CustomDndContextFactory } from './CustomDndContext';
4
+ import { CustomFilterPanelHeaderFactory } from './CustomFilterPanelHeader';
4
5
  const CustomAddDataButtonFactory = () => {
5
6
  return () => null;
6
7
  };
@@ -12,6 +13,7 @@ const recipes = [
12
13
  [AddDataButtonFactory, CustomAddDataButtonFactory],
13
14
  [PanelTitleFactory, CustomPanelTitleFactory],
14
15
  [DndContextFactory, CustomDndContextFactory],
16
+ [FilterPanelHeaderFactory, CustomFilterPanelHeaderFactory],
15
17
  ];
16
18
  export const KeplerInjector = provideRecipesToInjector(recipes, appInjector);
17
19
  //# sourceMappingURL=KeplerInjector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeplerInjector.js","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAE3D,MAAM,0BAA0B,GAAG,GAAG,EAAE;IACtC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,MAAM,UAAU,GAAgC,CAAC,EAAC,QAAQ,EAAC,EAAE,EAAE,CAAC,CAC9D,cAAK,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAO,CAChE,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF,MAAM,OAAO,GAAG;IACd,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;IAClD,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAC5C,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;CACrB,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import {\n appInjector,\n provideRecipesToInjector,\n AddDataButtonFactory,\n PanelTitleFactory,\n DndContextFactory,\n Factory,\n} from '@kepler.gl/components';\nimport React, {PropsWithChildren} from 'react';\nimport {CustomDndContextFactory} from './CustomDndContext';\n\nconst CustomAddDataButtonFactory = () => {\n return () => null;\n};\n\nconst CustomPanelTitleFactory = () => {\n const PanelTitle: React.FC<PropsWithChildren> = ({children}) => (\n <div className=\"flex items-center justify-end\">{children}</div>\n );\n\n return PanelTitle;\n};\nconst recipes = [\n [AddDataButtonFactory, CustomAddDataButtonFactory],\n [PanelTitleFactory, CustomPanelTitleFactory],\n [DndContextFactory, CustomDndContextFactory],\n] as [Factory, Factory][];\n\nexport const KeplerInjector = provideRecipesToInjector(recipes, appInjector);\n"]}
1
+ {"version":3,"file":"KeplerInjector.js","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EAEjB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAC,8BAA8B,EAAC,MAAM,2BAA2B,CAAC;AAEzE,MAAM,0BAA0B,GAAG,GAAG,EAAE;IACtC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,MAAM,UAAU,GAAgC,CAAC,EAAC,QAAQ,EAAC,EAAE,EAAE,CAAC,CAC9D,cAAK,SAAS,EAAC,+BAA+B,YAAE,QAAQ,GAAO,CAChE,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF,MAAM,OAAO,GAAG;IACd,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;IAClD,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAC5C,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAC5C,CAAC,wBAAwB,EAAE,8BAA8B,CAAC;CACnC,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import {\n appInjector,\n provideRecipesToInjector,\n AddDataButtonFactory,\n PanelTitleFactory,\n DndContextFactory,\n Factory,\n FilterPanelHeaderFactory,\n} from '@kepler.gl/components';\nimport React, {PropsWithChildren} from 'react';\nimport {CustomDndContextFactory} from './CustomDndContext';\nimport {CustomFilterPanelHeaderFactory} from './CustomFilterPanelHeader';\n\nconst CustomAddDataButtonFactory = () => {\n return () => null;\n};\n\nconst CustomPanelTitleFactory = () => {\n const PanelTitle: React.FC<PropsWithChildren> = ({children}) => (\n <div className=\"flex items-center justify-end\">{children}</div>\n );\n\n return PanelTitle;\n};\nconst recipes = [\n [AddDataButtonFactory, CustomAddDataButtonFactory],\n [PanelTitleFactory, CustomPanelTitleFactory],\n [DndContextFactory, CustomDndContextFactory],\n [FilterPanelHeaderFactory, CustomFilterPanelHeaderFactory],\n] as [Factory, Factory][];\n\nexport const KeplerInjector = provideRecipesToInjector(recipes, appInjector);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/kepler",
3
- "version": "0.26.1-rc.0",
3
+ "version": "0.26.1-rc.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -33,12 +33,11 @@
33
33
  "@kepler.gl/types": "^3.2.3",
34
34
  "@kepler.gl/utils": "^3.2.3",
35
35
  "@paralleldrive/cuid2": "^2.2.2",
36
- "@sqlrooms/duckdb": "0.26.1-rc.0",
37
- "@sqlrooms/kepler-config": "0.26.1-rc.0",
38
- "@sqlrooms/room-shell": "0.26.1-rc.0",
39
- "@sqlrooms/s3-browser": "0.26.1-rc.0",
40
- "@sqlrooms/s3-utils": "0.26.1-rc.0",
41
- "@sqlrooms/ui": "0.26.1-rc.0",
36
+ "@sqlrooms/duckdb": "0.26.1-rc.2",
37
+ "@sqlrooms/kepler-config": "0.26.1-rc.2",
38
+ "@sqlrooms/room-shell": "0.26.1-rc.2",
39
+ "@sqlrooms/s3-browser": "0.26.1-rc.2",
40
+ "@sqlrooms/ui": "0.26.1-rc.2",
42
41
  "apache-arrow": "17.0.0",
43
42
  "immer": "^10.1.1",
44
43
  "lucide-react": "^0.555.0",
@@ -66,5 +65,5 @@
66
65
  "devDependencies": {
67
66
  "@types/redux-logger": "^3.0.13"
68
67
  },
69
- "gitHead": "89c252c460ccd29d108cfabf7b34c4a679f85609"
68
+ "gitHead": "9e94200cecb58853de1c29d9a1de7636516d4e27"
70
69
  }