@carto/ps-react-ui 4.3.8 → 4.3.10
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/components.js +692 -700
- package/dist/components.js.map +1 -1
- package/dist/{lasso-tool-jl4YK02H.js → lasso-tool-BYbxrJ-7.js} +184 -190
- package/dist/lasso-tool-BYbxrJ-7.js.map +1 -0
- package/dist/{row-BKmVAUN5.js → row-DTCV0Ocm.js} +2 -2
- package/dist/row-DTCV0Ocm.js.map +1 -0
- package/dist/{series-D1pynfeh.js → series-CYNOu2Ju.js} +2 -2
- package/dist/{series-D1pynfeh.js.map → series-CYNOu2Ju.js.map} +1 -1
- package/dist/smart-tooltip-D4vwQpFf.js +37 -0
- package/dist/smart-tooltip-D4vwQpFf.js.map +1 -0
- package/dist/{styles-DrPyd0y5.js → styles-CAroD5Rc.js} +12 -12
- package/dist/styles-CAroD5Rc.js.map +1 -0
- package/dist/types/widgets/_shared/chart-config/option-builders.d.ts +1 -1
- package/dist/types/widgets/category/config.d.ts +3 -10
- package/dist/types/widgets/range/config.d.ts +0 -4
- package/dist/types/widgets/spread/config.d.ts +0 -5
- package/dist/types/widgets/table/components/cell.d.ts +4 -2
- package/dist/types/widgets/table/config.d.ts +1 -2
- package/dist/types/widgets/table/table-ui.d.ts +1 -1
- package/dist/types/widgets/table/types.d.ts +1 -1
- package/dist/types/widgets/wrapper/components/options.d.ts +1 -1
- package/dist/widgets/actions.js +607 -621
- package/dist/widgets/actions.js.map +1 -1
- package/dist/widgets/bar.js +48 -49
- package/dist/widgets/bar.js.map +1 -1
- package/dist/widgets/category.js +28 -28
- package/dist/widgets/category.js.map +1 -1
- package/dist/widgets/formula.js +3 -3
- package/dist/widgets/histogram.js +50 -50
- package/dist/widgets/histogram.js.map +1 -1
- package/dist/widgets/markdown.js +1 -1
- package/dist/widgets/pie.js +9 -9
- package/dist/widgets/pie.js.map +1 -1
- package/dist/widgets/range.js +1 -1
- package/dist/widgets/range.js.map +1 -1
- package/dist/widgets/scatterplot.js +13 -13
- package/dist/widgets/scatterplot.js.map +1 -1
- package/dist/widgets/spread.js +3 -3
- package/dist/widgets/spread.js.map +1 -1
- package/dist/widgets/table.js +242 -241
- package/dist/widgets/table.js.map +1 -1
- package/dist/widgets/timeseries.js +3 -3
- package/dist/widgets/timeseries.js.map +1 -1
- package/dist/widgets/wrapper.js +152 -162
- package/dist/widgets/wrapper.js.map +1 -1
- package/package.json +1 -1
- package/src/components/basemaps/basemaps.tsx +3 -1
- package/src/components/geolocation-controls/geolocation-controls.tsx +10 -6
- package/src/components/lasso-tool/lasso-tool-inline.tsx +6 -2
- package/src/components/lasso-tool/lasso-tool.tsx +9 -3
- package/src/components/list-data/list-data-skeleton.tsx +1 -1
- package/src/components/list-data/list-data.tsx +5 -3
- package/src/components/measurement-tools/measurement-tools.tsx +5 -1
- package/src/components/smart-tooltip/smart-tooltip.tsx +3 -1
- package/src/widgets/_shared/chart-config/option-builders.test.ts +2 -2
- package/src/widgets/_shared/chart-config/option-builders.ts +6 -4
- package/src/widgets/actions/download/download.test.tsx +6 -2
- package/src/widgets/actions/download/download.tsx +3 -1
- package/src/widgets/actions/fullscreen/fullscreen.tsx +8 -1
- package/src/widgets/actions/relative-data/relative-data.tsx +2 -6
- package/src/widgets/actions/searcher/searcher.tsx +0 -6
- package/src/widgets/bar/config.ts +8 -4
- package/src/widgets/bar/skeleton.tsx +1 -1
- package/src/widgets/category/components/category-row-multi.tsx +1 -1
- package/src/widgets/category/config.ts +1 -11
- package/src/widgets/formula/components/row.tsx +1 -1
- package/src/widgets/histogram/config.ts +7 -2
- package/src/widgets/histogram/skeleton.tsx +2 -2
- package/src/widgets/pie/skeleton.tsx +1 -1
- package/src/widgets/range/config.ts +0 -5
- package/src/widgets/scatterplot/skeleton.tsx +2 -2
- package/src/widgets/spread/config.ts +0 -6
- package/src/widgets/table/components/cell.tsx +5 -3
- package/src/widgets/table/components/row.tsx +6 -1
- package/src/widgets/table/config.ts +1 -1
- package/src/widgets/table/table-ui.tsx +1 -1
- package/src/widgets/table/types.ts +1 -1
- package/src/widgets/timeseries/skeleton.tsx +1 -1
- package/src/widgets/wrapper/components/actions.test.tsx +6 -2
- package/src/widgets/wrapper/components/actions.tsx +3 -1
- package/src/widgets/wrapper/components/options.test.tsx +12 -4
- package/src/widgets/wrapper/components/options.tsx +8 -3
- package/src/widgets/wrapper/wrapper-ui.tsx +5 -2
- package/src/widgets/wrapper/wrapper.tsx +2 -4
- package/dist/lasso-tool-jl4YK02H.js.map +0 -1
- package/dist/row-BKmVAUN5.js.map +0 -1
- package/dist/smart-tooltip-BEtBaIdz.js +0 -39
- package/dist/smart-tooltip-BEtBaIdz.js.map +0 -1
- package/dist/styles-DrPyd0y5.js.map +0 -1
- package/dist/types/widgets/actions/relative-data/style.d.ts +0 -8
- package/dist/types/widgets/actions/zoom-toggle/index.d.ts +0 -2
- package/dist/types/widgets/table/components/index.d.ts +0 -4
- package/src/widgets/actions/relative-data/style.ts +0 -9
- package/src/widgets/actions/zoom-toggle/index.ts +0 -2
- package/src/widgets/table/components/index.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sources":["../../src/widgets/actions/fullscreen/styles.ts","../../src/widgets/actions/fullscreen/fullscreen.tsx","../../src/widgets/actions/download/download.tsx","../../src/widgets/actions/shared/styles.ts","../../src/widgets/actions/relative-data/utils.ts","../../src/widgets/actions/relative-data/relative-data.tsx","../../src/widgets/actions/zoom-toggle/style.ts","../../src/widgets/actions/zoom-toggle/zoom-toggle.tsx","../../src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx","../../src/widgets/actions/stack-toggle/stack-toggle.tsx","../../src/widgets/actions/lock-selection/lock-selection.tsx","../../src/widgets/actions/searcher/searcher.tsx","../../src/widgets/actions/searcher/searcher-toggle.tsx","../../src/widgets/actions/change-column/change-column-icon.tsx","../../src/widgets/actions/change-column/sortable-column-item.tsx","../../src/widgets/actions/change-column/change-column.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n title: {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n },\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from '@mui/material'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Close, FullscreenOutlined } from '@mui/icons-material'\nimport type {\n FullScreenConfig,\n FullScreenProps,\n FullScreenState,\n} from './types'\nimport { styles } from './styles'\nimport { useShallow } from 'zustand/shallow'\n\nexport function FullScreen({\n id,\n labels,\n children,\n Icon,\n IconButtonProps,\n DialogContentProps: { sx, ...DialogContentProps } = {},\n DialogProps,\n}: FullScreenProps) {\n const isFullScreen = useWidgetStore(\n useShallow((state) => state.getWidget<FullScreenState>(id)?.isFullScreen),\n )\n const title = useWidgetStore(\n useShallow((state) => state.getWidget<FullScreenState>(id)?.title),\n )\n const setWidget = useWidgetStore((state) => state.setWidget)\n\n const updateFullScreenConfig = (updates: Partial<FullScreenConfig>) => {\n setWidget<FullScreenState>(id, {\n isFullScreen: updates.isFullScreen,\n })\n }\n\n return (\n <>\n <IconButton\n {...IconButtonProps}\n onClick={() => updateFullScreenConfig({ isFullScreen: true })}\n >\n {Icon ?? <FullscreenOutlined />}\n </IconButton>\n <Dialog\n maxWidth={false}\n open={!!isFullScreen}\n keepMounted\n aria-labelledby={labels?.ariaLabel ?? `fullscreen-dialog-title-${id}`}\n {...DialogProps}\n onClose={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <DialogTitle\n id={`fullscreen-dialog-title-${id}`}\n sx={styles.title.container}\n >\n <Typography variant='subtitle1' component='span'>\n {title}\n </Typography>\n <IconButton\n onClick={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <Close />\n </IconButton>\n </DialogTitle>\n <DialogContent\n sx={{\n ...styles.content,\n ...sx,\n }}\n {...DialogContentProps}\n >\n {children}\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import {\n CircularProgress,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n} from '@mui/material'\nimport type { DownloadItem, DownloadProps } from './types'\nimport { FileDownloadOutlined } from '@mui/icons-material'\nimport { useState, type MouseEvent } from 'react'\nimport { useWidgetStore } from '../../../widgets'\nimport { useShallow } from 'zustand/shallow'\n\nexport function Download({\n id,\n items,\n labels = {},\n Icon,\n IconButtonProps,\n}: DownloadProps) {\n const data = useWidgetStore(useShallow((state) => state.getWidget(id)?.data))\n\n const [isDownloading, setIsDownloading] = useState(false)\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleToggle = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }\n\n const handleDownload = (data: string, option: DownloadItem) => {\n const link = document.createElement('a')\n link.href = data\n link.download = option.filename ?? id\n link.style.display = 'none'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n option.callback?.(link.href)\n }\n\n const handleClick = async (\n event: MouseEvent<HTMLElement>,\n option: DownloadItem,\n ) => {\n event.stopPropagation()\n\n setIsDownloading(true)\n setAnchorEl(null)\n\n const result = await option.modifier(data)\n\n if (!result) {\n setIsDownloading(false)\n return\n }\n\n handleDownload(result, option)\n setIsDownloading(false)\n }\n\n return (\n <>\n <IconButton\n size='small'\n aria-label={labels.ariaLabel ?? 'download options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={handleToggle}\n {...IconButtonProps}\n disabled={isDownloading || items.length === 0}\n className={isDownloading || anchorEl ? 'active' : ''}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n (Icon ?? <FileDownloadOutlined />)\n )}\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {items.map((option) => (\n <MenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={(e) => void handleClick(e, option)}\n >\n {option.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {option.icon}\n </ListItemIcon>\n )}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Shared styles for widget action buttons\n */\nexport const actionButtonStyles = {\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { EchartWidgetData } from '../../echart/types'\n\n/**\n * Calculates the sum of all numeric values in the data\n */\nexport function calculateTotal(data: EchartWidgetData): number {\n return data.reduce((total, series) => {\n return series.reduce((seriesTotal, item) => {\n if (Array.isArray(item)) {\n const value = item.at(-1) as number\n return typeof value === 'number' ? seriesTotal + value : seriesTotal\n }\n\n return Object.entries(item).reduce((itemTotal: number, [key, value]) => {\n if (key === 'name') {\n return itemTotal\n }\n return typeof value === 'number' ? itemTotal + value : itemTotal\n }, seriesTotal)\n }, total)\n }, 0)\n}\n\n/**\n * Transforms data to relative (percentage) values\n */\nexport function toRelativeData(\n data: EchartWidgetData,\n total: number,\n): EchartWidgetData {\n if (total === 0) return data\n\n return data.map((series) =>\n series.map((item) => {\n if (Array.isArray(item)) {\n return item.map((value: number, index) => {\n if (index === item.length - 1 && typeof value === 'number') {\n return (value / total) * 100\n }\n return value\n }) as typeof item\n }\n\n const transformed: Record<string, string | number> = {}\n\n for (const [key, value] of Object.entries(item)) {\n if (key === 'name') {\n transformed[key] = value\n continue\n }\n transformed[key] =\n typeof value === 'number' ? (value / total) * 100 : value\n }\n\n return transformed\n }),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { PercentOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { RelativeDataProps, RelativeDataState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { calculateTotal, toRelativeData } from './utils'\nimport type { EchartWidgetData } from '../../../widgets/echart'\n\nexport const RELATIVE_DATA_TOOL_ID = 'relative-data'\n\n/**\n * Widget action to toggle between relative (percentage) and absolute data display.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * When relative mode is active, transforms data to percentages via the pipeline.\n *\n * @example\n * ```tsx\n * <RelativeData\n * id=\"my-widget\"\n * order={20}\n * defaultIsRelative={false}\n * />\n * ```\n */\nexport function RelativeData({\n id,\n order = 10,\n defaultIsRelative = false,\n labels,\n Icon,\n IconButtonProps,\n}: RelativeDataProps) {\n const previousMaxValue = useRef<number | undefined>(undefined)\n const originalFormatter = useRef<((value: number) => string) | undefined>(\n undefined,\n )\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n\n const storeIsRelative = useWidgetStore(\n (state) => state.getWidget<RelativeDataState>(id)?.isRelative,\n )\n\n const isRelative = storeIsRelative ?? defaultIsRelative\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue = getWidget<RelativeDataState>(id)?.isRelative\n if (currentValue === undefined) {\n setWidget(id, { isRelative: defaultIsRelative })\n }\n }, [defaultIsRelative, getWidget, id, setWidget])\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: RELATIVE_DATA_TOOL_ID,\n order,\n enabled: isRelative,\n fn: (data) => {\n const echartData = data as EchartWidgetData\n const total = calculateTotal(echartData)\n return toRelativeData(echartData, total)\n },\n })\n\n return () => unregisterTool(id, RELATIVE_DATA_TOOL_ID)\n }, [id, order, registerTool, unregisterTool, isRelative])\n\n // Update enabled flag when toggle changes\n useEffect(() => {\n setToolEnabled(id, RELATIVE_DATA_TOOL_ID, isRelative)\n }, [id, isRelative, setToolEnabled])\n\n const handleToggle = useCallback(() => {\n const newIsRelative = !isRelative\n let max = previousMaxValue.current\n\n if (newIsRelative) {\n // Backup current formatter to ref\n const widget = getWidget(id) as {\n formatter?: (value: number) => string\n locale?: string\n }\n originalFormatter.current = widget?.formatter\n\n // Save current max value before setting to 100\n const currentMax = (getWidget(id) as { max?: number })?.max\n previousMaxValue.current = currentMax\n max = 100\n }\n\n setWidget(id, {\n isRelative: newIsRelative,\n max,\n formatter: newIsRelative\n ? (value: number) => {\n const widget = getWidget(id) as { locale?: string }\n return new Intl.NumberFormat(widget?.locale, {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(value / 100)\n }\n : originalFormatter.current,\n })\n }, [isRelative, setWidget, id, getWidget])\n\n const tooltipLabel = isRelative\n ? (labels?.absolute ?? 'Show absolute values')\n : (labels?.relative ?? 'Show relative values')\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isRelative}\n {...IconButtonProps}\n >\n {Icon ?? <PercentOutlined />}\n </IconButton>\n </Tooltip>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton, useTheme } from '@mui/material'\nimport {\n SubdirectoryArrowLeftOutlined,\n ZoomInOutlined,\n} from '@mui/icons-material'\nimport { useEffect, useCallback } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { ZoomToggleProps } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartZoomConfig } from '../../echart/utils'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useShallow } from 'zustand/shallow'\n\nexport const ZOOM_TOGGLE_TOOL_ID = 'zoom-toggle'\n\n/**\n * Widget action to toggle EChart zoom functionality.\n *\n * Registers as a config pipeline tool so that zoom configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * When zoom is active, displays an inline reset button to disable zoom.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <ZoomToggle\n * id=\"my-widget\"\n * defaultZoom={false}\n * zoomStart={0}\n * zoomEnd={100}\n * />\n * ```\n */\nexport function ZoomToggle({\n id,\n defaultZoom = false,\n defaultZoomStart = 0,\n defaultZoomEnd = 100,\n labels,\n Icon,\n ResetIcon,\n IconButtonProps,\n}: ZoomToggleProps) {\n const theme = useTheme()\n const getWidget = useWidgetStore((state) => state.getWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const zoomTool = useWidgetStore(\n useShallow((state) => {\n const tools = state.getWidget(id)?.registeredTools ?? []\n return tools.find((tool) => tool.id === ZOOM_TOGGLE_TOOL_ID)\n }),\n )\n\n const zoom = zoomTool?.enabled ?? defaultZoom\n const zoomStart =\n (zoomTool?.config?.start as number | undefined) ?? defaultZoomStart\n const zoomEnd =\n (zoomTool?.config?.end as number | undefined) ?? defaultZoomEnd\n\n // Handle dataZoom event to update zoom range in tool config\n const handleDataZoom = useCallback(\n (event: unknown) => {\n const zoomEvent = event as {\n start?: number\n end?: number\n batch?: {\n start?: number\n end?: number\n }[]\n }\n\n const start = zoomEvent.start ?? zoomEvent.batch?.[0]?.start\n const end = zoomEvent.end ?? zoomEvent.batch?.[0]?.end\n\n if (start !== undefined && end !== undefined) {\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, true)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: true,\n start,\n end,\n })\n }\n },\n [id, setToolEnabled, updateToolConfig],\n )\n\n // Register config tool on mount\n useEffect(() => {\n const existingTool = getWidget(id)?.registeredTools?.find(\n (tool) => tool.id === ZOOM_TOGGLE_TOOL_ID,\n )\n\n const initialEnabled = existingTool?.enabled ?? defaultZoom\n const initialStart =\n (existingTool?.config?.start as number | undefined) ?? defaultZoomStart\n const initialEnd =\n (existingTool?.config?.end as number | undefined) ?? defaultZoomEnd\n\n registerTool(id, {\n id: ZOOM_TOGGLE_TOOL_ID,\n type: 'config',\n order: 20,\n enabled: initialEnabled,\n fn: (currentConfig, toolConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const enabled = (toolConfig?.enabled as boolean) ?? false\n const start = (toolConfig?.start as number) ?? 0\n const end = (toolConfig?.end as number) ?? 100\n\n const legend = option?.legend as { show?: boolean } | undefined\n const hasLegend = legend?.show !== false && legend !== undefined\n\n const sliderHeight = parseInt(theme?.spacing?.(4) ?? '32')\n const sliderGap = 8\n const legendBottomOffset = hasLegend ? 28 : 0\n\n const zoomConfig = getEChartZoomConfig(\n enabled,\n { start, end },\n {\n inside: true,\n xSlider: true,\n ySlider: false,\n bottomOffset: legendBottomOffset,\n },\n theme,\n )\n\n const grid = option?.grid as { bottom?: number | string } | undefined\n const currentGridBottom =\n typeof grid?.bottom === 'number'\n ? grid.bottom\n : parseInt(grid?.bottom ?? '24')\n\n const gridBottom = enabled\n ? currentGridBottom + sliderHeight + sliderGap\n : currentGridBottom\n\n const onEventsWithoutDataZoom = { ...currentOnEvents }\n delete onEventsWithoutDataZoom.dataZoom\n const onEvents = enabled\n ? { ...currentOnEvents, dataZoom: handleDataZoom }\n : onEventsWithoutDataZoom\n\n return {\n ...config,\n option: {\n ...option,\n ...zoomConfig,\n grid: { ...grid, bottom: gridBottom },\n },\n onEvents,\n }\n },\n config: {\n enabled: initialEnabled,\n start: initialStart,\n end: initialEnd,\n },\n })\n return () => unregisterTool(id, ZOOM_TOGGLE_TOOL_ID)\n }, [\n defaultZoom,\n defaultZoomEnd,\n defaultZoomStart,\n getWidget,\n handleDataZoom,\n id,\n registerTool,\n theme,\n unregisterTool,\n ])\n\n const handleToggle = () => {\n const newZoom = !zoom\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, newZoom)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: newZoom,\n start: newZoom ? zoomStart : 0,\n end: newZoom ? zoomEnd : 100,\n })\n }\n\n const handleReset = () => {\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, true)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: true,\n start: defaultZoomStart,\n end: defaultZoomEnd,\n })\n }\n\n const enableLabel = labels?.enable ?? 'Enable zoom'\n const disableLabel = labels?.disable ?? 'Disable zoom'\n const resetLabel = labels?.reset ?? 'Reset zoom'\n const tooltipLabel = zoom ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={zoom}\n {...IconButtonProps}\n >\n {Icon ?? <ZoomInOutlined />}\n </IconButton>\n </Tooltip>\n {zoom && (\n <Tooltip title={resetLabel}>\n <IconButton\n size='small'\n aria-label={resetLabel}\n onClick={handleReset}\n {...IconButtonProps}\n >\n {ResetIcon ?? <SubdirectoryArrowLeftOutlined />}\n </IconButton>\n </Tooltip>\n )}\n </Box>\n )\n}\n","export const GroupedBarChartIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M4 20V8H8V20H4ZM9 20V13H13V20H9ZM16 20V4H20V20H16Z'\n fill='currentColor'\n />\n </svg>\n)\n","import { IconButton } from '@mui/material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { StackToggleProps, StackToggleState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { GroupedBarChartIcon } from './grouped-bar-chart-icon'\nimport { getEChartStackConfig } from '../../echart/utils'\nimport { DEFAULT_STACK_GROUP } from '../../echart/const'\nimport type { EchartWidgetState } from '../../echart/types'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useShallow } from 'zustand/shallow'\n\nexport const STACK_TOGGLE_TOOL_ID = 'stack-toggle'\n\n/**\n * Widget action to toggle stacking behavior in ECharts bar and histogram widgets.\n *\n * Registers as a config pipeline tool so that stack configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * @example\n * ```tsx\n * <StackToggle\n * id=\"my-widget\"\n * defaultIsStacked={false}\n * />\n * ```\n */\nexport function StackToggle({\n id,\n defaultIsStacked = false,\n labels,\n Icon,\n IconButtonProps,\n}: StackToggleProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const storeIsStacked = useWidgetStore(\n useShallow((state) => state.getWidget<StackToggleState>(id)?.isStacked),\n )\n\n const option = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(id)?.option),\n )\n\n const { hasMultiSeries, hasStackInSeries } = useMemo(() => {\n if (!option) return { hasMultiSeries: false, hasStackInSeries: false }\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n return {\n hasMultiSeries: series.length > 1,\n hasStackInSeries: series.some((s) => (s as { stack?: string })?.stack),\n }\n }, [option])\n\n // If series already has stack defined, default to stacked=true\n const effectiveDefaultIsStacked = hasStackInSeries || defaultIsStacked\n const isStacked = storeIsStacked ?? effectiveDefaultIsStacked\n\n // Register config tool on mount\n useEffect(() => {\n registerTool(id, {\n id: STACK_TOGGLE_TOOL_ID,\n type: 'config',\n order: 10,\n enabled: isStacked && hasMultiSeries,\n fn: (currentConfig, toolConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n if (!option) return currentConfig\n\n const stacked = (toolConfig?.stacked as boolean) ?? false\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n const updatedSeries = series.map((s) => {\n const existingStack = (s as { stack?: string })?.stack\n const stackGroup =\n typeof existingStack === 'string'\n ? existingStack\n : DEFAULT_STACK_GROUP\n return { ...s, ...getEChartStackConfig(stacked, stackGroup) }\n })\n\n return { ...config, option: { ...option, series: updatedSeries } }\n },\n config: { stacked: isStacked },\n })\n return () => unregisterTool(id, STACK_TOGGLE_TOOL_ID)\n }, [id, registerTool, unregisterTool, isStacked, hasMultiSeries])\n\n // Sync tool enabled/config when state changes\n useEffect(() => {\n setToolEnabled(id, STACK_TOGGLE_TOOL_ID, isStacked && hasMultiSeries)\n updateToolConfig(id, STACK_TOGGLE_TOOL_ID, { stacked: isStacked })\n }, [id, isStacked, hasMultiSeries, setToolEnabled, updateToolConfig])\n\n // Initialize store with default value only if not already configured\n useEffect(() => {\n if (storeIsStacked !== undefined) return\n setWidget(id, { isStacked: effectiveDefaultIsStacked })\n }, [effectiveDefaultIsStacked, id, setWidget, storeIsStacked])\n\n const handleToggle = useCallback(() => {\n setWidget(id, { isStacked: !isStacked })\n }, [isStacked, id, setWidget])\n\n const tooltipLabel = isStacked\n ? (labels?.unstacked ?? 'Disable stacking')\n : (labels?.stacked ?? 'Enable stacking')\n\n // Early return if there's only one series - stacking doesn't apply\n if (!hasMultiSeries) {\n return null\n }\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isStacked}\n {...IconButtonProps}\n >\n {Icon ?? <GroupedBarChartIcon />}\n </IconButton>\n </Tooltip>\n )\n}\n","import { IconButton } from '@mui/material'\nimport { CheckBoxOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport type { LockSelectionProps, LockSelectionState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport type { EchartWidgetData } from '../../echart/types'\n\nexport const LOCK_SELECTION_TOOL_ID = 'lock-selection'\n\n/**\n * Widget action button to lock the current selection.\n *\n * When locked, the widget data is filtered to only show the selected items.\n * The button is only visible when there are selected items.\n * Registers a transformation tool in the widget pipeline when mounted.\n *\n * @example\n * ```tsx\n * <LockSelection\n * id=\"my-widget\"\n * order={30}\n * selectedItems={selectedItems}\n * />\n * ```\n */\nexport function LockSelection({\n id,\n selectedItems,\n order = 30,\n labels,\n Icon,\n IconButtonProps,\n}: LockSelectionProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const storeIsLocked = useWidgetStore(\n useShallow((state) => state.getWidget<LockSelectionState>(id)?.isLocked),\n )\n\n const isLocked = storeIsLocked ?? false\n const lockedItems = useMemo(\n () => (isLocked ? selectedItems : []),\n [isLocked, selectedItems],\n )\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: LOCK_SELECTION_TOOL_ID,\n order,\n enabled: isLocked,\n fn: (data, config) => {\n const items = (config?.lockedItems as string[]) || []\n if (items.length === 0) return data\n\n return filterDataByLockedItems(data as EchartWidgetData, items)\n },\n config: { lockedItems },\n })\n\n return () => unregisterTool(id, LOCK_SELECTION_TOOL_ID)\n }, [id, order, registerTool, unregisterTool, isLocked, lockedItems])\n\n // Update enabled flag and config when they change\n useEffect(() => {\n setToolEnabled(id, LOCK_SELECTION_TOOL_ID, isLocked)\n updateToolConfig(id, LOCK_SELECTION_TOOL_ID, { lockedItems })\n }, [id, isLocked, lockedItems, setToolEnabled, updateToolConfig])\n\n const handleToggle = useCallback(() => {\n if (isLocked) {\n // Unlock: clear locked items and disable tool\n setWidget(id, {\n isLocked: false,\n lockedItems: [],\n })\n } else {\n // Lock: save selected items and enable tool\n setWidget(id, {\n isLocked: true,\n lockedItems: selectedItems,\n })\n }\n }, [id, isLocked, selectedItems, setWidget])\n\n // Don't render if no selections\n if (selectedItems.length === 0) {\n return null\n }\n\n const tooltipLabel = isLocked\n ? (labels?.unlock ?? 'Unlock selection')\n : (labels?.lock ?? 'Lock selection')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isLocked}\n {...IconButtonProps}\n >\n {Icon ?? <CheckBoxOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n\n/**\n * Filters widget data to only include items with names matching the locked items.\n */\nfunction filterDataByLockedItems(\n data: EchartWidgetData,\n lockedItems: string[],\n): EchartWidgetData {\n return data.map((series) =>\n series.filter((item) => {\n const name = item.name\n return typeof name === 'string' && lockedItems.includes(name)\n }),\n )\n}\n","import { TextField, InputAdornment, IconButton } from '@mui/material'\nimport { ClearOutlined, SearchOutlined } from '@mui/icons-material'\nimport { useEffect, useRef, useCallback } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { SearcherProps, SearcherFilterFn, SearcherState } from './types'\nimport type { EchartWidgetData } from '../../echart/types'\nimport { LOCK_SELECTION_TOOL_ID } from '../lock-selection/lock-selection'\n\nexport const SEARCHER_TOOL_ID = 'searcher'\n\nconst DEBOUNCE_DELAY = 300\n\n/**\n * Search input component that works with SearcherToggle.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * Reads the enabled state from the widget store using the provided id.\n * Uses a debounced search to filter data via the transformation pipeline.\n * Auto-focuses when enabled becomes true.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * order={10}\n * labels={{ placeholder: 'Search categories...' }}\n * />\n * ```\n */\nexport function Searcher({\n id,\n filterFn,\n order = 20,\n labels,\n TextFieldProps,\n ClearIcon,\n debounceDelay = DEBOUNCE_DELAY,\n}: SearcherProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const debounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Read enabled state and search text from widget store\n const widgetState = useWidgetStore((state) =>\n state.getWidget<SearcherState>(id),\n )\n const enabled = widgetState?.isSearchEnabled ?? false\n const searchText = widgetState?.searchText ?? ''\n const prevEnabledRef = useRef(enabled)\n\n const filter = filterFn ?? defaultFilterFn\n\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const setSearchText = useCallback(\n (text: string) => {\n setWidget(id, { searchText: text })\n },\n [id, setWidget],\n )\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: SEARCHER_TOOL_ID,\n order,\n enabled,\n fn: async (data, config) => {\n const searchTextFromConfig = (config?.searchText as string) || ''\n\n // Execute filter (can be sync or async)\n const result = filter(data as EchartWidgetData, searchTextFromConfig)\n\n // Return result directly (pipeline will handle Promise)\n return result\n },\n config: { searchText },\n disables: [LOCK_SELECTION_TOOL_ID],\n })\n\n return () => unregisterTool(id, SEARCHER_TOOL_ID)\n }, [id, order, filter, registerTool, unregisterTool, enabled, searchText])\n\n // Update enabled flag when it changes\n useEffect(() => {\n setToolEnabled(id, SEARCHER_TOOL_ID, enabled)\n }, [id, enabled, setToolEnabled])\n\n // Update config when search text changes (debounced)\n const debouncedUpdateConfig = useCallback(\n (text: string) => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n debounceTimeoutRef.current = setTimeout(() => {\n updateToolConfig(id, SEARCHER_TOOL_ID, { searchText: text })\n }, debounceDelay)\n },\n [id, updateToolConfig, debounceDelay],\n )\n\n // Auto-focus when enabled becomes true\n useEffect(() => {\n // Transition from disabled to enabled - focus input\n if (enabled && !prevEnabledRef.current && inputRef.current) {\n inputRef.current.focus()\n }\n\n prevEnabledRef.current = enabled\n }, [enabled])\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n }\n }, [])\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value\n setSearchText(newValue)\n debouncedUpdateConfig(newValue)\n },\n [debouncedUpdateConfig, setSearchText],\n )\n\n const handleClear = useCallback(() => {\n setSearchText('')\n updateToolConfig(id, SEARCHER_TOOL_ID, { searchText: '' })\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }, [id, setSearchText, updateToolConfig])\n\n if (!enabled) {\n return null\n }\n\n const placeholder = labels?.placeholder ?? 'Search...'\n const clearAriaLabel = labels?.clearAriaLabel ?? 'Clear search'\n\n return (\n <TextField\n inputRef={inputRef}\n size='small'\n fullWidth\n variant='filled'\n placeholder={placeholder}\n value={searchText}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position='start'>\n <SearchOutlined />\n </InputAdornment>\n ),\n endAdornment: searchText ? (\n <InputAdornment position='end'>\n <IconButton\n size='small'\n aria-label={clearAriaLabel}\n onClick={handleClear}\n edge='end'\n >\n {ClearIcon ?? <ClearOutlined fontSize='small' />}\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n {...TextFieldProps}\n />\n )\n}\n\n/**\n * Default filter function that searches all string fields case-insensitively.\n * Note: Should be synchronous for the new pipeline architecture.\n */\nconst defaultFilterFn: SearcherFilterFn = (\n data: EchartWidgetData,\n searchText: string,\n) => {\n if (!searchText.trim()) return Promise.resolve(data)\n\n const lowerSearch = searchText.toLowerCase()\n\n return Promise.resolve(\n data.map((series) =>\n series.filter((item) =>\n Object.values(item).some(\n (value) =>\n typeof value === 'string' &&\n value.toLowerCase().includes(lowerSearch),\n ),\n ),\n ),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { SearcherToggleProps, SearcherState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\n/**\n * Widget action button to toggle search functionality.\n *\n * Stores the enabled state in the widget store using the provided id.\n * When search is active, the button shows an active state with a light background.\n * Use in conjunction with the Searcher component to display the search input.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * data={widgetData}\n * />\n * ```\n */\nexport function SearcherToggle({\n id,\n defaultEnabled = false,\n labels,\n Icon,\n IconButtonProps,\n}: SearcherToggleProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const storeIsEnabled = useWidgetStore(\n useShallow((state) => state.getWidget<SearcherState>(id)?.isSearchEnabled),\n )\n\n const isEnabled = storeIsEnabled ?? defaultEnabled\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue = getWidget<SearcherState>(id)?.isSearchEnabled\n if (currentValue === undefined) {\n setWidget(id, { isSearchEnabled: defaultEnabled })\n }\n }, [defaultEnabled, getWidget, id, setWidget])\n\n const handleToggle = useCallback(() => {\n setWidget(id, { isSearchEnabled: !isEnabled })\n }, [id, isEnabled, setWidget])\n\n const tooltipLabel = isEnabled\n ? (labels?.disable ?? 'Disable search')\n : (labels?.enable ?? 'Enable search')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isEnabled}\n {...IconButtonProps}\n >\n {Icon ?? <SearchOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n","export const ChangeColumnIcon = () => (\n <svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 18 18'>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M14.25 2.25H3.75c-.825 0-1.5.675-1.5 1.5v10.5c0 .825.675 1.5 1.5 1.5h10.5c.825 0 1.5-.675 1.5-1.5V3.75c0-.825-.675-1.5-1.5-1.5m-3.75 12h-3V3.75h3zM3.75 3.75H6v10.5H3.75zM12 14.25V3.75h2.25v10.5z'\n clipRule='evenodd'\n />\n </svg>\n)\n","import { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ListItemText, MenuItem } from '@mui/material'\nimport type { TableColumn } from '../../table/types'\n\nexport interface SortableColumnItemProps {\n column: TableColumn\n}\n\n/**\n * A draggable menu item for column reordering.\n * Uses @dnd-kit/sortable for drag-and-drop functionality.\n */\nexport function SortableColumnItem({ column }: SortableColumnItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n cursor: isDragging ? 'grabbing' : 'grab',\n }\n\n return (\n <MenuItem\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n role='menuitem'\n tabIndex={0}\n sx={{\n '&:focus-visible': {\n outline: (theme) => `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n >\n <ListItemText>{column.label}</ListItemText>\n </MenuItem>\n )\n}\n","import {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { IconButton, Menu, SvgIcon } from '@mui/material'\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type MouseEvent,\n} from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { ChangeColumnProps } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport type { TableColumn, TableWidgetState } from '../../table/types'\nimport { ChangeColumnIcon } from './change-column-icon'\nimport { SortableColumnItem } from './sortable-column-item'\nimport { useShallow } from 'zustand/shallow'\n\nexport const CHANGE_COLUMN_TOOL_ID = 'change-column'\n\n/**\n * Widget action to reorder columns in a table widget via drag-and-drop.\n *\n * This action reads the columns from the widget store and allows users to\n * drag and drop columns to reorder them. All columns are displayed and\n * can be reordered.\n *\n * Registers as a config pipeline tool so that column order is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Returns null if there are fewer than 2 columns.\n *\n * @example\n * ```tsx\n * <ChangeColumn id=\"my-table-widget\" />\n * ```\n */\nexport function ChangeColumn({\n id,\n labels,\n Icon,\n IconButtonProps,\n MenuProps,\n}: ChangeColumnProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const columns = useWidgetStore(\n useShallow((state) => state.getWidget<TableWidgetState>(id)?.columns),\n )\n\n /**\n * Config tool function that reorders columns to match the current widget state.\n * Reads desired order from the widget store (set by handleDragEnd via setWidget).\n * Preserves referential identity when the order already matches to prevent\n * re-render loops in the config pipeline.\n */\n const reorderFn = useCallback(\n (currentConfig: unknown): unknown => {\n const widgetState = useWidgetStore\n .getState()\n .getWidget<TableWidgetState>(id)\n const currentColumns = widgetState?.columns\n if (!currentColumns || currentColumns.length === 0) return currentConfig\n\n const config = currentConfig as Record<string, unknown>\n const configColumns = config.columns as TableColumn[] | undefined\n if (!configColumns || configColumns.length === 0) return currentConfig\n\n // Check if config columns are already in the same order as widget columns\n const alreadyMatches =\n configColumns.length === currentColumns.length &&\n configColumns.every((col, i) => col.id === currentColumns[i]?.id)\n if (alreadyMatches) return currentConfig\n\n // Reorder config columns to match widget column order\n const columnMap = new Map(configColumns.map((col) => [col.id, col]))\n const reordered: TableColumn[] = []\n\n for (const widgetCol of currentColumns) {\n const col = columnMap.get(widgetCol.id)\n if (col) {\n reordered.push(col)\n columnMap.delete(widgetCol.id)\n }\n }\n\n // Append any new columns not in the widget order\n for (const col of columnMap.values()) {\n reordered.push(col)\n }\n\n // If result matches current widget columns, reuse the same array reference\n // to prevent downstream subscribers from detecting a change\n const matchesWidget =\n reordered.length === currentColumns.length &&\n reordered.every((col, i) => col.id === currentColumns[i]?.id)\n\n return { ...config, columns: matchesWidget ? currentColumns : reordered }\n },\n [id],\n )\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const columnIds = useMemo(\n () => columns?.map((col) => col.id) ?? [],\n [columns],\n )\n\n // Register config tool on mount\n useEffect(() => {\n registerTool(id, {\n id: CHANGE_COLUMN_TOOL_ID,\n type: 'config',\n order: 100,\n enabled: true,\n fn: reorderFn,\n })\n return () => unregisterTool(id, CHANGE_COLUMN_TOOL_ID)\n }, [id, registerTool, unregisterTool, reorderFn])\n\n const handleToggle = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }, [])\n\n const handleClose = useCallback(() => {\n setAnchorEl(null)\n }, [])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id || !columns) return\n const oldIndex = columns.findIndex((col) => col.id === active.id)\n const newIndex = columns.findIndex((col) => col.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex)\n setWidget(id, { columns: newColumns })\n }\n }\n\n // Return null if there are fewer than 2 columns\n if (!columns || columns.length < 2) {\n return null\n }\n\n const tooltipLabel = labels?.tooltip ?? 'Change column'\n const isOpen = Boolean(anchorEl)\n\n return (\n <>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n aria-controls={isOpen ? 'change-column-menu' : undefined}\n aria-haspopup='true'\n aria-expanded={isOpen ? 'true' : undefined}\n onClick={handleToggle}\n data-active={isOpen}\n sx={actionButtonStyles.trigger}\n {...IconButtonProps}\n >\n {Icon ?? (\n <SvgIcon>\n <ChangeColumnIcon />\n </SvgIcon>\n )}\n </IconButton>\n </Tooltip>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <Menu\n id='change-column-menu'\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n {...MenuProps}\n >\n <SortableContext\n items={columnIds}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((column) => (\n <SortableColumnItem key={column.id} column={column} />\n ))}\n </SortableContext>\n </Menu>\n </DndContext>\n </>\n )\n}\n"],"names":["styles","title","container","display","alignItems","justifyContent","gap","content","flexDirection","spacing","FullScreen","t0","$","_c","id","labels","children","Icon","IconButtonProps","DialogContentProps","t1","DialogProps","t2","undefined","sx","t3","state","getWidget","isFullScreen","useWidgetStore","useShallow","t4","state_0","setWidget","_temp","t5","updates","updateFullScreenConfig","t6","t7","FullscreenOutlined","t8","IconButton","t9","t10","ariaLabel","t11","t12","t13","Typography","t14","t15","Symbol","for","Close","t16","jsx","t17","DialogTitle","t18","t19","DialogContent","t20","Dialog","t21","state_1","Download","items","data","isDownloading","setIsDownloading","useState","anchorEl","setAnchorEl","event","stopPropagation","currentTarget","handleToggle","data_0","option","link","document","createElement","href","download","filename","style","body","appendChild","click","removeChild","callback","handleDownload","event_0","option_0","result","modifier","handleClick","length","CircularProgress","FileDownloadOutlined","vertical","horizontal","Boolean","paddingBottom","option_1","jsxs","MenuItem","disabled","e","icon","ListItemIcon","color","ListItemText","label","map","Menu","actionButtonStyles","trigger","background","theme","palette","primary","relatedLight","calculateTotal","reduce","total","series","seriesTotal","item","Array","isArray","value","at","Object","entries","itemTotal","key","toRelativeData","index","transformed","RELATIVE_DATA_TOOL_ID","RelativeData","order","defaultIsRelative","previousMaxValue","useRef","originalFormatter","_temp2","registerTool","_temp3","unregisterTool","_temp4","setToolEnabled","_temp5","state_4","isRelative","useEffect","enabled","fn","_temp6","newIsRelative","max","current","widget","formatter","currentMax","widget_0","Intl","NumberFormat","locale","minimumFractionDigits","maximumFractionDigits","format","tooltipLabel","absolute","relative","PercentOutlined","Tooltip","echartData","state_3","state_2","ZOOM_TOGGLE_TOOL_ID","ZoomToggle","defaultZoom","defaultZoomStart","defaultZoomEnd","ResetIcon","useTheme","updateToolConfig","registeredTools","find","zoomTool","zoom","zoomStart","config","start","zoomEnd","end","zoomEvent","batch","handleDataZoom","existingTool","_temp7","initialEnabled","initialStart","initialEnd","type","currentConfig","toolConfig","currentOnEvents","onEvents","start_0","end_0","legend","hasLegend","show","sliderHeight","parseInt","zoomConfig","getEChartZoomConfig","inside","xSlider","ySlider","bottomOffset","legendBottomOffset","grid","currentGridBottom","bottom","gridBottom","onEventsWithoutDataZoom","dataZoom","newZoom","handleReset","enableLabel","enable","disableLabel","disable","resetLabel","reset","ZoomInOutlined","SubdirectoryArrowLeftOutlined","Box","tool_0","tool","GroupedBarChartIcon","STACK_TOGGLE_TOOL_ID","StackToggle","defaultIsStacked","isStacked","storeIsStacked","state_5","bb0","hasMultiSeries","hasStackInSeries","some","effectiveDefaultIsStacked","stacked","unstacked","updatedSeries","s_0","existingStack","s","stack","getEChartStackConfig","DEFAULT_STACK_GROUP","LOCK_SELECTION_TOOL_ID","LockSelection","selectedItems","isLocked","lockedItems","unlock","lock","CheckBoxOutlined","filterDataByLockedItems","filter","name","includes","SEARCHER_TOOL_ID","DEBOUNCE_DELAY","Searcher","filterFn","TextFieldProps","ClearIcon","debounceDelay","inputRef","debounceTimeoutRef","widgetState","isSearchEnabled","searchText","prevEnabledRef","defaultFilterFn","text","setSearchText","searchTextFromConfig","disables","text_0","clearTimeout","setTimeout","debouncedUpdateConfig","focus","newValue","target","handleChange","handleClear","placeholder","clearAriaLabel","InputAdornment","SearchOutlined","ClearOutlined","startAdornment","endAdornment","TextField","trim","Promise","resolve","lowerSearch","toLowerCase","values","SearcherToggle","defaultEnabled","isEnabled","ChangeColumnIcon","SortableColumnItem","column","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","toString","opacity","cursor","outline","outlineOffset","main","CHANGE_COLUMN_TOOL_ID","ChangeColumn","MenuProps","columns","currentColumns","getState","configColumns","every","col","i","columnMap","Map","reordered","widgetCol","col_1","get","push","delete","col_2","matchesWidget","col_3","i_0","reorderFn","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","columnIds","handleClose","active","over","oldIndex","findIndex","col_5","newIndex","col_6","newColumns","arrayMove","handleDragEnd","tooltip","isOpen","SvgIcon","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","t22","col_4","col_0"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","sources":["../../src/widgets/actions/fullscreen/styles.ts","../../src/widgets/actions/fullscreen/fullscreen.tsx","../../src/widgets/actions/download/download.tsx","../../src/widgets/actions/shared/styles.ts","../../src/widgets/actions/relative-data/utils.ts","../../src/widgets/actions/relative-data/relative-data.tsx","../../src/widgets/actions/zoom-toggle/style.ts","../../src/widgets/actions/zoom-toggle/zoom-toggle.tsx","../../src/widgets/actions/stack-toggle/grouped-bar-chart-icon.tsx","../../src/widgets/actions/stack-toggle/stack-toggle.tsx","../../src/widgets/actions/lock-selection/lock-selection.tsx","../../src/widgets/actions/searcher/searcher.tsx","../../src/widgets/actions/searcher/searcher-toggle.tsx","../../src/widgets/actions/change-column/change-column-icon.tsx","../../src/widgets/actions/change-column/sortable-column-item.tsx","../../src/widgets/actions/change-column/change-column.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n title: {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n },\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: ({ spacing }) => spacing(1),\n },\n} satisfies Record<string, SxProps<Theme>>\n","import {\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from '@mui/material'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { Close, FullscreenOutlined } from '@mui/icons-material'\nimport type {\n FullScreenConfig,\n FullScreenProps,\n FullScreenState,\n} from './types'\nimport { styles } from './styles'\nimport { useShallow } from 'zustand/shallow'\n\nconst EMPTY_DIALOG_CONTENT_PROPS: NonNullable<\n FullScreenProps['DialogContentProps']\n> = {}\n\nexport function FullScreen({\n id,\n labels,\n children,\n Icon,\n IconButtonProps,\n DialogContentProps: {\n sx,\n ...DialogContentProps\n } = EMPTY_DIALOG_CONTENT_PROPS,\n DialogProps,\n}: FullScreenProps) {\n const isFullScreen = useWidgetStore(\n useShallow((state) => state.getWidget<FullScreenState>(id)?.isFullScreen),\n )\n const title = useWidgetStore(\n useShallow((state) => state.getWidget<FullScreenState>(id)?.title),\n )\n const setWidget = useWidgetStore((state) => state.setWidget)\n\n const updateFullScreenConfig = (updates: Partial<FullScreenConfig>) => {\n setWidget<FullScreenState>(id, {\n isFullScreen: updates.isFullScreen,\n })\n }\n\n return (\n <>\n <IconButton\n {...IconButtonProps}\n onClick={() => updateFullScreenConfig({ isFullScreen: true })}\n >\n {Icon ?? <FullscreenOutlined />}\n </IconButton>\n <Dialog\n maxWidth={false}\n open={!!isFullScreen}\n keepMounted\n aria-labelledby={labels?.ariaLabel ?? `fullscreen-dialog-title-${id}`}\n {...DialogProps}\n onClose={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <DialogTitle\n id={`fullscreen-dialog-title-${id}`}\n sx={styles.title.container}\n >\n <Typography variant='subtitle1' component='span'>\n {title}\n </Typography>\n <IconButton\n onClick={() => updateFullScreenConfig({ isFullScreen: false })}\n >\n <Close />\n </IconButton>\n </DialogTitle>\n <DialogContent\n sx={{\n ...styles.content,\n ...sx,\n }}\n {...DialogContentProps}\n >\n {children}\n </DialogContent>\n </Dialog>\n </>\n )\n}\n","import {\n CircularProgress,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n} from '@mui/material'\nimport type { DownloadItem, DownloadProps } from './types'\nimport { FileDownloadOutlined } from '@mui/icons-material'\nimport { useState, type MouseEvent } from 'react'\nimport { useWidgetStore } from '../../../widgets'\nimport { useShallow } from 'zustand/shallow'\n\nconst EMPTY_LABELS: NonNullable<DownloadProps['labels']> = {}\n\nexport function Download({\n id,\n items,\n labels = EMPTY_LABELS,\n Icon,\n IconButtonProps,\n}: DownloadProps) {\n const data = useWidgetStore(useShallow((state) => state.getWidget(id)?.data))\n\n const [isDownloading, setIsDownloading] = useState(false)\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\n const handleToggle = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }\n\n const handleDownload = (data: string, option: DownloadItem) => {\n const link = document.createElement('a')\n link.href = data\n link.download = option.filename ?? id\n link.style.display = 'none'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n option.callback?.(link.href)\n }\n\n const handleClick = async (\n event: MouseEvent<HTMLElement>,\n option: DownloadItem,\n ) => {\n event.stopPropagation()\n\n setIsDownloading(true)\n setAnchorEl(null)\n\n const result = await option.modifier(data)\n\n if (!result) {\n setIsDownloading(false)\n return\n }\n\n handleDownload(result, option)\n setIsDownloading(false)\n }\n\n return (\n <>\n <IconButton\n size='small'\n aria-label={labels.ariaLabel ?? 'download options'}\n aria-controls='options-menu'\n aria-haspopup='true'\n onClick={handleToggle}\n {...IconButtonProps}\n disabled={isDownloading || items.length === 0}\n className={isDownloading || anchorEl ? 'active' : ''}\n >\n {isDownloading ? (\n <CircularProgress size={18} color='inherit' />\n ) : (\n (Icon ?? <FileDownloadOutlined />)\n )}\n </IconButton>\n <Menu\n variant='menu'\n elevation={8}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: {\n paddingBottom: 0,\n },\n }}\n >\n {items.map((option) => (\n <MenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={(e) => void handleClick(e, option)}\n >\n {option.icon && (\n <ListItemIcon sx={{ color: 'text.primary' }}>\n {option.icon}\n </ListItemIcon>\n )}\n <ListItemText>{option.label}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\n/**\n * Shared styles for widget action buttons\n */\nexport const actionButtonStyles = {\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import type { EchartWidgetData } from '../../echart/types'\n\n/**\n * Calculates the sum of all numeric values in the data\n */\nexport function calculateTotal(data: EchartWidgetData): number {\n return data.reduce((total, series) => {\n return series.reduce((seriesTotal, item) => {\n if (Array.isArray(item)) {\n const value = item.at(-1) as number\n return typeof value === 'number' ? seriesTotal + value : seriesTotal\n }\n\n return Object.entries(item).reduce((itemTotal: number, [key, value]) => {\n if (key === 'name') {\n return itemTotal\n }\n return typeof value === 'number' ? itemTotal + value : itemTotal\n }, seriesTotal)\n }, total)\n }, 0)\n}\n\n/**\n * Transforms data to relative (percentage) values\n */\nexport function toRelativeData(\n data: EchartWidgetData,\n total: number,\n): EchartWidgetData {\n if (total === 0) return data\n\n return data.map((series) =>\n series.map((item) => {\n if (Array.isArray(item)) {\n return item.map((value: number, index) => {\n if (index === item.length - 1 && typeof value === 'number') {\n return (value / total) * 100\n }\n return value\n }) as typeof item\n }\n\n const transformed: Record<string, string | number> = {}\n\n for (const [key, value] of Object.entries(item)) {\n if (key === 'name') {\n transformed[key] = value\n continue\n }\n transformed[key] =\n typeof value === 'number' ? (value / total) * 100 : value\n }\n\n return transformed\n }),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { PercentOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { RelativeDataProps, RelativeDataState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { calculateTotal, toRelativeData } from './utils'\nimport type { EchartWidgetData } from '../../../widgets/echart'\n\nexport const RELATIVE_DATA_TOOL_ID = 'relative-data'\n\n/**\n * Widget action to toggle between relative (percentage) and absolute data display.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * When relative mode is active, transforms data to percentages via the pipeline.\n *\n * @example\n * ```tsx\n * <RelativeData\n * id=\"my-widget\"\n * order={20}\n * defaultIsRelative={false}\n * />\n * ```\n */\nexport function RelativeData({\n id,\n order = 10,\n defaultIsRelative = false,\n labels,\n Icon,\n IconButtonProps,\n}: RelativeDataProps) {\n const previousMaxValue = useRef<number | undefined>(undefined)\n const originalFormatter = useRef<((value: number) => string) | undefined>(\n undefined,\n )\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n\n const storeIsRelative = useWidgetStore(\n (state) => state.getWidget<RelativeDataState>(id)?.isRelative,\n )\n\n const isRelative = storeIsRelative ?? defaultIsRelative\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue = getWidget<RelativeDataState>(id)?.isRelative\n if (currentValue === undefined) {\n setWidget(id, { isRelative: defaultIsRelative })\n }\n }, [defaultIsRelative, getWidget, id, setWidget])\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: RELATIVE_DATA_TOOL_ID,\n order,\n enabled: isRelative,\n fn: (data) => {\n const echartData = data as EchartWidgetData\n const total = calculateTotal(echartData)\n return toRelativeData(echartData, total)\n },\n })\n\n return () => unregisterTool(id, RELATIVE_DATA_TOOL_ID)\n }, [id, order, registerTool, unregisterTool, isRelative])\n\n const handleToggle = useCallback(() => {\n const newIsRelative = !isRelative\n setToolEnabled(id, RELATIVE_DATA_TOOL_ID, newIsRelative)\n let max = previousMaxValue.current\n\n if (newIsRelative) {\n // Backup current formatter to ref\n const widget = getWidget(id) as {\n formatter?: (value: number) => string\n locale?: string\n }\n originalFormatter.current = widget?.formatter\n\n // Save current max value before setting to 100\n const currentMax = (getWidget(id) as { max?: number })?.max\n previousMaxValue.current = currentMax\n max = 100\n }\n\n setWidget(id, {\n isRelative: newIsRelative,\n max,\n formatter: newIsRelative\n ? (value: number) => {\n const widget = getWidget(id) as { locale?: string }\n return new Intl.NumberFormat(widget?.locale, {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }).format(value / 100)\n }\n : originalFormatter.current,\n })\n }, [isRelative, setWidget, id, getWidget, setToolEnabled])\n\n const tooltipLabel = isRelative\n ? (labels?.absolute ?? 'Show absolute values')\n : (labels?.relative ?? 'Show relative values')\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isRelative}\n {...IconButtonProps}\n >\n {Icon ?? <PercentOutlined />}\n </IconButton>\n </Tooltip>\n )\n}\n","import type { SxProps, Theme } from '@mui/material'\n\nexport const styles = {\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: ({ spacing }) => spacing(0.25),\n },\n trigger: {\n '&[data-active=\"true\"]': {\n background: (theme: Theme) => theme.palette.primary.relatedLight,\n },\n },\n} satisfies Record<string, SxProps<Theme>>\n","import { Box, IconButton, useTheme } from '@mui/material'\nimport {\n SubdirectoryArrowLeftOutlined,\n ZoomInOutlined,\n} from '@mui/icons-material'\nimport { useEffect, useCallback } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { ZoomToggleProps } from './types'\nimport { styles } from './style'\nimport { Tooltip } from '../../../components'\nimport { getEChartZoomConfig } from '../../echart/utils'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useShallow } from 'zustand/shallow'\n\nexport const ZOOM_TOGGLE_TOOL_ID = 'zoom-toggle'\n\n/**\n * Widget action to toggle EChart zoom functionality.\n *\n * Registers as a config pipeline tool so that zoom configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * When zoom is active, displays an inline reset button to disable zoom.\n * Only intended for use in fullscreen ToolbarActions for bar and histogram widgets.\n *\n * @example\n * ```tsx\n * <ZoomToggle\n * id=\"my-widget\"\n * defaultZoom={false}\n * zoomStart={0}\n * zoomEnd={100}\n * />\n * ```\n */\nexport function ZoomToggle({\n id,\n defaultZoom = false,\n defaultZoomStart = 0,\n defaultZoomEnd = 100,\n labels,\n Icon,\n ResetIcon,\n IconButtonProps,\n}: ZoomToggleProps) {\n const theme = useTheme()\n const getWidget = useWidgetStore((state) => state.getWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const zoomTool = useWidgetStore(\n useShallow((state) => {\n const tools = state.getWidget(id)?.registeredTools ?? []\n return tools.find((tool) => tool.id === ZOOM_TOGGLE_TOOL_ID)\n }),\n )\n\n const zoom = zoomTool?.enabled ?? defaultZoom\n const zoomStart =\n (zoomTool?.config?.start as number | undefined) ?? defaultZoomStart\n const zoomEnd =\n (zoomTool?.config?.end as number | undefined) ?? defaultZoomEnd\n\n // Handle dataZoom event to update zoom range in tool config\n const handleDataZoom = useCallback(\n (event: unknown) => {\n const zoomEvent = event as {\n start?: number\n end?: number\n batch?: {\n start?: number\n end?: number\n }[]\n }\n\n const start = zoomEvent.start ?? zoomEvent.batch?.[0]?.start\n const end = zoomEvent.end ?? zoomEvent.batch?.[0]?.end\n\n if (start !== undefined && end !== undefined) {\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, true)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: true,\n start,\n end,\n })\n }\n },\n [id, setToolEnabled, updateToolConfig],\n )\n\n // Register config tool on mount\n useEffect(() => {\n const existingTool = getWidget(id)?.registeredTools?.find(\n (tool) => tool.id === ZOOM_TOGGLE_TOOL_ID,\n )\n\n const initialEnabled = existingTool?.enabled ?? defaultZoom\n const initialStart =\n (existingTool?.config?.start as number | undefined) ?? defaultZoomStart\n const initialEnd =\n (existingTool?.config?.end as number | undefined) ?? defaultZoomEnd\n\n registerTool(id, {\n id: ZOOM_TOGGLE_TOOL_ID,\n type: 'config',\n order: 20,\n enabled: initialEnabled,\n fn: (currentConfig, toolConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n const currentOnEvents =\n (config.onEvents as Record<string, unknown> | undefined) ?? {}\n\n const enabled = (toolConfig?.enabled as boolean) ?? false\n const start = (toolConfig?.start as number) ?? 0\n const end = (toolConfig?.end as number) ?? 100\n\n const legend = option?.legend as { show?: boolean } | undefined\n const hasLegend = legend?.show !== false && legend !== undefined\n\n const sliderHeight = parseInt(theme?.spacing?.(4) ?? '32')\n const sliderGap = 8\n const legendBottomOffset = hasLegend ? 28 : 0\n\n const zoomConfig = getEChartZoomConfig(\n enabled,\n { start, end },\n {\n inside: true,\n xSlider: true,\n ySlider: false,\n bottomOffset: legendBottomOffset,\n },\n theme,\n )\n\n const grid = option?.grid as { bottom?: number | string } | undefined\n const currentGridBottom =\n typeof grid?.bottom === 'number'\n ? grid.bottom\n : parseInt(grid?.bottom ?? '24')\n\n const gridBottom = enabled\n ? currentGridBottom + sliderHeight + sliderGap\n : currentGridBottom\n\n const onEventsWithoutDataZoom = { ...currentOnEvents }\n delete onEventsWithoutDataZoom.dataZoom\n const onEvents = enabled\n ? { ...currentOnEvents, dataZoom: handleDataZoom }\n : onEventsWithoutDataZoom\n\n return {\n ...config,\n option: {\n ...option,\n ...zoomConfig,\n grid: { ...grid, bottom: gridBottom },\n },\n onEvents,\n }\n },\n config: {\n enabled: initialEnabled,\n start: initialStart,\n end: initialEnd,\n },\n })\n return () => unregisterTool(id, ZOOM_TOGGLE_TOOL_ID)\n }, [\n defaultZoom,\n defaultZoomEnd,\n defaultZoomStart,\n getWidget,\n handleDataZoom,\n id,\n registerTool,\n theme,\n unregisterTool,\n ])\n\n const handleToggle = () => {\n const newZoom = !zoom\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, newZoom)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: newZoom,\n start: newZoom ? zoomStart : 0,\n end: newZoom ? zoomEnd : 100,\n })\n }\n\n const handleReset = () => {\n setToolEnabled(id, ZOOM_TOGGLE_TOOL_ID, true)\n updateToolConfig(id, ZOOM_TOGGLE_TOOL_ID, {\n enabled: true,\n start: defaultZoomStart,\n end: defaultZoomEnd,\n })\n }\n\n const enableLabel = labels?.enable ?? 'Enable zoom'\n const disableLabel = labels?.disable ?? 'Disable zoom'\n const resetLabel = labels?.reset ?? 'Reset zoom'\n const tooltipLabel = zoom ? disableLabel : enableLabel\n\n return (\n <Box sx={styles.container}>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={styles.trigger}\n data-active={zoom}\n {...IconButtonProps}\n >\n {Icon ?? <ZoomInOutlined />}\n </IconButton>\n </Tooltip>\n {zoom && (\n <Tooltip title={resetLabel}>\n <IconButton\n size='small'\n aria-label={resetLabel}\n onClick={handleReset}\n {...IconButtonProps}\n >\n {ResetIcon ?? <SubdirectoryArrowLeftOutlined />}\n </IconButton>\n </Tooltip>\n )}\n </Box>\n )\n}\n","export const GroupedBarChartIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M4 20V8H8V20H4ZM9 20V13H13V20H9ZM16 20V4H20V20H16Z'\n fill='currentColor'\n />\n </svg>\n)\n","import { IconButton } from '@mui/material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { StackToggleProps, StackToggleState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { GroupedBarChartIcon } from './grouped-bar-chart-icon'\nimport { getEChartStackConfig } from '../../echart/utils'\nimport { DEFAULT_STACK_GROUP } from '../../echart/const'\nimport type { EchartWidgetState } from '../../echart/types'\nimport type { EchartOptionsProps } from '../../echart/types'\nimport { useShallow } from 'zustand/shallow'\n\nexport const STACK_TOGGLE_TOOL_ID = 'stack-toggle'\n\n/**\n * Widget action to toggle stacking behavior in ECharts bar and histogram widgets.\n *\n * Registers as a config pipeline tool so that stack configuration is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * @example\n * ```tsx\n * <StackToggle\n * id=\"my-widget\"\n * defaultIsStacked={false}\n * />\n * ```\n */\nexport function StackToggle({\n id,\n defaultIsStacked = false,\n labels,\n Icon,\n IconButtonProps,\n}: StackToggleProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const storeIsStacked = useWidgetStore(\n useShallow((state) => state.getWidget<StackToggleState>(id)?.isStacked),\n )\n\n const option = useWidgetStore(\n useShallow((state) => state.getWidget<EchartWidgetState>(id)?.option),\n )\n\n const { hasMultiSeries, hasStackInSeries } = useMemo(() => {\n if (!option) return { hasMultiSeries: false, hasStackInSeries: false }\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n return {\n hasMultiSeries: series.length > 1,\n hasStackInSeries: series.some((s) => (s as { stack?: string })?.stack),\n }\n }, [option])\n\n // If series already has stack defined, default to stacked=true\n const effectiveDefaultIsStacked = hasStackInSeries || defaultIsStacked\n const isStacked = storeIsStacked ?? effectiveDefaultIsStacked\n\n // Register config tool on mount\n useEffect(() => {\n registerTool(id, {\n id: STACK_TOGGLE_TOOL_ID,\n type: 'config',\n order: 10,\n enabled: isStacked && hasMultiSeries,\n fn: (currentConfig, toolConfig) => {\n const config = currentConfig as Record<string, unknown>\n const option = config.option as EchartOptionsProps | undefined\n if (!option) return currentConfig\n\n const stacked = (toolConfig?.stacked as boolean) ?? false\n const series = Array.isArray(option.series)\n ? option.series\n : [option.series]\n const updatedSeries = series.map((s) => {\n const existingStack = (s as { stack?: string })?.stack\n const stackGroup =\n typeof existingStack === 'string'\n ? existingStack\n : DEFAULT_STACK_GROUP\n return { ...s, ...getEChartStackConfig(stacked, stackGroup) }\n })\n\n return { ...config, option: { ...option, series: updatedSeries } }\n },\n config: { stacked: isStacked },\n })\n return () => unregisterTool(id, STACK_TOGGLE_TOOL_ID)\n }, [id, registerTool, unregisterTool, isStacked, hasMultiSeries])\n\n // Sync tool enabled/config when state changes\n useEffect(() => {\n setToolEnabled(id, STACK_TOGGLE_TOOL_ID, isStacked && hasMultiSeries)\n updateToolConfig(id, STACK_TOGGLE_TOOL_ID, { stacked: isStacked })\n }, [id, isStacked, hasMultiSeries, setToolEnabled, updateToolConfig])\n\n // Initialize store with default value only if not already configured\n useEffect(() => {\n if (storeIsStacked !== undefined) return\n setWidget(id, { isStacked: effectiveDefaultIsStacked })\n }, [effectiveDefaultIsStacked, id, setWidget, storeIsStacked])\n\n const handleToggle = useCallback(() => {\n setWidget(id, { isStacked: !isStacked })\n }, [isStacked, id, setWidget])\n\n const tooltipLabel = isStacked\n ? (labels?.unstacked ?? 'Disable stacking')\n : (labels?.stacked ?? 'Enable stacking')\n\n // Early return if there's only one series - stacking doesn't apply\n if (!hasMultiSeries) {\n return null\n }\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isStacked}\n {...IconButtonProps}\n >\n {Icon ?? <GroupedBarChartIcon />}\n </IconButton>\n </Tooltip>\n )\n}\n","import { IconButton } from '@mui/material'\nimport { CheckBoxOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect, useMemo } from 'react'\nimport type { LockSelectionProps, LockSelectionState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\nimport type { EchartWidgetData } from '../../echart/types'\n\nexport const LOCK_SELECTION_TOOL_ID = 'lock-selection'\n\n/**\n * Widget action button to lock the current selection.\n *\n * When locked, the widget data is filtered to only show the selected items.\n * The button is only visible when there are selected items.\n * Registers a transformation tool in the widget pipeline when mounted.\n *\n * @example\n * ```tsx\n * <LockSelection\n * id=\"my-widget\"\n * order={30}\n * selectedItems={selectedItems}\n * />\n * ```\n */\nexport function LockSelection({\n id,\n selectedItems,\n order = 30,\n labels,\n Icon,\n IconButtonProps,\n}: LockSelectionProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const setToolEnabled = useWidgetStore((state) => state.setToolEnabled)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const storeIsLocked = useWidgetStore(\n useShallow((state) => state.getWidget<LockSelectionState>(id)?.isLocked),\n )\n\n const isLocked = storeIsLocked ?? false\n const lockedItems = useMemo(\n () => (isLocked ? selectedItems : []),\n [isLocked, selectedItems],\n )\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: LOCK_SELECTION_TOOL_ID,\n order,\n enabled: isLocked,\n fn: (data, config) => {\n const items = (config?.lockedItems as string[]) || []\n if (items.length === 0) return data\n\n return filterDataByLockedItems(data as EchartWidgetData, items)\n },\n config: { lockedItems },\n })\n\n return () => unregisterTool(id, LOCK_SELECTION_TOOL_ID)\n }, [id, order, registerTool, unregisterTool, isLocked, lockedItems])\n\n // Update enabled flag and config when they change\n useEffect(() => {\n setToolEnabled(id, LOCK_SELECTION_TOOL_ID, isLocked)\n updateToolConfig(id, LOCK_SELECTION_TOOL_ID, { lockedItems })\n }, [id, isLocked, lockedItems, setToolEnabled, updateToolConfig])\n\n const handleToggle = useCallback(() => {\n if (isLocked) {\n // Unlock: clear locked items and disable tool\n setWidget(id, {\n isLocked: false,\n lockedItems: [],\n })\n } else {\n // Lock: save selected items and enable tool\n setWidget(id, {\n isLocked: true,\n lockedItems: selectedItems,\n })\n }\n }, [id, isLocked, selectedItems, setWidget])\n\n // Don't render if no selections\n if (selectedItems.length === 0) {\n return null\n }\n\n const tooltipLabel = isLocked\n ? (labels?.unlock ?? 'Unlock selection')\n : (labels?.lock ?? 'Lock selection')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isLocked}\n {...IconButtonProps}\n >\n {Icon ?? <CheckBoxOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n\n/**\n * Filters widget data to only include items with names matching the locked items.\n */\nfunction filterDataByLockedItems(\n data: EchartWidgetData,\n lockedItems: string[],\n): EchartWidgetData {\n return data.map((series) =>\n series.filter((item) => {\n const name = item.name\n return typeof name === 'string' && lockedItems.includes(name)\n }),\n )\n}\n","import { TextField, InputAdornment, IconButton } from '@mui/material'\nimport { ClearOutlined, SearchOutlined } from '@mui/icons-material'\nimport { useEffect, useRef, useCallback } from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { SearcherProps, SearcherFilterFn, SearcherState } from './types'\nimport type { EchartWidgetData } from '../../echart/types'\nimport { LOCK_SELECTION_TOOL_ID } from '../lock-selection/lock-selection'\n\nexport const SEARCHER_TOOL_ID = 'searcher'\n\nconst DEBOUNCE_DELAY = 300\n\n/**\n * Search input component that works with SearcherToggle.\n *\n * Registers a transformation tool in the widget pipeline when mounted.\n * Reads the enabled state from the widget store using the provided id.\n * Uses a debounced search to filter data via the transformation pipeline.\n * Auto-focuses when enabled becomes true.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * order={10}\n * labels={{ placeholder: 'Search categories...' }}\n * />\n * ```\n */\nexport function Searcher({\n id,\n filterFn,\n order = 20,\n labels,\n TextFieldProps,\n ClearIcon,\n debounceDelay = DEBOUNCE_DELAY,\n}: SearcherProps) {\n const inputRef = useRef<HTMLInputElement>(null)\n const debounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Read enabled state and search text from widget store\n const widgetState = useWidgetStore((state) =>\n state.getWidget<SearcherState>(id),\n )\n const enabled = widgetState?.isSearchEnabled ?? false\n const searchText = widgetState?.searchText ?? ''\n const prevEnabledRef = useRef(enabled)\n\n const filter = filterFn ?? defaultFilterFn\n\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const updateToolConfig = useWidgetStore((state) => state.updateToolConfig)\n\n const setSearchText = useCallback(\n (text: string) => {\n setWidget(id, { searchText: text })\n },\n [id, setWidget],\n )\n\n // Register tool on mount\n useEffect(() => {\n registerTool(id, {\n id: SEARCHER_TOOL_ID,\n order,\n enabled,\n fn: async (data, config) => {\n const searchTextFromConfig = (config?.searchText as string) || ''\n\n // Execute filter (can be sync or async)\n const result = filter(data as EchartWidgetData, searchTextFromConfig)\n\n // Return result directly (pipeline will handle Promise)\n return result\n },\n config: { searchText },\n disables: [LOCK_SELECTION_TOOL_ID],\n })\n\n return () => unregisterTool(id, SEARCHER_TOOL_ID)\n }, [id, order, filter, registerTool, unregisterTool, enabled, searchText])\n\n // Update config when search text changes (debounced)\n const debouncedUpdateConfig = useCallback(\n (text: string) => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n debounceTimeoutRef.current = setTimeout(() => {\n updateToolConfig(id, SEARCHER_TOOL_ID, { searchText: text })\n }, debounceDelay)\n },\n [id, updateToolConfig, debounceDelay],\n )\n\n // Auto-focus when enabled becomes true\n useEffect(() => {\n // Transition from disabled to enabled - focus input\n if (enabled && !prevEnabledRef.current && inputRef.current) {\n inputRef.current.focus()\n }\n\n prevEnabledRef.current = enabled\n }, [enabled])\n\n // Cleanup debounce timeout on unmount\n useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current)\n }\n }\n }, [])\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value\n setSearchText(newValue)\n debouncedUpdateConfig(newValue)\n },\n [debouncedUpdateConfig, setSearchText],\n )\n\n const handleClear = useCallback(() => {\n setSearchText('')\n updateToolConfig(id, SEARCHER_TOOL_ID, { searchText: '' })\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }, [id, setSearchText, updateToolConfig])\n\n if (!enabled) {\n return null\n }\n\n const placeholder = labels?.placeholder ?? 'Search...'\n const clearAriaLabel = labels?.clearAriaLabel ?? 'Clear search'\n\n return (\n <TextField\n inputRef={inputRef}\n size='small'\n fullWidth\n variant='filled'\n placeholder={placeholder}\n value={searchText}\n onChange={handleChange}\n InputProps={{\n startAdornment: (\n <InputAdornment position='start'>\n <SearchOutlined />\n </InputAdornment>\n ),\n endAdornment: searchText ? (\n <InputAdornment position='end'>\n <IconButton\n size='small'\n aria-label={clearAriaLabel}\n onClick={handleClear}\n edge='end'\n >\n {ClearIcon ?? <ClearOutlined fontSize='small' />}\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n {...TextFieldProps}\n />\n )\n}\n\n/**\n * Default filter function that searches all string fields case-insensitively.\n * Note: Should be synchronous for the new pipeline architecture.\n */\nconst defaultFilterFn: SearcherFilterFn = (\n data: EchartWidgetData,\n searchText: string,\n) => {\n if (!searchText.trim()) return Promise.resolve(data)\n\n const lowerSearch = searchText.toLowerCase()\n\n return Promise.resolve(\n data.map((series) =>\n series.filter((item) =>\n Object.values(item).some(\n (value) =>\n typeof value === 'string' &&\n value.toLowerCase().includes(lowerSearch),\n ),\n ),\n ),\n )\n}\n","import { IconButton } from '@mui/material'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { useCallback, useEffect } from 'react'\nimport type { SearcherToggleProps, SearcherState } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport { useShallow } from 'zustand/shallow'\n\n/**\n * Widget action button to toggle search functionality.\n *\n * Stores the enabled state in the widget store using the provided id.\n * When search is active, the button shows an active state with a light background.\n * Use in conjunction with the Searcher component to display the search input.\n *\n * @example\n * ```tsx\n * <SearcherToggle id=\"my-widget\" />\n * <Searcher\n * id=\"my-widget\"\n * data={widgetData}\n * />\n * ```\n */\nexport function SearcherToggle({\n id,\n defaultEnabled = false,\n labels,\n Icon,\n IconButtonProps,\n}: SearcherToggleProps) {\n const setWidget = useWidgetStore((state) => state.setWidget)\n const getWidget = useWidgetStore((state) => state.getWidget)\n const storeIsEnabled = useWidgetStore(\n useShallow((state) => state.getWidget<SearcherState>(id)?.isSearchEnabled),\n )\n\n const isEnabled = storeIsEnabled ?? defaultEnabled\n\n // Initialize store with default value on mount\n useEffect(() => {\n const currentValue = getWidget<SearcherState>(id)?.isSearchEnabled\n if (currentValue === undefined) {\n setWidget(id, { isSearchEnabled: defaultEnabled })\n }\n }, [defaultEnabled, getWidget, id, setWidget])\n\n const handleToggle = useCallback(() => {\n setWidget(id, { isSearchEnabled: !isEnabled })\n }, [id, isEnabled, setWidget])\n\n const tooltipLabel = isEnabled\n ? (labels?.disable ?? 'Disable search')\n : (labels?.enable ?? 'Enable search')\n\n const ariaLabel = labels?.ariaLabel ?? tooltipLabel\n\n return (\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={ariaLabel}\n onClick={handleToggle}\n sx={actionButtonStyles.trigger}\n data-active={isEnabled}\n {...IconButtonProps}\n >\n {Icon ?? <SearchOutlined fontSize='small' />}\n </IconButton>\n </Tooltip>\n )\n}\n","export const ChangeColumnIcon = () => (\n <svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 18 18'>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M14.25 2.25H3.75c-.825 0-1.5.675-1.5 1.5v10.5c0 .825.675 1.5 1.5 1.5h10.5c.825 0 1.5-.675 1.5-1.5V3.75c0-.825-.675-1.5-1.5-1.5m-3.75 12h-3V3.75h3zM3.75 3.75H6v10.5H3.75zM12 14.25V3.75h2.25v10.5z'\n clipRule='evenodd'\n />\n </svg>\n)\n","import { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { ListItemText, MenuItem } from '@mui/material'\nimport type { TableColumn } from '../../table/types'\n\nexport interface SortableColumnItemProps {\n column: TableColumn\n}\n\n/**\n * A draggable menu item for column reordering.\n * Uses @dnd-kit/sortable for drag-and-drop functionality.\n */\nexport function SortableColumnItem({ column }: SortableColumnItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n cursor: isDragging ? 'grabbing' : 'grab',\n }\n\n return (\n <MenuItem\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n role='menuitem'\n tabIndex={0}\n sx={{\n '&:focus-visible': {\n outline: (theme) => `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n >\n <ListItemText>{column.label}</ListItemText>\n </MenuItem>\n )\n}\n","import {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { IconButton, Menu, SvgIcon } from '@mui/material'\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type MouseEvent,\n} from 'react'\nimport { useWidgetStore } from '../../stores/widget-store'\nimport type { ChangeColumnProps } from './types'\nimport { actionButtonStyles } from '../shared/styles'\nimport { Tooltip } from '../../../components'\nimport type { TableColumn, TableWidgetState } from '../../table/types'\nimport { ChangeColumnIcon } from './change-column-icon'\nimport { SortableColumnItem } from './sortable-column-item'\nimport { useShallow } from 'zustand/shallow'\n\nexport const CHANGE_COLUMN_TOOL_ID = 'change-column'\n\n/**\n * Widget action to reorder columns in a table widget via drag-and-drop.\n *\n * This action reads the columns from the widget store and allows users to\n * drag and drop columns to reorder them. All columns are displayed and\n * can be reordered.\n *\n * Registers as a config pipeline tool so that column order is automatically\n * re-applied when the base config is updated (e.g., by WidgetLoader).\n *\n * Returns null if there are fewer than 2 columns.\n *\n * @example\n * ```tsx\n * <ChangeColumn id=\"my-table-widget\" />\n * ```\n */\nexport function ChangeColumn({\n id,\n labels,\n Icon,\n IconButtonProps,\n MenuProps,\n}: ChangeColumnProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const setWidget = useWidgetStore((state) => state.setWidget)\n const registerTool = useWidgetStore((state) => state.registerTool)\n const unregisterTool = useWidgetStore((state) => state.unregisterTool)\n const columns = useWidgetStore(\n useShallow((state) => state.getWidget<TableWidgetState>(id)?.columns),\n )\n\n /**\n * Config tool function that reorders columns to match the current widget state.\n * Reads desired order from the widget store (set by handleDragEnd via setWidget).\n * Preserves referential identity when the order already matches to prevent\n * re-render loops in the config pipeline.\n */\n const reorderFn = useCallback(\n (currentConfig: unknown): unknown => {\n const widgetState = useWidgetStore\n .getState()\n .getWidget<TableWidgetState>(id)\n const currentColumns = widgetState?.columns\n if (!currentColumns || currentColumns.length === 0) return currentConfig\n\n const config = currentConfig as Record<string, unknown>\n const configColumns = config.columns as TableColumn[] | undefined\n if (!configColumns || configColumns.length === 0) return currentConfig\n\n // Check if config columns are already in the same order as widget columns\n const alreadyMatches =\n configColumns.length === currentColumns.length &&\n configColumns.every((col, i) => col.id === currentColumns[i]?.id)\n if (alreadyMatches) return currentConfig\n\n // Reorder config columns to match widget column order\n const columnMap = new Map(configColumns.map((col) => [col.id, col]))\n const reordered: TableColumn[] = []\n\n for (const widgetCol of currentColumns) {\n const col = columnMap.get(widgetCol.id)\n if (col) {\n reordered.push(col)\n columnMap.delete(widgetCol.id)\n }\n }\n\n // Append any new columns not in the widget order\n for (const col of columnMap.values()) {\n reordered.push(col)\n }\n\n // If result matches current widget columns, reuse the same array reference\n // to prevent downstream subscribers from detecting a change\n const matchesWidget =\n reordered.length === currentColumns.length &&\n reordered.every((col, i) => col.id === currentColumns[i]?.id)\n\n return { ...config, columns: matchesWidget ? currentColumns : reordered }\n },\n [id],\n )\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const columnIds = useMemo(\n () => columns?.map((col) => col.id) ?? [],\n [columns],\n )\n\n // Register config tool on mount\n useEffect(() => {\n registerTool(id, {\n id: CHANGE_COLUMN_TOOL_ID,\n type: 'config',\n order: 100,\n enabled: true,\n fn: reorderFn,\n })\n return () => unregisterTool(id, CHANGE_COLUMN_TOOL_ID)\n }, [id, registerTool, unregisterTool, reorderFn])\n\n const handleToggle = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n setAnchorEl(event.currentTarget)\n }, [])\n\n const handleClose = useCallback(() => {\n setAnchorEl(null)\n }, [])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id || !columns) return\n const oldIndex = columns.findIndex((col) => col.id === active.id)\n const newIndex = columns.findIndex((col) => col.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n const newColumns = arrayMove(columns, oldIndex, newIndex)\n setWidget(id, { columns: newColumns })\n }\n }\n\n // Return null if there are fewer than 2 columns\n if (!columns || columns.length < 2) {\n return null\n }\n\n const tooltipLabel = labels?.tooltip ?? 'Change column'\n const isOpen = Boolean(anchorEl)\n\n return (\n <>\n <Tooltip title={tooltipLabel}>\n <IconButton\n size='small'\n aria-label={labels?.ariaLabel ?? tooltipLabel}\n aria-controls={isOpen ? 'change-column-menu' : undefined}\n aria-haspopup='true'\n aria-expanded={isOpen ? 'true' : undefined}\n onClick={handleToggle}\n data-active={isOpen}\n sx={actionButtonStyles.trigger}\n {...IconButtonProps}\n >\n {Icon ?? (\n <SvgIcon>\n <ChangeColumnIcon />\n </SvgIcon>\n )}\n </IconButton>\n </Tooltip>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <Menu\n id='change-column-menu'\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n {...MenuProps}\n >\n <SortableContext\n items={columnIds}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((column) => (\n <SortableColumnItem key={column.id} column={column} />\n ))}\n </SortableContext>\n </Menu>\n </DndContext>\n </>\n )\n}\n"],"names":["styles","title","container","display","alignItems","justifyContent","gap","content","flexDirection","spacing","EMPTY_DIALOG_CONTENT_PROPS","FullScreen","t0","$","_c","id","labels","children","Icon","IconButtonProps","DialogContentProps","t1","DialogProps","t2","undefined","sx","t3","state","getWidget","isFullScreen","useWidgetStore","useShallow","t4","state_0","setWidget","_temp","t5","updates","updateFullScreenConfig","t6","t7","FullscreenOutlined","t8","IconButton","t9","t10","ariaLabel","t11","t12","t13","Typography","t14","t15","Symbol","for","Close","t16","jsx","t17","DialogTitle","t18","t19","DialogContent","t20","Dialog","t21","state_1","EMPTY_LABELS","Download","items","data","isDownloading","setIsDownloading","useState","anchorEl","setAnchorEl","event","stopPropagation","currentTarget","handleToggle","data_0","option","link","document","createElement","href","download","filename","style","body","appendChild","click","removeChild","callback","handleDownload","event_0","option_0","result","modifier","handleClick","length","CircularProgress","FileDownloadOutlined","vertical","horizontal","Boolean","paddingBottom","option_1","jsxs","MenuItem","disabled","e","icon","ListItemIcon","color","ListItemText","label","map","Menu","actionButtonStyles","trigger","background","theme","palette","primary","relatedLight","calculateTotal","reduce","total","series","seriesTotal","item","Array","isArray","value","at","Object","entries","itemTotal","key","toRelativeData","index","transformed","RELATIVE_DATA_TOOL_ID","RelativeData","order","defaultIsRelative","previousMaxValue","useRef","originalFormatter","_temp2","registerTool","_temp3","unregisterTool","_temp4","setToolEnabled","_temp5","state_4","isRelative","useEffect","enabled","fn","_temp6","newIsRelative","max","current","widget","formatter","currentMax","widget_0","Intl","NumberFormat","locale","minimumFractionDigits","maximumFractionDigits","format","tooltipLabel","absolute","relative","PercentOutlined","Tooltip","echartData","state_3","state_2","ZOOM_TOGGLE_TOOL_ID","ZoomToggle","defaultZoom","defaultZoomStart","defaultZoomEnd","ResetIcon","useTheme","updateToolConfig","registeredTools","find","zoomTool","zoom","zoomStart","config","start","zoomEnd","end","zoomEvent","batch","handleDataZoom","existingTool","_temp7","initialEnabled","initialStart","initialEnd","type","currentConfig","toolConfig","currentOnEvents","onEvents","start_0","end_0","legend","hasLegend","show","sliderHeight","parseInt","zoomConfig","getEChartZoomConfig","inside","xSlider","ySlider","bottomOffset","legendBottomOffset","grid","currentGridBottom","bottom","gridBottom","onEventsWithoutDataZoom","dataZoom","newZoom","handleReset","enableLabel","enable","disableLabel","disable","resetLabel","reset","ZoomInOutlined","SubdirectoryArrowLeftOutlined","Box","tool_0","tool","GroupedBarChartIcon","STACK_TOGGLE_TOOL_ID","StackToggle","defaultIsStacked","isStacked","storeIsStacked","state_5","bb0","hasMultiSeries","hasStackInSeries","some","effectiveDefaultIsStacked","stacked","unstacked","updatedSeries","s_0","existingStack","s","stack","getEChartStackConfig","DEFAULT_STACK_GROUP","LOCK_SELECTION_TOOL_ID","LockSelection","selectedItems","isLocked","lockedItems","unlock","lock","CheckBoxOutlined","filterDataByLockedItems","filter","name","includes","SEARCHER_TOOL_ID","DEBOUNCE_DELAY","Searcher","filterFn","TextFieldProps","ClearIcon","debounceDelay","inputRef","debounceTimeoutRef","widgetState","isSearchEnabled","searchText","prevEnabledRef","defaultFilterFn","text","setSearchText","searchTextFromConfig","disables","text_0","clearTimeout","setTimeout","debouncedUpdateConfig","focus","newValue","target","handleChange","handleClear","placeholder","clearAriaLabel","InputAdornment","SearchOutlined","ClearOutlined","startAdornment","endAdornment","TextField","trim","Promise","resolve","lowerSearch","toLowerCase","values","SearcherToggle","defaultEnabled","isEnabled","ChangeColumnIcon","SortableColumnItem","column","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Transform","toString","opacity","cursor","outline","outlineOffset","main","CHANGE_COLUMN_TOOL_ID","ChangeColumn","MenuProps","columns","currentColumns","getState","configColumns","every","col","i","columnMap","Map","reordered","widgetCol","col_1","get","push","delete","col_2","matchesWidget","col_3","i_0","reorderFn","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","columnIds","handleClose","active","over","oldIndex","findIndex","col_5","newIndex","col_6","newColumns","arrayMove","handleDragEnd","tooltip","isOpen","SvgIcon","SortableContext","verticalListSortingStrategy","DndContext","closestCenter","t22","col_4","col_0"],"mappings":"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"}
|