@skbkontur/side-menu 0.9.5 → 0.10.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.
Files changed (86) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +90 -9
  3. package/hooks/useActiveState.js +1 -1
  4. package/hooks/useNumberOfTextLinesInItem.d.ts +12 -1
  5. package/hooks/useNumberOfTextLinesInItem.js +45 -30
  6. package/hooks/useNumberOfTextLinesInSubItem.d.ts +2 -1
  7. package/hooks/useNumberOfTextLinesInSubItem.js +2 -2
  8. package/hooks/useOpenedState.js +1 -1
  9. package/hooks/useOpenedSubElementState.js +1 -1
  10. package/internal/themes/SideMenuTheme.d.ts +110 -0
  11. package/internal/themes/SideMenuTheme.js +234 -0
  12. package/lib/theming/ThemeHelpers.d.ts +18 -0
  13. package/lib/theming/ThemeHelpers.js +66 -0
  14. package/lib/theming/ThemeTypes.d.ts +3 -0
  15. package/lib/theming/ThemeTypes.js +0 -0
  16. package/lib/utils/memo.d.ts +1 -0
  17. package/lib/utils/memo.js +9 -0
  18. package/{utils → lib/utils}/scripts.d.ts +1 -2
  19. package/{utils → lib/utils}/scripts.js +0 -8
  20. package/package.json +2 -2
  21. package/src/SideMenu/SideMenu.js +40 -36
  22. package/src/SideMenu/SideMenu.styles.d.ts +12 -14
  23. package/src/SideMenu/SideMenu.styles.js +29 -31
  24. package/src/SideMenuAvatar/SideMenuAvatar.md +7 -0
  25. package/src/SideMenuBody/SideMenuBody.d.ts +1 -2
  26. package/src/SideMenuBody/SideMenuBody.js +16 -9
  27. package/src/SideMenuBody/SideMenuBody.md +7 -0
  28. package/src/SideMenuBody/SideMenuBody.styles.d.ts +2 -1
  29. package/src/SideMenuBody/SideMenuBody.styles.js +4 -4
  30. package/src/SideMenuContext.d.ts +3 -2
  31. package/src/SideMenuDivider/SideMenuDivider.md +7 -0
  32. package/src/SideMenuDivider/SideMenuDivider.styles.js +2 -1
  33. package/src/SideMenuDropdown/SideMenuDropdown.js +9 -8
  34. package/src/SideMenuDropdown/SideMenuDropdown.styles.d.ts +2 -1
  35. package/src/SideMenuDropdown/SideMenuDropdown.styles.js +4 -3
  36. package/src/SideMenuFooter/SideMenuFooter.js +6 -3
  37. package/src/SideMenuFooter/SideMenuFooter.md +8 -0
  38. package/src/SideMenuFooter/SideMenuFooter.styles.d.ts +3 -2
  39. package/src/SideMenuFooter/SideMenuFooter.styles.js +6 -6
  40. package/src/SideMenuHeader/SideMenuHeader.js +15 -6
  41. package/src/SideMenuHeader/SideMenuHeader.md +16 -0
  42. package/src/SideMenuHeader/SideMenuHeader.styles.d.ts +5 -5
  43. package/src/SideMenuHeader/SideMenuHeader.styles.js +12 -15
  44. package/src/SideMenuItem/SideMenuItem.md +63 -0
  45. package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.js +7 -1
  46. package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.md +7 -0
  47. package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.styles.d.ts +2 -1
  48. package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.styles.js +4 -3
  49. package/src/internal/Backdrop.styles.js +1 -1
  50. package/src/internal/Burger.js +4 -1
  51. package/src/internal/Burger.styles.d.ts +2 -1
  52. package/src/internal/Burger.styles.js +4 -3
  53. package/src/internal/ClickableElement.js +8 -5
  54. package/src/internal/ClickableElement.styles.d.ts +6 -5
  55. package/src/internal/ClickableElement.styles.js +13 -11
  56. package/src/internal/InnerBody.js +5 -2
  57. package/src/internal/InnerBody.styles.d.ts +2 -1
  58. package/src/internal/InnerBody.styles.js +4 -3
  59. package/src/internal/InnerSubMenu.js +1 -1
  60. package/src/internal/ItemContent/Avatar.js +5 -2
  61. package/src/internal/ItemContent/Avatar.styles.d.ts +2 -1
  62. package/src/internal/ItemContent/Avatar.styles.js +4 -3
  63. package/src/internal/ItemContent/Caption.js +9 -6
  64. package/src/internal/ItemContent/Caption.styles.d.ts +9 -6
  65. package/src/internal/ItemContent/Caption.styles.js +17 -14
  66. package/src/internal/ItemContent/Icon.js +19 -9
  67. package/src/internal/ItemContent/Icon.styles.d.ts +7 -6
  68. package/src/internal/ItemContent/Icon.styles.js +14 -13
  69. package/src/internal/ItemContent/ItemContent.js +36 -12
  70. package/src/internal/ItemContent/ItemContent.styles.d.ts +9 -9
  71. package/src/internal/ItemContent/ItemContent.styles.js +18 -22
  72. package/src/internal/ItemContent/Marker.js +6 -3
  73. package/src/internal/ItemContent/Marker.styles.d.ts +3 -2
  74. package/src/internal/ItemContent/Marker.styles.js +6 -5
  75. package/src/internal/NestedMenu.js +6 -3
  76. package/src/internal/NestedMenu.styles.d.ts +2 -1
  77. package/src/internal/NestedMenu.styles.js +4 -3
  78. package/src/internal/RightBorder.js +10 -9
  79. package/src/internal/RightBorder.styles.d.ts +3 -4
  80. package/src/internal/RightBorder.styles.js +7 -7
  81. package/src/internal/SeparatedSubMenu.js +13 -10
  82. package/src/internal/SeparatedSubMenu.styles.d.ts +9 -6
  83. package/src/internal/SeparatedSubMenu.styles.js +18 -17
  84. package/src/internal/SideMenuLogotype.js +14 -10
  85. package/src/internal/SideMenuLogotype.styles.d.ts +6 -3
  86. package/src/internal/SideMenuLogotype.styles.js +11 -10
@@ -1,9 +1,12 @@
1
+ import { SideMenuTheme } from '../../lib/theming/ThemeTypes';
2
+ export declare const customStyles: {
3
+ rootForMobiles(headerHeight?: number | undefined): string;
4
+ };
1
5
  export declare const jsStylesForSeparatedSubMenu: {
2
- root(): string;
3
- rootForMobiles(): string;
4
- rootWithoutOverlayForNarrowDesktop(): string;
5
- rootWithoutOverlay(): string;
6
- rootWithShadow(): string;
7
- contentWrapper(): string;
6
+ root(t: SideMenuTheme): string;
7
+ rootWithoutOverlayForNarrowDesktop(t: SideMenuTheme): string;
8
+ rootWithoutOverlay(t: SideMenuTheme): string;
9
+ rootWithShadow(t: SideMenuTheme): string;
10
+ contentWrapper(t: SideMenuTheme): string;
8
11
  contentWrapperForMobiles(): string;
9
12
  };
@@ -1,28 +1,29 @@
1
1
  import { __makeTemplateObject } from "tslib";
2
- import { css, memoizeStyle } from '@skbkontur/react-ui/lib/theming/Emotion';
3
- import { sideMenuBoxShadow, sideMenuMinimizedWidth, sideMenuStandardWidth } from '../SideMenu/SideMenu.styles';
2
+ import { css } from '@skbkontur/react-ui/lib/theming/Emotion';
3
+ import { memoizeStyle } from '../../lib/theming/ThemeHelpers';
4
4
  var styles = {
5
- root: function () {
6
- return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n top: 0;\n background: #fff;\n left: 100%;\n overflow: auto;\n justify-content: flex-start;\n border-right: 1px solid #e5e5e5;\n "], ["\n position: absolute;\n top: 0;\n background: #fff;\n left: 100%;\n overflow: auto;\n justify-content: flex-start;\n border-right: 1px solid #e5e5e5;\n "])));
5
+ root: function (t) {
6
+ return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n "], ["\n position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n "])), t.sideMenuSeparatedSubMenuBgColor, t.sideMenuSeparatedSubMenuBorderRightColor);
7
7
  },
8
- rootForMobiles: function () {
9
- var headerHeight = '68px';
10
- return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n height: calc(100vh - ", ");\n left: 0;\n top: ", ";\n "], ["\n height: calc(100vh - ", ");\n left: 0;\n top: ", ";\n "])), headerHeight, headerHeight);
8
+ rootWithoutOverlayForNarrowDesktop: function (t) {
9
+ return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n left: ", ";\n z-index: -1;\n "], ["\n left: ", ";\n z-index: -1;\n "])), t.sideMenuMinimizedWidth);
11
10
  },
12
- rootWithoutOverlayForNarrowDesktop: function () {
13
- return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n left: ", ";\n z-index: -1;\n "], ["\n left: ", ";\n z-index: -1;\n "])), sideMenuMinimizedWidth);
11
+ rootWithoutOverlay: function (t) {
12
+ return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n left: ", ";\n z-index: -1;\n "], ["\n left: ", ";\n z-index: -1;\n "])), t.sideMenuWidth);
14
13
  },
15
- rootWithoutOverlay: function () {
16
- return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n left: ", ";\n z-index: -1;\n "], ["\n left: ", ";\n z-index: -1;\n "])), sideMenuStandardWidth);
14
+ rootWithShadow: function (t) {
15
+ return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n box-shadow: ", ";\n clip-path: inset(0 -", " 0 0);\n border-right: none;\n "], ["\n box-shadow: ", ";\n clip-path: inset(0 -", " 0 0);\n border-right: none;\n "])), t.sideMenuBoxShadow, t.sideMenuBoxShadowBlurRadius);
17
16
  },
18
- rootWithShadow: function () {
19
- return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n box-shadow: ", ";\n clip-path: inset(0 -24px 0 0);\n border-right: none;\n "], ["\n box-shadow: ", ";\n clip-path: inset(0 -24px 0 0);\n border-right: none;\n "])), sideMenuBoxShadow);
20
- },
21
- contentWrapper: function () {
22
- return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n padding: 24px 16px;\n "], ["\n padding: 24px 16px;\n "])));
17
+ contentWrapper: function (t) {
18
+ return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n padding: ", " ", ";\n "], ["\n padding: ", " ", ";\n "])), t.sideMenuSeparatedSubMenuPaddingY, t.sideMenuSeparatedSubMenuPaddingX);
23
19
  },
24
20
  contentWrapperForMobiles: function () {
25
- return css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n padding-top: 0;\n "], ["\n padding-top: 0;\n "])));
21
+ return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n padding-top: 0;\n "], ["\n padding-top: 0;\n "])));
22
+ },
23
+ };
24
+ export var customStyles = {
25
+ rootForMobiles: function (headerHeight) {
26
+ return css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n height: calc(100vh - ", "px);\n left: 0;\n top: ", "px;\n "], ["\n height: calc(100vh - ", "px);\n left: 0;\n top: ", "px;\n "])), headerHeight, headerHeight);
26
27
  },
27
28
  };
28
29
  export var jsStylesForSeparatedSubMenu = memoizeStyle(styles);
@@ -1,10 +1,12 @@
1
1
  import { __assign, __rest } from "tslib";
2
2
  import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
3
3
  import { Logotype } from '@skbkontur/react-ui-addons/components/Logotype';
4
- import { jsStyles } from './SideMenuLogotype.styles';
4
+ import { jsStyles, sideMenuLogotypeIconSize } from './SideMenuLogotype.styles';
5
5
  import { SideMenuContext } from '../SideMenuContext';
6
6
  import { Burger } from './Burger';
7
7
  import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
8
+ import { getSideMenuTheme } from '../../lib/theming/ThemeHelpers';
9
+ import { ThemeContext } from '@skbkontur/react-ui';
8
10
  /**
9
11
  * Логотип
10
12
  *
@@ -14,14 +16,16 @@ var SideMenuLogotype = forwardRef(function (_a, ref) {
14
16
  var _b, _c;
15
17
  var productLogo = _a.productLogo, withWidget = _a.withWidget, konturLogo = _a.konturLogo, iconUrl = _a.iconUrl, rest = __rest(_a, ["productLogo", "withWidget", "konturLogo", "iconUrl"]);
16
18
  var context = useContext(SideMenuContext);
19
+ var theme = getSideMenuTheme(useContext(ThemeContext));
17
20
  var refLogotype = useRef(null);
18
21
  var _d = useState(28), size = _d[0], setSize = _d[1];
19
22
  useEffect(function () {
20
- var _a, _b, _c;
21
- (_a = context.setProductColor) === null || _a === void 0 ? void 0 : _a.call(context, productLogo === null || productLogo === void 0 ? void 0 : productLogo.props.color);
22
- var logotypeWidth = (_c = (_b = refLogotype.current) === null || _b === void 0 ? void 0 : _b.logotypeRef) === null || _c === void 0 ? void 0 : _c.clientWidth;
23
- if (logotypeWidth && logotypeWidth > 186) {
24
- //TODO 186 заменить на headerWrapper width после возврата к кастомизации
23
+ var _a, _b;
24
+ var logotypeWidth = (_b = (_a = refLogotype.current) === null || _a === void 0 ? void 0 : _a.logotypeRef) === null || _b === void 0 ? void 0 : _b.clientWidth;
25
+ var maxWidth = parseInt(theme.sideMenuWidth) -
26
+ 2 * parseInt(theme.sideMenuMarginX) -
27
+ parseInt(theme.sideMenuLogotypePaddingLeft);
28
+ if (logotypeWidth && logotypeWidth > maxWidth) {
25
29
  setSize(24);
26
30
  }
27
31
  }, []);
@@ -42,7 +46,7 @@ var SideMenuLogotype = forwardRef(function (_a, ref) {
42
46
  };
43
47
  var productName = getProductName();
44
48
  var getStaticIconPath = function () {
45
- return "https://s.kontur.ru/common-v2/icons-products/" + productName + "/" + productName + "-32.svg";
49
+ return "https://s.kontur.ru/common-v2/icons-products/" + productName + "/" + productName + "-" + parseInt(sideMenuLogotypeIconSize) + ".svg";
46
50
  };
47
51
  var getWidget = function (withWidget, isTouchScreen, showWidget) {
48
52
  if (withWidget !== undefined) {
@@ -55,12 +59,12 @@ var SideMenuLogotype = forwardRef(function (_a, ref) {
55
59
  };
56
60
  return (React.createElement("div", { className: jsStyles.root(), ref: ref },
57
61
  !context.isMobile && !context.isTablet && (React.createElement("img", { className: cx((_b = {},
58
- _b[jsStyles.iconHidden()] = true,
62
+ _b[jsStyles.iconHidden(theme)] = true,
59
63
  _b[jsStyles.icon()] = context.isMinimized,
60
64
  _b)), src: iconUrl || getStaticIconPath(), alt: productName })),
61
65
  React.createElement("div", { className: cx((_c = {},
62
- _c[jsStyles.logoWrapper()] = true,
63
- _c[jsStyles.logoWrapperForTabletsOrMobiles()] = context.isMobile || context.isTablet,
66
+ _c[jsStyles.logoWrapper(theme)] = true,
67
+ _c[jsStyles.logoWrapperForTabletsOrMobiles(theme)] = context.isMobile || context.isTablet,
64
68
  _c[jsStyles.logoWrapperHidden()] = context.isMinimized,
65
69
  _c)) },
66
70
  (context.isTablet || context.isMobile) && React.createElement(Burger, null),
@@ -1,8 +1,11 @@
1
+ import { SideMenuTheme } from '../../lib/theming/ThemeTypes';
2
+ export declare const sideMenuLogotypeIconSize = "32px";
3
+ export declare const sideMenuLogotypeGapBetweenIconAndLogo = "50px";
1
4
  export declare const jsStyles: {
2
5
  root(): string;
3
6
  icon(): string;
4
- iconHidden(): string;
5
- logoWrapper(): string;
6
- logoWrapperForTabletsOrMobiles(): string;
7
+ iconHidden(t: SideMenuTheme): string;
8
+ logoWrapper(t: SideMenuTheme): string;
9
+ logoWrapperForTabletsOrMobiles(t: SideMenuTheme): string;
7
10
  logoWrapperHidden(): string;
8
11
  };
@@ -1,8 +1,9 @@
1
1
  import { __makeTemplateObject } from "tslib";
2
- import { css, memoizeStyle } from '@skbkontur/react-ui/lib/theming/Emotion';
2
+ import { css } from '@skbkontur/react-ui/lib/theming/Emotion';
3
3
  import { transitionDuration } from '../SideMenu/SideMenu';
4
- var iconSize = 32;
5
- var gapBetweenIconAndLogo = 50;
4
+ import { memoizeStyle } from '../../lib/theming/ThemeHelpers';
5
+ export var sideMenuLogotypeIconSize = '32px';
6
+ export var sideMenuLogotypeGapBetweenIconAndLogo = '50px';
6
7
  var styles = {
7
8
  root: function () {
8
9
  return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n "], ["\n display: flex;\n "])));
@@ -10,17 +11,17 @@ var styles = {
10
11
  icon: function () {
11
12
  return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n left: 0;\n opacity: 1;\n "], ["\n left: 0;\n opacity: 1;\n "])));
12
13
  },
13
- iconHidden: function () {
14
- return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n left: -", "px;\n display: block;\n padding-left: 4px;\n opacity: 0;\n transition: all ", "ms ease-out;\n "], ["\n position: relative;\n left: -", "px;\n display: block;\n padding-left: 4px;\n opacity: 0;\n transition: all ", "ms ease-out;\n "])), gapBetweenIconAndLogo, transitionDuration);
14
+ iconHidden: function (t) {
15
+ return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: relative;\n left: -", ";\n display: block;\n padding-left: ", ";\n opacity: 0;\n transition: all ", "ms ease-out;\n "], ["\n position: relative;\n left: -", ";\n display: block;\n padding-left: ", ";\n opacity: 0;\n transition: all ", "ms ease-out;\n "])), sideMenuLogotypeGapBetweenIconAndLogo, t.sideMenuLogotypeHiddenIconPaddingLeft, transitionDuration);
15
16
  },
16
- logoWrapper: function () {
17
- return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: relative;\n left: -", "px;\n padding-top: 2px;\n padding-bottom: 6px;\n padding-left: 8px;\n display: flex;\n opacity: 1;\n transition: all ", "ms ease-out;\n "], ["\n position: relative;\n left: -", "px;\n padding-top: 2px;\n padding-bottom: 6px;\n padding-left: 8px;\n display: flex;\n opacity: 1;\n transition: all ", "ms ease-out;\n "])), iconSize, transitionDuration);
17
+ logoWrapper: function (t) {
18
+ return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n position: relative;\n left: -", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n display: flex;\n opacity: 1;\n transition: all ", "ms ease-out;\n "], ["\n position: relative;\n left: -", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n display: flex;\n opacity: 1;\n transition: all ", "ms ease-out;\n "])), sideMenuLogotypeIconSize, t.sideMenuLogotypePaddingTop, t.sideMenuLogotypePaddingBottom, t.sideMenuLogotypePaddingLeft, transitionDuration);
18
19
  },
19
- logoWrapperForTabletsOrMobiles: function () {
20
- return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n padding-top: 8px;\n padding-bottom: 8px;\n left: 0;\n "], ["\n padding-top: 8px;\n padding-bottom: 8px;\n left: 0;\n "])));
20
+ logoWrapperForTabletsOrMobiles: function (t) {
21
+ return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n padding-top: ", ";\n padding-bottom: ", ";\n left: 0;\n "], ["\n padding-top: ", ";\n padding-bottom: ", ";\n left: 0;\n "])), t.sideMenuLogotypePaddingYForTouchScreens, t.sideMenuLogotypePaddingYForTouchScreens);
21
22
  },
22
23
  logoWrapperHidden: function () {
23
- return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n left: ", "px;\n opacity: 0;\n "], ["\n left: ", "px;\n opacity: 0;\n "])), gapBetweenIconAndLogo - iconSize);
24
+ return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n left: ", "px;\n opacity: 0;\n "], ["\n left: ", "px;\n opacity: 0;\n "])), parseInt(sideMenuLogotypeGapBetweenIconAndLogo) - parseInt(sideMenuLogotypeIconSize));
24
25
  },
25
26
  };
26
27
  export var jsStyles = memoizeStyle(styles);