@gravity-ui/dashkit 6.0.0-beta.2 → 6.1.0-beta.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.
Files changed (45) hide show
  1. package/build/cjs/components/ActionPanel/ActionPanel.css +43 -0
  2. package/build/cjs/components/ActionPanel/ActionPanel.d.ts +13 -0
  3. package/build/cjs/components/ActionPanel/ActionPanel.js +15 -0
  4. package/build/cjs/components/DashKit/DashKit.d.ts +2 -0
  5. package/build/cjs/components/DashKitView/DashKitView.js +8 -4
  6. package/build/cjs/components/GridItem/GridItem.css +1 -1
  7. package/build/cjs/components/GridItem/GridItem.js +2 -2
  8. package/build/cjs/components/Item/Item.js +2 -2
  9. package/build/cjs/components/MobileLayout/MobileLayout.js +2 -2
  10. package/build/cjs/components/OverlayControls/OverlayControls.css +2 -1
  11. package/build/cjs/components/OverlayControls/OverlayControls.js +3 -3
  12. package/build/cjs/components/index.d.ts +0 -2
  13. package/build/cjs/components/index.js +0 -3
  14. package/build/cjs/hocs/withContext.js +1 -1
  15. package/build/cjs/plugins/Text/Text.js +2 -2
  16. package/build/cjs/plugins/Title/Title.js +2 -2
  17. package/build/cjs/typings/common.d.ts +2 -0
  18. package/build/cjs/utils/cn.d.ts +1 -0
  19. package/build/cjs/utils/cn.js +5 -0
  20. package/build/esm/components/ActionPanel/ActionPanel.css +43 -0
  21. package/build/esm/components/ActionPanel/ActionPanel.d.ts +14 -0
  22. package/build/esm/components/ActionPanel/ActionPanel.js +11 -0
  23. package/build/esm/components/DashKit/DashKit.d.ts +2 -0
  24. package/build/esm/components/DashKitView/DashKitView.js +8 -4
  25. package/build/esm/components/GridItem/GridItem.css +1 -1
  26. package/build/esm/components/GridItem/GridItem.js +2 -2
  27. package/build/esm/components/Item/Item.js +2 -2
  28. package/build/esm/components/MobileLayout/MobileLayout.js +2 -2
  29. package/build/esm/components/OverlayControls/OverlayControls.css +2 -1
  30. package/build/esm/components/OverlayControls/OverlayControls.js +3 -3
  31. package/build/esm/components/index.d.ts +0 -2
  32. package/build/esm/components/index.js +0 -1
  33. package/build/esm/hocs/withContext.js +1 -1
  34. package/build/esm/plugins/Text/Text.js +2 -2
  35. package/build/esm/plugins/Title/Title.js +2 -2
  36. package/build/esm/typings/common.d.ts +2 -0
  37. package/build/esm/utils/cn.d.ts +1 -0
  38. package/build/esm/utils/cn.js +2 -0
  39. package/package.json +5 -5
  40. package/build/cjs/components/ActionsToolbar/ActionsToolbar.css +0 -26
  41. package/build/cjs/components/ActionsToolbar/ActionsToolbar.d.ts +0 -13
  42. package/build/cjs/components/ActionsToolbar/ActionsToolbar.js +0 -17
  43. package/build/esm/components/ActionsToolbar/ActionsToolbar.css +0 -26
  44. package/build/esm/components/ActionsToolbar/ActionsToolbar.d.ts +0 -14
  45. package/build/esm/components/ActionsToolbar/ActionsToolbar.js +0 -13
@@ -0,0 +1,43 @@
1
+ .dashkit-action-panel {
2
+ background-color: var(--g-color-base-float);
3
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.15);
4
+ position: fixed;
5
+ bottom: 20px;
6
+ display: flex;
7
+ border-radius: 8px;
8
+ padding: 8px;
9
+ gap: 0;
10
+ left: 50%;
11
+ transform: translateX(-50%);
12
+ z-index: 1;
13
+ }
14
+ .dashkit-action-panel__item {
15
+ height: 68px;
16
+ width: 98px;
17
+ display: flex;
18
+ flex-direction: column;
19
+ justify-content: center;
20
+ align-items: center;
21
+ transition: 0.3s background-color ease-in-out;
22
+ border-radius: 6px;
23
+ padding: 0 12px;
24
+ box-sizing: border-box;
25
+ white-space: nowrap;
26
+ overflow: hidden;
27
+ }
28
+ .dashkit-action-panel__item:hover {
29
+ cursor: pointer;
30
+ background-color: var(--g-color-base-simple-hover);
31
+ }
32
+ .dashkit-action-panel__icon {
33
+ margin-bottom: 4px;
34
+ }
35
+ .dashkit-action-panel__title {
36
+ font-size: 13px;
37
+ font-weight: 400;
38
+ line-height: 16px;
39
+ max-width: 100%;
40
+ white-space: nowrap;
41
+ overflow: hidden;
42
+ text-overflow: ellipsis;
43
+ }
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export type ActionPanelItem = {
3
+ id: string;
4
+ icon: React.ReactNode;
5
+ title: string | React.ReactNode;
6
+ onClick?: () => void;
7
+ className?: string;
8
+ };
9
+ type ActionPanelProps = {
10
+ items: ActionPanelItem[];
11
+ };
12
+ export declare const ActionPanel: (props: ActionPanelProps) => JSX.Element;
13
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActionPanel = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const cn_1 = require("../../utils/cn");
7
+ const b = (0, cn_1.cn)('dashkit-action-panel');
8
+ const ActionPanel = (props) => {
9
+ return (react_1.default.createElement("div", { className: b() }, props.items.map((item) => {
10
+ return (react_1.default.createElement("div", { role: "button", className: b('item', item.className), key: `dk-action-panel-${item.id}`, onClick: item.onClick },
11
+ react_1.default.createElement("div", { className: b('icon') }, item.icon),
12
+ react_1.default.createElement("div", { className: b('title') }, item.title)));
13
+ })));
14
+ };
15
+ exports.ActionPanel = ActionPanel;
@@ -3,6 +3,7 @@ import GridLayout from '../GridLayout/GridLayout';
3
3
  import { SetConfigItem, Settings, SettingsProps, ContextProps, Plugin, SetItemOptions } from '../../typings';
4
4
  import { GlobalParams, Config, ConfigItem, ItemsStateAndParams } from '../../shared';
5
5
  import { OverlayControlItem } from '../OverlayControls/OverlayControls';
6
+ import { ActionPanelItem } from '../ActionPanel/ActionPanel';
6
7
  interface DashKitGeneralProps {
7
8
  config: Config;
8
9
  editMode: boolean;
@@ -21,6 +22,7 @@ interface DashKitDefaultProps {
21
22
  overlayControls?: Record<string, OverlayControlItem[]>;
22
23
  noOverlay?: boolean;
23
24
  draggableHandleClassName?: string;
25
+ actionPanel?: ActionPanelItem[];
24
26
  }
25
27
  export interface DashKitProps extends DashKitGeneralProps, Partial<DashKitDefaultProps> {
26
28
  }
@@ -2,17 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
5
  const DashKitContext_1 = require("../../context/DashKitContext");
7
6
  const GridLayout_1 = tslib_1.__importDefault(require("../GridLayout/GridLayout"));
8
7
  const MobileLayout_1 = tslib_1.__importDefault(require("../MobileLayout/MobileLayout"));
9
8
  const withContext_1 = require("../../hocs/withContext");
10
9
  const useCalcLayout_1 = require("../../hooks/useCalcLayout");
11
- const b = (0, bem_cn_lite_1.default)('dashkit');
10
+ const cn_1 = require("../../utils/cn");
11
+ const ActionPanel_1 = require("../ActionPanel/ActionPanel");
12
+ const b = (0, cn_1.cn)('dashkit');
12
13
  function DashKitView(props) {
14
+ var _a;
13
15
  const context = react_1.default.useContext(DashKitContext_1.DashKitContext);
14
- const { registerManager, forwardedMetaRef } = context;
15
- return (react_1.default.createElement("div", { className: b({ theme: registerManager.settings.theme }) }, registerManager.settings.isMobile ? (react_1.default.createElement(MobileLayout_1.default, null)) : (react_1.default.createElement(GridLayout_1.default, { ref: forwardedMetaRef, overlayControls: props.overlayControls }))));
16
+ const { registerManager, forwardedMetaRef, editMode } = context;
17
+ return (react_1.default.createElement("div", { className: b({ theme: registerManager.settings.theme }) },
18
+ registerManager.settings.isMobile ? (react_1.default.createElement(MobileLayout_1.default, null)) : (react_1.default.createElement(GridLayout_1.default, { ref: forwardedMetaRef, overlayControls: props.overlayControls })),
19
+ Boolean(((_a = props.actionPanel) === null || _a === void 0 ? void 0 : _a.length) && editMode) && (react_1.default.createElement(ActionPanel_1.ActionPanel, { items: props.actionPanel }))));
16
20
  }
17
21
  const DashKitViewWithContext = (0, withContext_1.withContext)(DashKitView);
18
22
  const DashKitViewForwardedMeta = react_1.default.forwardRef((props, ref) => {
@@ -8,7 +8,7 @@
8
8
  left: 0;
9
9
  right: 0;
10
10
  border-radius: 3px;
11
- background-color: rgba(230, 230, 230, 0.2);
11
+ background-color: var(--g-color-base-generic);
12
12
  border: solid 1px rgba(0, 0, 0, 0.1);
13
13
  }
14
14
  .dashkit-grid-item__item {
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
5
  const prop_types_1 = tslib_1.__importDefault(require("prop-types"));
6
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
6
  const Item_1 = tslib_1.__importDefault(require("../Item/Item"));
8
7
  const DashKitContext_1 = require("../../context/DashKitContext");
8
+ const cn_1 = require("../../utils/cn");
9
9
  const OverlayControls_1 = tslib_1.__importDefault(require("../OverlayControls/OverlayControls"));
10
- const b = (0, bem_cn_lite_1.default)('dashkit-grid-item');
10
+ const b = (0, cn_1.cn)('dashkit-grid-item');
11
11
  class GridItem extends react_1.default.PureComponent {
12
12
  renderOverlay() {
13
13
  const { overlayControls } = this.props;
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
5
  const prop_types_1 = tslib_1.__importDefault(require("prop-types"));
7
6
  const prepareItem_1 = require("../../hocs/prepareItem");
8
- const b = (0, bem_cn_lite_1.default)('dashkit-item');
7
+ const cn_1 = require("../../utils/cn");
8
+ const b = (0, cn_1.cn)('dashkit-item');
9
9
  // TODO: getDerivedStateFromError и заглушка с ошибкой
10
10
  const Item = ({ registerManager, rendererProps, type, forwardedPluginRef }) => {
11
11
  if (!registerManager.check(type)) {
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const react_1 = tslib_1.__importDefault(require("react"));
5
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
5
  const Item_1 = tslib_1.__importDefault(require("../Item/Item"));
7
6
  const DashKitContext_1 = require("../../context/DashKitContext");
7
+ const cn_1 = require("../../utils/cn");
8
8
  const helpers_1 = require("./helpers");
9
- const b = (0, bem_cn_lite_1.default)('dashkit-mobile-layout');
9
+ const b = (0, cn_1.cn)('dashkit-mobile-layout');
10
10
  class MobileLayout extends react_1.default.PureComponent {
11
11
  constructor() {
12
12
  super(...arguments);
@@ -4,8 +4,9 @@
4
4
  }
5
5
  .dashkit-overlay-controls__default-controls {
6
6
  display: flex;
7
- background: var(--g-color-base-generic-ultralight);
7
+ background-color: var(--g-color-base-float);
8
8
  border-radius: var(--g-border-radius-m);
9
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.15);
9
10
  }
10
11
  .dashkit-overlay-controls_position_top_right {
11
12
  top: 7px;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OverlayControlsPosition = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
6
  const i18n_1 = tslib_1.__importDefault(require("../../i18n"));
8
7
  const noop_1 = tslib_1.__importDefault(require("lodash/noop"));
9
8
  const DashKitContext_1 = require("../../context/DashKitContext");
@@ -12,7 +11,8 @@ const constants_1 = require("../../constants");
12
11
  const DotsIcon_1 = require("../../icons/DotsIcon");
13
12
  const CogIcon_1 = require("../../icons/CogIcon");
14
13
  const CloseIcon_1 = require("../../icons/CloseIcon");
15
- const b = (0, bem_cn_lite_1.default)('dashkit-overlay-controls');
14
+ const cn_1 = require("../../utils/cn");
15
+ const b = (0, cn_1.cn)('dashkit-overlay-controls');
16
16
  var OverlayControlsPosition;
17
17
  (function (OverlayControlsPosition) {
18
18
  OverlayControlsPosition["TopRight"] = "top_right";
@@ -210,7 +210,7 @@ class OverlayControls extends react_1.default.Component {
210
210
  OverlayControls.contextType = DashKitContext_1.DashKitContext;
211
211
  OverlayControls.defaultProps = {
212
212
  position: OverlayControlsPosition.TopRight,
213
- view: 'normal',
213
+ view: 'flat',
214
214
  size: 'm',
215
215
  };
216
216
  exports.default = OverlayControls;
@@ -1,4 +1,2 @@
1
1
  export * from './DashKit';
2
- export { ActionsToolbar } from './ActionsToolbar/ActionsToolbar';
3
2
  export type { OverlayControlItem } from './OverlayControls/OverlayControls';
4
- export type { ActionsToolbarButton } from './ActionsToolbar/ActionsToolbar';
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ActionsToolbar = void 0;
4
3
  const tslib_1 = require("tslib");
5
4
  tslib_1.__exportStar(require("./DashKit"), exports);
6
- var ActionsToolbar_1 = require("./ActionsToolbar/ActionsToolbar");
7
- Object.defineProperty(exports, "ActionsToolbar", { enumerable: true, get: function () { return ActionsToolbar_1.ActionsToolbar; } });
@@ -172,7 +172,7 @@ function withContext(Component) {
172
172
  const WithContext = (props) => {
173
173
  const contextValue = useMemoStateContext(props);
174
174
  return (react_1.default.createElement(DashKitContext_1.DashKitContext.Provider, { value: contextValue },
175
- react_1.default.createElement(Component, { overlayControls: props.overlayControls })));
175
+ react_1.default.createElement(Component, { overlayControls: props.overlayControls, actionPanel: props.actionPanel })));
176
176
  };
177
177
  WithContext.displayName = `withContext(${Component.displayName || Component.name || 'Component'}`;
178
178
  return WithContext;
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluginText = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
6
  const uikit_1 = require("@gravity-ui/uikit");
8
7
  const i18n_1 = tslib_1.__importDefault(require("../../i18n"));
8
+ const cn_1 = require("../../utils/cn");
9
9
  // need to set markdown styles separately
10
10
  // for instance can use yfm-transform
11
- const b = (0, bem_cn_lite_1.default)('dashkit-plugin-text');
11
+ const b = (0, cn_1.cn)('dashkit-plugin-text');
12
12
  var LoadStatus;
13
13
  (function (LoadStatus) {
14
14
  LoadStatus["Pending"] = "pending";
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluginTitle = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
- const b = (0, bem_cn_lite_1.default)('dashkit-plugin-title');
6
+ const cn_1 = require("../../utils/cn");
7
+ const b = (0, cn_1.cn)('dashkit-plugin-title');
8
8
  class PluginTitle extends react_1.default.Component {
9
9
  render() {
10
10
  const { data } = this.props;
@@ -1,11 +1,13 @@
1
1
  import { OverlayCustomControlItem } from '../components/OverlayControls/OverlayControls';
2
2
  import { MenuItems } from '../constants';
3
3
  import type { ReactGridLayoutProps } from 'react-grid-layout';
4
+ import { ActionPanelItem } from '../components/ActionPanel/ActionPanel';
4
5
  export interface Settings {
5
6
  gridLayout?: ReactGridLayoutProps;
6
7
  theme?: string;
7
8
  isMobile?: boolean;
8
9
  menu?: Array<MenuItem>;
10
+ actionPanel?: ActionPanelItem[];
9
11
  }
10
12
  export type MenuItem = (typeof MenuItems)[keyof typeof MenuItems] | OverlayCustomControlItem;
11
13
  export interface SettingsProps {
@@ -0,0 +1 @@
1
+ export declare const cn: import("@bem-react/classname").ClassNameInitilizer;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cn = void 0;
4
+ const classname_1 = require("@bem-react/classname");
5
+ exports.cn = (0, classname_1.withNaming)({ e: '__', m: '_' });
@@ -0,0 +1,43 @@
1
+ .dashkit-action-panel {
2
+ background-color: var(--g-color-base-float);
3
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.15);
4
+ position: fixed;
5
+ bottom: 20px;
6
+ display: flex;
7
+ border-radius: 8px;
8
+ padding: 8px;
9
+ gap: 0;
10
+ left: 50%;
11
+ transform: translateX(-50%);
12
+ z-index: 1;
13
+ }
14
+ .dashkit-action-panel__item {
15
+ height: 68px;
16
+ width: 98px;
17
+ display: flex;
18
+ flex-direction: column;
19
+ justify-content: center;
20
+ align-items: center;
21
+ transition: 0.3s background-color ease-in-out;
22
+ border-radius: 6px;
23
+ padding: 0 12px;
24
+ box-sizing: border-box;
25
+ white-space: nowrap;
26
+ overflow: hidden;
27
+ }
28
+ .dashkit-action-panel__item:hover {
29
+ cursor: pointer;
30
+ background-color: var(--g-color-base-simple-hover);
31
+ }
32
+ .dashkit-action-panel__icon {
33
+ margin-bottom: 4px;
34
+ }
35
+ .dashkit-action-panel__title {
36
+ font-size: 13px;
37
+ font-weight: 400;
38
+ line-height: 16px;
39
+ max-width: 100%;
40
+ white-space: nowrap;
41
+ overflow: hidden;
42
+ text-overflow: ellipsis;
43
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import './ActionPanel.css';
3
+ export type ActionPanelItem = {
4
+ id: string;
5
+ icon: React.ReactNode;
6
+ title: string | React.ReactNode;
7
+ onClick?: () => void;
8
+ className?: string;
9
+ };
10
+ type ActionPanelProps = {
11
+ items: ActionPanelItem[];
12
+ };
13
+ export declare const ActionPanel: (props: ActionPanelProps) => JSX.Element;
14
+ export {};
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { cn } from '../../utils/cn';
3
+ import './ActionPanel.css';
4
+ const b = cn('dashkit-action-panel');
5
+ export const ActionPanel = (props) => {
6
+ return (React.createElement("div", { className: b() }, props.items.map((item) => {
7
+ return (React.createElement("div", { role: "button", className: b('item', item.className), key: `dk-action-panel-${item.id}`, onClick: item.onClick },
8
+ React.createElement("div", { className: b('icon') }, item.icon),
9
+ React.createElement("div", { className: b('title') }, item.title)));
10
+ })));
11
+ };
@@ -3,6 +3,7 @@ import GridLayout from '../GridLayout/GridLayout';
3
3
  import { SetConfigItem, Settings, SettingsProps, ContextProps, Plugin, SetItemOptions } from '../../typings';
4
4
  import { GlobalParams, Config, ConfigItem, ItemsStateAndParams } from '../../shared';
5
5
  import { OverlayControlItem } from '../OverlayControls/OverlayControls';
6
+ import { ActionPanelItem } from '../ActionPanel/ActionPanel';
6
7
  interface DashKitGeneralProps {
7
8
  config: Config;
8
9
  editMode: boolean;
@@ -21,6 +22,7 @@ interface DashKitDefaultProps {
21
22
  overlayControls?: Record<string, OverlayControlItem[]>;
22
23
  noOverlay?: boolean;
23
24
  draggableHandleClassName?: string;
25
+ actionPanel?: ActionPanelItem[];
24
26
  }
25
27
  export interface DashKitProps extends DashKitGeneralProps, Partial<DashKitDefaultProps> {
26
28
  }
@@ -1,16 +1,20 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
3
2
  import { DashKitContext } from '../../context/DashKitContext';
4
3
  import GridLayout from '../GridLayout/GridLayout';
5
4
  import MobileLayout from '../MobileLayout/MobileLayout';
6
5
  import { withContext } from '../../hocs/withContext';
7
6
  import { useCalcPropsLayout } from '../../hooks/useCalcLayout';
7
+ import { cn } from '../../utils/cn';
8
+ import { ActionPanel } from '../ActionPanel/ActionPanel';
8
9
  import './DashKitView.css';
9
- const b = block('dashkit');
10
+ const b = cn('dashkit');
10
11
  function DashKitView(props) {
12
+ var _a;
11
13
  const context = React.useContext(DashKitContext);
12
- const { registerManager, forwardedMetaRef } = context;
13
- return (React.createElement("div", { className: b({ theme: registerManager.settings.theme }) }, registerManager.settings.isMobile ? (React.createElement(MobileLayout, null)) : (React.createElement(GridLayout, { ref: forwardedMetaRef, overlayControls: props.overlayControls }))));
14
+ const { registerManager, forwardedMetaRef, editMode } = context;
15
+ return (React.createElement("div", { className: b({ theme: registerManager.settings.theme }) },
16
+ registerManager.settings.isMobile ? (React.createElement(MobileLayout, null)) : (React.createElement(GridLayout, { ref: forwardedMetaRef, overlayControls: props.overlayControls })),
17
+ Boolean(((_a = props.actionPanel) === null || _a === void 0 ? void 0 : _a.length) && editMode) && (React.createElement(ActionPanel, { items: props.actionPanel }))));
14
18
  }
15
19
  const DashKitViewWithContext = withContext(DashKitView);
16
20
  const DashKitViewForwardedMeta = React.forwardRef((props, ref) => {
@@ -8,7 +8,7 @@
8
8
  left: 0;
9
9
  right: 0;
10
10
  border-radius: 3px;
11
- background-color: rgba(230, 230, 230, 0.2);
11
+ background-color: var(--g-color-base-generic);
12
12
  border: solid 1px rgba(0, 0, 0, 0.1);
13
13
  }
14
14
  .dashkit-grid-item__item {
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import block from 'bem-cn-lite';
4
3
  import Item from '../Item/Item';
5
4
  import { DashKitContext } from '../../context/DashKitContext';
5
+ import { cn } from '../../utils/cn';
6
6
  import './GridItem.css';
7
7
  import OverlayControls from '../OverlayControls/OverlayControls';
8
- const b = block('dashkit-grid-item');
8
+ const b = cn('dashkit-grid-item');
9
9
  class GridItem extends React.PureComponent {
10
10
  renderOverlay() {
11
11
  const { overlayControls } = this.props;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
3
2
  import PropTypes from 'prop-types';
4
3
  import { prepareItem } from '../../hocs/prepareItem';
4
+ import { cn } from '../../utils/cn';
5
5
  import './Item.css';
6
- const b = block('dashkit-item');
6
+ const b = cn('dashkit-item');
7
7
  // TODO: getDerivedStateFromError и заглушка с ошибкой
8
8
  const Item = ({ registerManager, rendererProps, type, forwardedPluginRef }) => {
9
9
  if (!registerManager.check(type)) {
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
3
2
  import Item from '../Item/Item';
4
3
  import { DashKitContext } from '../../context/DashKitContext';
4
+ import { cn } from '../../utils/cn';
5
5
  import { getSortedConfigItems } from './helpers';
6
6
  import './MobileLayout.css';
7
- const b = block('dashkit-mobile-layout');
7
+ const b = cn('dashkit-mobile-layout');
8
8
  export default class MobileLayout extends React.PureComponent {
9
9
  constructor() {
10
10
  super(...arguments);
@@ -4,8 +4,9 @@
4
4
  }
5
5
  .dashkit-overlay-controls__default-controls {
6
6
  display: flex;
7
- background: var(--g-color-base-generic-ultralight);
7
+ background-color: var(--g-color-base-float);
8
8
  border-radius: var(--g-border-radius-m);
9
+ box-shadow: 0 0 15px rgba(0, 0, 0, 0.15);
9
10
  }
10
11
  .dashkit-overlay-controls_position_top_right {
11
12
  top: 7px;
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
3
2
  import i18n from '../../i18n';
4
3
  import noop from 'lodash/noop';
5
4
  import { DashKitContext } from '../../context/DashKitContext';
@@ -8,8 +7,9 @@ import { COPIED_WIDGET_STORE_KEY, MenuItems } from '../../constants';
8
7
  import { DotsIcon } from '../../icons/DotsIcon';
9
8
  import { CogIcon } from '../../icons/CogIcon';
10
9
  import { CloseIcon } from '../../icons/CloseIcon';
10
+ import { cn } from '../../utils/cn';
11
11
  import './OverlayControls.css';
12
- const b = block('dashkit-overlay-controls');
12
+ const b = cn('dashkit-overlay-controls');
13
13
  export var OverlayControlsPosition;
14
14
  (function (OverlayControlsPosition) {
15
15
  OverlayControlsPosition["TopRight"] = "top_right";
@@ -207,7 +207,7 @@ class OverlayControls extends React.Component {
207
207
  OverlayControls.contextType = DashKitContext;
208
208
  OverlayControls.defaultProps = {
209
209
  position: OverlayControlsPosition.TopRight,
210
- view: 'normal',
210
+ view: 'flat',
211
211
  size: 'm',
212
212
  };
213
213
  export default OverlayControls;
@@ -1,4 +1,2 @@
1
1
  export * from './DashKit';
2
- export { ActionsToolbar } from './ActionsToolbar/ActionsToolbar';
3
2
  export type { OverlayControlItem } from './OverlayControls/OverlayControls';
4
- export type { ActionsToolbarButton } from './ActionsToolbar/ActionsToolbar';
@@ -1,2 +1 @@
1
1
  export * from './DashKit';
2
- export { ActionsToolbar } from './ActionsToolbar/ActionsToolbar';
@@ -168,7 +168,7 @@ export function withContext(Component) {
168
168
  const WithContext = (props) => {
169
169
  const contextValue = useMemoStateContext(props);
170
170
  return (React.createElement(DashKitContext.Provider, { value: contextValue },
171
- React.createElement(Component, { overlayControls: props.overlayControls })));
171
+ React.createElement(Component, { overlayControls: props.overlayControls, actionPanel: props.actionPanel })));
172
172
  };
173
173
  WithContext.displayName = `withContext(${Component.displayName || Component.name || 'Component'}`;
174
174
  return WithContext;
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
3
2
  import { Loader, Button } from '@gravity-ui/uikit';
4
3
  import i18n from '../../i18n';
4
+ import { cn } from '../../utils/cn';
5
5
  import './Text.css';
6
6
  // need to set markdown styles separately
7
7
  // for instance can use yfm-transform
8
- const b = block('dashkit-plugin-text');
8
+ const b = cn('dashkit-plugin-text');
9
9
  var LoadStatus;
10
10
  (function (LoadStatus) {
11
11
  LoadStatus["Pending"] = "pending";
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
- import block from 'bem-cn-lite';
2
+ import { cn } from '../../utils/cn';
3
3
  import './Title.css';
4
- const b = block('dashkit-plugin-title');
4
+ const b = cn('dashkit-plugin-title');
5
5
  export class PluginTitle extends React.Component {
6
6
  render() {
7
7
  const { data } = this.props;
@@ -1,11 +1,13 @@
1
1
  import { OverlayCustomControlItem } from '../components/OverlayControls/OverlayControls';
2
2
  import { MenuItems } from '../constants';
3
3
  import type { ReactGridLayoutProps } from 'react-grid-layout';
4
+ import { ActionPanelItem } from '../components/ActionPanel/ActionPanel';
4
5
  export interface Settings {
5
6
  gridLayout?: ReactGridLayoutProps;
6
7
  theme?: string;
7
8
  isMobile?: boolean;
8
9
  menu?: Array<MenuItem>;
10
+ actionPanel?: ActionPanelItem[];
9
11
  }
10
12
  export type MenuItem = (typeof MenuItems)[keyof typeof MenuItems] | OverlayCustomControlItem;
11
13
  export interface SettingsProps {
@@ -0,0 +1 @@
1
+ export declare const cn: import("@bem-react/classname").ClassNameInitilizer;
@@ -0,0 +1,2 @@
1
+ import { withNaming } from '@bem-react/classname';
2
+ export const cn = withNaming({ e: '__', m: '_' });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/dashkit",
3
- "version": "6.0.0-beta.2",
3
+ "version": "6.1.0-beta.0",
4
4
  "description": "Library for rendering dashboard grid layout",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -41,18 +41,19 @@
41
41
  "react-grid-layout": "^1.3.4"
42
42
  },
43
43
  "peerDependencies": {
44
- "@gravity-ui/uikit": "5.0.0-beta.4",
45
- "bem-cn-lite": "^4.0.0",
44
+ "@bem-react/classname": "^1.6.0",
45
+ "@gravity-ui/uikit": "^5.0.0",
46
46
  "react": "^16.8.0 || ^17 || ^18"
47
47
  },
48
48
  "devDependencies": {
49
+ "@bem-react/classname": "^1.6.0",
49
50
  "@commitlint/cli": "^17.0.3",
50
51
  "@commitlint/config-conventional": "^17.0.3",
51
52
  "@gravity-ui/eslint-config": "^1.0.2",
52
53
  "@gravity-ui/prettier-config": "^1.0.1",
53
54
  "@gravity-ui/stylelint-config": "^1.0.1",
54
55
  "@gravity-ui/tsconfig": "^1.0.0",
55
- "@gravity-ui/uikit": "^5.0.0-beta.4",
56
+ "@gravity-ui/uikit": "^5.9.0",
56
57
  "@storybook/addon-essentials": "^7.0.18",
57
58
  "@storybook/addon-knobs": "^7.0.2",
58
59
  "@storybook/cli": "^7.0.18",
@@ -65,7 +66,6 @@
65
66
  "@types/react": "^18.0.27",
66
67
  "@types/react-grid-layout": "^1.3.2",
67
68
  "babel-jest": "^26.6.3",
68
- "bem-cn-lite": "^4.0.0",
69
69
  "copyfiles": "^2.4.1",
70
70
  "enzyme": "^3.11.0",
71
71
  "enzyme-adapter-react-16": "^1.15.6",
@@ -1,26 +0,0 @@
1
- .actions-toolbar {
2
- display: flex;
3
- position: fixed;
4
- width: fit-content;
5
- padding: 8px;
6
- border-radius: var(--g-border-radius-l);
7
- background-color: var(--g-color-base-background);
8
- box-shadow: 0px 5px 6px 0px var(--g-color-sfx-shadow);
9
- }
10
- .actions-toolbar__button {
11
- transition: all 0.2s ease;
12
- display: flex;
13
- flex-direction: column;
14
- justify-content: center;
15
- align-items: center;
16
- width: 98px;
17
- height: 68px;
18
- cursor: pointer;
19
- border-radius: var(--g-border-radius-s);
20
- }
21
- .actions-toolbar__button:hover {
22
- background-color: var(--g-color-base-generic);
23
- }
24
- .actions-toolbar__icon {
25
- margin-bottom: 10px;
26
- }
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import { IconProps } from '@gravity-ui/uikit';
3
- export interface ActionsToolbarProps {
4
- controls: ActionsToolbarButton[];
5
- className?: string;
6
- }
7
- export interface ActionsToolbarButton {
8
- icon: IconProps['data'];
9
- text: React.ReactNode;
10
- handler: () => void;
11
- iconSize?: number;
12
- }
13
- export declare const ActionsToolbar: React.FC<ActionsToolbarProps>;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ActionsToolbar = void 0;
4
- const tslib_1 = require("tslib");
5
- const react_1 = tslib_1.__importDefault(require("react"));
6
- const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
- const uikit_1 = require("@gravity-ui/uikit");
8
- const b = (0, bem_cn_lite_1.default)('actions-toolbar');
9
- const WidgetButton = ({ icon, text, handler }) => (react_1.default.createElement("div", { className: b('button'), onClick: handler },
10
- react_1.default.createElement(uikit_1.Icon, { size: '18', className: b('icon'), data: icon }),
11
- react_1.default.createElement(uikit_1.Text, { variant: 'body-1' }, text)));
12
- const ActionsToolbar = (props) => {
13
- return (react_1.default.createElement("div", { className: `${b()} ${props.className}` }, props.controls.map((button, index) => {
14
- return (react_1.default.createElement(WidgetButton, { key: index, icon: button.icon, text: button.text, handler: button.handler }));
15
- })));
16
- };
17
- exports.ActionsToolbar = ActionsToolbar;
@@ -1,26 +0,0 @@
1
- .actions-toolbar {
2
- display: flex;
3
- position: fixed;
4
- width: fit-content;
5
- padding: 8px;
6
- border-radius: var(--g-border-radius-l);
7
- background-color: var(--g-color-base-background);
8
- box-shadow: 0px 5px 6px 0px var(--g-color-sfx-shadow);
9
- }
10
- .actions-toolbar__button {
11
- transition: all 0.2s ease;
12
- display: flex;
13
- flex-direction: column;
14
- justify-content: center;
15
- align-items: center;
16
- width: 98px;
17
- height: 68px;
18
- cursor: pointer;
19
- border-radius: var(--g-border-radius-s);
20
- }
21
- .actions-toolbar__button:hover {
22
- background-color: var(--g-color-base-generic);
23
- }
24
- .actions-toolbar__icon {
25
- margin-bottom: 10px;
26
- }
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { IconProps } from '@gravity-ui/uikit';
3
- import './ActionsToolbar.css';
4
- export interface ActionsToolbarProps {
5
- controls: ActionsToolbarButton[];
6
- className?: string;
7
- }
8
- export interface ActionsToolbarButton {
9
- icon: IconProps['data'];
10
- text: React.ReactNode;
11
- handler: () => void;
12
- iconSize?: number;
13
- }
14
- export declare const ActionsToolbar: React.FC<ActionsToolbarProps>;
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import block from 'bem-cn-lite';
3
- import { Icon, Text } from '@gravity-ui/uikit';
4
- import './ActionsToolbar.css';
5
- const b = block('actions-toolbar');
6
- const WidgetButton = ({ icon, text, handler }) => (React.createElement("div", { className: b('button'), onClick: handler },
7
- React.createElement(Icon, { size: '18', className: b('icon'), data: icon }),
8
- React.createElement(Text, { variant: 'body-1' }, text)));
9
- export const ActionsToolbar = (props) => {
10
- return (React.createElement("div", { className: `${b()} ${props.className}` }, props.controls.map((button, index) => {
11
- return (React.createElement(WidgetButton, { key: index, icon: button.icon, text: button.text, handler: button.handler }));
12
- })));
13
- };