@synerise/ds-menu 0.19.15 → 0.20.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,25 @@
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.20.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@0.19.16...@synerise/ds-menu@0.20.0) (2024-10-01)
7
+
8
+
9
+ ### Features
10
+
11
+ * **menu:** maxToShowItems props ([982d12c](https://github.com/Synerise/synerise-design/commit/982d12cf00dfd271bd75e3228e0e231ab26dc7f1))
12
+
13
+
14
+
15
+
16
+
17
+ ## [0.19.16](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@0.19.15...@synerise/ds-menu@0.19.16) (2024-09-26)
18
+
19
+ **Note:** Version bump only for package @synerise/ds-menu
20
+
21
+
22
+
23
+
24
+
6
25
  ## [0.19.15](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@0.19.14...@synerise/ds-menu@0.19.15) (2024-09-17)
7
26
 
8
27
  **Note:** Version bump only for package @synerise/ds-menu
package/README.md CHANGED
@@ -56,6 +56,8 @@ const items = [
56
56
  | asDropdownwMenu | Add additional styles for dropdown menu | boolean | `false` |
57
57
  | dataSource | Array of items to display in menu | MenuItemProps[] | - |
58
58
  | ordered | Determines if items should be displayed with index prefix (starting from 01) | boolean | `false` |
59
+ | maxToShowItems | limits the number of items rendered. remaining are shown after button click | number | - |
60
+ | texts | custom translations | MenuTexts | - |
59
61
 
60
62
  ### MenuItemProps
61
63
 
@@ -79,3 +81,10 @@ const items = [
79
81
  | subMenu | Array of nested items | MenuItemProps[] | |
80
82
  | text | Text displayed inside the item | string / React.ReactNode | - |
81
83
  | type | Type of the item | `default` / `select` / `danger` | `default` |
84
+
85
+ ### MenuTexts
86
+
87
+ | Property | Description | Type | Default |
88
+ |----------|---------------------|-----------|---------|
89
+ | showLess | toggle button label | ReactNode | - |
90
+ | showMore | toggle button label | ReactNode | - |
package/dist/Menu.d.ts CHANGED
@@ -1,18 +1,24 @@
1
- import React from 'react';
1
+ import { Component, ReactNode } from 'react';
2
2
  import '@synerise/ds-core/dist/js/style';
3
3
  import './style/index.less';
4
4
  import * as S from './Menu.styles';
5
- import { AntdMenuProps } from './Menu.types';
5
+ import type { AntdMenuProps } from './Menu.types';
6
6
  import MenuItem from './Elements/Item/MenuItem';
7
7
  import Breadcrumb from './Elements/Breadcrumb/Breadcrumb';
8
8
  import Header from './Elements/Header/Header';
9
- declare class Menu extends React.Component<AntdMenuProps> {
9
+ export declare class Menu extends Component<AntdMenuProps, {
10
+ allItemsVisible: boolean;
11
+ }> {
10
12
  static Item: typeof MenuItem;
11
13
  static Breadcrumb: typeof Breadcrumb;
12
14
  static Header: typeof Header;
13
15
  static ItemGroup: typeof S.AntdMenu.ItemGroup;
14
16
  static SubMenu: typeof import("antd/lib/menu/SubMenu").default;
15
17
  static Divider: import("styled-components").StyledComponent<"div", any, import("./Menu.types").MenuDividerProps, never>;
16
- render(): React.ReactNode;
18
+ state: {
19
+ allItemsVisible: boolean;
20
+ };
21
+ toggleItems(): void;
22
+ render(): ReactNode;
17
23
  }
18
24
  export default Menu;
package/dist/Menu.js CHANGED
@@ -1,48 +1,107 @@
1
- var _excluded = ["dataSource", "ordered", "selectable", "children", "showTextTooltip"];
1
+ var _excluded = ["dataSource", "ordered", "selectable", "children", "showTextTooltip", "texts", "maxToShowItems"];
2
2
 
3
3
  function _extends() { _extends = Object.assign || 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); }
4
4
 
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
6
+
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
+
5
9
  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; }
6
10
 
7
11
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
8
12
 
9
13
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
14
 
11
- import React from 'react';
12
- import '@synerise/ds-core/dist/js/style';
15
+ import React, { Children, Component } from 'react';
16
+ import Button from '@synerise/ds-button';
17
+ import Icon, { ArrowDownCircleM, ArrowUpCircleM } from '@synerise/ds-icon';
13
18
  import Tooltip from '@synerise/ds-tooltip';
19
+ import '@synerise/ds-core/dist/js/style';
14
20
  import "./style/index.css";
21
+ import { FormattedMessage } from 'react-intl';
15
22
  import * as S from './Menu.styles';
16
23
  import SubMenuItem from './Elements/SubMenu/SubMenu';
17
24
  import MenuItem from './Elements/Item/MenuItem';
18
25
  import Breadcrumb from './Elements/Breadcrumb/Breadcrumb';
19
26
  import Header from './Elements/Header/Header';
20
-
21
- var Menu = /*#__PURE__*/function (_React$Component) {
27
+ export var Menu = /*#__PURE__*/function (_Component) {
22
28
  function Menu() {
23
- return _React$Component.apply(this, arguments) || this;
29
+ var _this;
30
+
31
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
32
+ args[_key] = arguments[_key];
33
+ }
34
+
35
+ _this = _Component.call.apply(_Component, [this].concat(args)) || this;
36
+
37
+ _defineProperty(_this, "state", {
38
+ allItemsVisible: false
39
+ });
40
+
41
+ return _this;
24
42
  }
25
43
 
26
- _inheritsLoose(Menu, _React$Component);
44
+ _inheritsLoose(Menu, _Component);
27
45
 
28
46
  var _proto = Menu.prototype;
29
47
 
48
+ _proto.toggleItems = function toggleItems() {
49
+ var allItemsVisible = this.state.allItemsVisible;
50
+ this.setState({
51
+ allItemsVisible: !allItemsVisible
52
+ });
53
+ };
54
+
30
55
  _proto.render = function render() {
56
+ var _this2 = this;
57
+
31
58
  var _this$props = this.props,
32
59
  dataSource = _this$props.dataSource,
33
60
  ordered = _this$props.ordered,
34
61
  selectable = _this$props.selectable,
35
62
  children = _this$props.children,
36
63
  showTextTooltip = _this$props.showTextTooltip,
64
+ texts = _this$props.texts,
65
+ maxToShowItems = _this$props.maxToShowItems,
37
66
  rest = _objectWithoutPropertiesLoose(_this$props, _excluded);
38
67
 
39
- return /*#__PURE__*/React.createElement(S.AntdMenu, _extends({
68
+ var allItemsVisible = this.state.allItemsVisible;
69
+
70
+ var allTexts = _objectSpread({
71
+ showLess: /*#__PURE__*/React.createElement(FormattedMessage, {
72
+ id: "DS.MENU.SHOW-LESS",
73
+ defaultMessage: "Show less"
74
+ }),
75
+ showMore: /*#__PURE__*/React.createElement(FormattedMessage, {
76
+ id: "DS.MENU.SHOW-MORE",
77
+ defaultMessage: "Show more"
78
+ })
79
+ }, texts);
80
+
81
+ var isListTogglable = maxToShowItems !== undefined;
82
+ var isDataSource = dataSource !== undefined;
83
+ var childrenArray = Children.toArray(children);
84
+ var itemsCount = (isDataSource ? dataSource.length : childrenArray.length) || 0;
85
+ var itemsOverLimit = isListTogglable ? itemsCount - maxToShowItems : 0;
86
+ var visibleItems = allItemsVisible || !isListTogglable ? dataSource : dataSource == null ? void 0 : dataSource.slice(0, maxToShowItems);
87
+ var visibleChildren = allItemsVisible || !isListTogglable ? children : childrenArray.slice(0, maxToShowItems);
88
+ var toggleButtonLabel = allItemsVisible ? allTexts.showLess : allTexts.showMore;
89
+ var toggleButton = isListTogglable && itemsOverLimit > 0 && /*#__PURE__*/React.createElement(Button, {
90
+ onClick: function onClick() {
91
+ return _this2.toggleItems();
92
+ },
93
+ type: "ghost-primary",
94
+ mode: "icon-label"
95
+ }, /*#__PURE__*/React.createElement(Icon, {
96
+ component: allItemsVisible ? /*#__PURE__*/React.createElement(ArrowUpCircleM, null) : /*#__PURE__*/React.createElement(ArrowDownCircleM, null)
97
+ }), toggleButtonLabel);
98
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(S.AntdMenu, _extends({
40
99
  ordered: ordered,
41
100
  mode: "inline",
42
101
  inlineIndent: ordered ? 20 : 18
43
102
  }, rest, {
44
103
  selectable: selectable === undefined ? false : selectable
45
- }), children || (dataSource == null ? void 0 : dataSource.map(function (item, index) {
104
+ }), isDataSource ? visibleItems == null ? void 0 : visibleItems.map(function (item, index) {
46
105
  return item.subMenu ? /*#__PURE__*/React.createElement(SubMenuItem, _extends({
47
106
  parent: item.parent,
48
107
  prefixel: item.prefixel,
@@ -86,11 +145,11 @@ var Menu = /*#__PURE__*/function (_React$Component) {
86
145
  ,
87
146
  menuItemKey: item.key || "" + item.text + index
88
147
  }, rest, item));
89
- })));
148
+ }) : visibleChildren), toggleButton);
90
149
  };
91
150
 
92
151
  return Menu;
93
- }(React.Component);
152
+ }(Component);
94
153
 
95
154
  _defineProperty(Menu, "Item", MenuItem);
96
155
 
@@ -1,8 +1,16 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { Menu } from 'antd';
3
- import { AntdMenuProps, MenuDividerProps } from './Menu.types';
3
+ import { MenuDividerProps } from './Menu.types';
4
4
  export declare const MenuDivider: import("styled-components").StyledComponent<"div", any, MenuDividerProps, never>;
5
- export declare const AntdMenu: import("styled-components").StyledComponent<typeof Menu, any, AntdMenuProps, never>;
5
+ export declare const AntdMenu: import("styled-components").StyledComponent<typeof Menu, any, Omit<import("antd/lib/menu").MenuProps, "dataSource" | "footer"> & {
6
+ dataSource?: import(".").MenuItemProps[] | undefined;
7
+ ordered?: boolean | undefined;
8
+ asDropdownMenu?: boolean | undefined;
9
+ showTextTooltip?: boolean | undefined;
10
+ asInfoCardContainer?: boolean | undefined;
11
+ maxToShowItems?: number | undefined;
12
+ texts?: Partial<import("./Menu.types").MenuTexts> | undefined;
13
+ }, never>;
6
14
  export declare const SubMenuItem: import("styled-components").StyledComponent<typeof import("antd/lib/menu/SubMenu").default, any, {
7
15
  ordered?: boolean | undefined;
8
16
  disabled?: boolean | undefined;
@@ -1,12 +1,19 @@
1
+ import { ReactNode } from 'react';
1
2
  import { MenuProps } from 'antd/lib/menu';
2
3
  import { MenuItemProps } from './Elements/Item/MenuItem.types';
3
- export interface AntdMenuProps extends Omit<MenuProps, 'dataSource' | 'footer'> {
4
+ export type MenuTexts = {
5
+ showLess: ReactNode;
6
+ showMore: ReactNode;
7
+ };
8
+ export type AntdMenuProps = Omit<MenuProps, 'dataSource' | 'footer'> & {
4
9
  dataSource?: MenuItemProps[];
5
10
  ordered?: boolean;
6
11
  asDropdownMenu?: boolean;
7
12
  showTextTooltip?: boolean;
8
13
  asInfoCardContainer?: boolean;
9
- }
14
+ maxToShowItems?: number;
15
+ texts?: Partial<MenuTexts>;
16
+ };
10
17
  export type MenuDividerProps = {
11
18
  higher?: boolean;
12
19
  level?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-menu",
3
- "version": "0.19.15",
3
+ "version": "0.20.0",
4
4
  "description": "Menu UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -25,7 +25,8 @@
25
25
  "prepublish": "npm run build",
26
26
  "test": "jest",
27
27
  "test:watch": "npm run test -- --watchAll",
28
- "types": "tsc --noEmit"
28
+ "types": "tsc --noEmit",
29
+ "upgrade:ds": "ncu -f \"@synerise/ds-*\" -u"
29
30
  },
30
31
  "sideEffects": [
31
32
  "dist/style/*",
@@ -33,9 +34,10 @@
33
34
  ],
34
35
  "types": "dist/index.d.ts",
35
36
  "dependencies": {
36
- "@synerise/ds-icon": "^0.65.6",
37
- "@synerise/ds-tooltip": "^0.14.41",
38
- "@synerise/ds-utils": "^0.29.3",
37
+ "@synerise/ds-button": "^0.21.13",
38
+ "@synerise/ds-icon": "^0.65.8",
39
+ "@synerise/ds-tooltip": "^0.14.43",
40
+ "@synerise/ds-utils": "^0.30.0",
39
41
  "classnames": "2.3.2",
40
42
  "copy-to-clipboard": "^3.3.1",
41
43
  "rc-menu": "8.10.7",
@@ -48,5 +50,5 @@
48
50
  "react": ">=16.9.0 <= 17.0.2",
49
51
  "styled-components": "^5.0.1"
50
52
  },
51
- "gitHead": "ae3c38b44ca0f9071cd55f7b82c182a99b5710e8"
53
+ "gitHead": "2389b995aa44e42ec1dd9a177c7ab1f1a0001a70"
52
54
  }