smarthr-ui 20.1.2 → 20.3.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.
- package/CHANGELOG.md +27 -0
- package/esm/components/Dialog/ActionDialog.d.ts +2 -2
- package/esm/components/Dialog/ActionDialog.js +6 -13
- package/esm/components/Dialog/ActionDialog.js.map +1 -1
- package/esm/components/Dialog/Dialog.d.ts +2 -2
- package/esm/components/Dialog/Dialog.js +5 -12
- package/esm/components/Dialog/Dialog.js.map +1 -1
- package/esm/components/Dialog/DialogWrapper.js +5 -11
- package/esm/components/Dialog/DialogWrapper.js.map +1 -1
- package/esm/components/Dialog/FocusTrap.js +2 -1
- package/esm/components/Dialog/FocusTrap.js.map +1 -1
- package/esm/components/Dialog/MessageDialog.d.ts +3 -3
- package/esm/components/Dialog/MessageDialog.js +8 -13
- package/esm/components/Dialog/MessageDialog.js.map +1 -1
- package/esm/components/Dialog/MessageDialogContent.d.ts +1 -1
- package/esm/components/Dialog/MessageDialogContent.js +4 -2
- package/esm/components/Dialog/MessageDialogContent.js.map +1 -1
- package/esm/components/Dialog/MessageDialogContentInner.d.ts +4 -3
- package/esm/components/Dialog/MessageDialogContentInner.js +2 -2
- package/esm/components/Dialog/MessageDialogContentInner.js.map +1 -1
- package/esm/components/Dialog/ModelessDialog.d.ts +2 -2
- package/esm/components/Dialog/ModelessDialog.js +36 -43
- package/esm/components/Dialog/ModelessDialog.js.map +1 -1
- package/esm/components/Dialog/useDialogPortal.d.ts +7 -0
- package/esm/components/Dialog/useDialogPortal.js +29 -0
- package/esm/components/Dialog/useDialogPortal.js.map +1 -0
- package/esm/components/InformationPanel/InformationPanel.d.ts +3 -3
- package/lib/components/Dialog/ActionDialog.d.ts +2 -2
- package/lib/components/Dialog/ActionDialog.js +5 -12
- package/lib/components/Dialog/ActionDialog.js.map +1 -1
- package/lib/components/Dialog/Dialog.d.ts +2 -2
- package/lib/components/Dialog/Dialog.js +7 -34
- package/lib/components/Dialog/Dialog.js.map +1 -1
- package/lib/components/Dialog/DialogWrapper.js +4 -10
- package/lib/components/Dialog/DialogWrapper.js.map +1 -1
- package/lib/components/Dialog/FocusTrap.js +2 -1
- package/lib/components/Dialog/FocusTrap.js.map +1 -1
- package/lib/components/Dialog/MessageDialog.d.ts +3 -3
- package/lib/components/Dialog/MessageDialog.js +7 -12
- package/lib/components/Dialog/MessageDialog.js.map +1 -1
- package/lib/components/Dialog/MessageDialogContent.d.ts +1 -1
- package/lib/components/Dialog/MessageDialogContent.js +4 -2
- package/lib/components/Dialog/MessageDialogContent.js.map +1 -1
- package/lib/components/Dialog/MessageDialogContentInner.d.ts +4 -3
- package/lib/components/Dialog/MessageDialogContentInner.js +2 -2
- package/lib/components/Dialog/MessageDialogContentInner.js.map +1 -1
- package/lib/components/Dialog/ModelessDialog.d.ts +2 -2
- package/lib/components/Dialog/ModelessDialog.js +36 -43
- package/lib/components/Dialog/ModelessDialog.js.map +1 -1
- package/lib/components/Dialog/useDialogPortal.d.ts +7 -0
- package/lib/components/Dialog/useDialogPortal.js +33 -0
- package/lib/components/Dialog/useDialogPortal.js.map +1 -0
- package/lib/components/InformationPanel/InformationPanel.d.ts +3 -3
- package/package.json +25 -25
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [20.3.0](https://github.com/kufu/smarthr-ui/compare/v20.2.1...v20.3.0) (2022-04-18)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* use ReactNode for i18n ([#2428](https://github.com/kufu/smarthr-ui/issues/2428)) ([a50cb2f](https://github.com/kufu/smarthr-ui/commit/a50cb2f48f2897bfa5516e96c49f8d1a7e0e16c2))
|
|
11
|
+
|
|
12
|
+
### [20.2.1](https://github.com/kufu/smarthr-ui/compare/v20.2.0...v20.2.1) (2022-04-14)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* fix timing of appending portal ([#2424](https://github.com/kufu/smarthr-ui/issues/2424)) ([29cd62a](https://github.com/kufu/smarthr-ui/commit/29cd62afd113c840b81abeef3326e583c774ba61))
|
|
18
|
+
* ダイアログのフォーカストラップを抜けてしまう問題を修正 ([#2404](https://github.com/kufu/smarthr-ui/issues/2404)) ([91c3b90](https://github.com/kufu/smarthr-ui/commit/91c3b90721c33bbcb9d1a8d0d50561873cf4c356))
|
|
19
|
+
|
|
20
|
+
## [20.2.0](https://github.com/kufu/smarthr-ui/compare/v20.1.2...v20.2.0) (2022-04-12)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* string to ReactNode ([#2400](https://github.com/kufu/smarthr-ui/issues/2400)) ([200947d](https://github.com/kufu/smarthr-ui/commit/200947dd4483e6171c61c35c1753763d3828a12f))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* ダイアログのポータルが DOM に追加される前に子のライフサイクルが開始されないように修正 ([#2403](https://github.com/kufu/smarthr-ui/issues/2403)) ([062a564](https://github.com/kufu/smarthr-ui/commit/062a5645cbebccf25f0de7ef4e1113e764379066))
|
|
31
|
+
|
|
5
32
|
### [20.1.2](https://github.com/kufu/smarthr-ui/compare/v20.1.1...v20.1.2) (2022-04-06)
|
|
6
33
|
|
|
7
34
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import React, { HTMLAttributes } from 'react';
|
|
1
|
+
import React, { HTMLAttributes, RefObject } from 'react';
|
|
2
2
|
import { DialogContentInnerProps } from './DialogContentInner';
|
|
3
3
|
import { ActionDialogContentInnerProps } from './ActionDialogContentInner';
|
|
4
4
|
declare type Props = Omit<ActionDialogContentInnerProps, 'titleId'> & {
|
|
5
5
|
onClickClose: () => void;
|
|
6
|
-
portalParent?: HTMLElement
|
|
6
|
+
portalParent?: HTMLElement | RefObject<HTMLElement>;
|
|
7
7
|
} & Pick<DialogContentInnerProps, 'isOpen' | 'onClickOverlay' | 'onPressEscape' | 'width' | 'top' | 'right' | 'bottom' | 'left' | 'id'>;
|
|
8
8
|
declare type ElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof Props>;
|
|
9
9
|
export declare const ActionDialog: React.VFC<Props & ElementProps>;
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
import React, { useCallback
|
|
2
|
-
import { createPortal } from 'react-dom';
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
3
2
|
import { useId } from '../../hooks/useId';
|
|
3
|
+
import { useDialogPortal } from './useDialogPortal';
|
|
4
4
|
import { DialogContentInner } from './DialogContentInner';
|
|
5
5
|
import { ActionDialogContentInner } from './ActionDialogContentInner';
|
|
6
6
|
export const ActionDialog = ({ children, title, subtitle, closeText, actionText, actionTheme, onClickAction, onClickClose, responseMessage, actionDisabled = false, closeDisabled, className = '', portalParent, ...props }) => {
|
|
7
|
-
const
|
|
7
|
+
const { Portal } = useDialogPortal(portalParent);
|
|
8
8
|
const titleId = useId();
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
// SSR を考慮し、useEffect 内で初期値 document.body を指定
|
|
11
|
-
const pp = portalParent || document.body;
|
|
12
|
-
pp.appendChild(portalContainer);
|
|
13
|
-
return () => {
|
|
14
|
-
pp.removeChild(portalContainer);
|
|
15
|
-
};
|
|
16
|
-
}, [portalContainer, portalParent]);
|
|
17
9
|
const handleClickClose = useCallback(() => {
|
|
18
10
|
if (!props.isOpen) {
|
|
19
11
|
return;
|
|
@@ -26,7 +18,8 @@ export const ActionDialog = ({ children, title, subtitle, closeText, actionText,
|
|
|
26
18
|
}
|
|
27
19
|
onClickAction(onClickClose);
|
|
28
20
|
}, [onClickAction, onClickClose, props.isOpen]);
|
|
29
|
-
return
|
|
30
|
-
React.createElement(
|
|
21
|
+
return (React.createElement(Portal, null,
|
|
22
|
+
React.createElement(DialogContentInner, { ariaLabelledby: titleId, className: className, ...props },
|
|
23
|
+
React.createElement(ActionDialogContentInner, { title: title, titleId: titleId, subtitle: subtitle, closeText: closeText, actionText: actionText, actionTheme: actionTheme, actionDisabled: actionDisabled, closeDisabled: closeDisabled, onClickClose: handleClickClose, onClickAction: handleClickAction, responseMessage: responseMessage }, children))));
|
|
31
24
|
};
|
|
32
25
|
//# sourceMappingURL=ActionDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ActionDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/ActionDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,WAAW,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAiC,MAAM,4BAA4B,CAAA;AAmBpG,MAAM,CAAC,MAAM,YAAY,GAAoC,CAAC,EAC5D,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,GAAG,KAAK,EACtB,aAAa,EACb,SAAS,GAAG,EAAE,EACd,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IAEvB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAM;SACP;QACD,YAAY,EAAE,CAAA;IAChB,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAEhC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAM;SACP;QACD,aAAa,CAAC,YAAY,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAE/C,OAAO,CACL,oBAAC,MAAM;QACL,oBAAC,kBAAkB,IAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,KAAM,KAAK;YAC1E,oBAAC,wBAAwB,IACvB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,eAAe,IAE/B,QAAQ,CACgB,CACR,CACd,CACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React, { HTMLAttributes } from 'react';
|
|
1
|
+
import React, { HTMLAttributes, RefObject } from 'react';
|
|
2
2
|
import { DialogContentInnerProps } from './DialogContentInner';
|
|
3
3
|
declare type Props = DialogContentInnerProps & {
|
|
4
|
-
portalParent?: HTMLElement
|
|
4
|
+
portalParent?: HTMLElement | RefObject<HTMLElement>;
|
|
5
5
|
};
|
|
6
6
|
declare type ElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof Props>;
|
|
7
7
|
export declare const Dialog: React.VFC<Props & ElementProps>;
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useDialogPortal } from './useDialogPortal';
|
|
3
3
|
import { DialogContentInner } from './DialogContentInner';
|
|
4
4
|
export const Dialog = ({ children, className = '', portalParent, ...props }) => {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const pp = portalParent || document.body;
|
|
9
|
-
pp.appendChild(portalContainer);
|
|
10
|
-
return () => {
|
|
11
|
-
pp.removeChild(portalContainer);
|
|
12
|
-
};
|
|
13
|
-
}, [portalContainer, portalParent]);
|
|
14
|
-
return createPortal(React.createElement(DialogContentInner, { className: className, ...props }, children), portalContainer);
|
|
5
|
+
const { Portal } = useDialogPortal(portalParent);
|
|
6
|
+
return (React.createElement(Portal, null,
|
|
7
|
+
React.createElement(DialogContentInner, { className: className, ...props }, children)));
|
|
15
8
|
};
|
|
16
9
|
//# sourceMappingURL=Dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Dialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAA;AAKlF,MAAM,CAAC,MAAM,MAAM,GAAoC,CAAC,EACtD,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAEhD,OAAO,CACL,oBAAC,MAAM;QACL,oBAAC,kBAAkB,IAAC,SAAS,EAAE,SAAS,KAAM,KAAK,IAChD,QAAQ,CACU,CACd,CACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, { createContext,
|
|
2
|
-
import {
|
|
1
|
+
import React, { createContext, useMemo, useState } from 'react';
|
|
2
|
+
import { useDialogPortal } from './useDialogPortal';
|
|
3
3
|
export const DialogContext = createContext({
|
|
4
4
|
onClickTrigger: () => {
|
|
5
5
|
/* noop */
|
|
@@ -12,17 +12,11 @@ export const DialogContext = createContext({
|
|
|
12
12
|
});
|
|
13
13
|
export const DialogWrapper = ({ children }) => {
|
|
14
14
|
const [active, setActive] = useState(false);
|
|
15
|
-
const
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
document.body.appendChild(element);
|
|
18
|
-
return () => {
|
|
19
|
-
document.body.removeChild(element);
|
|
20
|
-
};
|
|
21
|
-
}, [element]);
|
|
15
|
+
const { Portal } = useDialogPortal();
|
|
22
16
|
// This is the root container of a dialog content located in outside the DOM tree
|
|
23
17
|
const DialogContentRoot = useMemo(() => (props) => {
|
|
24
|
-
return
|
|
25
|
-
}, [
|
|
18
|
+
return React.createElement(Portal, null, props.children);
|
|
19
|
+
}, [Portal]);
|
|
26
20
|
// set the displayName explicit for DevTools
|
|
27
21
|
DialogContentRoot.displayName = 'DialogContentRoot';
|
|
28
22
|
return (React.createElement(DialogContext.Provider, { value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogWrapper.js","sourceRoot":"","sources":["../../../src/components/Dialog/DialogWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"DialogWrapper.js","sourceRoot":"","sources":["../../../src/components/Dialog/DialogWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AASnD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAoB;IAC5D,cAAc,EAAE,GAAG,EAAE;QACnB,UAAU;IACZ,CAAC;IACD,YAAY,EAAE,GAAG,EAAE;QACjB,UAAU;IACZ,CAAC;IACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;IAC7B,MAAM,EAAE,KAAK;CACd,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAA8C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAA;IAEpC,iFAAiF;IACjF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,OAAO,oBAAC,MAAM,QAAE,KAAK,CAAC,QAAQ,CAAU,CAAA;IAC1C,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAA;IACD,4CAA4C;IAC5C,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAA;IAEnD,OAAO,CACL,oBAAC,aAAa,CAAC,QAAQ,IACrB,KAAK,EAAE;YACL,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YACrC,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;YACpC,iBAAiB;YACjB,MAAM;SACP,IAEA,QAAQ,CACc,CAC1B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -14,7 +14,8 @@ export const FocusTrap = ({ children }) => {
|
|
|
14
14
|
const firstTabbale = tabbables[0];
|
|
15
15
|
const lastTabbale = tabbables[tabbables.length - 1];
|
|
16
16
|
const currentFocused = Array.from(tabbables).find((elm) => elm === e.target);
|
|
17
|
-
if (e.shiftKey &&
|
|
17
|
+
if (e.shiftKey &&
|
|
18
|
+
(currentFocused === firstTabbale || document.activeElement === focusTargetRef.current)) {
|
|
18
19
|
lastTabbale.focus();
|
|
19
20
|
e.preventDefault();
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../../src/components/Dialog/FocusTrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkB,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAM9C,MAAM,CAAC,MAAM,SAAS,GAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpD,MAAM,GAAG,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAEnD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAgB,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE;YAC3C,OAAM;SACP;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;QAC1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAM;SACP;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACnD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;QAC5E,
|
|
1
|
+
{"version":3,"file":"FocusTrap.js","sourceRoot":"","sources":["../../../src/components/Dialog/FocusTrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkB,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAM9C,MAAM,CAAC,MAAM,SAAS,GAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpD,MAAM,GAAG,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAEnD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAgB,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE;YAC3C,OAAM;SACP;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;QAC1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAM;SACP;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACnD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;QAC5E,IACE,CAAC,CAAC,QAAQ;YACV,CAAC,cAAc,KAAK,YAAY,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,CAAC,OAAO,CAAC,EACtF;YACA,WAAW,CAAC,KAAK,EAAE,CAAA;YACnB,CAAC,CAAC,cAAc,EAAE,CAAA;SACnB;aAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,cAAc,KAAK,WAAW,EAAE;YACxD,YAAY,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC,CAAC,cAAc,EAAE,CAAA;SACnB;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACtD,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAA;QAC7C,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;QAE/B,OAAO,GAAG,EAAE;YACV,4BAA4B;YAC5B,IAAI,cAAc,YAAY,WAAW,EAAE;gBACzC,cAAc,CAAC,KAAK,EAAE,CAAA;aACvB;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,6BAAK,GAAG,EAAE,GAAG;QAEX,6BAAK,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAI;QACzC,QAAQ,CACL,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React, { HTMLAttributes } from 'react';
|
|
1
|
+
import React, { HTMLAttributes, RefObject } from 'react';
|
|
2
2
|
import { DialogContentInnerProps } from './DialogContentInner';
|
|
3
3
|
import { MessageDialogContentInnerProps } from './MessageDialogContentInner';
|
|
4
|
-
declare type Props = MessageDialogContentInnerProps & Pick<DialogContentInnerProps, 'isOpen' | 'onClickOverlay' | 'onPressEscape' | 'width' | 'top' | 'right' | 'bottom' | 'left' | 'id'> & {
|
|
5
|
-
portalParent?: HTMLElement
|
|
4
|
+
declare type Props = Omit<MessageDialogContentInnerProps, 'titleId'> & Pick<DialogContentInnerProps, 'isOpen' | 'onClickOverlay' | 'onPressEscape' | 'width' | 'top' | 'right' | 'bottom' | 'left' | 'id'> & {
|
|
5
|
+
portalParent?: HTMLElement | RefObject<HTMLElement>;
|
|
6
6
|
};
|
|
7
7
|
declare type ElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof Props>;
|
|
8
8
|
export declare const MessageDialog: React.VFC<Props & ElementProps>;
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import React, { useCallback
|
|
2
|
-
import {
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
|
+
import { useDialogPortal } from './useDialogPortal';
|
|
3
3
|
import { DialogContentInner } from './DialogContentInner';
|
|
4
4
|
import { MessageDialogContentInner, } from './MessageDialogContentInner';
|
|
5
|
+
import { useId } from '../../hooks/useId';
|
|
5
6
|
export const MessageDialog = ({ title, subtitle, description, closeText, onClickClose, className = '', portalParent, ...props }) => {
|
|
6
|
-
const
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
// SSR を考慮し、useEffect 内で初期値 document.body を指定
|
|
9
|
-
const pp = portalParent || document.body;
|
|
10
|
-
pp.appendChild(portalContainer);
|
|
11
|
-
return () => {
|
|
12
|
-
pp.removeChild(portalContainer);
|
|
13
|
-
};
|
|
14
|
-
}, [portalContainer, portalParent]);
|
|
7
|
+
const { Portal } = useDialogPortal(portalParent);
|
|
15
8
|
const handleClickClose = useCallback(() => {
|
|
16
9
|
if (!props.isOpen) {
|
|
17
10
|
return;
|
|
18
11
|
}
|
|
19
12
|
onClickClose();
|
|
20
13
|
}, [onClickClose, props.isOpen]);
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
const titleId = useId();
|
|
15
|
+
return (React.createElement(Portal, null,
|
|
16
|
+
React.createElement(DialogContentInner, { "aria-labelledby": titleId, className: className, ...props },
|
|
17
|
+
React.createElement(MessageDialogContentInner, { title: title, titleId: titleId, subtitle: subtitle, description: description, closeText: closeText, onClickClose: handleClickClose }))));
|
|
23
18
|
};
|
|
24
19
|
//# sourceMappingURL=MessageDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"MessageDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,WAAW,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EACL,yBAAyB,GAE1B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAiBzC,MAAM,CAAC,MAAM,aAAa,GAAoC,CAAC,EAC7D,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,GAAG,EAAE,EACd,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAChD,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAM;SACP;QACD,YAAY,EAAE,CAAA;IAChB,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAChC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IAEvB,OAAO,CACL,oBAAC,MAAM;QACL,oBAAC,kBAAkB,uBAAkB,OAAO,EAAE,SAAS,EAAE,SAAS,KAAM,KAAK;YAC3E,oBAAC,yBAAyB,IACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,gBAAgB,GAC9B,CACiB,CACd,CACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { HTMLAttributes } from 'react';
|
|
2
2
|
import { DialogContentInnerProps } from './DialogContentInner';
|
|
3
3
|
import { BaseProps } from './MessageDialogContentInner';
|
|
4
|
-
declare type Props = BaseProps & Pick<DialogContentInnerProps, 'width' | 'top' | 'right' | 'bottom' | 'left' | 'id'>;
|
|
4
|
+
declare type Props = Omit<BaseProps, 'titleId'> & Pick<DialogContentInnerProps, 'width' | 'top' | 'right' | 'bottom' | 'left' | 'id'>;
|
|
5
5
|
declare type ElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof Props>;
|
|
6
6
|
export declare const MessageDialogContent: React.VFC<Props & ElementProps>;
|
|
7
7
|
export {};
|
|
@@ -2,6 +2,7 @@ import React, { useCallback, useContext } from 'react';
|
|
|
2
2
|
import { DialogContext } from './DialogWrapper';
|
|
3
3
|
import { DialogContentInner } from './DialogContentInner';
|
|
4
4
|
import { MessageDialogContentInner } from './MessageDialogContentInner';
|
|
5
|
+
import { useId } from '../../hooks/useId';
|
|
5
6
|
export const MessageDialogContent = ({ title, description, closeText, className = '', ...props }) => {
|
|
6
7
|
const { DialogContentRoot, onClickClose, active } = useContext(DialogContext);
|
|
7
8
|
const handleClickClose = useCallback(() => {
|
|
@@ -10,8 +11,9 @@ export const MessageDialogContent = ({ title, description, closeText, className
|
|
|
10
11
|
}
|
|
11
12
|
onClickClose();
|
|
12
13
|
}, [active, onClickClose]);
|
|
14
|
+
const titleId = useId();
|
|
13
15
|
return (React.createElement(DialogContentRoot, null,
|
|
14
|
-
React.createElement(DialogContentInner, { onClickOverlay: onClickClose, onPressEscape: onClickClose, isOpen: active,
|
|
15
|
-
React.createElement(MessageDialogContentInner, { title: title, description: description, closeText: closeText, onClickClose: handleClickClose }))));
|
|
16
|
+
React.createElement(DialogContentInner, { onClickOverlay: onClickClose, onPressEscape: onClickClose, isOpen: active, className: className, ...props },
|
|
17
|
+
React.createElement(MessageDialogContentInner, { title: title, titleId: titleId, description: description, closeText: closeText, onClickClose: handleClickClose }))));
|
|
16
18
|
};
|
|
17
19
|
//# sourceMappingURL=MessageDialogContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDialogContent.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialogContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkB,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAa,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"MessageDialogContent.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialogContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkB,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAa,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAMzC,MAAM,CAAC,MAAM,oBAAoB,GAAoC,CAAC,EACpE,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAS,GAAG,EAAE,EACd,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IAE7E,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,CAAC,MAAM,EAAE;YACX,OAAM;SACP;QACD,YAAY,EAAE,CAAA;IAChB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAC1B,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IAEvB,OAAO,CACL,oBAAC,iBAAiB;QAChB,oBAAC,kBAAkB,IACjB,cAAc,EAAE,YAAY,EAC5B,aAAa,EAAE,YAAY,EAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,KAChB,KAAK;YAET,oBAAC,yBAAyB,IACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,gBAAgB,GAC9B,CACiB,CACH,CACrB,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -3,8 +3,9 @@ export declare type BaseProps = {
|
|
|
3
3
|
/**
|
|
4
4
|
* Title of the dialog.
|
|
5
5
|
*/
|
|
6
|
-
title:
|
|
7
|
-
subtitle?:
|
|
6
|
+
title: React.ReactNode;
|
|
7
|
+
subtitle?: React.ReactNode;
|
|
8
|
+
titleId: string;
|
|
8
9
|
/**
|
|
9
10
|
* Description of the dialog.
|
|
10
11
|
*/
|
|
@@ -12,7 +13,7 @@ export declare type BaseProps = {
|
|
|
12
13
|
/**
|
|
13
14
|
* Label of close button.
|
|
14
15
|
*/
|
|
15
|
-
closeText:
|
|
16
|
+
closeText: React.ReactNode;
|
|
16
17
|
};
|
|
17
18
|
export declare type MessageDialogContentInnerProps = BaseProps & {
|
|
18
19
|
/**
|
|
@@ -6,14 +6,14 @@ import { useOffsetHeight } from './dialogHelper';
|
|
|
6
6
|
import { Stack } from '../Layout';
|
|
7
7
|
import { SecondaryButton } from '../Button';
|
|
8
8
|
import { Text } from '../Text';
|
|
9
|
-
export const MessageDialogContentInner = ({ title, subtitle, description, closeText, onClickClose, }) => {
|
|
9
|
+
export const MessageDialogContentInner = ({ title, subtitle, titleId, description, closeText, onClickClose, }) => {
|
|
10
10
|
const classNames = useClassNames().dialog;
|
|
11
11
|
const theme = useTheme();
|
|
12
12
|
const { offsetHeight, titleRef, bottomRef } = useOffsetHeight();
|
|
13
13
|
return (React.createElement(React.Fragment, null,
|
|
14
14
|
React.createElement(TitleArea, { gap: 0.25, themes: theme, ref: titleRef, className: classNames.titleArea },
|
|
15
15
|
subtitle && (React.createElement(Text, { as: "p", size: "S", leading: "TIGHT", color: "TEXT_GREY", className: classNames.subtitle }, subtitle)),
|
|
16
|
-
React.createElement(Text, { as: "p", size: "L", leading: "TIGHT", className: classNames.title }, title)),
|
|
16
|
+
React.createElement(Text, { as: "p", id: titleId, size: "L", leading: "TIGHT", className: classNames.title }, title)),
|
|
17
17
|
React.createElement(Description, { themes: theme, offsetHeight: offsetHeight, className: classNames.description }, description),
|
|
18
18
|
React.createElement(Bottom, { themes: theme, ref: bottomRef, className: classNames.buttonArea },
|
|
19
19
|
React.createElement(SecondaryButton, { onClick: onClickClose, className: classNames.closeButton }, closeText))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDialogContentInner.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialogContentInner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAc,MAAM,OAAO,CAAA;AAClC,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAS,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"MessageDialogContentInner.js","sourceRoot":"","sources":["../../../src/components/Dialog/MessageDialogContentInner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { MouseEvent, ReactNode } from 'react';
|
|
1
|
+
import React, { MouseEvent, ReactNode, RefObject } from 'react';
|
|
2
2
|
import { BaseElementProps } from '../Base';
|
|
3
3
|
declare type Props = {
|
|
4
4
|
/**
|
|
@@ -52,7 +52,7 @@ declare type Props = {
|
|
|
52
52
|
/**
|
|
53
53
|
* ポータルの container となる DOM 要素を追加する親要素
|
|
54
54
|
*/
|
|
55
|
-
portalParent?: HTMLElement
|
|
55
|
+
portalParent?: HTMLElement | RefObject<HTMLElement>;
|
|
56
56
|
};
|
|
57
57
|
export declare const ModelessDialog: React.VFC<Props & BaseElementProps>;
|
|
58
58
|
export {};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useLayoutEffect, useRef, useState, } from 'react';
|
|
2
|
-
import { createPortal } from 'react-dom';
|
|
3
2
|
import styled, { css } from 'styled-components';
|
|
4
3
|
import Draggable from 'react-draggable';
|
|
5
4
|
import { useTheme } from '../../hooks/useTheme';
|
|
@@ -8,10 +7,11 @@ import { useHandleEscape } from '../../hooks/useHandleEscape';
|
|
|
8
7
|
import { Base } from '../Base';
|
|
9
8
|
import { SecondaryButton } from '../Button';
|
|
10
9
|
import { FaGripHorizontalIcon, FaTimesIcon } from '../Icon';
|
|
10
|
+
import { useDialogPortal } from './useDialogPortal';
|
|
11
11
|
import { DialogOverlap } from './DialogOverlap';
|
|
12
12
|
import { useClassNames } from './useClassNames';
|
|
13
13
|
export const ModelessDialog = ({ header, children, footer, isOpen, onClickClose, onPressEscape, width, height, top, left, right, bottom, portalParent, className = '', ...props }) => {
|
|
14
|
-
const
|
|
14
|
+
const { Portal, isReady } = useDialogPortal(portalParent);
|
|
15
15
|
const wrapperRef = useRef(null);
|
|
16
16
|
const focusTargetRef = useRef(null);
|
|
17
17
|
const [wrapperPosition, setWrapperPosition] = useState(undefined);
|
|
@@ -21,14 +21,6 @@ export const ModelessDialog = ({ header, children, footer, isOpen, onClickClose,
|
|
|
21
21
|
y: 0,
|
|
22
22
|
});
|
|
23
23
|
const theme = useTheme();
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
// SSR を考慮し、useEffect 内で初期値 document.body を指定
|
|
26
|
-
const pp = portalParent || document.body;
|
|
27
|
-
pp.appendChild(portalContainer);
|
|
28
|
-
return () => {
|
|
29
|
-
pp.removeChild(portalContainer);
|
|
30
|
-
};
|
|
31
|
-
}, [portalContainer, portalParent]);
|
|
32
24
|
useEffect(() => {
|
|
33
25
|
if (wrapperRef.current instanceof Element) {
|
|
34
26
|
setWrapperPosition(wrapperRef.current.getBoundingClientRect());
|
|
@@ -40,14 +32,14 @@ export const ModelessDialog = ({ header, children, footer, isOpen, onClickClose,
|
|
|
40
32
|
}
|
|
41
33
|
}, [isOpen, onPressEscape]));
|
|
42
34
|
useLayoutEffect(() => {
|
|
43
|
-
if (isOpen) {
|
|
35
|
+
if (isOpen && isReady) {
|
|
44
36
|
setPosition({ x: 0, y: 0 });
|
|
45
37
|
focusTargetRef.current?.focus();
|
|
46
38
|
}
|
|
47
|
-
}, [isOpen]);
|
|
39
|
+
}, [isOpen, isReady]);
|
|
48
40
|
useEffect(() => {
|
|
49
41
|
// 中央寄せの座標計算を行う
|
|
50
|
-
if (!wrapperRef.current || !isOpen) {
|
|
42
|
+
if (!wrapperRef.current || !isOpen || !isReady) {
|
|
51
43
|
return;
|
|
52
44
|
}
|
|
53
45
|
const isXCenter = left === undefined && right === undefined;
|
|
@@ -59,7 +51,7 @@ export const ModelessDialog = ({ header, children, footer, isOpen, onClickClose,
|
|
|
59
51
|
left: isXCenter ? window.innerWidth / 2 - rect.width / 2 : undefined,
|
|
60
52
|
});
|
|
61
53
|
}
|
|
62
|
-
}, [bottom, isOpen, left, right, top]);
|
|
54
|
+
}, [bottom, isOpen, isReady, left, right, top]);
|
|
63
55
|
const handleArrowKey = useCallback((e) => {
|
|
64
56
|
if (!isOpen || document.activeElement !== e.currentTarget) {
|
|
65
57
|
return;
|
|
@@ -98,36 +90,37 @@ export const ModelessDialog = ({ header, children, footer, isOpen, onClickClose,
|
|
|
98
90
|
}, [isOpen]);
|
|
99
91
|
const labelId = useId();
|
|
100
92
|
const classNames = useClassNames().modelessDialog;
|
|
101
|
-
return
|
|
102
|
-
React.createElement(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
React.createElement(
|
|
120
|
-
|
|
121
|
-
React.createElement(
|
|
122
|
-
|
|
123
|
-
|
|
93
|
+
return (React.createElement(Portal, null,
|
|
94
|
+
React.createElement(DialogOverlap, { isOpen: isOpen },
|
|
95
|
+
React.createElement(Draggable, { handle: `.${classNames.handle}`, onStart: (_, data) => setPosition({ x: data.x, y: data.y }), onDrag: (_, data) => {
|
|
96
|
+
setPosition((prev) => {
|
|
97
|
+
return {
|
|
98
|
+
x: prev.x + data.deltaX,
|
|
99
|
+
y: prev.y + data.deltaY,
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
}, position: position },
|
|
103
|
+
React.createElement(Layout, { className: `${className} ${classNames.wrapper}`, style: {
|
|
104
|
+
top: centering.top !== undefined ? centering.top : top,
|
|
105
|
+
left: centering.left !== undefined ? centering.left : left,
|
|
106
|
+
right,
|
|
107
|
+
bottom,
|
|
108
|
+
width,
|
|
109
|
+
height,
|
|
110
|
+
}, ref: wrapperRef, role: "dialog", "aria-labelledby": labelId, ...props },
|
|
111
|
+
React.createElement(Box, { isWidthAuto: width === undefined, left: left, right: right, themes: theme, className: classNames.box },
|
|
112
|
+
React.createElement("div", { tabIndex: -1, ref: focusTargetRef }),
|
|
113
|
+
React.createElement(Header, { className: classNames.header, themes: theme },
|
|
114
|
+
React.createElement(Title, { id: labelId, themes: theme }, header),
|
|
115
|
+
React.createElement(DialogHandler, { className: classNames.handle, themes: theme, tabIndex: 0, role: "slider", "aria-label": "\u30C0\u30A4\u30A2\u30ED\u30B0\u306E\u4F4D\u7F6E", "aria-valuetext": wrapperPosition &&
|
|
116
|
+
`上から${Math.trunc(wrapperPosition.top)}px、
|
|
124
117
|
左から${Math.trunc(wrapperPosition.left)}px`, onKeyDown: handleArrowKey },
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
118
|
+
React.createElement(FaGripHorizontalIcon, null)),
|
|
119
|
+
React.createElement(CloseButtonLayout, null,
|
|
120
|
+
React.createElement(SecondaryButton, { type: "button", size: "s", square: true, onClick: onClickClose, className: classNames.closeButton },
|
|
121
|
+
React.createElement(FaTimesIcon, { visuallyHiddenText: "\u9589\u3058\u308B" })))),
|
|
122
|
+
React.createElement(Content, { className: classNames.content }, children),
|
|
123
|
+
footer && (React.createElement(Footer, { className: classNames.footer, themes: theme }, footer))))))));
|
|
131
124
|
};
|
|
132
125
|
const Layout = styled.div `
|
|
133
126
|
position: fixed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelessDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/ModelessDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ModelessDialog.js","sourceRoot":"","sources":["../../../src/components/Dialog/ModelessDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
3
|
+
export function useDialogPortal(parent) {
|
|
4
|
+
const portalContainer = useRef(document.createElement('div')).current;
|
|
5
|
+
const [isReady, setIsReady] = useState(false);
|
|
6
|
+
useLayoutEffect(() => {
|
|
7
|
+
const parentElement = parent != null && 'current' in parent ? parent.current : parent;
|
|
8
|
+
// SSR を考慮し、useEffect 内で初期値 document.body を指定
|
|
9
|
+
const actualParent = parentElement || document.body;
|
|
10
|
+
actualParent.appendChild(portalContainer);
|
|
11
|
+
setIsReady(true);
|
|
12
|
+
return () => {
|
|
13
|
+
setIsReady(false);
|
|
14
|
+
actualParent.removeChild(portalContainer);
|
|
15
|
+
};
|
|
16
|
+
}, [portalContainer, parent]);
|
|
17
|
+
const Portal = useCallback(({ children }) => {
|
|
18
|
+
if (!isReady) {
|
|
19
|
+
// コンテナの append が完了するまでは子のライフサイクルを開始させない
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return createPortal(children, portalContainer);
|
|
23
|
+
}, [isReady, portalContainer]);
|
|
24
|
+
return {
|
|
25
|
+
Portal,
|
|
26
|
+
isReady,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=useDialogPortal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogPortal.js","sourceRoot":"","sources":["../../../src/components/Dialog/useDialogPortal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,UAAU,eAAe,CAAC,MAA6C;IAC3E,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,aAAa,GAAG,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;QACrF,6CAA6C;QAC7C,MAAM,YAAY,GAAG,aAAa,IAAI,QAAQ,CAAC,IAAI,CAAA;QACnD,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QACzC,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QAC3C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IAE7B,MAAM,MAAM,GAAiC,WAAW,CACtD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;YACZ,wCAAwC;YACxC,OAAO,IAAI,CAAA;SACZ;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAChD,CAAC,EACD,CAAC,OAAO,EAAE,eAAe,CAAC,CAC3B,CAAA;IAED,OAAO;QACL,MAAM;QACN,OAAO;KACR,CAAA;AACH,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { BaseElementProps } from '../Base';
|
|
|
3
3
|
import { HeadingTagTypes } from '../Heading';
|
|
4
4
|
declare type Props = {
|
|
5
5
|
/** パネルのタイトル */
|
|
6
|
-
title:
|
|
6
|
+
title: React.ReactNode;
|
|
7
7
|
/** タイトル部分の HTML タグ */
|
|
8
8
|
titleTag?: HeadingTagTypes;
|
|
9
9
|
/** 表示する情報のタイプ */
|
|
@@ -11,9 +11,9 @@ declare type Props = {
|
|
|
11
11
|
/** `true` のとき、開閉ボタンを表示する */
|
|
12
12
|
togglable?: boolean;
|
|
13
13
|
/** 開くボタンのラベル */
|
|
14
|
-
openButtonLabel?:
|
|
14
|
+
openButtonLabel?: React.ReactNode;
|
|
15
15
|
/** 閉じるボタンのラベル */
|
|
16
|
-
closeButtonLabel?:
|
|
16
|
+
closeButtonLabel?: React.ReactNode;
|
|
17
17
|
/** パネルの開閉の状態 */
|
|
18
18
|
active?: boolean;
|
|
19
19
|
/** コンポーネントに適用するクラス名 */
|