@sqlrooms/kepler 0.29.0-rc.1 → 0.29.0-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.
- package/dist/KeplerSlice.d.ts +22 -6
- package/dist/KeplerSlice.d.ts.map +1 -1
- package/dist/KeplerSlice.js +273 -45
- package/dist/KeplerSlice.js.map +1 -1
- package/dist/components/CustomFilterManager.d.ts.map +1 -1
- package/dist/components/CustomFilterManager.js +4 -1
- package/dist/components/CustomFilterManager.js.map +1 -1
- package/dist/components/CustomInteractionManager.d.ts.map +1 -1
- package/dist/components/CustomInteractionManager.js +4 -1
- package/dist/components/CustomInteractionManager.js.map +1 -1
- package/dist/components/CustomLayerManager.d.ts.map +1 -1
- package/dist/components/CustomLayerManager.js +138 -17
- package/dist/components/CustomLayerManager.js.map +1 -1
- package/dist/components/CustomMapDrawPanel.d.ts +8 -0
- package/dist/components/CustomMapDrawPanel.d.ts.map +1 -0
- package/dist/components/CustomMapDrawPanel.js +28 -0
- package/dist/components/CustomMapDrawPanel.js.map +1 -0
- package/dist/components/KeplerAddDataDialog.d.ts +2 -3
- package/dist/components/KeplerAddDataDialog.d.ts.map +1 -1
- package/dist/components/KeplerAddDataDialog.js +18 -8
- package/dist/components/KeplerAddDataDialog.js.map +1 -1
- package/dist/components/KeplerImageExport.d.ts.map +1 -1
- package/dist/components/KeplerImageExport.js +26 -8
- package/dist/components/KeplerImageExport.js.map +1 -1
- package/dist/components/KeplerInjector.d.ts.map +1 -1
- package/dist/components/KeplerInjector.js +3 -1
- package/dist/components/KeplerInjector.js.map +1 -1
- package/dist/hooks/useKeplerStateActions.d.ts +7 -6
- package/dist/hooks/useKeplerStateActions.d.ts.map +1 -1
- package/dist/hooks/useKeplerStateActions.js +1 -1
- package/dist/hooks/useKeplerStateActions.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomLayerManager.js","sourceRoot":"","sources":["../../src/components/CustomLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo} from 'react';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n LayerListFactory,\n DatasetLayerGroupFactory,\n PanelTitleFactory,\n AddLayerButtonFactory,\n SidePanelSection,\n} from '@kepler.gl/components';\nimport {PANEL_VIEW_TOGGLES, SIDEBAR_PANELS} from '@kepler.gl/constants';\nimport {LayerClassesType} from '@kepler.gl/layers';\nimport {getApplicationConfig} from '@kepler.gl/utils';\n\nimport {getKeplerFactory} from './KeplerInjector';\nimport {\n KeplerActions,\n useKeplerStateActions,\n} from '../hooks/useKeplerStateActions';\nimport {RGBColor} from '@kepler.gl/types';\n\n// Get the kepler.gl components through the injector\nconst LayerList = getKeplerFactory(LayerListFactory);\nconst DatasetLayerGroup = getKeplerFactory(DatasetLayerGroupFactory);\nconst PanelTitle = getKeplerFactory(PanelTitleFactory);\nconst AddLayerButton = getKeplerFactory(AddLayerButtonFactory);\n\nconst layerPanelMetadata = SIDEBAR_PANELS.find((p) => p.id === 'layer');\n\n// Custom styled components for your layer manager\nconst CustomLayerManagerContainer = styled.div`\n .layer-manager {\n /* Add your custom styles here */\n }\n \n .layer-manager-title {\n /* Custom title styling */\n }\n\n .add-layer-button {\n background-color: ${(props) => props.theme.sidePanelBg || props.theme.panelBackground};\n color: #2563EB; \n border: 0px;\n height: 28px;\n font-weight: 500;\n font-size: 14px;\n }\n\n .layer__title__type {\n display: none !important;\n }\n\n .layer-panel__header {\n height: 36px;\n }\n\n .layer__title {\n min-width: 0;\n }\n\n .layer__title > div {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .layer__title__editor {\n width: 100%;\n min-width: 0;\n flex: 1;\n }\n}\n`;\n\ntype CustomLayerManagerProps = {\n mapId: string;\n showDeleteDataset?: boolean;\n};\n\n// Custom hook for side panel actions\nfunction useCustomSidePanelActions(keplerActions: KeplerActions) {\n const {openDeleteModal, toggleModal} = keplerActions.uiStateActions;\n const {updateTableColor} = keplerActions.visStateActions;\n\n const onRemoveDataset = useCallback(\n (dataId: string) => openDeleteModal(dataId),\n [openDeleteModal],\n );\n\n const onShowAddDataModal = useCallback(\n () => toggleModal('addData'),\n [toggleModal],\n );\n\n const onUpdateTableColor = useCallback(\n (dataId: string, newColor: RGBColor) => updateTableColor(dataId, newColor),\n [updateTableColor],\n );\n\n return {\n onRemoveDataset,\n onShowAddDataModal,\n onUpdateTableColor,\n };\n}\n\n// Main Custom Layer Manager Component\nexport const CustomLayerManager: React.FC<CustomLayerManagerProps> = ({\n mapId,\n showDeleteDataset = true,\n}) => {\n const {keplerActions, keplerState} = useKeplerStateActions({mapId});\n const intl = useIntl();\n\n const {onRemoveDataset, onUpdateTableColor} =\n useCustomSidePanelActions(keplerActions);\n\n const {addLayer} = keplerActions.visStateActions;\n\n const onAddLayer = useCallback(\n (dataset: string) => {\n addLayer(undefined, dataset);\n },\n [addLayer],\n );\n\n const isSortByDatasetMode =\n keplerState?.uiState.layerPanelListView === PANEL_VIEW_TOGGLES.byDataset;\n\n // Filter layer classes based on application config\n const enableRasterTileLayer = getApplicationConfig().enableRasterTileLayer;\n const enableWMSLayer = getApplicationConfig().enableWMSLayer;\n\n const filteredLayerClasses = useMemo(() => {\n let filteredClasses = keplerState?.visState.layerClasses || {};\n if (!enableRasterTileLayer && 'rasterTile' in filteredClasses) {\n const {rasterTile: _rasterTile, ...rest} = filteredClasses;\n filteredClasses = rest as LayerClassesType;\n }\n if (!enableWMSLayer && 'wms' in filteredClasses) {\n const {wms: _wms, ...rest} = filteredClasses;\n filteredClasses = rest as LayerClassesType;\n }\n return filteredClasses as LayerClassesType;\n }, [\n enableRasterTileLayer,\n enableWMSLayer,\n keplerState?.visState.layerClasses,\n ]);\n\n if (!keplerState || !keplerActions) {\n return null;\n }\n\n return (\n <CustomLayerManagerContainer>\n <div className=\"layer-manager\">\n <SidePanelSection>\n <PanelTitle\n className=\"layer-manager-title\"\n title={intl.formatMessage({\n id: layerPanelMetadata?.label || 'Layers',\n })}\n >\n <AddLayerButton\n datasets={keplerState.visState.datasets}\n onAdd={onAddLayer}\n />\n </PanelTitle>\n </SidePanelSection>\n\n <SidePanelSection>\n {isSortByDatasetMode ? (\n <DatasetLayerGroup\n datasets={keplerState.visState.datasets}\n showDatasetTable={keplerActions.visStateActions.showDatasetTable}\n layers={keplerState.visState.layers}\n updateTableColor={onUpdateTableColor}\n removeDataset={onRemoveDataset}\n layerOrder={keplerState.visState.layerOrder}\n layerClasses={filteredLayerClasses}\n uiStateActions={keplerActions.uiStateActions}\n visStateActions={keplerActions.visStateActions}\n mapStateActions={keplerActions.mapStateActions}\n showDeleteDataset={showDeleteDataset}\n />\n ) : (\n <LayerList\n layers={keplerState.visState.layers}\n datasets={keplerState.visState.datasets}\n layerOrder={keplerState.visState.layerOrder}\n uiStateActions={keplerActions.uiStateActions}\n visStateActions={keplerActions.visStateActions}\n mapStateActions={keplerActions.mapStateActions}\n layerClasses={filteredLayerClasses}\n />\n )}\n </SidePanelSection>\n </div>\n </CustomLayerManagerContainer>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"CustomLayerManager.js","sourceRoot":"","sources":["../../src/components/CustomLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {useCallback, useMemo, useRef, useState} from 'react';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n Accessor,\n Button,\n Icons,\n LayerListFactory,\n DatasetLayerGroupFactory,\n PanelTitleFactory,\n SidePanelSection,\n Typeahead,\n} from '@kepler.gl/components';\nimport {PANEL_VIEW_TOGGLES, SIDEBAR_PANELS} from '@kepler.gl/constants';\nimport {LayerClassesType} from '@kepler.gl/layers';\nimport {getApplicationConfig} from '@kepler.gl/utils';\n\nimport {getKeplerFactory} from './KeplerInjector';\nimport {\n KeplerActions,\n useKeplerStateActions,\n} from '../hooks/useKeplerStateActions';\nimport {useStoreWithKepler} from '../KeplerSlice';\nimport {RGBColor} from '@kepler.gl/types';\n\nconst LayerList = getKeplerFactory(LayerListFactory);\nconst DatasetLayerGroup = getKeplerFactory(DatasetLayerGroupFactory);\nconst PanelTitle = getKeplerFactory(PanelTitleFactory);\n\nconst layerPanelMetadata = SIDEBAR_PANELS.find((p) => p.id === 'layer');\n\nconst CustomLayerManagerContainer = styled.div`\n .layer-manager-title {\n }\n\n .add-layer-button {\n background-color: ${(props) => props.theme.sidePanelBg || props.theme.panelBackground};\n color: #2563EB;\n border: 0px;\n height: 28px;\n font-weight: 500;\n font-size: 14px;\n }\n\n .layer__title__type {\n display: none !important;\n }\n\n .layer-panel__header {\n height: 36px;\n }\n\n .layer__title {\n min-width: 0;\n }\n\n .layer__title > div {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .layer__title__editor {\n width: 100%;\n min-width: 0;\n flex: 1;\n }\n}\n`;\n\nconst DropdownWrapper = styled.div`\n position: relative;\n display: inline-block;\n overflow: visible;\n`;\n\nconst DropdownMenu = styled.div`\n display: flex;\n flex-direction: column;\n min-width: 240px;\n max-width: 240px;\n position: fixed;\n z-index: 100;\n\n .list-selector {\n border-top: 1px solid ${(props) => props.theme.secondaryInputBorderColor};\n width: 100%;\n max-height: unset;\n }\n .list__item > div {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n line-height: 18px;\n padding: 0;\n }\n`;\n\nconst ListItemWrapper = styled.div`\n display: flex;\n color: ${(props) => props.theme.textColor};\n font-size: 11px;\n letter-spacing: 0.2px;\n overflow: auto;\n .table-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n\nconst TYPEAHEAD_CLASS = 'typeahead';\nconst TYPEAHEAD_INPUT_CLASS = 'typeahead__input';\n\ntype TableOption = {label: string; value: string};\n\nconst TableListItem: React.FC<{value: TableOption}> = ({value}) => (\n <ListItemWrapper>\n <div className=\"table-name\" title={value.label}>\n {value.label}\n </div>\n </ListItemWrapper>\n);\n\n/**\n * Dropdown button that lists available datasets and DuckDB tables.\n * When a table is selected, it is synced to Kepler on demand and a new\n * layer is created for it.\n */\nconst AddTableLayerButton: React.FC<{\n onAdd: (tableName: string) => Promise<void>;\n keplerDatasetIds: string[];\n disabled?: boolean;\n}> = ({onAdd, keplerDatasetIds, disabled}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isAdding, setIsAdding] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [menuPos, setMenuPos] = useState<{top: number; right: number}>({\n top: 0,\n right: 0,\n });\n const intl = useIntl();\n\n const dbTables = useStoreWithKepler((state) => state.db.tables);\n\n const options: TableOption[] = useMemo(() => {\n const tableNames = new Set(\n dbTables\n .filter((t) => t.table.schema === 'main')\n .map((t) => t.table.table),\n );\n for (const id of keplerDatasetIds) {\n tableNames.add(id);\n }\n return Array.from(tableNames)\n .sort()\n .map((name) => ({label: name, value: name}));\n }, [dbTables, keplerDatasetIds]);\n\n const handleClick = useCallback(async () => {\n if (options.length === 1 && options[0]) {\n setIsAdding(true);\n try {\n await onAdd(options[0].value);\n } catch (e) {\n console.error('Failed to add layer:', e);\n } finally {\n setIsAdding(false);\n }\n return;\n }\n if (buttonRef.current) {\n const rect = buttonRef.current.getBoundingClientRect();\n setMenuPos({\n top: rect.bottom,\n right: window.innerWidth - rect.right,\n });\n }\n setIsOpen((prev) => !prev);\n }, [options, onAdd]);\n\n const handleSelect = useCallback(\n (option: TableOption | null) => {\n if (!option) return;\n setIsAdding(true);\n onAdd(option.value)\n .then(() => setIsOpen(false))\n .catch((e) => console.error('Failed to add layer:', e))\n .finally(() => setIsAdding(false));\n },\n [onAdd],\n );\n\n // Close dropdown on outside click\n React.useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n return (\n <DropdownWrapper ref={dropdownRef}>\n <Button\n ref={buttonRef}\n className=\"add-layer-button\"\n onClick={handleClick}\n disabled={!options.length || disabled || isAdding}\n >\n <Icons.Add height=\"12px\" />\n {intl.formatMessage({id: 'layerManager.addLayer'})}\n </Button>\n {isOpen && options.length > 1 && (\n <DropdownMenu style={{top: menuPos.top, right: menuPos.right}}>\n <Typeahead\n className={TYPEAHEAD_CLASS}\n customClasses={{\n results: 'list-selector',\n input: TYPEAHEAD_INPUT_CLASS,\n listItem: 'list__item',\n }}\n placeholder={\n intl ? intl.formatMessage({id: 'placeholder.search'}) : 'Search'\n }\n selectedItems={null}\n options={options}\n displayOption={Accessor.generateOptionToStringFor('label')}\n filterOption={'label'}\n searchable\n onOptionSelected={handleSelect}\n customListItemComponent={TableListItem}\n />\n </DropdownMenu>\n )}\n </DropdownWrapper>\n );\n};\n\ntype CustomLayerManagerProps = {\n mapId: string;\n showDeleteDataset?: boolean;\n};\n\nfunction useCustomSidePanelActions(keplerActions: KeplerActions) {\n const {openDeleteModal, toggleModal} = keplerActions.uiStateActions;\n const {updateTableColor} = keplerActions.visStateActions;\n\n const onRemoveDataset = useCallback(\n (dataId: string) => openDeleteModal(dataId),\n [openDeleteModal],\n );\n\n const onShowAddDataModal = useCallback(\n () => toggleModal('addData'),\n [toggleModal],\n );\n\n const onUpdateTableColor = useCallback(\n (dataId: string, newColor: RGBColor) => updateTableColor(dataId, newColor),\n [updateTableColor],\n );\n\n return {\n onRemoveDataset,\n onShowAddDataModal,\n onUpdateTableColor,\n };\n}\n\n// Main Custom Layer Manager Component\nexport const CustomLayerManager: React.FC<CustomLayerManagerProps> = ({\n mapId,\n showDeleteDataset = true,\n}) => {\n const {keplerActions, keplerState} = useKeplerStateActions({mapId});\n const intl = useIntl();\n const addTableToMap = useStoreWithKepler(\n (state) => state.kepler.addTableToMap,\n );\n\n const {onRemoveDataset, onUpdateTableColor} =\n useCustomSidePanelActions(keplerActions);\n\n const {addLayer} = keplerActions.visStateActions;\n\n const keplerDatasetIds = useMemo(\n () => Object.keys(keplerState?.visState.datasets ?? {}),\n [keplerState?.visState.datasets],\n );\n\n const onAddTableLayer = useCallback(\n async (tableName: string) => {\n const keplerDatasets = keplerState?.visState.datasets;\n if (!keplerDatasets?.[tableName]) {\n await addTableToMap(mapId, tableName, {\n autoCreateLayers: true,\n centerMap: true,\n });\n } else {\n addLayer(undefined, tableName);\n }\n },\n [addLayer, addTableToMap, keplerState?.visState.datasets, mapId],\n );\n\n const isSortByDatasetMode =\n keplerState?.uiState.layerPanelListView === PANEL_VIEW_TOGGLES.byDataset;\n\n const enableRasterTileLayer = getApplicationConfig().enableRasterTileLayer;\n const enableWMSLayer = getApplicationConfig().enableWMSLayer;\n\n const filteredLayerClasses = useMemo(() => {\n let filteredClasses = keplerState?.visState.layerClasses || {};\n if (!enableRasterTileLayer && 'rasterTile' in filteredClasses) {\n const {rasterTile: _rasterTile, ...rest} = filteredClasses;\n filteredClasses = rest as LayerClassesType;\n }\n if (!enableWMSLayer && 'wms' in filteredClasses) {\n const {wms: _wms, ...rest} = filteredClasses;\n filteredClasses = rest as LayerClassesType;\n }\n return filteredClasses as LayerClassesType;\n }, [\n enableRasterTileLayer,\n enableWMSLayer,\n keplerState?.visState.layerClasses,\n ]);\n\n if (!keplerState || !keplerActions) {\n return null;\n }\n\n return (\n <CustomLayerManagerContainer>\n <div className=\"layer-manager\">\n <SidePanelSection>\n <PanelTitle\n className=\"layer-manager-title\"\n title={intl.formatMessage({\n id: layerPanelMetadata?.label || 'Layers',\n })}\n >\n <AddTableLayerButton\n onAdd={onAddTableLayer}\n keplerDatasetIds={keplerDatasetIds}\n />\n </PanelTitle>\n </SidePanelSection>\n\n <SidePanelSection>\n {isSortByDatasetMode ? (\n <DatasetLayerGroup\n datasets={keplerState.visState.datasets}\n showDatasetTable={keplerActions.visStateActions.showDatasetTable}\n layers={keplerState.visState.layers}\n updateTableColor={onUpdateTableColor}\n removeDataset={onRemoveDataset}\n layerOrder={keplerState.visState.layerOrder}\n layerClasses={filteredLayerClasses}\n uiStateActions={keplerActions.uiStateActions}\n visStateActions={keplerActions.visStateActions}\n mapStateActions={keplerActions.mapStateActions}\n showDeleteDataset={showDeleteDataset}\n />\n ) : (\n <LayerList\n layers={keplerState.visState.layers}\n datasets={keplerState.visState.datasets}\n layerOrder={keplerState.visState.layerOrder}\n uiStateActions={keplerActions.uiStateActions}\n visStateActions={keplerActions.visStateActions}\n mapStateActions={keplerActions.mapStateActions}\n layerClasses={filteredLayerClasses}\n />\n )}\n </SidePanelSection>\n </div>\n </CustomLayerManagerContainer>\n );\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MapControlTooltipFactory, MapControlToolbarFactory, MapDrawPanelFactory } from '@kepler.gl/components';
|
|
3
|
+
import type { MapDrawPanelProps } from '@kepler.gl/components';
|
|
4
|
+
export declare function CustomMapDrawPanelFactory(...deps: Parameters<typeof MapDrawPanelFactory>): React.FC<MapDrawPanelProps>;
|
|
5
|
+
export declare namespace CustomMapDrawPanelFactory {
|
|
6
|
+
var deps: (typeof MapControlTooltipFactory | typeof MapControlToolbarFactory)[];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=CustomMapDrawPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomMapDrawPanel.d.ts","sourceRoot":"","sources":["../../src/components/CustomMapDrawPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAM7D,wBAAgB,yBAAyB,CACvC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,+BA6ChD;yBA9Ce,yBAAyB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright contributors to the kepler.gl project
|
|
4
|
+
import React, { useCallback } from 'react';
|
|
5
|
+
import { MapDrawPanelFactory, } from '@kepler.gl/components';
|
|
6
|
+
import { XIcon } from 'lucide-react';
|
|
7
|
+
import { Button } from '@sqlrooms/ui';
|
|
8
|
+
CustomMapDrawPanelFactory.deps = MapDrawPanelFactory.deps;
|
|
9
|
+
export function CustomMapDrawPanelFactory(...deps) {
|
|
10
|
+
// Get the original MapDrawPanel component
|
|
11
|
+
const OriginalMapDrawPanel = MapDrawPanelFactory(...deps);
|
|
12
|
+
const CustomMapDrawPanel = React.memo((props) => {
|
|
13
|
+
const { mapControls, onToggleMapControl } = props;
|
|
14
|
+
const isActive = mapControls?.mapDraw?.active;
|
|
15
|
+
const onToggleMenuPanel = useCallback(() => onToggleMapControl('mapDraw'), [onToggleMapControl]);
|
|
16
|
+
if (!mapControls?.mapDraw?.show) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return (_jsxs("div", { className: "map-draw-controls", style: { position: 'relative' }, children: [_jsx(OriginalMapDrawPanel, { ...props }), isActive && (_jsx(Button, { variant: "ghost", size: "xs", className: "border-border bg-background hover:bg-accent absolute z-50 h-6 w-6 rounded-full border p-0 shadow-sm", style: { left: '-35px', top: '-20px' }, "aria-label": "Close draw panel", onClick: (e) => {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
e.stopPropagation();
|
|
22
|
+
onToggleMenuPanel();
|
|
23
|
+
}, children: _jsx(XIcon, { className: "h-3 w-3" }) }))] }));
|
|
24
|
+
});
|
|
25
|
+
CustomMapDrawPanel.displayName = 'CustomMapDrawPanel';
|
|
26
|
+
return CustomMapDrawPanel;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=CustomMapDrawPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomMapDrawPanel.js","sourceRoot":"","sources":["../../src/components/CustomMapDrawPanel.tsx"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,kDAAkD;AAElD,OAAO,KAAK,EAAE,EAAC,WAAW,EAAC,MAAM,OAAO,CAAC;AACzC,OAAO,EAGL,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AACnC,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAEpC,yBAAyB,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC;AAE1D,MAAM,UAAU,yBAAyB,CACvC,GAAG,IAA4C;IAE/C,0CAA0C;IAC1C,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC;IAE1D,MAAM,kBAAkB,GAAgC,KAAK,CAAC,IAAI,CAChE,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,EAAC,WAAW,EAAE,kBAAkB,EAAC,GAAG,KAAK,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;QAE9C,MAAM,iBAAiB,GAAG,WAAW,CACnC,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,EACnC,CAAC,kBAAkB,CAAC,CACrB,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,eAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAC,aAC9D,KAAC,oBAAoB,OAAK,KAAK,GAAI,EAClC,QAAQ,IAAI,CACX,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,qGAAqG,EAC/G,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAC,gBACzB,kBAAkB,EAC7B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;wBACpB,iBAAiB,EAAE,CAAC;oBACtB,CAAC,YAED,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,CACV,IACG,CACP,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;IACtD,OAAO,kBAAkB,CAAC;AAC5B,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright contributors to the kepler.gl project\n\nimport React, {useCallback} from 'react';\nimport {\n MapControlTooltipFactory,\n MapControlToolbarFactory,\n MapDrawPanelFactory,\n} from '@kepler.gl/components';\nimport type {MapDrawPanelProps} from '@kepler.gl/components';\nimport {XIcon} from 'lucide-react';\nimport {Button} from '@sqlrooms/ui';\n\nCustomMapDrawPanelFactory.deps = MapDrawPanelFactory.deps;\n\nexport function CustomMapDrawPanelFactory(\n ...deps: Parameters<typeof MapDrawPanelFactory>\n) {\n // Get the original MapDrawPanel component\n const OriginalMapDrawPanel = MapDrawPanelFactory(...deps);\n\n const CustomMapDrawPanel: React.FC<MapDrawPanelProps> = React.memo(\n (props) => {\n const {mapControls, onToggleMapControl} = props;\n const isActive = mapControls?.mapDraw?.active;\n\n const onToggleMenuPanel = useCallback(\n () => onToggleMapControl('mapDraw'),\n [onToggleMapControl],\n );\n\n if (!mapControls?.mapDraw?.show) {\n return null;\n }\n\n return (\n <div className=\"map-draw-controls\" style={{position: 'relative'}}>\n <OriginalMapDrawPanel {...props} />\n {isActive && (\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"border-border bg-background hover:bg-accent absolute z-50 h-6 w-6 rounded-full border p-0 shadow-sm\"\n style={{left: '-35px', top: '-20px'}}\n aria-label=\"Close draw panel\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onToggleMenuPanel();\n }}\n >\n <XIcon className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n );\n },\n );\n\n CustomMapDrawPanel.displayName = 'CustomMapDrawPanel';\n return CustomMapDrawPanel;\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { UseDisclosureReturnValue } from '@sqlrooms/ui';
|
|
2
|
-
import type { KeplerS3BrowserProps } from './KeplerS3Browser';
|
|
3
2
|
export type LoadTileSet = (args: {
|
|
4
3
|
tileset: {
|
|
5
4
|
name: string;
|
|
@@ -19,6 +18,6 @@ export type KeplerAddDataDialogProps = {
|
|
|
19
18
|
loadFiles: (files: FileList | string[]) => Promise<void>;
|
|
20
19
|
method?: AddDataMethods;
|
|
21
20
|
acceptedFormats?: string[];
|
|
22
|
-
}
|
|
23
|
-
export declare const KeplerAddDataDialog: ({ addDataModal, loadTileSet, loadFiles,
|
|
21
|
+
};
|
|
22
|
+
export declare const KeplerAddDataDialog: ({ addDataModal, loadTileSet, loadFiles, method, acceptedFormats, }: KeplerAddDataDialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
23
|
//# sourceMappingURL=KeplerAddDataDialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerAddDataDialog.d.ts","sourceRoot":"","sources":["../../src/components/KeplerAddDataDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeplerAddDataDialog.d.ts","sourceRoot":"","sources":["../../src/components/KeplerAddDataDialog.tsx"],"names":[],"mappings":"AAGA,OAAO,EAUL,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAmBtB,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE;IAC/B,OAAO,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,KAAK,IAAI,CAAC;AA+BX,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,EAAE,OAAO;CACV;AAgBD,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;IACnE,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,oEAYjC,wBAAwB,4CAkG1B,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useMemo, useState } from 'react';
|
|
3
|
+
import { Icons, LoadTileSetFactory } from '@kepler.gl/components';
|
|
3
4
|
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Tabs, TabsContent, TabsList, TabsTrigger, } from '@sqlrooms/ui';
|
|
4
|
-
import { LoadTileSetFactory, Icons } from '@kepler.gl/components';
|
|
5
5
|
import { FileDropInput } from './FileDropInput';
|
|
6
6
|
import { getKeplerFactory } from './KeplerInjector';
|
|
7
7
|
import { KeplerProvider } from './KeplerProvider';
|
|
8
|
-
import {
|
|
8
|
+
// import type {KeplerS3BrowserProps} from './KeplerS3Browser';
|
|
9
9
|
import { useIntl } from 'react-intl';
|
|
10
10
|
const DEFAULT_ACCEPTED_FORMATS = [
|
|
11
11
|
'csv',
|
|
@@ -46,16 +46,26 @@ const ADD_DATA_METHODS = [
|
|
|
46
46
|
// value: AddDataMethods.S3,
|
|
47
47
|
// },
|
|
48
48
|
];
|
|
49
|
-
export const KeplerAddDataDialog = ({ addDataModal, loadTileSet, loadFiles,
|
|
49
|
+
export const KeplerAddDataDialog = ({ addDataModal, loadTileSet, loadFiles,
|
|
50
|
+
// listS3Files,
|
|
51
|
+
// loadS3Files,
|
|
52
|
+
// saveS3Credentials,
|
|
53
|
+
// loadS3Credentials,
|
|
54
|
+
// deleteS3Credentials,
|
|
55
|
+
// s3Browser,
|
|
56
|
+
method = AddDataMethods.Upload, acceptedFormats = DEFAULT_ACCEPTED_FORMATS, }) => {
|
|
50
57
|
const [currentMethod, selectCurrentMethod] = useState(method);
|
|
51
58
|
const onFileDrop = useCallback((files) => {
|
|
52
59
|
loadFiles(files);
|
|
53
60
|
addDataModal.onClose();
|
|
54
61
|
}, [loadFiles, addDataModal]);
|
|
55
|
-
const onLoadS3Files = useCallback(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
62
|
+
// const onLoadS3Files = useCallback(
|
|
63
|
+
// async (...args: Parameters<KeplerS3BrowserProps['loadS3Files']>) => {
|
|
64
|
+
// await loadS3Files(...args);
|
|
65
|
+
// addDataModal.onClose();
|
|
66
|
+
// },
|
|
67
|
+
// [loadS3Files, addDataModal],
|
|
68
|
+
// );
|
|
69
|
+
return (_jsx(KeplerProvider, { mapId: '', children: _jsx(Dialog, { open: addDataModal.isOpen, onOpenChange: (isOpen) => !isOpen && addDataModal.onClose(), children: _jsxs(DialogContent, { className: "h-[80vh] max-w-4xl min-w-md grid-rows-[auto_1fr]", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add Data" }), _jsx(DialogDescription, { children: "Add data to the project." })] }), _jsxs(Tabs, { defaultValue: currentMethod, className: "flex h-full w-full flex-col gap-4 overflow-auto", onValueChange: (value) => selectCurrentMethod(value), children: [_jsx(TabsList, { className: "flex h-10 items-center justify-start gap-1", children: ADD_DATA_METHODS.map(({ value, label }) => (_jsx(TabsTrigger, { value: value, className: "flex items-center gap-2", children: _jsx("span", { className: "text-muted-foreground", children: label }) }, value))) }), _jsx(TabsContent, { value: AddDataMethods.Upload, className: "h-full w-full data-[state=inactive]:hidden", children: _jsx("div", { className: "h-min-[200px] flex h-full w-full items-center justify-center", children: _jsx(FileDropInput, { onFileDrop: onFileDrop, children: acceptedFormats ? (_jsx("div", { className: "text-muted-foreground flex flex-wrap justify-center gap-2 opacity-80", children: acceptedFormats.map((ext) => (_jsx(Icons.FileType, { ext: ext, height: "50px", fontSize: "9px" }, ext))) })) : null }) }) }), _jsx(TabsContent, { value: AddDataMethods.TileSet, className: "h-full w-full overflow-auto data-[state=inactive]:hidden", children: _jsx(LoadTileSetContent, { loadTileSet: loadTileSet, onClose: addDataModal.onClose }) })] })] }) }) }));
|
|
60
70
|
};
|
|
61
71
|
//# sourceMappingURL=KeplerAddDataDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerAddDataDialog.js","sourceRoot":"","sources":["../../src/components/KeplerAddDataDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAErD,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"KeplerAddDataDialog.js","sourceRoot":"","sources":["../../src/components/KeplerAddDataDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback, useMemo, useState} from 'react';\n\nimport {Icons, LoadTileSetFactory} from '@kepler.gl/components';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n UseDisclosureReturnValue,\n} from '@sqlrooms/ui';\nimport {FileDropInput} from './FileDropInput';\nimport {getKeplerFactory} from './KeplerInjector';\nimport {KeplerProvider} from './KeplerProvider';\n// import type {KeplerS3BrowserProps} from './KeplerS3Browser';\nimport {useIntl} from 'react-intl';\n\nconst DEFAULT_ACCEPTED_FORMATS = [\n 'csv',\n 'tsv',\n 'parquet',\n 'json',\n 'arrow',\n 'shp',\n 'kml',\n];\n\nconst LoadTileSet = getKeplerFactory(LoadTileSetFactory);\n\nexport type LoadTileSet = (args: {\n tileset: {name: string; type: string; metadata: Record<string, any>};\n metadata?: Record<string, any>;\n}) => void;\n\nfunction LoadTileSetContent({\n loadTileSet,\n onClose,\n}: {\n loadTileSet: LoadTileSet;\n onClose?: () => void;\n}) {\n const intl = useIntl();\n const onTilesetAdded = useCallback(\n (\n tileset: {name: string; type: string; metadata: Record<string, any>},\n metadata?: Record<string, any>,\n ) => {\n loadTileSet({tileset, metadata});\n onClose?.();\n },\n [loadTileSet, onClose],\n );\n const meta = useMemo(() => ({}), []); // TODO: add metadata\n return (\n <LoadTileSet\n meta={meta}\n isAddingDatasets={false}\n intl={intl}\n onTilesetAdded={onTilesetAdded}\n />\n );\n}\n\nexport enum AddDataMethods {\n Upload = 'upload',\n TileSet = 'tileset',\n S3 = 's3',\n}\nconst ADD_DATA_METHODS = [\n {\n label: 'Local File',\n value: AddDataMethods.Upload,\n },\n {\n label: 'Tiles',\n value: AddDataMethods.TileSet,\n },\n // {\n // label: 'S3',\n // value: AddDataMethods.S3,\n // },\n];\n\nexport type KeplerAddDataDialogProps = {\n addDataModal: Pick<UseDisclosureReturnValue, 'isOpen' | 'onClose'>;\n loadTileSet: LoadTileSet;\n loadFiles: (files: FileList | string[]) => Promise<void>;\n method?: AddDataMethods;\n acceptedFormats?: string[];\n}; //& KeplerS3BrowserProps;\n\nexport const KeplerAddDataDialog = ({\n addDataModal,\n loadTileSet,\n loadFiles,\n // listS3Files,\n // loadS3Files,\n // saveS3Credentials,\n // loadS3Credentials,\n // deleteS3Credentials,\n // s3Browser,\n method = AddDataMethods.Upload,\n acceptedFormats = DEFAULT_ACCEPTED_FORMATS,\n}: KeplerAddDataDialogProps) => {\n const [currentMethod, selectCurrentMethod] = useState<AddDataMethods>(method);\n const onFileDrop = useCallback(\n (files: FileList) => {\n loadFiles(files);\n addDataModal.onClose();\n },\n [loadFiles, addDataModal],\n );\n // const onLoadS3Files = useCallback(\n // async (...args: Parameters<KeplerS3BrowserProps['loadS3Files']>) => {\n // await loadS3Files(...args);\n // addDataModal.onClose();\n // },\n // [loadS3Files, addDataModal],\n // );\n return (\n <KeplerProvider mapId={''}>\n <Dialog\n open={addDataModal.isOpen}\n onOpenChange={(isOpen: boolean) => !isOpen && addDataModal.onClose()}\n >\n <DialogContent className=\"h-[80vh] max-w-4xl min-w-md grid-rows-[auto_1fr]\">\n <DialogHeader>\n <DialogTitle>Add Data</DialogTitle>\n <DialogDescription>Add data to the project.</DialogDescription>\n </DialogHeader>\n <Tabs\n defaultValue={currentMethod}\n className=\"flex h-full w-full flex-col gap-4 overflow-auto\"\n onValueChange={(value) =>\n selectCurrentMethod(value as AddDataMethods)\n }\n >\n <TabsList className=\"flex h-10 items-center justify-start gap-1\">\n {ADD_DATA_METHODS.map(({value, label}) => (\n <TabsTrigger\n value={value}\n className=\"flex items-center gap-2\"\n key={value}\n >\n <span className=\"text-muted-foreground\">{label}</span>\n </TabsTrigger>\n ))}\n </TabsList>\n\n {/** File Upload */}\n <TabsContent\n value={AddDataMethods.Upload}\n className=\"h-full w-full data-[state=inactive]:hidden\"\n >\n <div className=\"h-min-[200px] flex h-full w-full items-center justify-center\">\n <FileDropInput onFileDrop={onFileDrop}>\n {acceptedFormats ? (\n <div className=\"text-muted-foreground flex flex-wrap justify-center gap-2 opacity-80\">\n {acceptedFormats.map((ext) => (\n <Icons.FileType\n key={ext}\n ext={ext}\n height=\"50px\"\n fontSize=\"9px\"\n />\n ))}\n </div>\n ) : null}\n </FileDropInput>\n </div>\n </TabsContent>\n\n {/** TileSet*/}\n <TabsContent\n value={AddDataMethods.TileSet}\n className=\"h-full w-full overflow-auto data-[state=inactive]:hidden\"\n >\n <LoadTileSetContent\n loadTileSet={loadTileSet}\n onClose={addDataModal.onClose}\n />\n </TabsContent>\n {/** S3 */}\n {/* <TabsContent\n value={AddDataMethods.S3}\n className=\"h-full w-full data-[state=inactive]:hidden\"\n >\n <KeplerS3Browser\n listS3Files={listS3Files}\n s3Browser={s3Browser}\n loadS3Files={onLoadS3Files}\n saveS3Credentials={saveS3Credentials}\n loadS3Credentials={loadS3Credentials}\n deleteS3Credentials={deleteS3Credentials}\n />\n </TabsContent> */}\n </Tabs>\n </DialogContent>\n </Dialog>\n </KeplerProvider>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerImageExport.d.ts","sourceRoot":"","sources":["../../src/components/KeplerImageExport.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"KeplerImageExport.d.ts","sourceRoot":"","sources":["../../src/components/KeplerImageExport.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAuBpD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAK7C,MAAM,WAAW,sBAAsB;IACrC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAChE,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,mBAAmB,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAaD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAoG9D,CAAC"}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect } from 'react';
|
|
3
3
|
import { Button, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Label, Switch, } from '@sqlrooms/ui';
|
|
4
|
-
import {
|
|
5
|
-
import { FormattedMessage } from '@kepler.gl/localization';
|
|
4
|
+
import { Resolution1024x768Option, Resolution1280x720Option, Resolution1280x960Option, Resolution1600x1200Option, Resolution1600x900Option, Resolution1920x1080Option, Resolution1920x1440Option, Resolution2560x1440Option, } from '@kepler.gl/constants';
|
|
6
5
|
import { ImagePreview } from '@kepler.gl/components';
|
|
7
6
|
import { dataURItoBlob, downloadFile } from '@kepler.gl/utils';
|
|
7
|
+
import { Loader2 } from 'lucide-react';
|
|
8
|
+
const CUSTOM_RESOLUTION_OPTIONS = [
|
|
9
|
+
Resolution1280x720Option,
|
|
10
|
+
Resolution1920x1080Option,
|
|
11
|
+
Resolution2560x1440Option,
|
|
12
|
+
Resolution1600x900Option,
|
|
13
|
+
Resolution1024x768Option,
|
|
14
|
+
Resolution1280x960Option,
|
|
15
|
+
Resolution1600x1200Option,
|
|
16
|
+
Resolution1920x1440Option,
|
|
17
|
+
];
|
|
8
18
|
export const KeplerImageExport = ({ setExportImageSetting, cleanupExportImage, exportImageSettings, fileName, onExportStart, }) => {
|
|
9
|
-
const { legend,
|
|
19
|
+
const { legend, resolution, processing, imageDataUri } = exportImageSettings;
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
// hardcode default resolution only when incoming resolution is not a supported custom option
|
|
22
|
+
const isSupportedResolution = CUSTOM_RESOLUTION_OPTIONS.some((option) => option.id === resolution);
|
|
23
|
+
if (!isSupportedResolution) {
|
|
24
|
+
setExportImageSetting({
|
|
25
|
+
resolution: Resolution1280x720Option.id,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}, [resolution, setExportImageSetting]);
|
|
10
29
|
useEffect(() => {
|
|
11
30
|
setExportImageSetting({
|
|
12
31
|
exporting: true,
|
|
@@ -20,12 +39,11 @@ export const KeplerImageExport = ({ setExportImageSetting, cleanupExportImage, e
|
|
|
20
39
|
downloadFile(file, `${fileName || 'Untitled'}.png`);
|
|
21
40
|
}
|
|
22
41
|
}, [processing, imageDataUri, fileName, onExportStart]);
|
|
23
|
-
|
|
42
|
+
const isPreviewReady = !processing && Boolean(imageDataUri);
|
|
43
|
+
return (_jsxs("div", { className: "flex flex-col gap-6 px-[5px] pt-1 pb-5", children: [_jsx(ImagePreview, { exportImage: exportImageSettings }), _jsxs("div", { className: "grid grid-cols-[100px_auto] items-center gap-4", children: [_jsx(Label, { children: "Resolution" }), _jsxs(Select, { value: resolution, onValueChange: (value) => setExportImageSetting({
|
|
24
44
|
resolution: value,
|
|
25
|
-
}), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: "Select resolution" }) }), _jsx(SelectContent, { children:
|
|
26
|
-
ratio: value,
|
|
27
|
-
}), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: "Select ratio" }) }), _jsx(SelectContent, { children: EXPORT_IMG_RATIO_OPTIONS.filter((op) => !op.hidden).map((option) => (_jsx(SelectItem, { value: option.id, children: _jsx(FormattedMessage, { id: option.label }) }, option.id))) })] }), _jsx(Label, { className: "font-normal", children: "Show legend" }), _jsx(Switch, { checked: legend, onCheckedChange: (checked) => setExportImageSetting({
|
|
45
|
+
}), disabled: processing, children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: "Select resolution" }) }), _jsx(SelectContent, { children: CUSTOM_RESOLUTION_OPTIONS.map((option) => (_jsx(SelectItem, { value: option.id, disabled: !option.available, children: option.label }, option.id))) })] }), _jsx(Label, { className: "font-normal", children: "Show legend" }), _jsx(Switch, { checked: legend, onCheckedChange: (checked) => setExportImageSetting({
|
|
28
46
|
legend: checked === true,
|
|
29
|
-
}) })] }), _jsx("div", { className: "flex flex-col gap-2", children: _jsx(Button, { variant: "default", className: "w-full", onClick: handleExportImage, children: "Export Image
|
|
47
|
+
}), disabled: processing })] }), _jsx("div", { className: "flex flex-col gap-2", children: _jsx(Button, { variant: "default", className: "w-full", onClick: handleExportImage, disabled: processing || !isPreviewReady, children: processing ? (_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin" }), "Processing..."] })) : ('Export Image') }) })] }));
|
|
30
48
|
};
|
|
31
49
|
//# sourceMappingURL=KeplerImageExport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerImageExport.js","sourceRoot":"","sources":["../../src/components/KeplerImageExport.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,MAAM,EACN,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,KAAK,EACL,MAAM,GACP,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"KeplerImageExport.js","sourceRoot":"","sources":["../../src/components/KeplerImageExport.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,MAAM,EACN,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,KAAK,EACL,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAYrC,MAAM,yBAAyB,GAAG;IAChC,wBAAwB;IACxB,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,yBAAyB;IACzB,yBAAyB;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,aAAa,GACd,EAAE,EAAE;IACH,MAAM,EAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAC,GAAG,mBAAmB,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,6FAA6F;QAC7F,MAAM,qBAAqB,GAAG,yBAAyB,CAAC,IAAI,CAC1D,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,UAAU,CACrC,CAAC;QACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,qBAAqB,CAAC;gBACpB,UAAU,EAAE,wBAAwB,CAAC,EAAE;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC;YACpB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,kBAAkB,CAAC;IAC5B,CAAC,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEhD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC;YAChC,aAAa,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;YACzC,YAAY,CAAC,IAAI,EAAE,GAAG,QAAQ,IAAI,UAAU,MAAM,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE5D,OAAO,CACL,eAAK,SAAS,EAAC,wCAAwC,aACrD,KAAC,YAAY,IAAC,WAAW,EAAE,mBAAmB,GAAI,EAElD,eAAK,SAAS,EAAC,gDAAgD,aAC7D,KAAC,KAAK,6BAAmB,EACzB,MAAC,MAAM,IACL,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,CAAC,KAA6B,EAAE,EAAE,CAC/C,qBAAqB,CAAC;4BACpB,UAAU,EAAE,KAAK;yBAClB,CAAC,EAEJ,QAAQ,EAAE,UAAU,aAEpB,KAAC,aAAa,cACZ,KAAC,WAAW,IAAC,WAAW,EAAC,mBAAmB,GAAG,GACjC,EAChB,KAAC,aAAa,cACX,yBAAyB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACzC,KAAC,UAAU,IAET,KAAK,EAAE,MAAM,CAAC,EAA4B,EAC1C,QAAQ,EAAE,CAAC,MAAM,CAAC,SAAS,YAE1B,MAAM,CAAC,KAAK,IAJR,MAAM,CAAC,EAAE,CAKH,CACd,CAAC,GACY,IACT,EAET,KAAC,KAAK,IAAC,SAAS,EAAC,aAAa,4BAAoB,EAClD,KAAC,MAAM,IACL,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,qBAAqB,CAAC;4BACpB,MAAM,EAAE,OAAO,KAAK,IAAI;yBACzB,CAAC,EAEJ,QAAQ,EAAE,UAAU,GACpB,IACE,EAEN,cAAK,SAAS,EAAC,qBAAqB,YAClC,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,UAAU,IAAI,CAAC,cAAc,YAEtC,UAAU,CAAC,CAAC,CAAC,CACZ,gBAAM,SAAS,EAAC,yBAAyB,aACvC,KAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,GAAG,qBAEvC,CACR,CAAC,CAAC,CAAC,CACF,cAAc,CACf,GACM,GACL,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React, {useCallback, useEffect} from 'react';\nimport {\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Label,\n Switch,\n} from '@sqlrooms/ui';\nimport {\n Resolution1024x768Option,\n Resolution1280x720Option,\n Resolution1280x960Option,\n Resolution1600x1200Option,\n Resolution1600x900Option,\n Resolution1920x1080Option,\n Resolution1920x1440Option,\n Resolution2560x1440Option,\n} from '@kepler.gl/constants';\nimport {ImagePreview} from '@kepler.gl/components';\nimport {dataURItoBlob, downloadFile} from '@kepler.gl/utils';\nimport {ExportImage} from '@kepler.gl/types';\nimport {Loader2} from 'lucide-react';\n\ntype ExportResolutionOption = ExportImage['resolution'];\n\nexport interface KeplerImageExportProps {\n setExportImageSetting: (settings: Partial<ExportImage>) => void;\n cleanupExportImage: () => void;\n exportImageSettings: ExportImage;\n fileName?: string;\n onExportStart?: () => void;\n}\n\nconst CUSTOM_RESOLUTION_OPTIONS = [\n Resolution1280x720Option,\n Resolution1920x1080Option,\n Resolution2560x1440Option,\n Resolution1600x900Option,\n Resolution1024x768Option,\n Resolution1280x960Option,\n Resolution1600x1200Option,\n Resolution1920x1440Option,\n];\n\nexport const KeplerImageExport: React.FC<KeplerImageExportProps> = ({\n setExportImageSetting,\n cleanupExportImage,\n exportImageSettings,\n fileName,\n onExportStart,\n}) => {\n const {legend, resolution, processing, imageDataUri} = exportImageSettings;\n\n useEffect(() => {\n // hardcode default resolution only when incoming resolution is not a supported custom option\n const isSupportedResolution = CUSTOM_RESOLUTION_OPTIONS.some(\n (option) => option.id === resolution,\n );\n if (!isSupportedResolution) {\n setExportImageSetting({\n resolution: Resolution1280x720Option.id,\n });\n }\n }, [resolution, setExportImageSetting]);\n\n useEffect(() => {\n setExportImageSetting({\n exporting: true,\n });\n return cleanupExportImage;\n }, [setExportImageSetting, cleanupExportImage]);\n\n const handleExportImage = useCallback(() => {\n if (!processing && imageDataUri) {\n onExportStart?.();\n const file = dataURItoBlob(imageDataUri);\n downloadFile(file, `${fileName || 'Untitled'}.png`);\n }\n }, [processing, imageDataUri, fileName, onExportStart]);\n\n const isPreviewReady = !processing && Boolean(imageDataUri);\n\n return (\n <div className=\"flex flex-col gap-6 px-[5px] pt-1 pb-5\">\n <ImagePreview exportImage={exportImageSettings} />\n\n <div className=\"grid grid-cols-[100px_auto] items-center gap-4\">\n <Label>Resolution</Label>\n <Select\n value={resolution}\n onValueChange={(value: ExportResolutionOption) =>\n setExportImageSetting({\n resolution: value,\n })\n }\n disabled={processing}\n >\n <SelectTrigger>\n <SelectValue placeholder=\"Select resolution\" />\n </SelectTrigger>\n <SelectContent>\n {CUSTOM_RESOLUTION_OPTIONS.map((option) => (\n <SelectItem\n key={option.id}\n value={option.id as ExportResolutionOption}\n disabled={!option.available}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Label className=\"font-normal\">Show legend</Label>\n <Switch\n checked={legend}\n onCheckedChange={(checked) =>\n setExportImageSetting({\n legend: checked === true,\n })\n }\n disabled={processing}\n />\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <Button\n variant=\"default\"\n className=\"w-full\"\n onClick={handleExportImage}\n disabled={processing || !isPreviewReady}\n >\n {processing ? (\n <span className=\"flex items-center gap-2\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Processing...\n </span>\n ) : (\n 'Export Image'\n )}\n </Button>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerInjector.d.ts","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"KeplerInjector.d.ts","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAA0B,MAAM,OAAO,CAAC;AAQ/C,eAAO,MAAM,0BAA0B,kBAEtC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;EAMnC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAwG3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,GAAE;IAAC,IAAI,CAAC,EAAE,uBAAuB,CAAA;CAAM,QAM/C;AAED,wBAAgB,0BAA0B,SAGzC;AAED,wBAAgB,iBAAiB,iBAEhC;AAeD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,aAAa,EAC7D,OAAO,EAAE,QAAQ,GAChB,UAAU,CAAC,QAAQ,CAAC,CA+BtB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;QACrB,QAAQ,SAAS,aAAa,WAAW,QAAQ;CAGtD,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { AddDataButtonFactory, ContainerFactory, injector as createInjector, DndContextFactory, FilterPanelHeaderFactory, flattenDeps, MapControlTooltipFactory, MapLegendFactory, MapLegendPanelFactory, PanelTitleFactory, typeCheckRecipe, } from '@kepler.gl/components';
|
|
2
|
+
import { AddDataButtonFactory, ContainerFactory, injector as createInjector, DndContextFactory, FilterPanelHeaderFactory, flattenDeps, MapControlTooltipFactory, MapDrawPanelFactory, MapLegendFactory, MapLegendPanelFactory, PanelTitleFactory, typeCheckRecipe, } from '@kepler.gl/components';
|
|
3
3
|
import { CustomDndContextFactory } from './CustomDndContext';
|
|
4
4
|
import { CustomFilterPanelHeaderFactory } from './CustomFilterPanelHeader';
|
|
5
5
|
import { CustomMapControlTooltipFactory } from './CustomMapControlTooltipFactory';
|
|
6
|
+
import { CustomMapDrawPanelFactory } from './CustomMapDrawPanel';
|
|
6
7
|
import { CustomMapLegendFactory } from './CustomMapLegend';
|
|
7
8
|
import { CustomMapLegendPanelFactory } from './CustomMapLegendPanel';
|
|
8
9
|
export const CustomAddDataButtonFactory = () => {
|
|
@@ -20,6 +21,7 @@ const defaultRecipes = [
|
|
|
20
21
|
[MapLegendPanelFactory, CustomMapLegendPanelFactory],
|
|
21
22
|
[MapLegendFactory, CustomMapLegendFactory],
|
|
22
23
|
[MapControlTooltipFactory, CustomMapControlTooltipFactory],
|
|
24
|
+
[MapDrawPanelFactory, CustomMapDrawPanelFactory],
|
|
23
25
|
];
|
|
24
26
|
let customRecipes = [];
|
|
25
27
|
let injector = createKeplerInjector();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeplerInjector.js","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AddDataButtonFactory,\n ContainerFactory,\n injector as createInjector,\n DndContextFactory,\n Factory,\n FilterPanelHeaderFactory,\n flattenDeps,\n MapControlTooltipFactory,\n MapLegendFactory,\n MapLegendPanelFactory,\n PanelTitleFactory,\n typeCheckRecipe,\n type InjectorType,\n} from '@kepler.gl/components';\nimport React, {PropsWithChildren} from 'react';\nimport {CustomDndContextFactory} from './CustomDndContext';\nimport {CustomFilterPanelHeaderFactory} from './CustomFilterPanelHeader';\nimport {CustomMapControlTooltipFactory} from './CustomMapControlTooltipFactory';\nimport {CustomMapLegendFactory} from './CustomMapLegend';\nimport {CustomMapLegendPanelFactory} from './CustomMapLegendPanel';\n\nexport const CustomAddDataButtonFactory = () => {\n return () => null;\n};\n\nexport const CustomPanelTitleFactory = () => {\n const PanelTitle: React.FC<PropsWithChildren> = ({children}) => (\n <div className=\"flex items-center justify-end\">{children}</div>\n );\n\n return PanelTitle;\n};\n\nexport type KeplerFactory<TReturn = unknown> = (..._args: any[]) => TReturn;\nexport type KeplerFactoryRecipe = [KeplerFactory, KeplerFactory];\nexport type KeplerFactoryRecipeMode = 'append' | 'replace';\n\nconst defaultRecipes: KeplerFactoryRecipe[] = [\n [AddDataButtonFactory, CustomAddDataButtonFactory],\n [PanelTitleFactory, CustomPanelTitleFactory],\n [DndContextFactory, CustomDndContextFactory],\n [FilterPanelHeaderFactory, CustomFilterPanelHeaderFactory],\n [MapLegendPanelFactory, CustomMapLegendPanelFactory],\n [MapLegendFactory, CustomMapLegendFactory],\n [MapControlTooltipFactory, CustomMapControlTooltipFactory],\n];\n\nlet customRecipes: KeplerFactoryRecipe[] = [];\nlet injector = createKeplerInjector();\n\nfunction createBaseInjector() {\n const allDependencies = flattenDeps(\n [],\n ContainerFactory as unknown as Factory,\n );\n return allDependencies.reduce(\n (current, factory) => current.provide(factory, factory),\n createInjector(),\n );\n}\n\n/**\n * Applies factory replacement recipes on top of a fresh Kepler injector while\n * preserving explicit replacement targets.\n *\n * Kepler's default `provideRecipesToInjector` pre-provides all replacement\n * dependencies as identity mappings (`dep -> dep`) before applying each recipe.\n * That can unintentionally override factories that were already replaced by\n * earlier recipes, and emits noisy \"already injected\" warnings.\n *\n * This helper keeps the same high-level flow (process recipes in order and then\n * eagerly resolve the configured factories), but skips identity-providing any\n * dependency that is itself an explicit replacement target in the current\n * recipe set. As a result:\n * - earlier explicit replacements are not overwritten by later dependency setup\n * - replacement ordering remains deterministic\n * - configured factories are still warmed via `get(factoryToReplace)`\n */\nfunction provideRecipesToInjectorSafely(\n recipes: KeplerFactoryRecipe[],\n baseInjector: InjectorType,\n) {\n const replacementTargets = new Set(\n recipes\n .filter((recipe) =>\n typeCheckRecipe(recipe as unknown as [Factory, Factory]),\n )\n .map((recipe) => recipe[0]),\n );\n\n const provided = new Map();\n\n const injectorWithRecipes = recipes.reduce((currentInjector, recipe) => {\n if (!typeCheckRecipe(recipe as unknown as [Factory, Factory])) {\n return currentInjector;\n }\n\n const [factoryToReplace, replacementFactory] = recipe;\n const customDependencies = flattenDeps(\n [],\n replacementFactory as unknown as Factory,\n );\n\n const injectorWithDependencies = customDependencies.reduce(\n (dependencyInjector, dependencyFactory) => {\n // If a dependency has an explicit replacement recipe, skip self-injecting it.\n // This avoids overriding previous replacements and warning noise.\n if (\n replacementTargets.has(dependencyFactory as unknown as KeplerFactory)\n ) {\n return dependencyInjector;\n }\n return dependencyInjector.provide(dependencyFactory, dependencyFactory);\n },\n currentInjector,\n );\n\n provided.set(factoryToReplace, replacementFactory);\n return injectorWithDependencies.provide(\n factoryToReplace,\n replacementFactory,\n );\n }, baseInjector);\n\n provided.forEach((_, factoryToReplace) => {\n injectorWithRecipes.get(factoryToReplace);\n });\n\n return injectorWithRecipes;\n}\n\nfunction createKeplerInjector(recipes: KeplerFactoryRecipe[] = []) {\n return provideRecipesToInjectorSafely(\n [...defaultRecipes, ...recipes],\n createBaseInjector(),\n );\n}\n\nexport function configureKeplerInjector(\n recipes: KeplerFactoryRecipe[],\n options: {mode?: KeplerFactoryRecipeMode} = {},\n) {\n const mode = options.mode ?? 'append';\n customRecipes =\n mode === 'replace' ? [...recipes] : [...customRecipes, ...recipes];\n injector = createKeplerInjector(customRecipes);\n}\n\nexport function resetKeplerInjectorRecipes() {\n customRecipes = [];\n injector = createKeplerInjector();\n}\n\nexport function getKeplerInjector() {\n return injector;\n}\n\n// Cache resolved components per injector so we keep a stable component\n// reference across re-renders. Invalidated when injector is replaced (configure/reset).\nconst injectorToFactoryCache = new WeakMap<\n object,\n Map<KeplerFactory, React.ComponentType<Record<string, unknown>>>\n>();\n\n// Cache wrapper components per factory so callers always get a stable component type.\nconst factoryToWrapperCache = new Map<\n KeplerFactory,\n React.ComponentType<Record<string, unknown>>\n>();\n\nexport function getKeplerFactory<TFactory extends KeplerFactory>(\n factory: TFactory,\n): ReturnType<TFactory> {\n let Wrapped = factoryToWrapperCache.get(factory);\n if (Wrapped === undefined) {\n const WrappedComponent = function KeplerFactoryWrapper(\n props: Record<string, unknown>,\n ) {\n // Resolve at top level of render (not inside useMemo) so injector.get()\n // running the factory chain does not run hooks inside a hook.\n const injectorInstance = getKeplerInjector();\n let byFactory = injectorToFactoryCache.get(injectorInstance as object);\n if (byFactory === undefined) {\n byFactory = new Map();\n injectorToFactoryCache.set(injectorInstance as object, byFactory);\n }\n let Component = byFactory.get(factory);\n if (Component === undefined) {\n Component = injectorInstance.get(\n factory as unknown as Factory,\n ) as React.ComponentType<Record<string, unknown>>;\n byFactory.set(factory, Component);\n }\n // eslint-disable-next-line react-hooks/static-components -- Kepler factory components resolved at render by design\n return <Component {...props} />;\n };\n\n const factoryName = factory.name || 'Anonymous';\n WrappedComponent.displayName = `KeplerFactory(${factoryName})`;\n Wrapped = WrappedComponent;\n factoryToWrapperCache.set(factory, WrappedComponent);\n }\n return Wrapped as unknown as ReturnType<TFactory>;\n}\n\n/**\n * Stable access to Kepler factories. Prefer calling `get()` at module scope\n * (or in a constant initializer) so the returned component type is reused.\n */\nexport const KeplerInjector = {\n get<TFactory extends KeplerFactory>(factory: TFactory) {\n return getKeplerFactory(factory);\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"KeplerInjector.js","sourceRoot":"","sources":["../../src/components/KeplerInjector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AddDataButtonFactory,\n ContainerFactory,\n injector as createInjector,\n DndContextFactory,\n Factory,\n FilterPanelHeaderFactory,\n flattenDeps,\n MapControlTooltipFactory,\n MapDrawPanelFactory,\n MapLegendFactory,\n MapLegendPanelFactory,\n PanelTitleFactory,\n typeCheckRecipe,\n type InjectorType,\n} from '@kepler.gl/components';\nimport React, {PropsWithChildren} from 'react';\nimport {CustomDndContextFactory} from './CustomDndContext';\nimport {CustomFilterPanelHeaderFactory} from './CustomFilterPanelHeader';\nimport {CustomMapControlTooltipFactory} from './CustomMapControlTooltipFactory';\nimport {CustomMapDrawPanelFactory} from './CustomMapDrawPanel';\nimport {CustomMapLegendFactory} from './CustomMapLegend';\nimport {CustomMapLegendPanelFactory} from './CustomMapLegendPanel';\n\nexport const CustomAddDataButtonFactory = () => {\n return () => null;\n};\n\nexport const CustomPanelTitleFactory = () => {\n const PanelTitle: React.FC<PropsWithChildren> = ({children}) => (\n <div className=\"flex items-center justify-end\">{children}</div>\n );\n\n return PanelTitle;\n};\n\nexport type KeplerFactory<TReturn = unknown> = (..._args: any[]) => TReturn;\nexport type KeplerFactoryRecipe = [KeplerFactory, KeplerFactory];\nexport type KeplerFactoryRecipeMode = 'append' | 'replace';\n\nconst defaultRecipes: KeplerFactoryRecipe[] = [\n [AddDataButtonFactory, CustomAddDataButtonFactory],\n [PanelTitleFactory, CustomPanelTitleFactory],\n [DndContextFactory, CustomDndContextFactory],\n [FilterPanelHeaderFactory, CustomFilterPanelHeaderFactory],\n [MapLegendPanelFactory, CustomMapLegendPanelFactory],\n [MapLegendFactory, CustomMapLegendFactory],\n [MapControlTooltipFactory, CustomMapControlTooltipFactory],\n [MapDrawPanelFactory, CustomMapDrawPanelFactory],\n];\n\nlet customRecipes: KeplerFactoryRecipe[] = [];\nlet injector = createKeplerInjector();\n\nfunction createBaseInjector() {\n const allDependencies = flattenDeps(\n [],\n ContainerFactory as unknown as Factory,\n );\n return allDependencies.reduce(\n (current, factory) => current.provide(factory, factory),\n createInjector(),\n );\n}\n\n/**\n * Applies factory replacement recipes on top of a fresh Kepler injector while\n * preserving explicit replacement targets.\n *\n * Kepler's default `provideRecipesToInjector` pre-provides all replacement\n * dependencies as identity mappings (`dep -> dep`) before applying each recipe.\n * That can unintentionally override factories that were already replaced by\n * earlier recipes, and emits noisy \"already injected\" warnings.\n *\n * This helper keeps the same high-level flow (process recipes in order and then\n * eagerly resolve the configured factories), but skips identity-providing any\n * dependency that is itself an explicit replacement target in the current\n * recipe set. As a result:\n * - earlier explicit replacements are not overwritten by later dependency setup\n * - replacement ordering remains deterministic\n * - configured factories are still warmed via `get(factoryToReplace)`\n */\nfunction provideRecipesToInjectorSafely(\n recipes: KeplerFactoryRecipe[],\n baseInjector: InjectorType,\n) {\n const replacementTargets = new Set(\n recipes\n .filter((recipe) =>\n typeCheckRecipe(recipe as unknown as [Factory, Factory]),\n )\n .map((recipe) => recipe[0]),\n );\n\n const provided = new Map();\n\n const injectorWithRecipes = recipes.reduce((currentInjector, recipe) => {\n if (!typeCheckRecipe(recipe as unknown as [Factory, Factory])) {\n return currentInjector;\n }\n\n const [factoryToReplace, replacementFactory] = recipe;\n const customDependencies = flattenDeps(\n [],\n replacementFactory as unknown as Factory,\n );\n\n const injectorWithDependencies = customDependencies.reduce(\n (dependencyInjector, dependencyFactory) => {\n // If a dependency has an explicit replacement recipe, skip self-injecting it.\n // This avoids overriding previous replacements and warning noise.\n if (\n replacementTargets.has(dependencyFactory as unknown as KeplerFactory)\n ) {\n return dependencyInjector;\n }\n return dependencyInjector.provide(dependencyFactory, dependencyFactory);\n },\n currentInjector,\n );\n\n provided.set(factoryToReplace, replacementFactory);\n return injectorWithDependencies.provide(\n factoryToReplace,\n replacementFactory,\n );\n }, baseInjector);\n\n provided.forEach((_, factoryToReplace) => {\n injectorWithRecipes.get(factoryToReplace);\n });\n\n return injectorWithRecipes;\n}\n\nfunction createKeplerInjector(recipes: KeplerFactoryRecipe[] = []) {\n return provideRecipesToInjectorSafely(\n [...defaultRecipes, ...recipes],\n createBaseInjector(),\n );\n}\n\nexport function configureKeplerInjector(\n recipes: KeplerFactoryRecipe[],\n options: {mode?: KeplerFactoryRecipeMode} = {},\n) {\n const mode = options.mode ?? 'append';\n customRecipes =\n mode === 'replace' ? [...recipes] : [...customRecipes, ...recipes];\n injector = createKeplerInjector(customRecipes);\n}\n\nexport function resetKeplerInjectorRecipes() {\n customRecipes = [];\n injector = createKeplerInjector();\n}\n\nexport function getKeplerInjector() {\n return injector;\n}\n\n// Cache resolved components per injector so we keep a stable component\n// reference across re-renders. Invalidated when injector is replaced (configure/reset).\nconst injectorToFactoryCache = new WeakMap<\n object,\n Map<KeplerFactory, React.ComponentType<Record<string, unknown>>>\n>();\n\n// Cache wrapper components per factory so callers always get a stable component type.\nconst factoryToWrapperCache = new Map<\n KeplerFactory,\n React.ComponentType<Record<string, unknown>>\n>();\n\nexport function getKeplerFactory<TFactory extends KeplerFactory>(\n factory: TFactory,\n): ReturnType<TFactory> {\n let Wrapped = factoryToWrapperCache.get(factory);\n if (Wrapped === undefined) {\n const WrappedComponent = function KeplerFactoryWrapper(\n props: Record<string, unknown>,\n ) {\n // Resolve at top level of render (not inside useMemo) so injector.get()\n // running the factory chain does not run hooks inside a hook.\n const injectorInstance = getKeplerInjector();\n let byFactory = injectorToFactoryCache.get(injectorInstance as object);\n if (byFactory === undefined) {\n byFactory = new Map();\n injectorToFactoryCache.set(injectorInstance as object, byFactory);\n }\n let Component = byFactory.get(factory);\n if (Component === undefined) {\n Component = injectorInstance.get(\n factory as unknown as Factory,\n ) as React.ComponentType<Record<string, unknown>>;\n byFactory.set(factory, Component);\n }\n // eslint-disable-next-line react-hooks/static-components -- Kepler factory components resolved at render by design\n return <Component {...props} />;\n };\n\n const factoryName = factory.name || 'Anonymous';\n WrappedComponent.displayName = `KeplerFactory(${factoryName})`;\n Wrapped = WrappedComponent;\n factoryToWrapperCache.set(factory, WrappedComponent);\n }\n return Wrapped as unknown as ReturnType<TFactory>;\n}\n\n/**\n * Stable access to Kepler factories. Prefer calling `get()` at module scope\n * (or in a constant initializer) so the returned component type is reused.\n */\nexport const KeplerInjector = {\n get<TFactory extends KeplerFactory>(factory: TFactory) {\n return getKeplerFactory(factory);\n },\n};\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MapStateActions, MapStyleActions, ProviderActions, UIStateActions, VisStateActions } from '@kepler.gl/actions';
|
|
2
2
|
import { KeplerGlState } from '@kepler.gl/reducers';
|
|
3
|
+
import { KeplerAction } from '../KeplerSlice';
|
|
3
4
|
export type KeplerActions = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
providerActions:
|
|
5
|
+
uiStateActions: typeof UIStateActions;
|
|
6
|
+
visStateActions: typeof VisStateActions;
|
|
7
|
+
mapStateActions: typeof MapStateActions;
|
|
8
|
+
mapStyleActions: typeof MapStyleActions;
|
|
9
|
+
providerActions: typeof ProviderActions;
|
|
9
10
|
dispatch: (action: KeplerAction) => void;
|
|
10
11
|
};
|
|
11
12
|
export declare function useKeplerStateActions({ mapId }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeplerStateActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeplerStateActions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useKeplerStateActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeplerStateActions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAC,YAAY,EAAqB,MAAM,gBAAgB,CAAC;AAGhE,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC1C,CAAC;AACF,wBAAgB,qBAAqB,CAAC,EAAC,KAAK,EAAC,EAAE;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG;IAC/D,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,aAAa,GAAG,SAAS,CAAC;CACxC,CAoBA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { makeGetActionCreators } from '@kepler.gl/components';
|
|
1
2
|
import { useMemo } from 'react';
|
|
2
3
|
import { useStoreWithKepler } from '../KeplerSlice';
|
|
3
|
-
import { makeGetActionCreators } from '@kepler.gl/components';
|
|
4
4
|
const keplerActionSelector = makeGetActionCreators();
|
|
5
5
|
export function useKeplerStateActions({ mapId }) {
|
|
6
6
|
const dispatchAction = useStoreWithKepler((state) => state.kepler.dispatchAction);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeplerStateActions.js","sourceRoot":"","sources":["../../src/hooks/useKeplerStateActions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useKeplerStateActions.js","sourceRoot":"","sources":["../../src/hooks/useKeplerStateActions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAe,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAEhE,MAAM,oBAAoB,GAAG,qBAAqB,EAAE,CAAC;AASrD,MAAM,UAAU,qBAAqB,CAAC,EAAC,KAAK,EAAkB;IAI5D,MAAM,cAAc,GAAG,kBAAkB,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACvC,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC,MAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAC7D,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;IAEF,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,CAAC,EACjD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,CAAC;AACtC,CAAC","sourcesContent":["import {\n MapStateActions,\n MapStyleActions,\n ProviderActions,\n UIStateActions,\n VisStateActions,\n} from '@kepler.gl/actions';\nimport {makeGetActionCreators} from '@kepler.gl/components';\nimport {KeplerGlState} from '@kepler.gl/reducers';\nimport {useMemo} from 'react';\nimport {KeplerAction, useStoreWithKepler} from '../KeplerSlice';\n\nconst keplerActionSelector = makeGetActionCreators();\nexport type KeplerActions = {\n uiStateActions: typeof UIStateActions;\n visStateActions: typeof VisStateActions;\n mapStateActions: typeof MapStateActions;\n mapStyleActions: typeof MapStyleActions;\n providerActions: typeof ProviderActions;\n dispatch: (action: KeplerAction) => void;\n};\nexport function useKeplerStateActions({mapId}: {mapId: string}): {\n keplerActions: KeplerActions;\n keplerState: KeplerGlState | undefined;\n} {\n const dispatchAction = useStoreWithKepler(\n (state) => state.kepler.dispatchAction,\n );\n\n const forwardToDispatch = useMemo(\n () => (action: KeplerAction) => dispatchAction(mapId, action),\n [mapId, dispatchAction],\n );\n\n const keplerState = useStoreWithKepler((state) => {\n return state.kepler.map[mapId];\n });\n\n const keplerActions = useMemo(\n () => keplerActionSelector(forwardToDispatch, {}),\n [forwardToDispatch],\n );\n\n return {keplerActions, keplerState};\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
5
|
export { createDefaultKeplerConfig, createKeplerSlice, useStoreWithKepler, } from './KeplerSlice';
|
|
6
|
-
export type { KeplerSliceState } from './KeplerSlice';
|
|
6
|
+
export type { CreateInitialMapKeplerStateContext, CreateKeplerSliceOptions, KeplerSliceState, } from './KeplerSlice';
|
|
7
7
|
export { FileDropInput } from './components/FileDropInput';
|
|
8
8
|
export { KeplerAddDataDialog } from './components/KeplerAddDataDialog';
|
|
9
9
|
export type { AddDataMethods, KeplerAddDataDialogProps, } from './components/KeplerAddDataDialog';
|
|
10
10
|
export { KeplerAddTileSetDialog } from './components/KeplerAddTileSetDialog';
|
|
11
11
|
export type { LoadTileSet } from './components/KeplerAddTileSetDialog';
|
|
12
12
|
export { KeplerImageExport } from './components/KeplerImageExport';
|
|
13
|
-
export { configureKeplerInjector,
|
|
13
|
+
export { configureKeplerInjector, getKeplerFactory, getKeplerInjector, KeplerInjector, resetKeplerInjectorRecipes, } from './components/KeplerInjector';
|
|
14
14
|
export type { KeplerFactoryRecipe, KeplerFactoryRecipeMode, } from './components/KeplerInjector';
|
|
15
15
|
export { KeplerMapContainer } from './components/KeplerMapContainer';
|
|
16
16
|
export { KeplerPlotContainer } from './components/KeplerPlotContainer';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,kCAAkC,EAClC,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,YAAY,EACV,cAAc,EACd,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAC3E,YAAY,EAAC,WAAW,EAAC,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAC,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AAIpE,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAC,uBAAuB,EAAC,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAC,8BAA8B,EAAC,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAC,8BAA8B,EAAC,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAC,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { FileDropInput } from './components/FileDropInput';
|
|
|
7
7
|
export { KeplerAddDataDialog } from './components/KeplerAddDataDialog';
|
|
8
8
|
export { KeplerAddTileSetDialog } from './components/KeplerAddTileSetDialog';
|
|
9
9
|
export { KeplerImageExport } from './components/KeplerImageExport';
|
|
10
|
-
export { configureKeplerInjector,
|
|
10
|
+
export { configureKeplerInjector, getKeplerFactory, getKeplerInjector, KeplerInjector, resetKeplerInjectorRecipes, } from './components/KeplerInjector';
|
|
11
11
|
export { KeplerMapContainer } from './components/KeplerMapContainer';
|
|
12
12
|
export { KeplerPlotContainer } from './components/KeplerPlotContainer';
|
|
13
13
|
export { KeplerProvider } from './components/KeplerProvider';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAKrE,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AAEpE,yCAAyC;AACzC,2EAA2E;AAC3E,OAAO,EAAC,eAAe,EAAE,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAC,uBAAuB,EAAC,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAC,8BAA8B,EAAC,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAC,8BAA8B,EAAC,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAC,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\n\nexport {\n createDefaultKeplerConfig,\n createKeplerSlice,\n useStoreWithKepler,\n} from './KeplerSlice';\nexport type {\n CreateInitialMapKeplerStateContext,\n CreateKeplerSliceOptions,\n KeplerSliceState,\n} from './KeplerSlice';\n\nexport {FileDropInput} from './components/FileDropInput';\nexport {KeplerAddDataDialog} from './components/KeplerAddDataDialog';\nexport type {\n AddDataMethods,\n KeplerAddDataDialogProps,\n} from './components/KeplerAddDataDialog';\nexport {KeplerAddTileSetDialog} from './components/KeplerAddTileSetDialog';\nexport type {LoadTileSet} from './components/KeplerAddTileSetDialog';\nexport {KeplerImageExport} from './components/KeplerImageExport';\nexport {\n configureKeplerInjector,\n getKeplerFactory,\n getKeplerInjector,\n KeplerInjector,\n resetKeplerInjectorRecipes,\n} from './components/KeplerInjector';\nexport type {\n KeplerFactoryRecipe,\n KeplerFactoryRecipeMode,\n} from './components/KeplerInjector';\nexport {KeplerMapContainer} from './components/KeplerMapContainer';\nexport {KeplerPlotContainer} from './components/KeplerPlotContainer';\nexport {KeplerProvider} from './components/KeplerProvider';\nexport {KeplerS3Browser} from './components/KeplerS3Browser';\nexport type {KeplerS3BrowserProps} from './components/KeplerS3Browser';\nexport {KeplerSidePanels} from './components/KeplerSidePanels';\nexport {useKeplerStateActions} from './hooks/useKeplerStateActions';\n\n// Re-export from @sqlrooms/kepler-config\n// Values also export their corresponding types automatically (Zod pattern)\nexport {KeplerMapSchema, KeplerSliceConfig} from '@sqlrooms/kepler-config';\n\nexport {CustomDndContextFactory} from './components/CustomDndContext';\nexport {CustomFilterPanelHeaderFactory} from './components/CustomFilterPanelHeader';\nexport {CustomMapControlTooltipFactory} from './components/CustomMapControlTooltipFactory';\nexport {CustomMapLegendFactory} from './components/CustomMapLegend';\nexport {CustomMapLegendPanelFactory} from './components/CustomMapLegendPanel';\nexport {\n CustomAddDataButtonFactory,\n CustomPanelTitleFactory,\n} from './components/KeplerInjector';\n"]}
|