@alfalab/core-components-navigation-bar 0.1.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 (70) hide show
  1. package/Component.d.ts +4 -0
  2. package/Component.js +131 -0
  3. package/components/back-arrow-addon/Component.d.ts +26 -0
  4. package/components/back-arrow-addon/Component.js +32 -0
  5. package/components/back-arrow-addon/index.css +69 -0
  6. package/components/back-arrow-addon/index.d.ts +1 -0
  7. package/components/back-arrow-addon/index.js +14 -0
  8. package/components/closer/Component.d.ts +35 -0
  9. package/components/closer/Component.js +30 -0
  10. package/components/closer/index.css +41 -0
  11. package/components/closer/index.d.ts +1 -0
  12. package/components/closer/index.js +13 -0
  13. package/cssm/Component.d.ts +4 -0
  14. package/cssm/Component.js +132 -0
  15. package/cssm/components/back-arrow-addon/Component.d.ts +26 -0
  16. package/cssm/components/back-arrow-addon/Component.js +31 -0
  17. package/cssm/components/back-arrow-addon/index.d.ts +1 -0
  18. package/cssm/components/back-arrow-addon/index.js +15 -0
  19. package/cssm/components/back-arrow-addon/index.module.css +68 -0
  20. package/cssm/components/closer/Component.d.ts +35 -0
  21. package/cssm/components/closer/Component.js +29 -0
  22. package/cssm/components/closer/index.d.ts +1 -0
  23. package/cssm/components/closer/index.js +14 -0
  24. package/cssm/components/closer/index.module.css +40 -0
  25. package/cssm/index.d.ts +3 -0
  26. package/cssm/index.js +23 -0
  27. package/cssm/index.module.css +108 -0
  28. package/cssm/types.d.ts +113 -0
  29. package/cssm/types.js +2 -0
  30. package/esm/Component.d.ts +4 -0
  31. package/esm/Component.js +124 -0
  32. package/esm/components/back-arrow-addon/Component.d.ts +26 -0
  33. package/esm/components/back-arrow-addon/Component.js +25 -0
  34. package/esm/components/back-arrow-addon/index.css +69 -0
  35. package/esm/components/back-arrow-addon/index.d.ts +1 -0
  36. package/esm/components/back-arrow-addon/index.js +8 -0
  37. package/esm/components/closer/Component.d.ts +35 -0
  38. package/esm/components/closer/Component.js +23 -0
  39. package/esm/components/closer/index.css +41 -0
  40. package/esm/components/closer/index.d.ts +1 -0
  41. package/esm/components/closer/index.js +7 -0
  42. package/esm/index.css +108 -0
  43. package/esm/index.d.ts +3 -0
  44. package/esm/index.js +13 -0
  45. package/esm/types.d.ts +113 -0
  46. package/esm/types.js +1 -0
  47. package/index.css +108 -0
  48. package/index.d.ts +3 -0
  49. package/index.js +20 -0
  50. package/modern/Component.d.ts +4 -0
  51. package/modern/Component.js +125 -0
  52. package/modern/components/back-arrow-addon/Component.d.ts +26 -0
  53. package/modern/components/back-arrow-addon/Component.js +22 -0
  54. package/modern/components/back-arrow-addon/index.css +69 -0
  55. package/modern/components/back-arrow-addon/index.d.ts +1 -0
  56. package/modern/components/back-arrow-addon/index.js +7 -0
  57. package/modern/components/closer/Component.d.ts +35 -0
  58. package/modern/components/closer/Component.js +20 -0
  59. package/modern/components/closer/index.css +41 -0
  60. package/modern/components/closer/index.d.ts +1 -0
  61. package/modern/components/closer/index.js +6 -0
  62. package/modern/index.css +108 -0
  63. package/modern/index.d.ts +3 -0
  64. package/modern/index.js +12 -0
  65. package/modern/types.d.ts +113 -0
  66. package/modern/types.js +1 -0
  67. package/package.json +24 -0
  68. package/send-stats.js +82 -0
  69. package/types.d.ts +113 -0
  70. package/types.js +2 -0
package/Component.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+ import { NavigationBarProps } from "./types";
3
+ declare const NavigationBar: FC<NavigationBarProps>;
4
+ export { NavigationBar };
package/Component.js ADDED
@@ -0,0 +1,131 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var cn = require('classnames');
6
+ var components_backArrowAddon_Component = require('./components/back-arrow-addon/Component.js');
7
+ var components_closer_Component = require('./components/closer/Component.js');
8
+ require('@alfalab/core-components-button');
9
+ require('@alfalab/core-components-typography');
10
+ require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
11
+ require('@alfalab/icons-glyph/ArrowLeftMIcon');
12
+ require('@alfalab/core-components-icon-button');
13
+ require('@alfalab/icons-glyph/CrossHeavyMIcon');
14
+ require('@alfalab/icons-glyph/CrossMIcon');
15
+
16
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
17
+
18
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
19
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
20
+
21
+ var getDataTestId = function (dataTestId, element) {
22
+ var elementPart = element ? "-".concat(element.toLowerCase()) : '';
23
+ return dataTestId ? "".concat(dataTestId).concat(elementPart) : undefined;
24
+ };
25
+
26
+ var styles = {"header":"navigation-bar__header_1ssvj","backgroundImage":"navigation-bar__backgroundImage_1ssvj","mainLine":"navigation-bar__mainLine_1ssvj","mainLineSticky":"navigation-bar__mainLineSticky_1ssvj","mainLineWithImageBg":"navigation-bar__mainLineWithImageBg_1ssvj","content":"navigation-bar__content_1ssvj","withBothAddons":"navigation-bar__withBothAddons_1ssvj","withCompactTitle":"navigation-bar__withCompactTitle_1ssvj","children":"navigation-bar__children_1ssvj","title":"navigation-bar__title_1ssvj","contentOnBotDesktop":"navigation-bar__contentOnBotDesktop_1ssvj","contentOnBotMobile":"navigation-bar__contentOnBotMobile_1ssvj","subtitle":"navigation-bar__subtitle_1ssvj","addonsWrapper":"navigation-bar__addonsWrapper_1ssvj","rightAddons":"navigation-bar__rightAddons_1ssvj","addon":"navigation-bar__addon_1ssvj","bottomAddons":"navigation-bar__bottomAddons_1ssvj","closer":"navigation-bar__closer_1ssvj","left":"navigation-bar__left_1ssvj","center":"navigation-bar__center_1ssvj","trim":"navigation-bar__trim_1ssvj"};
27
+ require('./index.css')
28
+
29
+ var ADDONS_HEIGHT = 48;
30
+ var NavigationBar = function (_a) {
31
+ var _b, _c, _d;
32
+ var addonClassName = _a.addonClassName, className = _a.className, contentClassName = _a.contentClassName, closerClassName = _a.closerClassName, leftAddons = _a.leftAddons, rightAddons = _a.rightAddons, bottomAddons = _a.bottomAddons, bottomAddonsClassName = _a.bottomAddonsClassName, children = _a.children, _e = _a.align, align = _e === void 0 ? 'left' : _e, _f = _a.trim, trim = _f === void 0 ? true : _f, title = _a.title, _g = _a.titleSize, titleSize = _g === void 0 ? 'default' : _g, subtitle = _a.subtitle, hasCloser = _a.hasCloser, hasBackButton = _a.hasBackButton, backButtonClassName = _a.backButtonClassName, dataTestId = _a.dataTestId, imageUrl = _a.imageUrl, closerIcon = _a.closerIcon, onClose = _a.onClose, view = _a.view, parentRef = _a.parentRef, sticky = _a.sticky, onBack = _a.onBack;
33
+ var _h = React.useState(0), scrollTop = _h[0], setScrollTop = _h[1];
34
+ var bottomContentRef = React.useRef(null);
35
+ var headerRef = React.useRef(null);
36
+ var mainLinePaddingTopRef = React.useRef('0px');
37
+ var compactTitle = view === 'mobile' && titleSize === 'compact';
38
+ var hasLeftPart = Boolean(leftAddons || hasBackButton);
39
+ var hasRightPart = Boolean(rightAddons || hasCloser);
40
+ var hasContent = Boolean(title || children);
41
+ var withAnimation = Boolean(view === 'mobile' && hasLeftPart && sticky && !compactTitle);
42
+ var showContentOnTop = hasContent && (compactTitle || !hasLeftPart);
43
+ var showContentOnBot = hasContent && !compactTitle && hasLeftPart;
44
+ var showStaticContentOnTop = !withAnimation && showContentOnTop;
45
+ var showStaticContentOnBot = !withAnimation && showContentOnBot;
46
+ var showAnimatedContentOnTop = withAnimation && showContentOnBot && scrollTop > ADDONS_HEIGHT;
47
+ var showAnimatedContentOnBot = withAnimation && showContentOnBot;
48
+ var headerPaddingTop = mainLinePaddingTopRef.current;
49
+ React.useEffect(function () {
50
+ var parent = parentRef === null || parentRef === void 0 ? void 0 : parentRef.current;
51
+ var handleScroll = function (ev) {
52
+ var divElement = ev.target;
53
+ setScrollTop(divElement.scrollTop);
54
+ };
55
+ if (withAnimation && headerRef.current) {
56
+ mainLinePaddingTopRef.current = getComputedStyle(headerRef.current).paddingTop;
57
+ }
58
+ if (withAnimation && parent) {
59
+ parent.addEventListener('scroll', handleScroll);
60
+ }
61
+ return function () { return parent === null || parent === void 0 ? void 0 : parent.removeEventListener('scroll', handleScroll); };
62
+ }, [parentRef, withAnimation]);
63
+ var renderBackButton = function () {
64
+ var textOpacity = 1;
65
+ if (withAnimation) {
66
+ var height = hasContent ? ADDONS_HEIGHT : ADDONS_HEIGHT / 2;
67
+ textOpacity = Math.max(0, 1 - scrollTop / height);
68
+ }
69
+ else if (compactTitle) {
70
+ textOpacity = 0;
71
+ }
72
+ return (React__default.default.createElement("div", { className: cn__default.default(styles.addon, backButtonClassName) },
73
+ React__default.default.createElement(components_backArrowAddon_Component.BackArrowAddon, { textOpacity: textOpacity, view: view, onClick: onBack, "data-test-id": getDataTestId(dataTestId, 'back-button') })));
74
+ };
75
+ var renderContent = function (args) {
76
+ var _a;
77
+ if (args === void 0) { args = {}; }
78
+ var extraClassName = args.extraClassName, ref = args.ref, style = args.style, hidden = args.hidden;
79
+ return (React__default.default.createElement("div", { style: tslib.__assign(tslib.__assign({}, style), { visibility: hidden ? 'hidden' : 'visible' }), ref: ref, className: cn__default.default(styles.content, extraClassName, contentClassName, styles[align], (_a = {},
80
+ _a[styles.trim] = trim,
81
+ _a[styles.withCompactTitle] = view === 'mobile' && compactTitle && hasContent,
82
+ _a)), "aria-hidden": hidden },
83
+ children && React__default.default.createElement("div", { className: styles.children }, children),
84
+ title && (React__default.default.createElement("div", { className: styles.title, "data-test-id": hidden ? undefined : getDataTestId(dataTestId, 'title') }, title)),
85
+ compactTitle && subtitle && React__default.default.createElement("div", { className: styles.subtitle }, subtitle)));
86
+ };
87
+ var renderCloser = function () { return (React__default.default.createElement("div", { className: cn__default.default(styles.addon, styles.closer, closerClassName) },
88
+ React__default.default.createElement(components_closer_Component.Closer, { view: view, icon: closerIcon, dataTestId: getDataTestId(dataTestId, 'closer'), onClose: onClose }))); };
89
+ return (React__default.default.createElement("div", { ref: headerRef, className: cn__default.default(styles.header, className, (_b = {}, _b[styles.backgroundImage] = imageUrl, _b)), "data-test-id": getDataTestId(dataTestId), style: tslib.__assign(tslib.__assign({}, (imageUrl && { backgroundImage: "url(".concat(imageUrl, ")") })), (withAnimation &&
90
+ bottomContentRef.current && { top: -bottomContentRef.current.scrollHeight })) },
91
+ React__default.default.createElement("div", { className: cn__default.default(styles.mainLine, (_c = {},
92
+ _c[styles.mainLineSticky] = withAnimation,
93
+ _c[styles.mainLineWithImageBg] = imageUrl,
94
+ _c)), style: tslib.__assign({}, (withAnimation
95
+ ? {
96
+ marginTop: "-".concat(headerPaddingTop),
97
+ paddingTop: headerPaddingTop,
98
+ }
99
+ : null)) },
100
+ hasLeftPart && (React__default.default.createElement("div", { className: styles.addonsWrapper },
101
+ hasBackButton && renderBackButton(),
102
+ leftAddons && (React__default.default.createElement("div", { className: cn__default.default(styles.addon, addonClassName) }, leftAddons)))),
103
+ showStaticContentOnTop && renderContent(),
104
+ showAnimatedContentOnTop &&
105
+ renderContent({
106
+ extraClassName: styles.withBothAddons,
107
+ style: {
108
+ opacity: Math.min(1, (scrollTop - ADDONS_HEIGHT) / ADDONS_HEIGHT),
109
+ },
110
+ }),
111
+ hasRightPart && (React__default.default.createElement("div", { className: cn__default.default(styles.addonsWrapper, styles.rightAddons) },
112
+ rightAddons && (React__default.default.createElement("div", { className: cn__default.default(styles.addon, addonClassName) }, rightAddons)),
113
+ hasCloser && renderCloser()))),
114
+ showAnimatedContentOnBot &&
115
+ renderContent({
116
+ ref: bottomContentRef,
117
+ extraClassName: styles.underAddons,
118
+ style: { opacity: Math.max(0, 1 - scrollTop / ADDONS_HEIGHT) },
119
+ hidden: scrollTop / ADDONS_HEIGHT > 1,
120
+ }),
121
+ showStaticContentOnBot &&
122
+ renderContent({
123
+ extraClassName: cn__default.default((_d = {},
124
+ _d[styles.contentOnBotDesktop] = view === 'desktop',
125
+ _d[styles.contentOnBotMobile] = view === 'mobile',
126
+ _d)),
127
+ }),
128
+ bottomAddons && (React__default.default.createElement("div", { className: cn__default.default(styles.bottomAddons, bottomAddonsClassName) }, bottomAddons))));
129
+ };
130
+
131
+ exports.NavigationBar = NavigationBar;
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ interface BackArrowAddonProps extends React.HTMLAttributes<HTMLButtonElement> {
4
+ /**
5
+ * Текст после иконки
6
+ */
7
+ text?: string;
8
+ /**
9
+ * Дополнительный класс
10
+ */
11
+ className?: string;
12
+ /**
13
+ * Вид компонента
14
+ */
15
+ view: 'mobile' | 'desktop';
16
+ /**
17
+ * Прозрачность текста
18
+ */
19
+ textOpacity?: number;
20
+ /**
21
+ * Обработчик клика
22
+ */
23
+ onClick?: () => void;
24
+ }
25
+ declare const BackArrowAddon: React.FC<BackArrowAddonProps>;
26
+ export { BackArrowAddonProps, BackArrowAddon };
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var cn = require('classnames');
6
+ var coreComponentsButton = require('@alfalab/core-components-button');
7
+ var coreComponentsTypography = require('@alfalab/core-components-typography');
8
+ var ArrowLeftMediumMIcon = require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
9
+ var ArrowLeftMIcon = require('@alfalab/icons-glyph/ArrowLeftMIcon');
10
+
11
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
12
+
13
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
14
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
15
+
16
+ var styles = {"component":"navigation-bar__component_17er7","mobileComponent":"navigation-bar__mobileComponent_17er7","flex":"navigation-bar__flex_17er7","iconWrapper":"navigation-bar__iconWrapper_17er7","text":"navigation-bar__text_17er7","mobileWrapper":"navigation-bar__mobileWrapper_17er7"};
17
+ require('./index.css')
18
+
19
+ var BackArrowAddon = function (_a) {
20
+ var _b, _c;
21
+ var _d = _a.text, text = _d === void 0 ? 'Назад' : _d, onClick = _a.onClick, className = _a.className, _e = _a.textOpacity, textOpacity = _e === void 0 ? 1 : _e, view = _a.view, htmlAttributes = tslib.__rest(_a, ["text", "onClick", "className", "textOpacity", "view"]);
22
+ var Icon = view === 'desktop' ? ArrowLeftMediumMIcon.ArrowLeftMediumMIcon : ArrowLeftMIcon.ArrowLeftMIcon;
23
+ return (React__default.default.createElement(coreComponentsButton.Button, tslib.__assign({ view: 'ghost', size: view === 'mobile' ? 'xxs' : 's', onClick: onClick, "aria-label": '\u043D\u0430\u0437\u0430\u0434', className: cn__default.default(styles.component, (_b = {}, _b[styles.mobileComponent] = view === 'mobile', _b), className) }, htmlAttributes),
24
+ React__default.default.createElement("div", { className: styles.flex },
25
+ React__default.default.createElement("div", { className: cn__default.default(styles.iconWrapper, (_c = {},
26
+ _c[styles.mobileWrapper] = view === 'mobile',
27
+ _c)) },
28
+ React__default.default.createElement(Icon, null)),
29
+ textOpacity > 0 && (React__default.default.createElement(coreComponentsTypography.Typography.Text, { className: styles.text, view: view === 'desktop' ? 'primary-large' : 'component', weight: 'medium', style: { opacity: textOpacity } }, text)))));
30
+ };
31
+
32
+ exports.BackArrowAddon = BackArrowAddon;
@@ -0,0 +1,69 @@
1
+ /* hash: 18yu8 */
2
+ :root {
3
+ } /* deprecated */ :root {
4
+ --color-light-graphic-primary: #0b1f35;
5
+ --color-light-graphic-secondary: #6d7986;
6
+ --color-light-specialbg-secondary-transparent: rgba(11, 31, 53, 0.05);
7
+ --color-light-bg-primary-alpha-40: rgba(255, 255, 255, 0.4);
8
+ --color-light-graphic-primary-tint-20: rgb(60, 76, 93);
9
+ --color-light-graphic-primary-tint-30: rgb(84, 98, 114);
10
+ } :root {
11
+ } :root {
12
+ } :root {
13
+
14
+ /* Hard */
15
+
16
+ /* Up */
17
+
18
+ /* Hard up */
19
+ } :root {
20
+ --border-radius-circle: 50%;
21
+ --border-radius-pill: 99px;
22
+ } :root {
23
+ --gap-xs: 8px;
24
+ --gap-s: 12px;
25
+ } :root {
26
+ } :root {
27
+ } .navigation-bar__component_17er7 {
28
+ height: 100%;
29
+ background: var(--color-light-bg-primary-alpha-40);
30
+ -webkit-backdrop-filter: blur(10px);
31
+ backdrop-filter: blur(10px);
32
+ border-radius: var(--border-radius-pill)
33
+ } .navigation-bar__component_17er7 svg > path {
34
+ transition: fill 0.2s ease;
35
+ fill: var(--color-light-graphic-primary);
36
+ } .navigation-bar__component_17er7:hover svg > path {
37
+ fill: var(--color-light-graphic-primary-tint-20);
38
+ } .navigation-bar__component_17er7:active svg > path {
39
+ fill: var(--color-light-graphic-primary-tint-30);
40
+ } .navigation-bar__mobileComponent_17er7 {
41
+ height: 32px;
42
+ margin: 0 var(--gap-xs);
43
+ -webkit-backdrop-filter: none;
44
+ backdrop-filter: none;
45
+ background: none;
46
+ } .navigation-bar__flex_17er7 {
47
+ display: flex;
48
+ align-items: center;
49
+ } .navigation-bar__iconWrapper_17er7 {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ height: 48px;
54
+ margin: 0 var(--gap-xs) 0 var(--gap-s);
55
+ border-radius: var(--border-radius-circle)
56
+ } .navigation-bar__iconWrapper_17er7 + .navigation-bar__text_17er7 {
57
+ margin-right: var(--gap-s);
58
+ } .navigation-bar__mobileWrapper_17er7 {
59
+ width: 32px;
60
+ height: 32px;
61
+ background: var(--color-light-specialbg-secondary-transparent);
62
+ -webkit-backdrop-filter: blur(10px);
63
+ backdrop-filter: blur(10px);
64
+ margin: 0
65
+ } .navigation-bar__mobileWrapper_17er7 + .navigation-bar__text_17er7 {
66
+ margin: 0 var(--gap-s) 0 var(--gap-xs);
67
+ } .navigation-bar__mobileWrapper_17er7 svg > path {
68
+ fill: var(--color-light-graphic-secondary);
69
+ }
@@ -0,0 +1 @@
1
+ export * from "./Component";
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var components_backArrowAddon_Component = require('./Component.js');
4
+ require('tslib');
5
+ require('react');
6
+ require('classnames');
7
+ require('@alfalab/core-components-button');
8
+ require('@alfalab/core-components-typography');
9
+ require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
10
+ require('@alfalab/icons-glyph/ArrowLeftMIcon');
11
+
12
+
13
+
14
+ exports.BackArrowAddon = components_backArrowAddon_Component.BackArrowAddon;
@@ -0,0 +1,35 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { ButtonHTMLAttributes, ElementType, FC } from "react";
4
+ interface CloserProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
+ /**
6
+ * Вид компонента
7
+ */
8
+ view: 'desktop' | 'mobile';
9
+ /**
10
+ * Дополнительный класс
11
+ */
12
+ className?: string;
13
+ /**
14
+ * Позиция крестика
15
+ */
16
+ align?: 'left' | 'right';
17
+ /**
18
+ * Фиксирует крестик
19
+ */
20
+ sticky?: boolean;
21
+ /**
22
+ * Иконка
23
+ */
24
+ icon?: ElementType;
25
+ /**
26
+ * Идентификатор для систем автоматизированного тестирования
27
+ */
28
+ dataTestId?: string;
29
+ /**
30
+ * Коллбэк закрытия.
31
+ */
32
+ onClose?: (event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick') => void;
33
+ }
34
+ declare const Closer: FC<CloserProps>;
35
+ export { CloserProps, Closer };
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var cn = require('classnames');
6
+ var coreComponentsIconButton = require('@alfalab/core-components-icon-button');
7
+ var CrossHeavyMIcon = require('@alfalab/icons-glyph/CrossHeavyMIcon');
8
+ var CrossMIcon = require('@alfalab/icons-glyph/CrossMIcon');
9
+
10
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
13
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
14
+
15
+ var styles = {"closer":"navigation-bar__closer_8p6nd","button":"navigation-bar__button_8p6nd","mobile":"navigation-bar__mobile_8p6nd","sticky":"navigation-bar__sticky_8p6nd"};
16
+ require('./index.css')
17
+
18
+ var Closer = function (_a) {
19
+ var _b, _c;
20
+ var view = _a.view, className = _a.className, sticky = _a.sticky, _d = _a.icon, icon = _d === void 0 ? view === 'desktop' ? CrossHeavyMIcon.CrossHeavyMIcon : CrossMIcon.CrossMIcon : _d, dataTestId = _a.dataTestId, onClose = _a.onClose, restProps = tslib.__rest(_a, ["view", "className", "sticky", "icon", "dataTestId", "onClose"]);
21
+ var handleClick = function (event) {
22
+ onClose === null || onClose === void 0 ? void 0 : onClose(event, 'closerClick');
23
+ };
24
+ return (React__default.default.createElement("div", { className: cn__default.default(styles.closer, className, (_b = {},
25
+ _b[styles.sticky] = sticky,
26
+ _b)) },
27
+ React__default.default.createElement(coreComponentsIconButton.IconButton, tslib.__assign({ size: view === 'desktop' ? 's' : 'xs', className: cn__default.default(styles.button, (_c = {}, _c[styles.mobile] = view === 'mobile', _c)), "aria-label": '\u0437\u0430\u043A\u0440\u044B\u0442\u044C', onClick: handleClick, icon: icon, dataTestId: dataTestId }, restProps))));
28
+ };
29
+
30
+ exports.Closer = Closer;
@@ -0,0 +1,41 @@
1
+ /* hash: tfros */
2
+ :root {
3
+ } /* deprecated */ :root {
4
+ --color-light-graphic-primary: #0b1f35;
5
+ --color-light-graphic-secondary: #6d7986;
6
+ --color-light-specialbg-secondary-transparent: rgba(11, 31, 53, 0.05);
7
+ --color-light-bg-primary-alpha-40: rgba(255, 255, 255, 0.4);
8
+ } :root {
9
+ } :root {
10
+ } :root {
11
+
12
+ /* Hard */
13
+
14
+ /* Up */
15
+
16
+ /* Hard up */
17
+ } :root {
18
+ } :root {
19
+ } :root {
20
+ } :root {
21
+ } .navigation-bar__closer_8p6nd {
22
+ flex-shrink: 0;
23
+ width: 48px;
24
+ height: 48px;
25
+ margin-left: auto;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ } .navigation-bar__button_8p6nd {
30
+ background: var(--color-light-bg-primary-alpha-40);
31
+ -webkit-backdrop-filter: blur(10px);
32
+ backdrop-filter: blur(10px);
33
+ border-radius: 50px;
34
+ color: var(--color-light-graphic-primary)
35
+ } .navigation-bar__button_8p6nd.navigation-bar__mobile_8p6nd {
36
+ background: var(--color-light-specialbg-secondary-transparent);
37
+ color: var(--color-light-graphic-secondary);
38
+ } .navigation-bar__sticky_8p6nd {
39
+ position: sticky;
40
+ top: 0;
41
+ }
@@ -0,0 +1 @@
1
+ export * from "./Component";
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var components_closer_Component = require('./Component.js');
4
+ require('tslib');
5
+ require('react');
6
+ require('classnames');
7
+ require('@alfalab/core-components-icon-button');
8
+ require('@alfalab/icons-glyph/CrossHeavyMIcon');
9
+ require('@alfalab/icons-glyph/CrossMIcon');
10
+
11
+
12
+
13
+ exports.Closer = components_closer_Component.Closer;
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+ import { NavigationBarProps } from "./types";
3
+ declare const NavigationBar: FC<NavigationBarProps>;
4
+ export { NavigationBar };
@@ -0,0 +1,132 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var cn = require('classnames');
6
+ var components_backArrowAddon_Component = require('./components/back-arrow-addon/Component.js');
7
+ var components_closer_Component = require('./components/closer/Component.js');
8
+ var styles = require('./index.module.css');
9
+ require('@alfalab/core-components-button/cssm');
10
+ require('@alfalab/core-components-typography/cssm');
11
+ require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
12
+ require('@alfalab/icons-glyph/ArrowLeftMIcon');
13
+ require('./components/back-arrow-addon/index.module.css');
14
+ require('@alfalab/core-components-icon-button/cssm');
15
+ require('@alfalab/icons-glyph/CrossHeavyMIcon');
16
+ require('@alfalab/icons-glyph/CrossMIcon');
17
+ require('./components/closer/index.module.css');
18
+
19
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
20
+
21
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
22
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
23
+ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
24
+
25
+ var getDataTestId = function (dataTestId, element) {
26
+ var elementPart = element ? "-".concat(element.toLowerCase()) : '';
27
+ return dataTestId ? "".concat(dataTestId).concat(elementPart) : undefined;
28
+ };
29
+
30
+ var ADDONS_HEIGHT = 48;
31
+ var NavigationBar = function (_a) {
32
+ var _b, _c, _d;
33
+ var addonClassName = _a.addonClassName, className = _a.className, contentClassName = _a.contentClassName, closerClassName = _a.closerClassName, leftAddons = _a.leftAddons, rightAddons = _a.rightAddons, bottomAddons = _a.bottomAddons, bottomAddonsClassName = _a.bottomAddonsClassName, children = _a.children, _e = _a.align, align = _e === void 0 ? 'left' : _e, _f = _a.trim, trim = _f === void 0 ? true : _f, title = _a.title, _g = _a.titleSize, titleSize = _g === void 0 ? 'default' : _g, subtitle = _a.subtitle, hasCloser = _a.hasCloser, hasBackButton = _a.hasBackButton, backButtonClassName = _a.backButtonClassName, dataTestId = _a.dataTestId, imageUrl = _a.imageUrl, closerIcon = _a.closerIcon, onClose = _a.onClose, view = _a.view, parentRef = _a.parentRef, sticky = _a.sticky, onBack = _a.onBack;
34
+ var _h = React.useState(0), scrollTop = _h[0], setScrollTop = _h[1];
35
+ var bottomContentRef = React.useRef(null);
36
+ var headerRef = React.useRef(null);
37
+ var mainLinePaddingTopRef = React.useRef('0px');
38
+ var compactTitle = view === 'mobile' && titleSize === 'compact';
39
+ var hasLeftPart = Boolean(leftAddons || hasBackButton);
40
+ var hasRightPart = Boolean(rightAddons || hasCloser);
41
+ var hasContent = Boolean(title || children);
42
+ var withAnimation = Boolean(view === 'mobile' && hasLeftPart && sticky && !compactTitle);
43
+ var showContentOnTop = hasContent && (compactTitle || !hasLeftPart);
44
+ var showContentOnBot = hasContent && !compactTitle && hasLeftPart;
45
+ var showStaticContentOnTop = !withAnimation && showContentOnTop;
46
+ var showStaticContentOnBot = !withAnimation && showContentOnBot;
47
+ var showAnimatedContentOnTop = withAnimation && showContentOnBot && scrollTop > ADDONS_HEIGHT;
48
+ var showAnimatedContentOnBot = withAnimation && showContentOnBot;
49
+ var headerPaddingTop = mainLinePaddingTopRef.current;
50
+ React.useEffect(function () {
51
+ var parent = parentRef === null || parentRef === void 0 ? void 0 : parentRef.current;
52
+ var handleScroll = function (ev) {
53
+ var divElement = ev.target;
54
+ setScrollTop(divElement.scrollTop);
55
+ };
56
+ if (withAnimation && headerRef.current) {
57
+ mainLinePaddingTopRef.current = getComputedStyle(headerRef.current).paddingTop;
58
+ }
59
+ if (withAnimation && parent) {
60
+ parent.addEventListener('scroll', handleScroll);
61
+ }
62
+ return function () { return parent === null || parent === void 0 ? void 0 : parent.removeEventListener('scroll', handleScroll); };
63
+ }, [parentRef, withAnimation]);
64
+ var renderBackButton = function () {
65
+ var textOpacity = 1;
66
+ if (withAnimation) {
67
+ var height = hasContent ? ADDONS_HEIGHT : ADDONS_HEIGHT / 2;
68
+ textOpacity = Math.max(0, 1 - scrollTop / height);
69
+ }
70
+ else if (compactTitle) {
71
+ textOpacity = 0;
72
+ }
73
+ return (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.addon, backButtonClassName) },
74
+ React__default.default.createElement(components_backArrowAddon_Component.BackArrowAddon, { textOpacity: textOpacity, view: view, onClick: onBack, "data-test-id": getDataTestId(dataTestId, 'back-button') })));
75
+ };
76
+ var renderContent = function (args) {
77
+ var _a;
78
+ if (args === void 0) { args = {}; }
79
+ var extraClassName = args.extraClassName, ref = args.ref, style = args.style, hidden = args.hidden;
80
+ return (React__default.default.createElement("div", { style: tslib.__assign(tslib.__assign({}, style), { visibility: hidden ? 'hidden' : 'visible' }), ref: ref, className: cn__default.default(styles__default.default.content, extraClassName, contentClassName, styles__default.default[align], (_a = {},
81
+ _a[styles__default.default.trim] = trim,
82
+ _a[styles__default.default.withCompactTitle] = view === 'mobile' && compactTitle && hasContent,
83
+ _a)), "aria-hidden": hidden },
84
+ children && React__default.default.createElement("div", { className: styles__default.default.children }, children),
85
+ title && (React__default.default.createElement("div", { className: styles__default.default.title, "data-test-id": hidden ? undefined : getDataTestId(dataTestId, 'title') }, title)),
86
+ compactTitle && subtitle && React__default.default.createElement("div", { className: styles__default.default.subtitle }, subtitle)));
87
+ };
88
+ var renderCloser = function () { return (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.addon, styles__default.default.closer, closerClassName) },
89
+ React__default.default.createElement(components_closer_Component.Closer, { view: view, icon: closerIcon, dataTestId: getDataTestId(dataTestId, 'closer'), onClose: onClose }))); };
90
+ return (React__default.default.createElement("div", { ref: headerRef, className: cn__default.default(styles__default.default.header, className, (_b = {}, _b[styles__default.default.backgroundImage] = imageUrl, _b)), "data-test-id": getDataTestId(dataTestId), style: tslib.__assign(tslib.__assign({}, (imageUrl && { backgroundImage: "url(".concat(imageUrl, ")") })), (withAnimation &&
91
+ bottomContentRef.current && { top: -bottomContentRef.current.scrollHeight })) },
92
+ React__default.default.createElement("div", { className: cn__default.default(styles__default.default.mainLine, (_c = {},
93
+ _c[styles__default.default.mainLineSticky] = withAnimation,
94
+ _c[styles__default.default.mainLineWithImageBg] = imageUrl,
95
+ _c)), style: tslib.__assign({}, (withAnimation
96
+ ? {
97
+ marginTop: "-".concat(headerPaddingTop),
98
+ paddingTop: headerPaddingTop,
99
+ }
100
+ : null)) },
101
+ hasLeftPart && (React__default.default.createElement("div", { className: styles__default.default.addonsWrapper },
102
+ hasBackButton && renderBackButton(),
103
+ leftAddons && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.addon, addonClassName) }, leftAddons)))),
104
+ showStaticContentOnTop && renderContent(),
105
+ showAnimatedContentOnTop &&
106
+ renderContent({
107
+ extraClassName: styles__default.default.withBothAddons,
108
+ style: {
109
+ opacity: Math.min(1, (scrollTop - ADDONS_HEIGHT) / ADDONS_HEIGHT),
110
+ },
111
+ }),
112
+ hasRightPart && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.addonsWrapper, styles__default.default.rightAddons) },
113
+ rightAddons && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.addon, addonClassName) }, rightAddons)),
114
+ hasCloser && renderCloser()))),
115
+ showAnimatedContentOnBot &&
116
+ renderContent({
117
+ ref: bottomContentRef,
118
+ extraClassName: styles__default.default.underAddons,
119
+ style: { opacity: Math.max(0, 1 - scrollTop / ADDONS_HEIGHT) },
120
+ hidden: scrollTop / ADDONS_HEIGHT > 1,
121
+ }),
122
+ showStaticContentOnBot &&
123
+ renderContent({
124
+ extraClassName: cn__default.default((_d = {},
125
+ _d[styles__default.default.contentOnBotDesktop] = view === 'desktop',
126
+ _d[styles__default.default.contentOnBotMobile] = view === 'mobile',
127
+ _d)),
128
+ }),
129
+ bottomAddons && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.bottomAddons, bottomAddonsClassName) }, bottomAddons))));
130
+ };
131
+
132
+ exports.NavigationBar = NavigationBar;
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ interface BackArrowAddonProps extends React.HTMLAttributes<HTMLButtonElement> {
4
+ /**
5
+ * Текст после иконки
6
+ */
7
+ text?: string;
8
+ /**
9
+ * Дополнительный класс
10
+ */
11
+ className?: string;
12
+ /**
13
+ * Вид компонента
14
+ */
15
+ view: 'mobile' | 'desktop';
16
+ /**
17
+ * Прозрачность текста
18
+ */
19
+ textOpacity?: number;
20
+ /**
21
+ * Обработчик клика
22
+ */
23
+ onClick?: () => void;
24
+ }
25
+ declare const BackArrowAddon: React.FC<BackArrowAddonProps>;
26
+ export { BackArrowAddonProps, BackArrowAddon };
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var cn = require('classnames');
6
+ var coreComponentsButton = require('@alfalab/core-components-button/cssm');
7
+ var coreComponentsTypography = require('@alfalab/core-components-typography/cssm');
8
+ var ArrowLeftMediumMIcon = require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
9
+ var ArrowLeftMIcon = require('@alfalab/icons-glyph/ArrowLeftMIcon');
10
+ var styles = require('./index.module.css');
11
+
12
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
13
+
14
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
15
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
16
+ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
17
+
18
+ var BackArrowAddon = function (_a) {
19
+ var _b, _c;
20
+ var _d = _a.text, text = _d === void 0 ? 'Назад' : _d, onClick = _a.onClick, className = _a.className, _e = _a.textOpacity, textOpacity = _e === void 0 ? 1 : _e, view = _a.view, htmlAttributes = tslib.__rest(_a, ["text", "onClick", "className", "textOpacity", "view"]);
21
+ var Icon = view === 'desktop' ? ArrowLeftMediumMIcon.ArrowLeftMediumMIcon : ArrowLeftMIcon.ArrowLeftMIcon;
22
+ return (React__default.default.createElement(coreComponentsButton.Button, tslib.__assign({ view: 'ghost', size: view === 'mobile' ? 'xxs' : 's', onClick: onClick, "aria-label": '\u043D\u0430\u0437\u0430\u0434', className: cn__default.default(styles__default.default.component, (_b = {}, _b[styles__default.default.mobileComponent] = view === 'mobile', _b), className) }, htmlAttributes),
23
+ React__default.default.createElement("div", { className: styles__default.default.flex },
24
+ React__default.default.createElement("div", { className: cn__default.default(styles__default.default.iconWrapper, (_c = {},
25
+ _c[styles__default.default.mobileWrapper] = view === 'mobile',
26
+ _c)) },
27
+ React__default.default.createElement(Icon, null)),
28
+ textOpacity > 0 && (React__default.default.createElement(coreComponentsTypography.Typography.Text, { className: styles__default.default.text, view: view === 'desktop' ? 'primary-large' : 'component', weight: 'medium', style: { opacity: textOpacity } }, text)))));
29
+ };
30
+
31
+ exports.BackArrowAddon = BackArrowAddon;
@@ -0,0 +1 @@
1
+ export * from "./Component";
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var components_backArrowAddon_Component = require('./Component.js');
4
+ require('tslib');
5
+ require('react');
6
+ require('classnames');
7
+ require('@alfalab/core-components-button/cssm');
8
+ require('@alfalab/core-components-typography/cssm');
9
+ require('@alfalab/icons-glyph/ArrowLeftMediumMIcon');
10
+ require('@alfalab/icons-glyph/ArrowLeftMIcon');
11
+ require('./index.module.css');
12
+
13
+
14
+
15
+ exports.BackArrowAddon = components_backArrowAddon_Component.BackArrowAddon;