@arbor-education/design-system.components 0.13.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/components/articleCard/ArticleCard.d.ts +30 -0
  3. package/dist/components/articleCard/ArticleCard.d.ts.map +1 -0
  4. package/dist/components/articleCard/ArticleCard.js +24 -0
  5. package/dist/components/articleCard/ArticleCard.js.map +1 -0
  6. package/dist/components/articleCard/ArticleCard.stories.d.ts +18 -0
  7. package/dist/components/articleCard/ArticleCard.stories.d.ts.map +1 -0
  8. package/dist/components/articleCard/ArticleCard.stories.js +112 -0
  9. package/dist/components/articleCard/ArticleCard.stories.js.map +1 -0
  10. package/dist/components/articleCard/ArticleCard.test.d.ts +2 -0
  11. package/dist/components/articleCard/ArticleCard.test.d.ts.map +1 -0
  12. package/dist/components/articleCard/ArticleCard.test.js +49 -0
  13. package/dist/components/articleCard/ArticleCard.test.js.map +1 -0
  14. package/dist/components/card/Card.d.ts +41 -12
  15. package/dist/components/card/Card.d.ts.map +1 -1
  16. package/dist/components/card/Card.js +46 -17
  17. package/dist/components/card/Card.js.map +1 -1
  18. package/dist/components/card/Card.stories.d.ts +9 -84
  19. package/dist/components/card/Card.stories.d.ts.map +1 -1
  20. package/dist/components/card/Card.stories.js +15 -73
  21. package/dist/components/card/Card.stories.js.map +1 -1
  22. package/dist/components/card/Card.test.js +50 -152
  23. package/dist/components/card/Card.test.js.map +1 -1
  24. package/dist/components/formField/inputs/number/NumberInput.d.ts.map +1 -1
  25. package/dist/components/formField/inputs/number/NumberInput.js +14 -2
  26. package/dist/components/formField/inputs/number/NumberInput.js.map +1 -1
  27. package/dist/components/formField/inputs/number/NumberInput.test.js +21 -0
  28. package/dist/components/formField/inputs/number/NumberInput.test.js.map +1 -1
  29. package/dist/components/formField/inputs/time/TimeInput.d.ts +1 -1
  30. package/dist/components/formField/inputs/time/TimeInput.stories.d.ts +1 -1
  31. package/dist/components/icoText/IcoText.d.ts +37 -0
  32. package/dist/components/icoText/IcoText.d.ts.map +1 -0
  33. package/dist/components/icoText/IcoText.js +29 -0
  34. package/dist/components/icoText/IcoText.js.map +1 -0
  35. package/dist/components/icoText/IcoText.stories.d.ts +34 -0
  36. package/dist/components/icoText/IcoText.stories.d.ts.map +1 -0
  37. package/dist/components/icoText/IcoText.stories.js +24 -0
  38. package/dist/components/icoText/IcoText.stories.js.map +1 -0
  39. package/dist/components/icoText/IcoText.test.d.ts +2 -0
  40. package/dist/components/icoText/IcoText.test.d.ts.map +1 -0
  41. package/dist/components/icoText/IcoText.test.js +27 -0
  42. package/dist/components/icoText/IcoText.test.js.map +1 -0
  43. package/dist/components/kpiCard/KPICard.d.ts +13 -0
  44. package/dist/components/kpiCard/KPICard.d.ts.map +1 -0
  45. package/dist/components/kpiCard/KPICard.js +8 -0
  46. package/dist/components/kpiCard/KPICard.js.map +1 -0
  47. package/dist/components/kpiCard/KPICard.stories.d.ts +9 -0
  48. package/dist/components/kpiCard/KPICard.stories.d.ts.map +1 -0
  49. package/dist/components/kpiCard/KPICard.stories.js +18 -0
  50. package/dist/components/kpiCard/KPICard.stories.js.map +1 -0
  51. package/dist/components/kpiCard/KPICard.test.d.ts +2 -0
  52. package/dist/components/kpiCard/KPICard.test.d.ts.map +1 -0
  53. package/dist/components/kpiCard/KPICard.test.js +37 -0
  54. package/dist/components/kpiCard/KPICard.test.js.map +1 -0
  55. package/dist/components/kvpList/KVPList.d.ts +34 -0
  56. package/dist/components/kvpList/KVPList.d.ts.map +1 -0
  57. package/dist/components/kvpList/KVPList.js +20 -0
  58. package/dist/components/kvpList/KVPList.js.map +1 -0
  59. package/dist/components/kvpList/KVPList.stories.d.ts +27 -0
  60. package/dist/components/kvpList/KVPList.stories.d.ts.map +1 -0
  61. package/dist/components/kvpList/KVPList.stories.js +18 -0
  62. package/dist/components/kvpList/KVPList.stories.js.map +1 -0
  63. package/dist/components/kvpList/KVPList.test.d.ts +2 -0
  64. package/dist/components/kvpList/KVPList.test.d.ts.map +1 -0
  65. package/dist/components/kvpList/KVPList.test.js +29 -0
  66. package/dist/components/kvpList/KVPList.test.js.map +1 -0
  67. package/dist/components/singleUser/SingleUser.d.ts +1 -1
  68. package/dist/components/table/Table.d.ts +1 -0
  69. package/dist/components/table/Table.d.ts.map +1 -1
  70. package/dist/components/table/Table.js +4 -2
  71. package/dist/components/table/Table.js.map +1 -1
  72. package/dist/components/table/Table.stories.d.ts +1 -0
  73. package/dist/components/table/Table.stories.d.ts.map +1 -1
  74. package/dist/components/table/Table.stories.js +88 -0
  75. package/dist/components/table/Table.stories.js.map +1 -1
  76. package/dist/components/table/Table.test.js +184 -0
  77. package/dist/components/table/Table.test.js.map +1 -1
  78. package/dist/components/table/cellEditors/NumberCellEditor.d.ts +13 -0
  79. package/dist/components/table/cellEditors/NumberCellEditor.d.ts.map +1 -0
  80. package/dist/components/table/cellEditors/NumberCellEditor.js +35 -0
  81. package/dist/components/table/cellEditors/NumberCellEditor.js.map +1 -0
  82. package/dist/components/tabs/TabsItem.stories.d.ts +2 -2
  83. package/dist/index.css +205 -22
  84. package/dist/index.css.map +1 -1
  85. package/dist/index.d.ts +14 -4
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +13 -3
  88. package/dist/index.js.map +1 -1
  89. package/package.json +1 -1
  90. package/src/components/articleCard/ArticleCard.stories.tsx +132 -0
  91. package/src/components/articleCard/ArticleCard.test.tsx +121 -0
  92. package/src/components/articleCard/ArticleCard.tsx +100 -0
  93. package/src/components/articleCard/articleCard.scss +39 -0
  94. package/src/components/card/Card.stories.tsx +35 -79
  95. package/src/components/card/Card.test.tsx +72 -190
  96. package/src/components/card/Card.tsx +117 -58
  97. package/src/components/card/card.scss +18 -31
  98. package/src/components/formField/inputs/number/NumberInput.test.tsx +28 -0
  99. package/src/components/formField/inputs/number/NumberInput.tsx +15 -0
  100. package/src/components/icoText/IcoText.stories.tsx +47 -0
  101. package/src/components/icoText/IcoText.test.tsx +41 -0
  102. package/src/components/icoText/IcoText.tsx +93 -0
  103. package/src/components/icoText/icoText.scss +34 -0
  104. package/src/components/kpiCard/KPICard.stories.tsx +47 -0
  105. package/src/components/kpiCard/KPICard.test.tsx +60 -0
  106. package/src/components/kpiCard/KPICard.tsx +45 -0
  107. package/src/components/kpiCard/kpiCard.scss +35 -0
  108. package/src/components/kvpList/KVPList.stories.tsx +51 -0
  109. package/src/components/kvpList/KVPList.test.tsx +66 -0
  110. package/src/components/kvpList/KVPList.tsx +109 -0
  111. package/src/components/kvpList/kvpList.scss +64 -0
  112. package/src/components/table/Table.stories.tsx +93 -0
  113. package/src/components/table/Table.test.tsx +255 -0
  114. package/src/components/table/Table.tsx +6 -0
  115. package/src/components/table/cellEditors/NumberCellEditor.tsx +83 -0
  116. package/src/components/table/cellEditors/numberCellEditor.scss +11 -0
  117. package/src/components/table/table.scss +11 -0
  118. package/src/index.scss +5 -0
  119. package/src/index.ts +14 -4
  120. package/src/tokens.scss +6 -0
  121. package/tokens/json/Arbor.json +30 -0
@@ -0,0 +1,83 @@
1
+ import { NumberInput } from 'Components/formField/inputs/number/NumberInput';
2
+ import {
3
+ type ChangeEvent,
4
+ type KeyboardEvent,
5
+ } from 'react';
6
+
7
+ export type NumberCellEditorProps = {
8
+ value: number | null | undefined;
9
+ onValueChange: (value: number | null) => void;
10
+ min: number;
11
+ max: number;
12
+ step: number;
13
+ disableSpinners: boolean;
14
+ };
15
+
16
+ const clampValue = (value: number, min: number, max: number) => (
17
+ Math.min(Math.max(value, min), max)
18
+ );
19
+
20
+ export const NumberCellEditor = (props: NumberCellEditorProps) => {
21
+ const {
22
+ value,
23
+ onValueChange,
24
+ min,
25
+ max,
26
+ step,
27
+ disableSpinners,
28
+ } = props;
29
+
30
+ const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
31
+ const nextValue = event.currentTarget.value.trim();
32
+
33
+ if (nextValue === '') {
34
+ onValueChange(null);
35
+ return;
36
+ }
37
+
38
+ const parsedValue = Number(nextValue);
39
+
40
+ if (!Number.isNaN(parsedValue)) {
41
+ onValueChange(clampValue(parsedValue, min, max));
42
+ }
43
+ };
44
+
45
+ const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
46
+ if (event.key !== 'Enter') {
47
+ return;
48
+ }
49
+
50
+ const rawValue = event.currentTarget.value.trim();
51
+
52
+ if (rawValue === '') {
53
+ onValueChange(null);
54
+ return;
55
+ }
56
+
57
+ const parsedValue = Number(rawValue);
58
+
59
+ if (!Number.isNaN(parsedValue)) {
60
+ onValueChange(clampValue(parsedValue, min, max));
61
+ }
62
+ };
63
+
64
+ return (
65
+ <div
66
+ className="ds-number-cell-editor__wrapper"
67
+ >
68
+ <NumberInput
69
+ containerClassName="ds-number-cell-editor__container"
70
+ defaultValue={value == null ? '' : String(value)}
71
+ autoFocus
72
+ min={min}
73
+ max={max}
74
+ step={step}
75
+ disableSpinners={disableSpinners}
76
+ onChange={handleChange}
77
+ onKeyDown={handleKeyDown}
78
+ />
79
+ </div>
80
+ );
81
+ };
82
+
83
+ NumberCellEditor.displayName = 'NumberCellEditor';
@@ -0,0 +1,11 @@
1
+ .ds-number-cell-editor__wrapper {
2
+ height: 100%;
3
+ }
4
+
5
+ .ds-number-cell-editor__container {
6
+ height: 100%;
7
+
8
+ &:focus-within {
9
+ outline: none;
10
+ }
11
+ }
@@ -1,4 +1,15 @@
1
1
  .ds-table {
2
+ &--vertical-header-text {
3
+ .ag-header-cell-label .ag-header-cell-text {
4
+ writing-mode: vertical-rl;
5
+ transform: rotate(180deg);
6
+ text-wrap: balance;
7
+ text-align: center;
8
+ flex-shrink: 0;
9
+ min-width: fit-content;
10
+ }
11
+ }
12
+
2
13
  &__select-dropdown-cell {
3
14
  width: 100%;
4
15
  }
package/src/index.scss CHANGED
@@ -3,8 +3,10 @@
3
3
  @use "./global.scss";
4
4
  @use "components/button/button.scss";
5
5
  @use "components/icon/icon.scss";
6
+ @use "components/icoText/icoText.scss";
6
7
  @use "components/heading/heading.scss";
7
8
  @use "components/card/card.scss";
9
+ @use "components/articleCard/articleCard.scss";
8
10
  @use "components/dropdown/dropdown.scss";
9
11
  @use "components/formField/formField.scss";
10
12
  @use "components/formField/fieldset/fieldset.scss";
@@ -26,6 +28,7 @@
26
28
  @use "components/slideover/slideover.scss";
27
29
  @use "components/table/table.scss";
28
30
  @use "components/searchBar/searchBar.scss";
31
+ @use "components/table/cellEditors/numberCellEditor.scss";
29
32
  @use "components/table/pagination/pagination.scss";
30
33
  @use "components/tooltip/tooltip.scss";
31
34
  @use "components/separator/separator.scss";
@@ -35,6 +38,8 @@
35
38
  @use "components/banner/banner.scss";
36
39
  @use "components/editableText/editableText.scss";
37
40
  @use "components/progress/progress.scss";
41
+ @use "components/kpiCard/kpiCard.scss";
42
+ @use "components/kvpList/kvpList.scss";
38
43
  @use "components/toast/toast.scss";
39
44
  @use "components/datePicker/datePicker.scss";
40
45
  @use "components/dateTimePicker/dateTimePicker.scss";
package/src/index.ts CHANGED
@@ -1,15 +1,18 @@
1
+ export { ArticleCard, type ArticleCardProps } from 'Components/articleCard/ArticleCard';
1
2
  export { Avatar } from 'Components/avatar/Avatar';
2
3
  export { AvatarGroup } from 'Components/avatarGroup/AvatarGroup';
3
4
  export { Badge } from 'Components/badge/Badge';
4
5
  export { Banner } from 'Components/banner/Banner';
5
6
  export { Button } from 'Components/button/Button';
6
- export { Card } from 'Components/card/Card';
7
+ export { Card, type CardProps } from 'Components/card/Card';
7
8
  export { Combobox } from 'Components/combobox/Combobox';
8
9
  export { DatePicker } from 'Components/datePicker/DatePicker';
9
10
  export { DateTimePicker } from 'Components/dateTimePicker/DateTimePicker';
10
11
  export { Dot } from 'Components/dot/Dot';
11
12
  export { Dropdown } from 'Components/dropdown/Dropdown';
12
13
  export { EditableText } from 'Components/editableText/EditableText';
14
+ export { Fieldset } from 'Components/formField/fieldset/Fieldset';
15
+ export { FormField } from 'Components/formField/FormField';
13
16
  export { CheckboxGroup } from 'Components/formField/inputs/checkbox/CheckboxGroup';
14
17
  export { CheckboxInput } from 'Components/formField/inputs/checkbox/CheckboxInput';
15
18
  export { ColourPickerDropdown } from 'Components/formField/inputs/colourPickerDropdown/ColourPickerDropdown';
@@ -18,12 +21,13 @@ export { RadioButtonGroup } from 'Components/formField/inputs/radio/RadioButtonG
18
21
  export { RadioButtonInput } from 'Components/formField/inputs/radio/RadioButtonInput';
19
22
  export { SelectDropdown } from 'Components/formField/inputs/selectDropdown/SelectDropdown';
20
23
  export { TextInput } from 'Components/formField/inputs/text/TextInput';
21
- export { TimeInput } from 'Components/formField/inputs/time/TimeInput';
22
24
  export { TextArea } from 'Components/formField/inputs/textArea/TextArea';
23
- export { Fieldset } from 'Components/formField/fieldset/Fieldset';
24
- export { FormField } from 'Components/formField/FormField';
25
+ export { TimeInput } from 'Components/formField/inputs/time/TimeInput';
25
26
  export { Heading } from 'Components/heading/Heading';
26
27
  export { Icon } from 'Components/icon/Icon';
28
+ export { IcoText, type IcoTextHeadingProps, type IcoTextIconProps, type IcoTextParagraphProps, type IcoTextProps } from 'Components/icoText/IcoText';
29
+ export { KPICard, type KPICardProps } from 'Components/kpiCard/KPICard';
30
+ export { KVPList, type KVPListDefinitionProps, type KVPListProps, type KVPListRowProps, type KVPListTermProps } from 'Components/kvpList/KVPList';
27
31
  export { Modal } from 'Components/modal/Modal';
28
32
  export { ModalManager } from 'Components/modal/modalManager/ModalManager';
29
33
  export { Pill } from 'Components/pill/Pill';
@@ -35,6 +39,12 @@ export { Separator } from 'Components/separator/Separator';
35
39
  export { SingleUser } from 'Components/singleUser/SingleUser';
36
40
  export { Slideover } from 'Components/slideover/Slideover';
37
41
  export { SlideoverManager } from 'Components/slideoverManager/SlideoverManager';
42
+ export { DefaultCellRenderer } from 'Components/table/cellRenderers/DefaultCellRenderer';
43
+ export { BooleanCellRenderer } from 'Components/table/cellRenderers/BooleanCellRenderer';
44
+ export { DSDefaultColDef } from 'Components/table/DSDefaultColDef';
45
+ export { GridApiContext } from 'Components/table/GridApiContext';
46
+ export { NumberCellEditor } from 'Components/table/cellEditors/NumberCellEditor';
47
+ export { CheckboxCellRenderer } from 'Components/table/cellRenderers/CheckboxCellRenderer';
38
48
  export { Table } from 'Components/table/Table';
39
49
  export { Tabs } from 'Components/tabs/Tabs';
40
50
  export { Tag } from 'Components/tag/Tag';
package/src/tokens.scss CHANGED
@@ -211,6 +211,12 @@
211
211
  --kpi-spacing-vertical: var(--spacing-large);
212
212
  --kpi-color-benchmark-text: var(--color-grey-500);
213
213
  --kpi-color-benchmark-text-bg: var(--color-grey-100);
214
+ --kvp-list-color-text-subtle: var(--color-grey-800);
215
+ --kvp-list-color-text-strong: var(--color-mono-black);
216
+ --ico-text-spacing-gap-horizontal: var(--spacing-large);
217
+ --ico-text-spacing-gap-vertical: var(--spacing-medium);
218
+ --kpi-card-color-text-label: var(--color-grey-800);
219
+ --kpi-card-color-text-value: var(--color-mono-black);
214
220
  --tag-radius: var(--border-radius-round);
215
221
  --tag-neutral-color-text: var(--color-grey-900);
216
222
  --tag-neutral-color-background: var(--color-grey-050);
@@ -51,6 +51,36 @@
51
51
  "$value": "{color.grey.100}"
52
52
  }
53
53
  },
54
+ "kvp-list": {
55
+ "color-text-subtle": {
56
+ "$type": "color",
57
+ "$value": "{color.grey.800}"
58
+ },
59
+ "color-text-strong": {
60
+ "$type": "color",
61
+ "$value": "{color.mono.black}"
62
+ }
63
+ },
64
+ "ico-text": {
65
+ "spacing-gap-horizontal": {
66
+ "$type": "dimension",
67
+ "$value": "{spacing.large}"
68
+ },
69
+ "spacing-gap-vertical": {
70
+ "$type": "dimension",
71
+ "$value": "{spacing.medium}"
72
+ }
73
+ },
74
+ "kpi-card": {
75
+ "color-text-label": {
76
+ "$type": "color",
77
+ "$value": "{color.grey.800}"
78
+ },
79
+ "color-text-value": {
80
+ "$type": "color",
81
+ "$value": "{color.mono.black}"
82
+ }
83
+ },
54
84
  "tag": {
55
85
  "radius": {
56
86
  "$type": "borderRadius",