@digital-ai/dot-components 2.11.2 → 2.12.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.
package/CHANGE_LOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.12.0](https://www.npmjs.com/package/@digital-ai/dot-components) (07/27/2023)
4
+
5
+ [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/2.11.3...2.12.0)
6
+
7
+ **Features:**
8
+
9
+ - S-94595: `DotTablePagination` improvements [\#1570](https://github.com/digital-ai/dot-components/pull/1570) ([dmiletic85](https://github.com/dmiletic85))
10
+
11
+ ## [2.11.3](https://www.npmjs.com/package/@digital-ai/dot-components) (07/24/2023)
12
+
13
+ [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/2.11.2...2.11.3)
14
+
15
+ **Fixed bugs:**
16
+
17
+ - S-94066: Update avatar colors [\#1565](https://github.com/digital-ai/dot-components/pull/1565) ([CWSites](https://github.com/CWSites))
18
+
3
19
  ## [2.11.2](https://www.npmjs.com/package/@digital-ai/dot-components) (07/18/2023)
4
20
 
5
21
  [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/2.11.1...2.11.2)
@@ -39,7 +55,6 @@
39
55
  - S-84554: Update typography to latest Figma [\#1551](https://github.com/digital-ai/dot-components/pull/1551) ([CWSites](https://github.com/CWSites))
40
56
  - S-91993: Address a11y issues raised by Storybook [\#1549](https://github.com/digital-ai/dot-components/pull/1549) ([CWSites](https://github.com/CWSites))
41
57
  - D-25843: update dot-icons to be greater than 1.0.11 [\#1543](https://github.com/digital-ai/dot-components/pull/1543) ([CWSites](https://github.com/CWSites))
42
- - `master` \> `develop` [\#1532](https://github.com/digital-ai/dot-components/pull/1532) ([angel-git](https://github.com/angel-git))
43
58
 
44
59
  ## [1.21.12](https://www.npmjs.com/package/@digital-ai/dot-components) (07/14/2023)
45
60
 
@@ -63,6 +78,7 @@
63
78
  - S-91990: LinearProgress add aria-label [\#1537](https://github.com/digital-ai/dot-components/pull/1537) ([CWSites](https://github.com/CWSites))
64
79
  - S-91989: remove default aria-label, add link label to missing link [\#1536](https://github.com/digital-ai/dot-components/pull/1536) ([CWSites](https://github.com/CWSites))
65
80
  - S-91989: update link to have aria-label [\#1534](https://github.com/digital-ai/dot-components/pull/1534) ([CWSites](https://github.com/CWSites))
81
+ - `master` \> `develop` [\#1532](https://github.com/digital-ai/dot-components/pull/1532) ([angel-git](https://github.com/angel-git))
66
82
 
67
83
  ## [2.10.1](https://www.npmjs.com/package/@digital-ai/dot-components) (06/29/2023)
68
84
 
@@ -362,6 +378,10 @@
362
378
 
363
379
  [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/2.3.0...2.3.1)
364
380
 
381
+ **Features:**
382
+
383
+ - S-90007 Expose ListboxComponent [\#1358](https://github.com/digital-ai/dot-components/pull/1358) ([angel-git](https://github.com/angel-git))
384
+
365
385
  **Fixed bugs:**
366
386
 
367
387
  - S-89896: Remove 'identity.' from host when constructing platform url [\#1379](https://github.com/digital-ai/dot-components/pull/1379) ([jmcnally](https://github.com/jmcnally))
@@ -379,15 +399,12 @@
379
399
 
380
400
  - CI: bumps version to 2.2.1 \[skip ci\] \(\#1371\) [\#1372](https://github.com/digital-ai/dot-components/pull/1372) ([CWSites](https://github.com/CWSites))
381
401
  - resolving more warnings [\#1369](https://github.com/digital-ai/dot-components/pull/1369) ([CWSites](https://github.com/CWSites))
402
+ - Upload drip echo icon [\#1366](https://github.com/digital-ai/dot-components/pull/1366) ([pauldigitalai](https://github.com/pauldigitalai))
382
403
 
383
404
  ## [2.2.1](https://www.npmjs.com/package/@digital-ai/dot-components) (02/08/2023)
384
405
 
385
406
  [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/1.21.8...2.2.1)
386
407
 
387
- **Features:**
388
-
389
- - S-90007 Expose ListboxComponent [\#1358](https://github.com/digital-ai/dot-components/pull/1358) ([angel-git](https://github.com/angel-git))
390
-
391
408
  **Fixed bugs:**
392
409
 
393
410
  - S-90105 `DotAutoComplete`: fix `readOnly` input attribute [\#1357](https://github.com/digital-ai/dot-components/pull/1357) ([angel-git](https://github.com/angel-git))
@@ -399,7 +416,6 @@
399
416
  **Misc:**
400
417
 
401
418
  - GitHub Action Troubleshooting [\#1368](https://github.com/digital-ai/dot-components/pull/1368) ([CWSites](https://github.com/CWSites))
402
- - Upload drip echo icon [\#1366](https://github.com/digital-ai/dot-components/pull/1366) ([pauldigitalai](https://github.com/pauldigitalai))
403
419
  - S-90007 Add missing test [\#1362](https://github.com/digital-ai/dot-components/pull/1362) ([angel-git](https://github.com/angel-git))
404
420
  - icons-pin-update-Jan-27th [\#1354](https://github.com/digital-ai/dot-components/pull/1354) ([pauldigitalai](https://github.com/pauldigitalai))
405
421
 
@@ -541,6 +557,7 @@
541
557
  **Features:**
542
558
 
543
559
  - S-87871 Expose callback when sidebar collapses/expands [\#1274](https://github.com/digital-ai/dot-components/pull/1274) ([angel-git](https://github.com/angel-git))
560
+ - S-87316 Add focus state for Inline Edit [\#1255](https://github.com/digital-ai/dot-components/pull/1255) ([nikolinadapic](https://github.com/nikolinadapic))
544
561
 
545
562
  **Fixed bugs:**
546
563
 
@@ -569,10 +586,6 @@
569
586
 
570
587
  [Full Changelog](https://digital-ai.github.io/dot-components/?path=/story/introduction--page/digital-ai/dot-components/compare/2.0.0-rc.1...1.21.2)
571
588
 
572
- **Features:**
573
-
574
- - S-87316 Add focus state for Inline Edit [\#1255](https://github.com/digital-ai/dot-components/pull/1255) ([nikolinadapic](https://github.com/nikolinadapic))
575
-
576
589
  **Fixed bugs:**
577
590
 
578
591
  - D-22241: `DotFileListItem`: fix focus states and expose `onKeyPress` [\#1254](https://github.com/digital-ai/dot-components/pull/1254) ([dmiletic85](https://github.com/dmiletic85))
@@ -1013,6 +1026,7 @@
1013
1026
 
1014
1027
  **Features:**
1015
1028
 
1029
+ - S-80939: `Menu`: Add option to customize item's height [\#902](https://github.com/digital-ai/dot-components/pull/902) ([dmiletic85](https://github.com/dmiletic85))
1016
1030
  - S-77210: Component - Drawer [\#893](https://github.com/digital-ai/dot-components/pull/893) ([monapatel91](https://github.com/monapatel91))
1017
1031
 
1018
1032
  **Fixed bugs:**
@@ -1032,7 +1046,6 @@
1032
1046
 
1033
1047
  **Features:**
1034
1048
 
1035
- - S-80939: `Menu`: Add option to customize item's height [\#902](https://github.com/digital-ai/dot-components/pull/902) ([dmiletic85](https://github.com/dmiletic85))
1036
1049
  - S-80871: `Sidebar` Changes on back arrow [\#896](https://github.com/digital-ai/dot-components/pull/896) ([dmiletic85](https://github.com/dmiletic85))
1037
1050
  - S-80855: Display tooltip on last breadcrumb item \(on hover\) when it is clipped with ellipsis [\#883](https://github.com/digital-ai/dot-components/pull/883) ([dmiletic85](https://github.com/dmiletic85))
1038
1051
 
@@ -1083,7 +1096,6 @@
1083
1096
  **Fixed bugs:**
1084
1097
 
1085
1098
  - D-19294: Fix broken expand/collapse for uncontrolled accordion [\#866](https://github.com/digital-ai/dot-components/pull/866) ([selsemore](https://github.com/selsemore))
1086
- - \#841 Fix DotDynamicForm initial form state for controls with initialValue false [\#842](https://github.com/digital-ai/dot-components/pull/842) ([selsemore](https://github.com/selsemore))
1087
1099
 
1088
1100
  **Misc:**
1089
1101
 
@@ -1129,8 +1141,8 @@
1129
1141
 
1130
1142
  **Fixed bugs:**
1131
1143
 
1144
+ - \#841 Fix DotDynamicForm initial form state for controls with initialValue false [\#842](https://github.com/digital-ai/dot-components/pull/842) ([selsemore](https://github.com/selsemore))
1132
1145
  - D-19189: Extended sidenav drawer should collapse when another drawer option is clicked [\#830](https://github.com/digital-ai/dot-components/pull/830) ([dmiletic85](https://github.com/dmiletic85))
1133
- - D-19148: Input elements not displaying correctly when `border-box` is used in consumer components [\#812](https://github.com/digital-ai/dot-components/pull/812) ([dmiletic85](https://github.com/dmiletic85))
1134
1146
 
1135
1147
  **Misc:**
1136
1148
 
@@ -1166,6 +1178,7 @@
1166
1178
 
1167
1179
  - \#795 Address AlertBanner style issues [\#815](https://github.com/digital-ai/dot-components/pull/815) ([angel-git](https://github.com/angel-git))
1168
1180
  - D-19138: Remove margin-bottom from breadcrumbs [\#813](https://github.com/digital-ai/dot-components/pull/813) ([angel-git](https://github.com/angel-git))
1181
+ - D-19148: Input elements not displaying correctly when `border-box` is used in consumer components [\#812](https://github.com/digital-ai/dot-components/pull/812) ([dmiletic85](https://github.com/dmiletic85))
1169
1182
  - \[D-18631\]\[D-18632\]\[D-18802\]:Focus state of avatar button and sidebar list item and inaccurate count of nav item [\#804](https://github.com/digital-ai/dot-components/pull/804) ([monapatel91](https://github.com/monapatel91))
1170
1183
 
1171
1184
  **Misc:**
package/index.esm.js CHANGED
@@ -639,6 +639,10 @@ const avatarColors = {
639
639
  color: n700,
640
640
  backgroundColor: n100
641
641
  },
642
+ inherit: {
643
+ color: 'inherit',
644
+ backgroundColor: null
645
+ },
642
646
  green: {
643
647
  color: n0,
644
648
  backgroundColor: g500
@@ -672,8 +676,12 @@ const avatarColors = {
672
676
  backgroundColor: n200
673
677
  },
674
678
  transparent: {
675
- color: n0,
679
+ color: n700,
676
680
  backgroundColor: 'transparent'
681
+ },
682
+ white: {
683
+ color: n700,
684
+ backgroundColor: n0
677
685
  }
678
686
  };
679
687
  const darkTheme = createTheme({
@@ -1627,7 +1635,7 @@ const StyledAvatar = styled(Avatar).withConfig({
1627
1635
  }, theme.palette.layer.n0, theme.palette.layer.n900, ({
1628
1636
  color
1629
1637
  }) => {
1630
- return color === 'default' ? theme.palette.layer.n700 : color && theme.palette.avatarColors[color] ? theme.palette.avatarColors[color].color : theme.palette.avatarColors['default'].color;
1638
+ return color ? theme.palette.avatarColors[color].color : theme.palette.avatarColors['default'].color;
1631
1639
  }, theme.spacing(avatarSpacing.small), theme.spacing(avatarSpacing.small), theme.spacing(avatarSpacing.medium), theme.spacing(avatarSpacing.medium), theme.spacing(avatarSpacing.large), theme.spacing(avatarSpacing.large)));
1632
1640
 
1633
1641
  const AvatarContent = ({
@@ -1649,7 +1657,6 @@ const AvatarContent = ({
1649
1657
  }
1650
1658
  };
1651
1659
  const parsedText = () => {
1652
- if (!isString$1(text)) return;
1653
1660
  const textArray = text.split(' ');
1654
1661
  if (textArray.length > 1) {
1655
1662
  const firstInitial = textArray[0].slice(0, 1);
@@ -1699,6 +1706,7 @@ const DotAvatar = ({
1699
1706
  }) => {
1700
1707
  const rootClasses = useStylesWithRootClass(rootClassName$10, className);
1701
1708
  const getAvatarColor = () => {
1709
+ if ((style === null || style === void 0 ? void 0 : style.color) !== undefined) return 'inherit';
1702
1710
  if (color) return color;
1703
1711
  if (_text && _text !== alt) return getAvatarColorForInputText(_text);
1704
1712
  return 'default';
@@ -7952,7 +7960,8 @@ const DotStepper = ({
7952
7960
  }
7953
7961
  return isHorizontal ? jsx(DotAvatar, {
7954
7962
  alt: iconId,
7955
- iconId: stepIcon
7963
+ iconId: stepIcon,
7964
+ type: "icon"
7956
7965
  }, void 0) : jsx(DotIcon, {
7957
7966
  iconId: stepIcon
7958
7967
  }, void 0);
@@ -8130,10 +8139,12 @@ const DotTablePagination = ({
8130
8139
  className,
8131
8140
  count,
8132
8141
  'data-testid': dataTestId,
8142
+ labelRowsPerPage,
8133
8143
  onPageChange,
8134
8144
  onRowsPerPageChange,
8135
8145
  page: _page = 0,
8136
8146
  rowsPerPage: _rowsPerPage = 10,
8147
+ rowsPerPageOptions: _rowsPerPageOptions = [...ROWS_PER_PAGE_OPTIONS],
8137
8148
  typography: _typography = 'subtitle2'
8138
8149
  }) => {
8139
8150
  const rootClasses = useStylesWithRootClass(rootClassName$h, className);
@@ -8161,11 +8172,12 @@ const DotTablePagination = ({
8161
8172
  component: "div",
8162
8173
  count: count,
8163
8174
  "data-testid": dataTestId,
8175
+ labelRowsPerPage: labelRowsPerPage,
8164
8176
  onPageChange: handlePageChange,
8165
8177
  onRowsPerPageChange: handleChangeRowsPerPage,
8166
8178
  page: _page,
8167
8179
  rowsPerPage: _rowsPerPage,
8168
- rowsPerPageOptions: [...ROWS_PER_PAGE_OPTIONS]
8180
+ rowsPerPageOptions: _rowsPerPageOptions
8169
8181
  }, void 0)
8170
8182
  }), void 0)
8171
8183
  );
package/index.umd.js CHANGED
@@ -776,6 +776,10 @@
776
776
  color: n700,
777
777
  backgroundColor: n100
778
778
  },
779
+ inherit: {
780
+ color: 'inherit',
781
+ backgroundColor: null
782
+ },
779
783
  green: {
780
784
  color: n0,
781
785
  backgroundColor: g500
@@ -809,8 +813,12 @@
809
813
  backgroundColor: n200
810
814
  },
811
815
  transparent: {
812
- color: n0,
816
+ color: n700,
813
817
  backgroundColor: 'transparent'
818
+ },
819
+ white: {
820
+ color: n700,
821
+ backgroundColor: n0
814
822
  }
815
823
  };
816
824
  var darkTheme = styles.createTheme({
@@ -1841,7 +1849,7 @@
1841
1849
  return color && theme.palette.avatarColors[color] ? theme.palette.avatarColors[color].backgroundColor : theme.palette.avatarColors['default'].backgroundColor;
1842
1850
  }, theme.palette.layer.n0, theme.palette.layer.n900, function (_a) {
1843
1851
  var color = _a.color;
1844
- return color === 'default' ? theme.palette.layer.n700 : color && theme.palette.avatarColors[color] ? theme.palette.avatarColors[color].color : theme.palette.avatarColors['default'].color;
1852
+ return color ? theme.palette.avatarColors[color].color : theme.palette.avatarColors['default'].color;
1845
1853
  }, theme.spacing(avatarSpacing.small), theme.spacing(avatarSpacing.small), theme.spacing(avatarSpacing.medium), theme.spacing(avatarSpacing.medium), theme.spacing(avatarSpacing.large), theme.spacing(avatarSpacing.large));
1846
1854
  });
1847
1855
  var templateObject_1$15, templateObject_2$11;
@@ -1864,7 +1872,6 @@
1864
1872
  }
1865
1873
  };
1866
1874
  var parsedText = function parsedText() {
1867
- if (!isString$1(text)) return;
1868
1875
  var textArray = text.split(' ');
1869
1876
  if (textArray.length > 1) {
1870
1877
  var firstInitial = textArray[0].slice(0, 1);
@@ -1924,6 +1931,7 @@
1924
1931
  style = _a.style;
1925
1932
  var rootClasses = useStylesWithRootClass(rootClassName$10, className);
1926
1933
  var getAvatarColor = function getAvatarColor() {
1934
+ if ((style === null || style === void 0 ? void 0 : style.color) !== undefined) return 'inherit';
1927
1935
  if (color) return color;
1928
1936
  if (text && text !== alt) return getAvatarColorForInputText(text);
1929
1937
  return 'default';
@@ -8657,7 +8665,8 @@
8657
8665
  }
8658
8666
  return isHorizontal ? jsxRuntime.jsx(DotAvatar, {
8659
8667
  alt: iconId,
8660
- iconId: stepIcon
8668
+ iconId: stepIcon,
8669
+ type: "icon"
8661
8670
  }, void 0) : jsxRuntime.jsx(DotIcon, {
8662
8671
  iconId: stepIcon
8663
8672
  }, void 0);
@@ -8845,14 +8854,17 @@
8845
8854
  className = _a.className,
8846
8855
  count = _a.count,
8847
8856
  dataTestId = _a["data-testid"],
8857
+ labelRowsPerPage = _a.labelRowsPerPage,
8848
8858
  onPageChange = _a.onPageChange,
8849
8859
  onRowsPerPageChange = _a.onRowsPerPageChange,
8850
8860
  _b = _a.page,
8851
8861
  page = _b === void 0 ? 0 : _b,
8852
8862
  _c = _a.rowsPerPage,
8853
8863
  rowsPerPage = _c === void 0 ? 10 : _c,
8854
- _d = _a.typography,
8855
- typography = _d === void 0 ? 'subtitle2' : _d;
8864
+ _d = _a.rowsPerPageOptions,
8865
+ rowsPerPageOptions = _d === void 0 ? __spreadArray([], ROWS_PER_PAGE_OPTIONS) : _d,
8866
+ _e = _a.typography,
8867
+ typography = _e === void 0 ? 'subtitle2' : _e;
8856
8868
  var rootClasses = useStylesWithRootClass(rootClassName$h, className);
8857
8869
  var handlePageChange = function handlePageChange(event, newPage) {
8858
8870
  onPageChange && onPageChange(newPage);
@@ -8878,11 +8890,12 @@
8878
8890
  component: "div",
8879
8891
  count: count,
8880
8892
  "data-testid": dataTestId,
8893
+ labelRowsPerPage: labelRowsPerPage,
8881
8894
  onPageChange: handlePageChange,
8882
8895
  onRowsPerPageChange: handleChangeRowsPerPage,
8883
8896
  page: page,
8884
8897
  rowsPerPage: rowsPerPage,
8885
- rowsPerPageOptions: __spreadArray([], ROWS_PER_PAGE_OPTIONS)
8898
+ rowsPerPageOptions: rowsPerPageOptions
8886
8899
  }, void 0)
8887
8900
  }), void 0)
8888
8901
  );
@@ -3,7 +3,7 @@ import { CommonProps } from '../CommonProps';
3
3
  export declare type AvatarSize = 'small' | 'medium' | 'large';
4
4
  export declare type AvatarType = 'image' | 'text' | 'icon';
5
5
  export declare type AvatarVariant = 'circular' | 'square';
6
- export declare type AvatarColor = 'default' | 'green' | 'blue' | 'orange' | 'purple' | 'yellow' | 'red' | 'darkGrey' | 'lightGrey' | 'transparent';
6
+ export declare type AvatarColor = 'default' | 'inherit' | 'green' | 'blue' | 'orange' | 'purple' | 'yellow' | 'red' | 'darkGrey' | 'lightGrey' | 'transparent' | 'white';
7
7
  export interface AvatarProps extends CommonProps {
8
8
  /** Text displayed on hover */
9
9
  alt: string;
@@ -4,5 +4,6 @@ declare const _default: ComponentMeta<({ alt, ariaLabel, ariaRole, className, co
4
4
  export default _default;
5
5
  export declare const Default: any;
6
6
  export declare const AvatarButton: any;
7
+ export declare const WithCustomColor: any;
7
8
  export declare const WithNumber: any;
8
9
  export declare const WithTooltip: any;
@@ -1,4 +1,4 @@
1
- import { ChangeEvent } from 'react';
1
+ import { ChangeEvent, ReactNode } from 'react';
2
2
  import { CommonProps } from '../CommonProps';
3
3
  import { TypographyVariant } from '../typography/Typography';
4
4
  export declare const ROWS_PER_PAGE_OPTIONS: readonly [10, 25, 50, 100, 150, 200];
@@ -6,6 +6,8 @@ export declare type RowsPerPageOption = typeof ROWS_PER_PAGE_OPTIONS[number];
6
6
  export interface TablePaginationProps extends CommonProps {
7
7
  /** Total number of rows (-1 if unknown) */
8
8
  count: number;
9
+ /** Customize the rows per page label. Default is 'Rows per page:' */
10
+ labelRowsPerPage?: ReactNode;
9
11
  /** Callback fired when the page is changed */
10
12
  onPageChange: (newPage: number) => void;
11
13
  /** Callback fired when the number of rows per page is changed */
@@ -13,9 +15,11 @@ export interface TablePaginationProps extends CommonProps {
13
15
  /** The zero-based index of the current page */
14
16
  page?: number;
15
17
  /** The number of rows per page */
16
- rowsPerPage?: RowsPerPageOption;
18
+ rowsPerPage?: number;
19
+ /** Customizes the options of the rows per page select field. Default: [10, 25, 50, 100, 150, 200] */
20
+ rowsPerPageOptions?: number[];
17
21
  /** Typography variant which will be used for pagination text */
18
22
  typography: TypographyVariant;
19
23
  }
20
24
  /** This component wraps the TablePagination component from @material-ui. */
21
- export declare const DotTablePagination: ({ ariaLabel, className, count, "data-testid": dataTestId, onPageChange, onRowsPerPageChange, page, rowsPerPage, typography, }: TablePaginationProps) => JSX.Element;
25
+ export declare const DotTablePagination: ({ ariaLabel, className, count, "data-testid": dataTestId, labelRowsPerPage, onPageChange, onRowsPerPageChange, page, rowsPerPage, rowsPerPageOptions, typography, }: TablePaginationProps) => JSX.Element;
@@ -1,5 +1,7 @@
1
1
  import { ComponentMeta, Story } from '@storybook/react';
2
2
  import { TablePaginationProps } from './TablePagination';
3
- declare const _default: ComponentMeta<({ ariaLabel, className, count, "data-testid": dataTestId, onPageChange, onRowsPerPageChange, page, rowsPerPage, typography, }: TablePaginationProps) => JSX.Element>;
3
+ declare const _default: ComponentMeta<({ ariaLabel, className, count, "data-testid": dataTestId, labelRowsPerPage, onPageChange, onRowsPerPageChange, page, rowsPerPage, rowsPerPageOptions, typography, }: TablePaginationProps) => JSX.Element>;
4
4
  export default _default;
5
5
  export declare const Default: Story<TablePaginationProps>;
6
+ export declare const WithCustomRowsPerPageOptions: any;
7
+ export declare const WithCustomRowsPerPageLabel: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digital-ai/dot-components",
3
- "version": "2.11.2",
3
+ "version": "2.12.0",
4
4
  "private": false,
5
5
  "license": "SEE LICENSE IN <LICENSE.md>",
6
6
  "contributors": [