@alphakits/ui 2.0.4 → 2.0.6
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/checkbox/component.js +6 -6
- package/dist/checkbox/component.js.map +1 -1
- package/dist/modal/components/modals/index.module.css +1 -1
- package/dist/modal/components/modals/index.module.css.js +9 -11
- package/dist/modal/components/modals/index.module.css.js.map +1 -1
- package/dist/modal/components/modals/modal.js +17 -17
- package/dist/modal/components/modals/modal.js.map +1 -1
- package/dist/modal/hooks/use-modal.d.ts +1 -1
- package/dist/modal/hooks/use-modal.js +5 -5
- package/dist/modal/hooks/use-modal.js.map +1 -1
- package/dist/modal/types.d.ts +2 -2
- package/dist/popover/index.module.css +1 -1
- package/package.json +1 -1
|
@@ -12,19 +12,19 @@ const P = y(
|
|
|
12
12
|
label: o,
|
|
13
13
|
hint: a,
|
|
14
14
|
size: d = "m",
|
|
15
|
-
align: p = "
|
|
15
|
+
align: p = "start",
|
|
16
16
|
addons: n,
|
|
17
17
|
block: h,
|
|
18
|
-
onChange:
|
|
18
|
+
onChange: t,
|
|
19
19
|
className: u,
|
|
20
20
|
name: N,
|
|
21
|
-
disabled:
|
|
21
|
+
disabled: m,
|
|
22
22
|
dataTestId: b,
|
|
23
23
|
indeterminate: l = !1,
|
|
24
24
|
...k
|
|
25
25
|
}, x) => {
|
|
26
26
|
const i = C(null), [R] = I(i, "keyboard"), g = (f) => {
|
|
27
|
-
|
|
27
|
+
t && t(f, { checked: f.target.checked, name: N });
|
|
28
28
|
};
|
|
29
29
|
return (
|
|
30
30
|
// eslint-disable-next-line jsx-a11y/label-has-associated-control
|
|
@@ -32,7 +32,7 @@ const P = y(
|
|
|
32
32
|
"label",
|
|
33
33
|
{
|
|
34
34
|
className: F(e.component, e[d], e[p], u, {
|
|
35
|
-
[e.disabled]:
|
|
35
|
+
[e.disabled]: m,
|
|
36
36
|
[e.checked]: r,
|
|
37
37
|
[e.indeterminate]: l,
|
|
38
38
|
[e.focused]: R,
|
|
@@ -46,7 +46,7 @@ const P = y(
|
|
|
46
46
|
{
|
|
47
47
|
type: "checkbox",
|
|
48
48
|
onChange: g,
|
|
49
|
-
disabled:
|
|
49
|
+
disabled: m,
|
|
50
50
|
checked: r,
|
|
51
51
|
"data-test-id": b,
|
|
52
52
|
...k
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sources":["../../src/checkbox/component.tsx"],"sourcesContent":["import React, {\n ChangeEvent, forwardRef, InputHTMLAttributes, ReactNode, useRef,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport CheckmarkS from '@alphakits/icons/dist/CheckmarkS';\nimport MinusM from '@alphakits/icons/dist/MinusM';\nimport cn from 'classnames';\n\nimport { useFocus } from '../hooks/useFocus';\n\nimport styles from './index.module.css';\n\ntype NativeProps = InputHTMLAttributes<HTMLInputElement>;\ntype Align = 'start' | 'center';\n\nexport type CheckboxProps = Omit<NativeProps, 'size' | 'onChange'> & {\n /**\n * Управление состоянием вкл/выкл чекбокса (native prop)\n */\n checked?: boolean;\n\n /**\n * Обработчик переключения чекбокса\n */\n onChange: (\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n event: ChangeEvent<HTMLInputElement>,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n payload: {\n checked: boolean;\n name?: string;\n },\n ) => void;\n\n /**\n * Текст подписи к чекбоксу\n */\n label?: ReactNode;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Размер компонента\n */\n size?: 's' | 'm';\n\n /**\n * Выравнивание\n */\n align?: Align;\n\n /**\n * Дополнительный слот\n */\n addons?: React.ReactNode;\n\n /**\n * Растягивать ли компонент на всю ширину\n */\n block?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Управление неопределенным состоянием чекбокса\n */\n indeterminate?: boolean;\n};\n\nexport const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n (\n {\n checked,\n label,\n hint,\n size = 'm',\n align = '
|
|
1
|
+
{"version":3,"file":"component.js","sources":["../../src/checkbox/component.tsx"],"sourcesContent":["import React, {\n ChangeEvent, forwardRef, InputHTMLAttributes, ReactNode, useRef,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport CheckmarkS from '@alphakits/icons/dist/CheckmarkS';\nimport MinusM from '@alphakits/icons/dist/MinusM';\nimport cn from 'classnames';\n\nimport { useFocus } from '../hooks/useFocus';\n\nimport styles from './index.module.css';\n\ntype NativeProps = InputHTMLAttributes<HTMLInputElement>;\ntype Align = 'start' | 'center';\n\nexport type CheckboxProps = Omit<NativeProps, 'size' | 'onChange'> & {\n /**\n * Управление состоянием вкл/выкл чекбокса (native prop)\n */\n checked?: boolean;\n\n /**\n * Обработчик переключения чекбокса\n */\n onChange: (\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n event: ChangeEvent<HTMLInputElement>,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n payload: {\n checked: boolean;\n name?: string;\n },\n ) => void;\n\n /**\n * Текст подписи к чекбоксу\n */\n label?: ReactNode;\n\n /**\n * Текст подсказки снизу\n */\n hint?: ReactNode;\n\n /**\n * Размер компонента\n */\n size?: 's' | 'm';\n\n /**\n * Выравнивание\n */\n align?: Align;\n\n /**\n * Дополнительный слот\n */\n addons?: React.ReactNode;\n\n /**\n * Растягивать ли компонент на всю ширину\n */\n block?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Управление неопределенным состоянием чекбокса\n */\n indeterminate?: boolean;\n};\n\nexport const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n (\n {\n checked,\n label,\n hint,\n size = 'm',\n align = 'start',\n addons,\n block,\n onChange,\n className,\n name,\n disabled,\n dataTestId,\n indeterminate = false,\n ...restProps\n },\n ref,\n ) => {\n const labelRef = useRef<HTMLLabelElement>(null);\n\n const [focused] = useFocus(labelRef, 'keyboard');\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(event, { checked: event.target.checked, name });\n }\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n <label\n className={ cn(styles.component, styles[size], styles[align], className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n [styles.indeterminate]: indeterminate,\n [styles.focused]: focused,\n [styles.block]: block,\n }) }\n ref={ mergeRefs([labelRef, ref]) }\n >\n <span className={ styles.box }>\n <input\n type=\"checkbox\"\n onChange={ handleChange }\n disabled={ disabled }\n checked={ checked }\n data-test-id={ dataTestId }\n { ...restProps }\n />\n\n { checked && <CheckmarkS /> }\n\n { indeterminate && !checked && (\n <div className={ styles.indeterminateIcon }>\n <MinusM />\n </div>\n ) }\n </span>\n\n { (label || hint) && (\n <span className={ styles.content }>\n { label && <span className={ styles.label }>{ label }</span> }\n { hint && <span className={ styles.hint }>{ hint }</span> }\n </span>\n ) }\n\n { addons && <span className={ styles.addons }>{ addons }</span> }\n </label>\n );\n },\n);\n\n/**\n * Для отображения в сторибуке\n */\nCheckbox.defaultProps = {\n indeterminate: false,\n};\n"],"names":["Checkbox","forwardRef","checked","label","hint","size","align","addons","block","onChange","className","name","disabled","dataTestId","indeterminate","restProps","ref","labelRef","useRef","focused","useFocus","handleChange","event","jsxs","cn","styles","mergeRefs","jsx","CheckmarkS","MinusM"],"mappings":";;;;;;;;AA2EO,MAAMA,IAAWC;AAAA,EACpB,CACI;AAAA,IACI,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,OAAAC,IAAQ;AAAA,IACR,QAAAC;AAAA,IACA,OAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,GAAGC;AAAA,EAAA,GAEPC,MACC;AACD,UAAMC,IAAWC,EAAyB,IAAI,GAExC,CAACC,CAAO,IAAIC,EAASH,GAAU,UAAU,GAEzCI,IAAe,CAACC,MAAyC;AAC3D,MAAIb,KACAA,EAASa,GAAO,EAAE,SAASA,EAAM,OAAO,SAAS,MAAAX,GAAM;AAAA,IAE/D;AAEA;AAAA;AAAA,MAEI,gBAAAY;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAYC,EAAGC,EAAO,WAAWA,EAAOpB,CAAI,GAAGoB,EAAOnB,CAAK,GAAGI,GAAW;AAAA,YACrE,CAACe,EAAO,QAAQ,GAAGb;AAAA,YACnB,CAACa,EAAO,OAAO,GAAGvB;AAAA,YAClB,CAACuB,EAAO,aAAa,GAAGX;AAAA,YACxB,CAACW,EAAO,OAAO,GAAGN;AAAA,YAClB,CAACM,EAAO,KAAK,GAAGjB;AAAA,UAAA,CACnB;AAAA,UACD,KAAMkB,EAAU,CAACT,GAAUD,CAAG,CAAC;AAAA,UAE/B,UAAA;AAAA,YAAA,gBAAAO,EAAC,QAAA,EAAK,WAAYE,EAAO,KACrB,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,UAAWN;AAAA,kBACX,UAAAT;AAAA,kBACA,SAAAV;AAAA,kBACA,gBAAeW;AAAA,kBACb,GAAGE;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGPb,uBAAY0B,GAAA,EAAW;AAAA,cAEvBd,KAAiB,CAACZ,KAChB,gBAAAyB,EAAC,OAAA,EAAI,WAAYF,EAAO,mBACpB,UAAA,gBAAAE,EAACE,GAAA,CAAA,CAAO,EAAA,CACZ;AAAA,YAAA,GAER;AAAA,aAEG1B,KAASC,MACR,gBAAAmB,EAAC,QAAA,EAAK,WAAYE,EAAO,SACnB,UAAA;AAAA,cAAAtB,KAAS,gBAAAwB,EAAC,QAAA,EAAK,WAAYF,EAAO,OAAU,UAAAtB,GAAO;AAAA,cACnDC,KAAQ,gBAAAuB,EAAC,QAAA,EAAK,WAAYF,EAAO,MAAS,UAAArB,EAAA,CAAM;AAAA,YAAA,GACtD;AAAA,YAGFG,KAAU,gBAAAoB,EAAC,QAAA,EAAK,WAAYF,EAAO,QAAW,UAAAlB,EAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA;AAAA,EAGpE;AACJ;AAKAP,EAAS,eAAe;AAAA,EACpB,eAAe;AACnB;"}
|
|
@@ -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:36px;right:32px;z-index:999}.
|
|
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:36px;right:32px;z-index:999}.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}@media screen and (max-width:823px){.right_e065,.center_nguy{max-width:100%!important;inset:0!important}.content_p1kc{width:100%!important;height:100%!important;max-height:100%!important;box-shadow:none!important;margin:0!important;border-radius:0!important}.button_js2W{top:24px!important;right:16px!important}}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import './index.module.css';
|
|
2
|
-
const
|
|
3
|
-
container:
|
|
4
|
-
content:
|
|
2
|
+
const n = "container_WE0K", t = "content_p1kc", o = "button_js2W", c = "inner_Zsdb", e = "right_e065", s = "bg_8ZfP", r = {
|
|
3
|
+
container: n,
|
|
4
|
+
content: t,
|
|
5
5
|
button: o,
|
|
6
|
-
doubleModal: e,
|
|
7
6
|
inner: c,
|
|
8
|
-
right:
|
|
9
|
-
bg:
|
|
7
|
+
right: e,
|
|
8
|
+
bg: s
|
|
10
9
|
};
|
|
11
10
|
export {
|
|
12
|
-
|
|
11
|
+
s as bg,
|
|
13
12
|
o as button,
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
n as container,
|
|
14
|
+
t as content,
|
|
16
15
|
r as default,
|
|
17
|
-
e as doubleModal,
|
|
18
16
|
c as inner,
|
|
19
|
-
|
|
17
|
+
e as right
|
|
20
18
|
};
|
|
21
19
|
//# sourceMappingURL=index.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as n, jsxs as u } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import y, { useState as C, useLayoutEffect as d, useCallback as h, useEffect as z } from "react";
|
|
3
|
+
import v from "classnames";
|
|
4
4
|
import { ButtonArrow as x } from "../../../button-arrow/component.js";
|
|
5
5
|
import o from "./index.module.css.js";
|
|
6
6
|
const k = {
|
|
@@ -9,36 +9,36 @@ const k = {
|
|
|
9
9
|
full: "96%"
|
|
10
10
|
}, F = ({
|
|
11
11
|
modal: e,
|
|
12
|
-
t:
|
|
12
|
+
t: b,
|
|
13
13
|
index: l,
|
|
14
14
|
dirtyModals: p,
|
|
15
15
|
closeModal: a,
|
|
16
16
|
currentModalId: r
|
|
17
17
|
}) => {
|
|
18
|
-
const c = -k[e.props.size] - 102, [
|
|
19
|
-
|
|
20
|
-
setTimeout(() =>
|
|
18
|
+
const c = -k[e.props.size] - 102, [w, f] = C(c);
|
|
19
|
+
d(() => {
|
|
20
|
+
setTimeout(() => f(0), 0);
|
|
21
21
|
}, []);
|
|
22
|
-
const
|
|
22
|
+
const m = h(
|
|
23
23
|
(s) => (
|
|
24
24
|
// eslint-disable-next-line no-restricted-globals
|
|
25
|
-
!p[s] || confirm(
|
|
25
|
+
!p[s] || confirm(b("common:exitConfirm"))
|
|
26
26
|
),
|
|
27
27
|
[p]
|
|
28
|
-
), t =
|
|
28
|
+
), t = h((s) => {
|
|
29
29
|
const { id: i } = e;
|
|
30
|
-
|
|
30
|
+
m(s || i) && (f(c), setTimeout(() => {
|
|
31
31
|
e.props.closeCallback && e.props.closeCallback(), a(s || i);
|
|
32
32
|
}, 250));
|
|
33
|
-
}, [a,
|
|
34
|
-
return
|
|
33
|
+
}, [a, m, e, c]);
|
|
34
|
+
return z(() => {
|
|
35
35
|
const s = (i) => {
|
|
36
36
|
(i.key === "27" || i.key === "Escape") && t(r);
|
|
37
37
|
};
|
|
38
38
|
return e.id === r && (window == null || window.addEventListener("keydown", s)), () => {
|
|
39
39
|
window == null || window.removeEventListener("keydown", s);
|
|
40
40
|
};
|
|
41
|
-
}, [t, r, e.id]), /* @__PURE__ */ n(
|
|
41
|
+
}, [t, r, e.id]), /* @__PURE__ */ n(y.Fragment, { children: /* @__PURE__ */ u(
|
|
42
42
|
"div",
|
|
43
43
|
{
|
|
44
44
|
className: o.container,
|
|
@@ -49,18 +49,18 @@ const k = {
|
|
|
49
49
|
/* @__PURE__ */ n(
|
|
50
50
|
"div",
|
|
51
51
|
{
|
|
52
|
-
className:
|
|
52
|
+
className: v(o.right, o.content),
|
|
53
53
|
style: {
|
|
54
54
|
zIndex: 9999999 + l,
|
|
55
55
|
width: k[e.props.size],
|
|
56
|
-
right:
|
|
56
|
+
right: w
|
|
57
57
|
},
|
|
58
58
|
children: /* @__PURE__ */ u("div", { className: o.inner, children: [
|
|
59
59
|
/* @__PURE__ */ n(e.modal, { ...e.props, close: () => t() }),
|
|
60
|
-
/* @__PURE__ */ n(
|
|
60
|
+
e.props.showCloser !== !1 && /* @__PURE__ */ n(
|
|
61
61
|
x,
|
|
62
62
|
{
|
|
63
|
-
className:
|
|
63
|
+
className: o.button,
|
|
64
64
|
size: "s",
|
|
65
65
|
type: "close",
|
|
66
66
|
onClick: () => t()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.js","sources":["../../../../src/modal/components/modals/modal.tsx"],"sourcesContent":["import React, {\n useCallback, useEffect, useLayoutEffect, useState,\n} from 'react';\nimport classNames from 'classnames';\n\nimport { ButtonArrow } from '../../../button-arrow';\nimport { ModalObject, TFunction } from '../../types';\n\nimport { ModalsProps } from '.';\n\nimport styles from './index.module.css';\n\nconst sizes = {\n s: 488,\n m: 888,\n full: '96%',\n};\n\ntype ModalProps = {\n modal: ModalObject;\n index: number;\n t: TFunction;\n} & Pick<ModalsProps, 'dirtyModals' | 'closeModal' | 'currentModalId'>;\n\nexport const Modal = ({\n modal, t, index, dirtyModals, closeModal, currentModalId,\n}: ModalProps) => {\n const modalFullWidth = -sizes[modal.props.size] - 102;\n const [modalPosition, setModalPosition] = useState(modalFullWidth);\n\n useLayoutEffect(() => {\n setTimeout(() => setModalPosition(0), 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const confirmClose = useCallback((id: string) =>\n // eslint-disable-next-line no-restricted-globals\n !dirtyModals[id] || confirm(t('common:exitConfirm'))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n , [dirtyModals]);\n\n const handleClose = useCallback((latestId?: string) => {\n const { id } = modal;\n\n if (!confirmClose(latestId || id)) return;\n\n setModalPosition(modalFullWidth);\n\n setTimeout(() => {\n if (modal.props.closeCallback) {\n modal.props.closeCallback();\n }\n closeModal(latestId || id);\n }, 250);\n }, [closeModal, confirmClose, modal, modalFullWidth]);\n\n useEffect(() => {\n const escapeListener = (event: KeyboardEvent) => {\n if (event.key === '27' || event.key === 'Escape') {\n handleClose(currentModalId);\n }\n };\n\n if (modal.id === currentModalId) {\n window?.addEventListener('keydown', escapeListener);\n }\n\n return () => {\n window?.removeEventListener('keydown', escapeListener);\n };\n }, [handleClose, currentModalId, modal.id]);\n\n return (\n <React.Fragment>\n <div\n className={ styles.container }\n style={ {\n zIndex: 9999998 + index,\n } }\n >\n <div\n className={ classNames(styles.right, styles.content) }\n style={ {\n zIndex: 9999999 + index,\n width: sizes[modal.props.size],\n right: modalPosition,\n } }\n >\n <div className={ styles.inner }>\n <modal.modal { ...modal.props } close={ () => handleClose() } />\n\n <ButtonArrow\n
|
|
1
|
+
{"version":3,"file":"modal.js","sources":["../../../../src/modal/components/modals/modal.tsx"],"sourcesContent":["import React, {\n useCallback, useEffect, useLayoutEffect, useState,\n} from 'react';\nimport classNames from 'classnames';\n\nimport { ButtonArrow } from '../../../button-arrow';\nimport { ModalObject, TFunction } from '../../types';\n\nimport { ModalsProps } from '.';\n\nimport styles from './index.module.css';\n\nconst sizes = {\n s: 488,\n m: 888,\n full: '96%',\n};\n\ntype ModalProps = {\n modal: ModalObject;\n index: number;\n t: TFunction;\n} & Pick<ModalsProps, 'dirtyModals' | 'closeModal' | 'currentModalId'>;\n\nexport const Modal = ({\n modal, t, index, dirtyModals, closeModal, currentModalId,\n}: ModalProps) => {\n const modalFullWidth = -sizes[modal.props.size] - 102;\n const [modalPosition, setModalPosition] = useState(modalFullWidth);\n\n useLayoutEffect(() => {\n setTimeout(() => setModalPosition(0), 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const confirmClose = useCallback((id: string) =>\n // eslint-disable-next-line no-restricted-globals\n !dirtyModals[id] || confirm(t('common:exitConfirm'))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n , [dirtyModals]);\n\n const handleClose = useCallback((latestId?: string) => {\n const { id } = modal;\n\n if (!confirmClose(latestId || id)) return;\n\n setModalPosition(modalFullWidth);\n\n setTimeout(() => {\n if (modal.props.closeCallback) {\n modal.props.closeCallback();\n }\n closeModal(latestId || id);\n }, 250);\n }, [closeModal, confirmClose, modal, modalFullWidth]);\n\n useEffect(() => {\n const escapeListener = (event: KeyboardEvent) => {\n if (event.key === '27' || event.key === 'Escape') {\n handleClose(currentModalId);\n }\n };\n\n if (modal.id === currentModalId) {\n window?.addEventListener('keydown', escapeListener);\n }\n\n return () => {\n window?.removeEventListener('keydown', escapeListener);\n };\n }, [handleClose, currentModalId, modal.id]);\n\n return (\n <React.Fragment>\n <div\n className={ styles.container }\n style={ {\n zIndex: 9999998 + index,\n } }\n >\n <div\n className={ classNames(styles.right, styles.content) }\n style={ {\n zIndex: 9999999 + index,\n width: sizes[modal.props.size],\n right: modalPosition,\n } }\n >\n <div className={ styles.inner }>\n <modal.modal { ...modal.props } close={ () => handleClose() } />\n\n { modal.props.showCloser !== false && (\n <ButtonArrow\n className={ styles.button }\n size=\"s\"\n type=\"close\"\n onClick={ () => handleClose() }\n />\n ) }\n </div>\n </div>\n\n <button\n className={ styles.bg }\n aria-label=\"close_backdrop\"\n type=\"button\"\n onClick={ () => handleClose() }\n />\n </div>\n\n </React.Fragment>\n );\n};\n"],"names":["sizes","Modal","modal","t","index","dirtyModals","closeModal","currentModalId","modalFullWidth","modalPosition","setModalPosition","useState","useLayoutEffect","confirmClose","useCallback","id","handleClose","latestId","useEffect","escapeListener","event","jsx","React","jsxs","styles","classNames","ButtonArrow"],"mappings":";;;;;AAYA,MAAMA,IAAQ;AAAA,EACV,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AACV,GAQaC,IAAQ,CAAC;AAAA,EAClB,OAAAC;AAAA,EAAO,GAAAC;AAAA,EAAG,OAAAC;AAAA,EAAO,aAAAC;AAAA,EAAa,YAAAC;AAAA,EAAY,gBAAAC;AAC9C,MAAkB;AACd,QAAMC,IAAiB,CAACR,EAAME,EAAM,MAAM,IAAI,IAAI,KAC5C,CAACO,GAAeC,CAAgB,IAAIC,EAASH,CAAc;AAEjE,EAAAI,EAAgB,MAAM;AAClB,eAAW,MAAMF,EAAiB,CAAC,GAAG,CAAC;AAAA,EAE3C,GAAG,CAAA,CAAE;AAEL,QAAMG,IAAeC;AAAA,IAAY,CAACC;AAAA;AAAA,MAE9B,CAACV,EAAYU,CAAE,KAAK,QAAQZ,EAAE,oBAAoB,CAAC;AAAA;AAAA,IAErD,CAACE,CAAW;AAAA,EAAA,GAERW,IAAcF,EAAY,CAACG,MAAsB;AACnD,UAAM,EAAE,IAAAF,MAAOb;AAEf,IAAKW,EAAaI,KAAYF,CAAE,MAEhCL,EAAiBF,CAAc,GAE/B,WAAW,MAAM;AACb,MAAIN,EAAM,MAAM,iBACZA,EAAM,MAAM,cAAA,GAEhBI,EAAWW,KAAYF,CAAE;AAAA,IAC7B,GAAG,GAAG;AAAA,EACV,GAAG,CAACT,GAAYO,GAAcX,GAAOM,CAAc,CAAC;AAEpD,SAAAU,EAAU,MAAM;AACZ,UAAMC,IAAiB,CAACC,MAAyB;AAC7C,OAAIA,EAAM,QAAQ,QAAQA,EAAM,QAAQ,aACpCJ,EAAYT,CAAc;AAAA,IAElC;AAEA,WAAIL,EAAM,OAAOK,MACb,yBAAQ,iBAAiB,WAAWY,KAGjC,MAAM;AACT,+BAAQ,oBAAoB,WAAWA;AAAA,IAC3C;AAAA,EACJ,GAAG,CAACH,GAAaT,GAAgBL,EAAM,EAAE,CAAC,GAGtC,gBAAAmB,EAACC,EAAM,UAAN,EACG,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAYC,EAAO;AAAA,MACnB,OAAQ;AAAA,QACJ,QAAQ,UAAUpB;AAAA,MAAA;AAAA,MAGtB,UAAA;AAAA,QAAA,gBAAAiB;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAYI,EAAWD,EAAO,OAAOA,EAAO,OAAO;AAAA,YACnD,OAAQ;AAAA,cACJ,QAAQ,UAAUpB;AAAA,cAClB,OAAOJ,EAAME,EAAM,MAAM,IAAI;AAAA,cAC7B,OAAOO;AAAA,YAAA;AAAA,YAGX,UAAA,gBAAAc,EAAC,OAAA,EAAI,WAAYC,EAAO,OACpB,UAAA;AAAA,cAAA,gBAAAH,EAACnB,EAAM,OAAN,EAAc,GAAGA,EAAM,OAAQ,OAAQ,MAAMc,EAAA,GAAgB;AAAA,cAE5Dd,EAAM,MAAM,eAAe,MACzB,gBAAAmB;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACG,WAAYF,EAAO;AAAA,kBACnB,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAU,MAAMR,EAAA;AAAA,gBAAY;AAAA,cAAA;AAAA,YAChC,EAAA,CAER;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAYG,EAAO;AAAA,YACnB,cAAW;AAAA,YACX,MAAK;AAAA,YACL,SAAU,MAAMR,EAAA;AAAA,UAAY;AAAA,QAAA;AAAA,MAChC;AAAA,IAAA;AAAA,EAAA,GAGR;AAER;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { ModalObject, ModalSize, OwnModalProps, TFunction } from '../types';
|
|
3
3
|
export declare const useModal: (t: TFunction) => {
|
|
4
|
-
openModal: <T extends unknown>(modal: React.FC<T>, size?: ModalSize,
|
|
4
|
+
openModal: <T extends unknown>(modal: React.FC<T>, size?: ModalSize, showCloser?: boolean) => (props?: OwnModalProps<T>, closeCallback?: () => void) => void;
|
|
5
5
|
modals: ModalObject[];
|
|
6
6
|
setModalDirty: (id: string, isDirty: boolean) => void;
|
|
7
7
|
currentModalId: string;
|
|
@@ -2,7 +2,7 @@ import n, { useEffect as I } from "react";
|
|
|
2
2
|
import { v4 as S } from "uuid";
|
|
3
3
|
import { deletePropertyById as g } from "../utils/delete-property-by-id.js";
|
|
4
4
|
const x = (c) => {
|
|
5
|
-
const [s, l] = n.useState([]), [
|
|
5
|
+
const [s, l] = n.useState([]), [u, M] = n.useState(""), [i, a] = n.useState({}), p = (o) => {
|
|
6
6
|
a((t) => g(t, o)), l((t) => t.filter((e) => e.id !== o));
|
|
7
7
|
}, m = (o) => {
|
|
8
8
|
l((t) => [...t, o]);
|
|
@@ -15,15 +15,15 @@ const x = (c) => {
|
|
|
15
15
|
return I(() => {
|
|
16
16
|
var t;
|
|
17
17
|
const o = (t = [...s].pop()) == null ? void 0 : t.id;
|
|
18
|
-
|
|
18
|
+
M(o || ""), document.body.style.overflow = s.length ? "hidden" : "unset";
|
|
19
19
|
}, [s]), {
|
|
20
|
-
openModal: (o, t = "s", e) => {
|
|
20
|
+
openModal: (o, t = "s", e = !0) => {
|
|
21
21
|
const y = (d, r) => ({
|
|
22
22
|
id: S(),
|
|
23
23
|
modal: o,
|
|
24
24
|
props: {
|
|
25
25
|
size: t,
|
|
26
|
-
|
|
26
|
+
showCloser: e,
|
|
27
27
|
closeCallback: r,
|
|
28
28
|
t: c,
|
|
29
29
|
...d
|
|
@@ -35,7 +35,7 @@ const x = (c) => {
|
|
|
35
35
|
},
|
|
36
36
|
modals: s,
|
|
37
37
|
setModalDirty: f,
|
|
38
|
-
currentModalId:
|
|
38
|
+
currentModalId: u,
|
|
39
39
|
dirtyModals: i,
|
|
40
40
|
closeModal: p
|
|
41
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-modal.js","sources":["../../../src/modal/hooks/use-modal.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { v4 as uuid } from 'uuid';\n\nimport {\n ModalObject, ModalSize, OwnModalProps, TFunction,\n} from '../types';\nimport { deletePropertyById } from '../utils/delete-property-by-id';\n\nexport const useModal = (t: TFunction) => {\n const [modals, setModals] = React.useState<ModalObject[]>([]);\n const [currentModalId, setCurrentModalId] = React.useState<string>('');\n const [dirtyModals, setDirtyModals] = React.useState<Record<string, boolean>>({\n });\n\n const closeModal = (id: string) => {\n setDirtyModals((oldDirtyModals) => deletePropertyById(oldDirtyModals, id));\n setModals((oldModals) => oldModals.filter((modal) => modal.id !== id));\n };\n\n const addModal = (modal: ModalObject) => {\n setModals((oldModals) => [...oldModals, modal]);\n };\n\n const setModalDirty = (id: string, isDirty: boolean) => {\n setDirtyModals((rest) => ({\n ...rest,\n [id]: isDirty,\n }));\n };\n\n useEffect(() => {\n const latestModalId = [...modals].pop()?.id;\n\n setCurrentModalId(latestModalId || '');\n document.body.style.overflow = modals.length ? 'hidden' : 'unset';\n }, [modals]);\n\n const openModal = <T extends unknown>(modal: React.FC<T>, size: ModalSize = 's',
|
|
1
|
+
{"version":3,"file":"use-modal.js","sources":["../../../src/modal/hooks/use-modal.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { v4 as uuid } from 'uuid';\n\nimport {\n ModalObject, ModalSize, OwnModalProps, TFunction,\n} from '../types';\nimport { deletePropertyById } from '../utils/delete-property-by-id';\n\nexport const useModal = (t: TFunction) => {\n const [modals, setModals] = React.useState<ModalObject[]>([]);\n const [currentModalId, setCurrentModalId] = React.useState<string>('');\n const [dirtyModals, setDirtyModals] = React.useState<Record<string, boolean>>({\n });\n\n const closeModal = (id: string) => {\n setDirtyModals((oldDirtyModals) => deletePropertyById(oldDirtyModals, id));\n setModals((oldModals) => oldModals.filter((modal) => modal.id !== id));\n };\n\n const addModal = (modal: ModalObject) => {\n setModals((oldModals) => [...oldModals, modal]);\n };\n\n const setModalDirty = (id: string, isDirty: boolean) => {\n setDirtyModals((rest) => ({\n ...rest,\n [id]: isDirty,\n }));\n };\n\n useEffect(() => {\n const latestModalId = [...modals].pop()?.id;\n\n setCurrentModalId(latestModalId || '');\n document.body.style.overflow = modals.length ? 'hidden' : 'unset';\n }, [modals]);\n\n const openModal = <T extends unknown>(modal: React.FC<T>, size: ModalSize = 's', showCloser = true) => {\n const getModal = (params?: OwnModalProps<T>, closeCallback?: () => void) => {\n const id = uuid();\n\n return {\n id,\n modal,\n props: {\n size,\n showCloser,\n closeCallback,\n t,\n ...params,\n },\n } as unknown as ModalObject;\n };\n\n return (props?: OwnModalProps<T>, closeCallback?: () => void) => {\n addModal(getModal(props, closeCallback));\n };\n };\n\n return {\n openModal, modals, setModalDirty, currentModalId, dirtyModals, closeModal,\n };\n};\n"],"names":["useModal","t","modals","setModals","React","currentModalId","setCurrentModalId","dirtyModals","setDirtyModals","closeModal","id","oldDirtyModals","deletePropertyById","oldModals","modal","addModal","setModalDirty","isDirty","rest","useEffect","latestModalId","_a","size","showCloser","getModal","params","closeCallback","uuid","props"],"mappings":";;;AAQO,MAAMA,IAAW,CAACC,MAAiB;AACtC,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAM,SAAwB,CAAA,CAAE,GACtD,CAACC,GAAgBC,CAAiB,IAAIF,EAAM,SAAiB,EAAE,GAC/D,CAACG,GAAaC,CAAc,IAAIJ,EAAM,SAAkC,CAAA,CAC7E,GAEKK,IAAa,CAACC,MAAe;AAC/B,IAAAF,EAAe,CAACG,MAAmBC,EAAmBD,GAAgBD,CAAE,CAAC,GACzEP,EAAU,CAACU,MAAcA,EAAU,OAAO,CAACC,MAAUA,EAAM,OAAOJ,CAAE,CAAC;AAAA,EACzE,GAEMK,IAAW,CAACD,MAAuB;AACrC,IAAAX,EAAU,CAACU,MAAc,CAAC,GAAGA,GAAWC,CAAK,CAAC;AAAA,EAClD,GAEME,IAAgB,CAACN,GAAYO,MAAqB;AACpD,IAAAT,EAAe,CAACU,OAAU;AAAA,MACtB,GAAGA;AAAA,MACH,CAACR,CAAE,GAAGO;AAAA,IAAA,EACR;AAAA,EACN;AAEA,SAAAE,EAAU,MAAM;;AACZ,UAAMC,KAAgBC,IAAA,CAAC,GAAGnB,CAAM,EAAE,UAAZ,gBAAAmB,EAAmB;AAEzC,IAAAf,EAAkBc,KAAiB,EAAE,GACrC,SAAS,KAAK,MAAM,WAAWlB,EAAO,SAAS,WAAW;AAAA,EAC9D,GAAG,CAACA,CAAM,CAAC,GAwBJ;AAAA,IACH,WAvBc,CAAoBY,GAAoBQ,IAAkB,KAAKC,IAAa,OAAS;AACnG,YAAMC,IAAW,CAACC,GAA2BC,OAGlC;AAAA,QACH,IAHOC,EAAA;AAAA,QAIP,OAAAb;AAAA,QACA,OAAO;AAAA,UACH,MAAAQ;AAAA,UACA,YAAAC;AAAA,UACA,eAAAG;AAAA,UACA,GAAAzB;AAAA,UACA,GAAGwB;AAAA,QAAA;AAAA,MACP;AAIR,aAAO,CAACG,GAA0BF,MAA+B;AAC7D,QAAAX,EAASS,EAASI,GAAOF,CAAa,CAAC;AAAA,MAC3C;AAAA,IACJ;AAAA,IAGe,QAAAxB;AAAA,IAAQ,eAAAc;AAAA,IAAe,gBAAAX;AAAA,IAAgB,aAAAE;AAAA,IAAa,YAAAE;AAAA,EAAA;AAEvE;"}
|
package/dist/modal/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ type ModalProps = {
|
|
|
3
3
|
closeCallback: () => void;
|
|
4
4
|
close: () => void;
|
|
5
5
|
size: ModalSize;
|
|
6
|
-
|
|
6
|
+
showCloser?: boolean;
|
|
7
7
|
t: TFunction;
|
|
8
8
|
} & unknown;
|
|
9
9
|
export type TFunction = (field: string, options?: {
|
|
@@ -19,7 +19,7 @@ export type ModalObject = {
|
|
|
19
19
|
props: ModalProps;
|
|
20
20
|
};
|
|
21
21
|
export type ContextProps = {
|
|
22
|
-
openModal: <T>(modal: React.FC<T>, size?: ModalSize,
|
|
22
|
+
openModal: <T>(modal: React.FC<T>, size?: ModalSize, showCloser?: boolean) => (props?: OwnModalProps<T>, closeCallback?: () => void) => void;
|
|
23
23
|
modals: ModalObject[];
|
|
24
24
|
currentModalId: ModalObject['id'];
|
|
25
25
|
setModalDirty: (id: ModalObject['id'], isDirty: boolean) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--text-primary-color: var(--color-text-primary);--text-secondary-color: var(--color-text-secondary);--text-tertiary-color: var(--color-text-tertiary);--border-radius: 4px;--focus-color: var(--color-border-link);--font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, sans-serif;--disabled-cursor: not-allowed;--arrow-transform: rotate(180deg)}:root{--popover-border-color: transparent;--popover-z-index: 2}.component_M4dA{background-color:var(--color-bg-primary);box-shadow:var(--shadow-s);border:1px solid var(--popover-border-color);z-index:var(--popover-z-index);transition-property:opacity;transition-timing-function:ease;box-sizing:border-box}.arrow_rhvi:after{content:"";display:block;position:absolute;width:10px;height:10px;background-color:var(--color-bg-primary);border:1px solid var(--popover-border-color);transform:rotate(45deg)}.component_M4dA[data-popper-placement=left] .arrow_rhvi,.component_M4dA[data-popper-placement=left-start] .arrow_rhvi,.component_M4dA[data-popper-placement=left-end] .arrow_rhvi{right:5px}:is(.component_M4dA[data-popper-placement=left] .arrow_rhvi,.component_M4dA[data-popper-placement=left-start] .arrow_rhvi,.component_M4dA[data-popper-placement=left-end] .arrow_rhvi):after{top:-4px;border-bottom:none;border-left:none}.component_M4dA[data-popper-placement=right] .arrow_rhvi,.component_M4dA[data-popper-placement=right-start] .arrow_rhvi,.component_M4dA[data-popper-placement=right-end] .arrow_rhvi{left:-6px}:is(.component_M4dA[data-popper-placement=right] .arrow_rhvi,.component_M4dA[data-popper-placement=right-start] .arrow_rhvi,.component_M4dA[data-popper-placement=right-end] .arrow_rhvi):after{top:-4px;border-top:none;border-right:none}.component_M4dA[data-popper-placement=top] .arrow_rhvi,.component_M4dA[data-popper-placement=top-start] .arrow_rhvi,.component_M4dA[data-popper-placement=top-end] .arrow_rhvi{bottom:5px}:is(.component_M4dA[data-popper-placement=top] .arrow_rhvi,.component_M4dA[data-popper-placement=top-start] .arrow_rhvi,.component_M4dA[data-popper-placement=top-end] .arrow_rhvi):after{left:-4px;border-top:none;border-left:none}.component_M4dA[data-popper-placement=bottom] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-start] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-end] .arrow_rhvi{top:-6px}:is(.component_M4dA[data-popper-placement=bottom] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-start] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-end] .arrow_rhvi):after{left:-4px;border-bottom:none;border-right:none}.enter_3MWR{opacity:0}.enterActive_pPMD,.exit_4hKA{opacity:1}.exitActive_vWe9{opacity:0}
|
|
1
|
+
:root{--text-primary-color: var(--color-text-primary);--text-secondary-color: var(--color-text-secondary);--text-tertiary-color: var(--color-text-tertiary);--border-radius: 4px;--focus-color: var(--color-border-link);--font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, sans-serif;--disabled-cursor: not-allowed;--arrow-transform: rotate(180deg)}:root{--popover-border-color: transparent;--popover-z-index: 2}.component_M4dA{background-color:var(--color-bg-primary);box-shadow:var(--shadow-s);border:1px solid var(--popover-border-color);z-index:var(--popover-z-index);transition-property:opacity;transition-timing-function:ease;box-sizing:border-box}.arrow_rhvi{position:absolute;width:10px;height:10px;pointer-events:none}.arrow_rhvi:after{content:"";display:block;position:absolute;width:10px;height:10px;background-color:var(--color-bg-primary);border:1px solid var(--popover-border-color);transform:rotate(45deg)}.component_M4dA[data-popper-placement=left] .arrow_rhvi,.component_M4dA[data-popper-placement=left-start] .arrow_rhvi,.component_M4dA[data-popper-placement=left-end] .arrow_rhvi{right:5px}:is(.component_M4dA[data-popper-placement=left] .arrow_rhvi,.component_M4dA[data-popper-placement=left-start] .arrow_rhvi,.component_M4dA[data-popper-placement=left-end] .arrow_rhvi):after{top:-4px;border-bottom:none;border-left:none}.component_M4dA[data-popper-placement=right] .arrow_rhvi,.component_M4dA[data-popper-placement=right-start] .arrow_rhvi,.component_M4dA[data-popper-placement=right-end] .arrow_rhvi{left:-6px}:is(.component_M4dA[data-popper-placement=right] .arrow_rhvi,.component_M4dA[data-popper-placement=right-start] .arrow_rhvi,.component_M4dA[data-popper-placement=right-end] .arrow_rhvi):after{top:-4px;border-top:none;border-right:none}.component_M4dA[data-popper-placement=top] .arrow_rhvi,.component_M4dA[data-popper-placement=top-start] .arrow_rhvi,.component_M4dA[data-popper-placement=top-end] .arrow_rhvi{bottom:5px}:is(.component_M4dA[data-popper-placement=top] .arrow_rhvi,.component_M4dA[data-popper-placement=top-start] .arrow_rhvi,.component_M4dA[data-popper-placement=top-end] .arrow_rhvi):after{left:-4px;border-top:none;border-left:none}.component_M4dA[data-popper-placement=bottom] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-start] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-end] .arrow_rhvi{top:-6px}:is(.component_M4dA[data-popper-placement=bottom] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-start] .arrow_rhvi,.component_M4dA[data-popper-placement=bottom-end] .arrow_rhvi):after{left:-4px;border-bottom:none;border-right:none}.enter_3MWR{opacity:0}.enterActive_pPMD,.exit_4hKA{opacity:1}.exitActive_vWe9{opacity:0}
|