@arbor-education/design-system.components 0.10.0 → 0.11.1

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 (119) hide show
  1. package/.claude/agent-memory/blanche-designspert/MEMORY.md +64 -0
  2. package/.claude/agent-memory/blanche-designspert/token-review-patterns.md +29 -0
  3. package/.claude/agent-memory/dorothy-fact-checker/MEMORY.md +129 -0
  4. package/.claude/agent-memory/rose-storybookspert/MEMORY.md +29 -0
  5. package/.claude/agent-memory/rose-storybookspert/patterns.md +132 -0
  6. package/.claude/agent-memory/sophia-componentspert/MEMORY.md +14 -0
  7. package/.claude/agent-memory/sophia-componentspert/components.md +367 -0
  8. package/.claude/agents/blanche-designspert.md +150 -0
  9. package/.claude/agents/dorothy-fact-checker.md +145 -0
  10. package/.claude/agents/rose-storybookspert.md +148 -0
  11. package/.claude/agents/sophia-componentspert.md +133 -0
  12. package/.claude/component-library.md +1107 -0
  13. package/.claude/design-assessment-daily-attendance-2026-04-10.md +566 -0
  14. package/.claude/figma-assessment-7154-58899.md +404 -0
  15. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-11086-97537.md +392 -0
  16. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-41974.md +474 -0
  17. package/.claude/figma-assessment-UKQfcxnT4rlHHNuiumt4o1-551-43094.md +462 -0
  18. package/.claude/figma-assessment-fcFK4CGzkz2fVyY3koX8ZE-7154-59061.md +440 -0
  19. package/.claude/migration-report-custom-report-writer-2026-02-19.md +591 -0
  20. package/.claude/skills/analyze-design/README.md +295 -0
  21. package/.claude/skills/analyze-design/SKILL.md +741 -0
  22. package/.claude/skills/create-page/README.md +246 -0
  23. package/.claude/skills/create-page/SKILL.md +634 -0
  24. package/.claude/skills/create-page/design-analysis-template.md +333 -0
  25. package/.claude/skills/create-page/page-template.scss +118 -0
  26. package/.claude/skills/create-page/page-template.tsx +230 -0
  27. package/.claude/skills/map-legacy/README.md +87 -0
  28. package/.claude/skills/map-legacy/SKILL.md +465 -0
  29. package/.claude/skills/migrate-page/README.md +125 -0
  30. package/.claude/skills/migrate-page/SKILL.md +374 -0
  31. package/.github/CODEOWNERS +1 -0
  32. package/.github/pull_request_template.md +39 -0
  33. package/CHANGELOG.md +14 -0
  34. package/CLAUDE.md +31 -0
  35. package/CONTRIBUTING.md +191 -0
  36. package/README.md +110 -20
  37. package/dist/components/table/DSDefaultColDef.js +2 -2
  38. package/dist/components/table/DSDefaultColDef.js.map +1 -1
  39. package/dist/components/table/Table.d.ts +5 -29
  40. package/dist/components/table/Table.d.ts.map +1 -1
  41. package/dist/components/table/Table.js +12 -22
  42. package/dist/components/table/Table.js.map +1 -1
  43. package/dist/components/table/Table.stories.d.ts +4 -0
  44. package/dist/components/table/Table.stories.d.ts.map +1 -1
  45. package/dist/components/table/Table.stories.js +163 -28
  46. package/dist/components/table/Table.stories.js.map +1 -1
  47. package/dist/components/table/Table.test.js +109 -8
  48. package/dist/components/table/Table.test.js.map +1 -1
  49. package/dist/components/table/TableSettingsContext.d.ts +13 -0
  50. package/dist/components/table/TableSettingsContext.d.ts.map +1 -0
  51. package/dist/components/table/TableSettingsContext.js +15 -0
  52. package/dist/components/table/TableSettingsContext.js.map +1 -0
  53. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts +3 -0
  54. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -0
  55. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +12 -0
  56. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -0
  57. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts +2 -0
  58. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.d.ts.map +1 -0
  59. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js +65 -0
  60. package/dist/components/table/cellRenderers/CheckboxCellRenderer.test.js.map +1 -0
  61. package/dist/components/table/tableConsts.d.ts +7 -0
  62. package/dist/components/table/tableConsts.d.ts.map +1 -0
  63. package/dist/components/table/tableConsts.js +8 -0
  64. package/dist/components/table/tableConsts.js.map +1 -0
  65. package/dist/components/table/{BulkActionsDropdown.d.ts → tableControls/BulkActionsDropdown.d.ts} +1 -1
  66. package/dist/components/table/tableControls/BulkActionsDropdown.d.ts.map +1 -0
  67. package/dist/components/table/{BulkActionsDropdown.js → tableControls/BulkActionsDropdown.js} +3 -3
  68. package/dist/components/table/tableControls/BulkActionsDropdown.js.map +1 -0
  69. package/dist/components/table/{HideColumnsDropdown.d.ts → tableControls/HideColumnsDropdown.d.ts} +1 -2
  70. package/dist/components/table/tableControls/HideColumnsDropdown.d.ts.map +1 -0
  71. package/dist/components/table/{HideColumnsDropdown.js → tableControls/HideColumnsDropdown.js} +2 -2
  72. package/dist/components/table/tableControls/HideColumnsDropdown.js.map +1 -0
  73. package/dist/components/table/tableControls/TableControls.d.ts +23 -0
  74. package/dist/components/table/tableControls/TableControls.d.ts.map +1 -0
  75. package/dist/components/table/tableControls/TableControls.js +21 -0
  76. package/dist/components/table/tableControls/TableControls.js.map +1 -0
  77. package/dist/components/table/tableControls/TableControls.test.d.ts +2 -0
  78. package/dist/components/table/tableControls/TableControls.test.d.ts.map +1 -0
  79. package/dist/components/table/tableControls/TableControls.test.js +124 -0
  80. package/dist/components/table/tableControls/TableControls.test.js.map +1 -0
  81. package/dist/components/table/tableControls/TableSettingsDropdown.d.ts.map +1 -0
  82. package/dist/components/table/{TableSettingsDropdown.js → tableControls/TableSettingsDropdown.js} +7 -6
  83. package/dist/components/table/tableControls/TableSettingsDropdown.js.map +1 -0
  84. package/dist/components/table/useTableSettings.d.ts +1 -1
  85. package/dist/components/table/useTableSettings.d.ts.map +1 -1
  86. package/dist/components/table/useTableSettings.js +1 -1
  87. package/dist/components/table/useTableSettings.js.map +1 -1
  88. package/dist/index.css +19 -1
  89. package/dist/index.css.map +1 -1
  90. package/dist/index.d.ts +1 -0
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +1 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/utils/setAgGridLicenseKey.js +1 -1
  95. package/package.json +1 -1
  96. package/src/components/table/DSDefaultColDef.ts +2 -2
  97. package/src/components/table/Table.stories.tsx +202 -35
  98. package/src/components/table/Table.test.tsx +134 -8
  99. package/src/components/table/Table.tsx +12 -22
  100. package/src/components/table/TableSettingsContext.ts +15 -0
  101. package/src/components/table/cellRenderers/CheckboxCellRenderer.test.tsx +74 -0
  102. package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +28 -0
  103. package/src/components/table/table.scss +23 -1
  104. package/src/components/table/tableConsts.ts +6 -0
  105. package/src/components/table/{BulkActionsDropdown.tsx → tableControls/BulkActionsDropdown.tsx} +2 -2
  106. package/src/components/table/{HideColumnsDropdown.tsx → tableControls/HideColumnsDropdown.tsx} +2 -2
  107. package/src/components/table/tableControls/TableControls.test.tsx +150 -0
  108. package/src/components/table/tableControls/TableControls.tsx +143 -0
  109. package/src/components/table/{TableSettingsDropdown.tsx → tableControls/TableSettingsDropdown.tsx} +2 -1
  110. package/src/components/table/useTableSettings.ts +1 -1
  111. package/src/index.ts +1 -0
  112. package/src/utils/setAgGridLicenseKey.ts +1 -1
  113. package/dist/components/table/BulkActionsDropdown.d.ts.map +0 -1
  114. package/dist/components/table/BulkActionsDropdown.js.map +0 -1
  115. package/dist/components/table/HideColumnsDropdown.d.ts.map +0 -1
  116. package/dist/components/table/HideColumnsDropdown.js.map +0 -1
  117. package/dist/components/table/TableSettingsDropdown.d.ts.map +0 -1
  118. package/dist/components/table/TableSettingsDropdown.js.map +0 -1
  119. /package/dist/components/table/{TableSettingsDropdown.d.ts → tableControls/TableSettingsDropdown.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -46,4 +46,5 @@ export { Row } from './components/row/Row';
46
46
  export { Combobox } from './components/combobox/Combobox';
47
47
  export { Toggle } from './components/toggle/Toggle';
48
48
  export { SlideoverUtils } from './utils/SlideoverUtils';
49
+ export { CheckboxCellRenderer } from './components/table/cellRenderers/CheckboxCellRenderer';
49
50
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EACL,WAAW,GAKZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAoB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uEAAuE,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAwB,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAuB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,GAAG,EAAiB,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AASxD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC"}
@@ -2,7 +2,7 @@ import { AgChartsCommunityModule } from 'ag-charts-community';
2
2
  import { ModuleRegistry } from 'ag-grid-community';
3
3
  import { LicenseManager, IntegratedChartsModule, AllEnterpriseModule, } from 'ag-grid-enterprise';
4
4
  export const setAgGridLicenseKey = () => {
5
- LicenseManager.setLicenseKey('Using_this_{AG_Grid}_Enterprise_key_{AG-076208}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Arbor_Education_Partners_Ltd}_is_granted_a_{Single_Application}_Developer_License_for_the_application_{Arbor_MIS}_only_for_{4}_Front-End_JavaScript_developers___All_Front-End_JavaScript_developers_working_on_{Arbor_MIS}_need_to_be_licensed___{Arbor_MIS}_has_been_granted_a_Deployment_License_Add-on_for_{1}_Production_Environment___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{16_March_2026}____[v3]_[01]_MTc3MzYxOTIwMDAwMA==8820260fc59099926cf507c1e8018e49');
5
+ LicenseManager.setLicenseKey('Using_this_{AG_Grid}_Enterprise_key_{AG-121221}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Arbor_Education_Partners_Ltd}_is_granted_a_{Single_Application}_Developer_License_for_the_application_{Arbor_MIS}_only_for_{4}_Front-End_JavaScript_developers___All_Front-End_JavaScript_developers_working_on_{Arbor_MIS}_need_to_be_licensed___{Arbor_MIS}_has_been_granted_a_Deployment_License_Add-on_for_{1}_Production_Environment___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{16_March_2027}____[v3]_[01]_MTgwNTE1NTIwMDAwMA==5c76013322ec3fd2d2a63ed85f528464');
6
6
  ModuleRegistry.registerModules([
7
7
  IntegratedChartsModule.with(AgChartsCommunityModule),
8
8
  AllEnterpriseModule,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbor-education/design-system.components",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "The component library for the design system (the baby)",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -19,7 +19,7 @@ export const shouldSuppressFocus = (params: SuppressMouseEventHandlingParams | C
19
19
  if (typeof params.column !== 'object') {
20
20
  return false;
21
21
  }
22
- return params.column?.getColDef().cellRendererParams.supressCellFocusAndFocusFirstElement ?? false;
22
+ return params.column?.getColDef().cellRendererParams.suppressCellFocusAndFocusFirstElement ?? false;
23
23
  };
24
24
 
25
25
  export const DSDefaultColDef: ColDef = {
@@ -54,7 +54,7 @@ export const DSDefaultColDef: ColDef = {
54
54
  useFormatter: true,
55
55
  },
56
56
  cellClassRules: {
57
- 'ds-table__cell--supress-focus': shouldSuppressFocus,
57
+ 'ds-table__cell--suppress-focus': shouldSuppressFocus,
58
58
  },
59
59
  cellRendererParams: {
60
60
  suppressMouseEventHandling: (params: SuppressMouseEventHandlingParams) => {
@@ -2,14 +2,12 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
2
2
  import { type Column, type ColDef, type ColGroupDef } from 'ag-grid-enterprise';
3
3
  import { Table } from './Table';
4
4
  import { Button } from 'Components/button/Button';
5
- import { Icon } from 'Components/icon/Icon';
6
- import { BulkActionsDropdown } from './BulkActionsDropdown';
7
5
 
8
6
  import { useState, type ComponentProps } from 'react';
9
7
  import { RowCountInfo } from './pagination/RowCountInfo';
10
8
  import { PaginationPanel } from './pagination/PaginationPanel';
11
- import { HideColumnsDropdown } from './HideColumnsDropdown';
12
- import { TableSettingsDropdown } from './TableSettingsDropdown';
9
+ import { HideColumnsDropdown } from './tableControls/HideColumnsDropdown';
10
+ import { TableControls } from './tableControls/TableControls';
13
11
  import { ModalManager } from 'Components/modal/modalManager/ModalManager';
14
12
  import { Modal } from 'Components/modal/Modal';
15
13
  import { ModalUtils } from 'Utils/ModalUtils';
@@ -180,22 +178,14 @@ const footerContent = [
180
178
  </Button>,
181
179
  ];
182
180
 
183
- const headerContent = [
184
- <div key={0} style={{ display: 'flex', gap: '0.5rem' }}>
185
- <Button key={0} variant="secondary" size="S">
186
- Button 1
187
- </Button>
188
- <Button key={1} variant="secondary" size="S">
189
- Button 2
190
- </Button>
191
- </div>,
192
- <div key={1} style={{ display: 'flex', gap: '1rem' }}>
193
- <Icon name="download" />
194
- <TableSettingsDropdown />
195
- <Icon name="circle-help" />
196
- <Icon name="expand" />
197
- </div>,
198
- ];
181
+ const headerContent = (
182
+ <TableControls
183
+ onDownload={() => console.log('download')}
184
+ showSettings
185
+ onHelp={() => console.log('help')}
186
+ onExpandToggle={expanded => console.log('expand', expanded)}
187
+ />
188
+ );
199
189
 
200
190
  export const Default: Story = {
201
191
  args: {
@@ -280,26 +270,107 @@ export const WithBulkActions: Story = {
280
270
  columnDefs: sampleColumnDefs,
281
271
  defaultColDef,
282
272
  domLayout: 'autoHeight',
283
- headerContent: [
284
- <BulkActionsDropdown
285
- key={0}
286
- actions={[
273
+ headerContent: (
274
+ <TableControls
275
+ bulkActions={[
287
276
  {
288
277
  displayName: 'foo',
289
- callback: (gridApi) => {
290
- console.log('clicked on the foo action', gridApi);
291
- },
278
+ callback: (gridApi) => { console.log('clicked on the foo action', gridApi); },
292
279
  },
293
280
  {
294
281
  displayName: 'bar',
295
- callback: (gridApi) => {
296
- console.log('clicked on the bar action', gridApi);
297
- },
282
+ callback: (gridApi) => { console.log('clicked on the bar action', gridApi); },
298
283
  disabled: true,
299
284
  },
300
285
  ]}
301
- />,
302
- ],
286
+ />
287
+ ),
288
+ },
289
+ };
290
+
291
+ export const WithTableControls: Story = {
292
+ parameters: {
293
+ docs: {
294
+ description: {
295
+ story:
296
+ 'TableControls is a pre-composed toolbar that wires up the standard set of table controls. Every slot is opt-in — only pass the props for the controls you need.',
297
+ },
298
+ },
299
+ },
300
+ args: {
301
+ rowData: sampleData,
302
+ columnDefs: sampleColumnDefs,
303
+ defaultColDef,
304
+ domLayout: 'autoHeight',
305
+ headerContent: (
306
+ <TableControls
307
+ bulkActions={[
308
+ { displayName: 'Export selected', callback: api => console.log('export', api) },
309
+ { displayName: 'Delete selected', callback: api => console.log('delete', api), disabled: true },
310
+ ]}
311
+ onUndo={() => console.log('undo')}
312
+ onRedo={() => console.log('redo')}
313
+ showHideColumns
314
+ onDownload={() => console.log('download')}
315
+ showSettings
316
+ onHelp={() => console.log('help')}
317
+ onExpandToggle={expanded => console.log('expand', expanded)}
318
+ />
319
+ ),
320
+ },
321
+ };
322
+
323
+ export const WithTableControlsStartGroupOnly: Story = {
324
+ parameters: {
325
+ docs: {
326
+ description: {
327
+ story:
328
+ 'TableControls with only the start group rendered — bulk actions, undo, redo, and hide columns. No end group props are passed so that side is omitted entirely.',
329
+ },
330
+ },
331
+ },
332
+ args: {
333
+ rowData: sampleData,
334
+ columnDefs: sampleColumnDefs,
335
+ defaultColDef,
336
+ domLayout: 'autoHeight',
337
+ headerContent: (
338
+ <TableControls
339
+ bulkActions={[
340
+ { displayName: 'Export selected', callback: api => console.log('export', api) },
341
+ { displayName: 'Delete selected', callback: api => console.log('delete', api), disabled: true },
342
+ ]}
343
+ onUndo={() => console.log('undo')}
344
+ onRedo={() => console.log('redo')}
345
+ showHideColumns
346
+ />
347
+ ),
348
+ },
349
+ };
350
+
351
+ export const WithTableControlsEndGroupOnly: Story = {
352
+ parameters: {
353
+ docs: {
354
+ description: {
355
+ story:
356
+ 'TableControls with only the end group rendered — search, download, settings, help, and expand. No start group props are passed so that side is omitted entirely.',
357
+ },
358
+ },
359
+ },
360
+ args: {
361
+ rowData: sampleData,
362
+ columnDefs: sampleColumnDefs,
363
+ defaultColDef,
364
+ domLayout: 'autoHeight',
365
+ headerContent: (
366
+ <TableControls
367
+ hasSearch
368
+ onDownload={() => console.log('download')}
369
+ showSettings
370
+ onHelp={() => console.log('help')}
371
+ onExpandToggle={expanded => console.log('expand', expanded)}
372
+ />
373
+ ),
303
374
  },
304
375
  };
305
376
 
@@ -490,7 +561,7 @@ const sampleColumnDefsWithButtonCellRenderer: (ColDef | ColGroupDef)[] = [
490
561
  headerTooltip: 'The name of the user',
491
562
  cellRenderer: 'dsButtonCellRenderer',
492
563
  cellRendererParams: {
493
- supressCellFocusAndFocusFirstElement: true,
564
+ suppressCellFocusAndFocusFirstElement: true,
494
565
  },
495
566
  editable: false,
496
567
  },
@@ -818,7 +889,7 @@ export const WithInlineTextCellRenderer: Story = {
818
889
  field: 'name',
819
890
  cellRenderer: 'dsInlineTextCellRenderer',
820
891
  cellRendererParams: {
821
- supressCellFocusAndFocusFirstElement: true,
892
+ suppressCellFocusAndFocusFirstElement: true,
822
893
  suppressCount: true,
823
894
  suppressDoubleClickExpand: true,
824
895
  suppressEnterExpand: true,
@@ -1171,7 +1242,7 @@ export const TidyTable: Story = {
1171
1242
  editable: false,
1172
1243
  cellRenderer: 'agGroupCellRenderer',
1173
1244
  cellRendererParams: {
1174
- supressCellFocusAndFocusFirstElement: true,
1245
+ suppressCellFocusAndFocusFirstElement: true,
1175
1246
  suppressCount: true,
1176
1247
  suppressDoubleClickExpand: true,
1177
1248
  suppressEnterExpand: true,
@@ -1409,4 +1480,100 @@ export const WithBooleanCellRenderer: Story = {
1409
1480
  },
1410
1481
  };
1411
1482
 
1483
+ const checkboxRowData = [
1484
+ {
1485
+ id: 1,
1486
+ name: { value: 'Alice Johnson' },
1487
+ email: { value: 'alice.johnson@example.com' },
1488
+ role: { value: 'Developer' },
1489
+ attended: true,
1490
+ consented: false,
1491
+ },
1492
+ {
1493
+ id: 2,
1494
+ name: { value: 'Bob Smith' },
1495
+ email: { value: 'bob.smith@example.com' },
1496
+ role: { value: 'Designer' },
1497
+ attended: false,
1498
+ consented: true,
1499
+ },
1500
+ {
1501
+ id: 3,
1502
+ name: { value: 'Charlie Brown' },
1503
+ email: { value: 'charlie.brown@example.com' },
1504
+ role: { value: 'Manager' },
1505
+ attended: true,
1506
+ consented: true,
1507
+ },
1508
+ {
1509
+ id: 4,
1510
+ name: { value: 'Diana Prince' },
1511
+ email: { value: 'diana.prince@example.com' },
1512
+ role: { value: 'Developer' },
1513
+ attended: false,
1514
+ consented: false,
1515
+ },
1516
+ {
1517
+ id: 5,
1518
+ name: { value: 'Ethan Hunt' },
1519
+ email: { value: 'ethan.hunt@example.com' },
1520
+ role: { value: 'Analyst' },
1521
+ attended: true,
1522
+ consented: false,
1523
+ },
1524
+ ];
1525
+
1526
+ const checkboxColumnDefs: ColDef[] = [
1527
+ {
1528
+ field: 'name',
1529
+ headerName: 'Name',
1530
+ valueFormatter: Table.DefaultValueFormatter,
1531
+ },
1532
+ {
1533
+ field: 'email',
1534
+ headerName: 'Email',
1535
+ valueFormatter: Table.DefaultValueFormatter,
1536
+ },
1537
+ {
1538
+ field: 'role',
1539
+ headerName: 'Role',
1540
+ valueFormatter: Table.DefaultValueFormatter,
1541
+ },
1542
+ {
1543
+ field: 'attended',
1544
+ headerName: 'Attended',
1545
+ cellRenderer: 'dsCheckboxCellRenderer',
1546
+ cellRendererParams: {
1547
+ suppressCellFocusAndFocusFirstElement: true,
1548
+ },
1549
+ editable: false,
1550
+ },
1551
+ {
1552
+ field: 'consented',
1553
+ headerName: 'Consented',
1554
+ cellRenderer: 'dsCheckboxCellRenderer',
1555
+ cellRendererParams: {
1556
+ suppressCellFocusAndFocusFirstElement: true,
1557
+ },
1558
+ editable: false,
1559
+ },
1560
+ ];
1561
+
1562
+ export const WithCheckboxCellRenderer: Story = {
1563
+ parameters: {
1564
+ docs: {
1565
+ description: {
1566
+ story:
1567
+ 'The CheckboxCellRenderer renders a checkbox input inside a table cell. Pass a boolean value to the cell data to control the checked state.',
1568
+ },
1569
+ },
1570
+ },
1571
+ args: {
1572
+ rowData: checkboxRowData,
1573
+ columnDefs: checkboxColumnDefs,
1574
+ defaultColDef,
1575
+ domLayout: 'autoHeight',
1576
+ },
1577
+ };
1578
+
1412
1579
  export default meta;
@@ -2,9 +2,9 @@ import { describe, expect, expectTypeOf, test, vi } from 'vitest';
2
2
  import { render, screen, waitFor } from '@testing-library/react';
3
3
  import { Table, TABLE_SPACING } from './Table';
4
4
  import '@testing-library/jest-dom/vitest';
5
- import { BulkActionsDropdown } from 'Components/table/BulkActionsDropdown';
6
- import { HideColumnsDropdown } from 'Components/table/HideColumnsDropdown';
7
- import { TableSettingsDropdown } from './TableSettingsDropdown';
5
+ import { BulkActionsDropdown } from 'Components/table/tableControls/BulkActionsDropdown';
6
+ import { HideColumnsDropdown } from 'Components/table/tableControls/HideColumnsDropdown';
7
+ import { TableSettingsDropdown } from './tableControls/TableSettingsDropdown';
8
8
  import userEvent from '@testing-library/user-event';
9
9
  import type { GridApi } from 'ag-grid-enterprise';
10
10
  import * as focusFirstFocusableElementModule from 'Utils/focusFirstFocusableElement';
@@ -1487,14 +1487,140 @@ describe('Table', () => {
1487
1487
  });
1488
1488
  });
1489
1489
 
1490
- describe('supressCellFocusAndFocusFirstElement', () => {
1490
+ describe('CheckboxCellRenderer', () => {
1491
+ test('renders checkboxes in table cells', async () => {
1492
+ const columnDefs = [
1493
+ { field: 'name', headerName: 'Name' },
1494
+ {
1495
+ field: 'attended',
1496
+ headerName: 'Attended',
1497
+ cellRenderer: 'dsCheckboxCellRenderer',
1498
+ editable: false,
1499
+ },
1500
+ ];
1501
+ const rowData = [
1502
+ { name: 'Alice', attended: true },
1503
+ { name: 'Bob', attended: false },
1504
+ ];
1505
+
1506
+ render(<Table columnDefs={columnDefs} rowData={rowData} />);
1507
+ await waitFor(() => expect(screen.getByRole('grid')).toBeInTheDocument());
1508
+ await waitFor(() => {
1509
+ const checkboxes = screen.getAllByRole('checkbox');
1510
+ expect(checkboxes.length).toBe(2);
1511
+ });
1512
+ });
1513
+
1514
+ test('checked state reflects row data value', async () => {
1515
+ const columnDefs = [{
1516
+ field: 'active',
1517
+ headerName: 'Active',
1518
+ cellRenderer: 'dsCheckboxCellRenderer',
1519
+ editable: false,
1520
+ }];
1521
+ const rowData = [
1522
+ { active: true },
1523
+ { active: false },
1524
+ ];
1525
+
1526
+ render(<Table columnDefs={columnDefs} rowData={rowData} />);
1527
+ await waitFor(() => expect(screen.getByRole('grid')).toBeInTheDocument());
1528
+ await waitFor(() => {
1529
+ const checkboxes = screen.getAllByRole('checkbox');
1530
+ expect(checkboxes[0]).toBeChecked();
1531
+ expect(checkboxes[1]).not.toBeChecked();
1532
+ });
1533
+ });
1534
+
1535
+ test('clicking checkbox triggers onCellValueChanged', async () => {
1536
+ const onCellValueChanged = vi.fn();
1537
+ const columnDefs = [{
1538
+ field: 'active',
1539
+ headerName: 'Active',
1540
+ cellRenderer: 'dsCheckboxCellRenderer',
1541
+ editable: false,
1542
+ }];
1543
+ const rowData = [{ active: false }];
1544
+
1545
+ render(
1546
+ <Table
1547
+ columnDefs={columnDefs}
1548
+ rowData={rowData}
1549
+ onCellValueChanged={onCellValueChanged}
1550
+ />,
1551
+ );
1552
+ await waitFor(() => expect(screen.getByRole('grid')).toBeInTheDocument());
1553
+ await waitFor(() => expect(screen.getByRole('checkbox')).toBeInTheDocument());
1554
+
1555
+ await userEvent.click(screen.getByRole('checkbox'));
1556
+
1557
+ await waitFor(() => {
1558
+ expect(onCellValueChanged).toHaveBeenCalledWith(expect.objectContaining({ oldValue: false, newValue: true }));
1559
+ });
1560
+ });
1561
+
1562
+ test('works with multiple checkbox columns', async () => {
1563
+ const columnDefs = [
1564
+ { field: 'name', headerName: 'Name' },
1565
+ {
1566
+ field: 'attended',
1567
+ headerName: 'Attended',
1568
+ cellRenderer: 'dsCheckboxCellRenderer',
1569
+ editable: false,
1570
+ },
1571
+ {
1572
+ field: 'consented',
1573
+ headerName: 'Consented',
1574
+ cellRenderer: 'dsCheckboxCellRenderer',
1575
+ editable: false,
1576
+ },
1577
+ ];
1578
+ const rowData = [
1579
+ { name: 'Alice', attended: true, consented: false },
1580
+ ];
1581
+
1582
+ render(<Table columnDefs={columnDefs} rowData={rowData} />);
1583
+ await waitFor(() => expect(screen.getByRole('grid')).toBeInTheDocument());
1584
+ await waitFor(() => {
1585
+ const checkboxes = screen.getAllByRole('checkbox');
1586
+ expect(checkboxes[0]).toBeChecked();
1587
+ expect(checkboxes[1]).not.toBeChecked();
1588
+ });
1589
+ });
1590
+
1591
+ test('disabled flag via cellRendererParams', async () => {
1592
+ const onCellValueChanged = vi.fn();
1593
+ const columnDefs = [{
1594
+ field: 'active',
1595
+ headerName: 'Active',
1596
+ cellRenderer: 'dsCheckboxCellRenderer',
1597
+ editable: false,
1598
+ cellRendererParams: { disabled: true },
1599
+ }];
1600
+ const rowData = [{ active: false }];
1601
+
1602
+ render(
1603
+ <Table
1604
+ columnDefs={columnDefs}
1605
+ rowData={rowData}
1606
+ onCellValueChanged={onCellValueChanged}
1607
+ />,
1608
+ );
1609
+ await waitFor(() => expect(screen.getByRole('grid')).toBeInTheDocument());
1610
+ await waitFor(() => expect(screen.getByRole('checkbox')).toBeInTheDocument());
1611
+
1612
+ expect(screen.getByRole('checkbox')).toBeDisabled();
1613
+ });
1614
+ });
1615
+
1616
+ describe('suppressCellFocusAndFocusFirstElement', () => {
1491
1617
  const handleClick = vi.fn();
1492
1618
  const columnDefs = [{
1493
1619
  field: 'action',
1494
1620
  headerName: 'Action',
1495
1621
  cellRenderer: 'dsButtonCellRenderer',
1496
1622
  cellRendererParams: {
1497
- supressCellFocusAndFocusFirstElement: true,
1623
+ suppressCellFocusAndFocusFirstElement: true,
1498
1624
  },
1499
1625
  }];
1500
1626
  const rowData = [{
@@ -1504,14 +1630,14 @@ describe('Table', () => {
1504
1630
  },
1505
1631
  }];
1506
1632
 
1507
- test('setting supressCellFocusAndFocusFirstElement to true should add the ds-table__cell--supress-focus class', async () => {
1633
+ test('setting suppressCellFocusAndFocusFirstElement to true should add the ds-table__cell--suppress-focus class', async () => {
1508
1634
  const { container } = render(<Table columnDefs={columnDefs} rowData={rowData} />);
1509
1635
  await screen.findByRole('grid', {}, { timeout: 10000 });
1510
- const cellWithClass = container.querySelector('.ds-table__cell--supress-focus');
1636
+ const cellWithClass = container.querySelector('.ds-table__cell--suppress-focus');
1511
1637
  expect(cellWithClass).toBeInTheDocument();
1512
1638
  });
1513
1639
 
1514
- test('setting supressCellFocusAndFocusFirstElement to true should suppress cell focus and focus the first element', async () => {
1640
+ test('setting suppressCellFocusAndFocusFirstElement to true should suppress cell focus and focus the first element', async () => {
1515
1641
  const focusFirstFocusableElementSpy = vi.spyOn(
1516
1642
  focusFirstFocusableElementModule,
1517
1643
  'focusFirstFocusableElement',
@@ -2,7 +2,7 @@ import { AllEnterpriseModule, ModuleRegistry, type GridApi } from 'ag-grid-enter
2
2
  import { AgGridReact, type AgGridReactProps } from 'ag-grid-react';
3
3
  import { defaultTheme } from './theme/defaultTheme';
4
4
  import classNames from 'classnames';
5
- import { createContext, useRef, useState, type ReactNode } from 'react';
5
+ import { useRef, useState, type ReactNode } from 'react';
6
6
  import { TableFooter } from './TableFooter';
7
7
  import { TableHeader } from './TableHeader';
8
8
  import { GridApiContext } from './GridApiContext';
@@ -10,8 +10,8 @@ import { PaginationPanel } from './pagination/PaginationPanel';
10
10
  import { PageSizeSelector } from './pagination/PageSizeSelector';
11
11
  import { PaginationControls } from './pagination/PaginationControls';
12
12
  import { RowCountInfo } from './pagination/RowCountInfo';
13
- import { BulkActionsDropdown } from './BulkActionsDropdown';
14
- import { HideColumnsDropdown } from './HideColumnsDropdown';
13
+ import { BulkActionsDropdown } from './tableControls/BulkActionsDropdown';
14
+ import { HideColumnsDropdown } from './tableControls/HideColumnsDropdown';
15
15
  import { useTableSettings, type UseTableSettingsParams } from './useTableSettings';
16
16
  import { setAgGridLicenseKey } from 'Utils/setAgGridLicenseKey';
17
17
  import { toggleRowSelectionInCurrentRange } from './toggleRowSelectionInCurrentRange';
@@ -23,8 +23,12 @@ import { tidyTheme } from './theme/tidyTheme';
23
23
  import { focusFirstFocusableElement } from 'Utils/focusFirstFocusableElement';
24
24
  import { BooleanFilter } from './columnFilters/BooleanFilter/BooleanFilter';
25
25
  import { TimeFilter } from './columnFilters/TimeFilter/TimeFilter';
26
- import { TableSettingsDropdown } from './TableSettingsDropdown';
26
+ import { TableSettingsDropdown } from './tableControls/TableSettingsDropdown';
27
+ import { TableControls } from './tableControls/TableControls';
28
+ import { TABLE_SPACING } from './tableConsts';
29
+ import { TableSettingsContext } from './TableSettingsContext';
27
30
  import { BooleanCellRenderer } from './cellRenderers/BooleanCellRenderer';
31
+ import { CheckboxCellRenderer } from './cellRenderers/CheckboxCellRenderer';
28
32
 
29
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
34
  type TableProps<TData = any> = {
@@ -44,24 +48,8 @@ setAgGridLicenseKey();
44
48
 
45
49
  ModuleRegistry.registerModules([AllEnterpriseModule]);
46
50
 
47
- export enum TABLE_SPACING {
48
- XS = 'XS',
49
- S = 'S',
50
- M = 'M',
51
- L = 'L',
52
- }
53
-
54
- export const TableSettingsContext = createContext<ReturnType<typeof useTableSettings>>({
55
- settings: {
56
- hasColumnBorders: false,
57
- tableSpacing: TABLE_SPACING.S,
58
- areCellColorsEnabled: true,
59
- },
60
- setTableSpacing: () => {},
61
- setHasColumnBorders: () => {},
62
- resetSettings: () => {},
63
- setAreCellColorsEnabled: () => {},
64
- });
51
+ export { TABLE_SPACING } from './tableConsts';
52
+ export { TableSettingsContext } from './TableSettingsContext';
65
53
 
66
54
  export const Table = (props: TableProps) => {
67
55
  const {
@@ -195,6 +183,7 @@ export const Table = (props: TableProps) => {
195
183
  dsSelectDropdownCellRenderer: SelectDropdownCellRenderer,
196
184
  dsBooleanFilter: BooleanFilter,
197
185
  dsTimeFilter: TimeFilter,
186
+ dsCheckboxCellRenderer: CheckboxCellRenderer,
198
187
  dsBooleanCellRenderer: BooleanCellRenderer,
199
188
  ...components,
200
189
  }}
@@ -221,3 +210,4 @@ Table.HideColumnsDropdown = HideColumnsDropdown;
221
210
  Table.ButtonCellRenderer = ButtonCellRenderer;
222
211
  Table.DefaultValueFormatter = defaultValueFormatter;
223
212
  Table.TableSettingsDropdown = TableSettingsDropdown;
213
+ Table.TableControls = TableControls;
@@ -0,0 +1,15 @@
1
+ import { createContext } from 'react';
2
+ import { TABLE_SPACING } from './tableConsts';
3
+ import { type useTableSettings } from './useTableSettings';
4
+
5
+ export const TableSettingsContext = createContext<ReturnType<typeof useTableSettings>>({
6
+ settings: {
7
+ hasColumnBorders: false,
8
+ tableSpacing: TABLE_SPACING.S,
9
+ areCellColorsEnabled: true,
10
+ },
11
+ setTableSpacing: () => {},
12
+ setHasColumnBorders: () => {},
13
+ resetSettings: () => {},
14
+ setAreCellColorsEnabled: () => {},
15
+ });