@invoicebox/ui 0.1.0-alpha.326 → 0.1.0-alpha.328
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/dist/components/common/AdaptiveModalDrawer/index.d.ts +11 -0
- package/dist/components/common/AdaptiveModalDrawer/index.js +31 -0
- package/dist/components/common/AdaptiveModalDrawer/index.stories.d.ts +5 -0
- package/dist/components/common/AdaptiveModalDrawer/index.stories.js +44 -0
- package/dist/components/common/Modal/assets/CollapseIcon.d.ts +1 -0
- package/dist/components/common/Modal/assets/CollapseIcon.js +42 -0
- package/dist/components/common/Modal/assets/ExpandIcon.d.ts +1 -0
- package/dist/components/common/Modal/assets/ExpandIcon.js +42 -0
- package/dist/components/common/Modal/context.d.ts +9 -0
- package/dist/components/common/Modal/context.js +14 -0
- package/dist/components/common/Modal/index.d.ts +15 -0
- package/dist/components/common/Modal/index.js +165 -0
- package/dist/components/common/Modal/index.stories.d.ts +6 -0
- package/dist/components/common/Modal/index.stories.js +76 -0
- package/dist/components/common/Modal/palette.d.ts +9 -0
- package/dist/components/common/Modal/palette.js +23 -0
- package/dist/components/common/Modal/styles.d.ts +25 -0
- package/dist/components/common/Modal/styles.js +69 -0
- package/dist/components/common/Skeleton/index.d.ts +16 -2
- package/dist/components/common/Skeleton/index.js +19 -2
- package/dist/components/common/Skeleton/index.stories.d.ts +4 -0
- package/dist/components/common/Skeleton/index.stories.js +42 -1
- package/dist/components/common/Skeleton/styles.d.ts +2 -0
- package/dist/components/common/Skeleton/styles.js +18 -9
- package/dist/components/common/WentWrongModal/assets/icons.d.ts +3 -0
- package/dist/components/common/WentWrongModal/assets/icons.js +84 -0
- package/dist/components/common/WentWrongModal/assets/racoonImage.d.ts +1 -0
- package/dist/components/common/WentWrongModal/assets/racoonImage.js +9 -0
- package/dist/components/common/WentWrongModal/index.d.ts +23 -0
- package/dist/components/common/WentWrongModal/index.js +193 -0
- package/dist/components/common/WentWrongModal/index.stories.d.ts +6 -0
- package/dist/components/common/WentWrongModal/index.stories.js +60 -0
- package/dist/components/common/WentWrongModal/index.test.d.ts +1 -0
- package/dist/components/common/WentWrongModal/index.test.js +209 -0
- package/dist/components/common/WentWrongModal/palette.d.ts +11 -0
- package/dist/components/common/WentWrongModal/palette.js +22 -0
- package/dist/components/common/WentWrongModal/styles.d.ts +24 -0
- package/dist/components/common/WentWrongModal/styles.js +88 -0
- package/dist/components/form/Select/index.js +11 -3
- package/dist/esm/components/common/AdaptiveModalDrawer/index.js +24 -0
- package/dist/esm/components/common/AdaptiveModalDrawer/index.stories.js +37 -0
- package/dist/esm/components/common/Modal/assets/CollapseIcon.js +35 -0
- package/dist/esm/components/common/Modal/assets/ExpandIcon.js +35 -0
- package/dist/esm/components/common/Modal/context.js +8 -0
- package/dist/esm/components/common/Modal/index.js +147 -0
- package/dist/esm/components/common/Modal/index.stories.js +69 -0
- package/dist/esm/components/common/Modal/palette.js +16 -0
- package/dist/esm/components/common/Modal/styles.js +61 -0
- package/dist/esm/components/common/Skeleton/index.js +19 -2
- package/dist/esm/components/common/Skeleton/index.stories.js +41 -0
- package/dist/esm/components/common/Skeleton/styles.js +19 -10
- package/dist/esm/components/common/WentWrongModal/assets/icons.js +77 -0
- package/dist/esm/components/common/WentWrongModal/assets/racoonImage.js +3 -0
- package/dist/esm/components/common/WentWrongModal/index.js +186 -0
- package/dist/esm/components/common/WentWrongModal/index.stories.js +53 -0
- package/dist/esm/components/common/WentWrongModal/index.test.js +208 -0
- package/dist/esm/components/common/WentWrongModal/palette.js +15 -0
- package/dist/esm/components/common/WentWrongModal/styles.js +81 -0
- package/dist/esm/components/form/Select/index.js +11 -2
- package/dist/esm/index.js +3 -1
- package/dist/esm/palette/context.js +5 -1
- package/dist/esm/palette/provider.js +5 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +39 -0
- package/dist/palette/context.d.ts +4 -0
- package/dist/palette/context.js +5 -1
- package/dist/palette/provider.js +5 -1
- package/dist/palette/usePalette.d.ts +2 -0
- package/package.json +1 -1
- package/dist/components/form/Select/components/Loader/index.d.ts +0 -2
- package/dist/components/form/Select/components/Loader/index.js +0 -25
- package/dist/components/form/Select/components/Loader/styles.d.ts +0 -4
- package/dist/components/form/Select/components/Loader/styles.js +0 -20
- package/dist/esm/components/form/Select/components/Loader/index.js +0 -16
- package/dist/esm/components/form/Select/components/Loader/styles.js +0 -13
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Title = exports.RequestIdWrapper = exports.RequestIdValue = exports.ModalInner = exports.Header = exports.Description = exports.CopyText = exports.CopiedStatus = exports.Content = exports.Contacts = exports.ContactItem = exports.ButtonCopyCode = void 0;
|
|
7
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
8
|
+
var _breakpoints = require("../../../breakpoints");
|
|
9
|
+
var _Typography = require("../Typography");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
|
+
var ModalInner = exports.ModalInner = _styledComponents["default"].div.withConfig({
|
|
12
|
+
displayName: "styles__ModalInner",
|
|
13
|
+
componentId: "sc-1sxwtvv-0"
|
|
14
|
+
})(["width:624px;color:", ";@media ", "{width:100%;}"], function (_ref) {
|
|
15
|
+
var $palette = _ref.$palette;
|
|
16
|
+
return $palette.text;
|
|
17
|
+
}, _breakpoints.breakpoints.md);
|
|
18
|
+
var Header = exports.Header = _styledComponents["default"].div.withConfig({
|
|
19
|
+
displayName: "styles__Header",
|
|
20
|
+
componentId: "sc-1sxwtvv-1"
|
|
21
|
+
})(["height:171px;background:url(", ") no-repeat center bottom,", ";background-size:184px;@media ", "{background-size:163px;}"], function (_ref2) {
|
|
22
|
+
var $image = _ref2.$image;
|
|
23
|
+
return $image;
|
|
24
|
+
}, function (_ref3) {
|
|
25
|
+
var $palette = _ref3.$palette;
|
|
26
|
+
return $palette.headerBg;
|
|
27
|
+
}, _breakpoints.breakpoints.sm);
|
|
28
|
+
var Content = exports.Content = _styledComponents["default"].div.withConfig({
|
|
29
|
+
displayName: "styles__Content",
|
|
30
|
+
componentId: "sc-1sxwtvv-2"
|
|
31
|
+
})(["padding:30px;text-align:center;@media ", "{padding:24px 16px 32px;}"], _breakpoints.breakpoints.sm);
|
|
32
|
+
var Title = exports.Title = (0, _styledComponents["default"])(_Typography.Typography).withConfig({
|
|
33
|
+
displayName: "styles__Title",
|
|
34
|
+
componentId: "sc-1sxwtvv-3"
|
|
35
|
+
})(["margin-bottom:12px;"]);
|
|
36
|
+
var Description = exports.Description = (0, _styledComponents["default"])(_Typography.Typography).withConfig({
|
|
37
|
+
displayName: "styles__Description",
|
|
38
|
+
componentId: "sc-1sxwtvv-4"
|
|
39
|
+
})(["margin-bottom:24px;color:", ";@media ", "{margin-bottom:16px;}"], function (_ref4) {
|
|
40
|
+
var $palette = _ref4.$palette;
|
|
41
|
+
return $palette.description;
|
|
42
|
+
}, _breakpoints.breakpoints.sm);
|
|
43
|
+
var Contacts = exports.Contacts = _styledComponents["default"].div.withConfig({
|
|
44
|
+
displayName: "styles__Contacts",
|
|
45
|
+
componentId: "sc-1sxwtvv-5"
|
|
46
|
+
})(["display:flex;align-items:center;gap:12px;justify-content:center;margin-bottom:", ";@media ", "{flex-direction:column;gap:0;}"], function (_ref5) {
|
|
47
|
+
var $marginBottom = _ref5.$marginBottom;
|
|
48
|
+
return $marginBottom;
|
|
49
|
+
}, _breakpoints.breakpoints.sm);
|
|
50
|
+
var ContactItem = exports.ContactItem = _styledComponents["default"].a.withConfig({
|
|
51
|
+
displayName: "styles__ContactItem",
|
|
52
|
+
componentId: "sc-1sxwtvv-6"
|
|
53
|
+
})(["padding:8px 16px 8px 12px;display:flex;align-items:center;gap:8px;color:inherit;text-decoration:none;@media ", "{gap:6px;}"], _breakpoints.breakpoints.sm);
|
|
54
|
+
var RequestIdWrapper = exports.RequestIdWrapper = _styledComponents["default"].div.withConfig({
|
|
55
|
+
displayName: "styles__RequestIdWrapper",
|
|
56
|
+
componentId: "sc-1sxwtvv-7"
|
|
57
|
+
})(["margin-bottom:24px;display:flex;justify-content:center;align-items:center;gap:4px;color:", ";"], function (_ref6) {
|
|
58
|
+
var $palette = _ref6.$palette;
|
|
59
|
+
return $palette.requestId;
|
|
60
|
+
});
|
|
61
|
+
var CopyText = exports.CopyText = _styledComponents["default"].div.withConfig({
|
|
62
|
+
displayName: "styles__CopyText",
|
|
63
|
+
componentId: "sc-1sxwtvv-8"
|
|
64
|
+
})(["padding:4px 12px;pointer-events:none;"]);
|
|
65
|
+
var RequestIdValue = exports.RequestIdValue = (0, _styledComponents["default"])(_Typography.Typography).withConfig({
|
|
66
|
+
displayName: "styles__RequestIdValue",
|
|
67
|
+
componentId: "sc-1sxwtvv-9"
|
|
68
|
+
})(["max-width:320px;padding:0;border:none;background:transparent;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&:is(button){cursor:pointer;}&:is(button):hover{background-color:", ";}@media ", "{max-width:200px;}"], function (_ref7) {
|
|
69
|
+
var $palette = _ref7.$palette;
|
|
70
|
+
return $palette.copyValueHoverBg;
|
|
71
|
+
}, _breakpoints.breakpoints.sm);
|
|
72
|
+
var ButtonCopyCode = exports.ButtonCopyCode = _styledComponents["default"].button.withConfig({
|
|
73
|
+
displayName: "styles__ButtonCopyCode",
|
|
74
|
+
componentId: "sc-1sxwtvv-10"
|
|
75
|
+
})(["flex-shrink:0;height:24px;width:24px;padding:0;border:none;border-radius:50%;cursor:pointer;color:", ";background:", ";display:flex;justify-content:center;align-items:center;"], function (_ref8) {
|
|
76
|
+
var $palette = _ref8.$palette;
|
|
77
|
+
return $palette.copyIcon;
|
|
78
|
+
}, function (_ref9) {
|
|
79
|
+
var $palette = _ref9.$palette;
|
|
80
|
+
return $palette.copyButtonBg;
|
|
81
|
+
});
|
|
82
|
+
var CopiedStatus = exports.CopiedStatus = _styledComponents["default"].span.withConfig({
|
|
83
|
+
displayName: "styles__CopiedStatus",
|
|
84
|
+
componentId: "sc-1sxwtvv-11"
|
|
85
|
+
})(["flex-shrink:0;", ""], function (_ref0) {
|
|
86
|
+
var $isVisuallyHidden = _ref0.$isVisuallyHidden;
|
|
87
|
+
return $isVisuallyHidden && "\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n ";
|
|
88
|
+
});
|
|
@@ -15,11 +15,10 @@ var _useOutsideClick = require("../../../hooks/useOutsideClick");
|
|
|
15
15
|
var _palette = require("../../../palette");
|
|
16
16
|
var _useOptionGroups = require("./hooks/useOptionGroups");
|
|
17
17
|
var _Drawer = require("../../common/Drawer");
|
|
18
|
-
var
|
|
18
|
+
var _Skeleton = require("../../common/Skeleton");
|
|
19
19
|
var _MultipleValue = require("./components/MultipleValue");
|
|
20
20
|
var _Checkbox = require("../Checkbox");
|
|
21
21
|
var _ErrorBoundary = require("../../common/ErrorBoundary");
|
|
22
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
23
22
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
24
23
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
25
24
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -328,7 +327,16 @@ var SelectInner = function SelectInner(props) {
|
|
|
328
327
|
variant: 'bodyMRegular',
|
|
329
328
|
$color: palette.empty
|
|
330
329
|
}, emptyOptionsLabel || 'Нет значений'));
|
|
331
|
-
|
|
330
|
+
|
|
331
|
+
// Пока варианты грузятся — плашки на месте вариантов, как у `Autocomplete`
|
|
332
|
+
var loader = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, [0, 1, 2].map(function (key) {
|
|
333
|
+
return /*#__PURE__*/_react["default"].createElement(S.DefaultOptionWrapper, {
|
|
334
|
+
key: key
|
|
335
|
+
}, /*#__PURE__*/_react["default"].createElement(_Skeleton.Skeleton, {
|
|
336
|
+
height: 20,
|
|
337
|
+
borderRadius: 4
|
|
338
|
+
}));
|
|
339
|
+
}));
|
|
332
340
|
var handleDropdownContentRender = function handleDropdownContentRender() {
|
|
333
341
|
if (isLoading) {
|
|
334
342
|
return loader;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useMobile } from '../../../hooks/useMedia';
|
|
4
|
+
import { Drawer } from '../Drawer';
|
|
5
|
+
import { Modal } from '../Modal';
|
|
6
|
+
/** Модалка на десктопе и шторка (Drawer) на мобильных. Скролл фона блокируют сами Modal и Drawer. */
|
|
7
|
+
export var AdaptiveModalDrawer = function AdaptiveModalDrawer(_ref) {
|
|
8
|
+
var children = _ref.children,
|
|
9
|
+
isOpen = _ref.isOpen,
|
|
10
|
+
onClose = _ref.onClose,
|
|
11
|
+
drawerProps = _ref.drawerProps,
|
|
12
|
+
modalProps = _ref.modalProps;
|
|
13
|
+
var isMobile = useMobile();
|
|
14
|
+
if (isMobile) {
|
|
15
|
+
return /*#__PURE__*/React.createElement(Drawer, _extends({
|
|
16
|
+
onClose: onClose,
|
|
17
|
+
isOpen: isOpen
|
|
18
|
+
}, drawerProps), children);
|
|
19
|
+
}
|
|
20
|
+
return /*#__PURE__*/React.createElement(Modal, _extends({
|
|
21
|
+
onClose: onClose,
|
|
22
|
+
isOpen: isOpen
|
|
23
|
+
}, modalProps), children);
|
|
24
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { useModal } from '../../../hooks/useModal';
|
|
10
|
+
import { AdaptiveModalDrawer } from '.';
|
|
11
|
+
var meta = {
|
|
12
|
+
title: 'common/AdaptiveModalDrawer',
|
|
13
|
+
component: AdaptiveModalDrawer,
|
|
14
|
+
tags: ['autodocs']
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
export var Default = {
|
|
18
|
+
args: {},
|
|
19
|
+
render: function Render(args) {
|
|
20
|
+
var _useModal = useModal(false),
|
|
21
|
+
_useModal2 = _slicedToArray(_useModal, 3),
|
|
22
|
+
isOpen = _useModal2[0],
|
|
23
|
+
open = _useModal2[1],
|
|
24
|
+
close = _useModal2[2];
|
|
25
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
|
|
26
|
+
type: "button",
|
|
27
|
+
onClick: open
|
|
28
|
+
}, "Open"), /*#__PURE__*/React.createElement(AdaptiveModalDrawer, _extends({}, args, {
|
|
29
|
+
onClose: close,
|
|
30
|
+
isOpen: isOpen
|
|
31
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
32
|
+
style: {
|
|
33
|
+
padding: 24
|
|
34
|
+
}
|
|
35
|
+
}, "\u041C\u043E\u0434\u0430\u043B\u043A\u0430 \u043D\u0430 \u0434\u0435\u0441\u043A\u0442\u043E\u043F\u0435, \u0448\u0442\u043E\u0440\u043A\u0430 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u043C")));
|
|
36
|
+
}
|
|
37
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export var CollapseIcon = function CollapseIcon() {
|
|
3
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
4
|
+
width: "20",
|
|
5
|
+
height: "20",
|
|
6
|
+
viewBox: "0 0 24 24",
|
|
7
|
+
fill: "none",
|
|
8
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
9
|
+
"aria-hidden": true
|
|
10
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
11
|
+
d: "M20 10H14V4",
|
|
12
|
+
stroke: "currentColor",
|
|
13
|
+
strokeWidth: "1.8",
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round"
|
|
16
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
17
|
+
d: "M4 14H10V20",
|
|
18
|
+
stroke: "currentColor",
|
|
19
|
+
strokeWidth: "1.8",
|
|
20
|
+
strokeLinecap: "round",
|
|
21
|
+
strokeLinejoin: "round"
|
|
22
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
23
|
+
d: "M14 10L21 3",
|
|
24
|
+
stroke: "currentColor",
|
|
25
|
+
strokeWidth: "1.8",
|
|
26
|
+
strokeLinecap: "round",
|
|
27
|
+
strokeLinejoin: "round"
|
|
28
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
29
|
+
d: "M10 14L3 21",
|
|
30
|
+
stroke: "currentColor",
|
|
31
|
+
strokeWidth: "1.8",
|
|
32
|
+
strokeLinecap: "round",
|
|
33
|
+
strokeLinejoin: "round"
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export var ExpandIcon = function ExpandIcon() {
|
|
3
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
4
|
+
width: "20",
|
|
5
|
+
height: "20",
|
|
6
|
+
viewBox: "0 0 24 24",
|
|
7
|
+
fill: "none",
|
|
8
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
9
|
+
"aria-hidden": true
|
|
10
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
11
|
+
d: "M15 3H21V9",
|
|
12
|
+
stroke: "currentColor",
|
|
13
|
+
strokeWidth: "1.8",
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round"
|
|
16
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
17
|
+
d: "M9 21H3V15",
|
|
18
|
+
stroke: "currentColor",
|
|
19
|
+
strokeWidth: "1.8",
|
|
20
|
+
strokeLinecap: "round",
|
|
21
|
+
strokeLinejoin: "round"
|
|
22
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
23
|
+
d: "M21 3L14 10",
|
|
24
|
+
stroke: "currentColor",
|
|
25
|
+
strokeWidth: "1.8",
|
|
26
|
+
strokeLinecap: "round",
|
|
27
|
+
strokeLinejoin: "round"
|
|
28
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
29
|
+
d: "M3 21L10 14",
|
|
30
|
+
stroke: "currentColor",
|
|
31
|
+
strokeWidth: "1.8",
|
|
32
|
+
strokeLinecap: "round",
|
|
33
|
+
strokeLinejoin: "round"
|
|
34
|
+
}));
|
|
35
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
export var ModalExpansionContext = /*#__PURE__*/createContext({
|
|
3
|
+
isExpandable: false,
|
|
4
|
+
isExpanded: false
|
|
5
|
+
});
|
|
6
|
+
export var useModalExpansion = function useModalExpansion() {
|
|
7
|
+
return useContext(ModalExpansionContext);
|
|
8
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import { createPortal } from 'react-dom';
|
|
9
|
+
import { isDropdownPortalClick } from '../../../hooks/useOutsideClick';
|
|
10
|
+
import { useLockBodyScroll } from '../../../hooks/useLockBodyScroll';
|
|
11
|
+
import { useComponentPalette } from '../../../palette';
|
|
12
|
+
import { ErrorBoundary } from '../ErrorBoundary';
|
|
13
|
+
import { ExpandIcon } from './assets/ExpandIcon';
|
|
14
|
+
import { CollapseIcon } from './assets/CollapseIcon';
|
|
15
|
+
import { ModalExpansionContext } from './context';
|
|
16
|
+
import * as S from './styles';
|
|
17
|
+
var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
18
|
+
export var Modal = function Modal(_ref) {
|
|
19
|
+
var onClose = _ref.onClose,
|
|
20
|
+
isOpen = _ref.isOpen,
|
|
21
|
+
children = _ref.children,
|
|
22
|
+
_ref$overflow = _ref.overflow,
|
|
23
|
+
overflow = _ref$overflow === void 0 ? 'auto' : _ref$overflow,
|
|
24
|
+
width = _ref.width,
|
|
25
|
+
isDisabledOutsideClick = _ref.isDisabledOutsideClick,
|
|
26
|
+
isExpandable = _ref.isExpandable;
|
|
27
|
+
var palette = useComponentPalette('modal');
|
|
28
|
+
var contentRef = useRef(null);
|
|
29
|
+
var previousFocusRef = useRef(null);
|
|
30
|
+
var _useState = useState(false),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
isExpanded = _useState2[0],
|
|
33
|
+
setIsExpanded = _useState2[1];
|
|
34
|
+
var expansionContextValue = useMemo(function () {
|
|
35
|
+
return {
|
|
36
|
+
isExpandable: Boolean(isExpandable),
|
|
37
|
+
isExpanded: isExpanded
|
|
38
|
+
};
|
|
39
|
+
}, [isExpandable, isExpanded]);
|
|
40
|
+
useLockBodyScroll(isOpen);
|
|
41
|
+
useEffect(function () {
|
|
42
|
+
if (!isOpen) {
|
|
43
|
+
setIsExpanded(false);
|
|
44
|
+
}
|
|
45
|
+
}, [isOpen]);
|
|
46
|
+
|
|
47
|
+
// Фокус переносим в окно при открытии и возвращаем на прежний элемент при закрытии
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
var _contentRef$current;
|
|
50
|
+
if (!isOpen) return undefined;
|
|
51
|
+
previousFocusRef.current = document.activeElement;
|
|
52
|
+
(_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus();
|
|
53
|
+
return function () {
|
|
54
|
+
var _previousFocusRef$cur;
|
|
55
|
+
(_previousFocusRef$cur = previousFocusRef.current) === null || _previousFocusRef$cur === void 0 || _previousFocusRef$cur.focus();
|
|
56
|
+
};
|
|
57
|
+
}, [isOpen]);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Клик вне окна закрывает модалку. Не считаем «снаружи» клики по порталу Dropdown и по другим диалогам
|
|
61
|
+
* поверх неё (role="dialog"): например, Drawer с опциями Select на планшете рендерится порталом в body,
|
|
62
|
+
* и клик по его затемнению иначе закрывал бы и эту модалку.
|
|
63
|
+
*/
|
|
64
|
+
useEffect(function () {
|
|
65
|
+
if (!isOpen || isDisabledOutsideClick) return undefined;
|
|
66
|
+
var handleMouseDown = function handleMouseDown(event) {
|
|
67
|
+
var content = contentRef.current;
|
|
68
|
+
var target = event.target;
|
|
69
|
+
if (!content || !(target instanceof Element) || content.contains(target)) return;
|
|
70
|
+
if (isDropdownPortalClick(target)) return;
|
|
71
|
+
var dialog = target.closest('[role="dialog"]');
|
|
72
|
+
if (dialog && dialog !== content) return;
|
|
73
|
+
onClose();
|
|
74
|
+
};
|
|
75
|
+
document.addEventListener('mousedown', handleMouseDown);
|
|
76
|
+
return function () {
|
|
77
|
+
document.removeEventListener('mousedown', handleMouseDown);
|
|
78
|
+
};
|
|
79
|
+
}, [isOpen, isDisabledOutsideClick, onClose]);
|
|
80
|
+
|
|
81
|
+
// Escape закрывает окно, Tab/Shift+Tab не выпускают фокус за его пределы
|
|
82
|
+
useEffect(function () {
|
|
83
|
+
if (!isOpen) return undefined;
|
|
84
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
85
|
+
var _document$activeEleme;
|
|
86
|
+
// Поверх открыта другая модалка и фокус в ней — Escape и Tab обрабатывает она, а не эта
|
|
87
|
+
var activeDialog = (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.closest('[role="dialog"]');
|
|
88
|
+
if (activeDialog && activeDialog !== contentRef.current) return;
|
|
89
|
+
if (e.key === 'Escape') {
|
|
90
|
+
onClose();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (e.key !== 'Tab') return;
|
|
94
|
+
var content = contentRef.current;
|
|
95
|
+
if (!content) return;
|
|
96
|
+
var focusable = Array.from(content.querySelectorAll(FOCUSABLE_SELECTOR));
|
|
97
|
+
if (!focusable.length) {
|
|
98
|
+
e.preventDefault();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
var first = focusable[0];
|
|
102
|
+
var last = focusable[focusable.length - 1];
|
|
103
|
+
var active = document.activeElement;
|
|
104
|
+
if (e.shiftKey && active === first) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
last.focus();
|
|
107
|
+
} else if (!e.shiftKey && (active === last || !content.contains(active))) {
|
|
108
|
+
e.preventDefault();
|
|
109
|
+
first.focus();
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
113
|
+
return function () {
|
|
114
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
115
|
+
};
|
|
116
|
+
}, [isOpen, onClose]);
|
|
117
|
+
if (!isOpen) return null;
|
|
118
|
+
return /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(S.Container, null, /*#__PURE__*/React.createElement(S.ContainerInner, {
|
|
119
|
+
$isExpanded: isExpanded
|
|
120
|
+
}, /*#__PURE__*/React.createElement(S.Backdrop, {
|
|
121
|
+
$palette: palette
|
|
122
|
+
}), /*#__PURE__*/React.createElement(S.Content, {
|
|
123
|
+
$palette: palette,
|
|
124
|
+
$overflow: overflow,
|
|
125
|
+
$width: width,
|
|
126
|
+
$isExpandable: isExpandable,
|
|
127
|
+
$isExpanded: isExpanded,
|
|
128
|
+
ref: contentRef,
|
|
129
|
+
role: "dialog",
|
|
130
|
+
"aria-modal": "true",
|
|
131
|
+
tabIndex: -1
|
|
132
|
+
}, isExpandable && /*#__PURE__*/React.createElement(S.ExpandButton, {
|
|
133
|
+
type: "button",
|
|
134
|
+
$palette: palette,
|
|
135
|
+
onClick: function onClick() {
|
|
136
|
+
return setIsExpanded(function (prev) {
|
|
137
|
+
return !prev;
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
"aria-label": isExpanded ? 'Свернуть окно' : 'Развернуть окно на весь экран',
|
|
141
|
+
title: isExpanded ? 'Свернуть' : 'Развернуть на весь экран'
|
|
142
|
+
}, isExpanded ? /*#__PURE__*/React.createElement(CollapseIcon, null) : /*#__PURE__*/React.createElement(ExpandIcon, null)), /*#__PURE__*/React.createElement(ModalExpansionContext.Provider, {
|
|
143
|
+
value: expansionContextValue
|
|
144
|
+
}, /*#__PURE__*/React.createElement(ErrorBoundary, null, children))))), document.body);
|
|
145
|
+
};
|
|
146
|
+
export { useModalExpansion } from './context';
|
|
147
|
+
export { modalExpansionFlexItem } from './styles';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { useModal } from '../../../hooks/useModal';
|
|
10
|
+
import { Modal } from '.';
|
|
11
|
+
var meta = {
|
|
12
|
+
title: 'common/Modal',
|
|
13
|
+
component: Modal,
|
|
14
|
+
tags: ['autodocs']
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
export var Default = {
|
|
18
|
+
args: {},
|
|
19
|
+
render: function Render(args) {
|
|
20
|
+
var _useModal = useModal(false),
|
|
21
|
+
_useModal2 = _slicedToArray(_useModal, 3),
|
|
22
|
+
isOpen = _useModal2[0],
|
|
23
|
+
open = _useModal2[1],
|
|
24
|
+
close = _useModal2[2];
|
|
25
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
|
|
26
|
+
type: "button",
|
|
27
|
+
onClick: open
|
|
28
|
+
}, "Open"), /*#__PURE__*/React.createElement(Modal, _extends({}, args, {
|
|
29
|
+
onClose: close,
|
|
30
|
+
isOpen: isOpen
|
|
31
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
32
|
+
style: {
|
|
33
|
+
padding: 24
|
|
34
|
+
}
|
|
35
|
+
}, "Content")));
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
export var Expandable = {
|
|
39
|
+
args: {},
|
|
40
|
+
render: function Render(args) {
|
|
41
|
+
var _useModal3 = useModal(false),
|
|
42
|
+
_useModal4 = _slicedToArray(_useModal3, 3),
|
|
43
|
+
isOpen = _useModal4[0],
|
|
44
|
+
open = _useModal4[1],
|
|
45
|
+
close = _useModal4[2];
|
|
46
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
|
|
47
|
+
type: "button",
|
|
48
|
+
onClick: open
|
|
49
|
+
}, "Open"), /*#__PURE__*/React.createElement(Modal, _extends({}, args, {
|
|
50
|
+
onClose: close,
|
|
51
|
+
isOpen: isOpen,
|
|
52
|
+
isExpandable: true,
|
|
53
|
+
width: 600,
|
|
54
|
+
overflow: "visible"
|
|
55
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
style: {
|
|
57
|
+
width: 600,
|
|
58
|
+
flex: 1,
|
|
59
|
+
background: '#f2f4f6',
|
|
60
|
+
borderRadius: 20
|
|
61
|
+
}
|
|
62
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
63
|
+
style: {
|
|
64
|
+
padding: 24,
|
|
65
|
+
height: 200
|
|
66
|
+
}
|
|
67
|
+
}, "Content"))));
|
|
68
|
+
}
|
|
69
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { transformColorByHsl } from '../../../utils/transformColorByHsl';
|
|
2
|
+
import hexToRgba from '../../../utils/hexToRgba';
|
|
3
|
+
export var generateModalPalette = function generateModalPalette(abstractPalette) {
|
|
4
|
+
return {
|
|
5
|
+
bg: abstractPalette.base,
|
|
6
|
+
// тот же затемнённый primary, что и у подложки Drawer
|
|
7
|
+
backdropBg: hexToRgba(transformColorByHsl(abstractPalette.primary, {
|
|
8
|
+
hue: -3.3333333333333144,
|
|
9
|
+
saturation: -0.07435090479937062,
|
|
10
|
+
lightness: 0.08235294117647063
|
|
11
|
+
}), 0.5),
|
|
12
|
+
shadow: '0 10px 30px 0 rgba(53, 63, 71, 0.1)',
|
|
13
|
+
expandButton: hexToRgba(abstractPalette.primary, 0.7),
|
|
14
|
+
expandButtonHoverBg: hexToRgba(abstractPalette.primary, 0.06)
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components';
|
|
2
|
+
import { breakpoints } from '../../../breakpoints';
|
|
3
|
+
/**
|
|
4
|
+
* Растяжение flex-элемента по высоте внутри expandable-модалки: занимает свободное
|
|
5
|
+
* место и умеет сжиматься, отдавая скролл вложенному контенту. Вешается на конкретные
|
|
6
|
+
* обёртки по пропу (см. useModalExpansion), а не через селекторы.
|
|
7
|
+
*/
|
|
8
|
+
export var modalExpansionFlexItem = css(["flex:1 1 auto;min-height:0;"]);
|
|
9
|
+
export var Container = styled.div.withConfig({
|
|
10
|
+
displayName: "styles__Container",
|
|
11
|
+
componentId: "sc-1kjfcg5-0"
|
|
12
|
+
})(["position:fixed;top:0;left:0;right:0;bottom:0;z-index:100;"]);
|
|
13
|
+
export var ContainerInner = styled.div.withConfig({
|
|
14
|
+
displayName: "styles__ContainerInner",
|
|
15
|
+
componentId: "sc-1kjfcg5-1"
|
|
16
|
+
})(["box-sizing:border-box;width:100%;height:100%;position:relative;display:flex;justify-content:center;overflow:hidden auto;align-items:flex-start;padding:", ";@media ", "{padding:", ";}"], function (_ref) {
|
|
17
|
+
var $isExpanded = _ref.$isExpanded;
|
|
18
|
+
return $isExpanded ? '20px' : '55px 0';
|
|
19
|
+
}, breakpoints.sm, function (_ref2) {
|
|
20
|
+
var $isExpanded = _ref2.$isExpanded;
|
|
21
|
+
return $isExpanded ? '20px' : '15px 0';
|
|
22
|
+
});
|
|
23
|
+
export var Backdrop = styled.div.withConfig({
|
|
24
|
+
displayName: "styles__Backdrop",
|
|
25
|
+
componentId: "sc-1kjfcg5-2"
|
|
26
|
+
})(["position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1;background-color:", ";"], function (_ref3) {
|
|
27
|
+
var $palette = _ref3.$palette;
|
|
28
|
+
return $palette.backdropBg;
|
|
29
|
+
});
|
|
30
|
+
export var Content = styled.div.withConfig({
|
|
31
|
+
displayName: "styles__Content",
|
|
32
|
+
componentId: "sc-1kjfcg5-3"
|
|
33
|
+
})(["margin:auto;max-width:calc(100vw - 10px);", " overflow:", ";position:relative;background-color:", ";border-radius:20px;box-shadow:", ";outline:none;", " ", " @media ", "{width:100%;}"], function (_ref4) {
|
|
34
|
+
var $width = _ref4.$width;
|
|
35
|
+
return $width && "width: ".concat($width, "px;");
|
|
36
|
+
}, function (_ref5) {
|
|
37
|
+
var $overflow = _ref5.$overflow;
|
|
38
|
+
return $overflow;
|
|
39
|
+
}, function (_ref6) {
|
|
40
|
+
var $palette = _ref6.$palette;
|
|
41
|
+
return $palette.bg;
|
|
42
|
+
}, function (_ref7) {
|
|
43
|
+
var $palette = _ref7.$palette;
|
|
44
|
+
return $palette.shadow;
|
|
45
|
+
}, function (_ref8) {
|
|
46
|
+
var $isExpandable = _ref8.$isExpandable;
|
|
47
|
+
return $isExpandable && css(["display:flex;flex-direction:column;align-items:center;max-height:100%;overflow:auto;@media ", "{display:block;max-height:none;}"], breakpoints.md);
|
|
48
|
+
}, function (_ref9) {
|
|
49
|
+
var $isExpanded = _ref9.$isExpanded;
|
|
50
|
+
return $isExpanded && css(["width:100%;max-width:100%;height:100%;"]);
|
|
51
|
+
}, breakpoints.md);
|
|
52
|
+
export var ExpandButton = styled.button.withConfig({
|
|
53
|
+
displayName: "styles__ExpandButton",
|
|
54
|
+
componentId: "sc-1kjfcg5-4"
|
|
55
|
+
})(["position:absolute;top:14px;right:14px;z-index:2;display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:8px;background-color:transparent;cursor:pointer;color:", ";&:hover{background-color:", ";}@media ", "{display:none;}"], function (_ref0) {
|
|
56
|
+
var $palette = _ref0.$palette;
|
|
57
|
+
return $palette.expandButton;
|
|
58
|
+
}, function (_ref1) {
|
|
59
|
+
var $palette = _ref1.$palette;
|
|
60
|
+
return $palette.expandButtonHoverBg;
|
|
61
|
+
}, breakpoints.md);
|
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import * as S from './styles';
|
|
3
3
|
import { useComponentPalette } from '../../../palette';
|
|
4
|
+
var toCssSize = function toCssSize(value) {
|
|
5
|
+
return typeof value === 'number' ? "".concat(value, "px") : value;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Плашка скелетона. Сама по себе декорация (`aria-hidden`): факт загрузки объявляет
|
|
10
|
+
* один статус рядом с группой плашек
|
|
11
|
+
*/
|
|
4
12
|
export var Skeleton = function Skeleton(_ref) {
|
|
5
13
|
var _ref$width = _ref.width,
|
|
6
14
|
width = _ref$width === void 0 ? '100%' : _ref$width,
|
|
7
15
|
_ref$height = _ref.height,
|
|
8
16
|
height = _ref$height === void 0 ? '100%' : _ref$height,
|
|
17
|
+
_ref$borderRadius = _ref.borderRadius,
|
|
18
|
+
borderRadius = _ref$borderRadius === void 0 ? 10 : _ref$borderRadius,
|
|
19
|
+
_ref$circle = _ref.circle,
|
|
20
|
+
circle = _ref$circle === void 0 ? false : _ref$circle,
|
|
21
|
+
_ref$showDelay = _ref.showDelay,
|
|
22
|
+
showDelay = _ref$showDelay === void 0 ? 0 : _ref$showDelay,
|
|
9
23
|
palette = _ref.palette;
|
|
10
24
|
var mergedPalette = useComponentPalette('skeleton', palette);
|
|
11
25
|
return /*#__PURE__*/React.createElement(S.Wrapper, {
|
|
12
|
-
|
|
13
|
-
$height:
|
|
26
|
+
"aria-hidden": true,
|
|
27
|
+
$width: toCssSize(circle ? width === '100%' ? height : width : width),
|
|
28
|
+
$height: toCssSize(height),
|
|
29
|
+
$borderRadius: circle ? '50%' : "".concat(borderRadius, "px"),
|
|
30
|
+
$showDelay: showDelay,
|
|
14
31
|
$palette: mergedPalette
|
|
15
32
|
}, /*#__PURE__*/React.createElement(S.Inner, {
|
|
16
33
|
$palette: mergedPalette
|
|
@@ -21,4 +21,45 @@ export var ByOwnSize = {
|
|
|
21
21
|
width: '200px',
|
|
22
22
|
height: '100px'
|
|
23
23
|
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** Строки текста, поле и кнопка: скругление по месту, как в личном кабинете */
|
|
27
|
+
export var Shapes = {
|
|
28
|
+
render: function render() {
|
|
29
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
30
|
+
style: {
|
|
31
|
+
width: 320,
|
|
32
|
+
display: 'flex',
|
|
33
|
+
flexDirection: 'column',
|
|
34
|
+
gap: 12
|
|
35
|
+
}
|
|
36
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
37
|
+
style: {
|
|
38
|
+
display: 'flex',
|
|
39
|
+
gap: 12,
|
|
40
|
+
alignItems: 'center'
|
|
41
|
+
}
|
|
42
|
+
}, /*#__PURE__*/React.createElement(Skeleton, {
|
|
43
|
+
circle: true,
|
|
44
|
+
height: 36
|
|
45
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
46
|
+
height: 14,
|
|
47
|
+
borderRadius: 4
|
|
48
|
+
})), /*#__PURE__*/React.createElement(Skeleton, {
|
|
49
|
+
height: 56
|
|
50
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
51
|
+
height: 36,
|
|
52
|
+
width: 132,
|
|
53
|
+
borderRadius: 20
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** Плашка появляется через 180 мс: на быстром ответе её не видно */
|
|
59
|
+
export var WithShowDelay = {
|
|
60
|
+
args: {
|
|
61
|
+
width: 200,
|
|
62
|
+
height: 56,
|
|
63
|
+
showDelay: 180
|
|
64
|
+
}
|
|
24
65
|
};
|