@synerise/ds-menu 1.2.5 → 1.3.1

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,16 @@
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.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@1.3.0...@synerise/ds-menu@1.3.1) (2026-01-21)
7
+
8
+ **Note:** Version bump only for package @synerise/ds-menu
9
+
10
+ # [1.3.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@1.2.5...@synerise/ds-menu@1.3.0) (2026-01-20)
11
+
12
+ ### Features
13
+
14
+ - **information-card:** migrate to popover ([de900e4](https://github.com/Synerise/synerise-design/commit/de900e4bc1c32a4bbbf175401374619e691023f2))
15
+
6
16
  ## [1.2.5](https://github.com/Synerise/synerise-design/compare/@synerise/ds-menu@1.2.4...@synerise/ds-menu@1.2.5) (2026-01-15)
7
17
 
8
18
  **Note:** Version bump only for package @synerise/ds-menu
@@ -0,0 +1,6 @@
1
+ import { type FlipConfig, type HoverConfig, type OffsetConfig, type ShiftConfig } from '@synerise/ds-popover';
2
+ export declare const TRANSITION_DURATION = 150;
3
+ export declare const OFFSET_CONFIG: OffsetConfig;
4
+ export declare const FLIP_CONFIG: FlipConfig;
5
+ export declare const HOVER_CONFIG: HoverConfig;
6
+ export declare const SHIFT_CONFIG: ShiftConfig;
@@ -0,0 +1,14 @@
1
+ export var TRANSITION_DURATION = 150;
2
+ export var OFFSET_CONFIG = {
3
+ mainAxis: 8
4
+ };
5
+ export var FLIP_CONFIG = {};
6
+ export var HOVER_CONFIG = {
7
+ delay: {
8
+ open: 100,
9
+ close: 400
10
+ }
11
+ };
12
+ export var SHIFT_CONFIG = {
13
+ crossAxis: true
14
+ };
@@ -1,10 +1,10 @@
1
1
  import 'rc-trigger/assets/index.less';
2
- import { type CSSProperties, type FC, type PropsWithChildren } from 'react';
2
+ import React, { type CSSProperties, type PropsWithChildren } from 'react';
3
3
  import { type BasicItemProps } from './Text.types';
4
4
  export type HoverTooltipProps = PropsWithChildren<{
5
- hoverTooltipProps?: BasicItemProps['hoverTooltipProps'];
5
+ popoverProps?: BasicItemProps['popoverProps'];
6
6
  renderHoverTooltip?: () => JSX.Element;
7
7
  style?: CSSProperties;
8
8
  }>;
9
- declare const Text: FC<BasicItemProps>;
9
+ declare const Text: ({ parent, disabled, prefixel, suffixel, danger, children, description, copyable, copyValue, copyHint, copyTooltip, timeToHideTooltip, tooltipProps, highlight, style, prefixVisibilityTrigger, suffixVisibilityTrigger, indentLevel, ordered, onClick, checked, popoverProps, renderHoverTooltip, size, ...rest }: BasicItemProps) => React.JSX.Element;
10
10
  export default Text;
@@ -1,19 +1,19 @@
1
- var _excluded = ["parent", "disabled", "prefixel", "suffixel", "danger", "children", "description", "copyable", "copyValue", "copyHint", "copyTooltip", "timeToHideTooltip", "tooltipProps", "highlight", "style", "prefixVisibilityTrigger", "suffixVisibilityTrigger", "indentLevel", "ordered", "onClick", "checked", "hoverTooltipProps", "renderHoverTooltip", "size"];
1
+ var _excluded = ["parent", "disabled", "prefixel", "suffixel", "danger", "children", "description", "copyable", "copyValue", "copyHint", "copyTooltip", "timeToHideTooltip", "tooltipProps", "highlight", "style", "prefixVisibilityTrigger", "suffixVisibilityTrigger", "indentLevel", "ordered", "onClick", "checked", "popoverProps", "renderHoverTooltip", "size"];
2
2
  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; }
3
3
  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); }
4
4
  import classNames from 'classnames';
5
5
  import copy from 'copy-to-clipboard';
6
- import Trigger from 'rc-trigger';
7
6
  import "rc-trigger/assets/index.css";
8
7
  import React, { useCallback, useMemo, useState } from 'react';
9
8
  import { useDropdown, useTheme } from '@synerise/ds-core';
10
9
  import Icon, { AngleRightS, CheckS } from '@synerise/ds-icon';
10
+ import { Popover, PopoverContent, PopoverTrigger, getPlacement } from '@synerise/ds-popover';
11
11
  import { escapeRegEx } from '@synerise/ds-utils';
12
12
  import { VisibilityTrigger } from '../../../Menu.types';
13
13
  import { useTemporaryLabel } from '../../../hooks/useTemporaryLabel';
14
- import { triggerPlacements } from '../../../utils';
15
14
  import { getCopyConfig } from '../../../utils/getCopyConfig';
16
15
  import { DynamicLabel } from './DynamicLabel';
16
+ import { FLIP_CONFIG, HOVER_CONFIG, OFFSET_CONFIG, SHIFT_CONFIG, TRANSITION_DURATION } from './Text.const';
17
17
  import * as S from './Text.styles';
18
18
  var renderAddon = function renderAddon(addon) {
19
19
  for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
@@ -22,8 +22,7 @@ var renderAddon = function renderAddon(addon) {
22
22
  return addon instanceof Function ? addon.apply(void 0, params) : addon;
23
23
  };
24
24
  function WithHoverTooltip(_ref) {
25
- var _hoverTooltipProps$de;
26
- var hoverTooltipProps = _ref.hoverTooltipProps,
25
+ var popoverProps = _ref.popoverProps,
27
26
  renderHoverTooltip = _ref.renderHoverTooltip,
28
27
  children = _ref.children,
29
28
  style = _ref.style;
@@ -34,25 +33,35 @@ function WithHoverTooltip(_ref) {
34
33
  ev.stopPropagation();
35
34
  };
36
35
  }, []);
37
- // onKeyDown is used to disallow propagating key events to tooltip's container element
38
- return /*#__PURE__*/React.createElement("div", {
39
- onKeyDown: cancelBubblingEvent,
40
- onClick: cancelBubblingEvent
41
- }, /*#__PURE__*/React.createElement(Trigger, _extends({
42
- builtinPlacements: triggerPlacements,
43
- defaultPopupVisible: (_hoverTooltipProps$de = hoverTooltipProps == null ? void 0 : hoverTooltipProps.defaultPopupVisible) != null ? _hoverTooltipProps$de : false,
44
- action: (hoverTooltipProps == null ? void 0 : hoverTooltipProps.action) || ['click', 'hover'],
45
- popupPlacement: (hoverTooltipProps == null ? void 0 : hoverTooltipProps.popupPlacement) || 'right',
46
- popup: renderHoverTooltip && renderHoverTooltip(),
47
- popupClassName: "ignore-click-outside ds-hide-arrow",
48
- mouseEnterDelay: 0.2,
49
- popupStyle: {
36
+ var popoverPlacement = getPlacement((popoverProps == null ? void 0 : popoverProps.placement) || 'right');
37
+ return (
38
+ /*#__PURE__*/
39
+ // onKeyDown is used to disallow propagating key events to tooltip's container element
40
+ React.createElement(S.PropagationStopper, {
41
+ onKeyDown: cancelBubblingEvent,
42
+ onClick: cancelBubblingEvent
43
+ }, /*#__PURE__*/React.createElement(Popover, _extends({
44
+ trigger: "hover",
45
+ modal: false,
46
+ componentId: "information-card",
47
+ testId: "information-card",
48
+ shiftConfig: SHIFT_CONFIG,
49
+ offsetConfig: OFFSET_CONFIG,
50
+ flipConfig: FLIP_CONFIG,
51
+ hoverConfig: HOVER_CONFIG,
52
+ autoUpdate: {
53
+ layoutShift: true
54
+ },
55
+ transitionDuration: TRANSITION_DURATION,
50
56
  zIndex: zIndex
51
- },
52
- zIndex: zIndex
53
- }, hoverTooltipProps), /*#__PURE__*/React.createElement("div", {
54
- style: style
55
- }, children)));
57
+ }, popoverProps, {
58
+ placement: popoverPlacement
59
+ }), /*#__PURE__*/React.createElement(PopoverContent, null, renderHoverTooltip && renderHoverTooltip()), /*#__PURE__*/React.createElement(PopoverTrigger, {
60
+ asChild: true
61
+ }, /*#__PURE__*/React.createElement("div", {
62
+ style: style
63
+ }, children))))
64
+ );
56
65
  }
57
66
  var Text = function Text(_ref2) {
58
67
  var parent = _ref2.parent,
@@ -76,7 +85,7 @@ var Text = function Text(_ref2) {
76
85
  ordered = _ref2.ordered,
77
86
  onClick = _ref2.onClick,
78
87
  checked = _ref2.checked,
79
- hoverTooltipProps = _ref2.hoverTooltipProps,
88
+ popoverProps = _ref2.popoverProps,
80
89
  renderHoverTooltip = _ref2.renderHoverTooltip,
81
90
  _ref2$size = _ref2.size,
82
91
  size = _ref2$size === void 0 ? 'default' : _ref2$size,
@@ -214,7 +223,7 @@ var Text = function Text(_ref2) {
214
223
  }), suffixElement))));
215
224
  if (renderHoverTooltip) {
216
225
  return /*#__PURE__*/React.createElement(WithHoverTooltip, {
217
- hoverTooltipProps: hoverTooltipProps,
226
+ popoverProps: popoverProps,
218
227
  renderHoverTooltip: renderHoverTooltip,
219
228
  style: mergedStyle
220
229
  }, element);
@@ -36,4 +36,5 @@ export declare const DynamicLabelAlternate: import("styled-components").StyledCo
36
36
  export declare const DynamicLabelWrapper: import("styled-components").StyledComponent<"div", any, {
37
37
  showAlternative?: boolean;
38
38
  }, never>;
39
+ export declare const PropagationStopper: import("styled-components").StyledComponent<"div", any, {}, never>;
39
40
  export {};
@@ -145,4 +145,8 @@ export var DynamicLabelWrapper = styled.div.withConfig({
145
145
  componentId: "sc-dgb761-11"
146
146
  })(["", ""], function (props) {
147
147
  return props.showAlternative ? css(["", "{height:0;visibility:hidden;}", "{height:auto;visibility:visible;}"], DynamicLabelMain, DynamicLabelAlternate) : css(["", "{height:auto;visibility:visible;}", "{height:0;visibility:hidden;}"], DynamicLabelMain, DynamicLabelAlternate);
148
- });
148
+ });
149
+ export var PropagationStopper = styled.div.withConfig({
150
+ displayName: "Textstyles__PropagationStopper",
151
+ componentId: "sc-dgb761-12"
152
+ })(["display:contents;"]);
@@ -22,6 +22,6 @@ export type BasicItemProps = {
22
22
  key?: string | number;
23
23
  checked?: boolean;
24
24
  size?: 'default' | 'large';
25
- hoverTooltipProps?: MenuItemProps['hoverTooltipProps'];
25
+ popoverProps?: MenuItemProps['popoverProps'];
26
26
  renderHoverTooltip?: MenuItemProps['renderHoverTooltip'];
27
27
  } & Pick<MenuItemProps, 'copyHint' | 'copyValue' | 'copyTooltip' | 'copyable' | 'timeToHideTooltip' | 'tooltipProps'>;
package/dist/Menu.js CHANGED
@@ -1,4 +1,4 @@
1
- var _excluded = ["dataSource", "ordered", "selectable", "children", "showTextTooltip", "texts", "maxToShowItems"];
1
+ var _excluded = ["dataSource", "ordered", "selectable", "children", "showTextTooltip", "texts", "maxToShowItems", "popoverDelay"];
2
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
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
4
  function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
@@ -8,6 +8,7 @@ import { FormattedMessage } from 'react-intl';
8
8
  import Button from '@synerise/ds-button';
9
9
  import '@synerise/ds-core/dist/js/style';
10
10
  import Icon, { ArrowDownCircleM, ArrowUpCircleM } from '@synerise/ds-icon';
11
+ import { FloatingDelayGroup } from '@synerise/ds-popover';
11
12
  import Tooltip from '@synerise/ds-tooltip';
12
13
  import Breadcrumb from './Elements/Breadcrumb/Breadcrumb';
13
14
  import { Divider } from './Elements/Divider/Divider';
@@ -46,6 +47,11 @@ export var Menu = /*#__PURE__*/function (_Component) {
46
47
  showTextTooltip = _this$props.showTextTooltip,
47
48
  texts = _this$props.texts,
48
49
  maxToShowItems = _this$props.maxToShowItems,
50
+ _this$props$popoverDe = _this$props.popoverDelay,
51
+ popoverDelay = _this$props$popoverDe === void 0 ? {
52
+ open: 100,
53
+ close: 400
54
+ } : _this$props$popoverDe,
49
55
  rest = _objectWithoutPropertiesLoose(_this$props, _excluded);
50
56
  var allItemsVisible = this.state.allItemsVisible;
51
57
  var allTexts = _extends({
@@ -75,7 +81,9 @@ export var Menu = /*#__PURE__*/function (_Component) {
75
81
  }, /*#__PURE__*/React.createElement(Icon, {
76
82
  component: allItemsVisible ? /*#__PURE__*/React.createElement(ArrowUpCircleM, null) : /*#__PURE__*/React.createElement(ArrowDownCircleM, null)
77
83
  }), toggleButtonLabel);
78
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(S.AntdMenu, _extends({
84
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FloatingDelayGroup, {
85
+ delay: popoverDelay
86
+ }, /*#__PURE__*/React.createElement(S.AntdMenu, _extends({
79
87
  ordered: ordered,
80
88
  mode: "inline",
81
89
  inlineIndent: ordered ? 20 : 18
@@ -125,7 +133,7 @@ export var Menu = /*#__PURE__*/function (_Component) {
125
133
  key: item.key || "" + item.text + index,
126
134
  menuItemKey: item.key || "" + item.text + index
127
135
  }, rest, item));
128
- }) : visibleChildren), toggleButton);
136
+ }) : visibleChildren)), toggleButton);
129
137
  };
130
138
  return Menu;
131
139
  }(Component);
@@ -1,6 +1,6 @@
1
1
  import { type MenuProps } from 'antd/lib/menu';
2
- import type { TriggerProps } from 'rc-trigger';
3
- import type { Component, LegacyRef, ReactElement, ReactNode } from 'react';
2
+ import type { ReactElement, ReactNode } from 'react';
3
+ import { type DelayConfig, type LegacyPlacement, type PopoverOptions } from '@synerise/ds-popover';
4
4
  import { type TooltipProps } from '@synerise/ds-tooltip';
5
5
  export type MenuTexts = {
6
6
  showLess: ReactNode;
@@ -12,6 +12,7 @@ export type AntdMenuProps = Omit<MenuProps, 'dataSource' | 'footer'> & {
12
12
  asDropdownMenu?: boolean;
13
13
  showTextTooltip?: boolean;
14
14
  asInfoCardContainer?: boolean;
15
+ popoverDelay?: DelayConfig;
15
16
  maxToShowItems?: number;
16
17
  texts?: Partial<MenuTexts>;
17
18
  };
@@ -80,9 +81,6 @@ export declare enum ItemSize {
80
81
  DEFAULT = "default",
81
82
  LARGE = "large"
82
83
  }
83
- export type TriggerHandle = Component<TriggerProps> & {
84
- getPopupDomNode: () => HTMLElement;
85
- };
86
84
  export type MenuItemProps = Omit<MenuProps, 'dataSource' | 'footer'> & {
87
85
  key?: string | number;
88
86
  text?: ReactNode;
@@ -123,8 +121,8 @@ export type MenuItemProps = Omit<MenuProps, 'dataSource' | 'footer'> & {
123
121
  menuItemKey?: string | number;
124
122
  checked?: boolean;
125
123
  size?: 'default' | 'large';
126
- hoverTooltipProps?: TriggerProps & {
127
- ref?: LegacyRef<TriggerHandle>;
124
+ popoverProps?: Pick<PopoverOptions, 'getPopupContainer' | 'offsetConfig' | 'flipConfig' | 'shiftConfig' | 'initialOpen'> & {
125
+ placement?: LegacyPlacement;
128
126
  };
129
127
  renderHoverTooltip?: () => JSX.Element;
130
128
  };
package/dist/index.d.ts CHANGED
@@ -7,7 +7,6 @@ import * as ItemTextStyles from './Elements/Item/Text/Text.styles';
7
7
  import * as MainMenuStyles from './Menu.styles';
8
8
  export { default } from './Menu';
9
9
  export * from './Menu.types';
10
- export * from './utils';
11
10
  export declare const MenuStyles: {
12
11
  MenuStyles: typeof MainMenuStyles;
13
12
  Breadcrumb: typeof BreadcrumbStyles;
package/dist/index.js CHANGED
@@ -7,7 +7,6 @@ import * as ItemTextStyles from './Elements/Item/Text/Text.styles';
7
7
  import * as MainMenuStyles from './Menu.styles';
8
8
  export { default } from './Menu';
9
9
  export * from './Menu.types';
10
- export * from './utils';
11
10
  export var MenuStyles = {
12
11
  MenuStyles: MainMenuStyles,
13
12
  Breadcrumb: BreadcrumbStyles,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-menu",
3
- "version": "1.2.5",
3
+ "version": "1.3.1",
4
4
  "description": "Menu UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -38,13 +38,16 @@
38
38
  "@synerise/ds-button": "^1.5.5",
39
39
  "@synerise/ds-divider": "^1.2.6",
40
40
  "@synerise/ds-icon": "^1.10.0",
41
+ "@synerise/ds-popover": "^1.3.1",
41
42
  "@synerise/ds-tooltip": "^1.3.5",
42
43
  "@synerise/ds-utils": "^1.5.3",
43
44
  "classnames": "^2.5.1",
44
45
  "rc-menu": "~9.6.3",
45
- "rc-trigger": "^5.3.4",
46
46
  "uuid": "^8.3.2"
47
47
  },
48
+ "devDependencies": {
49
+ "@testing-library/user-event": "^14"
50
+ },
48
51
  "peerDependencies": {
49
52
  "@synerise/ds-core": "*",
50
53
  "antd": "4.24.16",
@@ -52,5 +55,5 @@
52
55
  "react": ">=16.9.0 <= 18.3.1",
53
56
  "styled-components": "^5.3.3"
54
57
  },
55
- "gitHead": "4cde643d1f63a4b47e84707a13b1b1d138730d53"
58
+ "gitHead": "1ab50150aadeb21d9464b1558d0d1ea8808b85e5"
56
59
  }
package/dist/utils.d.ts DELETED
@@ -1,34 +0,0 @@
1
- export declare const triggerPlacements: {
2
- left: {
3
- points: string[];
4
- offset: number[];
5
- };
6
- right: {
7
- points: string[];
8
- offset: number[];
9
- };
10
- top: {
11
- points: string[];
12
- offset: number[];
13
- };
14
- bottom: {
15
- points: string[];
16
- offset: number[];
17
- };
18
- topLeft: {
19
- points: string[];
20
- offset: number[];
21
- };
22
- topRight: {
23
- points: string[];
24
- offset: number[];
25
- };
26
- bottomRight: {
27
- points: string[];
28
- offset: number[];
29
- };
30
- bottomLeft: {
31
- points: string[];
32
- offset: number[];
33
- };
34
- };
package/dist/utils.js DELETED
@@ -1,34 +0,0 @@
1
- export var triggerPlacements = {
2
- left: {
3
- points: ['cr', 'cl'],
4
- offset: [-8, 0]
5
- },
6
- right: {
7
- points: ['cl', 'cr'],
8
- offset: [0, 0]
9
- },
10
- top: {
11
- points: ['bc', 'tc'],
12
- offset: [0, -8]
13
- },
14
- bottom: {
15
- points: ['tc', 'bc'],
16
- offset: [0, 8]
17
- },
18
- topLeft: {
19
- points: ['bl', 'tl'],
20
- offset: [0, -8]
21
- },
22
- topRight: {
23
- points: ['br', 'tr'],
24
- offset: [0, -8]
25
- },
26
- bottomRight: {
27
- points: ['tr', 'br'],
28
- offset: [0, 8]
29
- },
30
- bottomLeft: {
31
- points: ['tl', 'bl'],
32
- offset: [0, 8]
33
- }
34
- };