@arbor-education/design-system.components 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.github/workflows/release.yml +3 -1
  2. package/.storybook/main.ts +12 -6
  3. package/CHANGELOG.md +12 -0
  4. package/dist/components/table/Table.d.ts.map +1 -1
  5. package/dist/components/table/Table.js +2 -1
  6. package/dist/components/table/Table.js.map +1 -1
  7. package/dist/components/table/Table.stories.d.ts.map +1 -1
  8. package/dist/components/table/Table.stories.js +24 -70
  9. package/dist/components/table/Table.stories.js.map +1 -1
  10. package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts.map +1 -1
  11. package/dist/components/table/cellEditors/DateCellEditor.stories.js +16 -13
  12. package/dist/components/table/cellEditors/DateCellEditor.stories.js.map +1 -1
  13. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts.map +1 -1
  14. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js +6 -7
  15. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js.map +1 -1
  16. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts.map +1 -1
  17. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js +7 -8
  18. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js.map +1 -1
  19. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts.map +1 -1
  20. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js +7 -8
  21. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js.map +1 -1
  22. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts.map +1 -1
  23. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js +7 -8
  24. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js.map +1 -1
  25. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.d.ts.map +1 -1
  26. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js +12 -15
  27. package/dist/components/table/cellRenderers/NumberInputCellRenderer.stories.js.map +1 -1
  28. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -1
  29. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +19 -29
  30. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -1
  31. package/dist/components/table/columnTypes.d.ts +3 -0
  32. package/dist/components/table/columnTypes.d.ts.map +1 -0
  33. package/dist/components/table/columnTypes.js +55 -0
  34. package/dist/components/table/columnTypes.js.map +1 -0
  35. package/dist/components/toggleGroup/ToggleGroup.stories.js +1 -1
  36. package/dist/components/toggleGroup/ToggleGroup.stories.js.map +1 -1
  37. package/dist/index.css +6 -0
  38. package/dist/index.css.map +1 -1
  39. package/package.json +10 -11
  40. package/src/components/dropdown/dropdown.scss +6 -0
  41. package/src/components/table/Table.stories.tsx +24 -73
  42. package/src/components/table/Table.tsx +2 -0
  43. package/src/components/table/cellEditors/DateCellEditor.stories.tsx +16 -14
  44. package/src/components/table/cellRenderers/BooleanCellRenderer.stories.tsx +6 -7
  45. package/src/components/table/cellRenderers/ButtonCellRenderer.stories.tsx +7 -8
  46. package/src/components/table/cellRenderers/CheckboxCellRenderer.stories.tsx +7 -8
  47. package/src/components/table/cellRenderers/InlineTextCellRenderer.stories.tsx +7 -8
  48. package/src/components/table/cellRenderers/NumberInputCellRenderer.stories.tsx +12 -15
  49. package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +19 -29
  50. package/src/components/table/columnTypes.ts +56 -0
  51. package/src/components/toggleGroup/ToggleGroup.stories.tsx +1 -1
@@ -23,7 +23,8 @@ const DESCRIPTION_INTRO = [
23
23
  'dropdown when the user presses Enter in the focused cell. On selection, it calls `node.setDataValue`',
24
24
  'to update the row data in-place.',
25
25
  '',
26
- 'Register it via the string key `dsSelectDropdownCellRenderer` (pre-registered by Arbor\'s `Table`) or by importing the component directly.',
26
+ 'Register it via `type: \'dsSelectDropdownColumn\'` on the column definition (pre-registered by Arbor\'s `Table`),',
27
+ 'via the string key `dsSelectDropdownCellRenderer`, or by importing the component directly.',
27
28
  ].join('\n');
28
29
 
29
30
  const USAGE_GUIDANCE = [
@@ -63,7 +64,7 @@ const DEVELOPER_NOTES = [
63
64
  ' {',
64
65
  " field: 'status',",
65
66
  " headerName: 'Status',",
66
- " cellRenderer: 'dsSelectDropdownCellRenderer',",
67
+ " type: 'dsSelectDropdownColumn',",
67
68
  ' cellRendererParams: {',
68
69
  ' options: [',
69
70
  " { label: 'Active', value: 'active' },",
@@ -273,7 +274,7 @@ const colDefs = [
273
274
  {
274
275
  field: 'status',
275
276
  headerName: 'Status',
276
- cellRenderer: 'dsSelectDropdownCellRenderer',
277
+ type: 'dsSelectDropdownColumn',
277
278
  cellRendererParams: {
278
279
  options: [
279
280
  { label: 'Active', value: 'active' },
@@ -414,8 +415,7 @@ function SelectDropdownCellRendererExample() {
414
415
  field: 'status',
415
416
  headerName: 'Status',
416
417
  flex: 1,
417
- editable: false,
418
- cellRenderer: 'dsSelectDropdownCellRenderer',
418
+ type: 'dsSelectDropdownColumn',
419
419
  cellRendererParams: { options: statusOptions },
420
420
  },
421
421
  ]}
@@ -439,8 +439,7 @@ export default SelectDropdownCellRendererExample;
439
439
  field: 'status',
440
440
  headerName: 'Status',
441
441
  flex: 1,
442
- editable: false,
443
- cellRenderer: 'dsSelectDropdownCellRenderer',
442
+ type: 'dsSelectDropdownColumn',
444
443
  cellRendererParams: { options: STATUS_OPTIONS },
445
444
  },
446
445
  ]}
@@ -449,7 +448,7 @@ export default SelectDropdownCellRendererExample;
449
448
  />
450
449
  ),
451
450
  },
452
- '`dsSelectDropdownCellRenderer` wired up inside a full `Table`. Click a Status dropdown to select a new value — the selection is committed to the row via `node.setDataValue`. Press Enter in a focused Status cell to open the dropdown via keyboard.',
451
+ '`type: \'dsSelectDropdownColumn\'` wired up inside a full `Table`. Click a Status dropdown to select a new value — the selection is committed to the row via `node.setDataValue`. Press Enter in a focused Status cell to open the dropdown via keyboard.',
453
452
  );
454
453
 
455
454
  const STATUS_BACKGROUND_COLORS: Record<string, string> = {
@@ -480,8 +479,7 @@ const columnDefs = [
480
479
  field: 'status',
481
480
  headerName: 'Status',
482
481
  flex: 1,
483
- editable: false,
484
- cellRenderer: 'dsSelectDropdownCellRenderer',
482
+ type: 'dsSelectDropdownColumn',
485
483
  // Per-row params: derive the cell background from the row's current value.
486
484
  cellRendererParams: (params) => ({
487
485
  options: statusOptions,
@@ -505,8 +503,7 @@ const columnDefs = [
505
503
  field: 'status',
506
504
  headerName: 'Status',
507
505
  flex: 1,
508
- editable: false,
509
- cellRenderer: 'dsSelectDropdownCellRenderer',
506
+ type: 'dsSelectDropdownColumn',
510
507
  cellRendererParams: (params: { value?: string }) => ({
511
508
  options: STATUS_OPTIONS,
512
509
  backgroundColor: params.value ? STATUS_BACKGROUND_COLORS[params.value] : undefined,
@@ -555,7 +552,7 @@ const columnDefs = [
555
552
  {
556
553
  field: 'english',
557
554
  headerName: 'English',
558
- cellRenderer: 'dsSelectDropdownCellRenderer',
555
+ type: 'dsSelectDropdownColumn',
559
556
  cellRendererParams: {
560
557
  options: gradeOptions,
561
558
  iconClickOnly: true,
@@ -583,24 +580,21 @@ const columnDefs = [
583
580
  field: 'english',
584
581
  headerName: 'English',
585
582
  flex: 1,
586
- editable: false,
587
- cellRenderer: 'dsSelectDropdownCellRenderer',
583
+ type: 'dsSelectDropdownColumn',
588
584
  cellRendererParams: { options: GRADE_OPTIONS, iconClickOnly: true },
589
585
  },
590
586
  {
591
587
  field: 'maths',
592
588
  headerName: 'Maths',
593
589
  flex: 1,
594
- editable: false,
595
- cellRenderer: 'dsSelectDropdownCellRenderer',
590
+ type: 'dsSelectDropdownColumn',
596
591
  cellRendererParams: { options: GRADE_OPTIONS, iconClickOnly: true },
597
592
  },
598
593
  {
599
594
  field: 'science',
600
595
  headerName: 'Science',
601
596
  flex: 1,
602
- editable: false,
603
- cellRenderer: 'dsSelectDropdownCellRenderer',
597
+ type: 'dsSelectDropdownColumn',
604
598
  cellRendererParams: { options: GRADE_OPTIONS, iconClickOnly: true },
605
599
  },
606
600
  ]}
@@ -648,7 +642,7 @@ const columnDefs = [
648
642
  {
649
643
  field: 'english',
650
644
  headerName: 'English',
651
- cellRenderer: 'dsSelectDropdownCellRenderer',
645
+ type: 'dsSelectDropdownColumn',
652
646
  cellRendererParams: (params) => ({
653
647
  options: gradeOptions,
654
648
  backgroundColor: GRADE_BACKGROUND_COLORS[params.value],
@@ -679,8 +673,7 @@ const columnDefs = [
679
673
  field: 'english',
680
674
  headerName: 'English',
681
675
  flex: 1,
682
- editable: false,
683
- cellRenderer: 'dsSelectDropdownCellRenderer',
676
+ type: 'dsSelectDropdownColumn',
684
677
  cellRendererParams: (params: { value?: string }) => ({
685
678
  options: GRADE_OPTIONS,
686
679
  backgroundColor: params.value ? GRADE_BACKGROUND_COLORS[params.value] : undefined,
@@ -693,8 +686,7 @@ const columnDefs = [
693
686
  field: 'maths',
694
687
  headerName: 'Maths',
695
688
  flex: 1,
696
- editable: false,
697
- cellRenderer: 'dsSelectDropdownCellRenderer',
689
+ type: 'dsSelectDropdownColumn',
698
690
  cellRendererParams: (params: { value?: string }) => ({
699
691
  options: GRADE_OPTIONS,
700
692
  backgroundColor: params.value ? GRADE_BACKGROUND_COLORS[params.value] : undefined,
@@ -707,8 +699,7 @@ const columnDefs = [
707
699
  field: 'science',
708
700
  headerName: 'Science',
709
701
  flex: 1,
710
- editable: false,
711
- cellRenderer: 'dsSelectDropdownCellRenderer',
702
+ type: 'dsSelectDropdownColumn',
712
703
  cellRendererParams: (params: { value?: string }) => ({
713
704
  options: GRADE_OPTIONS,
714
705
  backgroundColor: params.value ? GRADE_BACKGROUND_COLORS[params.value] : undefined,
@@ -742,7 +733,7 @@ const columnDefs = [
742
733
  {
743
734
  field: 'status',
744
735
  headerName: 'Status',
745
- cellRenderer: 'dsSelectDropdownCellRenderer',
736
+ type: 'dsSelectDropdownColumn',
746
737
  cellRendererParams: {
747
738
  options: statusOptions,
748
739
  onCloseAutoFocus: (event) => {
@@ -767,8 +758,7 @@ const columnDefs = [
767
758
  field: 'status',
768
759
  headerName: 'Status',
769
760
  flex: 1,
770
- editable: false,
771
- cellRenderer: 'dsSelectDropdownCellRenderer',
761
+ type: 'dsSelectDropdownColumn',
772
762
  cellRendererParams: {
773
763
  options: STATUS_OPTIONS,
774
764
  onCloseAutoFocus: (event: Event) => {
@@ -0,0 +1,56 @@
1
+ import { type ColDef } from 'ag-grid-community';
2
+ import { ComboboxCellRenderer } from 'Components/table/cellRenderers/ComboboxCellRenderer.js';
3
+
4
+ export const columnTypes: Record<string, ColDef> = {
5
+ dsBooleanColumn: {
6
+ cellRenderer: 'dsBooleanCellRenderer',
7
+ editable: false,
8
+ },
9
+ dsButtonColumn: {
10
+ cellRenderer: 'dsButtonCellRenderer',
11
+ editable: false,
12
+ cellRendererParams: {
13
+ suppressCellFocusAndFocusFirstElement: true,
14
+ },
15
+ },
16
+ dsCheckboxColumn: {
17
+ cellRenderer: 'dsCheckboxCellRenderer',
18
+ editable: false,
19
+ cellRendererParams: {
20
+ suppressCellFocusAndFocusFirstElement: true,
21
+ },
22
+ },
23
+ dsComboboxColumn: {
24
+ cellRenderer: 'dsComboboxCellRenderer',
25
+ editable: false,
26
+ ...ComboboxCellRenderer.colDefDefaults,
27
+ },
28
+ dsDateColumn: {
29
+ cellEditor: 'dsDateCellEditor',
30
+ editable: true,
31
+ valueFormatter: params =>
32
+ params.value instanceof Date
33
+ ? params.value.toLocaleDateString('en-GB')
34
+ : params.value,
35
+ },
36
+ dsInlineTextColumn: {
37
+ cellRenderer: 'dsInlineTextCellRenderer',
38
+ editable: false,
39
+ cellRendererParams: {
40
+ suppressCellFocusAndFocusFirstElement: true,
41
+ },
42
+ },
43
+ dsNumberColumn: {
44
+ cellEditor: 'dsNumberCellEditor',
45
+ editable: true,
46
+ },
47
+ dsNumberInputColumn: {
48
+ cellRenderer: 'dsNumberInputCellRenderer',
49
+ editable: false,
50
+ cellRendererParams: { suppressCellFocusAndFocusFirstElement: true },
51
+ },
52
+ dsSelectDropdownColumn: {
53
+ cellRenderer: 'dsSelectDropdownCellRenderer',
54
+ editable: false,
55
+ },
56
+ };
@@ -170,7 +170,7 @@ export const Default: Story = withDescription(
170
170
  args: {
171
171
  options: attendanceOptions,
172
172
  value: undefined,
173
- onValueChange: fn(),
173
+ onValueChange: undefined,
174
174
  },
175
175
  },
176
176
  'No option selected. Click an option to see the selected state.',