@alphakits/ui 2.5.3 → 2.5.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
.container_WE0K{position:fixed;inset:0;display:flex;align-items:center;justify-content:center}.content_p1kc{background:var(--color-bg-primary);box-shadow:0 0 10px #0003}@media print{.content_p1kc{width:100%!important}}.button_js2W{position:absolute!important;top:34px;right:32px;z-index:999}.button_js2W.doubleModal_1ZTt{right:384px}.inner_Zsdb{height:100%;box-sizing:border-box;overflow:auto}.right_e065{position:fixed;top:0;right:0;bottom:0;transition:width .2s,opacity .2s,right .2s;transition-delay:width .1s;transition-timing-function:ease-in}.bg_8ZfP{transition:opacity .2s;background:#00000080;position:fixed;display:block;border:0;inset:0}.bottomSheet_CI-8{
|
|
1
|
+
.container_WE0K{position:fixed;inset:0;display:flex;align-items:center;justify-content:center}.content_p1kc{background:var(--color-bg-primary);box-shadow:0 0 10px #0003}@media print{.content_p1kc{width:100%!important}}.button_js2W{position:absolute!important;top:34px;right:32px;z-index:999}.button_js2W.doubleModal_1ZTt{right:384px}.inner_Zsdb{height:100%;box-sizing:border-box;overflow:auto}.right_e065{position:fixed;top:0;right:0;bottom:0;transition:width .2s,opacity .2s,right .2s;transition-delay:width .1s;transition-timing-function:ease-in}.bg_8ZfP{transition:opacity .2s;background:#00000080;position:fixed;display:block;border:0;inset:0}.bottomSheet_CI-8{top:100dvh!important;bottom:auto!important;left:0!important;right:0!important;width:100%!important;max-width:100%!important;height:100dvh;max-height:100dvh;border-radius:0!important;transition:top .25s cubic-bezier(.32,.72,0,1)}@supports not (height: 100dvh){.bottomSheet_CI-8{top:100vh!important;height:100vh;max-height:100vh}}.bottomSheet_CI-8.open_eGDW{top:0!important}@media screen and (max-width:823px){.right_e065,.center_nguy{max-width:100%!important;right:0!important;left:0!important}.content_p1kc{box-shadow:none!important;margin:0!important}.button_js2W{top:16px!important;right:16px!important}}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { useState as
|
|
5
|
-
import { Button as
|
|
6
|
-
import { showConfirm as
|
|
7
|
-
import { useMatchMedia as
|
|
1
|
+
import { jsxs as E, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import O from "@alphakits/icons/dist/CloseM";
|
|
3
|
+
import C from "classnames";
|
|
4
|
+
import { useState as L, useRef as w, useLayoutEffect as N, useEffect as k, useCallback as S } from "react";
|
|
5
|
+
import { Button as z } from "../../../button/component.js";
|
|
6
|
+
import { showConfirm as j } from "../../../confirm-popup/component.js";
|
|
7
|
+
import { useMatchMedia as B } from "../../../mq/use-match-media.js";
|
|
8
8
|
import s from "./index.module.css.js";
|
|
9
|
-
const
|
|
9
|
+
const R = {
|
|
10
10
|
s: 488,
|
|
11
11
|
m: 888,
|
|
12
12
|
full: "96%"
|
|
13
|
-
},
|
|
13
|
+
}, T = 102, D = "(max-width: 823px)", K = (e) => e === "full" ? `calc(-96vw - ${T}px)` : -R[e] - T, _ = [
|
|
14
14
|
'a[href]:not([tabindex="-1"])',
|
|
15
15
|
'area[href]:not([tabindex="-1"])',
|
|
16
16
|
'button:not([disabled]):not([tabindex="-1"])',
|
|
@@ -25,44 +25,37 @@ const N = {
|
|
|
25
25
|
'audio[controls]:not([tabindex="-1"])',
|
|
26
26
|
'video[controls]:not([tabindex="-1"])',
|
|
27
27
|
'details > summary:first-of-type:not([tabindex="-1"])'
|
|
28
|
-
].join(","),
|
|
28
|
+
].join(","), F = (e) => e ? Array.from(e.querySelectorAll(_)).filter((r) => {
|
|
29
29
|
if (r.hidden || r.getAttribute("aria-hidden") === "true") return !1;
|
|
30
30
|
const a = window.getComputedStyle(r);
|
|
31
31
|
return a.visibility === "hidden" || a.display === "none" ? !1 : r.offsetWidth > 0 || r.offsetHeight > 0 || r.getClientRects().length > 0;
|
|
32
|
-
}) : [],
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
return () => cancelAnimationFrame(
|
|
37
|
-
}, [e.id])
|
|
38
|
-
const D = p(
|
|
39
|
-
(t) => {
|
|
40
|
-
t.propertyName === "transform" && t.target === t.currentTarget && (!m || !f || x(!0));
|
|
41
|
-
},
|
|
42
|
-
[m, f]
|
|
43
|
-
);
|
|
44
|
-
A(() => {
|
|
32
|
+
}) : [], W = ({ modal: e, t: c, index: r, dirtyModals: a, closeModal: m, currentModalId: u }) => {
|
|
33
|
+
const A = K(e.props.size), [b] = B(D), [p, y] = L(!1), i = w(null), x = w(null);
|
|
34
|
+
N(() => {
|
|
35
|
+
const o = requestAnimationFrame(() => y(!0));
|
|
36
|
+
return () => cancelAnimationFrame(o);
|
|
37
|
+
}, [e.id]), k(() => {
|
|
45
38
|
if (e.id !== u) return;
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
39
|
+
x.current = document.activeElement || null;
|
|
40
|
+
const o = setTimeout(() => {
|
|
41
|
+
const n = F(i.current)[0] || i.current;
|
|
42
|
+
n && typeof n.focus == "function" && n.focus({ preventScroll: !0 });
|
|
50
43
|
}, 50);
|
|
51
44
|
return () => {
|
|
52
|
-
clearTimeout(
|
|
53
|
-
const
|
|
54
|
-
if (!
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
45
|
+
clearTimeout(o);
|
|
46
|
+
const t = document.activeElement;
|
|
47
|
+
if (!t || !i.current?.contains(t)) return;
|
|
48
|
+
const n = x.current;
|
|
49
|
+
if (n && typeof n.focus == "function" && document.body.contains(n))
|
|
57
50
|
try {
|
|
58
|
-
|
|
51
|
+
n.focus({ preventScroll: !0 });
|
|
59
52
|
} catch {
|
|
60
53
|
document.body.focus();
|
|
61
54
|
}
|
|
62
55
|
};
|
|
63
56
|
}, [e.id, u]);
|
|
64
|
-
const
|
|
65
|
-
(
|
|
57
|
+
const h = S(
|
|
58
|
+
(o) => a[o] ? j({
|
|
66
59
|
title: c("common:exitConfirm"),
|
|
67
60
|
confirmText: c("common:Да"),
|
|
68
61
|
cancelText: c("common:Нет"),
|
|
@@ -70,38 +63,38 @@ const N = {
|
|
|
70
63
|
}) : Promise.resolve(!0),
|
|
71
64
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
72
65
|
[a, c]
|
|
73
|
-
),
|
|
74
|
-
async (
|
|
75
|
-
const { id:
|
|
76
|
-
await
|
|
77
|
-
e.props.closeCallback && e.props.closeCallback(),
|
|
66
|
+
), f = S(
|
|
67
|
+
async (o) => {
|
|
68
|
+
const { id: t } = e;
|
|
69
|
+
await h(o || t) && (y(!1), setTimeout(() => {
|
|
70
|
+
e.props.closeCallback && e.props.closeCallback(), m(o || t);
|
|
78
71
|
}, 250));
|
|
79
72
|
},
|
|
80
|
-
[
|
|
73
|
+
[m, h, e]
|
|
81
74
|
);
|
|
82
|
-
return
|
|
83
|
-
const
|
|
84
|
-
if (
|
|
85
|
-
|
|
75
|
+
return k(() => {
|
|
76
|
+
const o = (t) => {
|
|
77
|
+
if (t.key === "27" || t.key === "Escape") {
|
|
78
|
+
f(u);
|
|
86
79
|
return;
|
|
87
80
|
}
|
|
88
|
-
if (
|
|
89
|
-
const
|
|
90
|
-
if (!
|
|
91
|
-
|
|
81
|
+
if (t.key !== "Tab") return;
|
|
82
|
+
const n = F(i.current);
|
|
83
|
+
if (!n.length) {
|
|
84
|
+
t.preventDefault(), i.current && i.current.focus({ preventScroll: !0 });
|
|
92
85
|
return;
|
|
93
86
|
}
|
|
94
|
-
const
|
|
95
|
-
if (
|
|
96
|
-
|
|
87
|
+
const v = n[0], g = n[n.length - 1], d = document.activeElement;
|
|
88
|
+
if (t.shiftKey && (d === v || !i.current?.contains(d))) {
|
|
89
|
+
t.preventDefault(), g.focus({ preventScroll: !0 });
|
|
97
90
|
return;
|
|
98
91
|
}
|
|
99
|
-
!
|
|
92
|
+
!t.shiftKey && (d === g || !i.current?.contains(d)) && (t.preventDefault(), v.focus({ preventScroll: !0 }));
|
|
100
93
|
};
|
|
101
|
-
return e.id === u && window?.addEventListener("keydown",
|
|
102
|
-
window?.removeEventListener("keydown",
|
|
94
|
+
return e.id === u && window?.addEventListener("keydown", o), () => {
|
|
95
|
+
window?.removeEventListener("keydown", o);
|
|
103
96
|
};
|
|
104
|
-
}, [
|
|
97
|
+
}, [f, u, e.id]), /* @__PURE__ */ E(
|
|
105
98
|
"div",
|
|
106
99
|
{
|
|
107
100
|
className: s.container,
|
|
@@ -109,60 +102,58 @@ const N = {
|
|
|
109
102
|
zIndex: 9999998 + r
|
|
110
103
|
},
|
|
111
104
|
children: [
|
|
112
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ l(
|
|
113
106
|
"div",
|
|
114
107
|
{
|
|
115
108
|
ref: i,
|
|
116
|
-
className:
|
|
117
|
-
[s.open]:
|
|
118
|
-
[s.bottomSheet]:
|
|
109
|
+
className: C(s.right, s.content, {
|
|
110
|
+
[s.open]: p,
|
|
111
|
+
[s.bottomSheet]: b
|
|
119
112
|
}),
|
|
120
113
|
style: {
|
|
121
114
|
zIndex: 9999999 + r,
|
|
122
|
-
width:
|
|
115
|
+
width: R[e.props.size],
|
|
123
116
|
// На десктопе right-slide управляется JS-ом (старая
|
|
124
117
|
// схема — анимация ширины и right'а синхронны). На
|
|
125
118
|
// мобиле right=0 всегда, а появление контролируется
|
|
126
|
-
// CSS
|
|
127
|
-
right:
|
|
119
|
+
// CSS (.bottomSheet.open → top: 0).
|
|
120
|
+
right: b || p ? 0 : A
|
|
128
121
|
},
|
|
129
|
-
onTransitionEnd: D,
|
|
130
|
-
"data-anim-done": f && L ? "true" : void 0,
|
|
131
122
|
role: "dialog",
|
|
132
123
|
"aria-modal": "true",
|
|
133
124
|
"aria-labelledby": `modal-title-${e.id}`,
|
|
134
125
|
tabIndex: -1,
|
|
135
|
-
children: /* @__PURE__ */
|
|
136
|
-
/* @__PURE__ */
|
|
126
|
+
children: /* @__PURE__ */ E("div", { className: s.inner, children: [
|
|
127
|
+
/* @__PURE__ */ l(
|
|
137
128
|
e.modal,
|
|
138
129
|
{
|
|
139
130
|
...e.props,
|
|
140
131
|
modalId: e.id,
|
|
141
|
-
close: () =>
|
|
132
|
+
close: () => f()
|
|
142
133
|
}
|
|
143
134
|
),
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
-
|
|
135
|
+
/* @__PURE__ */ l(
|
|
136
|
+
z,
|
|
146
137
|
{
|
|
147
|
-
className:
|
|
138
|
+
className: C(s.button, {
|
|
148
139
|
[s.doubleModal]: e.props.isDouble
|
|
149
140
|
}),
|
|
150
141
|
view: "secondary",
|
|
151
142
|
size: "xs",
|
|
152
|
-
leftAddons: /* @__PURE__ */
|
|
153
|
-
onClick: () =>
|
|
143
|
+
leftAddons: /* @__PURE__ */ l(O, {}),
|
|
144
|
+
onClick: () => f()
|
|
154
145
|
}
|
|
155
146
|
)
|
|
156
147
|
] })
|
|
157
148
|
}
|
|
158
149
|
),
|
|
159
|
-
/* @__PURE__ */
|
|
150
|
+
/* @__PURE__ */ l(
|
|
160
151
|
"button",
|
|
161
152
|
{
|
|
162
153
|
className: s.bg,
|
|
163
154
|
"aria-label": "Close dialog",
|
|
164
155
|
type: "button",
|
|
165
|
-
onClick: () =>
|
|
156
|
+
onClick: () => f()
|
|
166
157
|
}
|
|
167
158
|
)
|
|
168
159
|
]
|
|
@@ -170,5 +161,5 @@ const N = {
|
|
|
170
161
|
);
|
|
171
162
|
};
|
|
172
163
|
export {
|
|
173
|
-
|
|
164
|
+
W as Modal
|
|
174
165
|
};
|