@synerise/ds-card-tabs 0.13.52 → 0.13.54

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,29 @@
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
+ ## [0.13.54](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@0.13.53...@synerise/ds-card-tabs@0.13.54) (2023-06-14)
7
+
8
+ **Note:** Version bump only for package @synerise/ds-card-tabs
9
+
10
+
11
+
12
+
13
+
14
+ ## [0.13.53](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@0.13.52...@synerise/ds-card-tabs@0.13.53) (2023-06-12)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **card-tabs:** adds prop to render cruds as dropdown ([a721030](https://github.com/Synerise/synerise-design/commit/a721030c508a490f99ad84595d3242870bac2b95))
20
+ * **card-tabs:** applies code review feedback ([044862e](https://github.com/Synerise/synerise-design/commit/044862e18c467bb70332f2f875ec97e484952095))
21
+ * **card-tabs:** makes dbl click to edit name conditional ([63307fa](https://github.com/Synerise/synerise-design/commit/63307fa40bd0831fe2c63c61c1e40ebc4bc28e7c))
22
+ * **card-tabs:** moved fallback texts to defaultMessage in intl ([d739d7a](https://github.com/Synerise/synerise-design/commit/d739d7ac158ec297fd5a1b7908fbe5981fbf63a2))
23
+ * **card-tabs:** removed unnecessary inline css ([14cbd5c](https://github.com/Synerise/synerise-design/commit/14cbd5cb95c61ba3a594248892ba2598d9793ad8))
24
+
25
+
26
+
27
+
28
+
6
29
  ## [0.13.52](https://github.com/Synerise/synerise-design/compare/@synerise/ds-card-tabs@0.13.51...@synerise/ds-card-tabs@0.13.52) (2023-05-26)
7
30
 
8
31
  **Note:** Version bump only for package @synerise/ds-card-tabs
package/README.md CHANGED
@@ -102,6 +102,8 @@ import CardTabs from '@synerise/ds-card-tabs'
102
102
  | color | Color of CardTab | `red`/ `green`/ `grey`/ `yellow`/ `blue`/ `pink`/ `mars`/ `orange`/ `fern`/ `cyan`/ `purple`/ `violet` | `yellow` |
103
103
  | colorDot | single color dot | React.ReactNode | - |
104
104
  | itemData | Additional item data | any | - |
105
+ | renderSuffix | render custom suffix instead of cruds, dropdown menu or icon | (props: CardTabSuffixProps) => ReactNode | - |
106
+ | actionsAsDropdown | render crud actions in dropdown instead of icons | boolean | `false` |
105
107
 
106
108
  #### CardTabTexts
107
109
 
@@ -110,3 +112,6 @@ import CardTabs from '@synerise/ds-card-tabs'
110
112
  | changeNameTooltip | Rename tooltip | string / React.ReactNode | 'Rename' |
111
113
  | duplicateTooltip | Duplicate tooltip | string / React.ReactNode | 'Duplicate' |
112
114
  | removeTooltip | Remove tooltip | string / React.ReactNode | 'Remove' |
115
+ | changeNameMenuItem | Rename menu label | string / React.ReactNode | 'Rename' |
116
+ | duplicateMenuItem | Duplicate menu label | string / React.ReactNode | 'Duplicate' |
117
+ | removeMenuItem | Remove menu label | string / React.ReactNode | 'Remove' |
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { CardTabProps } from './CardTab.types';
3
- declare const _default: React.ForwardRefExoticComponent<Pick<CardTabProps, "name" | "color" | "id" | "draggable" | "prefix" | "disabled" | "active" | "invalid" | "greyBackground" | "itemData" | "tag" | "onChangeName" | "onDuplicateTab" | "onRemoveTab" | "onSelectTab" | "colorDot" | "prefixIcon" | "suffixIcon" | "invalidName" | "texts" | "renderSuffix"> & {
3
+ declare const _default: React.ForwardRefExoticComponent<Pick<CardTabProps, "name" | "color" | "id" | "draggable" | "prefix" | "disabled" | "active" | "invalid" | "greyBackground" | "itemData" | "onChangeName" | "onDuplicateTab" | "onRemoveTab" | "onSelectTab" | "tag" | "colorDot" | "prefixIcon" | "suffixIcon" | "invalidName" | "texts" | "actionsAsDropdown" | "renderSuffix"> & {
4
4
  forwardedRef?: ((instance: any) => void) | React.RefObject<any> | null | undefined;
5
5
  } & React.RefAttributes<any>> & {
6
6
  WrappedComponent: React.ComponentType<CardTabProps>;
@@ -13,6 +13,7 @@ import Tooltip from '@synerise/ds-tooltip';
13
13
  import * as S from './CardTab.styles';
14
14
  import CardTabPrefix from './CardTabPrefix/CardTabPrefix';
15
15
  import CardTabActions from './CardTabActions/CardTabActions';
16
+ import CardTabDropdown from './CardTabDropdown/CardTabDropdown';
16
17
 
17
18
  var CardTab = function CardTab(props) {
18
19
  var intl = props.intl,
@@ -37,7 +38,8 @@ var CardTab = function CardTab(props) {
37
38
  _props$color = props.color,
38
39
  color = _props$color === void 0 ? 'yellow' : _props$color,
39
40
  colorDot = props.colorDot,
40
- itemData = props.itemData;
41
+ itemData = props.itemData,
42
+ actionsAsDropdown = props.actionsAsDropdown;
41
43
 
42
44
  var _useState = useState(false),
43
45
  edited = _useState[0],
@@ -54,29 +56,41 @@ var CardTab = function CardTab(props) {
54
56
  var getTexts = useMemo(function () {
55
57
  return _objectSpread({
56
58
  changeNameTooltip: intl.formatMessage({
57
- id: 'DS.CARD-TAB.RENAME'
59
+ id: 'DS.CARD-TAB.RENAME',
60
+ defaultMessage: 'Rename'
58
61
  }),
59
62
  removeTooltip: intl.formatMessage({
60
- id: 'DS.CARD-TAB.REMOVE'
63
+ id: 'DS.CARD-TAB.REMOVE',
64
+ defaultMessage: 'Delete'
61
65
  }),
62
66
  duplicateTooltip: intl.formatMessage({
63
- id: 'DS.CARD-TAB.DUPLICATE'
67
+ id: 'DS.CARD-TAB.DUPLICATE',
68
+ defaultMessage: 'Duplicate'
64
69
  }),
65
70
  changeNameMenuItem: intl.formatMessage({
66
- id: 'DS.CARD-TAB.RENAME'
71
+ id: 'DS.CARD-TAB.RENAME',
72
+ defaultMessage: 'Rename'
67
73
  }),
68
74
  removeMenuItem: intl.formatMessage({
69
- id: 'DS.CARD-TAB.REMOVE'
75
+ id: 'DS.CARD-TAB.REMOVE',
76
+ defaultMessage: 'Delete'
70
77
  }),
71
78
  duplicateMenuItem: intl.formatMessage({
72
- id: 'DS.CARD-TAB.DUPLICATE'
79
+ id: 'DS.CARD-TAB.DUPLICATE',
80
+ defaultMessage: 'Duplicate'
73
81
  })
74
82
  }, texts);
75
83
  }, [texts, intl]);
76
- var handleEditName = useCallback(function (event) {
77
- !!event && event.stopPropagation();
78
- setEdited(true);
79
- }, [setEdited]);
84
+ var handleEditName = useMemo(function () {
85
+ if (onChangeName === undefined) {
86
+ return undefined;
87
+ }
88
+
89
+ return function (event) {
90
+ !!event && event.stopPropagation();
91
+ setEdited(true);
92
+ };
93
+ }, [onChangeName, setEdited]);
80
94
  var handleChangeName = useMemo(function () {
81
95
  if (onChangeName === undefined) {
82
96
  return undefined;
@@ -121,9 +135,6 @@ var CardTab = function CardTab(props) {
121
135
  var showCardActions = useCallback(function () {
122
136
  return (!!onChangeName || !!onDuplicateTab || !!onRemoveTab) && !suffixIcon && !renderSuffix;
123
137
  }, [onChangeName, onDuplicateTab, onRemoveTab, suffixIcon, renderSuffix]);
124
- var handleSuffixClick = useCallback(function (event) {
125
- !!event && event.stopPropagation();
126
- }, []);
127
138
 
128
139
  var suffixProps = _objectSpread({}, props, {
129
140
  handleRemove: handleRemove,
@@ -132,7 +143,40 @@ var CardTab = function CardTab(props) {
132
143
  texts: getTexts
133
144
  });
134
145
 
135
- var renderedSuffix = !!renderSuffix && renderSuffix(suffixProps);
146
+ var cardSuffix = useMemo(function () {
147
+ var showActionsDropdownMenu = actionsAsDropdown && (onChangeName || handleDuplicate || handleRemove);
148
+
149
+ if (showActionsDropdownMenu) {
150
+ return /*#__PURE__*/React.createElement(CardTabDropdown, {
151
+ editNameHandler: onChangeName ? handleEditName : undefined,
152
+ duplicateHandler: handleDuplicate,
153
+ removeHandler: handleRemove,
154
+ texts: getTexts
155
+ });
156
+ }
157
+
158
+ if (renderSuffix) {
159
+ return renderSuffix(suffixProps);
160
+ }
161
+
162
+ if (suffixIcon) {
163
+ return /*#__PURE__*/React.createElement(S.CardSuffixWrapper, null, /*#__PURE__*/React.createElement(Icon, {
164
+ className: "ds-card-tabs__suffix-icon",
165
+ component: suffixIcon
166
+ }));
167
+ }
168
+
169
+ if (showCardActions()) {
170
+ return /*#__PURE__*/React.createElement(CardTabActions, {
171
+ onChangeName: onChangeName ? handleEditName : undefined,
172
+ onDuplicateTab: handleDuplicate,
173
+ onRemoveTab: handleRemove,
174
+ texts: getTexts
175
+ });
176
+ }
177
+
178
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
179
+ }, [renderSuffix, suffixProps, actionsAsDropdown, suffixIcon, showCardActions, onChangeName, handleEditName, handleDuplicate, handleRemove, getTexts]);
136
180
  return /*#__PURE__*/React.createElement(S.CardTabContainer, {
137
181
  className: "" + (pressed ? 'pressed' : ''),
138
182
  edited: edited,
@@ -185,20 +229,7 @@ var CardTab = function CardTab(props) {
185
229
  title: name
186
230
  }, /*#__PURE__*/React.createElement(S.CardTabName, {
187
231
  "data-testid": "card-tab-name"
188
- }, name))), suffixIcon && /*#__PURE__*/React.createElement(S.CardSuffixWrapper, null, /*#__PURE__*/React.createElement(Icon, {
189
- className: "ds-card-tabs__suffix-icon",
190
- component: suffixIcon
191
- })), !suffixIcon && !!renderSuffix && /*#__PURE__*/React.createElement(S.CardSuffixWrapper, {
192
- className: "ds-card-tabs__suffix-nodrag",
193
- onClick: handleSuffixClick,
194
- onPointerDown: handleSuffixClick,
195
- "data-testid": "card-tab-suffix"
196
- }, renderedSuffix), showCardActions() && /*#__PURE__*/React.createElement(CardTabActions, {
197
- onChangeName: onChangeName ? handleEditName : undefined,
198
- onDuplicateTab: handleDuplicate,
199
- onRemoveTab: handleRemove,
200
- texts: getTexts
201
- }));
232
+ }, name))), cardSuffix);
202
233
  };
203
234
 
204
235
  export default injectIntl(CardTab);
@@ -22,7 +22,7 @@ export interface CardTabProps {
22
22
  name: string;
23
23
  tag: string;
24
24
  prefix: prefixType;
25
- colorDot: ReactNode;
25
+ colorDot?: ReactNode;
26
26
  color?: Color | DefaultColor | string;
27
27
  active?: boolean;
28
28
  draggable?: boolean;
@@ -38,6 +38,7 @@ export interface CardTabProps {
38
38
  onRemoveTab?: (id: number) => void;
39
39
  texts?: CardTabTexts;
40
40
  itemData?: unknown;
41
+ actionsAsDropdown?: boolean;
41
42
  renderSuffix?: (props: CardTabSuffixProps) => ReactNode;
42
43
  }
43
44
  export declare type CardTabSuffixProps = Omit<CardTabProps & {
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+ import { CardTabDropdownProps } from './CardTabDropdown.types';
3
+ declare const CardTabDropdown: FC<CardTabDropdownProps>;
4
+ export default CardTabDropdown;
@@ -0,0 +1,89 @@
1
+ import * as React from 'react';
2
+ import { useState, useRef } from 'react';
3
+ import Dropdown from '@synerise/ds-dropdown';
4
+ import { useOnClickOutside } from '@synerise/ds-utils';
5
+ import Icon, { OptionVerticalM, EditM, DuplicateM, TrashM } from '@synerise/ds-icon';
6
+ import Menu from '@synerise/ds-menu';
7
+ import MenuItem from '@synerise/ds-menu/dist/Elements/Item/MenuItem';
8
+ import theme from '@synerise/ds-core/dist/js/DSProvider/ThemeProvider/theme';
9
+ import * as S from '../CardTab.styles';
10
+
11
+ var CardTabDropdown = function CardTabDropdown(_ref) {
12
+ var editNameHandler = _ref.editNameHandler,
13
+ duplicateHandler = _ref.duplicateHandler,
14
+ removeHandler = _ref.removeHandler,
15
+ texts = _ref.texts;
16
+
17
+ var _useState = useState(false),
18
+ open = _useState[0],
19
+ setOpen = _useState[1];
20
+
21
+ var ref = useRef(null);
22
+ var menuItems = [];
23
+ useOnClickOutside(ref, function () {
24
+ setOpen(false);
25
+ });
26
+
27
+ if (editNameHandler) {
28
+ menuItems.push( /*#__PURE__*/React.createElement(MenuItem, {
29
+ onClick: function onClick(event) {
30
+ editNameHandler(event.domEvent);
31
+ setOpen(false);
32
+ },
33
+ key: "card-tabs-menu-item-rename",
34
+ prefixel: /*#__PURE__*/React.createElement(Icon, {
35
+ component: /*#__PURE__*/React.createElement(EditM, null)
36
+ })
37
+ }, texts.changeNameMenuItem));
38
+ }
39
+
40
+ if (duplicateHandler) {
41
+ menuItems.push( /*#__PURE__*/React.createElement(MenuItem, {
42
+ onClick: function onClick(event) {
43
+ duplicateHandler(event.domEvent);
44
+ setOpen(false);
45
+ },
46
+ key: "card-tabs-menu-item-duplicate",
47
+ prefixel: /*#__PURE__*/React.createElement(Icon, {
48
+ component: /*#__PURE__*/React.createElement(DuplicateM, null)
49
+ })
50
+ }, texts.duplicateMenuItem));
51
+ }
52
+
53
+ if (removeHandler) {
54
+ menuItems.push( /*#__PURE__*/React.createElement(MenuItem, {
55
+ prefixel: /*#__PURE__*/React.createElement(Icon, {
56
+ component: /*#__PURE__*/React.createElement(TrashM, null)
57
+ }),
58
+ onClick: function onClick(event) {
59
+ removeHandler(event.domEvent);
60
+ setOpen(false);
61
+ },
62
+ key: "card-tabs-menu-item-delete",
63
+ type: "danger"
64
+ }, texts.removeMenuItem));
65
+ }
66
+
67
+ return /*#__PURE__*/React.createElement(S.CardTabSuffix, {
68
+ "data-testid": "card-tab-suffix",
69
+ className: "ds-card-tabs__suffix-nodrag"
70
+ }, /*#__PURE__*/React.createElement(Dropdown, {
71
+ visible: open,
72
+ placement: "bottomLeft",
73
+ trigger: ['click'],
74
+ overlay: /*#__PURE__*/React.createElement("div", {
75
+ ref: ref
76
+ }, /*#__PURE__*/React.createElement(Menu, {
77
+ asDropdownMenu: true
78
+ }, menuItems))
79
+ }, /*#__PURE__*/React.createElement(Icon, {
80
+ onClick: function onClick(event) {
81
+ event.stopPropagation();
82
+ setOpen(!open);
83
+ },
84
+ component: /*#__PURE__*/React.createElement(OptionVerticalM, null),
85
+ color: theme.palette['grey-600']
86
+ })));
87
+ };
88
+
89
+ export default CardTabDropdown;
@@ -0,0 +1,8 @@
1
+ import { MouseEvent } from 'react';
2
+ import { CardTabTexts } from '../CardTab.types';
3
+ export interface CardTabDropdownProps {
4
+ editNameHandler?: (event?: MouseEvent<HTMLElement>) => void;
5
+ duplicateHandler?: (event?: MouseEvent<HTMLElement>) => void;
6
+ removeHandler?: (event?: MouseEvent<HTMLElement>) => void;
7
+ texts: CardTabTexts;
8
+ }
@@ -1,5 +1,5 @@
1
1
  import styled from 'styled-components';
2
- import * as CreatorStyles from '@synerise/ds-button/dist/Creator/Creator.styles';
2
+ import { ButtonStyles } from '@synerise/ds-button';
3
3
  import { CardTabContainer } from './CardTab/CardTab.styles'; // eslint-disable-next-line import/prefer-default-export
4
4
 
5
5
  export var CardTabsContainer = styled.div.withConfig({
@@ -9,4 +9,4 @@ export var CardTabsContainer = styled.div.withConfig({
9
9
  return props.theme.palette['blue-600'];
10
10
  }, function (props) {
11
11
  return props.theme.palette['blue-050'];
12
- }, CreatorStyles.CreatorLabel);
12
+ }, ButtonStyles.Creator.CreatorLabel);
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import type { CardTabProps } from './CardTab/CardTab.types';
2
3
  export declare type CardTabsProps = {
3
4
  className?: string;
4
5
  onChangeOrder?: (newOrder: CardTabsItem[]) => void;
@@ -7,8 +8,4 @@ export declare type CardTabsProps = {
7
8
  maxTabsCount?: number;
8
9
  children?: JSX.Element[];
9
10
  };
10
- export declare type CardTabsItem = {
11
- id: number;
12
- name: string;
13
- tag: string;
14
- };
11
+ export declare type CardTabsItem = Partial<CardTabProps>;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,12 @@
1
+ import * as CardTabStyles from './CardTab/CardTab.styles';
2
+ import * as MainCardTabsStyles from './CardTabs.styles';
1
3
  export { default } from './CardTabs';
2
4
  export { default as CardTab } from './CardTab/CardTab';
3
5
  export type { CardTabsItem } from './CardTabs.types';
4
6
  export { prefixType } from './CardTab/CardTab.types';
5
7
  export type { CardTabProps } from './CardTab/CardTab.types';
6
8
  export { COLORS_TABS } from './CardTab/ColorsTabs';
7
- export { CardTabContainer, CardTabLabel, CardIconPrefix, CardDot } from './CardTab/CardTab.styles';
9
+ export declare const CardTabsStyles: {
10
+ CardTabs: typeof MainCardTabsStyles;
11
+ CardTab: typeof CardTabStyles;
12
+ };
package/dist/index.js CHANGED
@@ -1,5 +1,10 @@
1
+ import * as CardTabStyles from './CardTab/CardTab.styles';
2
+ import * as MainCardTabsStyles from './CardTabs.styles';
1
3
  export { default } from './CardTabs';
2
4
  export { default as CardTab } from './CardTab/CardTab';
3
5
  export { prefixType } from './CardTab/CardTab.types';
4
6
  export { COLORS_TABS } from './CardTab/ColorsTabs';
5
- export { CardTabContainer, CardTabLabel, CardIconPrefix, CardDot } from './CardTab/CardTab.styles';
7
+ export var CardTabsStyles = {
8
+ CardTabs: MainCardTabsStyles,
9
+ CardTab: CardTabStyles
10
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-card-tabs",
3
- "version": "0.13.52",
3
+ "version": "0.13.54",
4
4
  "description": "CardTabs UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -32,10 +32,10 @@
32
32
  ],
33
33
  "types": "dist/index.d.ts",
34
34
  "dependencies": {
35
- "@synerise/ds-button": "^0.17.17",
36
- "@synerise/ds-cruds": "^0.3.27",
35
+ "@synerise/ds-button": "^0.17.18",
36
+ "@synerise/ds-cruds": "^0.3.28",
37
37
  "@synerise/ds-icon": "^0.56.0",
38
- "@synerise/ds-inline-edit": "^0.6.64",
38
+ "@synerise/ds-inline-edit": "^0.6.65",
39
39
  "@synerise/ds-typography": "^0.12.7",
40
40
  "react-sortablejs-typescript": "2.0.3",
41
41
  "sortablejs": "^1.10.1"
@@ -48,5 +48,5 @@
48
48
  "devDependencies": {
49
49
  "@types/lodash": "4.14.149"
50
50
  },
51
- "gitHead": "2b2a3ea268c4cf9790e9b1b98365d08f3c8526ef"
51
+ "gitHead": "4fa463dee08db3befeec954d744ec3c44aeecd9d"
52
52
  }