@redsift/ds-mcp-server 12.5.13-muiv6 → 12.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/data/demos/patterns/_shared/StateDebugPanel.tsx +2 -2
  2. package/data/demos/patterns/_shared/columns.tsx +12 -3
  3. package/data/demos/patterns/_shared/defaults.ts +1 -1
  4. package/data/demos/patterns/_shared/filter-helpers.ts +1 -1
  5. package/data/demos/patterns/_shared/helpers.tsx +1 -1
  6. package/data/demos/patterns/_shared/server-logic.ts +1 -1
  7. package/data/demos/patterns/_shared/story-helpers.ts +106 -22
  8. package/data/demos/patterns/crossfiltered-datagrid-client-side/CrossfilteredDatagridClientSide.interaction.stories.tsx +1 -18
  9. package/data/demos/patterns/crossfiltered-datagrid-server-side/CrossfilteredDatagridServerSide.interaction.stories.tsx +1 -1
  10. package/data/demos/patterns/crossfiltered-datagrid-server-side/example.tsx +10 -10
  11. package/data/demos/patterns/drilldowned-datagrid-client-side/example.tsx +1 -1
  12. package/data/demos/patterns/drilldowned-datagrid-server-side/example.tsx +1 -1
  13. package/data/demos/patterns/single-datagrid-client-side/SingleDatagridClientSide.interaction.stories.tsx +1 -1
  14. package/data/demos/patterns/single-datagrid-client-side/example.tsx +4 -4
  15. package/data/demos/patterns/single-datagrid-server-side/SingleDatagridServerSide.interaction.stories.tsx +1 -1
  16. package/data/demos/patterns/single-datagrid-server-side/example.tsx +4 -4
  17. package/data/demos/patterns/stateful-single-datagrid-client-side/StatefulSingleDatagridClientSide.interaction.stories.tsx +129 -1
  18. package/data/demos/patterns/stateful-single-datagrid-client-side/example.tsx +6 -5
  19. package/data/demos/patterns/stateful-single-datagrid-server-side/StatefulSingleDatagridServerSide.interaction.stories.tsx +134 -1
  20. package/data/demos/patterns/stateful-single-datagrid-server-side/example.tsx +6 -5
  21. package/data/demos/patterns/tabbed-datagrid-server-side/example.tsx +1 -1
  22. package/data/docs/components/dashboard/Dashboard.json +2 -2
  23. package/data/docs/components/products/DmarcSummaryBoxes.json +1 -1
  24. package/data/docs/components/table/DataGrid.json +6 -6
  25. package/data/docs/components/table/GridToolbarFilterSemanticField.json +1 -1
  26. package/data/docs/components/table/StatefulDataGrid.json +6 -6
  27. package/data/docs/components/table/Toolbar.json +8 -2
  28. package/data/docs/components/table-pro/ControlledPagination.json +9 -0
  29. package/data/docs/components/table-pro/DataGrid.json +114 -0
  30. package/data/docs/components/table-pro/GridToolbarFilterSemanticField.json +69 -0
  31. package/data/docs/components/table-pro/ServerSideControlledPagination.json +9 -0
  32. package/data/docs/components/table-pro/StatefulDataGrid.json +135 -0
  33. package/data/docs/components/table-pro/TextCell.json +118 -0
  34. package/data/docs/components/table-pro/Toolbar.json +151 -0
  35. package/data/docs/components/table-pro/ToolbarWrapper.json +9 -0
  36. package/data/docs/components-index.json +69 -0
  37. package/data/docs/components.json +626 -21
  38. package/data/docs/llms-full.txt +209 -45
  39. package/data/docs/llms.txt +17 -5
  40. package/data/docs/patterns-catalog.md +24 -25
  41. package/data/docs/patterns.json +4 -4
  42. package/data/metadata.json +2 -2
  43. package/data/patterns/crossfiltered-datagrid-server-side.mdx +1 -1
  44. package/data/patterns/drilldowned-datagrid-client-side.mdx +1 -1
  45. package/data/patterns/drilldowned-datagrid-server-side.mdx +1 -1
  46. package/data/patterns/single-datagrid-client-side.mdx +7 -7
  47. package/data/patterns/single-datagrid-server-side.mdx +4 -4
  48. package/data/patterns/stateful-single-datagrid-client-side.mdx +36 -21
  49. package/data/patterns/stateful-single-datagrid-server-side.mdx +46 -18
  50. package/data/patterns/tabbed-datagrid-server-side.mdx +1 -1
  51. package/package.json +2 -2
@@ -3,8 +3,8 @@
3
3
  This file contains comprehensive documentation for all components in the Red Sift Design System.
4
4
  It is optimized for LLM consumption and includes props, types, defaults, and usage examples.
5
5
 
6
- Generated: 2026-09-08T08:10:20.125Z
7
- Total Components: 156
6
+ Generated: 2026-09-08T08:02:04.666Z
7
+ Total Components: 164
8
8
 
9
9
  ---
10
10
 
@@ -4951,8 +4951,8 @@ For `boolean` columns, use `type: 'boolean'` directly (no createColumn wrapper n
4951
4951
  | selectionBannerPlacement | "top" \| "bottom" \| "belowToolbar" | No | 'top' | Where to render the row-selection banner (the "All N rows on this page are selected…" line). Independent of `paginationPlacement` — the latter only controls the pager controls. - `'top'` — above the toolbar (default, current behaviour). - `'bottom'` — in the footer, alongside the bottom pager. - `'belowToolbar'` — between the toolbar and the grid body. Rendered via the toolbar slot, so the toolbar slot is forced to render even when `hideToolbar` is set (the toolbar itself stays hidden, only the banner shows). Combine with `paginationPlacement="belowToolbar"` for a banner-left / pager-right row. Only applies when `pagination` is enabled. |
4952
4952
  | paginationProps | Omit<TablePaginationProps, "paginationMode" \| "component" \| "count" \| "onPageChange" \| "onRowsPerPageChange" \| "page" \| "rowsPerPage" \| "rowsPerPageOptions"> | No | - | Props to forward to the pagination component. |
4953
4953
  | theme | "light" \| "dark" | No | - | Theme. |
4954
- | className | string | No | - | |
4955
- | style | CSSProperties | No | - | |
4954
+ | getTreeDataPath | (row: any) => readonly string[] | No | - | Determines the path of a row in the tree data. For instance, a row with the path ["A", "B"] is the child of the row with the path ["A"]. Note that all paths must contain at least one element. @template R @param row The row from which we want the path. @returns The path to the row. |
4955
+ | setTreeDataPath | (path: string[], row: any) => any | No | - | Updates the tree path in a row model. Used when reordering rows across different parents in tree data. @template R @param path The new path for the row. @param row The row model to update. @returns The updated row model with the new path. |
4956
4956
 
4957
4957
  ---
4958
4958
 
@@ -4968,7 +4968,7 @@ The GridToolbarFilterSemanticField component.
4968
4968
  | Prop | Type | Required | Default | Description |
4969
4969
  |------|------|----------|---------|-------------|
4970
4970
  | nlpFilterConfig | FilterConfig | Yes | - | |
4971
- | onFilterModelChange | (filterModel: GridFilterModel) => void | Yes | - | |
4971
+ | onFilterModelChange | (filterModel: GridFilterModel) => void | No | - | |
4972
4972
  | dateFormat | string | No | - | |
4973
4973
  | defaultModel | string | No | - | |
4974
4974
  | defaultFilter | CompletionResponse | No | - | |
@@ -5010,8 +5010,8 @@ Use when users need persistent table preferences. Requires unique `localStorageK
5010
5010
  | selectionBannerPlacement | "top" \| "bottom" \| "belowToolbar" | No | 'top' | Where to render the row-selection banner (the "All N rows on this page are selected…" line). Independent of `paginationPlacement` — the latter only controls the pager controls. - `'top'` — above the toolbar (default, current behaviour). - `'bottom'` — in the footer, alongside the bottom pager. - `'belowToolbar'` — between the toolbar and the grid body. Rendered via the toolbar slot, so the toolbar slot is forced to render even when `hideToolbar` is set (the toolbar itself stays hidden, only the banner shows). Combine with `paginationPlacement="belowToolbar"` for a banner-left / pager-right row. Only applies when `pagination` is enabled. |
5011
5011
  | paginationProps | Omit<TablePaginationProps, "paginationMode" \| "component" \| "count" \| "onPageChange" \| "onRowsPerPageChange" \| "page" \| "rowsPerPage" \| "rowsPerPageOptions"> | No | - | Props to forward to the pagination component. |
5012
5012
  | theme | "light" \| "dark" | No | - | Theme. |
5013
- | className | string | No | - | |
5014
- | style | CSSProperties | No | - | |
5013
+ | getTreeDataPath | (row: any) => readonly string[] | No | - | Determines the path of a row in the tree data. For instance, a row with the path ["A", "B"] is the child of the row with the path ["A"]. Note that all paths must contain at least one element. @template R @param row The row from which we want the path. @returns The path to the row. |
5014
+ | setTreeDataPath | (path: string[], row: any) => any | No | - | Updates the tree path in a row model. Used when reordering rows across different parents in tree data. @template R @param path The new path for the row. @param row The row model to update. @returns The updated row model with the new path. |
5015
5015
 
5016
5016
  ---
5017
5017
 
@@ -5046,9 +5046,9 @@ The Cell component.
5046
5046
 
5047
5047
  | Prop | Type | Required | Default | Description |
5048
5048
  |------|------|----------|---------|-------------|
5049
- | columnsButtonProps | GridToolbarColumnsProps | No | - | Props to forward to the column button. |
5049
+ | columnsButtonProps | GridToolbarColumnsButtonProps \| GridToolbarColumnsButtonProps & RefAttributes<HTMLButtonElement> | No | - | Props to forward to the column button. |
5050
5050
  | columnsButtonRef | RefObject<HTMLButtonElement> | No | - | Column button ref. |
5051
- | densityButtonProps | GridToolbarDensityProps | No | - | Props to forward to the density button. |
5051
+ | densityButtonProps | GridToolbarDensitySelectorProps \| GridToolbarDensitySelectorProps & RefAttributes<HTMLButtonElement> | No | - | Props to forward to the density button. |
5052
5052
  | densityButtonRef | RefObject<HTMLButtonElement> | No | - | Density button ref. |
5053
5053
  | exportButtonProps | GridToolbarExportProps | No | - | Props to forward to the export button. |
5054
5054
  | exportButtonRef | RefObject<HTMLButtonElement> | No | - | Export button ref. |
@@ -5078,6 +5078,168 @@ above and below it is symmetric.
5078
5078
 
5079
5079
  ---
5080
5080
 
5081
+ ## Package: @redsift/table-pro
5082
+
5083
+ ### ControlledPagination
5084
+
5085
+ **Package:** @redsift/table-pro
5086
+ **File:** packages/table-pro/src/components/Pagination/ControlledPagination.tsx
5087
+
5088
+ ---
5089
+
5090
+ ### DataGrid
5091
+
5092
+ DataGrid displays tabular data with sorting, filtering, pagination, and row selection.
5093
+ Built on MUI X DataGrid Pro with Red Sift styling and theming.
5094
+
5095
+ Requires MUI X Pro license key (set via `MUI_LICENSE_KEY` env variable).
5096
+
5097
+ Use `createColumn()` to get pre-configured column definitions with typed filter operators.
5098
+ Supported types: `string`, `number`, `date`, `dateTime`, `singleSelect`, `multiSelect`, `tags`.
5099
+ For `boolean` columns, use `type: 'boolean'` directly (no createColumn wrapper needed).
5100
+
5101
+ **Package:** @redsift/table-pro
5102
+ **File:** packages/table-pro/src/components/DataGrid/DataGrid.tsx
5103
+
5104
+ #### Props
5105
+
5106
+ | Prop | Type | Required | Default | Description |
5107
+ |------|------|----------|---------|-------------|
5108
+ | license | string | No | - | License key for MUI Datagrid Pro. |
5109
+ | height | string | No | '500px' | Height. A default one is set to prevent rendering all rows. |
5110
+ | toolbar | ReactNode | No | - | Toolbar. A default one is provided but every button from this default Toolbar can be customized and the entire Toolbar can be replaced. |
5111
+ | hideToolbar | false \| true | No | - | Whether the Toolbar is displayed or not. |
5112
+ | paginationPlacement | "top" \| "bottom" \| "both" \| "none" \| "belowToolbar" | No | 'both' | Indicates where to render the pagination controls (the "Rows per page" + page navigation bar). Independent of `selectionBannerPlacement`. - `'top'` / `'bottom'` / `'both'` — above / below / both sides of the grid body. - `'none'` — no pager controls. - `'belowToolbar'` — in a row directly below the toolbar (right-aligned). Pair with `selectionBannerPlacement="belowToolbar"` to get the banner on the left and the pager on the right in the same row. Only applies when `pagination` is enabled. |
5113
+ | selectionBannerPlacement | "top" \| "bottom" \| "belowToolbar" | No | 'top' | Where to render the row-selection banner (the "All N rows on this page are selected…" line). Independent of `paginationPlacement` — the latter only controls the pager controls. - `'top'` — above the toolbar (default, current behaviour). - `'bottom'` — in the footer, alongside the bottom pager. - `'belowToolbar'` — between the toolbar and the grid body. Rendered via the toolbar slot, so the toolbar slot is forced to render even when `hideToolbar` is set (the toolbar itself stays hidden, only the banner shows). Combine with `paginationPlacement="belowToolbar"` for a banner-left / pager-right row. Only applies when `pagination` is enabled. |
5114
+ | paginationProps | Omit<TablePaginationProps, "paginationMode" \| "component" \| "count" \| "onPageChange" \| "onRowsPerPageChange" \| "page" \| "rowsPerPage" \| "rowsPerPageOptions"> | No | - | Props to forward to the pagination component. |
5115
+ | theme | "light" \| "dark" | No | - | Theme. |
5116
+ | getTreeDataPath | (row: any) => readonly string[] | No | - | Determines the path of a row in the tree data. For instance, a row with the path ["A", "B"] is the child of the row with the path ["A"]. Note that all paths must contain at least one element. @template R @param row The row from which we want the path. @returns The path to the row. |
5117
+ | setTreeDataPath | (path: string[], row: any) => any | No | - | Updates the tree path in a row model. Used when reordering rows across different parents in tree data. @template R @param path The new path for the row. @param row The row model to update. @returns The updated row model with the new path. |
5118
+
5119
+ ---
5120
+
5121
+ ### GridToolbarFilterSemanticField
5122
+
5123
+ The GridToolbarFilterSemanticField component.
5124
+
5125
+ **Package:** @redsift/table-pro
5126
+ **File:** packages/table-pro/src/components/GridToolbarFilterSemanticField/GridToolbarFilterSemanticField.tsx
5127
+
5128
+ #### Props
5129
+
5130
+ | Prop | Type | Required | Default | Description |
5131
+ |------|------|----------|---------|-------------|
5132
+ | nlpFilterConfig | FilterConfig | Yes | - | |
5133
+ | onFilterModelChange | (filterModel: GridFilterModel) => void | No | - | |
5134
+ | dateFormat | string | No | - | |
5135
+ | defaultModel | string | No | - | |
5136
+ | defaultFilter | CompletionResponse | No | - | |
5137
+ | disablePower | false \| true | No | - | |
5138
+ | localeText | LocaleText | No | - | |
5139
+
5140
+ ---
5141
+
5142
+ ### ServerSideControlledPagination
5143
+
5144
+ **Package:** @redsift/table-pro
5145
+ **File:** packages/table-pro/src/components/Pagination/ServerSideControlledPagination.tsx
5146
+
5147
+ ---
5148
+
5149
+ ### StatefulDataGrid
5150
+
5151
+ StatefulDataGrid extends DataGrid with automatic state persistence to localStorage.
5152
+ Preserves filters, sorting, pagination, column visibility, and column widths
5153
+ across page refreshes.
5154
+
5155
+ Use when users need persistent table preferences. Requires unique `localStorageKey`.
5156
+
5157
+ **Package:** @redsift/table-pro
5158
+ **File:** packages/table-pro/src/components/StatefulDataGrid/StatefulDataGrid.tsx
5159
+
5160
+ #### Props
5161
+
5162
+ | Prop | Type | Required | Default | Description |
5163
+ |------|------|----------|---------|-------------|
5164
+ | useRouter | () => { pathname: string; search: string; historyReplace: (newSearch: string, options?: { authoritative?: boolean \| undefined; } \| undefined) => void; } | Yes | - | Hook returning pathname, search params and a method to update query params. |
5165
+ | localStorageVersion | number | No | - | Local Storage version, to upgrade when we want to force a clean out. |
5166
+ | previousLocalStorageVersions | number[] | No | - | Previous Local Storage versions to clean out when a new one is released. |
5167
+ | license | string | No | - | License key for MUI Datagrid Pro. |
5168
+ | height | string | No | '500px' | Height. A default one is set to prevent rendering all rows. |
5169
+ | toolbar | ReactNode | No | - | Toolbar. A default one is provided but every button from this default Toolbar can be customized and the entire Toolbar can be replaced. |
5170
+ | hideToolbar | false \| true | No | - | Whether the Toolbar is displayed or not. |
5171
+ | paginationPlacement | "top" \| "bottom" \| "both" \| "none" \| "belowToolbar" | No | 'both' | Indicates where to render the pagination controls (the "Rows per page" + page navigation bar). Independent of `selectionBannerPlacement`. - `'top'` / `'bottom'` / `'both'` — above / below / both sides of the grid body. - `'none'` — no pager controls. - `'belowToolbar'` — in a row directly below the toolbar (right-aligned). Pair with `selectionBannerPlacement="belowToolbar"` to get the banner on the left and the pager on the right in the same row. Only applies when `pagination` is enabled. |
5172
+ | selectionBannerPlacement | "top" \| "bottom" \| "belowToolbar" | No | 'top' | Where to render the row-selection banner (the "All N rows on this page are selected…" line). Independent of `paginationPlacement` — the latter only controls the pager controls. - `'top'` — above the toolbar (default, current behaviour). - `'bottom'` — in the footer, alongside the bottom pager. - `'belowToolbar'` — between the toolbar and the grid body. Rendered via the toolbar slot, so the toolbar slot is forced to render even when `hideToolbar` is set (the toolbar itself stays hidden, only the banner shows). Combine with `paginationPlacement="belowToolbar"` for a banner-left / pager-right row. Only applies when `pagination` is enabled. |
5173
+ | paginationProps | Omit<TablePaginationProps, "paginationMode" \| "component" \| "count" \| "onPageChange" \| "onRowsPerPageChange" \| "page" \| "rowsPerPage" \| "rowsPerPageOptions"> | No | - | Props to forward to the pagination component. |
5174
+ | theme | "light" \| "dark" | No | - | Theme. |
5175
+ | getTreeDataPath | (row: any) => readonly string[] | No | - | Determines the path of a row in the tree data. For instance, a row with the path ["A", "B"] is the child of the row with the path ["A"]. Note that all paths must contain at least one element. @template R @param row The row from which we want the path. @returns The path to the row. |
5176
+ | setTreeDataPath | (path: string[], row: any) => any | No | - | Updates the tree path in a row model. Used when reordering rows across different parents in tree data. @template R @param path The new path for the row. @param row The row model to update. @returns The updated row model with the new path. |
5177
+
5178
+ ---
5179
+
5180
+ ### TextCell
5181
+
5182
+ The Cell component.
5183
+
5184
+ **Package:** @redsift/table-pro
5185
+ **File:** packages/table-pro/src/components/TextCell/TextCell.tsx
5186
+
5187
+ #### Props
5188
+
5189
+ | Prop | Type | Required | Default | Description |
5190
+ |------|------|----------|---------|-------------|
5191
+ | badge | ReactNode | No | - | Including Badge Component. |
5192
+ | leftIcon | string \| string[] \| ReactElement<any, string \| JSXElementConstructor<any>> | No | - | Can be a string or an array of strings containing `d` property of the `path` SVG element.<br /> Can also be a ReactElement. |
5193
+ | leftIconColor | "primary" \| "secondary" \| "error" \| "success" \| "warning" \| "info" \| "question" \| "no-data" \| "asm" \| "brand-trust" \| "certificates" \| "ondmarc" \| "pulse" \| "radar" \| "rojo-ds" \| "vendor-secure" \| "website" \| string & {} | No | - | Left Icon Color variant. |
5194
+ | rightIcon | string \| string[] \| ReactElement<any, string \| JSXElementConstructor<any>> | No | - | Can be a string or an array of strings containing `d` property of the `path` SVG element.<br /> Can also be a ReactElement. |
5195
+ | rightIconColor | "primary" \| "secondary" \| "error" \| "success" \| "warning" \| "info" \| "question" \| "no-data" \| "asm" \| "brand-trust" \| "certificates" \| "ondmarc" \| "pulse" \| "radar" \| "rojo-ds" \| "vendor-secure" \| "website" \| string & {} | No | - | Right Icon Color variant. |
5196
+ | shieldVariant | "success" \| "warning" \| "question" \| "successLocked" \| "successUnlocked" \| "fail" \| "failLocked" \| "failUnlocked" \| "warningLocked" \| "warningUnlocked" \| "ignored" \| "noData" \| "email" | No | - | Shield variant. |
5197
+
5198
+ ---
5199
+
5200
+ ### Toolbar
5201
+
5202
+ ------
5203
+
5204
+ **Package:** @redsift/table-pro
5205
+ **File:** packages/table-pro/src/components/Toolbar/Toolbar.tsx
5206
+
5207
+ #### Props
5208
+
5209
+ | Prop | Type | Required | Default | Description |
5210
+ |------|------|----------|---------|-------------|
5211
+ | columnsButtonProps | GridToolbarColumnsButtonProps \| GridToolbarColumnsButtonProps & RefAttributes<HTMLButtonElement> | No | - | Props to forward to the column button. |
5212
+ | columnsButtonRef | RefObject<HTMLButtonElement> | No | - | Column button ref. |
5213
+ | densityButtonProps | GridToolbarDensitySelectorProps \| GridToolbarDensitySelectorProps & RefAttributes<HTMLButtonElement> | No | - | Props to forward to the density button. |
5214
+ | densityButtonRef | RefObject<HTMLButtonElement> | No | - | Density button ref. |
5215
+ | exportButtonProps | GridToolbarExportProps | No | - | Props to forward to the export button. |
5216
+ | exportButtonRef | RefObject<HTMLButtonElement> | No | - | Export button ref. |
5217
+ | filterButtonProps | GridToolbarFilterButtonProps | No | - | Props to forward to the filter button. |
5218
+ | filterButtonRef | RefObject<HTMLButtonElement> | No | - | Filter button ref. |
5219
+ | hasColumnsButton | false \| true | No | - | Whether the columns button is displayed or not. |
5220
+ | hasDensityButton | false \| true | No | - | Whether the density button is displayed or not. |
5221
+ | hasExportButton | false \| true | No | - | Whether the export button is displayed or not. |
5222
+ | hasFilterButton | false \| true | No | - | Whether the filter button is displayed or not. |
5223
+ | onFilterModelChange | (filterModel: GridFilterModel) => void | No | - | Configuration object for NLP filter. undefined if disabled. |
5224
+ | semanticFilterProps | GridToolbarFilterSemanticProps | No | - | |
5225
+ | showQuickFilter | false \| true | No | - | Whether you want to show the quick filter or not. |
5226
+
5227
+ ---
5228
+
5229
+ ### ToolbarWrapper
5230
+
5231
+ Renders a toolbar followed by a row that can contain the selection banner (left)
5232
+ and/or the pager controls (right), so they sit between the toolbar and the grid body
5233
+ (`selectionBannerPlacement="belowToolbar"` and/or `paginationPlacement="belowToolbar"`).
5234
+ The banner/pager visibility is driven by `displaySelection` / `displayPagination`.
5235
+ The row gets a top margin matching the banner's built-in bottom margin so the spacing
5236
+ above and below it is symmetric.
5237
+
5238
+ **Package:** @redsift/table-pro
5239
+ **File:** packages/table-pro/src/components/ToolbarWrapper/ToolbarWrapper.tsx
5240
+
5241
+ ---
5242
+
5081
5243
  ## Package: @redsift/dashboard
5082
5244
 
5083
5245
  ### ChartEmptyState
@@ -5112,7 +5274,7 @@ When one chart is filtered, all connected charts update automatically.
5112
5274
  | Prop | Type | Required | Default | Description |
5113
5275
  |------|------|----------|---------|-------------|
5114
5276
  | data | JSONArray | Yes | - | Dataset that will be share across every components within the dashboard. |
5115
- | dataGridApiRef | MutableRefObject<GridApiPro> | No | - | Datagrid API Ref. |
5277
+ | dataGridApiRef | MutableRefObject<GridApiPro \| null> | No | - | Datagrid API Ref. MUI v8: can be null initially. |
5116
5278
 
5117
5279
  ---
5118
5280
 
@@ -6106,7 +6268,7 @@ Each pattern describes a common UI scenario, the components involved, how they a
6106
6268
  ## Datagrid Page
6107
6269
  **Description:** Full-page MUI DataGrid with built-in Toolbar (columns, filters, density, export, quick search). Uses GridColDef[] with createColumn() for typed filter operators (string, number, date, singleSelect, multiSelect, tags), renderCell with TextCell and Pill, pagination, and checkboxSelection. All filtering, sorting, and pagination happen client-side — all rows are loaded into the DataGrid at once. Optionally includes bulk selection actions (rowSelectionModel + onRowSelectionModelChange). For server-side data handling, see the Server Datagrid Page pattern. Matches the table pattern used across OnDMARC, Certificates, and Brand Trust.
6108
6270
  **Components:** DataGrid, TextCell, StatefulDataGrid, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink
6109
- **Packages:** @redsift/table, @redsift/design-system, @mui/x-data-grid-pro
6271
+ **Packages:** @redsift/table, @redsift/design-system, @mui/x-data-grid-premium
6110
6272
  **Layout:** DataGrid with autoHeight, pagination, pageSize, built-in Toolbar via componentsProps.toolbar.showQuickFilter. Optional bulk actions bar when selectionModel.length > 0.
6111
6273
  **Tags:** table, datagrid, list, pagination, filter, toolbar, bulk-actions, GridColDef, filterModel, checkboxSelection, client-side
6112
6274
 
@@ -6189,22 +6351,22 @@ type Row = {
6189
6351
 
6190
6352
  ```tsx
6191
6353
  import React, { useState } from 'react';
6192
- import { DataGrid } from '@redsift/table';
6354
+ import { DataGrid, EMPTY_ROW_SELECTION_MODEL, getSelectionCount } from '@redsift/table';
6193
6355
  import { Flexbox } from '@redsift/design-system';
6194
- import { GridFilterModel, GridRowSelectionModel } from '@mui/x-data-grid-pro';
6356
+ import { GridFilterModel, GridRowSelectionModel } from '@mui/x-data-grid-premium';
6195
6357
  import { rows } from '../_shared/data';
6196
6358
  import { columns } from '../_shared/columns';
6197
6359
  import { CustomToolbar, BulkActionBar } from '../_shared/helpers';
6198
6360
  import { DEFAULT_FILTER_MODEL, DEFAULT_SORT_MODEL } from '../_shared/defaults';
6199
6361
 
6200
6362
  export default ({ initialFilterModel }: { initialFilterModel?: GridFilterModel }) => {
6201
- const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>([]);
6363
+ const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>(EMPTY_ROW_SELECTION_MODEL);
6202
6364
 
6203
6365
  return (
6204
6366
  <div style={{ width: '100%' }}>
6205
6367
  <Flexbox flexDirection="column" gap="0px">
6206
6368
  <BulkActionBar
6207
- count={selectionModel.length}
6369
+ count={getSelectionCount(selectionModel)}
6208
6370
  onLog={() => console.log('Selected:', selectionModel)}
6209
6371
  onDelete={() => console.log('Delete:', selectionModel)}
6210
6372
  />
@@ -6243,7 +6405,7 @@ export default ({ initialFilterModel }: { initialFilterModel?: GridFilterModel }
6243
6405
  ## Server Datagrid Page
6244
6406
  **Description:** Full-page MUI DataGrid where filtering, sorting, and pagination are all handled server-side. Uses paginationMode='server', sortingMode='server', filterMode='server' with controlled rowCount and loading props. The same column types and toolbar as the client-side Datagrid Page pattern, but only the current page of data is fetched per request. Filter changes are debounced to avoid excessive requests. Ideal for datasets too large to load entirely in the browser.
6245
6407
  **Components:** DataGrid, TextCell, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink
6246
- **Packages:** @redsift/table, @redsift/design-system, @mui/x-data-grid-pro
6408
+ **Packages:** @redsift/table, @redsift/design-system, @mui/x-data-grid-premium
6247
6409
  **Layout:** DataGrid with autoHeight, paginationMode='server', sortingMode='server', filterMode='server', rowCount, loading, built-in Toolbar. Optional bulk actions bar when selectionModel.length > 0.
6248
6410
  **Tags:** table, datagrid, server-side, pagination, paginationMode, filterMode, sortingMode, loading, rowCount, filter, toolbar, bulk-actions, GridColDef, filterModel, sortModel, debounce
6249
6411
 
@@ -6354,9 +6516,9 @@ type FetchResult = {
6354
6516
 
6355
6517
  ```tsx
6356
6518
  import React, { useCallback, useEffect, useRef, useState } from 'react';
6357
- import { DataGrid } from '@redsift/table';
6519
+ import { DataGrid, EMPTY_ROW_SELECTION_MODEL, getSelectionCount } from '@redsift/table';
6358
6520
  import { Flexbox } from '@redsift/design-system';
6359
- import { GridFilterModel, GridRowSelectionModel, GridSortModel } from '@mui/x-data-grid-pro';
6521
+ import { GridFilterModel, GridRowSelectionModel, GridSortModel } from '@mui/x-data-grid-premium';
6360
6522
  import { Row } from '../_shared/data';
6361
6523
  import { columns } from '../_shared/columns';
6362
6524
  import { fetchBakeryData } from '../_shared/api-client';
@@ -6371,7 +6533,7 @@ export default ({ initialFilterModel }: { initialFilterModel?: GridFilterModel }
6371
6533
  const [pageSize, setPageSize] = useState(10);
6372
6534
  const [sortModel, setSortModel] = useState<GridSortModel>(DEFAULT_SORT_MODEL);
6373
6535
  const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel ?? DEFAULT_FILTER_MODEL);
6374
- const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>([]);
6536
+ const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>(EMPTY_ROW_SELECTION_MODEL);
6375
6537
 
6376
6538
  const quickFilterText = (filterModel as { quickFilterValues?: string[] }).quickFilterValues?.join(' ') || '';
6377
6539
  const debounceRef = useRef<ReturnType<typeof setTimeout>>();
@@ -6409,7 +6571,7 @@ export default ({ initialFilterModel }: { initialFilterModel?: GridFilterModel }
6409
6571
  <div style={{ width: '100%' }}>
6410
6572
  <Flexbox flexDirection="column" gap="0px">
6411
6573
  <BulkActionBar
6412
- count={selectionModel.length}
6574
+ count={getSelectionCount(selectionModel)}
6413
6575
  onLog={() => console.log('Selected:', selectionModel)}
6414
6576
  onDelete={() => console.log('Delete:', selectionModel)}
6415
6577
  />
@@ -6477,9 +6639,10 @@ export default ({ initialFilterModel }: { initialFilterModel?: GridFilterModel }
6477
6639
 
6478
6640
  ```tsx
6479
6641
  import React, { useState } from 'react';
6480
- import { StatefulDataGrid } from '@redsift/table';
6642
+ import { StatefulDataGrid, EMPTY_ROW_SELECTION_MODEL, getSelectionCount } from '@redsift/table';
6481
6643
  import { Flexbox } from '@redsift/design-system';
6482
- import { GridFilterModel, GridRowSelectionModel, GridApiPro, useGridApiRef } from '@mui/x-data-grid-pro';
6644
+ import { GridFilterModel, GridRowSelectionModel, useGridApiRef } from '@mui/x-data-grid-premium';
6645
+ import type { GridApiPremium } from '@mui/x-data-grid-premium';
6483
6646
  import { rows } from '../_shared/data';
6484
6647
  import { columns } from '../_shared/columns';
6485
6648
  import { CustomToolbar, BulkActionBar } from '../_shared/helpers';
@@ -6490,20 +6653,20 @@ import { StateDebugPanel } from '../_shared/StateDebugPanel';
6490
6653
  interface Props {
6491
6654
  initialFilterModel?: GridFilterModel;
6492
6655
  useRouter?: () => { pathname: string; search: string; historyReplace: (newSearch: string) => void };
6493
- apiRef?: React.MutableRefObject<GridApiPro>;
6656
+ apiRef?: React.MutableRefObject<GridApiPremium | null>;
6494
6657
  }
6495
6658
 
6496
6659
  export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: propsApiRef }: Props) => {
6497
6660
  const internalApiRef = useGridApiRef();
6498
6661
  const apiRef = propsApiRef ?? internalApiRef;
6499
- const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>([]);
6662
+ const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>(EMPTY_ROW_SELECTION_MODEL);
6500
6663
 
6501
6664
  return (
6502
6665
  <div style={{ width: '100%' }}>
6503
6666
  <StateDebugPanel apiRef={apiRef} useRouter={useRouter} localStorageVersion={1} />
6504
6667
  <Flexbox flexDirection="column" gap="0px">
6505
6668
  <BulkActionBar
6506
- count={selectionModel.length}
6669
+ count={getSelectionCount(selectionModel)}
6507
6670
  onLog={() => console.log('Selected:', selectionModel)}
6508
6671
  onDelete={() => console.log('Delete:', selectionModel)}
6509
6672
  />
@@ -6559,9 +6722,10 @@ export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: prop
6559
6722
 
6560
6723
  ```tsx
6561
6724
  import React, { useCallback, useEffect, useRef, useState } from 'react';
6562
- import { StatefulDataGrid } from '@redsift/table';
6725
+ import { StatefulDataGrid, EMPTY_ROW_SELECTION_MODEL, getSelectionCount } from '@redsift/table';
6563
6726
  import { Flexbox } from '@redsift/design-system';
6564
- import { GridFilterModel, GridRowSelectionModel, GridSortModel, GridApiPro, useGridApiRef } from '@mui/x-data-grid-pro';
6727
+ import { GridFilterModel, GridRowSelectionModel, GridSortModel, useGridApiRef } from '@mui/x-data-grid-premium';
6728
+ import type { GridApiPremium } from '@mui/x-data-grid-premium';
6565
6729
  import { Row } from '../_shared/data';
6566
6730
  import { columns } from '../_shared/columns';
6567
6731
  import { fetchBakeryData } from '../_shared/api-client';
@@ -6573,7 +6737,7 @@ import { StateDebugPanel } from '../_shared/StateDebugPanel';
6573
6737
  interface Props {
6574
6738
  initialFilterModel?: GridFilterModel;
6575
6739
  useRouter?: () => { pathname: string; search: string; historyReplace: (newSearch: string) => void };
6576
- apiRef?: React.MutableRefObject<GridApiPro>;
6740
+ apiRef?: React.MutableRefObject<GridApiPremium | null>;
6577
6741
  }
6578
6742
 
6579
6743
  export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: propsApiRef }: Props) => {
@@ -6582,7 +6746,7 @@ export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: prop
6582
6746
  const [rows, setRows] = useState<Row[]>([]);
6583
6747
  const [totalRows, setTotalRows] = useState(0);
6584
6748
  const [loading, setLoading] = useState(true);
6585
- const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>([]);
6749
+ const [selectionModel, setSelectionModel] = useState<GridRowSelectionModel>(EMPTY_ROW_SELECTION_MODEL);
6586
6750
 
6587
6751
  // Refs track the latest model values so fetchData() always reads current state.
6588
6752
  // StatefulDataGrid manages filter/sort/pagination internally — we use callbacks
@@ -6617,7 +6781,7 @@ export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: prop
6617
6781
  <StateDebugPanel apiRef={apiRef} useRouter={useRouter} localStorageVersion={1} />
6618
6782
  <Flexbox flexDirection="column" gap="0px">
6619
6783
  <BulkActionBar
6620
- count={selectionModel.length}
6784
+ count={getSelectionCount(selectionModel)}
6621
6785
  onLog={() => console.log('Selected:', selectionModel)}
6622
6786
  onDelete={() => console.log('Delete:', selectionModel)}
6623
6787
  />
@@ -6679,7 +6843,7 @@ export default ({ initialFilterModel, useRouter = useRouterAdapter, apiRef: prop
6679
6843
  ## Drilldown Datagrid Page
6680
6844
  **Description:** Extends the Datagrid Page with summary DataCards placed above the grid. Each DataCard contains DataRows showing aggregate counts for a field (status, category, active). Clicking a DataRow adds an isAnyOf filter to the DataGrid — a one-click shortcut. This is a one-way interaction: DataCard counts always reflect the full (unfiltered) dataset. When the user sets an is or isNot filter via the filter panel, the DataCard selection clears and clicking a DataRow overwrites with isAnyOf.
6681
6845
  **Components:** DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink
6682
- **Packages:** @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-pro
6846
+ **Packages:** @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-premium
6683
6847
  **Layout:** Flexbox column: DataCard row (Flexbox gap=12px flexWrap=wrap with 1-N DataCards), then DataGrid with autoHeight, pagination, controlled filterModel + onFilterModelChange. Optional bulk actions bar when selectionModel.length > 0.
6684
6848
  **Tags:** table, datagrid, datacard, drilldown, drilldown-item, filter, isAnyOf, summary-cards, kpi, one-way, filterModel, client-side
6685
6849
 
@@ -6773,7 +6937,7 @@ import { DataGrid } from '@redsift/table';
6773
6937
  import { Flexbox } from '@redsift/design-system';
6774
6938
  import { DataCard, DataRow } from '@redsift/dashboard';
6775
6939
  import { mdiShapeOutline, mdiToggleSwitch, mdiFoodOff } from '@redsift/icons';
6776
- import { GridFilterModel } from '@mui/x-data-grid-pro';
6940
+ import { GridFilterModel } from '@mui/x-data-grid-premium';
6777
6941
  import { rows } from '../_shared/data';
6778
6942
  import { columns, CATEGORY_OPTIONS, ALLERGEN_OPTIONS } from '../_shared/columns';
6779
6943
  import { CustomToolbar } from '../_shared/helpers';
@@ -6977,7 +7141,7 @@ export default () => {
6977
7141
  ## Cross-filtered Datagrid Page
6978
7142
  **Description:** Extends the Drilldown Datagrid Page with two-way synchronization between DataCards and the DataGrid filter panel. DataRow clicks add isAnyOf filters. Filter panel changes update DataCard selection state. DataCard counts recalculate against the cross-filtered dataset — each card computes counts by applying all filters except its own field, preventing a card from zeroing out its non-selected values. When the user sets is/isNot via the filter panel, the DataCard clears. Clicking a DataRow overwrites with isAnyOf.
6979
7143
  **Components:** DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink
6980
- **Packages:** @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-pro
7144
+ **Packages:** @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-premium
6981
7145
  **Layout:** Flexbox column: DataCard row (cross-filtered counts), then DataGrid with autoHeight, pagination, controlled filterModel + onFilterModelChange. Rows are pre-filtered client-side via applyFilters. Optional bulk actions bar.
6982
7146
  **Tags:** table, datagrid, datacard, drilldown, drilldown-item, cross-filter, crossfilter, two-way, bidirectional, filter, isAnyOf, summary-cards, kpi, dashboard, filterModel, client-side
6983
7147
 
@@ -7259,7 +7423,7 @@ import { DataGrid } from '@redsift/table';
7259
7423
  import { Flexbox } from '@redsift/design-system';
7260
7424
  import { DataCard, DataRow } from '@redsift/dashboard';
7261
7425
  import { mdiShapeOutline, mdiToggleSwitch, mdiFoodOff } from '@redsift/icons';
7262
- import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-pro';
7426
+ import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-premium';
7263
7427
  import { Row } from '../_shared/data';
7264
7428
  import { columns, CATEGORY_OPTIONS, ALLERGEN_OPTIONS } from '../_shared/columns';
7265
7429
  import { fetchBakeryData, FetchResult } from '../_shared/api-client';
@@ -7534,9 +7698,9 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
7534
7698
  import { DataGrid } from '@redsift/table';
7535
7699
  import { Flexbox } from '@redsift/design-system';
7536
7700
  import { DataCard, DataRow } from '@redsift/dashboard';
7537
- import { BarChart, PieChart } from '@redsift/charts';
7701
+ import { BarChart, PieChart, ArcDatum, BarDatum } from '@redsift/charts';
7538
7702
  import { mdiShapeOutline, mdiToggleSwitch, mdiFoodOff } from '@redsift/icons';
7539
- import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-pro';
7703
+ import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-premium';
7540
7704
  import { Row } from '../_shared/data';
7541
7705
  import { columns, CATEGORY_OPTIONS, ALLERGEN_OPTIONS } from '../_shared/columns';
7542
7706
  import { fetchBakeryData, FetchResult } from '../_shared/api-client';
@@ -7743,8 +7907,8 @@ export default () => {
7743
7907
  }}
7744
7908
  data={itemsChartData}
7745
7909
  sliceRole="option"
7746
- onSliceClick={(datum: any) => {
7747
- const key = datum.data.key as string;
7910
+ onSliceClick={(datum: ArcDatum) => {
7911
+ const key = datum.data.key;
7748
7912
  setFilterModel((prev) => {
7749
7913
  const selected = getSelectedFromFilterModel(prev, 'Items');
7750
7914
  const next = selected.includes(key) ? selected.filter((v) => v !== key) : [...selected, key];
@@ -7752,8 +7916,8 @@ export default () => {
7752
7916
  });
7753
7917
  setPage(0);
7754
7918
  }}
7755
- isSliceSelected={(datum: any) =>
7756
- itemsSelection.length === 0 || itemsSelection.includes(datum.data.key as string)
7919
+ isSliceSelected={(datum: ArcDatum) =>
7920
+ itemsSelection.length === 0 || itemsSelection.includes(datum.data.key)
7757
7921
  }
7758
7922
  />
7759
7923
 
@@ -7778,8 +7942,8 @@ export default () => {
7778
7942
  barProps={{ gap: 20 }}
7779
7943
  data={tagsChartData}
7780
7944
  barRole="option"
7781
- onBarClick={(datum: any) => {
7782
- const key = datum.data.key as string;
7945
+ onBarClick={(datum: BarDatum) => {
7946
+ const key = String(datum.data.key);
7783
7947
  setFilterModel((prev) => {
7784
7948
  const selected = getSelectedFromFilterModel(prev, 'Tags');
7785
7949
  const next = selected.includes(key) ? selected.filter((v) => v !== key) : [...selected, key];
@@ -7787,8 +7951,8 @@ export default () => {
7787
7951
  });
7788
7952
  setPage(0);
7789
7953
  }}
7790
- isBarSelected={(datum: any) =>
7791
- tagsSelection.length === 0 || tagsSelection.includes(datum.data.key as string)
7954
+ isBarSelected={(datum: BarDatum) =>
7955
+ tagsSelection.length === 0 || tagsSelection.includes(String(datum.data.key))
7792
7956
  }
7793
7957
  />
7794
7958
  </Flexbox>
@@ -7966,7 +8130,7 @@ export default () => {
7966
8130
  import React, { useCallback, useEffect, useRef, useState } from 'react';
7967
8131
  import { DataGrid } from '@redsift/table';
7968
8132
  import { Flexbox, Pill, Number, Text, Tabs, Tab } from '@redsift/design-system';
7969
- import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-pro';
8133
+ import { GridFilterModel, GridSortModel } from '@mui/x-data-grid-premium';
7970
8134
  import { Row } from '../_shared/data';
7971
8135
  import { columns, CATEGORY_OPTIONS } from '../_shared/columns';
7972
8136
  import { fetchBakeryData } from '../_shared/api-client';
@@ -16,7 +16,8 @@ The Red Sift Design System provides reusable UI components including forms, navi
16
16
  - **@redsift/popovers** (22 components): Popover, tooltip, dialog, and toast components
17
17
  - **@redsift/pickers** (21 components): Selection components (combobox, menu button, select)
18
18
  - **@redsift/charts** (14 components): D3.js-based chart components (bar, line, pie, scatter)
19
- - **@redsift/table** (8 components): DataGrid components built on MUI X Data Grid
19
+ - **@redsift/table** (8 components): DataGrid components built on MUI X Data Grid (Premium tier, includes pivoting, row grouping, and aggregation)
20
+ - **@redsift/table-pro** (8 components): DataGrid components built on MUI X Data Grid (Pro tier — same API as @redsift/table without pivoting, row grouping, or aggregation)
20
21
  - **@redsift/dashboard** (10 components): Dashboard components with crossfilter integration
21
22
  - **@redsift/products** (20 components): Product-specific component implementations
22
23
 
@@ -182,6 +183,17 @@ The Red Sift Design System provides reusable UI components including forms, navi
182
183
  - **Toolbar** (15 props): ------
183
184
  - **ToolbarWrapper** (0 props): Renders a toolbar followed by a row that can contain the selection banner (left)
184
185
 
186
+ ### table-pro
187
+
188
+ - **ControlledPagination** (0 props)
189
+ - **DataGrid** (10 props): DataGrid displays tabular data with sorting, filtering, pagination, and row selection.
190
+ - **GridToolbarFilterSemanticField** (7 props): The GridToolbarFilterSemanticField component.
191
+ - **ServerSideControlledPagination** (0 props)
192
+ - **StatefulDataGrid** (13 props): StatefulDataGrid extends DataGrid with automatic state persistence to localStorage.
193
+ - **TextCell** (6 props): The Cell component.
194
+ - **Toolbar** (15 props): ------
195
+ - **ToolbarWrapper** (0 props): Renders a toolbar followed by a row that can contain the selection banner (left)
196
+
185
197
  ### dashboard
186
198
 
187
199
  - **ChartEmptyState** (4 props)
@@ -231,12 +243,12 @@ Proven component groupings for common UI scenarios, extracted from production ap
231
243
 
232
244
  | Pattern | Components | Packages |
233
245
  |---------|-----------|----------|
234
- | Datagrid Page | DataGrid, TextCell, StatefulDataGrid, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink | @redsift/table, @redsift/design-system, @mui/x-data-grid-pro |
235
- | Server Datagrid Page | DataGrid, TextCell, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink | @redsift/table, @redsift/design-system, @mui/x-data-grid-pro |
246
+ | Datagrid Page | DataGrid, TextCell, StatefulDataGrid, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink | @redsift/table, @redsift/design-system, @mui/x-data-grid-premium |
247
+ | Server Datagrid Page | DataGrid, TextCell, Pill, Button, Flexbox, Text, Badge, Icon, IconButton, IconButtonLink | @redsift/table, @redsift/design-system, @mui/x-data-grid-premium |
236
248
  | Stateful Datagrid Page (Client) | StatefulDataGrid, DataGrid, Pill, Button, Flexbox, Text, Icon | @redsift/table, @redsift/design-system, @mui/x-data-grid-pro |
237
249
  | Stateful Datagrid Page (Server) | StatefulDataGrid, DataGrid, Pill, Button, Flexbox, Text, Icon | @redsift/table, @redsift/design-system, @mui/x-data-grid-pro |
238
- | Drilldown Datagrid Page | DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink | @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-pro |
239
- | Cross-filtered Datagrid Page | DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink | @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-pro |
250
+ | Drilldown Datagrid Page | DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink | @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-premium |
251
+ | Cross-filtered Datagrid Page | DataGrid, TextCell, DataCard, DataCard.Header, DataCard.Body, DataCard.Listbox, DataRow, Pill, Button, Flexbox, Text, Icon, IconButtonLink | @redsift/table, @redsift/design-system, @redsift/dashboard, @mui/x-data-grid-premium |
240
252
  | Server Drilldown Datagrid Page | DataGrid, TextCell, DataCard, DataRow, Flexbox, Pill, Icon | @redsift/table, @redsift/dashboard, @redsift/design-system, @mui/x-data-grid-pro |
241
253
  | Server Cross-filtered Datagrid Page | DataGrid, TextCell, DataCard, DataRow, Flexbox, Pill, Icon | @redsift/table, @redsift/dashboard, @redsift/design-system, @mui/x-data-grid-pro |
242
254
  | Tabbed Datagrid Page | DataGrid, TextCell, Tabs, Tab, Flexbox, Pill, Number | @redsift/table, @redsift/design-system |