@synerise/ds-card-tabs 1.0.1 → 1.2.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/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.2.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@1.1.0...@synerise/ds-card-tabs@1.2.0) (2025-03-31)
7
+
8
+
9
+ ### Features
10
+
11
+ * **sortable:** new component ([181e09f](https://github.com/Synerise/synerise-design/commit/181e09fab834c9964995d1abb81349a564e2c956))
12
+
13
+
14
+
15
+
16
+
17
+ # [1.1.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@1.0.1...@synerise/ds-card-tabs@1.1.0) (2025-03-26)
18
+
19
+
20
+ ### Features
21
+
22
+ * **manageable-list:** content item large ([5ebda16](https://github.com/Synerise/synerise-design/commit/5ebda16718d79e5bbfcbcf002c45dccc213bf67d))
23
+
24
+
25
+
26
+
27
+
6
28
  ## [1.0.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@1.0.0...@synerise/ds-card-tabs@1.0.1) (2025-03-18)
7
29
 
8
30
  **Note:** Version bump only for package @synerise/ds-card-tabs
@@ -1,6 +1,4 @@
1
1
  import React from 'react';
2
2
  import { CardTabProps } from './CardTab.types';
3
- declare const _default: React.FC<import("react-intl").WithIntlProps<CardTabProps>> & {
4
- WrappedComponent: React.ComponentType<CardTabProps>;
5
- };
6
- export default _default;
3
+ declare const CardTab: (props: CardTabProps) => React.JSX.Element;
4
+ export default CardTab;
@@ -2,15 +2,14 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2
2
  import React, { useState, useMemo, useCallback } from 'react';
3
3
  import Icon from '@synerise/ds-icon';
4
4
  import InlineEdit from '@synerise/ds-inline-edit/dist/InlineEdit';
5
- import { injectIntl } from 'react-intl';
5
+ import { useIntl } from 'react-intl';
6
6
  import Tooltip from '@synerise/ds-tooltip';
7
7
  import * as S from './CardTab.styles';
8
8
  import CardTabPrefix from './CardTabPrefix/CardTabPrefix';
9
9
  import CardTabActions from './CardTabActions/CardTabActions';
10
10
  import CardTabDropdown from './CardTabDropdown/CardTabDropdown';
11
11
  var CardTab = function CardTab(props) {
12
- var intl = props.intl,
13
- id = props.id,
12
+ var id = props.id,
14
13
  name = props.name,
15
14
  tag = props.tag,
16
15
  prefix = props.prefix,
@@ -33,7 +32,9 @@ var CardTab = function CardTab(props) {
33
32
  color = _props$color === void 0 ? 'yellow' : _props$color,
34
33
  colorDot = props.colorDot,
35
34
  itemData = props.itemData,
35
+ dragHandleProps = props.dragHandleProps,
36
36
  actionsAsDropdown = props.actionsAsDropdown;
37
+ var intl = useIntl();
37
38
  var _useState = useState(false),
38
39
  edited = _useState[0],
39
40
  setEdited = _useState[1];
@@ -162,7 +163,7 @@ var CardTab = function CardTab(props) {
162
163
  active: Boolean(active),
163
164
  invalid: Boolean(invalid || invalidName),
164
165
  disabled: !active && Boolean(disabled),
165
- draggable: draggable,
166
+ isDraggable: draggable,
166
167
  color: color,
167
168
  onClick: handleSelect,
168
169
  greyBackground: !!greyBackground,
@@ -170,6 +171,7 @@ var CardTab = function CardTab(props) {
170
171
  "data-testid": "card-tab-container",
171
172
  itemData: itemData
172
173
  }, !edited && /*#__PURE__*/React.createElement(CardTabPrefix, {
174
+ dragHandleProps: dragHandleProps,
173
175
  colorDot: colorDot,
174
176
  draggable: draggable,
175
177
  prefixIcon: prefixIcon,
@@ -198,4 +200,4 @@ var CardTab = function CardTab(props) {
198
200
  "data-testid": "card-tab-name"
199
201
  }, name))), cardSuffix);
200
202
  };
201
- export default injectIntl(CardTab);
203
+ export default CardTab;
@@ -1,13 +1,3 @@
1
- type CardTabContainerProps = {
2
- active: boolean;
3
- invalid: boolean;
4
- greyBackground: boolean;
5
- color: string;
6
- disabled: boolean;
7
- edited: boolean;
8
- draggable?: boolean;
9
- itemData?: unknown;
10
- };
11
1
  export declare const CardTabSuffix: import("styled-components").StyledComponent<"div", any, {}, never>;
12
2
  export declare const CardTabName: import("styled-components").StyledComponent<"span", any, {}, never>;
13
3
  export declare const CardSuffixWrapper: import("styled-components").StyledComponent<"span", any, {}, never>;
@@ -18,5 +8,13 @@ export declare const CardDot: import("styled-components").StyledComponent<"div",
18
8
  export declare const CardTabPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
19
9
  export declare const CardDragPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
20
10
  export declare const CardIconPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
21
- export declare const CardTabContainer: import("styled-components").StyledComponent<"div", any, CardTabContainerProps, never>;
22
- export {};
11
+ export declare const CardTabContainer: import("styled-components").StyledComponent<"div", any, {
12
+ active: boolean;
13
+ invalid: boolean;
14
+ greyBackground: boolean;
15
+ color: string;
16
+ disabled: boolean;
17
+ edited: boolean;
18
+ isDraggable?: boolean | undefined;
19
+ itemData?: unknown;
20
+ }, never>;
@@ -182,7 +182,7 @@ export var CardTabContainer = styled.div.withConfig({
182
182
  if (active) return theme.palette["" + color];
183
183
  return theme.palette.white;
184
184
  }, function (props) {
185
- return props.draggable ? 'none' : 'flex';
185
+ return props.isDraggable ? 'none' : 'flex';
186
186
  }, CardTabPrefix, function (_ref28) {
187
187
  var theme = _ref28.theme,
188
188
  active = _ref28.active;
@@ -207,9 +207,9 @@ export var CardTabContainer = styled.div.withConfig({
207
207
  if (active) return theme.palette.white;
208
208
  return theme.palette['grey-600'];
209
209
  }, CardDotPrefix, function (props) {
210
- return props.draggable ? 'none' : 'flex';
210
+ return props.isDraggable ? 'none' : 'flex';
211
211
  }, CardIconPrefix, function (props) {
212
- return props.draggable ? 'none' : 'flex';
212
+ return props.isDraggable ? 'none' : 'flex';
213
213
  }, function (_ref33) {
214
214
  var theme = _ref33.theme,
215
215
  active = _ref33.active;
@@ -1,6 +1,7 @@
1
1
  import type { ReactNode, MouseEvent, KeyboardEvent } from 'react';
2
2
  import type { IntlShape } from 'react-intl';
3
3
  import type { DefaultColor } from '@synerise/ds-core';
4
+ import type { DragHandlePropType } from '@synerise/ds-sortable';
4
5
  export declare enum prefixType {
5
6
  TAG = 0,
6
7
  ICON = 1,
@@ -18,12 +19,16 @@ export type CardTabTexts = {
18
19
  removeMenuItem?: ReactNode;
19
20
  duplicateMenuItem?: ReactNode;
20
21
  };
21
- export type CardTabProps = {
22
- intl: IntlShape;
23
- id: number;
22
+ export type CardTabProps<IdType extends string | number = number> = {
23
+ /**
24
+ * @deprecated
25
+ */
26
+ intl?: IntlShape;
27
+ id: IdType;
24
28
  name: string;
25
29
  tag: string;
26
30
  prefix: prefixType;
31
+ dragHandleProps?: DragHandlePropType;
27
32
  colorDot?: ReactNode;
28
33
  color?: Color | DefaultColor | string;
29
34
  active?: boolean;
@@ -34,11 +39,11 @@ export type CardTabProps = {
34
39
  invalid?: boolean;
35
40
  invalidName?: boolean;
36
41
  greyBackground?: boolean;
37
- onSelectTab?: (id: number) => void;
38
- onChangeName?: (id: number, name: string) => void;
39
- onDuplicateTab?: (id: number) => void;
40
- onRemoveTab?: (id: number) => void;
41
- onPreviewTab?: (id: number) => void;
42
+ onSelectTab?: (id: IdType) => void;
43
+ onChangeName?: (id: IdType, name: string) => void;
44
+ onDuplicateTab?: (id: IdType) => void;
45
+ onRemoveTab?: (id: IdType) => void;
46
+ onPreviewTab?: (id: IdType) => void;
42
47
  texts?: CardTabTexts;
43
48
  itemData?: unknown;
44
49
  actionsAsDropdown?: boolean;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { Props } from './CardTabPrefix.types';
3
- declare const CardTabPrefix: ({ prefix, draggable, tag, prefixIcon, colorDot }: Props) => React.JSX.Element;
3
+ declare const CardTabPrefix: ({ prefix, draggable, tag, prefixIcon, colorDot, dragHandleProps }: Props) => React.JSX.Element;
4
4
  export default CardTabPrefix;
@@ -1,3 +1,4 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
1
2
  import React from 'react';
2
3
  import Icon, { DragHandleM } from '@synerise/ds-icon';
3
4
  import * as S from '../CardTab.styles';
@@ -7,7 +8,8 @@ var CardTabPrefix = function CardTabPrefix(_ref) {
7
8
  draggable = _ref.draggable,
8
9
  tag = _ref.tag,
9
10
  prefixIcon = _ref.prefixIcon,
10
- colorDot = _ref.colorDot;
11
+ colorDot = _ref.colorDot,
12
+ dragHandleProps = _ref.dragHandleProps;
11
13
  var className = prefix === prefixType.HANDLE ? 'persistent' : '';
12
14
  return /*#__PURE__*/React.createElement(S.CardTabPrefix, {
13
15
  "data-testid": "card-tab-prefix"
@@ -18,9 +20,9 @@ var CardTabPrefix = function CardTabPrefix(_ref) {
18
20
  component: prefixIcon
19
21
  })), prefix === prefixType.DOT && colorDot && /*#__PURE__*/React.createElement(S.CardDotPrefix, {
20
22
  "data-testid": "card-dot-tag"
21
- }, colorDot), (prefix === prefixType.HANDLE || draggable) && /*#__PURE__*/React.createElement(S.CardDragPrefix, {
23
+ }, colorDot), (prefix === prefixType.HANDLE || draggable) && /*#__PURE__*/React.createElement(S.CardDragPrefix, _extends({
22
24
  className: className
23
- }, /*#__PURE__*/React.createElement(Icon, {
25
+ }, dragHandleProps), /*#__PURE__*/React.createElement(Icon, {
24
26
  className: "ds-card-tabs__handle-icon sortable-drag",
25
27
  component: /*#__PURE__*/React.createElement(DragHandleM, null)
26
28
  }), ' '));
@@ -1,9 +1,10 @@
1
1
  import { ReactNode } from 'react';
2
- import { prefixType } from '../CardTab.types';
2
+ import { prefixType, CardTabProps } from '../CardTab.types';
3
3
  export interface Props {
4
4
  prefix: prefixType;
5
5
  draggable?: boolean;
6
6
  tag?: string;
7
7
  prefixIcon?: ReactNode;
8
8
  colorDot?: ReactNode;
9
+ dragHandleProps?: CardTabProps['dragHandleProps'];
9
10
  }
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { CardTabsProps } from './CardTabs.types';
3
- declare const CardTabs: ({ className, onChangeOrder, onAddTab, maxTabsCount, children, addTabLabel }: CardTabsProps) => React.JSX.Element;
3
+ declare const CardTabs: ({ className, onChangeOrder, onAddTab, maxTabsCount, children, addTabLabel, ...htmlAttributes }: CardTabsProps) => React.JSX.Element;
4
4
  export default CardTabs;
package/dist/CardTabs.js CHANGED
@@ -1,22 +1,14 @@
1
+ var _excluded = ["className", "onChangeOrder", "onAddTab", "maxTabsCount", "children", "addTabLabel"];
1
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
2
4
  import React, { Children, cloneElement, isValidElement } from 'react';
3
- import { ReactSortable } from 'react-sortablejs';
5
+ // import { ReactSortable, MoveEvent } from 'react-sortablejs';
6
+
4
7
  import Button from '@synerise/ds-button';
5
8
  import { defaultColorsOrder } from '@synerise/ds-core';
9
+ import Sortable from '@synerise/ds-sortable';
6
10
  import * as S from './CardTabs.styles';
7
- var SORTABLE_CONFIG = {
8
- ghostClass: 'sortable-card-ghost-element',
9
- className: 'ds-card-tags-sortable',
10
- animation: 150,
11
- filter: '.ds-card-tabs__suffix-nodrag, .ds-card-tabs-nodrag',
12
- preventOnFilter: false,
13
- onMove: function onMove(ev1) {
14
- if (ev1.related && ev1.related.classList.contains('ds-card-tabs-nodrag')) {
15
- return -1;
16
- }
17
- return true;
18
- }
19
- };
11
+ import CardTab from './CardTab/CardTab';
20
12
  var CardTabs = function CardTabs(_ref) {
21
13
  var className = _ref.className,
22
14
  onChangeOrder = _ref.onChangeOrder,
@@ -24,21 +16,25 @@ var CardTabs = function CardTabs(_ref) {
24
16
  maxTabsCount = _ref.maxTabsCount,
25
17
  _ref$children = _ref.children,
26
18
  children = _ref$children === void 0 ? [] : _ref$children,
27
- addTabLabel = _ref.addTabLabel;
19
+ addTabLabel = _ref.addTabLabel,
20
+ htmlAttributes = _objectWithoutPropertiesLoose(_ref, _excluded);
28
21
  var handleChangeOrder = function handleChangeOrder(newOrder) {
29
22
  onChangeOrder && onChangeOrder(newOrder);
30
23
  };
31
- var addTab = onAddTab ? /*#__PURE__*/React.createElement(S.CardTabsAddButton, {
24
+ var addTab = onAddTab && /*#__PURE__*/React.createElement(S.CardTabsAddButton, {
32
25
  className: "ds-card-tabs-nodrag",
33
26
  "data-testid": "card-tabs-add-button"
34
27
  }, /*#__PURE__*/React.createElement(Button.Creator, {
35
28
  disabled: !!maxTabsCount && Children.toArray(children).length >= maxTabsCount,
36
29
  label: addTabLabel != null ? addTabLabel : '',
37
30
  onClick: onAddTab
38
- })) : /*#__PURE__*/React.createElement(React.Fragment, null);
31
+ }));
39
32
  var childrenCount = Children.count(children);
40
- var childrenData = Children.map(children, function (child) {
41
- return child.props;
33
+ var childrenData = Children.map(children, function (child, i) {
34
+ return _extends({}, child.props, {
35
+ color: defaultColorsOrder[i % defaultColorsOrder.length],
36
+ draggable: childrenCount > 1 && (Boolean(onChangeOrder) || child.props.draggable)
37
+ });
42
38
  });
43
39
  var renderChildren = function renderChildren() {
44
40
  return /*#__PURE__*/React.createElement(React.Fragment, null, Children.map(children, function (child, i) {
@@ -50,17 +46,14 @@ var CardTabs = function CardTabs(_ref) {
50
46
  }));
51
47
  }));
52
48
  };
53
- return /*#__PURE__*/React.createElement(S.CardTabsContainer, {
54
- className: "ds-card-tabs " + (className || ''),
49
+ return /*#__PURE__*/React.createElement(S.CardTabsContainer, _extends({
55
50
  "data-testid": "card-tabs-container"
56
- }, onChangeOrder && childrenCount > 1 ? /*#__PURE__*/React.createElement("div", {
57
- "data-testid": "card-tabs-sortable"
58
- }, /*#__PURE__*/React.createElement(ReactSortable, _extends({}, SORTABLE_CONFIG, {
59
- list: childrenData,
60
- setList: handleChangeOrder
61
- }), renderChildren(), addTab)) : /*#__PURE__*/React.createElement("div", {
62
- className: "ds-card-tags-sortable",
63
- "data-testid": "card-tabs-static"
64
- }, renderChildren(), addTab));
51
+ }, htmlAttributes, {
52
+ className: "ds-card-tabs " + (className || '')
53
+ }), onChangeOrder && childrenCount > 1 ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Sortable, {
54
+ items: childrenData,
55
+ ItemComponent: CardTab,
56
+ onOrderChange: handleChangeOrder
57
+ }), addTab) : /*#__PURE__*/React.createElement(React.Fragment, null, renderChildren(), addTab));
65
58
  };
66
59
  export default CardTabs;
@@ -3,11 +3,7 @@ import { ButtonStyles } from '@synerise/ds-button';
3
3
  export var CardTabsContainer = styled.div.withConfig({
4
4
  displayName: "CardTabsstyles__CardTabsContainer",
5
5
  componentId: "sc-1uu9dja-0"
6
- })(["display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;min-width:588px;.ds-card-tags-sortable{gap:16px 12px;margin-bottom:16px;display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;flex-wrap:wrap;}.sortable-chosen{cursor:grabbing;box-shadow:0 16px 32px 0 rgba(35,41,54,0.1);opacity:1;}.sortable-drag{opacity:1 !important;}.sortable-card-ghost-element{border:dashed 1px ", ";background-color:", ";opacity:1;cursor:grabbing;*{visibility:hidden;}}@media (max-width:588px){.ds-button-creator{width:48px !important;", "{display:none;}}}"], function (props) {
7
- return props.theme.palette['blue-600'];
8
- }, function (props) {
9
- return props.theme.palette['blue-050'];
10
- }, ButtonStyles.Creator.CreatorLabel);
6
+ })(["display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;min-width:588px;gap:16px 12px;flex-wrap:wrap;padding-bottom:16px;@media (max-width:588px){.ds-button-creator{width:48px !important;", "{display:none;}}}"], ButtonStyles.Creator.CreatorLabel);
11
7
  export var CardTabsAddButton = styled.span.withConfig({
12
8
  displayName: "CardTabsstyles__CardTabsAddButton",
13
9
  componentId: "sc-1uu9dja-1"
@@ -1,11 +1,11 @@
1
+ import { WithHTMLAttributes } from '@synerise/ds-utils';
1
2
  import { ReactElement } from 'react';
2
3
  import type { CardTabProps } from './CardTab/CardTab.types';
3
- export type CardTabsProps = {
4
- className?: string;
4
+ export type CardTabsProps = WithHTMLAttributes<HTMLDivElement, {
5
5
  onChangeOrder?: (newOrder: CardTabsItem[]) => void;
6
6
  onAddTab?: () => void;
7
7
  addTabLabel?: string;
8
8
  maxTabsCount?: number;
9
9
  children?: Array<ReactElement<CardTabProps>>;
10
- };
10
+ }>;
11
11
  export type CardTabsItem = Partial<CardTabProps>;
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ import * as MainCardTabsStyles from './CardTabs.styles';
3
3
  export { default } from './CardTabs';
4
4
  export { default as CardTab } from './CardTab/CardTab';
5
5
  export { prefixType } from './CardTab/CardTab.types';
6
- export { COLORS_TABS } from './CardTab/ColorsTabs';
7
6
  export declare const CardTabsStyles: {
8
7
  CardTabs: typeof MainCardTabsStyles;
9
8
  CardTab: typeof CardTabStyles;
package/dist/index.js CHANGED
@@ -3,7 +3,6 @@ import * as MainCardTabsStyles from './CardTabs.styles';
3
3
  export { default } from './CardTabs';
4
4
  export { default as CardTab } from './CardTab/CardTab';
5
5
  export { prefixType } from './CardTab/CardTab.types';
6
- export { COLORS_TABS } from './CardTab/ColorsTabs';
7
6
  export var CardTabsStyles = {
8
7
  CardTabs: MainCardTabsStyles,
9
8
  CardTab: CardTabStyles
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-card-tabs",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "CardTabs UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -34,17 +34,16 @@
34
34
  ],
35
35
  "types": "dist/index.d.ts",
36
36
  "dependencies": {
37
- "@synerise/ds-button": "^1.1.0",
38
- "@synerise/ds-cruds": "^1.0.1",
39
- "@synerise/ds-dropdown": "^1.0.1",
40
- "@synerise/ds-icon": "^1.0.1",
41
- "@synerise/ds-inline-edit": "^1.0.1",
42
- "@synerise/ds-menu": "^1.0.1",
43
- "@synerise/ds-tooltip": "^1.1.0",
44
- "@synerise/ds-typography": "^1.0.1",
45
- "@synerise/ds-utils": "^1.0.1",
46
- "react-sortablejs": "^6.0.0",
47
- "sortablejs": "1.15.1"
37
+ "@synerise/ds-button": "^1.1.2",
38
+ "@synerise/ds-cruds": "^1.0.3",
39
+ "@synerise/ds-dropdown": "^1.0.3",
40
+ "@synerise/ds-icon": "^1.2.0",
41
+ "@synerise/ds-inline-edit": "^1.0.3",
42
+ "@synerise/ds-menu": "^1.0.3",
43
+ "@synerise/ds-sortable": "^1.1.0",
44
+ "@synerise/ds-tooltip": "^1.1.2",
45
+ "@synerise/ds-typography": "^1.0.3",
46
+ "@synerise/ds-utils": "^1.0.1"
48
47
  },
49
48
  "peerDependencies": {
50
49
  "@synerise/ds-core": "*",
@@ -53,5 +52,5 @@
53
52
  "react-intl": ">=3.12.0 <= 6.8",
54
53
  "styled-components": "^5.3.3"
55
54
  },
56
- "gitHead": "218110f61f4371bc04d793b2b976b71d14e99e76"
55
+ "gitHead": "5438445467b16dbc0c2ca97d969ae0e09b74131b"
57
56
  }
@@ -1 +0,0 @@
1
- export declare const COLORS_TABS: string[];
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import/prefer-default-export
2
- export var COLORS_TABS = ['blue-600', 'green-600', 'mars-600', 'purple-600', 'cyan-600', 'yellow-600', 'violet-600', 'blue-700', 'green-700', 'mars-700', 'purple-700', 'cyan-700', 'yellow-700', 'violet-700', 'blue-500', 'green-500', 'mars-500', 'purple-500', 'cyan-500', 'yellow-500', 'violet-500'];