@synerise/ds-manageable-list 1.2.5 → 1.3.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,33 @@
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.3.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.6...@synerise/ds-manageable-list@1.3.0) (2025-05-07)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **manageable-list:** alignment in content item large ([fd1537e](https://github.com/Synerise/synerise-design/commit/fd1537eea52b064afb79c36d14a53623aa911a38))
12
+
13
+
14
+ ### Features
15
+
16
+ * **manageable-list:** add blank item type ([6214c04](https://github.com/Synerise/synerise-design/commit/6214c045afd0f963ebbbc1416e75f54cd8c692ff))
17
+
18
+
19
+
20
+
21
+
22
+ ## [1.2.6](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.5...@synerise/ds-manageable-list@1.2.6) (2025-04-24)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **manageable-list:** change visibleLimit as optional ([9c54861](https://github.com/Synerise/synerise-design/commit/9c54861f87d7fc9a28491e8a2d9ded7da6dadd41))
28
+
29
+
30
+
31
+
32
+
6
33
  ## [1.2.5](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.4...@synerise/ds-manageable-list@1.2.5) (2025-04-16)
7
34
 
8
35
  **Note:** Version bump only for package @synerise/ds-manageable-list
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AddBlankItemProps } from './AddBlankItem.types';
3
+ declare const AddBlankItem: ({ disabled, onItemAdd, addItemLabel }: AddBlankItemProps) => React.JSX.Element;
4
+ export default AddBlankItem;
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import Button from '@synerise/ds-button';
3
+ import Icon, { Add3S } from '@synerise/ds-icon';
4
+ import Divider from '@synerise/ds-divider';
5
+ import * as S from './AddBlankItem.styles';
6
+ var AddBlankItem = function AddBlankItem(_ref) {
7
+ var disabled = _ref.disabled,
8
+ onItemAdd = _ref.onItemAdd,
9
+ addItemLabel = _ref.addItemLabel;
10
+ return /*#__PURE__*/React.createElement(S.AddContentButtonWrapper, {
11
+ "data-testid": "add-item-button"
12
+ }, /*#__PURE__*/React.createElement(Divider, {
13
+ dashed: true,
14
+ marginTop: 8
15
+ }), /*#__PURE__*/React.createElement(Button, {
16
+ type: "ghost-primary",
17
+ mode: "icon-label",
18
+ onClick: onItemAdd,
19
+ disabled: disabled
20
+ }, /*#__PURE__*/React.createElement(Icon, {
21
+ component: /*#__PURE__*/React.createElement(Add3S, null)
22
+ }), addItemLabel));
23
+ };
24
+ export default AddBlankItem;
@@ -0,0 +1 @@
1
+ export declare const AddContentButtonWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,7 @@
1
+ import styled from 'styled-components';
2
+
3
+ // eslint-disable-next-line import/prefer-default-export
4
+ export var AddContentButtonWrapper = styled.div.withConfig({
5
+ displayName: "AddBlankItemstyles__AddContentButtonWrapper",
6
+ componentId: "sc-1cqa1jm-0"
7
+ })(["display:flex;flex-direction:column;gap:16px;align-items:flex-start;"]);
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from 'react';
2
+ export type AddBlankItemProps = {
3
+ onItemAdd: () => void;
4
+ addItemLabel: ReactNode;
5
+ disabled: boolean;
6
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { BlankItemProps } from './BlankItem.types';
3
+ declare const BlankItem: <T extends object>({ onRemove, onDuplicate, draggable, renderItem, item, texts, rowGap, ...rest }: BlankItemProps<T>) => React.JSX.Element;
4
+ export default BlankItem;
@@ -0,0 +1,67 @@
1
+ var _excluded = ["onRemove", "onDuplicate", "draggable", "renderItem", "item", "texts", "rowGap"];
2
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
+ import React, { useCallback } from 'react';
5
+ import Tooltip from '@synerise/ds-tooltip';
6
+ import Icon, { CloseS, DragHandleM, DuplicateS } from '@synerise/ds-icon';
7
+ import { useTheme } from '@synerise/ds-core';
8
+ import * as S from './BlankItem.styles';
9
+ import { useTexts } from '../../hooks/useTexts';
10
+ var BlankItem = function BlankItem(_ref) {
11
+ var onRemove = _ref.onRemove,
12
+ onDuplicate = _ref.onDuplicate,
13
+ draggable = _ref.draggable,
14
+ renderItem = _ref.renderItem,
15
+ item = _ref.item,
16
+ texts = _ref.texts,
17
+ _ref$rowGap = _ref.rowGap,
18
+ rowGap = _ref$rowGap === void 0 ? 16 : _ref$rowGap,
19
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
20
+ var theme = useTheme();
21
+ var allTexts = useTexts(texts);
22
+ var handleRemove = useCallback(function (event) {
23
+ event.stopPropagation();
24
+ var id = item.id;
25
+ onRemove && onRemove({
26
+ id: id
27
+ });
28
+ }, [item, onRemove]);
29
+ var handleDuplicate = useCallback(function (event) {
30
+ event.stopPropagation();
31
+ var id = item.id;
32
+ onDuplicate && onDuplicate({
33
+ id: id
34
+ });
35
+ }, [item, onDuplicate]);
36
+ return /*#__PURE__*/React.createElement(S.BlankItemWrapper, _extends({
37
+ key: item.id,
38
+ "data-testid": "manageable-list-blank-item",
39
+ rowGap: rowGap
40
+ }, rest), draggable && /*#__PURE__*/React.createElement(S.DragHandle, {
41
+ className: "item-drag-handle"
42
+ }, /*#__PURE__*/React.createElement(Icon, {
43
+ size: 24,
44
+ component: /*#__PURE__*/React.createElement(DragHandleM, {
45
+ color: "currentColor"
46
+ })
47
+ })), /*#__PURE__*/React.createElement(S.BlankItemContent, null, renderItem(item)), (onRemove || onDuplicate) && /*#__PURE__*/React.createElement(S.BlankItemActions, null, onDuplicate && /*#__PURE__*/React.createElement(Tooltip, {
48
+ type: "default",
49
+ trigger: "hover",
50
+ title: allTexts.itemActionDuplicateTooltip
51
+ }, /*#__PURE__*/React.createElement(Icon, {
52
+ component: /*#__PURE__*/React.createElement(DuplicateS, null),
53
+ color: theme.palette['grey-600'],
54
+ size: 24,
55
+ onClick: handleDuplicate
56
+ })), onRemove && /*#__PURE__*/React.createElement(Tooltip, {
57
+ type: "default",
58
+ trigger: "hover",
59
+ title: allTexts.itemActionDeleteTooltip
60
+ }, /*#__PURE__*/React.createElement(Icon, {
61
+ component: /*#__PURE__*/React.createElement(CloseS, null),
62
+ size: 24,
63
+ color: theme.palette['red-600'],
64
+ onClick: handleRemove
65
+ }))));
66
+ };
67
+ export default BlankItem;
@@ -0,0 +1,6 @@
1
+ export declare const BlankItemActions: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const DragHandle: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ export declare const BlankItemWrapper: import("styled-components").StyledComponent<"div", any, {
4
+ rowGap: number;
5
+ }, never>;
6
+ export declare const BlankItemContent: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,25 @@
1
+ import styled from 'styled-components';
2
+ export var BlankItemActions = styled.div.withConfig({
3
+ displayName: "BlankItemstyles__BlankItemActions",
4
+ componentId: "sc-19vgbbk-0"
5
+ })(["opacity:0;flex:0 1 auto;transition:opacity 0.2s;svg:hover{fill:", ";}"], function (props) {
6
+ return props.theme.palette['blue-600'];
7
+ });
8
+ export var DragHandle = styled.div.withConfig({
9
+ displayName: "BlankItemstyles__DragHandle",
10
+ componentId: "sc-19vgbbk-1"
11
+ })(["flex:0 1 auto;cursor:grab;svg{fill:", ";}&:hover{svg{fill:", ";}}"], function (props) {
12
+ return props.theme.palette['grey-400'];
13
+ }, function (props) {
14
+ return props.theme.palette['grey-600'];
15
+ });
16
+ export var BlankItemWrapper = styled.div.withConfig({
17
+ displayName: "BlankItemstyles__BlankItemWrapper",
18
+ componentId: "sc-19vgbbk-2"
19
+ })(["display:flex;align-items:center;justify-content:space-between;margin-bottom:", "px;&:hover{", "{opacity:1;}}"], function (props) {
20
+ return props.rowGap;
21
+ }, BlankItemActions);
22
+ export var BlankItemContent = styled.div.withConfig({
23
+ displayName: "BlankItemstyles__BlankItemContent",
24
+ componentId: "sc-19vgbbk-3"
25
+ })(["flex:1 1 auto;"]);
@@ -0,0 +1,20 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { WithHTMLAttributes } from '@synerise/ds-utils';
3
+ import type { ItemProps } from '../Item.types';
4
+ import type { Texts } from '../../ManageableList.types';
5
+ export type BlankItemBaseProps<T extends object> = Pick<ItemProps<T>, 'id' | 'name'>;
6
+ export type BaseBlankItemProps<T extends object> = {
7
+ texts?: Partial<Texts>;
8
+ draggable?: boolean;
9
+ renderItem: (item: BlankItemBaseProps<T>) => ReactNode;
10
+ item: BlankItemBaseProps<T>;
11
+ index?: number;
12
+ rowGap?: number;
13
+ onDuplicate?: (duplicateParams: {
14
+ id: string | number;
15
+ }) => void;
16
+ onRemove?: (removeParams: {
17
+ id: string | number;
18
+ }) => void;
19
+ };
20
+ export type BlankItemProps<T extends object> = WithHTMLAttributes<HTMLDivElement, BaseBlankItemProps<T>>;
@@ -0,0 +1 @@
1
+ export {};
@@ -21,6 +21,7 @@ declare const ContentItem: (({ onRemove, onUpdate, onDuplicate, draggable, dashe
21
21
  }, never>;
22
22
  ItemHeader: import("styled-components").StyledComponent<"div", any, {
23
23
  hasPrefix: boolean;
24
+ hasDescription: boolean;
24
25
  size?: "default" | "large" | undefined;
25
26
  }, never>;
26
27
  ItemHeaderPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -9,6 +9,7 @@ export declare const ItemHeaderPrefix: import("styled-components").StyledCompone
9
9
  export declare const ItemHeaderSuffix: import("styled-components").StyledComponent<"div", any, {}, never>;
10
10
  export declare const ItemHeader: import("styled-components").StyledComponent<"div", any, {
11
11
  hasPrefix: boolean;
12
+ hasDescription: boolean;
12
13
  size?: "default" | "large" | undefined;
13
14
  }, never>;
14
15
  export declare const ContentWrapper: import("styled-components").StyledComponent<"div", any, {
@@ -48,7 +48,7 @@ export var ItemHeader = styled.div.withConfig({
48
48
  displayName: "ContentItemstyles__ItemHeader",
49
49
  componentId: "sc-13pyu4r-6"
50
50
  })(["display:flex;flex-direction:row;align-items:center;justify-content:stretch;width:100%;padding:12px;cursor:pointer;max-height:48px;position:relative;", " ", "{gap:", "px;}gap:", "px;", " ", "{padding:0;}&:hover{.suffix--hide-on-hover{display:none;}", "{color:", ";}", "{display:flex;}", "{svg{color:", ";fill:", ";}}", "{display:flex;}}"], function (props) {
51
- return props.size === 'large' && css(["", "{position:absolute;left:0;}"], DraggerWrapper);
51
+ return props.size === 'large' && css(["", " ", "{position:absolute;left:0;}"], props.hasDescription && 'align-items: flex-start;', DraggerWrapper);
52
52
  }, ItemHeaderPrefix, function (props) {
53
53
  return props.size === 'large' ? 16 : 12;
54
54
  }, function (props) {
@@ -94,7 +94,7 @@ export var ItemContainer = styled.div.withConfig({
94
94
  }, standardShadow, function (props) {
95
95
  return !!props.dashed && dashedStyle(props);
96
96
  }, function (props) {
97
- return props.size === 'large' && css(["", "{max-height:88px;padding:24px;}"], ItemHeader);
97
+ return props.size === 'large' && css(["", "{max-height:none;padding:24px;}"], ItemHeader);
98
98
  });
99
99
  export var ToggleContentWrapper = styled.div.withConfig({
100
100
  displayName: "ContentItemstyles__ToggleContentWrapper",
@@ -77,6 +77,7 @@ export var ContentItemHeader = function ContentItemHeader(_ref) {
77
77
  return /*#__PURE__*/React.createElement(S.ItemHeader, {
78
78
  size: size,
79
79
  hasPrefix: hasPrefix,
80
+ hasDescription: !!item.description,
80
81
  onClick: function onClick() {
81
82
  if (!item.disableExpanding && !editMode) {
82
83
  setIsExpanded(!isExpanded);
@@ -74,6 +74,7 @@ declare const FilterItem: React.ForwardRefExoticComponent<{
74
74
  }, never>;
75
75
  ItemHeader: import("styled-components").StyledComponent<"div", any, {
76
76
  hasPrefix: boolean;
77
+ hasDescription: boolean;
77
78
  size?: "default" | "large" | undefined;
78
79
  }, never>;
79
80
  ItemHeaderPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { Props } from './Item.types';
3
- declare const Item: ({ item, onRemove, onSelect, onUpdate, listType, onDuplicate, greyBackground, draggable, changeOrderDisabled, selected, texts, searchQuery, hideExpander, expanded, onExpand, onMoveBottom, onMoveTop, isFirst, isLast, additionalActions, }: Props) => React.JSX.Element;
3
+ declare const Item: ({ item, onRemove, onSelect, onUpdate, listType, onDuplicate, greyBackground, draggable, changeOrderDisabled, selected, texts, searchQuery, hideExpander, expanded, onExpand, onMoveBottom, onMoveTop, isFirst, isLast, additionalActions, renderItem, }: Props) => React.JSX.Element;
4
4
  export default Item;
package/dist/Item/Item.js CHANGED
@@ -3,6 +3,7 @@ import { ListType } from '../ManageableList.types';
3
3
  import ContentItem from './ContentItem/ContentItem';
4
4
  import SimpleItem from './SimpleItem/SimpleItem';
5
5
  import FilterItem from './FilterItem/FilterItem';
6
+ import BlankItem from './BlankItem/BlankItem';
6
7
  var Item = function Item(_ref) {
7
8
  var item = _ref.item,
8
9
  onRemove = _ref.onRemove,
@@ -23,7 +24,8 @@ var Item = function Item(_ref) {
23
24
  onMoveTop = _ref.onMoveTop,
24
25
  isFirst = _ref.isFirst,
25
26
  isLast = _ref.isLast,
26
- additionalActions = _ref.additionalActions;
27
+ additionalActions = _ref.additionalActions,
28
+ renderItem = _ref.renderItem;
27
29
  switch (listType) {
28
30
  case ListType.CONTENT:
29
31
  case ListType.CONTENT_LARGE:
@@ -46,6 +48,16 @@ var Item = function Item(_ref) {
46
48
  isFirst: Boolean(isFirst),
47
49
  isLast: Boolean(isLast)
48
50
  });
51
+ case ListType.BLANK:
52
+ return /*#__PURE__*/React.createElement(BlankItem, {
53
+ key: "item-" + item.id,
54
+ item: item,
55
+ onDuplicate: onDuplicate,
56
+ onRemove: onRemove,
57
+ draggable: draggable,
58
+ texts: texts,
59
+ renderItem: renderItem
60
+ });
49
61
  case ListType.FILTER:
50
62
  return /*#__PURE__*/React.createElement(FilterItem, {
51
63
  key: "item-" + item.id,
@@ -19,7 +19,7 @@ export var ItemLabelWrapper = styled.div.withConfig({
19
19
  displayName: "Itemstyles__ItemLabelWrapper",
20
20
  componentId: "sc-1an9szf-2"
21
21
  })(["flex:1;display:flex;flex-grow:1;.ant-tooltip-inner{max-width:164px;padding:16px 16px 19px;}", ""], function (props) {
22
- return props.largeSize ? css(["height:40px;flex-direction:column;gap:10px;overflow-y:visible;", "{margin-left:24px;}"], ItemTagList) : css(["flex-direction:row;align-items:center;overflow:hidden;height:24px;justify-content:flex-start;"]);
22
+ return props.largeSize ? css(["flex-direction:column;gap:10px;overflow-y:visible;", "{margin-left:24px;}"], ItemTagList) : css(["flex-direction:row;align-items:center;overflow:hidden;height:24px;justify-content:flex-start;"]);
23
23
  });
24
24
  export var ItemContainer = styled.div.withConfig({
25
25
  displayName: "Itemstyles__ItemContainer",
@@ -4,6 +4,7 @@ export type Props = {
4
4
  item: ItemProps;
5
5
  isFirst?: boolean;
6
6
  isLast?: boolean;
7
+ renderItem: (item: ItemProps) => ReactNode;
7
8
  onMoveTop?: (item: ItemProps) => void;
8
9
  onMoveBottom?: (item: ItemProps) => void;
9
10
  onRemove?: (removeParams: {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ManageableListProps } from './ManageableList.types';
3
- declare const ManageableList: (<T extends object>({ className, onItemAdd, onItemSelect, onItemDuplicate, onItemRemove, onItemEdit, onChangeOrder, items, maxToShowItems, visibleItemsLimit, loading, type, addButtonDisabled, changeOrderDisabled, greyBackground, placeholder, selectedItemId, searchQuery, expanderDisabled, onExpand, expandedIds, texts, changeOrderByButtons, additionalActions, style, renderCustomToggleButton, }: ManageableListProps<T>) => React.JSX.Element) & {
3
+ declare const ManageableList: (<T extends object>({ className, onItemAdd, onItemSelect, onItemDuplicate, onItemRemove, onItemEdit, onChangeOrder, items, maxToShowItems, visibleItemsLimit, loading, type, addButtonDisabled, changeOrderDisabled, greyBackground, placeholder, selectedItemId, searchQuery, expanderDisabled, onExpand, expandedIds, texts, changeOrderByButtons, additionalActions, style, renderItem, renderCustomToggleButton, }: ManageableListProps<T>) => React.JSX.Element) & {
4
4
  ManageableListContainer: import("styled-components").StyledComponent<"div", any, {
5
5
  listType: string;
6
6
  greyBackground: boolean;
@@ -8,6 +8,7 @@ import AddItemWithName from './AddItemWithName/AddItemWithName';
8
8
  import AddItem from './AddItem/AddItem';
9
9
  import { ListType } from './ManageableList.types';
10
10
  import { useTexts } from './hooks/useTexts';
11
+ import AddBlankItem from './AddBlankItem/AddBlankItem';
11
12
  var SORTABLE_CONFIG = {
12
13
  ghostClass: 'sortable-list-ghost-element',
13
14
  className: 'sortable-list',
@@ -22,7 +23,6 @@ var SORTABLE_CONFIG = {
22
23
  sortable.el.classList.remove('sorting-started');
23
24
  }
24
25
  };
25
- var INITIALLY_VISIBLE_COUNT = 5;
26
26
  var ManageableListComponent = function ManageableListComponent(_ref) {
27
27
  var className = _ref.className,
28
28
  onItemAdd = _ref.onItemAdd,
@@ -54,12 +54,16 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
54
54
  changeOrderByButtons = _ref$changeOrderByBut === void 0 ? false : _ref$changeOrderByBut,
55
55
  additionalActions = _ref.additionalActions,
56
56
  style = _ref.style,
57
+ _ref$renderItem = _ref.renderItem,
58
+ renderItem = _ref$renderItem === void 0 ? function () {
59
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
60
+ } : _ref$renderItem,
57
61
  renderCustomToggleButton = _ref.renderCustomToggleButton;
58
62
  var _useState = useState(false),
59
63
  allItemsVisible = _useState[0],
60
64
  setAllItemsVisible = _useState[1];
61
65
  var allTexts = useTexts(texts);
62
- var visibleLimit = visibleItemsLimit || maxToShowItems || INITIALLY_VISIBLE_COUNT;
66
+ var visibleLimit = visibleItemsLimit || maxToShowItems;
63
67
  var getExpandedIds = useCallback(function () {
64
68
  return expandedIds !== undefined ? expandedIds : items.filter(function (item) {
65
69
  return item.expanded;
@@ -74,7 +78,8 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
74
78
  setAllExpandedIds(getExpandedIds());
75
79
  }, [expandedIds, items, getExpandedIds]);
76
80
  var getItemsOverLimit = useMemo(function () {
77
- return items.length - visibleLimit;
81
+ if (visibleLimit) return items.length - visibleLimit;
82
+ return 0;
78
83
  }, [items, visibleLimit]);
79
84
  var visibleItems = useMemo(function () {
80
85
  return allItemsVisible ? items : items.slice(0, visibleLimit);
@@ -125,10 +130,11 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
125
130
  searchQuery: searchQuery,
126
131
  hideExpander: expanderDisabled,
127
132
  expanded: allExpandedIds && allExpandedIds.includes(item.id),
128
- additionalActions: additionalActions
133
+ additionalActions: additionalActions,
134
+ renderItem: renderItem
129
135
  });
130
- }, [items.length, type, onItemSelect, onItemEdit, onItemRemove, onItemDuplicate, onExpand, changeOrderByButtons, onMoveTop, onMoveBottom, onChangeOrder, changeOrderDisabled, greyBackground, selectedItemId, allTexts, searchQuery, expanderDisabled, allExpandedIds, additionalActions]);
131
- var toggleMoreItemsButton = items.length > visibleLimit ? renderCustomToggleButton && renderCustomToggleButton({
136
+ }, [items.length, type, onItemSelect, onItemEdit, onItemRemove, onItemDuplicate, onExpand, changeOrderByButtons, onMoveTop, onMoveBottom, onChangeOrder, changeOrderDisabled, greyBackground, selectedItemId, allTexts, searchQuery, expanderDisabled, allExpandedIds, additionalActions, renderItem]);
137
+ var toggleMoreItemsButton = visibleLimit && items.length > visibleLimit ? renderCustomToggleButton && renderCustomToggleButton({
132
138
  onClick: toggleAllItems,
133
139
  allItemsVisible: allItemsVisible,
134
140
  total: items.length,
@@ -158,6 +164,10 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
158
164
  addItemLabel: allTexts.addItemLabel,
159
165
  onItemAdd: createItem,
160
166
  disabled: addButtonDisabled
167
+ }), type === ListType.BLANK && Boolean(onItemAdd) && /*#__PURE__*/React.createElement(AddBlankItem, {
168
+ addItemLabel: allTexts.addItemLabel,
169
+ onItemAdd: createItem,
170
+ disabled: addButtonDisabled
161
171
  }));
162
172
  };
163
173
  var ManageableList = Object.assign(ManageableListComponent, {
@@ -8,6 +8,7 @@ export declare enum ExpansionBehaviour {
8
8
  }
9
9
  export declare enum ListType {
10
10
  DEFAULT = "default",
11
+ BLANK = "blank",
11
12
  CONTENT = "content",
12
13
  CONTENT_LARGE = "content-large",
13
14
  FILTER = "filter"
@@ -61,13 +62,14 @@ export type ManageableListProps<T extends object> = {
61
62
  limit: number;
62
63
  allItemsVisible: boolean;
63
64
  }) => ReactNode;
65
+ renderItem?: (item: ItemProps) => ReactNode;
64
66
  } & ExactlyOne<{
65
67
  /**
66
68
  * @deprecated - use visibleItemsLimit prop instead
67
69
  */
68
- maxToShowItems: number;
70
+ maxToShowItems?: number;
69
71
  }, {
70
- visibleItemsLimit: number;
72
+ visibleItemsLimit?: number;
71
73
  }>;
72
74
  export type Texts = {
73
75
  addItemLabel: ReactNode;
@@ -6,6 +6,7 @@ export var ExpansionBehaviour = /*#__PURE__*/function (ExpansionBehaviour) {
6
6
  }({});
7
7
  export var ListType = /*#__PURE__*/function (ListType) {
8
8
  ListType["DEFAULT"] = "default";
9
+ ListType["BLANK"] = "blank";
9
10
  ListType["CONTENT"] = "content";
10
11
  ListType["CONTENT_LARGE"] = "content-large";
11
12
  ListType["FILTER"] = "filter";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-manageable-list",
3
- "version": "1.2.5",
3
+ "version": "1.3.0",
4
4
  "description": "ManageableList UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -34,21 +34,21 @@
34
34
  ],
35
35
  "types": "dist/index.d.ts",
36
36
  "dependencies": {
37
- "@synerise/ds-avatar": "^1.0.5",
38
- "@synerise/ds-button": "^1.1.4",
39
- "@synerise/ds-dropdown": "^1.0.5",
40
- "@synerise/ds-icon": "^1.4.0",
41
- "@synerise/ds-inline-edit": "^1.0.6",
42
- "@synerise/ds-input": "^1.1.0",
43
- "@synerise/ds-list": "^1.0.5",
44
- "@synerise/ds-menu": "^1.0.5",
45
- "@synerise/ds-modal": "^1.0.5",
46
- "@synerise/ds-popconfirm": "^1.0.5",
47
- "@synerise/ds-result": "^1.0.5",
48
- "@synerise/ds-tag": "^1.1.4",
49
- "@synerise/ds-tooltip": "^1.1.4",
50
- "@synerise/ds-typography": "^1.0.5",
51
- "@synerise/ds-utils": "^1.0.1",
37
+ "@synerise/ds-avatar": "^1.0.7",
38
+ "@synerise/ds-button": "^1.2.0",
39
+ "@synerise/ds-dropdown": "^1.0.7",
40
+ "@synerise/ds-icon": "^1.4.2",
41
+ "@synerise/ds-inline-edit": "^1.0.8",
42
+ "@synerise/ds-input": "^1.1.2",
43
+ "@synerise/ds-list": "^1.0.7",
44
+ "@synerise/ds-menu": "^1.0.7",
45
+ "@synerise/ds-modal": "^1.0.7",
46
+ "@synerise/ds-popconfirm": "^1.0.7",
47
+ "@synerise/ds-result": "^1.0.7",
48
+ "@synerise/ds-tag": "^1.1.6",
49
+ "@synerise/ds-tooltip": "^1.1.6",
50
+ "@synerise/ds-typography": "^1.0.7",
51
+ "@synerise/ds-utils": "^1.1.0",
52
52
  "moment": "^2.30.1",
53
53
  "react-animate-height": "^2.0.23",
54
54
  "react-sortablejs": "^6.0.0",
@@ -61,5 +61,5 @@
61
61
  "react-intl": ">=3.12.0 <= 6.8",
62
62
  "styled-components": "^5.3.3"
63
63
  },
64
- "gitHead": "6735f9babfeef53122f54ca86cba5f581e8870d9"
64
+ "gitHead": "90af7549cf0f556340bdd0deec4bb59bacf3e95e"
65
65
  }