@redsift/dashboard 12.4.0-muiv6 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { b as _objectSpread2, _ as _objectWithoutProperties, a as _extends } from './_rollupPluginBabelHelpers.js';
2
2
  import React, { forwardRef, useRef, useState, useReducer, useMemo } from 'react';
3
3
  import classNames from 'classnames';
4
- import { useGridApiRef } from '@mui/x-data-grid-pro';
4
+ import { useGridApiRef } from '@mui/x-data-grid-premium';
5
5
  import { D as DashboardContext } from './context.js';
6
6
  import { D as DashboardReducerActionType } from './types.js';
7
7
  import { C as CrossfilterRegistry } from './CrossfilterRegistry2.js';
@@ -126,7 +126,7 @@ const Dashboard = /*#__PURE__*/forwardRef((props, ref) => {
126
126
  dispatch,
127
127
  ndx: CrossfilterRegistry.get(data),
128
128
  state,
129
- toggleUpdateContext: () => setUpdateContext(!updateContext)
129
+ toggleUpdateContext: () => setUpdateContext(prev => !prev)
130
130
  }), [data, state, updateContext]);
131
131
  return /*#__PURE__*/React.createElement("div", _extends({}, forwardedProps, {
132
132
  className: classNames(Dashboard.className, className),
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard2.js","sources":["../../src/components/Dashboard/reducer.ts","../../src/components/Dashboard/Dashboard.tsx"],"sourcesContent":["import { GridFilterItem } from '@redsift/table';\nimport { DashboardReducerState, DashboardReducerAction, DashboardReducerActionType } from './types';\n\nconst areEquals = (tableFilter: GridFilterItem, actionFilter: GridFilterItem) => {\n return tableFilter.field === actionFilter.field && tableFilter.operator === actionFilter.operator;\n};\n\nconst addOrUpdateFilter = (oldFilters: GridFilterItem[], newFilter: GridFilterItem) => {\n if (oldFilters.find((f) => areEquals(f, newFilter))) {\n return oldFilters.map((f) => {\n if (areEquals(f, newFilter)) {\n return newFilter;\n }\n return f;\n });\n } else {\n return [...oldFilters, newFilter];\n }\n};\n\nconst addOrUpdateFilters = (oldFilters: GridFilterItem[], newFilters: GridFilterItem[]) => {\n let updatedFilters = oldFilters;\n for (let i = 0; i < newFilters.length; i++) {\n updatedFilters = addOrUpdateFilter(updatedFilters, newFilters[i]);\n }\n return updatedFilters;\n};\n\nconst replaceFilters = (newFilters: GridFilterItem | GridFilterItem[]) => {\n return Array.isArray(newFilters) ? newFilters : [newFilters];\n};\n\nconst removeFilter = (oldFilters: GridFilterItem[], newFilter: GridFilterItem) => {\n return oldFilters.filter((f) => !areEquals(f, newFilter));\n};\n\nconst removeAllFilters = () => {\n return [] as GridFilterItem[];\n};\n\nexport const DashboardReducer = (\n state: DashboardReducerState,\n action: DashboardReducerAction\n): DashboardReducerState => {\n switch (action.type) {\n case DashboardReducerActionType.ResetFilter:\n return {\n ...state,\n tableFilters: removeFilter(state.tableFilters, action.filter as GridFilterItem),\n };\n case DashboardReducerActionType.ResetFilters:\n return { ...state, tableFilters: removeAllFilters() };\n case DashboardReducerActionType.FilterTable:\n return {\n ...state,\n tableFilters: addOrUpdateFilter(state.tableFilters, action.filter as GridFilterItem),\n };\n\n case DashboardReducerActionType.FilterTableBatch:\n return {\n ...state,\n tableFilters: replaceFilters(action.filter!),\n };\n\n case DashboardReducerActionType.AppendFilterTableBatch:\n return {\n ...state,\n tableFilters: addOrUpdateFilters(state.tableFilters, action.filter as GridFilterItem[]),\n };\n }\n};\n","import React, { forwardRef, RefObject, useMemo, useReducer, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { useGridApiRef } from '@mui/x-data-grid-pro';\n\nimport { Comp } from '@redsift/design-system';\nimport { DashboardContext } from './context';\nimport { DashboardContextProps, DashboardProps } from './types';\nimport { DashboardReducer } from './reducer';\nimport { CrossfilterRegistry } from '../CrossfilterRegistry';\n\nconst COMPONENT_NAME = 'Dashboard';\nconst CLASSNAME = 'redsift-dashboard-container';\n\n/**\n * Dashboard provides a context for connected, filterable visualizations.\n * Uses Crossfilter.js for high-performance multi-dimensional filtering.\n *\n * Wrap charts and DataGrids with `WithFilters` to enable cross-filtering.\n * When one chart is filtered, all connected charts update automatically.\n *\n * @example\n * // Basic dashboard with connected charts\n * <Dashboard data={rawData}>\n * <WithFilters dimension=\"category\">\n * <PieChart data={categoryData} />\n * </WithFilters>\n * <WithFilters dimension=\"date\">\n * <TimeSeriesBarChart data={timeData} />\n * </WithFilters>\n * <WithFilters>\n * <DataGrid columns={columns} rows={filteredRows} />\n * </WithFilters>\n * </Dashboard>\n *\n * @example\n * // Data format for crossfilter\n * const data = [\n * { id: 1, category: 'A', date: '2024-01-15', value: 100 },\n * { id: 2, category: 'B', date: '2024-01-16', value: 200 },\n * // Crossfilter will index all fields for fast filtering\n * ];\n * <Dashboard data={data}>...</Dashboard>\n *\n * @example\n * // With DataGrid API ref for programmatic control\n * const apiRef = useGridApiRef();\n * <Dashboard data={data} dataGridApiRef={apiRef}>\n * {...}\n * </Dashboard>\n * // Later: apiRef.current.setFilterModel(...)\n */\n\nexport const Dashboard: Comp<DashboardProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, data, dataGridApiRef: propsDataGridApiRef, ...forwardedProps } = props;\n\n const providerRef = ref || useRef<HTMLDivElement>();\n const dataGridApiRef = propsDataGridApiRef || useGridApiRef();\n const [updateContext, setUpdateContext] = useState(false);\n\n const [state, dispatch] = useReducer(DashboardReducer, {\n tableFilters: [],\n });\n\n const value = useMemo<DashboardContextProps>(\n () => ({\n dashboardRef: providerRef as RefObject<HTMLDivElement>,\n data,\n dataGridApiRef,\n dispatch,\n ndx: CrossfilterRegistry.get(data),\n state,\n toggleUpdateContext: () => setUpdateContext(!updateContext),\n }),\n [data, state, updateContext]\n );\n\n return (\n <div\n {...forwardedProps}\n className={classNames(Dashboard.className, className)}\n ref={providerRef as RefObject<HTMLDivElement>}\n >\n <DashboardContext.Provider value={value as DashboardContextProps}>{children}</DashboardContext.Provider>\n </div>\n );\n});\nDashboard.className = CLASSNAME;\nDashboard.displayName = COMPONENT_NAME;\n"],"names":["areEquals","tableFilter","actionFilter","field","operator","addOrUpdateFilter","oldFilters","newFilter","find","f","map","addOrUpdateFilters","newFilters","updatedFilters","i","length","replaceFilters","Array","isArray","removeFilter","filter","removeAllFilters","DashboardReducer","state","action","type","DashboardReducerActionType","ResetFilter","_objectSpread","tableFilters","ResetFilters","FilterTable","FilterTableBatch","AppendFilterTableBatch","COMPONENT_NAME","CLASSNAME","Dashboard","forwardRef","props","ref","children","className","data","dataGridApiRef","propsDataGridApiRef","forwardedProps","_objectWithoutProperties","_excluded","providerRef","useRef","useGridApiRef","updateContext","setUpdateContext","useState","dispatch","useReducer","value","useMemo","dashboardRef","ndx","CrossfilterRegistry","get","toggleUpdateContext","React","createElement","_extends","classNames","DashboardContext","Provider","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard2.js","sources":["../../src/components/Dashboard/reducer.ts","../../src/components/Dashboard/Dashboard.tsx"],"sourcesContent":["import { GridFilterItem } from '@redsift/table';\nimport { DashboardReducerState, DashboardReducerAction, DashboardReducerActionType } from './types';\n\nconst areEquals = (tableFilter: GridFilterItem, actionFilter: GridFilterItem) => {\n return tableFilter.field === actionFilter.field && tableFilter.operator === actionFilter.operator;\n};\n\nconst addOrUpdateFilter = (oldFilters: GridFilterItem[], newFilter: GridFilterItem) => {\n if (oldFilters.find((f) => areEquals(f, newFilter))) {\n return oldFilters.map((f) => {\n if (areEquals(f, newFilter)) {\n return newFilter;\n }\n return f;\n });\n } else {\n return [...oldFilters, newFilter];\n }\n};\n\nconst addOrUpdateFilters = (oldFilters: GridFilterItem[], newFilters: GridFilterItem[]) => {\n let updatedFilters = oldFilters;\n for (let i = 0; i < newFilters.length; i++) {\n updatedFilters = addOrUpdateFilter(updatedFilters, newFilters[i]);\n }\n return updatedFilters;\n};\n\nconst replaceFilters = (newFilters: GridFilterItem | GridFilterItem[]) => {\n return Array.isArray(newFilters) ? newFilters : [newFilters];\n};\n\nconst removeFilter = (oldFilters: GridFilterItem[], newFilter: GridFilterItem) => {\n return oldFilters.filter((f) => !areEquals(f, newFilter));\n};\n\nconst removeAllFilters = () => {\n return [] as GridFilterItem[];\n};\n\nexport const DashboardReducer = (\n state: DashboardReducerState,\n action: DashboardReducerAction\n): DashboardReducerState => {\n switch (action.type) {\n case DashboardReducerActionType.ResetFilter:\n return {\n ...state,\n tableFilters: removeFilter(state.tableFilters, action.filter as GridFilterItem),\n };\n case DashboardReducerActionType.ResetFilters:\n return { ...state, tableFilters: removeAllFilters() };\n case DashboardReducerActionType.FilterTable:\n return {\n ...state,\n tableFilters: addOrUpdateFilter(state.tableFilters, action.filter as GridFilterItem),\n };\n\n case DashboardReducerActionType.FilterTableBatch:\n return {\n ...state,\n tableFilters: replaceFilters(action.filter!),\n };\n\n case DashboardReducerActionType.AppendFilterTableBatch:\n return {\n ...state,\n tableFilters: addOrUpdateFilters(state.tableFilters, action.filter as GridFilterItem[]),\n };\n }\n};\n","import React, { forwardRef, RefObject, useMemo, useReducer, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { useGridApiRef } from '@mui/x-data-grid-premium';\n\nimport { Comp } from '@redsift/design-system';\nimport { DashboardContext } from './context';\nimport { DashboardContextProps, DashboardProps } from './types';\nimport { DashboardReducer } from './reducer';\nimport { CrossfilterRegistry } from '../CrossfilterRegistry';\n\nconst COMPONENT_NAME = 'Dashboard';\nconst CLASSNAME = 'redsift-dashboard-container';\n\n/**\n * Dashboard provides a context for connected, filterable visualizations.\n * Uses Crossfilter.js for high-performance multi-dimensional filtering.\n *\n * Wrap charts and DataGrids with `WithFilters` to enable cross-filtering.\n * When one chart is filtered, all connected charts update automatically.\n *\n * @example\n * // Basic dashboard with connected charts\n * <Dashboard data={rawData}>\n * <WithFilters dimension=\"category\">\n * <PieChart data={categoryData} />\n * </WithFilters>\n * <WithFilters dimension=\"date\">\n * <TimeSeriesBarChart data={timeData} />\n * </WithFilters>\n * <WithFilters>\n * <DataGrid columns={columns} rows={filteredRows} />\n * </WithFilters>\n * </Dashboard>\n *\n * @example\n * // Data format for crossfilter\n * const data = [\n * { id: 1, category: 'A', date: '2024-01-15', value: 100 },\n * { id: 2, category: 'B', date: '2024-01-16', value: 200 },\n * // Crossfilter will index all fields for fast filtering\n * ];\n * <Dashboard data={data}>...</Dashboard>\n *\n * @example\n * // With DataGrid API ref for programmatic control\n * const apiRef = useGridApiRef();\n * <Dashboard data={data} dataGridApiRef={apiRef}>\n * {...}\n * </Dashboard>\n * // Later: apiRef.current.setFilterModel(...)\n */\n\nexport const Dashboard: Comp<DashboardProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, data, dataGridApiRef: propsDataGridApiRef, ...forwardedProps } = props;\n\n const providerRef = ref || useRef<HTMLDivElement>();\n const dataGridApiRef = propsDataGridApiRef || useGridApiRef();\n const [updateContext, setUpdateContext] = useState(false);\n\n const [state, dispatch] = useReducer(DashboardReducer, {\n tableFilters: [],\n });\n\n const value = useMemo<DashboardContextProps>(\n () => ({\n dashboardRef: providerRef as RefObject<HTMLDivElement>,\n data,\n dataGridApiRef,\n dispatch,\n ndx: CrossfilterRegistry.get(data),\n state,\n toggleUpdateContext: () => setUpdateContext((prev) => !prev),\n }),\n [data, state, updateContext]\n );\n\n return (\n <div\n {...forwardedProps}\n className={classNames(Dashboard.className, className)}\n ref={providerRef as RefObject<HTMLDivElement>}\n >\n <DashboardContext.Provider value={value as DashboardContextProps}>{children}</DashboardContext.Provider>\n </div>\n );\n});\nDashboard.className = CLASSNAME;\nDashboard.displayName = COMPONENT_NAME;\n"],"names":["areEquals","tableFilter","actionFilter","field","operator","addOrUpdateFilter","oldFilters","newFilter","find","f","map","addOrUpdateFilters","newFilters","updatedFilters","i","length","replaceFilters","Array","isArray","removeFilter","filter","removeAllFilters","DashboardReducer","state","action","type","DashboardReducerActionType","ResetFilter","_objectSpread","tableFilters","ResetFilters","FilterTable","FilterTableBatch","AppendFilterTableBatch","COMPONENT_NAME","CLASSNAME","Dashboard","forwardRef","props","ref","children","className","data","dataGridApiRef","propsDataGridApiRef","forwardedProps","_objectWithoutProperties","_excluded","providerRef","useRef","useGridApiRef","updateContext","setUpdateContext","useState","dispatch","useReducer","value","useMemo","dashboardRef","ndx","CrossfilterRegistry","get","toggleUpdateContext","prev","React","createElement","_extends","classNames","DashboardContext","Provider","displayName"],"mappings":"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"}
@@ -39,6 +39,7 @@ const CLASSNAME = 'redsift-data-card-body';
39
39
  /**
40
40
  * Compute grid layout metadata from children sizes (non-interactive variant — no rowIndex).
41
41
  */
42
+
42
43
  function computeGridLayout(children, columns) {
43
44
  const childArray = React.Children.toArray(children);
44
45
  let largeCount = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"DataCardBody2.js","sources":["../../src/components/DataCardBody/styles.ts","../../src/components/DataCardBody/DataCardBody.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseContainer } from '@redsift/design-system';\nimport { StyledDataCardBodyProps } from './types';\n\n/**\n * DataCardBody style.\n */\nexport const StyledDataCardBody = styled.div<StyledDataCardBodyProps>`\n ${baseContainer}\n\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin: -8px 28px 16px;\n align-items: flex-start;\n justify-content: center;\n height: 100%;\n\n ${({ $columns, $rows }) =>\n $columns &&\n $columns > 1 &&\n css`\n display: grid;\n grid-template-columns: repeat(${$columns}, 1fr);\n grid-template-rows: repeat(${$rows || 1}, auto);\n grid-auto-flow: column;\n `}\n`;\n","import React, { forwardRef, RefObject, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { StyledDataCardBody } from './styles';\nimport { DataCardBodyProps } from './types';\n\nconst COMPONENT_NAME = 'DataCardBody';\nconst CLASSNAME = 'redsift-data-card-body';\n\n/**\n * Compute grid layout metadata from children sizes (non-interactive variant — no rowIndex).\n */\nfunction computeGridLayout(children: React.ReactNode, columns: number) {\n const childArray = React.Children.toArray(children);\n let largeCount = 0;\n childArray.forEach((child) => {\n if (React.isValidElement(child) && (child.props as any).size === 'large') {\n largeCount++;\n }\n });\n\n const nonLargeCount = childArray.length - largeCount;\n const columnsForNonLarge = Math.max(columns - largeCount, 1);\n const rowsPerColumn = Math.ceil(nonLargeCount / columnsForNonLarge);\n\n const enhancedChildren = childArray.map((child) => {\n if (!React.isValidElement(child)) return child;\n\n const isLarge = (child.props as any).size === 'large';\n if (isLarge) {\n return React.cloneElement(child as React.ReactElement<any>, {\n style: { ...((child.props as any).style || {}), gridRow: '1 / -1', alignSelf: 'center' },\n });\n }\n\n return child;\n });\n\n return { enhancedChildren, rowsPerColumn };\n}\n\n/**\n * DataCardBody is the main content area of a DataCard.\n * Typically contains DataRow children.\n *\n * When `columns` is set, children are laid out in a CSS Grid with size-aware spanning:\n * - `large` DataRows claim their own column and span all rows\n * - Other DataRows fill remaining columns evenly\n *\n * @example\n * <DataCard.Body>\n * <DataRow value={42} legend=\"Active\" size=\"large\" />\n * <DataRow value={12} legend=\"Pending\" size=\"medium\" />\n * </DataCard.Body>\n *\n * @example\n * // Multi-column layout\n * <DataCard.Body columns={2}>\n * <DataRow value={100} legend=\"Total\" size=\"large\" />\n * <DataRow value={60} legend=\"Active\" size=\"medium\" />\n * <DataRow value={40} legend=\"Inactive\" size=\"medium\" />\n * </DataCard.Body>\n */\nexport const DataCardBody: Comp<DataCardBodyProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, columns, ...forwardedProps } = props;\n\n const isGrid = columns != null && columns > 1;\n const { enhancedChildren, rowsPerColumn } = useMemo(\n () => (isGrid ? computeGridLayout(children, columns!) : { enhancedChildren: children, rowsPerColumn: 0 }),\n [children, columns, isGrid]\n );\n\n return (\n <StyledDataCardBody\n $columns={isGrid ? columns : undefined}\n $rows={isGrid ? rowsPerColumn : undefined}\n {...forwardedProps}\n className={classNames(DataCardBody.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n >\n {enhancedChildren}\n </StyledDataCardBody>\n );\n});\nDataCardBody.className = CLASSNAME;\nDataCardBody.displayName = COMPONENT_NAME;\n"],"names":["StyledDataCardBody","styled","div","baseContainer","_ref","$columns","$rows","css","COMPONENT_NAME","CLASSNAME","computeGridLayout","children","columns","childArray","React","Children","toArray","largeCount","forEach","child","isValidElement","props","size","nonLargeCount","length","columnsForNonLarge","Math","max","rowsPerColumn","ceil","enhancedChildren","map","isLarge","cloneElement","style","_objectSpread","gridRow","alignSelf","DataCardBody","forwardRef","ref","className","forwardedProps","_objectWithoutProperties","_excluded","isGrid","useMemo","createElement","_extends","undefined","classNames","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"DataCardBody2.js","sources":["../../src/components/DataCardBody/styles.ts","../../src/components/DataCardBody/DataCardBody.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { baseContainer } from '@redsift/design-system';\nimport { StyledDataCardBodyProps } from './types';\n\n/**\n * DataCardBody style.\n */\nexport const StyledDataCardBody = styled.div<StyledDataCardBodyProps>`\n ${baseContainer}\n\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin: -8px 28px 16px;\n align-items: flex-start;\n justify-content: center;\n height: 100%;\n\n ${({ $columns, $rows }) =>\n $columns &&\n $columns > 1 &&\n css`\n display: grid;\n grid-template-columns: repeat(${$columns}, 1fr);\n grid-template-rows: repeat(${$rows || 1}, auto);\n grid-auto-flow: column;\n `}\n`;\n","import React, { forwardRef, RefObject, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { StyledDataCardBody } from './styles';\nimport { DataCardBodyProps } from './types';\n\nconst COMPONENT_NAME = 'DataCardBody';\nconst CLASSNAME = 'redsift-data-card-body';\n\n/**\n * Compute grid layout metadata from children sizes (non-interactive variant — no rowIndex).\n */\ninterface SizeStyledProps {\n size?: string;\n style?: React.CSSProperties;\n}\n\nfunction computeGridLayout(children: React.ReactNode, columns: number) {\n const childArray = React.Children.toArray(children);\n let largeCount = 0;\n childArray.forEach((child) => {\n if (React.isValidElement<SizeStyledProps>(child) && child.props.size === 'large') {\n largeCount++;\n }\n });\n\n const nonLargeCount = childArray.length - largeCount;\n const columnsForNonLarge = Math.max(columns - largeCount, 1);\n const rowsPerColumn = Math.ceil(nonLargeCount / columnsForNonLarge);\n\n const enhancedChildren = childArray.map((child) => {\n if (!React.isValidElement<SizeStyledProps>(child)) return child;\n\n const isLarge = child.props.size === 'large';\n if (isLarge) {\n return React.cloneElement(child, {\n style: { ...(child.props.style || {}), gridRow: '1 / -1', alignSelf: 'center' },\n });\n }\n\n return child;\n });\n\n return { enhancedChildren, rowsPerColumn };\n}\n\n/**\n * DataCardBody is the main content area of a DataCard.\n * Typically contains DataRow children.\n *\n * When `columns` is set, children are laid out in a CSS Grid with size-aware spanning:\n * - `large` DataRows claim their own column and span all rows\n * - Other DataRows fill remaining columns evenly\n *\n * @example\n * <DataCard.Body>\n * <DataRow value={42} legend=\"Active\" size=\"large\" />\n * <DataRow value={12} legend=\"Pending\" size=\"medium\" />\n * </DataCard.Body>\n *\n * @example\n * // Multi-column layout\n * <DataCard.Body columns={2}>\n * <DataRow value={100} legend=\"Total\" size=\"large\" />\n * <DataRow value={60} legend=\"Active\" size=\"medium\" />\n * <DataRow value={40} legend=\"Inactive\" size=\"medium\" />\n * </DataCard.Body>\n */\nexport const DataCardBody: Comp<DataCardBodyProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, columns, ...forwardedProps } = props;\n\n const isGrid = columns != null && columns > 1;\n const { enhancedChildren, rowsPerColumn } = useMemo(\n () => (isGrid ? computeGridLayout(children, columns!) : { enhancedChildren: children, rowsPerColumn: 0 }),\n [children, columns, isGrid]\n );\n\n return (\n <StyledDataCardBody\n $columns={isGrid ? columns : undefined}\n $rows={isGrid ? rowsPerColumn : undefined}\n {...forwardedProps}\n className={classNames(DataCardBody.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n >\n {enhancedChildren}\n </StyledDataCardBody>\n );\n});\nDataCardBody.className = CLASSNAME;\nDataCardBody.displayName = COMPONENT_NAME;\n"],"names":["StyledDataCardBody","styled","div","baseContainer","_ref","$columns","$rows","css","COMPONENT_NAME","CLASSNAME","computeGridLayout","children","columns","childArray","React","Children","toArray","largeCount","forEach","child","isValidElement","props","size","nonLargeCount","length","columnsForNonLarge","Math","max","rowsPerColumn","ceil","enhancedChildren","map","isLarge","cloneElement","style","_objectSpread","gridRow","alignSelf","DataCardBody","forwardRef","ref","className","forwardedProps","_objectWithoutProperties","_excluded","isGrid","useMemo","createElement","_extends","undefined","classNames","displayName"],"mappings":"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"}
@@ -38,6 +38,7 @@ const CLASSNAME = 'redsift-data-card-listbox';
38
38
  /**
39
39
  * Compute grid layout metadata from children sizes.
40
40
  */
41
+
41
42
  function computeGridLayout(children, columns) {
42
43
  const childArray = React.Children.toArray(children);
43
44
  let largeCount = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"DataCardListbox2.js","sources":["../../src/components/DataCardListbox/styles.ts","../../src/components/DataCardListbox/DataCardListbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { Listbox } from '@redsift/design-system';\nimport { StyledDataCardListboxProps } from './types';\n\n/**\n * DataCardListbox style.\n */\nexport const StyledDataCardListbox = styled(Listbox)<StyledDataCardListboxProps>`\n border: none;\n padding: 0;\n margin: -8px 28px 16px;\n\n > .redsift-listbox-list {\n min-width: unset;\n border: none;\n\n ${({ $columns, $rows }) =>\n $columns &&\n $columns > 1 &&\n css`\n display: grid;\n grid-template-columns: repeat(${$columns}, 1fr);\n grid-template-rows: repeat(${$rows || 1}, auto);\n grid-auto-flow: column;\n `}\n }\n`;\n","import React, { forwardRef, RefObject, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { StyledDataCardListbox } from './styles';\nimport { DataCardListboxProps } from './types';\n\nconst COMPONENT_NAME = 'DataCardListbox';\nconst CLASSNAME = 'redsift-data-card-listbox';\n\n/**\n * Compute grid layout metadata from children sizes.\n */\nfunction computeGridLayout(children: React.ReactNode, columns: number) {\n const childArray = React.Children.toArray(children);\n let largeCount = 0;\n childArray.forEach((child) => {\n if (React.isValidElement(child) && (child.props as any).size === 'large') {\n largeCount++;\n }\n });\n\n const nonLargeCount = childArray.length - largeCount;\n const columnsForNonLarge = Math.max(columns - largeCount, 1);\n const rowsPerColumn = Math.ceil(nonLargeCount / columnsForNonLarge);\n\n let nonLargeIndex = 0;\n const enhancedChildren = childArray.map((child) => {\n if (!React.isValidElement(child)) return child;\n\n const isLarge = (child.props as any).size === 'large';\n if (isLarge) {\n return React.cloneElement(child as React.ReactElement<any>, {\n rowIndex: 0,\n style: { ...((child.props as any).style || {}), gridRow: '1 / -1', alignSelf: 'center' },\n });\n }\n\n const rowIndex = nonLargeIndex % rowsPerColumn;\n nonLargeIndex++;\n return React.cloneElement(child as React.ReactElement<any>, { rowIndex });\n });\n\n return { enhancedChildren, rowsPerColumn };\n}\n\n/**\n * DataCardListbox is a styled Listbox for use inside a DataCard.\n * Designed to hold DataRow children for filter-selection interactions.\n *\n * When `columns` is set, children are laid out in a CSS Grid with size-aware spanning:\n * - `large` DataRows claim their own column and span all rows\n * - Other DataRows fill remaining columns evenly\n *\n * @example\n * <DataCard.Listbox selectionMode=\"multiple\" onChange={handleFilterChange}>\n * <DataRow value={10} legend=\"Active\" size=\"small\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={5} legend=\"Expired\" size=\"small\" onClick={handleFilter} hasFilterIcon />\n * </DataCard.Listbox>\n *\n * @example\n * // Multi-column layout\n * <DataCard.Listbox selectionMode=\"multiple\" columns={2}>\n * <DataRow value={100} legend=\"Total\" size=\"large\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={60} legend=\"Active\" size=\"medium\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={40} legend=\"Inactive\" size=\"medium\" onClick={handleFilter} hasFilterIcon />\n * </DataCard.Listbox>\n */\nexport const DataCardListbox: Comp<DataCardListboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, columns, selectionMode = 'multiple', ...forwardedProps } = props;\n\n const isGrid = columns != null && columns > 1;\n const { enhancedChildren, rowsPerColumn } = useMemo(\n () => (isGrid ? computeGridLayout(children, columns!) : { enhancedChildren: children, rowsPerColumn: 0 }),\n [children, columns, isGrid]\n );\n\n return (\n <StyledDataCardListbox\n selectionMode={selectionMode}\n gap=\"8px\"\n $columns={isGrid ? columns : undefined}\n $rows={isGrid ? rowsPerColumn : undefined}\n {...forwardedProps}\n className={classNames(DataCardListbox.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n >\n {enhancedChildren}\n </StyledDataCardListbox>\n );\n});\nDataCardListbox.className = CLASSNAME;\nDataCardListbox.displayName = COMPONENT_NAME;\n"],"names":["StyledDataCardListbox","styled","Listbox","_ref","$columns","$rows","css","COMPONENT_NAME","CLASSNAME","computeGridLayout","children","columns","childArray","React","Children","toArray","largeCount","forEach","child","isValidElement","props","size","nonLargeCount","length","columnsForNonLarge","Math","max","rowsPerColumn","ceil","nonLargeIndex","enhancedChildren","map","isLarge","cloneElement","rowIndex","style","_objectSpread","gridRow","alignSelf","DataCardListbox","forwardRef","ref","className","selectionMode","forwardedProps","_objectWithoutProperties","_excluded","isGrid","useMemo","createElement","_extends","gap","undefined","classNames","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"DataCardListbox2.js","sources":["../../src/components/DataCardListbox/styles.ts","../../src/components/DataCardListbox/DataCardListbox.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { Listbox } from '@redsift/design-system';\nimport { StyledDataCardListboxProps } from './types';\n\n/**\n * DataCardListbox style.\n */\nexport const StyledDataCardListbox = styled(Listbox)<StyledDataCardListboxProps>`\n border: none;\n padding: 0;\n margin: -8px 28px 16px;\n\n > .redsift-listbox-list {\n min-width: unset;\n border: none;\n\n ${({ $columns, $rows }) =>\n $columns &&\n $columns > 1 &&\n css`\n display: grid;\n grid-template-columns: repeat(${$columns}, 1fr);\n grid-template-rows: repeat(${$rows || 1}, auto);\n grid-auto-flow: column;\n `}\n }\n`;\n","import React, { forwardRef, RefObject, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { StyledDataCardListbox } from './styles';\nimport { DataCardListboxProps } from './types';\n\nconst COMPONENT_NAME = 'DataCardListbox';\nconst CLASSNAME = 'redsift-data-card-listbox';\n\n/**\n * Compute grid layout metadata from children sizes.\n */\ninterface SizeStyledProps {\n size?: string;\n style?: React.CSSProperties;\n rowIndex?: number;\n}\n\nfunction computeGridLayout(children: React.ReactNode, columns: number) {\n const childArray = React.Children.toArray(children);\n let largeCount = 0;\n childArray.forEach((child) => {\n if (React.isValidElement<SizeStyledProps>(child) && child.props.size === 'large') {\n largeCount++;\n }\n });\n\n const nonLargeCount = childArray.length - largeCount;\n const columnsForNonLarge = Math.max(columns - largeCount, 1);\n const rowsPerColumn = Math.ceil(nonLargeCount / columnsForNonLarge);\n\n let nonLargeIndex = 0;\n const enhancedChildren = childArray.map((child) => {\n if (!React.isValidElement<SizeStyledProps>(child)) return child;\n\n const isLarge = child.props.size === 'large';\n if (isLarge) {\n return React.cloneElement(child, {\n rowIndex: 0,\n style: { ...(child.props.style || {}), gridRow: '1 / -1', alignSelf: 'center' },\n });\n }\n\n const rowIndex = nonLargeIndex % rowsPerColumn;\n nonLargeIndex++;\n return React.cloneElement(child, { rowIndex });\n });\n\n return { enhancedChildren, rowsPerColumn };\n}\n\n/**\n * DataCardListbox is a styled Listbox for use inside a DataCard.\n * Designed to hold DataRow children for filter-selection interactions.\n *\n * When `columns` is set, children are laid out in a CSS Grid with size-aware spanning:\n * - `large` DataRows claim their own column and span all rows\n * - Other DataRows fill remaining columns evenly\n *\n * @example\n * <DataCard.Listbox selectionMode=\"multiple\" onChange={handleFilterChange}>\n * <DataRow value={10} legend=\"Active\" size=\"small\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={5} legend=\"Expired\" size=\"small\" onClick={handleFilter} hasFilterIcon />\n * </DataCard.Listbox>\n *\n * @example\n * // Multi-column layout\n * <DataCard.Listbox selectionMode=\"multiple\" columns={2}>\n * <DataRow value={100} legend=\"Total\" size=\"large\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={60} legend=\"Active\" size=\"medium\" onClick={handleFilter} hasFilterIcon />\n * <DataRow value={40} legend=\"Inactive\" size=\"medium\" onClick={handleFilter} hasFilterIcon />\n * </DataCard.Listbox>\n */\nexport const DataCardListbox: Comp<DataCardListboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, columns, selectionMode = 'multiple', ...forwardedProps } = props;\n\n const isGrid = columns != null && columns > 1;\n const { enhancedChildren, rowsPerColumn } = useMemo(\n () => (isGrid ? computeGridLayout(children, columns!) : { enhancedChildren: children, rowsPerColumn: 0 }),\n [children, columns, isGrid]\n );\n\n return (\n <StyledDataCardListbox\n selectionMode={selectionMode}\n gap=\"8px\"\n $columns={isGrid ? columns : undefined}\n $rows={isGrid ? rowsPerColumn : undefined}\n {...forwardedProps}\n className={classNames(DataCardListbox.className, className)}\n ref={ref as RefObject<HTMLDivElement>}\n >\n {enhancedChildren}\n </StyledDataCardListbox>\n );\n});\nDataCardListbox.className = CLASSNAME;\nDataCardListbox.displayName = COMPONENT_NAME;\n"],"names":["StyledDataCardListbox","styled","Listbox","_ref","$columns","$rows","css","COMPONENT_NAME","CLASSNAME","computeGridLayout","children","columns","childArray","React","Children","toArray","largeCount","forEach","child","isValidElement","props","size","nonLargeCount","length","columnsForNonLarge","Math","max","rowsPerColumn","ceil","nonLargeIndex","enhancedChildren","map","isLarge","cloneElement","rowIndex","style","_objectSpread","gridRow","alignSelf","DataCardListbox","forwardRef","ref","className","selectionMode","forwardedProps","_objectWithoutProperties","_excluded","isGrid","useMemo","createElement","_extends","gap","undefined","classNames","displayName"],"mappings":";;;;;;AAIA;AACA;AACA;MACaA,qBAAqB,GAAGC,MAAM,CAACC,OAAO,CAA8B,CAAA;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMC,IAAA,IAAA;EAAA,IAAC;IAAEC,QAAQ;AAAEC,IAAAA,KAAAA;AAAM,GAAC,GAAAF,IAAA,CAAA;AAAA,EAAA,OACpBC,QAAQ,IACRA,QAAQ,GAAG,CAAC,IACZE,GAAI,CAAA;AACV;AACA,sCAAA,EAAwCF,QAAS,CAAA;AACjD,mCAAqCC,EAAAA,KAAK,IAAI,CAAE,CAAA;AAChD;AACA,MAAO,CAAA,CAAA;AAAA,CAAC,CAAA;AACR;AACA;;;ACpBA,MAAME,cAAc,GAAG,iBAAiB,CAAA;AACxC,MAAMC,SAAS,GAAG,2BAA2B,CAAA;;AAE7C;AACA;AACA;;AAOA,SAASC,iBAAiBA,CAACC,QAAyB,EAAEC,OAAe,EAAE;EACrE,MAAMC,UAAU,GAAGC,KAAK,CAACC,QAAQ,CAACC,OAAO,CAACL,QAAQ,CAAC,CAAA;EACnD,IAAIM,UAAU,GAAG,CAAC,CAAA;AAClBJ,EAAAA,UAAU,CAACK,OAAO,CAAEC,KAAK,IAAK;AAC5B,IAAA,kBAAIL,KAAK,CAACM,cAAc,CAAkBD,KAAK,CAAC,IAAIA,KAAK,CAACE,KAAK,CAACC,IAAI,KAAK,OAAO,EAAE;AAChFL,MAAAA,UAAU,EAAE,CAAA;AACd,KAAA;AACF,GAAC,CAAC,CAAA;AAEF,EAAA,MAAMM,aAAa,GAAGV,UAAU,CAACW,MAAM,GAAGP,UAAU,CAAA;EACpD,MAAMQ,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CAACf,OAAO,GAAGK,UAAU,EAAE,CAAC,CAAC,CAAA;EAC5D,MAAMW,aAAa,GAAGF,IAAI,CAACG,IAAI,CAACN,aAAa,GAAGE,kBAAkB,CAAC,CAAA;EAEnE,IAAIK,aAAa,GAAG,CAAC,CAAA;AACrB,EAAA,MAAMC,gBAAgB,GAAGlB,UAAU,CAACmB,GAAG,CAAEb,KAAK,IAAK;IACjD,IAAI,eAACL,KAAK,CAACM,cAAc,CAAkBD,KAAK,CAAC,EAAE,OAAOA,KAAK,CAAA;IAE/D,MAAMc,OAAO,GAAGd,KAAK,CAACE,KAAK,CAACC,IAAI,KAAK,OAAO,CAAA;AAC5C,IAAA,IAAIW,OAAO,EAAE;AACX,MAAA,oBAAOnB,KAAK,CAACoB,YAAY,CAACf,KAAK,EAAE;AAC/BgB,QAAAA,QAAQ,EAAE,CAAC;AACXC,QAAAA,KAAK,EAAAC,cAAA,CAAAA,cAAA,CAAQlB,EAAAA,EAAAA,KAAK,CAACE,KAAK,CAACe,KAAK,IAAI,EAAE,CAAA,EAAA,EAAA,EAAA;AAAGE,UAAAA,OAAO,EAAE,QAAQ;AAAEC,UAAAA,SAAS,EAAE,QAAA;AAAQ,SAAA,CAAA;AAC/E,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,MAAMJ,QAAQ,GAAGL,aAAa,GAAGF,aAAa,CAAA;AAC9CE,IAAAA,aAAa,EAAE,CAAA;AACf,IAAA,oBAAOhB,KAAK,CAACoB,YAAY,CAACf,KAAK,EAAE;AAAEgB,MAAAA,QAAAA;AAAS,KAAC,CAAC,CAAA;AAChD,GAAC,CAAC,CAAA;EAEF,OAAO;IAAEJ,gBAAgB;AAAEH,IAAAA,aAAAA;GAAe,CAAA;AAC5C,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMY,eAA2D,gBAAGC,UAAU,CAAC,CAACpB,KAAK,EAAEqB,GAAG,KAAK;EACpG,MAAM;MAAE/B,QAAQ;MAAEgC,SAAS;MAAE/B,OAAO;AAAEgC,MAAAA,aAAa,GAAG,UAAA;AAA8B,KAAC,GAAGvB,KAAK;AAAxBwB,IAAAA,cAAc,GAAAC,wBAAA,CAAKzB,KAAK,EAAA0B,SAAA,CAAA,CAAA;EAE7F,MAAMC,MAAM,GAAGpC,OAAO,IAAI,IAAI,IAAIA,OAAO,GAAG,CAAC,CAAA;EAC7C,MAAM;IAAEmB,gBAAgB;AAAEH,IAAAA,aAAAA;AAAc,GAAC,GAAGqB,OAAO,CACjD,MAAOD,MAAM,GAAGtC,iBAAiB,CAACC,QAAQ,EAAEC,OAAQ,CAAC,GAAG;AAAEmB,IAAAA,gBAAgB,EAAEpB,QAAQ;AAAEiB,IAAAA,aAAa,EAAE,CAAA;GAAI,EACzG,CAACjB,QAAQ,EAAEC,OAAO,EAAEoC,MAAM,CAC5B,CAAC,CAAA;AAED,EAAA,oBACElC,KAAA,CAAAoC,aAAA,CAACjD,qBAAqB,EAAAkD,QAAA,CAAA;AACpBP,IAAAA,aAAa,EAAEA,aAAc;AAC7BQ,IAAAA,GAAG,EAAC,KAAK;AACT/C,IAAAA,QAAQ,EAAE2C,MAAM,GAAGpC,OAAO,GAAGyC,SAAU;AACvC/C,IAAAA,KAAK,EAAE0C,MAAM,GAAGpB,aAAa,GAAGyB,SAAAA;AAAU,GAAA,EACtCR,cAAc,EAAA;IAClBF,SAAS,EAAEW,UAAU,CAACd,eAAe,CAACG,SAAS,EAAEA,SAAS,CAAE;AAC5DD,IAAAA,GAAG,EAAEA,GAAAA;AAAiC,GAAA,CAAA,EAErCX,gBACoB,CAAC,CAAA;AAE5B,CAAC,EAAC;AACFS,eAAe,CAACG,SAAS,GAAGlC,SAAS,CAAA;AACrC+B,eAAe,CAACe,WAAW,GAAG/C,cAAc;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DrilldownDashboard2.js","sources":["../../src/components/DrilldownDashboard/DrilldownDashboard.tsx"],"sourcesContent":["import React, { createContext, forwardRef, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { GridFilterModel } from '@mui/x-data-grid-pro';\nimport { DrilldownDashboardProps, DrilldownCardProps, DrilldownGridProps, AggregateMap } from './types';\n\nconst COMPONENT_NAME = 'DrilldownDashboard';\nconst CLASSNAME = 'redsift-drilldown-dashboard';\n\n// ---------------------------------------------------------------------------\n// Internal context\n// ---------------------------------------------------------------------------\n\ninterface DrilldownContextValue {\n aggregates: Record<string, AggregateMap>;\n filterModel: GridFilterModel;\n setFilterModel: React.Dispatch<React.SetStateAction<GridFilterModel>>;\n cardControlledFields: React.MutableRefObject<Set<string>>;\n isInternalUpdate: React.MutableRefObject<boolean>;\n getSelectedFromFilterModel: (field: string) => string[];\n updateFilterModel: (field: string, values: string[], operator?: string) => void;\n hasFilterForField: (field: string) => boolean;\n}\n\nconst DrilldownContext = createContext<DrilldownContextValue>(null as any);\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst getSelectedFromModel = (model: GridFilterModel, field: string): string[] => {\n const item = model.items.find((i) => i.field === field);\n if (!item) return [];\n const val = item.value;\n if (val == null) return [];\n return Array.isArray(val) ? val : [String(val)];\n};\n\nconst updateModel = (prev: GridFilterModel, field: string, values: string[], operator = 'isAnyOf'): GridFilterModel => {\n if (values.length === 0) {\n return { ...prev, items: prev.items.filter((i) => i.field !== field) };\n }\n const existing = prev.items.find((i) => i.field === field);\n if (existing) {\n return {\n ...prev,\n items: prev.items.map((i) => (i.field === field ? { ...i, value: values, operator } : i)),\n };\n }\n return { ...prev, items: [...prev.items, { field, operator, value: values }] };\n};\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\n/**\n * A compound component for the \"drilldown\" dashboard pattern.\n *\n * Unlike CrossfilteredDashboard, DataCards always show full-dataset aggregates\n * (no crossfiltering between cards). Clicking a card row applies a filter to\n * the DataGrid. If the DataGrid's filter panel sets a filter for a field,\n * the corresponding card is disabled.\n *\n * @example\n * ```tsx\n * <DrilldownDashboard data={rows} computeAggregates={computeAggregates}>\n * <DrilldownDashboard.Card field=\"Category\">\n * <DataCard color=\"warning\">\n * <DataCard.Header title=\"Category\" />\n * <DataCard.Listbox selectionMode=\"multiple\" aria-label=\"Filter by category\">\n * <DataRow legend=\"Bakery\" />\n * <DataRow legend=\"Beverage\" />\n * </DataCard.Listbox>\n * </DataCard>\n * </DrilldownDashboard.Card>\n * <DrilldownDashboard.Grid>\n * <DataGrid columns={columns} />\n * </DrilldownDashboard.Grid>\n * </DrilldownDashboard>\n * ```\n */\nconst DrilldownDashboardBase: Comp<DrilldownDashboardProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, data, computeAggregates: computeAggregatesFn, ...forwardedProps } = props;\n\n const [filterModel, setFilterModel] = useState<GridFilterModel>({ items: [] });\n const cardControlledFields = useRef(new Set<string>());\n const isInternalUpdate = useRef(false);\n\n const aggregates = useMemo(() => computeAggregatesFn(data), [data, computeAggregatesFn]);\n\n const getSelectedFromFilterModel = useCallback(\n (field: string) => getSelectedFromModel(filterModel, field),\n [filterModel]\n );\n\n const updateFilterModelFn = useCallback((field: string, values: string[], operator?: string) => {\n isInternalUpdate.current = true;\n cardControlledFields.current.add(field);\n setFilterModel((prev) => {\n const updated = updateModel(prev, field, values, operator);\n if (JSON.stringify(prev.items) === JSON.stringify(updated.items)) return prev;\n return updated;\n });\n }, []);\n\n const hasFilterForField = useCallback(\n (field: string) => filterModel.items.some((item) => item.field === field),\n [filterModel]\n );\n\n const contextValue = useMemo<DrilldownContextValue>(\n () => ({\n aggregates,\n filterModel,\n setFilterModel,\n cardControlledFields,\n isInternalUpdate,\n getSelectedFromFilterModel,\n updateFilterModel: updateFilterModelFn,\n hasFilterForField,\n }),\n [aggregates, filterModel, getSelectedFromFilterModel, updateFilterModelFn, hasFilterForField]\n );\n\n return (\n <DrilldownContext.Provider value={contextValue}>\n <div {...forwardedProps} className={classNames(CLASSNAME, className)} ref={ref}>\n {children}\n </div>\n </DrilldownContext.Provider>\n );\n});\nDrilldownDashboardBase.className = CLASSNAME;\nDrilldownDashboardBase.displayName = COMPONENT_NAME;\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/**\n * A DataCard slot in a DrilldownDashboard. Reads aggregates from context\n * and wires up selection state and filter model sync.\n *\n * The card renders its children with injected aggregate values and selection state.\n * When the DataGrid's filter panel controls the same field, the card is disabled.\n */\nconst Card: React.FC<DrilldownCardProps> = ({ field, children }) => {\n const ctx = useContext(DrilldownContext);\n const fieldAggregates = ctx.aggregates[field] ?? {};\n const selection = ctx.getSelectedFromFilterModel(field);\n const isDisabled = ctx.hasFilterForField(field) && !ctx.cardControlledFields.current.has(field);\n\n const handleChange = useCallback(\n (newValues: string[]) => {\n ctx.updateFilterModel(field, newValues);\n },\n [ctx, field]\n );\n\n // Clone the DataCard children and inject aggregate values + selection state\n if (!React.isValidElement(children)) return null;\n\n return React.cloneElement(children as React.ReactElement<any>, {\n _drilldown: { fieldAggregates, selection, isDisabled, onChange: handleChange },\n });\n};\nCard.displayName = 'DrilldownDashboard.Card';\n\n/**\n * A DataGrid slot in a DrilldownDashboard. Reads filterModel from context\n * and syncs changes back.\n */\nconst Grid: React.FC<DrilldownGridProps> = ({ children }) => {\n const ctx = useContext(DrilldownContext);\n\n const handleFilterModelChange = useCallback(\n (model: GridFilterModel) => {\n if (ctx.isInternalUpdate.current) {\n ctx.isInternalUpdate.current = false;\n ctx.setFilterModel((prev) => {\n if (JSON.stringify(prev.items) === JSON.stringify(model.items)) return prev;\n return model;\n });\n return;\n }\n const panelFields = new Set(model.items.map((item) => item.field));\n for (const f of panelFields) {\n ctx.cardControlledFields.current.delete(f);\n }\n for (const f of ctx.cardControlledFields.current) {\n if (!panelFields.has(f)) {\n ctx.cardControlledFields.current.delete(f);\n }\n }\n ctx.setFilterModel((prev) => {\n if (JSON.stringify(prev.items) === JSON.stringify(model.items)) return prev;\n return model;\n });\n },\n [ctx]\n );\n\n if (!React.isValidElement(children)) return null;\n\n return React.cloneElement(children as React.ReactElement<any>, {\n filterModel: ctx.filterModel,\n onFilterModelChange: handleFilterModelChange,\n });\n};\nGrid.displayName = 'DrilldownDashboard.Grid';\n\n/**\n * DrilldownDashboard with attached sub-components.\n */\nexport const DrilldownDashboard = Object.assign(DrilldownDashboardBase, {\n Card,\n Grid,\n});\n"],"names":["COMPONENT_NAME","CLASSNAME","DrilldownContext","createContext","getSelectedFromModel","model","field","item","items","find","i","val","value","Array","isArray","String","updateModel","prev","values","operator","arguments","length","undefined","_objectSpread","filter","existing","map","DrilldownDashboardBase","forwardRef","props","ref","children","className","data","computeAggregates","computeAggregatesFn","forwardedProps","_objectWithoutProperties","_excluded","filterModel","setFilterModel","useState","cardControlledFields","useRef","Set","isInternalUpdate","aggregates","useMemo","getSelectedFromFilterModel","useCallback","updateFilterModelFn","current","add","updated","JSON","stringify","hasFilterForField","some","contextValue","updateFilterModel","React","createElement","Provider","_extends","classNames","displayName","Card","_ref","_ctx$aggregates$field","ctx","useContext","fieldAggregates","selection","isDisabled","has","handleChange","newValues","isValidElement","cloneElement","_drilldown","onChange","Grid","_ref2","handleFilterModelChange","panelFields","f","delete","onFilterModelChange","DrilldownDashboard","Object","assign"],"mappings":";;;;;AAMA,MAAMA,cAAc,GAAG,oBAAoB,CAAA;AAC3C,MAAMC,SAAS,GAAG,6BAA6B,CAAA;;AAE/C;AACA;AACA;AAaA,MAAMC,gBAAgB,gBAAGC,aAAa,CAAwB,IAAW,CAAC,CAAA;;AAE1E;AACA;AACA;;AAEA,MAAMC,oBAAoB,GAAGA,CAACC,KAAsB,EAAEC,KAAa,KAAe;AAChF,EAAA,MAAMC,IAAI,GAAGF,KAAK,CAACG,KAAK,CAACC,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACJ,KAAK,KAAKA,KAAK,CAAC,CAAA;AACvD,EAAA,IAAI,CAACC,IAAI,EAAE,OAAO,EAAE,CAAA;AACpB,EAAA,MAAMI,GAAG,GAAGJ,IAAI,CAACK,KAAK,CAAA;AACtB,EAAA,IAAID,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,CAAA;AAC1B,EAAA,OAAOE,KAAK,CAACC,OAAO,CAACH,GAAG,CAAC,GAAGA,GAAG,GAAG,CAACI,MAAM,CAACJ,GAAG,CAAC,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAMK,WAAW,GAAG,UAACC,IAAqB,EAAEX,KAAa,EAAEY,MAAgB,EAA4C;AAAA,EAAA,IAA1CC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,SAAS,CAAA;AAC/F,EAAA,IAAIF,MAAM,CAACG,MAAM,KAAK,CAAC,EAAE;AACvB,IAAA,OAAAE,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAYN,IAAI,CAAA,EAAA,EAAA,EAAA;AAAET,MAAAA,KAAK,EAAES,IAAI,CAACT,KAAK,CAACgB,MAAM,CAAEd,CAAC,IAAKA,CAAC,CAACJ,KAAK,KAAKA,KAAK,CAAA;AAAC,KAAA,CAAA,CAAA;AACtE,GAAA;AACA,EAAA,MAAMmB,QAAQ,GAAGR,IAAI,CAACT,KAAK,CAACC,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACJ,KAAK,KAAKA,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAImB,QAAQ,EAAE;AACZ,IAAA,OAAAF,cAAA,CAAAA,cAAA,CAAA,EAAA,EACKN,IAAI,CAAA,EAAA,EAAA,EAAA;AACPT,MAAAA,KAAK,EAAES,IAAI,CAACT,KAAK,CAACkB,GAAG,CAAEhB,CAAC,IAAMA,CAAC,CAACJ,KAAK,KAAKA,KAAK,GAAAiB,cAAA,CAAAA,cAAA,KAAQb,CAAC,CAAA,EAAA,EAAA,EAAA;AAAEE,QAAAA,KAAK,EAAEM,MAAM;AAAEC,QAAAA,QAAAA;AAAQ,OAAA,CAAA,GAAKT,CAAE,CAAA;AAAC,KAAA,CAAA,CAAA;AAE7F,GAAA;AACA,EAAA,OAAAa,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAYN,IAAI,CAAA,EAAA,EAAA,EAAA;AAAET,IAAAA,KAAK,EAAE,CAAC,GAAGS,IAAI,CAACT,KAAK,EAAE;MAAEF,KAAK;MAAEa,QAAQ;AAAEP,MAAAA,KAAK,EAAEM,MAAAA;KAAQ,CAAA;AAAC,GAAA,CAAA,CAAA;AAC9E,CAAC,CAAA;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMS,sBAAqE,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;EACvG,MAAM;MAAEC,QAAQ;MAAEC,SAAS;MAAEC,IAAI;AAAEC,MAAAA,iBAAiB,EAAEC,mBAAAA;AAAuC,KAAC,GAAGN,KAAK;AAAxBO,IAAAA,cAAc,GAAAC,wBAAA,CAAKR,KAAK,EAAAS,SAAA,CAAA,CAAA;AAEtG,EAAA,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGC,QAAQ,CAAkB;AAAEjC,IAAAA,KAAK,EAAE,EAAA;AAAG,GAAC,CAAC,CAAA;EAC9E,MAAMkC,oBAAoB,GAAGC,MAAM,CAAC,IAAIC,GAAG,EAAU,CAAC,CAAA;AACtD,EAAA,MAAMC,gBAAgB,GAAGF,MAAM,CAAC,KAAK,CAAC,CAAA;AAEtC,EAAA,MAAMG,UAAU,GAAGC,OAAO,CAAC,MAAMZ,mBAAmB,CAACF,IAAI,CAAC,EAAE,CAACA,IAAI,EAAEE,mBAAmB,CAAC,CAAC,CAAA;AAExF,EAAA,MAAMa,0BAA0B,GAAGC,WAAW,CAC3C3C,KAAa,IAAKF,oBAAoB,CAACmC,WAAW,EAAEjC,KAAK,CAAC,EAC3D,CAACiC,WAAW,CACd,CAAC,CAAA;EAED,MAAMW,mBAAmB,GAAGD,WAAW,CAAC,CAAC3C,KAAa,EAAEY,MAAgB,EAAEC,QAAiB,KAAK;IAC9F0B,gBAAgB,CAACM,OAAO,GAAG,IAAI,CAAA;AAC/BT,IAAAA,oBAAoB,CAACS,OAAO,CAACC,GAAG,CAAC9C,KAAK,CAAC,CAAA;IACvCkC,cAAc,CAAEvB,IAAI,IAAK;MACvB,MAAMoC,OAAO,GAAGrC,WAAW,CAACC,IAAI,EAAEX,KAAK,EAAEY,MAAM,EAAEC,QAAQ,CAAC,CAAA;AAC1D,MAAA,IAAImC,IAAI,CAACC,SAAS,CAACtC,IAAI,CAACT,KAAK,CAAC,KAAK8C,IAAI,CAACC,SAAS,CAACF,OAAO,CAAC7C,KAAK,CAAC,EAAE,OAAOS,IAAI,CAAA;AAC7E,MAAA,OAAOoC,OAAO,CAAA;AAChB,KAAC,CAAC,CAAA;GACH,EAAE,EAAE,CAAC,CAAA;EAEN,MAAMG,iBAAiB,GAAGP,WAAW,CAClC3C,KAAa,IAAKiC,WAAW,CAAC/B,KAAK,CAACiD,IAAI,CAAElD,IAAI,IAAKA,IAAI,CAACD,KAAK,KAAKA,KAAK,CAAC,EACzE,CAACiC,WAAW,CACd,CAAC,CAAA;AAED,EAAA,MAAMmB,YAAY,GAAGX,OAAO,CAC1B,OAAO;IACLD,UAAU;IACVP,WAAW;IACXC,cAAc;IACdE,oBAAoB;IACpBG,gBAAgB;IAChBG,0BAA0B;AAC1BW,IAAAA,iBAAiB,EAAET,mBAAmB;AACtCM,IAAAA,iBAAAA;AACF,GAAC,CAAC,EACF,CAACV,UAAU,EAAEP,WAAW,EAAES,0BAA0B,EAAEE,mBAAmB,EAAEM,iBAAiB,CAC9F,CAAC,CAAA;AAED,EAAA,oBACEI,KAAA,CAAAC,aAAA,CAAC3D,gBAAgB,CAAC4D,QAAQ,EAAA;AAAClD,IAAAA,KAAK,EAAE8C,YAAAA;AAAa,GAAA,eAC7CE,KAAA,CAAAC,aAAA,CAAAE,KAAAA,EAAAA,QAAA,KAAS3B,cAAc,EAAA;AAAEJ,IAAAA,SAAS,EAAEgC,UAAU,CAAC/D,SAAS,EAAE+B,SAAS,CAAE;AAACF,IAAAA,GAAG,EAAEA,GAAAA;GACxEC,CAAAA,EAAAA,QACE,CACoB,CAAC,CAAA;AAEhC,CAAC,CAAC,CAAA;AACFJ,sBAAsB,CAACK,SAAS,GAAG/B,SAAS,CAAA;AAC5C0B,sBAAsB,CAACsC,WAAW,GAAGjE,cAAc,CAAA;;AAEnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMkE,IAAkC,GAAGC,IAAA,IAAyB;AAAA,EAAA,IAAAC,qBAAA,CAAA;EAAA,IAAxB;IAAE9D,KAAK;AAAEyB,IAAAA,QAAAA;AAAS,GAAC,GAAAoC,IAAA,CAAA;AAC7D,EAAA,MAAME,GAAG,GAAGC,UAAU,CAACpE,gBAAgB,CAAC,CAAA;AACxC,EAAA,MAAMqE,eAAe,GAAAH,CAAAA,qBAAA,GAAGC,GAAG,CAACvB,UAAU,CAACxC,KAAK,CAAC,cAAA8D,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;AACnD,EAAA,MAAMI,SAAS,GAAGH,GAAG,CAACrB,0BAA0B,CAAC1C,KAAK,CAAC,CAAA;AACvD,EAAA,MAAMmE,UAAU,GAAGJ,GAAG,CAACb,iBAAiB,CAAClD,KAAK,CAAC,IAAI,CAAC+D,GAAG,CAAC3B,oBAAoB,CAACS,OAAO,CAACuB,GAAG,CAACpE,KAAK,CAAC,CAAA;AAE/F,EAAA,MAAMqE,YAAY,GAAG1B,WAAW,CAC7B2B,SAAmB,IAAK;AACvBP,IAAAA,GAAG,CAACV,iBAAiB,CAACrD,KAAK,EAAEsE,SAAS,CAAC,CAAA;AACzC,GAAC,EACD,CAACP,GAAG,EAAE/D,KAAK,CACb,CAAC,CAAA;;AAED;EACA,IAAI,eAACsD,KAAK,CAACiB,cAAc,CAAC9C,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAA;AAEhD,EAAA,oBAAO6B,KAAK,CAACkB,YAAY,CAAC/C,QAAQ,EAA6B;AAC7DgD,IAAAA,UAAU,EAAE;MAAER,eAAe;MAAEC,SAAS;MAAEC,UAAU;AAAEO,MAAAA,QAAQ,EAAEL,YAAAA;AAAa,KAAA;AAC/E,GAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AACDT,IAAI,CAACD,WAAW,GAAG,yBAAyB,CAAA;;AAE5C;AACA;AACA;AACA;AACA,MAAMgB,IAAkC,GAAGC,KAAA,IAAkB;EAAA,IAAjB;AAAEnD,IAAAA,QAAAA;AAAS,GAAC,GAAAmD,KAAA,CAAA;AACtD,EAAA,MAAMb,GAAG,GAAGC,UAAU,CAACpE,gBAAgB,CAAC,CAAA;AAExC,EAAA,MAAMiF,uBAAuB,GAAGlC,WAAW,CACxC5C,KAAsB,IAAK;AAC1B,IAAA,IAAIgE,GAAG,CAACxB,gBAAgB,CAACM,OAAO,EAAE;AAChCkB,MAAAA,GAAG,CAACxB,gBAAgB,CAACM,OAAO,GAAG,KAAK,CAAA;AACpCkB,MAAAA,GAAG,CAAC7B,cAAc,CAAEvB,IAAI,IAAK;AAC3B,QAAA,IAAIqC,IAAI,CAACC,SAAS,CAACtC,IAAI,CAACT,KAAK,CAAC,KAAK8C,IAAI,CAACC,SAAS,CAAClD,KAAK,CAACG,KAAK,CAAC,EAAE,OAAOS,IAAI,CAAA;AAC3E,QAAA,OAAOZ,KAAK,CAAA;AACd,OAAC,CAAC,CAAA;AACF,MAAA,OAAA;AACF,KAAA;AACA,IAAA,MAAM+E,WAAW,GAAG,IAAIxC,GAAG,CAACvC,KAAK,CAACG,KAAK,CAACkB,GAAG,CAAEnB,IAAI,IAAKA,IAAI,CAACD,KAAK,CAAC,CAAC,CAAA;AAClE,IAAA,KAAK,MAAM+E,CAAC,IAAID,WAAW,EAAE;MAC3Bf,GAAG,CAAC3B,oBAAoB,CAACS,OAAO,CAACmC,MAAM,CAACD,CAAC,CAAC,CAAA;AAC5C,KAAA;IACA,KAAK,MAAMA,CAAC,IAAIhB,GAAG,CAAC3B,oBAAoB,CAACS,OAAO,EAAE;AAChD,MAAA,IAAI,CAACiC,WAAW,CAACV,GAAG,CAACW,CAAC,CAAC,EAAE;QACvBhB,GAAG,CAAC3B,oBAAoB,CAACS,OAAO,CAACmC,MAAM,CAACD,CAAC,CAAC,CAAA;AAC5C,OAAA;AACF,KAAA;AACAhB,IAAAA,GAAG,CAAC7B,cAAc,CAAEvB,IAAI,IAAK;AAC3B,MAAA,IAAIqC,IAAI,CAACC,SAAS,CAACtC,IAAI,CAACT,KAAK,CAAC,KAAK8C,IAAI,CAACC,SAAS,CAAClD,KAAK,CAACG,KAAK,CAAC,EAAE,OAAOS,IAAI,CAAA;AAC3E,MAAA,OAAOZ,KAAK,CAAA;AACd,KAAC,CAAC,CAAA;AACJ,GAAC,EACD,CAACgE,GAAG,CACN,CAAC,CAAA;EAED,IAAI,eAACT,KAAK,CAACiB,cAAc,CAAC9C,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAA;AAEhD,EAAA,oBAAO6B,KAAK,CAACkB,YAAY,CAAC/C,QAAQ,EAA6B;IAC7DQ,WAAW,EAAE8B,GAAG,CAAC9B,WAAW;AAC5BgD,IAAAA,mBAAmB,EAAEJ,uBAAAA;AACvB,GAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AACDF,IAAI,CAAChB,WAAW,GAAG,yBAAyB,CAAA;;AAE5C;AACA;AACA;AACO,MAAMuB,kBAAkB,GAAGC,MAAM,CAACC,MAAM,CAAC/D,sBAAsB,EAAE;EACtEuC,IAAI;AACJe,EAAAA,IAAAA;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"DrilldownDashboard2.js","sources":["../../src/components/DrilldownDashboard/DrilldownDashboard.tsx"],"sourcesContent":["import React, { createContext, forwardRef, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { Comp } from '@redsift/design-system';\nimport { GridFilterModel } from '@mui/x-data-grid-premium';\nimport { DrilldownDashboardProps, DrilldownCardProps, DrilldownGridProps, AggregateMap } from './types';\n\nconst COMPONENT_NAME = 'DrilldownDashboard';\nconst CLASSNAME = 'redsift-drilldown-dashboard';\n\n// ---------------------------------------------------------------------------\n// Internal context\n// ---------------------------------------------------------------------------\n\ninterface DrilldownContextValue {\n aggregates: Record<string, AggregateMap>;\n filterModel: GridFilterModel;\n setFilterModel: React.Dispatch<React.SetStateAction<GridFilterModel>>;\n cardControlledFields: React.MutableRefObject<Set<string>>;\n isInternalUpdate: React.MutableRefObject<boolean>;\n getSelectedFromFilterModel: (field: string) => string[];\n updateFilterModel: (field: string, values: string[], operator?: string) => void;\n hasFilterForField: (field: string) => boolean;\n}\n\nconst DrilldownContext = createContext<DrilldownContextValue>(null as any);\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst getSelectedFromModel = (model: GridFilterModel, field: string): string[] => {\n const item = model.items.find((i) => i.field === field);\n if (!item) return [];\n const val = item.value;\n if (val == null) return [];\n return Array.isArray(val) ? val : [String(val)];\n};\n\nconst updateModel = (prev: GridFilterModel, field: string, values: string[], operator = 'isAnyOf'): GridFilterModel => {\n if (values.length === 0) {\n return { ...prev, items: prev.items.filter((i) => i.field !== field) };\n }\n const existing = prev.items.find((i) => i.field === field);\n if (existing) {\n return {\n ...prev,\n items: prev.items.map((i) => (i.field === field ? { ...i, value: values, operator } : i)),\n };\n }\n return { ...prev, items: [...prev.items, { field, operator, value: values }] };\n};\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\n/**\n * A compound component for the \"drilldown\" dashboard pattern.\n *\n * Unlike CrossfilteredDashboard, DataCards always show full-dataset aggregates\n * (no crossfiltering between cards). Clicking a card row applies a filter to\n * the DataGrid. If the DataGrid's filter panel sets a filter for a field,\n * the corresponding card is disabled.\n *\n * @example\n * ```tsx\n * <DrilldownDashboard data={rows} computeAggregates={computeAggregates}>\n * <DrilldownDashboard.Card field=\"Category\">\n * <DataCard color=\"warning\">\n * <DataCard.Header title=\"Category\" />\n * <DataCard.Listbox selectionMode=\"multiple\" aria-label=\"Filter by category\">\n * <DataRow legend=\"Bakery\" />\n * <DataRow legend=\"Beverage\" />\n * </DataCard.Listbox>\n * </DataCard>\n * </DrilldownDashboard.Card>\n * <DrilldownDashboard.Grid>\n * <DataGrid columns={columns} />\n * </DrilldownDashboard.Grid>\n * </DrilldownDashboard>\n * ```\n */\nconst DrilldownDashboardBase: Comp<DrilldownDashboardProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { children, className, data, computeAggregates: computeAggregatesFn, ...forwardedProps } = props;\n\n const [filterModel, setFilterModel] = useState<GridFilterModel>({ items: [] });\n const cardControlledFields = useRef(new Set<string>());\n const isInternalUpdate = useRef(false);\n\n const aggregates = useMemo(() => computeAggregatesFn(data), [data, computeAggregatesFn]);\n\n const getSelectedFromFilterModel = useCallback(\n (field: string) => getSelectedFromModel(filterModel, field),\n [filterModel]\n );\n\n const updateFilterModelFn = useCallback((field: string, values: string[], operator?: string) => {\n isInternalUpdate.current = true;\n cardControlledFields.current.add(field);\n setFilterModel((prev) => {\n const updated = updateModel(prev, field, values, operator);\n if (JSON.stringify(prev.items) === JSON.stringify(updated.items)) return prev;\n return updated;\n });\n }, []);\n\n const hasFilterForField = useCallback(\n (field: string) => filterModel.items.some((item) => item.field === field),\n [filterModel]\n );\n\n const contextValue = useMemo<DrilldownContextValue>(\n () => ({\n aggregates,\n filterModel,\n setFilterModel,\n cardControlledFields,\n isInternalUpdate,\n getSelectedFromFilterModel,\n updateFilterModel: updateFilterModelFn,\n hasFilterForField,\n }),\n [aggregates, filterModel, getSelectedFromFilterModel, updateFilterModelFn, hasFilterForField]\n );\n\n return (\n <DrilldownContext.Provider value={contextValue}>\n <div {...forwardedProps} className={classNames(CLASSNAME, className)} ref={ref}>\n {children}\n </div>\n </DrilldownContext.Provider>\n );\n});\nDrilldownDashboardBase.className = CLASSNAME;\nDrilldownDashboardBase.displayName = COMPONENT_NAME;\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/**\n * A DataCard slot in a DrilldownDashboard. Reads aggregates from context\n * and wires up selection state and filter model sync.\n *\n * The card renders its children with injected aggregate values and selection state.\n * When the DataGrid's filter panel controls the same field, the card is disabled.\n */\nconst Card: React.FC<DrilldownCardProps> = ({ field, children }) => {\n const ctx = useContext(DrilldownContext);\n const fieldAggregates = ctx.aggregates[field] ?? {};\n const selection = ctx.getSelectedFromFilterModel(field);\n const isDisabled = ctx.hasFilterForField(field) && !ctx.cardControlledFields.current.has(field);\n\n const handleChange = useCallback(\n (newValues: string[]) => {\n ctx.updateFilterModel(field, newValues);\n },\n [ctx, field]\n );\n\n // Clone the DataCard children and inject aggregate values + selection state\n if (!React.isValidElement(children)) return null;\n\n return React.cloneElement(children as React.ReactElement<any>, {\n _drilldown: { fieldAggregates, selection, isDisabled, onChange: handleChange },\n });\n};\nCard.displayName = 'DrilldownDashboard.Card';\n\n/**\n * A DataGrid slot in a DrilldownDashboard. Reads filterModel from context\n * and syncs changes back.\n */\nconst Grid: React.FC<DrilldownGridProps> = ({ children }) => {\n const ctx = useContext(DrilldownContext);\n\n const handleFilterModelChange = useCallback(\n (model: GridFilterModel) => {\n if (ctx.isInternalUpdate.current) {\n ctx.isInternalUpdate.current = false;\n ctx.setFilterModel((prev) => {\n if (JSON.stringify(prev.items) === JSON.stringify(model.items)) return prev;\n return model;\n });\n return;\n }\n const panelFields = new Set(model.items.map((item) => item.field));\n for (const f of panelFields) {\n ctx.cardControlledFields.current.delete(f);\n }\n for (const f of ctx.cardControlledFields.current) {\n if (!panelFields.has(f)) {\n ctx.cardControlledFields.current.delete(f);\n }\n }\n ctx.setFilterModel((prev) => {\n if (JSON.stringify(prev.items) === JSON.stringify(model.items)) return prev;\n return model;\n });\n },\n [ctx]\n );\n\n if (!React.isValidElement(children)) return null;\n\n return React.cloneElement(children as React.ReactElement<any>, {\n filterModel: ctx.filterModel,\n onFilterModelChange: handleFilterModelChange,\n });\n};\nGrid.displayName = 'DrilldownDashboard.Grid';\n\n/**\n * DrilldownDashboard with attached sub-components.\n */\nexport const DrilldownDashboard = Object.assign(DrilldownDashboardBase, {\n Card,\n Grid,\n});\n"],"names":["COMPONENT_NAME","CLASSNAME","DrilldownContext","createContext","getSelectedFromModel","model","field","item","items","find","i","val","value","Array","isArray","String","updateModel","prev","values","operator","arguments","length","undefined","_objectSpread","filter","existing","map","DrilldownDashboardBase","forwardRef","props","ref","children","className","data","computeAggregates","computeAggregatesFn","forwardedProps","_objectWithoutProperties","_excluded","filterModel","setFilterModel","useState","cardControlledFields","useRef","Set","isInternalUpdate","aggregates","useMemo","getSelectedFromFilterModel","useCallback","updateFilterModelFn","current","add","updated","JSON","stringify","hasFilterForField","some","contextValue","updateFilterModel","React","createElement","Provider","_extends","classNames","displayName","Card","_ref","_ctx$aggregates$field","ctx","useContext","fieldAggregates","selection","isDisabled","has","handleChange","newValues","isValidElement","cloneElement","_drilldown","onChange","Grid","_ref2","handleFilterModelChange","panelFields","f","delete","onFilterModelChange","DrilldownDashboard","Object","assign"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { _ as _objectWithoutProperties, a as _extends } from './_rollupPluginBabelHelpers.js';
2
2
  import React, { forwardRef, useState, useContext, useEffect } from 'react';
3
- import { gridFilteredSortedRowEntriesSelector, gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector } from '@mui/x-data-grid-pro';
3
+ import { gridFilteredSortedRowEntriesSelector, gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector } from '@mui/x-data-grid-premium';
4
4
  import classNames from 'classnames';
5
5
  import { saveAs } from 'file-saver';
6
6
  import { Font, StyleSheet, Document, Page, View, Image, Text, pdf } from '@react-pdf/renderer';
@@ -371,16 +371,16 @@ const PdfExportButton = /*#__PURE__*/forwardRef((props, ref) => {
371
371
  try {
372
372
  const dashboardImage = await getDashboardImage(componentRef || dashboardRef);
373
373
  let dataTable;
374
- if (dataGridApiRef && dataGridApiRef.current && Object.keys(dataGridApiRef.current).length) {
374
+ if (dataGridApiRef !== null && dataGridApiRef !== void 0 && dataGridApiRef.current) {
375
375
  dataTable = {
376
- data: gridFilteredSortedRowEntriesSelector(dataGridApiRef.current.state, dataGridApiRef.current.instanceId).slice(0, 1000).map(_ref => {
376
+ data: gridFilteredSortedRowEntriesSelector(dataGridApiRef).slice(0, 1000).map(_ref => {
377
377
  let {
378
378
  model
379
379
  } = _ref;
380
380
  return model;
381
381
  }),
382
- columns: gridVisibleColumnDefinitionsSelector(dataGridApiRef.current.state, dataGridApiRef.current.instanceId),
383
- totalWidth: gridColumnsTotalWidthSelector(dataGridApiRef.current.state, dataGridApiRef.current.instanceId)
382
+ columns: gridVisibleColumnDefinitionsSelector(dataGridApiRef),
383
+ totalWidth: gridColumnsTotalWidthSelector(dataGridApiRef)
384
384
  };
385
385
  }
386
386
  const doc = /*#__PURE__*/React.createElement(PdfDocument, {
@@ -1 +1 @@
1
- {"version":3,"file":"PdfExportButton2.js","sources":["../../src/components/PdfExportButton/styles.ts","../../src/components/PdfExportButton/PdfDocument.tsx","../../src/components/PdfExportButton/PdfExportButton.tsx"],"sourcesContent":["// istanbul ignore file\n\nimport { Font, StyleSheet } from '@react-pdf/renderer';\nconst BACKGROUND_COLOR = '#F8F8F8';\nconst GREY_1 = '#E2E6EA';\nconst GREY_2 = '#bff0fd';\n\nexport const getPdfStyles = (primaryColor: string) => {\n Font.register({\n family: 'Source Code Pro',\n fonts: [\n {\n src: 'https://fonts.gstatic.com/s/sourcecodepro/v7/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vT.ttf',\n },\n ],\n });\n\n Font.register({\n family: 'Roboto',\n fonts: [\n {\n fontWeight: 700,\n src: 'https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/fonts/roboto/Roboto-Regular.ttf',\n },\n {\n fontWeight: 400,\n src: 'https://cdnjs.cloudflare.com/ajax/libs/ink/3.1.10/fonts/Roboto/roboto-light-webfont.ttf',\n },\n ],\n });\n\n return StyleSheet.create({\n page: {\n borderTopStyle: 'solid',\n borderTopWidth: 32,\n borderTopColor: primaryColor,\n borderBottomStyle: 'solid',\n borderBottomWidth: 6,\n borderBottomColor: primaryColor,\n backgroundColor: BACKGROUND_COLOR,\n paddingTop: 20,\n paddingBottom: 40,\n },\n logoContainer: {\n margin: 0,\n paddingBottom: 10,\n alignItems: 'center',\n width: '100%',\n },\n logo: {\n width: 'auto',\n height: 30,\n },\n introductionContainer: {\n lineHeight: 1.4,\n textAlign: 'center',\n marginHorizontal: 40,\n marginVertical: 10,\n },\n introductionText: {\n fontSize: 8,\n fontFamily: 'Roboto',\n fontWeight: 400,\n color: 'black',\n },\n pageNumber: {\n fontFamily: 'Source Code Pro',\n position: 'absolute',\n fontSize: 6,\n bottom: 5,\n right: 20,\n left: 0,\n textAlign: 'right',\n color: 'black',\n },\n pageContinue: {\n fontSize: 8,\n fontFamily: 'Roboto',\n fontWeight: 400,\n top: -10,\n left: 20,\n },\n tableContainer: {\n backgroundColor: 'white',\n marginHorizontal: 20,\n marginVertical: 10,\n paddingTop: 10,\n paddingLeft: 10,\n borderRightWidth: 1,\n borderBottomWidth: 1,\n borderRightColor: BACKGROUND_COLOR,\n borderBottomColor: GREY_1,\n width: 'auto',\n },\n tableRowContainer: {\n flexDirection: 'row',\n borderBottomColor: GREY_2,\n alignItems: 'flex-start',\n fontSize: 8,\n marginLeft: 16,\n marginRight: 24,\n height: 'auto',\n },\n tableHeaderContainer: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n fontSize: 7,\n fontFamily: 'Roboto',\n fontWeight: 700,\n marginLeft: 16,\n marginRight: 24,\n marginBottom: 12,\n paddingTop: 12,\n paddingBottom: 12,\n borderBottomWidth: 2,\n borderBottomColor: primaryColor,\n },\n tableCellHeaderText: {\n fontSize: 7,\n fontFamily: 'Roboto',\n fontWeight: 700,\n color: 'black',\n overflow: 'hidden',\n },\n tableCellText: {\n fontSize: 6,\n lineHeight: 1.5,\n fontFamily: 'Roboto',\n fontWeight: 400,\n color: 'black',\n overflow: 'hidden',\n },\n dashboardImageContainer: {\n marginHorizontal: 20,\n marginTop: 0,\n marginBottom: 10,\n },\n constraintsContainer: {\n width: 'auto',\n height: 'auto',\n paddingVertical: 30,\n textAlign: 'center',\n },\n constraints: {\n fontSize: 6,\n fontFamily: 'Roboto',\n fontWeight: 700,\n color: 'black',\n },\n });\n};\n","// istanbul ignore file\n\nimport React from 'react';\nimport { Document, Image, Page, Text, View } from '@react-pdf/renderer';\nimport { GridValidRowModel } from '@mui/x-data-grid-pro';\nimport { PdfTableColumn, PdfTableRowProps, PdfTableProps, PdfDocumentProps, PdfStyles } from './types';\nimport { getPdfStyles } from './styles';\n\nconst DEFAULT_COLUMN_WIDTH = 100;\n\nconst getWidthColumn = (width: number, totalW: number, nrColumns: number) => {\n // calculation width column where the 7px margin between the columns is included\n return `${Math.round((width * 100) / (totalW - 7 * (nrColumns - 1)))}%`;\n};\n\nconst PdfTableRow = ({ rowIndex, rowData, columns, styles, totalWidth }: PdfTableRowProps) => {\n return (\n <View style={styles.tableRowContainer} key={`row-${rowIndex}`}>\n {columns.map((column: PdfTableColumn, index: number) => {\n const { field, width } = column;\n let totalW = totalWidth;\n let nrColumns = columns.length;\n\n // The checkbox in the table will not be printed\n if (field === '__check__') {\n totalW = totalW - (width || 50);\n nrColumns = nrColumns - 1;\n return;\n }\n const widthColumn = getWidthColumn(width || DEFAULT_COLUMN_WIDTH, totalW, nrColumns);\n\n // Empty value will print '-'\n if (!rowData[field]) {\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`cell-${rowIndex}-${index}`}\n >\n <Text style={styles.tableCellText}>{'-'}</Text>\n </View>\n );\n }\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`cell-${rowIndex}-${index}`}\n >\n <Text style={styles.tableCellText}>\n {Array.isArray(rowData[field]) ? rowData[field].join(', ') : rowData[field]}\n </Text>\n </View>\n );\n })}\n </View>\n );\n};\n\nconst PdfTable = ({ dataTable, styles, localeText }: PdfTableProps) => {\n const { data, columns, totalWidth } = dataTable;\n\n return (\n <>\n <View style={styles.tableHeaderContainer}>\n {columns.map((column: PdfTableColumn) => {\n let totalW = totalWidth;\n let nrColumns = columns.length;\n const { field, headerName, width } = column;\n\n // The checkbox in the table will not be printed\n if (field === '__check__') {\n totalW = totalW - (width || 50);\n nrColumns = nrColumns - 1;\n return;\n }\n const widthColumn = getWidthColumn(width || DEFAULT_COLUMN_WIDTH, totalW, nrColumns);\n\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`heading-${field}`}\n >\n <Text style={styles.tableCellHeaderText}>{headerName}</Text>\n </View>\n );\n })}\n </View>\n <View>\n {data.map((row: GridValidRowModel, index: number) => {\n if (index < 1000) {\n return (\n <PdfTableRow\n key={index}\n rowIndex={index}\n rowData={data[index]}\n columns={columns}\n styles={styles}\n totalWidth={totalWidth}\n />\n );\n }\n })}\n </View>\n {data.length >= 1000 ? (\n <View style={styles.constraintsContainer}>\n <Text style={styles.constraints}>\n {localeText?.maxSizeDisclaimer ||\n 'Due to processing constraints this pdf is limited to the first 1000 rows of data.'}\n </Text>\n </View>\n ) : null}\n </>\n );\n};\n\nconst Pagination = ({ styles }: { styles: PdfStyles }) => {\n return (\n <Text style={styles.pageNumber} render={({ pageNumber, totalPages }) => `${pageNumber}/${totalPages}`} fixed />\n );\n};\n\nexport const PdfDocument = ({\n dashboardImage,\n introduction,\n localeText,\n logo,\n dataTable,\n primaryColor,\n}: PdfDocumentProps) => {\n const styles = getPdfStyles(primaryColor);\n\n return (\n <Document>\n <Page size=\"A4\" style={styles.page}>\n <>\n {logo ? (\n <View style={styles.logoContainer}>\n <Image src={logo} style={styles.logo} />\n </View>\n ) : null}\n {introduction ? (\n <View style={styles.introductionContainer}>\n <Text style={styles.introductionText}>{introduction}</Text>\n </View>\n ) : null}\n {dashboardImage ? (\n <View style={styles.dashboardImageContainer}>\n <Image src={dashboardImage as unknown as string} />\n </View>\n ) : null}\n {dataTable ? (\n <View style={styles.tableContainer}>\n <PdfTable dataTable={dataTable} styles={styles} localeText={localeText} />\n </View>\n ) : null}\n\n <Pagination styles={styles} />\n </>\n </Page>\n </Document>\n );\n};\n","// istanbul ignore file\n\nimport React, {\n forwardRef,\n JSXElementConstructor,\n ReactElement,\n RefObject,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n gridFilteredSortedRowEntriesSelector,\n gridVisibleColumnDefinitionsSelector,\n gridColumnsTotalWidthSelector,\n} from '@mui/x-data-grid-pro';\nimport classNames from 'classnames';\nimport { saveAs } from 'file-saver';\nimport { pdf } from '@react-pdf/renderer';\nimport domToImage from 'dom-to-image';\n\nimport { Comp, Button, Spinner, RedsiftColorBlueD1 } from '@redsift/design-system';\n\nimport { PdfExportButtonProps } from './types';\nimport { PdfDocument } from './PdfDocument';\nimport { DashboardContext } from '../Dashboard';\n\nconst COMPONENT_NAME = 'PdfExportButton';\nconst CLASSNAME = 'redsift-pdf-export-button';\n\nconst getDashboardImage = async (componentRef: RefObject<HTMLElement>): Promise<string> => {\n const filter = (el: Node) => {\n const classList = (el as HTMLElement).classList;\n return !(classList?.contains('redsift-datagrid') || classList?.contains('redsift-button'));\n };\n\n const dashboardHeight = (componentRef.current as HTMLElement).getBoundingClientRect().height;\n const datagridHeight =\n (componentRef.current as HTMLElement)?.getElementsByClassName('redsift-datagrid')?.[0]?.getBoundingClientRect()\n ?.height || 0;\n\n return new Promise((resolve) => {\n domToImage\n .toPng(componentRef.current as HTMLElement, {\n filter,\n height: dashboardHeight - datagridHeight,\n })\n .then(function (dataUrl: string) {\n resolve(dataUrl);\n })\n .catch(() => {\n resolve('');\n });\n });\n};\n\nexport const PdfExportButton: Comp<PdfExportButtonProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const {\n children,\n className,\n componentRef: propComponentRef,\n fileName,\n introduction,\n localeText,\n logo,\n onClick,\n primaryColor,\n ...forwardedProps\n } = props;\n const [componentRef, setComponentRef] = useState(propComponentRef);\n const [isLoading, setIsLoading] = useState(false);\n\n const { dashboardRef, dataGridApiRef } = useContext(DashboardContext);\n\n useEffect(() => {\n if (!componentRef || !componentRef.current) {\n setComponentRef(dashboardRef);\n }\n }, [dashboardRef]);\n\n const exportPdf = async () => {\n if (onClick) {\n onClick();\n }\n setIsLoading(true);\n try {\n const dashboardImage = await getDashboardImage(componentRef || dashboardRef!);\n\n let dataTable;\n if (dataGridApiRef && dataGridApiRef.current && Object.keys(dataGridApiRef.current).length) {\n dataTable = {\n data: gridFilteredSortedRowEntriesSelector(dataGridApiRef.current.state, dataGridApiRef.current.instanceId)\n .slice(0, 1000)\n .map(({ model }) => model),\n columns: gridVisibleColumnDefinitionsSelector(\n dataGridApiRef.current.state,\n dataGridApiRef.current.instanceId\n ),\n totalWidth: gridColumnsTotalWidthSelector(dataGridApiRef.current.state, dataGridApiRef.current.instanceId),\n };\n }\n\n const doc = (\n <PdfDocument\n localeText={localeText}\n dashboardImage={dashboardImage}\n introduction={introduction}\n logo={logo}\n primaryColor={primaryColor || RedsiftColorBlueD1}\n dataTable={dataTable}\n />\n );\n const asPdf = pdf([] as unknown as ReactElement<any, string | JSXElementConstructor<any>>);\n asPdf.updateContainer(doc);\n const blob = await asPdf.toBlob();\n saveAs(blob, fileName || 'redsift-dashboard.pdf');\n } catch (e) {\n console.log('error:', e);\n }\n setIsLoading(false);\n };\n\n return (\n <Button\n className={classNames(PdfExportButton.className, className)}\n onClick={exportPdf}\n isDisabled={isLoading}\n {...forwardedProps}\n ref={ref as RefObject<HTMLButtonElement>}\n >\n {isLoading ? <Spinner size=\"xsmall\" isColored={false} /> : null} {children}\n </Button>\n );\n});\nPdfExportButton.className = CLASSNAME;\nPdfExportButton.displayName = COMPONENT_NAME;\n"],"names":["BACKGROUND_COLOR","GREY_1","GREY_2","getPdfStyles","primaryColor","Font","register","family","fonts","src","fontWeight","StyleSheet","create","page","borderTopStyle","borderTopWidth","borderTopColor","borderBottomStyle","borderBottomWidth","borderBottomColor","backgroundColor","paddingTop","paddingBottom","logoContainer","margin","alignItems","width","logo","height","introductionContainer","lineHeight","textAlign","marginHorizontal","marginVertical","introductionText","fontSize","fontFamily","color","pageNumber","position","bottom","right","left","pageContinue","top","tableContainer","paddingLeft","borderRightWidth","borderRightColor","tableRowContainer","flexDirection","marginLeft","marginRight","tableHeaderContainer","marginBottom","tableCellHeaderText","overflow","tableCellText","dashboardImageContainer","marginTop","constraintsContainer","paddingVertical","constraints","DEFAULT_COLUMN_WIDTH","getWidthColumn","totalW","nrColumns","Math","round","PdfTableRow","_ref","rowIndex","rowData","columns","styles","totalWidth","React","createElement","View","style","key","map","column","index","field","length","widthColumn","Text","Array","isArray","join","PdfTable","_ref2","dataTable","localeText","data","Fragment","headerName","row","maxSizeDisclaimer","Pagination","_ref3","render","_ref4","totalPages","fixed","PdfDocument","_ref5","dashboardImage","introduction","Document","Page","size","Image","COMPONENT_NAME","CLASSNAME","getDashboardImage","componentRef","_componentRef$current","_componentRef$current2","_componentRef$current3","_componentRef$current4","filter","el","classList","contains","dashboardHeight","current","getBoundingClientRect","datagridHeight","getElementsByClassName","Promise","resolve","domToImage","toPng","then","dataUrl","catch","PdfExportButton","forwardRef","props","ref","children","className","propComponentRef","fileName","onClick","forwardedProps","_objectWithoutProperties","_excluded","setComponentRef","useState","isLoading","setIsLoading","dashboardRef","dataGridApiRef","useContext","DashboardContext","useEffect","exportPdf","Object","keys","gridFilteredSortedRowEntriesSelector","state","instanceId","slice","model","gridVisibleColumnDefinitionsSelector","gridColumnsTotalWidthSelector","doc","RedsiftColorBlueD1","asPdf","pdf","updateContainer","blob","toBlob","saveAs","e","console","log","Button","_extends","classNames","isDisabled","Spinner","isColored","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"PdfExportButton2.js","sources":["../../src/components/PdfExportButton/styles.ts","../../src/components/PdfExportButton/PdfDocument.tsx","../../src/components/PdfExportButton/PdfExportButton.tsx"],"sourcesContent":["// istanbul ignore file\n\nimport { Font, StyleSheet } from '@react-pdf/renderer';\nconst BACKGROUND_COLOR = '#F8F8F8';\nconst GREY_1 = '#E2E6EA';\nconst GREY_2 = '#bff0fd';\n\nexport const getPdfStyles = (primaryColor: string) => {\n Font.register({\n family: 'Source Code Pro',\n fonts: [\n {\n src: 'https://fonts.gstatic.com/s/sourcecodepro/v7/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vT.ttf',\n },\n ],\n });\n\n Font.register({\n family: 'Roboto',\n fonts: [\n {\n fontWeight: 700,\n src: 'https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/fonts/roboto/Roboto-Regular.ttf',\n },\n {\n fontWeight: 400,\n src: 'https://cdnjs.cloudflare.com/ajax/libs/ink/3.1.10/fonts/Roboto/roboto-light-webfont.ttf',\n },\n ],\n });\n\n return StyleSheet.create({\n page: {\n borderTopStyle: 'solid',\n borderTopWidth: 32,\n borderTopColor: primaryColor,\n borderBottomStyle: 'solid',\n borderBottomWidth: 6,\n borderBottomColor: primaryColor,\n backgroundColor: BACKGROUND_COLOR,\n paddingTop: 20,\n paddingBottom: 40,\n },\n logoContainer: {\n margin: 0,\n paddingBottom: 10,\n alignItems: 'center',\n width: '100%',\n },\n logo: {\n width: 'auto',\n height: 30,\n },\n introductionContainer: {\n lineHeight: 1.4,\n textAlign: 'center',\n marginHorizontal: 40,\n marginVertical: 10,\n },\n introductionText: {\n fontSize: 8,\n fontFamily: 'Roboto',\n fontWeight: 400,\n color: 'black',\n },\n pageNumber: {\n fontFamily: 'Source Code Pro',\n position: 'absolute',\n fontSize: 6,\n bottom: 5,\n right: 20,\n left: 0,\n textAlign: 'right',\n color: 'black',\n },\n pageContinue: {\n fontSize: 8,\n fontFamily: 'Roboto',\n fontWeight: 400,\n top: -10,\n left: 20,\n },\n tableContainer: {\n backgroundColor: 'white',\n marginHorizontal: 20,\n marginVertical: 10,\n paddingTop: 10,\n paddingLeft: 10,\n borderRightWidth: 1,\n borderBottomWidth: 1,\n borderRightColor: BACKGROUND_COLOR,\n borderBottomColor: GREY_1,\n width: 'auto',\n },\n tableRowContainer: {\n flexDirection: 'row',\n borderBottomColor: GREY_2,\n alignItems: 'flex-start',\n fontSize: 8,\n marginLeft: 16,\n marginRight: 24,\n height: 'auto',\n },\n tableHeaderContainer: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n fontSize: 7,\n fontFamily: 'Roboto',\n fontWeight: 700,\n marginLeft: 16,\n marginRight: 24,\n marginBottom: 12,\n paddingTop: 12,\n paddingBottom: 12,\n borderBottomWidth: 2,\n borderBottomColor: primaryColor,\n },\n tableCellHeaderText: {\n fontSize: 7,\n fontFamily: 'Roboto',\n fontWeight: 700,\n color: 'black',\n overflow: 'hidden',\n },\n tableCellText: {\n fontSize: 6,\n lineHeight: 1.5,\n fontFamily: 'Roboto',\n fontWeight: 400,\n color: 'black',\n overflow: 'hidden',\n },\n dashboardImageContainer: {\n marginHorizontal: 20,\n marginTop: 0,\n marginBottom: 10,\n },\n constraintsContainer: {\n width: 'auto',\n height: 'auto',\n paddingVertical: 30,\n textAlign: 'center',\n },\n constraints: {\n fontSize: 6,\n fontFamily: 'Roboto',\n fontWeight: 700,\n color: 'black',\n },\n });\n};\n","// istanbul ignore file\n\nimport React from 'react';\nimport { Document, Image, Page, Text, View } from '@react-pdf/renderer';\nimport { GridValidRowModel } from '@mui/x-data-grid-premium';\nimport { PdfTableColumn, PdfTableRowProps, PdfTableProps, PdfDocumentProps, PdfStyles } from './types';\nimport { getPdfStyles } from './styles';\n\nconst DEFAULT_COLUMN_WIDTH = 100;\n\nconst getWidthColumn = (width: number, totalW: number, nrColumns: number) => {\n // calculation width column where the 7px margin between the columns is included\n return `${Math.round((width * 100) / (totalW - 7 * (nrColumns - 1)))}%`;\n};\n\nconst PdfTableRow = ({ rowIndex, rowData, columns, styles, totalWidth }: PdfTableRowProps) => {\n return (\n <View style={styles.tableRowContainer} key={`row-${rowIndex}`}>\n {columns.map((column: PdfTableColumn, index: number) => {\n const { field, width } = column;\n let totalW = totalWidth;\n let nrColumns = columns.length;\n\n // The checkbox in the table will not be printed\n if (field === '__check__') {\n totalW = totalW - (width || 50);\n nrColumns = nrColumns - 1;\n return;\n }\n const widthColumn = getWidthColumn(width || DEFAULT_COLUMN_WIDTH, totalW, nrColumns);\n\n // Empty value will print '-'\n if (!rowData[field]) {\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`cell-${rowIndex}-${index}`}\n >\n <Text style={styles.tableCellText}>{'-'}</Text>\n </View>\n );\n }\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`cell-${rowIndex}-${index}`}\n >\n <Text style={styles.tableCellText}>\n {Array.isArray(rowData[field]) ? rowData[field].join(', ') : rowData[field]}\n </Text>\n </View>\n );\n })}\n </View>\n );\n};\n\nconst PdfTable = ({ dataTable, styles, localeText }: PdfTableProps) => {\n const { data, columns, totalWidth } = dataTable;\n\n return (\n <>\n <View style={styles.tableHeaderContainer}>\n {columns.map((column: PdfTableColumn) => {\n let totalW = totalWidth;\n let nrColumns = columns.length;\n const { field, headerName, width } = column;\n\n // The checkbox in the table will not be printed\n if (field === '__check__') {\n totalW = totalW - (width || 50);\n nrColumns = nrColumns - 1;\n return;\n }\n const widthColumn = getWidthColumn(width || DEFAULT_COLUMN_WIDTH, totalW, nrColumns);\n\n return (\n <View\n style={{\n width: widthColumn,\n paddingVertical: 2,\n marginRight: 7,\n }}\n key={`heading-${field}`}\n >\n <Text style={styles.tableCellHeaderText}>{headerName}</Text>\n </View>\n );\n })}\n </View>\n <View>\n {data.map((row: GridValidRowModel, index: number) => {\n if (index < 1000) {\n return (\n <PdfTableRow\n key={index}\n rowIndex={index}\n rowData={data[index]}\n columns={columns}\n styles={styles}\n totalWidth={totalWidth}\n />\n );\n }\n })}\n </View>\n {data.length >= 1000 ? (\n <View style={styles.constraintsContainer}>\n <Text style={styles.constraints}>\n {localeText?.maxSizeDisclaimer ||\n 'Due to processing constraints this pdf is limited to the first 1000 rows of data.'}\n </Text>\n </View>\n ) : null}\n </>\n );\n};\n\nconst Pagination = ({ styles }: { styles: PdfStyles }) => {\n return (\n <Text style={styles.pageNumber} render={({ pageNumber, totalPages }) => `${pageNumber}/${totalPages}`} fixed />\n );\n};\n\nexport const PdfDocument = ({\n dashboardImage,\n introduction,\n localeText,\n logo,\n dataTable,\n primaryColor,\n}: PdfDocumentProps) => {\n const styles = getPdfStyles(primaryColor);\n\n return (\n <Document>\n <Page size=\"A4\" style={styles.page}>\n <>\n {logo ? (\n <View style={styles.logoContainer}>\n <Image src={logo} style={styles.logo} />\n </View>\n ) : null}\n {introduction ? (\n <View style={styles.introductionContainer}>\n <Text style={styles.introductionText}>{introduction}</Text>\n </View>\n ) : null}\n {dashboardImage ? (\n <View style={styles.dashboardImageContainer}>\n <Image src={dashboardImage as unknown as string} />\n </View>\n ) : null}\n {dataTable ? (\n <View style={styles.tableContainer}>\n <PdfTable dataTable={dataTable} styles={styles} localeText={localeText} />\n </View>\n ) : null}\n\n <Pagination styles={styles} />\n </>\n </Page>\n </Document>\n );\n};\n","// istanbul ignore file\n\nimport React, {\n forwardRef,\n JSXElementConstructor,\n ReactElement,\n RefObject,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n gridFilteredSortedRowEntriesSelector,\n gridVisibleColumnDefinitionsSelector,\n gridColumnsTotalWidthSelector,\n} from '@mui/x-data-grid-premium';\nimport classNames from 'classnames';\nimport { saveAs } from 'file-saver';\nimport { pdf } from '@react-pdf/renderer';\nimport domToImage from 'dom-to-image';\n\nimport { Comp, Button, Spinner, RedsiftColorBlueD1 } from '@redsift/design-system';\n\nimport { PdfExportButtonProps } from './types';\nimport { PdfDocument } from './PdfDocument';\nimport { DashboardContext } from '../Dashboard';\n\nconst COMPONENT_NAME = 'PdfExportButton';\nconst CLASSNAME = 'redsift-pdf-export-button';\n\nconst getDashboardImage = async (componentRef: RefObject<HTMLElement>): Promise<string> => {\n const filter = (el: Node) => {\n const classList = (el as HTMLElement).classList;\n return !(classList?.contains('redsift-datagrid') || classList?.contains('redsift-button'));\n };\n\n const dashboardHeight = (componentRef.current as HTMLElement).getBoundingClientRect().height;\n const datagridHeight =\n (componentRef.current as HTMLElement)?.getElementsByClassName('redsift-datagrid')?.[0]?.getBoundingClientRect()\n ?.height || 0;\n\n return new Promise((resolve) => {\n domToImage\n .toPng(componentRef.current as HTMLElement, {\n filter,\n height: dashboardHeight - datagridHeight,\n })\n .then(function (dataUrl: string) {\n resolve(dataUrl);\n })\n .catch(() => {\n resolve('');\n });\n });\n};\n\nexport const PdfExportButton: Comp<PdfExportButtonProps, HTMLButtonElement> = forwardRef((props, ref) => {\n const {\n children,\n className,\n componentRef: propComponentRef,\n fileName,\n introduction,\n localeText,\n logo,\n onClick,\n primaryColor,\n ...forwardedProps\n } = props;\n const [componentRef, setComponentRef] = useState(propComponentRef);\n const [isLoading, setIsLoading] = useState(false);\n\n const { dashboardRef, dataGridApiRef } = useContext(DashboardContext);\n\n useEffect(() => {\n if (!componentRef || !componentRef.current) {\n setComponentRef(dashboardRef);\n }\n }, [dashboardRef]);\n\n const exportPdf = async () => {\n if (onClick) {\n onClick();\n }\n setIsLoading(true);\n try {\n const dashboardImage = await getDashboardImage(componentRef || dashboardRef!);\n\n let dataTable;\n if (dataGridApiRef?.current) {\n dataTable = {\n data: gridFilteredSortedRowEntriesSelector(dataGridApiRef)\n .slice(0, 1000)\n .map(({ model }) => model),\n columns: gridVisibleColumnDefinitionsSelector(dataGridApiRef),\n totalWidth: gridColumnsTotalWidthSelector(dataGridApiRef),\n };\n }\n\n const doc = (\n <PdfDocument\n localeText={localeText}\n dashboardImage={dashboardImage}\n introduction={introduction}\n logo={logo}\n primaryColor={primaryColor || RedsiftColorBlueD1}\n dataTable={dataTable}\n />\n );\n const asPdf = pdf([] as unknown as ReactElement<any, string | JSXElementConstructor<any>>);\n asPdf.updateContainer(doc);\n const blob = await asPdf.toBlob();\n saveAs(blob, fileName || 'redsift-dashboard.pdf');\n } catch (e) {\n console.log('error:', e);\n }\n setIsLoading(false);\n };\n\n return (\n <Button\n className={classNames(PdfExportButton.className, className)}\n onClick={exportPdf}\n isDisabled={isLoading}\n {...forwardedProps}\n ref={ref as RefObject<HTMLButtonElement>}\n >\n {isLoading ? <Spinner size=\"xsmall\" isColored={false} /> : null} {children}\n </Button>\n );\n});\nPdfExportButton.className = CLASSNAME;\nPdfExportButton.displayName = COMPONENT_NAME;\n"],"names":["BACKGROUND_COLOR","GREY_1","GREY_2","getPdfStyles","primaryColor","Font","register","family","fonts","src","fontWeight","StyleSheet","create","page","borderTopStyle","borderTopWidth","borderTopColor","borderBottomStyle","borderBottomWidth","borderBottomColor","backgroundColor","paddingTop","paddingBottom","logoContainer","margin","alignItems","width","logo","height","introductionContainer","lineHeight","textAlign","marginHorizontal","marginVertical","introductionText","fontSize","fontFamily","color","pageNumber","position","bottom","right","left","pageContinue","top","tableContainer","paddingLeft","borderRightWidth","borderRightColor","tableRowContainer","flexDirection","marginLeft","marginRight","tableHeaderContainer","marginBottom","tableCellHeaderText","overflow","tableCellText","dashboardImageContainer","marginTop","constraintsContainer","paddingVertical","constraints","DEFAULT_COLUMN_WIDTH","getWidthColumn","totalW","nrColumns","Math","round","PdfTableRow","_ref","rowIndex","rowData","columns","styles","totalWidth","React","createElement","View","style","key","map","column","index","field","length","widthColumn","Text","Array","isArray","join","PdfTable","_ref2","dataTable","localeText","data","Fragment","headerName","row","maxSizeDisclaimer","Pagination","_ref3","render","_ref4","totalPages","fixed","PdfDocument","_ref5","dashboardImage","introduction","Document","Page","size","Image","COMPONENT_NAME","CLASSNAME","getDashboardImage","componentRef","_componentRef$current","_componentRef$current2","_componentRef$current3","_componentRef$current4","filter","el","classList","contains","dashboardHeight","current","getBoundingClientRect","datagridHeight","getElementsByClassName","Promise","resolve","domToImage","toPng","then","dataUrl","catch","PdfExportButton","forwardRef","props","ref","children","className","propComponentRef","fileName","onClick","forwardedProps","_objectWithoutProperties","_excluded","setComponentRef","useState","isLoading","setIsLoading","dashboardRef","dataGridApiRef","useContext","DashboardContext","useEffect","exportPdf","gridFilteredSortedRowEntriesSelector","slice","model","gridVisibleColumnDefinitionsSelector","gridColumnsTotalWidthSelector","doc","RedsiftColorBlueD1","asPdf","pdf","updateContainer","blob","toBlob","saveAs","e","console","log","Button","_extends","classNames","isDisabled","Spinner","isColored","displayName"],"mappings":"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"}
@@ -1,101 +1,12 @@
1
1
  import { b as _objectSpread2, a as _extends } from './_rollupPluginBabelHelpers.js';
2
- import React, { useRef, useMemo, useContext, useState, useEffect, useCallback, isValidElement, Children } from 'react';
2
+ import React, { useRef, useContext, useState, useEffect, useCallback, isValidElement, useMemo, Children } from 'react';
3
3
  import { useId, isComponent } from '@redsift/design-system';
4
+ import { useCategoricalChartAsListbox } from '@redsift/dashboard/hooks/useCategoricalChartAsListbox';
4
5
  import { D as DashboardContext } from './context.js';
5
6
  import { D as DashboardReducerActionType } from './types.js';
6
7
  import { C as ChartEmptyState } from './ChartEmptyState2.js';
7
8
  import { C as CrossfilterRegistry } from './CrossfilterRegistry2.js';
8
9
 
9
- /**
10
- * Hook to give to a chart the roles, events and attributes of a listbox.
11
- */
12
- const useCategoricalChartAsListbox = _ref => {
13
- let {
14
- id,
15
- ref,
16
- type,
17
- ndxGroup,
18
- orientation = 'horizontal'
19
- } = _ref;
20
- const currentIndexRef = useRef(0);
21
- const props = useMemo(() => {
22
- const numberOfGroups = ndxGroup === null || ndxGroup === void 0 ? void 0 : ndxGroup.all().filter(datum => datum.value).length;
23
- if (ref && numberOfGroups) {
24
- const getCurrentOption = () => ref.current.querySelector(`._${currentIndexRef.current}`);
25
- const next = () => {
26
- getCurrentOption().classList.remove('focused');
27
- const index = currentIndexRef.current === numberOfGroups - 1 ? 0 : currentIndexRef.current + 1;
28
- currentIndexRef.current = index;
29
- ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-${currentIndexRef.current}`);
30
- getCurrentOption().classList.add('focused');
31
- };
32
- const previous = () => {
33
- getCurrentOption().classList.remove('focused');
34
- const index = currentIndexRef.current === 0 ? numberOfGroups - 1 : currentIndexRef.current - 1;
35
- currentIndexRef.current = index;
36
- ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-${currentIndexRef.current}`);
37
- getCurrentOption().classList.add('focused');
38
- };
39
- const focus = () => {
40
- ref.current.setAttribute('aria-activedescendant', `id${id}__${type}-0`);
41
- getCurrentOption().classList.add('focused');
42
- };
43
- const blur = () => {
44
- getCurrentOption().classList.remove('focused');
45
- currentIndexRef.current = 0;
46
- ref.current.setAttribute('aria-activedescendant', '');
47
- };
48
- const keydown = e => {
49
- e.stopPropagation();
50
- switch (e.code) {
51
- case 'ArrowRight':
52
- if (orientation === 'horizontal') {
53
- e.preventDefault();
54
- next();
55
- }
56
- break;
57
- case 'ArrowLeft':
58
- if (orientation === 'horizontal') {
59
- e.preventDefault();
60
- previous();
61
- }
62
- break;
63
- case 'ArrowDown':
64
- if (orientation === 'vertical') {
65
- e.preventDefault();
66
- next();
67
- }
68
- break;
69
- case 'ArrowUp':
70
- if (orientation === 'vertical') {
71
- e.preventDefault();
72
- previous();
73
- }
74
- break;
75
- case 'Enter':
76
- case 'Space':
77
- e.preventDefault();
78
- getCurrentOption().dispatchEvent(new Event('click'));
79
- break;
80
- }
81
- };
82
- return {
83
- 'aria-activedescendant': '',
84
- 'aria-multiselectable': 'true',
85
- 'aria-orientation': orientation,
86
- role: 'listbox',
87
- tabIndex: 0,
88
- onFocus: focus,
89
- onBlur: blur,
90
- onMouseDown: event => event.preventDefault(),
91
- onMouseLeave: blur,
92
- onKeyDown: keydown
93
- };
94
- }
95
- }, [ref, ref.current, ndxGroup, JSON.parse(JSON.stringify((ndxGroup === null || ndxGroup === void 0 ? void 0 : ndxGroup.all()) || ''))]);
96
- return props;
97
- };
98
-
99
10
  const FilterableBarChart = props => {
100
11
  const {
101
12
  children,
@@ -461,12 +372,9 @@ const FilterableDataGrid = props => {
461
372
  const {
462
373
  tableFilters
463
374
  } = state;
464
- const [filterModel, setFilterModel] = useState();
465
- useEffect(() => {
466
- setFilterModel(_objectSpread2(_objectSpread2({}, filterModel), {}, {
467
- items: tableFilters
468
- }));
469
- }, [tableFilters]);
375
+ const filterModel = useMemo(() => ({
376
+ items: tableFilters
377
+ }), [tableFilters]);
470
378
  const updateChartFilters = filterModel => {
471
379
  dispatch === null || dispatch === void 0 ? void 0 : dispatch({
472
380
  type: DashboardReducerActionType.FilterTableBatch,