@dnanpm/ui-components 0.7.0 → 0.9.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/dist/components/Accordion/Accordion.css +6 -3
- package/dist/components/AccordionItem/AccordionItem.css +6 -3
- package/dist/components/Breadcrumb/Breadcrumb.css +15 -12
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +6 -6
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +6 -6
- package/dist/components/Button/Button.css +33 -32
- package/dist/components/Button/Button.module.css.cjs +11 -11
- package/dist/components/Button/Button.module.css.js +11 -11
- package/dist/components/ButtonCard/ButtonCard.cjs +105 -0
- package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.css +166 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts +3 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.js +105 -0
- package/dist/components/ButtonCard/ButtonCard.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs +18 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js +19 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts +103 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -0
- package/dist/components/ButtonCard/index.d.ts +3 -0
- package/dist/components/ButtonCard/index.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.cjs +96 -0
- package/dist/components/ContentCard/ContentCard.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.css +249 -0
- package/dist/components/ContentCard/ContentCard.d.ts +3 -0
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.js +96 -0
- package/dist/components/ContentCard/ContentCard.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs +24 -0
- package/dist/components/ContentCard/ContentCard.module.css.cjs.map +1 -0
- package/dist/components/ContentCard/ContentCard.module.css.js +25 -0
- package/dist/components/ContentCard/ContentCard.module.css.js.map +1 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts +99 -0
- package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -0
- package/dist/components/ContentCard/index.d.ts +3 -0
- package/dist/components/ContentCard/index.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.cjs +101 -0
- package/dist/components/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.css +218 -0
- package/dist/components/Drawer/Drawer.d.ts +3 -0
- package/dist/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.js +101 -0
- package/dist/components/Drawer/Drawer.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.cjs +37 -0
- package/dist/components/Drawer/Drawer.module.css.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.js +37 -0
- package/dist/components/Drawer/Drawer.module.css.js.map +1 -0
- package/dist/components/Drawer/Drawer.types.d.ts +63 -0
- package/dist/components/Drawer/Drawer.types.d.ts.map +1 -0
- package/dist/components/Drawer/index.d.ts +3 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/Footer/Footer.css +87 -77
- package/dist/components/Footer/Footer.module.css.cjs +39 -39
- package/dist/components/Footer/Footer.module.css.js +39 -39
- package/dist/components/FunctionButton/FunctionButton.cjs +34 -0
- package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.css +124 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts +3 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.js +34 -0
- package/dist/components/FunctionButton/FunctionButton.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs +11 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js +12 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts +21 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts.map +1 -0
- package/dist/components/FunctionButton/index.d.ts +3 -0
- package/dist/components/FunctionButton/index.d.ts.map +1 -0
- package/dist/components/Hero/Hero.cjs +24 -26
- package/dist/components/Hero/Hero.cjs.map +1 -1
- package/dist/components/Hero/Hero.css +81 -74
- package/dist/components/Hero/Hero.js +24 -26
- package/dist/components/Hero/Hero.js.map +1 -1
- package/dist/components/Hero/Hero.module.css.cjs +20 -17
- package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
- package/dist/components/Hero/Hero.module.css.js +20 -17
- package/dist/components/Hero/Hero.module.css.js.map +1 -1
- package/dist/components/IconButton/IconButton.css +32 -34
- package/dist/components/IconButton/IconButton.module.css.cjs +9 -9
- package/dist/components/IconButton/IconButton.module.css.js +9 -9
- package/dist/components/Label/Label.css +2 -3
- package/dist/components/MainNavigation/MainNavigation.cjs +415 -120
- package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.css +265 -159
- package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
- package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.js +417 -122
- package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs +78 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.js +78 -68
- package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.types.d.ts +64 -17
- package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.cjs +20 -0
- package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts +10 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.js +20 -0
- package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
- package/dist/components/MainNavigation/index.d.ts +1 -1
- package/dist/components/MainNavigation/index.d.ts.map +1 -1
- package/dist/components/Modal/Modal.cjs +101 -0
- package/dist/components/Modal/Modal.cjs.map +1 -0
- package/dist/components/Modal/Modal.css +204 -0
- package/dist/components/Modal/Modal.d.ts +3 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/Modal.js +101 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/Modal.module.css.cjs +39 -0
- package/dist/components/Modal/Modal.module.css.cjs.map +1 -0
- package/dist/components/Modal/Modal.module.css.js +39 -0
- package/dist/components/Modal/Modal.module.css.js.map +1 -0
- package/dist/components/Modal/Modal.types.d.ts +62 -0
- package/dist/components/Modal/Modal.types.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.cjs +41 -0
- package/dist/components/Modal/useDialogDismissal.cjs.map +1 -0
- package/dist/components/Modal/useDialogDismissal.d.ts +17 -0
- package/dist/components/Modal/useDialogDismissal.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.js +41 -0
- package/dist/components/Modal/useDialogDismissal.js.map +1 -0
- package/dist/components/Modal/useNativeDialog.cjs +126 -0
- package/dist/components/Modal/useNativeDialog.cjs.map +1 -0
- package/dist/components/Modal/useNativeDialog.d.ts +14 -0
- package/dist/components/Modal/useNativeDialog.d.ts.map +1 -0
- package/dist/components/Modal/useNativeDialog.js +126 -0
- package/dist/components/Modal/useNativeDialog.js.map +1 -0
- package/dist/components/Notification/Notification.css +6 -3
- package/dist/components/Pictograph/Pictograph.css +6 -3
- package/dist/components/Pictograph/PictographItem.css +6 -3
- package/dist/components/Quote/Quote.css +2 -3
- package/dist/components/Spinner/Spinner.css +6 -3
- package/dist/index.cjs +10 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utils/elevation.css +2 -3
- package/dist/styles/utils/elevation.module.css.cjs +3 -0
- package/dist/styles/utils/elevation.module.css.cjs.map +1 -1
- package/dist/styles/utils/elevation.module.css.js +4 -1
- package/dist/styles/utils/elevation.module.css.js.map +1 -1
- package/dist/styles/utils/focus.css +26 -24
- package/dist/styles/utils/focus.module.css.cjs +3 -6
- package/dist/styles/utils/focus.module.css.cjs.map +1 -1
- package/dist/styles/utils/focus.module.css.js +4 -7
- package/dist/styles/utils/focus.module.css.js.map +1 -1
- package/dist/styles/utils/overlay.css +2 -3
- package/dist/styles/utils/text-decoration.css +4 -4
- package/dist/styles/utils/text-decoration.module.css.cjs +2 -2
- package/dist/styles/utils/text-decoration.module.css.js +2 -2
- package/dist/styles.css +17 -7
- package/package.json +3 -3
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
export type ModalSize = 'small' | 'medium' | 'large';
|
|
3
|
+
export type ModalHeaderStyle = 'light' | 'dark';
|
|
4
|
+
type ModalAccessibleName = {
|
|
5
|
+
readonly title: ReactNode;
|
|
6
|
+
readonly 'aria-label'?: string;
|
|
7
|
+
readonly 'aria-labelledby'?: never;
|
|
8
|
+
} | {
|
|
9
|
+
readonly title: ReactNode;
|
|
10
|
+
readonly 'aria-label'?: never;
|
|
11
|
+
readonly 'aria-labelledby': string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly title: ReactNode;
|
|
14
|
+
readonly 'aria-label'?: never;
|
|
15
|
+
readonly 'aria-labelledby'?: never;
|
|
16
|
+
} | {
|
|
17
|
+
readonly title?: never;
|
|
18
|
+
readonly 'aria-label': string;
|
|
19
|
+
readonly 'aria-labelledby'?: never;
|
|
20
|
+
} | {
|
|
21
|
+
readonly title?: never;
|
|
22
|
+
readonly 'aria-label'?: never;
|
|
23
|
+
readonly 'aria-labelledby': string;
|
|
24
|
+
};
|
|
25
|
+
export type ModalProps = Omit<ComponentPropsWithRef<'dialog'>, 'children' | 'open' | 'onClose' | 'onCancel' | 'aria-label' | 'aria-labelledby' | 'title'> & ModalAccessibleName & {
|
|
26
|
+
/**
|
|
27
|
+
* Controls whether the dialog is open. The dialog unmounts after its close animation unless
|
|
28
|
+
* `keepMounted` is true.
|
|
29
|
+
* `undefined` is treated as closed. @default false
|
|
30
|
+
*/
|
|
31
|
+
readonly open?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Keeps the closed dialog and its descendants mounted, preserving their React state and effects.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
readonly keepMounted?: boolean;
|
|
37
|
+
/** Called with false when the user requests closing. Opening and closing are controlled by `open`. */
|
|
38
|
+
readonly onOpenChange?: (open: boolean) => void;
|
|
39
|
+
/** Supporting text displayed below the heading. */
|
|
40
|
+
readonly description?: ReactNode;
|
|
41
|
+
/** Content displayed in the dialog body. */
|
|
42
|
+
readonly children: ReactNode;
|
|
43
|
+
/** Optional content displayed in the bottom action bar. */
|
|
44
|
+
readonly footer?: ReactNode;
|
|
45
|
+
/** Dialog width. */
|
|
46
|
+
readonly size?: ModalSize;
|
|
47
|
+
/** Visual style of the header and close button. */
|
|
48
|
+
readonly headerStyle?: ModalHeaderStyle;
|
|
49
|
+
/** Keeps the header fixed while the body scrolls. @default false */
|
|
50
|
+
readonly fixedTitle?: boolean;
|
|
51
|
+
/** Aligns the dialog to the top instead of vertically centering it. @default false */
|
|
52
|
+
readonly alignToTop?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Disables the close button, backdrop click, and Escape key. Provide an action that sets
|
|
55
|
+
* `open` to false when this is enabled. @default false
|
|
56
|
+
*/
|
|
57
|
+
readonly disableCloseOptions?: boolean;
|
|
58
|
+
/** Accessible label for the close button. @default 'Sulje dialogi' */
|
|
59
|
+
readonly closeLabel?: string;
|
|
60
|
+
};
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=Modal.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.types.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhD,KAAK,mBAAmB,GAClB;IACI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;CACtC,GACD;IACI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACtC,GACD;IACI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;CACtC,GACD;IACI,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;CACtC,GACD;IACI,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACtC,CAAC;AAER,MAAM,MAAM,UAAU,GAAG,IAAI,CACzB,qBAAqB,CAAC,QAAQ,CAAC,EAC/B,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAC5F,GACG,mBAAmB,GAAG;IAClB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IACxC,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const useDialogDismissal = ({
|
|
5
|
+
close,
|
|
6
|
+
disableCloseOptions,
|
|
7
|
+
onClick,
|
|
8
|
+
onKeyDown,
|
|
9
|
+
onPointerDown
|
|
10
|
+
}) => {
|
|
11
|
+
const backdropPointerDownRef = react.useRef(false);
|
|
12
|
+
return {
|
|
13
|
+
onCancel: (event) => {
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
backdropPointerDownRef.current = false;
|
|
16
|
+
if (!disableCloseOptions) close();
|
|
17
|
+
},
|
|
18
|
+
onKeyDownCapture: (event) => {
|
|
19
|
+
if (event.key === "Escape") {
|
|
20
|
+
backdropPointerDownRef.current = false;
|
|
21
|
+
if (disableCloseOptions) event.preventDefault();
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
onKeyDown: (event) => {
|
|
25
|
+
onKeyDown?.(event);
|
|
26
|
+
},
|
|
27
|
+
onPointerDown: (event) => {
|
|
28
|
+
backdropPointerDownRef.current = event.target === event.currentTarget;
|
|
29
|
+
onPointerDown?.(event);
|
|
30
|
+
},
|
|
31
|
+
onClick: (event) => {
|
|
32
|
+
onClick?.(event);
|
|
33
|
+
if (!disableCloseOptions && event.target === event.currentTarget) close();
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
backdropPointerDownRef.current = false;
|
|
36
|
+
}, 0);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
exports.useDialogDismissal = useDialogDismissal;
|
|
41
|
+
//# sourceMappingURL=useDialogDismissal.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogDismissal.cjs","sources":["../../../src/components/Modal/useDialogDismissal.ts"],"sourcesContent":["import { useRef } from 'react';\nimport type { ComponentPropsWithRef } from 'react';\n\ninterface UseDialogDismissalOptions {\n close: () => void;\n disableCloseOptions: boolean;\n onClick?: ComponentPropsWithRef<'dialog'>['onClick'];\n onKeyDown?: ComponentPropsWithRef<'dialog'>['onKeyDown'];\n onPointerDown?: ComponentPropsWithRef<'dialog'>['onPointerDown'];\n}\n\nexport const useDialogDismissal = ({\n close,\n disableCloseOptions,\n onClick,\n onKeyDown,\n onPointerDown,\n}: UseDialogDismissalOptions) => {\n const backdropPointerDownRef = useRef(false);\n\n return {\n onCancel: (event: React.SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault();\n backdropPointerDownRef.current = false;\n if (!disableCloseOptions) close();\n },\n onKeyDownCapture: (event: React.KeyboardEvent<HTMLDialogElement>) => {\n if (event.key === 'Escape') {\n backdropPointerDownRef.current = false;\n if (disableCloseOptions) event.preventDefault();\n }\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(event);\n },\n onPointerDown: (event: React.PointerEvent<HTMLDialogElement>) => {\n backdropPointerDownRef.current = event.target === event.currentTarget;\n onPointerDown?.(event);\n },\n onClick: (event: React.MouseEvent<HTMLDialogElement>) => {\n onClick?.(event);\n if (!disableCloseOptions && event.target === event.currentTarget) close();\n setTimeout(() => {\n backdropPointerDownRef.current = false;\n }, 0);\n },\n };\n};\n"],"names":["useRef"],"mappings":";;;AAWO,MAAM,qBAAqB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAiC;AAC7B,QAAM,yBAAyBA,MAAAA,OAAO,KAAK;AAE3C,SAAO;AAAA,IACH,UAAU,CAAC,UAAmD;AAC1D,YAAM,eAAA;AACN,6BAAuB,UAAU;AACjC,UAAI,CAAC,oBAAqB,OAAA;AAAA,IAC9B;AAAA,IACA,kBAAkB,CAAC,UAAkD;AACjE,UAAI,MAAM,QAAQ,UAAU;AACxB,+BAAuB,UAAU;AACjC,YAAI,2BAA2B,eAAA;AAAA,MACnC;AAAA,IACJ;AAAA,IACA,WAAW,CAAC,UAAkD;AAC1D,kBAAY,KAAK;AAAA,IACrB;AAAA,IACA,eAAe,CAAC,UAAiD;AAC7D,6BAAuB,UAAU,MAAM,WAAW,MAAM;AACxD,sBAAgB,KAAK;AAAA,IACzB;AAAA,IACA,SAAS,CAAC,UAA+C;AACrD,gBAAU,KAAK;AACf,UAAI,CAAC,uBAAuB,MAAM,WAAW,MAAM,cAAe,OAAA;AAClE,iBAAW,MAAM;AACb,+BAAuB,UAAU;AAAA,MACrC,GAAG,CAAC;AAAA,IACR;AAAA,EAAA;AAER;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ComponentPropsWithRef } from 'react';
|
|
2
|
+
interface UseDialogDismissalOptions {
|
|
3
|
+
close: () => void;
|
|
4
|
+
disableCloseOptions: boolean;
|
|
5
|
+
onClick?: ComponentPropsWithRef<'dialog'>['onClick'];
|
|
6
|
+
onKeyDown?: ComponentPropsWithRef<'dialog'>['onKeyDown'];
|
|
7
|
+
onPointerDown?: ComponentPropsWithRef<'dialog'>['onPointerDown'];
|
|
8
|
+
}
|
|
9
|
+
export declare const useDialogDismissal: ({ close, disableCloseOptions, onClick, onKeyDown, onPointerDown, }: UseDialogDismissalOptions) => {
|
|
10
|
+
onCancel: (event: React.SyntheticEvent<HTMLDialogElement>) => void;
|
|
11
|
+
onKeyDownCapture: (event: React.KeyboardEvent<HTMLDialogElement>) => void;
|
|
12
|
+
onKeyDown: (event: React.KeyboardEvent<HTMLDialogElement>) => void;
|
|
13
|
+
onPointerDown: (event: React.PointerEvent<HTMLDialogElement>) => void;
|
|
14
|
+
onClick: (event: React.MouseEvent<HTMLDialogElement>) => void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=useDialogDismissal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogDismissal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/useDialogDismissal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEnD,UAAU,yBAAyB;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC;CACpE;AAED,eAAO,MAAM,kBAAkB,GAAI,oEAMhC,yBAAyB;sBAIF,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC;8BAK/B,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC;uBAM7C,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC;2BAGlC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC;qBAI3C,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC;CAQ3D,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
const useDialogDismissal = ({
|
|
3
|
+
close,
|
|
4
|
+
disableCloseOptions,
|
|
5
|
+
onClick,
|
|
6
|
+
onKeyDown,
|
|
7
|
+
onPointerDown
|
|
8
|
+
}) => {
|
|
9
|
+
const backdropPointerDownRef = useRef(false);
|
|
10
|
+
return {
|
|
11
|
+
onCancel: (event) => {
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
backdropPointerDownRef.current = false;
|
|
14
|
+
if (!disableCloseOptions) close();
|
|
15
|
+
},
|
|
16
|
+
onKeyDownCapture: (event) => {
|
|
17
|
+
if (event.key === "Escape") {
|
|
18
|
+
backdropPointerDownRef.current = false;
|
|
19
|
+
if (disableCloseOptions) event.preventDefault();
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
onKeyDown: (event) => {
|
|
23
|
+
onKeyDown?.(event);
|
|
24
|
+
},
|
|
25
|
+
onPointerDown: (event) => {
|
|
26
|
+
backdropPointerDownRef.current = event.target === event.currentTarget;
|
|
27
|
+
onPointerDown?.(event);
|
|
28
|
+
},
|
|
29
|
+
onClick: (event) => {
|
|
30
|
+
onClick?.(event);
|
|
31
|
+
if (!disableCloseOptions && event.target === event.currentTarget) close();
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
backdropPointerDownRef.current = false;
|
|
34
|
+
}, 0);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export {
|
|
39
|
+
useDialogDismissal
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=useDialogDismissal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogDismissal.js","sources":["../../../src/components/Modal/useDialogDismissal.ts"],"sourcesContent":["import { useRef } from 'react';\nimport type { ComponentPropsWithRef } from 'react';\n\ninterface UseDialogDismissalOptions {\n close: () => void;\n disableCloseOptions: boolean;\n onClick?: ComponentPropsWithRef<'dialog'>['onClick'];\n onKeyDown?: ComponentPropsWithRef<'dialog'>['onKeyDown'];\n onPointerDown?: ComponentPropsWithRef<'dialog'>['onPointerDown'];\n}\n\nexport const useDialogDismissal = ({\n close,\n disableCloseOptions,\n onClick,\n onKeyDown,\n onPointerDown,\n}: UseDialogDismissalOptions) => {\n const backdropPointerDownRef = useRef(false);\n\n return {\n onCancel: (event: React.SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault();\n backdropPointerDownRef.current = false;\n if (!disableCloseOptions) close();\n },\n onKeyDownCapture: (event: React.KeyboardEvent<HTMLDialogElement>) => {\n if (event.key === 'Escape') {\n backdropPointerDownRef.current = false;\n if (disableCloseOptions) event.preventDefault();\n }\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(event);\n },\n onPointerDown: (event: React.PointerEvent<HTMLDialogElement>) => {\n backdropPointerDownRef.current = event.target === event.currentTarget;\n onPointerDown?.(event);\n },\n onClick: (event: React.MouseEvent<HTMLDialogElement>) => {\n onClick?.(event);\n if (!disableCloseOptions && event.target === event.currentTarget) close();\n setTimeout(() => {\n backdropPointerDownRef.current = false;\n }, 0);\n },\n };\n};\n"],"names":[],"mappings":";AAWO,MAAM,qBAAqB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAiC;AAC7B,QAAM,yBAAyB,OAAO,KAAK;AAE3C,SAAO;AAAA,IACH,UAAU,CAAC,UAAmD;AAC1D,YAAM,eAAA;AACN,6BAAuB,UAAU;AACjC,UAAI,CAAC,oBAAqB,OAAA;AAAA,IAC9B;AAAA,IACA,kBAAkB,CAAC,UAAkD;AACjE,UAAI,MAAM,QAAQ,UAAU;AACxB,+BAAuB,UAAU;AACjC,YAAI,2BAA2B,eAAA;AAAA,MACnC;AAAA,IACJ;AAAA,IACA,WAAW,CAAC,UAAkD;AAC1D,kBAAY,KAAK;AAAA,IACrB;AAAA,IACA,eAAe,CAAC,UAAiD;AAC7D,6BAAuB,UAAU,MAAM,WAAW,MAAM;AACxD,sBAAgB,KAAK;AAAA,IACzB;AAAA,IACA,SAAS,CAAC,UAA+C;AACrD,gBAAU,KAAK;AACf,UAAI,CAAC,uBAAuB,MAAM,WAAW,MAAM,cAAe,OAAA;AAClE,iBAAW,MAAM;AACb,+BAAuB,UAAU;AAAA,MACrC,GAAG,CAAC;AAAA,IACR;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
let bodyScrollLockCount = 0;
|
|
5
|
+
let previousBodyOverflow = "";
|
|
6
|
+
const lockBodyScroll = () => {
|
|
7
|
+
if (bodyScrollLockCount === 0) {
|
|
8
|
+
previousBodyOverflow = document.body.style.overflow;
|
|
9
|
+
document.body.style.overflow = "hidden";
|
|
10
|
+
}
|
|
11
|
+
bodyScrollLockCount += 1;
|
|
12
|
+
};
|
|
13
|
+
const unlockBodyScroll = () => {
|
|
14
|
+
bodyScrollLockCount = Math.max(bodyScrollLockCount - 1, 0);
|
|
15
|
+
if (bodyScrollLockCount === 0) {
|
|
16
|
+
document.body.style.overflow = previousBodyOverflow;
|
|
17
|
+
previousBodyOverflow = "";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const setDialogOpen = (dialog, open) => {
|
|
21
|
+
{
|
|
22
|
+
if (typeof dialog.showModal === "function") {
|
|
23
|
+
if (!dialog.open) dialog.showModal();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const findAutofocusTarget = (dialog) => {
|
|
28
|
+
if (dialog.hasAttribute("autofocus")) return dialog;
|
|
29
|
+
return dialog.querySelector("[autofocus]") ?? Array.from(dialog.querySelectorAll("*")).find(
|
|
30
|
+
(element) => "autofocus" in element && element.autofocus
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
const useNativeDialog = ({ open, keepMounted, onOpenChange }) => {
|
|
34
|
+
const dialogRef = react.useRef(null);
|
|
35
|
+
const restoreFocusRef = react.useRef(null);
|
|
36
|
+
const closeTimerRef = react.useRef(null);
|
|
37
|
+
const bodyScrollLockedRef = react.useRef(false);
|
|
38
|
+
const [phase, setPhase] = react.useState("closed");
|
|
39
|
+
const isPresent = keepMounted || open || phase !== "closed";
|
|
40
|
+
const notifyOpenChange = react.useCallback(
|
|
41
|
+
(nextOpen) => {
|
|
42
|
+
onOpenChange?.(nextOpen);
|
|
43
|
+
},
|
|
44
|
+
[onOpenChange]
|
|
45
|
+
);
|
|
46
|
+
const finishClose = react.useCallback(() => {
|
|
47
|
+
const dialog = dialogRef.current;
|
|
48
|
+
if (!dialog) return;
|
|
49
|
+
closeTimerRef.current = null;
|
|
50
|
+
if (dialog.open) {
|
|
51
|
+
dialog.close();
|
|
52
|
+
} else {
|
|
53
|
+
setPhase("closed");
|
|
54
|
+
}
|
|
55
|
+
}, []);
|
|
56
|
+
const close = react.useCallback(() => notifyOpenChange(false), [notifyOpenChange]);
|
|
57
|
+
const clearCloseTimer = react.useCallback(() => {
|
|
58
|
+
if (closeTimerRef.current) clearTimeout(closeTimerRef.current);
|
|
59
|
+
closeTimerRef.current = null;
|
|
60
|
+
}, []);
|
|
61
|
+
react.useEffect(() => {
|
|
62
|
+
const dialog = dialogRef.current;
|
|
63
|
+
if (!dialog) return;
|
|
64
|
+
if (open) {
|
|
65
|
+
clearCloseTimer();
|
|
66
|
+
if (phase === "closing" || phase === "closed") setPhase("open");
|
|
67
|
+
if (!dialog.open) {
|
|
68
|
+
restoreFocusRef.current = document.activeElement;
|
|
69
|
+
const autofocusTarget = findAutofocusTarget(dialog);
|
|
70
|
+
const existingFocusTarget = document.activeElement instanceof HTMLElement && document.activeElement !== dialog && dialog.contains(document.activeElement) ? document.activeElement : null;
|
|
71
|
+
setDialogOpen(dialog);
|
|
72
|
+
(autofocusTarget ?? existingFocusTarget ?? dialog.querySelector("[data-dialog-autofocus]"))?.focus();
|
|
73
|
+
}
|
|
74
|
+
if (dialog.open && !bodyScrollLockedRef.current) {
|
|
75
|
+
lockBodyScroll();
|
|
76
|
+
bodyScrollLockedRef.current = true;
|
|
77
|
+
}
|
|
78
|
+
} else if (dialog.open && phase === "open") {
|
|
79
|
+
setPhase("closing");
|
|
80
|
+
}
|
|
81
|
+
}, [clearCloseTimer, open, phase]);
|
|
82
|
+
react.useEffect(() => {
|
|
83
|
+
if (phase !== "closing") return;
|
|
84
|
+
const dialog = dialogRef.current;
|
|
85
|
+
if (!dialog || !dialog.open) return;
|
|
86
|
+
const styles = window.getComputedStyle(dialog);
|
|
87
|
+
const durations = `${styles.transitionDuration},${styles.animationDuration}`.split(",").map((duration2) => {
|
|
88
|
+
const value = Number.parseFloat(duration2);
|
|
89
|
+
return Number.isFinite(value) ? duration2.trim().endsWith("ms") ? value : value * 1e3 : 0;
|
|
90
|
+
});
|
|
91
|
+
const duration = Math.max(...durations, 0);
|
|
92
|
+
closeTimerRef.current = setTimeout(finishClose, duration);
|
|
93
|
+
return () => {
|
|
94
|
+
clearCloseTimer();
|
|
95
|
+
};
|
|
96
|
+
}, [clearCloseTimer, finishClose, phase]);
|
|
97
|
+
react.useEffect(
|
|
98
|
+
() => () => {
|
|
99
|
+
clearCloseTimer();
|
|
100
|
+
if (bodyScrollLockedRef.current) {
|
|
101
|
+
unlockBodyScroll();
|
|
102
|
+
bodyScrollLockedRef.current = false;
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
[clearCloseTimer]
|
|
106
|
+
);
|
|
107
|
+
react.useEffect(() => {
|
|
108
|
+
const dialog = dialogRef.current;
|
|
109
|
+
if (!dialog) return;
|
|
110
|
+
const handleClose = () => {
|
|
111
|
+
clearCloseTimer();
|
|
112
|
+
setPhase("closed");
|
|
113
|
+
if (bodyScrollLockedRef.current) {
|
|
114
|
+
unlockBodyScroll();
|
|
115
|
+
bodyScrollLockedRef.current = false;
|
|
116
|
+
}
|
|
117
|
+
restoreFocusRef.current?.focus();
|
|
118
|
+
restoreFocusRef.current = null;
|
|
119
|
+
};
|
|
120
|
+
dialog.addEventListener("close", handleClose);
|
|
121
|
+
return () => dialog.removeEventListener("close", handleClose);
|
|
122
|
+
}, [clearCloseTimer, isPresent]);
|
|
123
|
+
return { dialogRef, close, phase, isPresent };
|
|
124
|
+
};
|
|
125
|
+
exports.useNativeDialog = useNativeDialog;
|
|
126
|
+
//# sourceMappingURL=useNativeDialog.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNativeDialog.cjs","sources":["../../../src/components/Modal/useNativeDialog.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface UseNativeDialogOptions {\n open: boolean;\n keepMounted: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ntype DialogPhase = 'closed' | 'open' | 'closing';\n\nlet bodyScrollLockCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (bodyScrollLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n bodyScrollLockCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n bodyScrollLockCount = Math.max(bodyScrollLockCount - 1, 0);\n if (bodyScrollLockCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n previousBodyOverflow = '';\n }\n};\n\nconst setDialogOpen = (dialog: HTMLDialogElement, open: boolean) => {\n if (open) {\n if (typeof dialog.showModal === 'function') {\n if (!dialog.open) dialog.showModal();\n }\n } else if (dialog.open) {\n if (typeof dialog.close === 'function') {\n dialog.close();\n }\n }\n};\n\nconst findAutofocusTarget = (dialog: HTMLDialogElement) => {\n if (dialog.hasAttribute('autofocus')) return dialog;\n\n return (\n dialog.querySelector<HTMLElement>('[autofocus]') ??\n Array.from(dialog.querySelectorAll<HTMLElement>('*')).find(\n (element) =>\n 'autofocus' in element &&\n (element as HTMLElement & { autofocus: boolean }).autofocus,\n )\n );\n};\n\nexport const useNativeDialog = ({ open, keepMounted, onOpenChange }: UseNativeDialogOptions) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const bodyScrollLockedRef = useRef(false);\n const [phase, setPhase] = useState<DialogPhase>('closed');\n const isPresent = keepMounted || open || phase !== 'closed';\n\n const notifyOpenChange = useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange],\n );\n\n const finishClose = useCallback(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n closeTimerRef.current = null;\n if (dialog.open) {\n dialog.close();\n } else {\n setPhase('closed');\n }\n }, []);\n\n const close = useCallback(() => notifyOpenChange(false), [notifyOpenChange]);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }, []);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (open) {\n clearCloseTimer();\n if (phase === 'closing' || phase === 'closed') setPhase('open');\n if (!dialog.open) {\n restoreFocusRef.current = document.activeElement as HTMLElement | null;\n const autofocusTarget = findAutofocusTarget(dialog);\n const existingFocusTarget =\n document.activeElement instanceof HTMLElement &&\n document.activeElement !== dialog &&\n dialog.contains(document.activeElement)\n ? document.activeElement\n : null;\n setDialogOpen(dialog, true);\n (\n autofocusTarget ??\n existingFocusTarget ??\n dialog.querySelector<HTMLElement>('[data-dialog-autofocus]')\n )?.focus();\n }\n if (dialog.open && !bodyScrollLockedRef.current) {\n lockBodyScroll();\n bodyScrollLockedRef.current = true;\n }\n } else if (dialog.open && phase === 'open') {\n setPhase('closing');\n }\n }, [clearCloseTimer, open, phase]);\n\n useEffect(() => {\n if (phase !== 'closing') return;\n const dialog = dialogRef.current;\n if (!dialog || !dialog.open) return;\n\n const styles = window.getComputedStyle(dialog);\n const durations = `${styles.transitionDuration},${styles.animationDuration}`\n .split(',')\n .map((duration) => {\n const value = Number.parseFloat(duration);\n return Number.isFinite(value)\n ? duration.trim().endsWith('ms')\n ? value\n : value * 1000\n : 0;\n });\n const duration = Math.max(...durations, 0);\n closeTimerRef.current = setTimeout(finishClose, duration);\n\n return () => {\n clearCloseTimer();\n };\n }, [clearCloseTimer, finishClose, phase]);\n\n useEffect(\n () => () => {\n clearCloseTimer();\n if (bodyScrollLockedRef.current) {\n unlockBodyScroll();\n bodyScrollLockedRef.current = false;\n }\n },\n [clearCloseTimer],\n );\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const handleClose = () => {\n clearCloseTimer();\n setPhase('closed');\n if (bodyScrollLockedRef.current) {\n unlockBodyScroll();\n bodyScrollLockedRef.current = false;\n }\n restoreFocusRef.current?.focus();\n restoreFocusRef.current = null;\n };\n\n dialog.addEventListener('close', handleClose);\n return () => dialog.removeEventListener('close', handleClose);\n }, [clearCloseTimer, isPresent]);\n\n return { dialogRef, close, phase, isPresent };\n};\n"],"names":["useRef","useState","useCallback","useEffect","duration"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface UseNativeDialogOptions {
|
|
2
|
+
open: boolean;
|
|
3
|
+
keepMounted: boolean;
|
|
4
|
+
onOpenChange?: (open: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
type DialogPhase = 'closed' | 'open' | 'closing';
|
|
7
|
+
export declare const useNativeDialog: ({ open, keepMounted, onOpenChange }: UseNativeDialogOptions) => {
|
|
8
|
+
dialogRef: import('react').RefObject<HTMLDialogElement | null>;
|
|
9
|
+
close: () => void;
|
|
10
|
+
phase: DialogPhase;
|
|
11
|
+
isPresent: boolean;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=useNativeDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNativeDialog.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/useNativeDialog.ts"],"names":[],"mappings":"AAEA,UAAU,sBAAsB;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,KAAK,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AA8CjD,eAAO,MAAM,eAAe,GAAI,qCAAqC,sBAAsB;;;;;CAwH1F,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { useRef, useState, useCallback, useEffect } from "react";
|
|
2
|
+
let bodyScrollLockCount = 0;
|
|
3
|
+
let previousBodyOverflow = "";
|
|
4
|
+
const lockBodyScroll = () => {
|
|
5
|
+
if (bodyScrollLockCount === 0) {
|
|
6
|
+
previousBodyOverflow = document.body.style.overflow;
|
|
7
|
+
document.body.style.overflow = "hidden";
|
|
8
|
+
}
|
|
9
|
+
bodyScrollLockCount += 1;
|
|
10
|
+
};
|
|
11
|
+
const unlockBodyScroll = () => {
|
|
12
|
+
bodyScrollLockCount = Math.max(bodyScrollLockCount - 1, 0);
|
|
13
|
+
if (bodyScrollLockCount === 0) {
|
|
14
|
+
document.body.style.overflow = previousBodyOverflow;
|
|
15
|
+
previousBodyOverflow = "";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const setDialogOpen = (dialog, open) => {
|
|
19
|
+
{
|
|
20
|
+
if (typeof dialog.showModal === "function") {
|
|
21
|
+
if (!dialog.open) dialog.showModal();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const findAutofocusTarget = (dialog) => {
|
|
26
|
+
if (dialog.hasAttribute("autofocus")) return dialog;
|
|
27
|
+
return dialog.querySelector("[autofocus]") ?? Array.from(dialog.querySelectorAll("*")).find(
|
|
28
|
+
(element) => "autofocus" in element && element.autofocus
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
const useNativeDialog = ({ open, keepMounted, onOpenChange }) => {
|
|
32
|
+
const dialogRef = useRef(null);
|
|
33
|
+
const restoreFocusRef = useRef(null);
|
|
34
|
+
const closeTimerRef = useRef(null);
|
|
35
|
+
const bodyScrollLockedRef = useRef(false);
|
|
36
|
+
const [phase, setPhase] = useState("closed");
|
|
37
|
+
const isPresent = keepMounted || open || phase !== "closed";
|
|
38
|
+
const notifyOpenChange = useCallback(
|
|
39
|
+
(nextOpen) => {
|
|
40
|
+
onOpenChange?.(nextOpen);
|
|
41
|
+
},
|
|
42
|
+
[onOpenChange]
|
|
43
|
+
);
|
|
44
|
+
const finishClose = useCallback(() => {
|
|
45
|
+
const dialog = dialogRef.current;
|
|
46
|
+
if (!dialog) return;
|
|
47
|
+
closeTimerRef.current = null;
|
|
48
|
+
if (dialog.open) {
|
|
49
|
+
dialog.close();
|
|
50
|
+
} else {
|
|
51
|
+
setPhase("closed");
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
const close = useCallback(() => notifyOpenChange(false), [notifyOpenChange]);
|
|
55
|
+
const clearCloseTimer = useCallback(() => {
|
|
56
|
+
if (closeTimerRef.current) clearTimeout(closeTimerRef.current);
|
|
57
|
+
closeTimerRef.current = null;
|
|
58
|
+
}, []);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
const dialog = dialogRef.current;
|
|
61
|
+
if (!dialog) return;
|
|
62
|
+
if (open) {
|
|
63
|
+
clearCloseTimer();
|
|
64
|
+
if (phase === "closing" || phase === "closed") setPhase("open");
|
|
65
|
+
if (!dialog.open) {
|
|
66
|
+
restoreFocusRef.current = document.activeElement;
|
|
67
|
+
const autofocusTarget = findAutofocusTarget(dialog);
|
|
68
|
+
const existingFocusTarget = document.activeElement instanceof HTMLElement && document.activeElement !== dialog && dialog.contains(document.activeElement) ? document.activeElement : null;
|
|
69
|
+
setDialogOpen(dialog);
|
|
70
|
+
(autofocusTarget ?? existingFocusTarget ?? dialog.querySelector("[data-dialog-autofocus]"))?.focus();
|
|
71
|
+
}
|
|
72
|
+
if (dialog.open && !bodyScrollLockedRef.current) {
|
|
73
|
+
lockBodyScroll();
|
|
74
|
+
bodyScrollLockedRef.current = true;
|
|
75
|
+
}
|
|
76
|
+
} else if (dialog.open && phase === "open") {
|
|
77
|
+
setPhase("closing");
|
|
78
|
+
}
|
|
79
|
+
}, [clearCloseTimer, open, phase]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (phase !== "closing") return;
|
|
82
|
+
const dialog = dialogRef.current;
|
|
83
|
+
if (!dialog || !dialog.open) return;
|
|
84
|
+
const styles = window.getComputedStyle(dialog);
|
|
85
|
+
const durations = `${styles.transitionDuration},${styles.animationDuration}`.split(",").map((duration2) => {
|
|
86
|
+
const value = Number.parseFloat(duration2);
|
|
87
|
+
return Number.isFinite(value) ? duration2.trim().endsWith("ms") ? value : value * 1e3 : 0;
|
|
88
|
+
});
|
|
89
|
+
const duration = Math.max(...durations, 0);
|
|
90
|
+
closeTimerRef.current = setTimeout(finishClose, duration);
|
|
91
|
+
return () => {
|
|
92
|
+
clearCloseTimer();
|
|
93
|
+
};
|
|
94
|
+
}, [clearCloseTimer, finishClose, phase]);
|
|
95
|
+
useEffect(
|
|
96
|
+
() => () => {
|
|
97
|
+
clearCloseTimer();
|
|
98
|
+
if (bodyScrollLockedRef.current) {
|
|
99
|
+
unlockBodyScroll();
|
|
100
|
+
bodyScrollLockedRef.current = false;
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
[clearCloseTimer]
|
|
104
|
+
);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
const dialog = dialogRef.current;
|
|
107
|
+
if (!dialog) return;
|
|
108
|
+
const handleClose = () => {
|
|
109
|
+
clearCloseTimer();
|
|
110
|
+
setPhase("closed");
|
|
111
|
+
if (bodyScrollLockedRef.current) {
|
|
112
|
+
unlockBodyScroll();
|
|
113
|
+
bodyScrollLockedRef.current = false;
|
|
114
|
+
}
|
|
115
|
+
restoreFocusRef.current?.focus();
|
|
116
|
+
restoreFocusRef.current = null;
|
|
117
|
+
};
|
|
118
|
+
dialog.addEventListener("close", handleClose);
|
|
119
|
+
return () => dialog.removeEventListener("close", handleClose);
|
|
120
|
+
}, [clearCloseTimer, isPresent]);
|
|
121
|
+
return { dialogRef, close, phase, isPresent };
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
useNativeDialog
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=useNativeDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNativeDialog.js","sources":["../../../src/components/Modal/useNativeDialog.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface UseNativeDialogOptions {\n open: boolean;\n keepMounted: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ntype DialogPhase = 'closed' | 'open' | 'closing';\n\nlet bodyScrollLockCount = 0;\nlet previousBodyOverflow = '';\n\nconst lockBodyScroll = () => {\n if (bodyScrollLockCount === 0) {\n previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n bodyScrollLockCount += 1;\n};\n\nconst unlockBodyScroll = () => {\n bodyScrollLockCount = Math.max(bodyScrollLockCount - 1, 0);\n if (bodyScrollLockCount === 0) {\n document.body.style.overflow = previousBodyOverflow;\n previousBodyOverflow = '';\n }\n};\n\nconst setDialogOpen = (dialog: HTMLDialogElement, open: boolean) => {\n if (open) {\n if (typeof dialog.showModal === 'function') {\n if (!dialog.open) dialog.showModal();\n }\n } else if (dialog.open) {\n if (typeof dialog.close === 'function') {\n dialog.close();\n }\n }\n};\n\nconst findAutofocusTarget = (dialog: HTMLDialogElement) => {\n if (dialog.hasAttribute('autofocus')) return dialog;\n\n return (\n dialog.querySelector<HTMLElement>('[autofocus]') ??\n Array.from(dialog.querySelectorAll<HTMLElement>('*')).find(\n (element) =>\n 'autofocus' in element &&\n (element as HTMLElement & { autofocus: boolean }).autofocus,\n )\n );\n};\n\nexport const useNativeDialog = ({ open, keepMounted, onOpenChange }: UseNativeDialogOptions) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const bodyScrollLockedRef = useRef(false);\n const [phase, setPhase] = useState<DialogPhase>('closed');\n const isPresent = keepMounted || open || phase !== 'closed';\n\n const notifyOpenChange = useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange],\n );\n\n const finishClose = useCallback(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n closeTimerRef.current = null;\n if (dialog.open) {\n dialog.close();\n } else {\n setPhase('closed');\n }\n }, []);\n\n const close = useCallback(() => notifyOpenChange(false), [notifyOpenChange]);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }, []);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (open) {\n clearCloseTimer();\n if (phase === 'closing' || phase === 'closed') setPhase('open');\n if (!dialog.open) {\n restoreFocusRef.current = document.activeElement as HTMLElement | null;\n const autofocusTarget = findAutofocusTarget(dialog);\n const existingFocusTarget =\n document.activeElement instanceof HTMLElement &&\n document.activeElement !== dialog &&\n dialog.contains(document.activeElement)\n ? document.activeElement\n : null;\n setDialogOpen(dialog, true);\n (\n autofocusTarget ??\n existingFocusTarget ??\n dialog.querySelector<HTMLElement>('[data-dialog-autofocus]')\n )?.focus();\n }\n if (dialog.open && !bodyScrollLockedRef.current) {\n lockBodyScroll();\n bodyScrollLockedRef.current = true;\n }\n } else if (dialog.open && phase === 'open') {\n setPhase('closing');\n }\n }, [clearCloseTimer, open, phase]);\n\n useEffect(() => {\n if (phase !== 'closing') return;\n const dialog = dialogRef.current;\n if (!dialog || !dialog.open) return;\n\n const styles = window.getComputedStyle(dialog);\n const durations = `${styles.transitionDuration},${styles.animationDuration}`\n .split(',')\n .map((duration) => {\n const value = Number.parseFloat(duration);\n return Number.isFinite(value)\n ? duration.trim().endsWith('ms')\n ? value\n : value * 1000\n : 0;\n });\n const duration = Math.max(...durations, 0);\n closeTimerRef.current = setTimeout(finishClose, duration);\n\n return () => {\n clearCloseTimer();\n };\n }, [clearCloseTimer, finishClose, phase]);\n\n useEffect(\n () => () => {\n clearCloseTimer();\n if (bodyScrollLockedRef.current) {\n unlockBodyScroll();\n bodyScrollLockedRef.current = false;\n }\n },\n [clearCloseTimer],\n );\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const handleClose = () => {\n clearCloseTimer();\n setPhase('closed');\n if (bodyScrollLockedRef.current) {\n unlockBodyScroll();\n bodyScrollLockedRef.current = false;\n }\n restoreFocusRef.current?.focus();\n restoreFocusRef.current = null;\n };\n\n dialog.addEventListener('close', handleClose);\n return () => dialog.removeEventListener('close', handleClose);\n }, [clearCloseTimer, isPresent]);\n\n return { dialogRef, close, phase, isPresent };\n};\n"],"names":["duration"],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/**
|
|
2
6
|
* Notification Component Styles
|
|
3
7
|
*
|
|
4
8
|
* Design tokens are consumed via CSS custom properties (variables).
|
|
@@ -86,5 +90,4 @@
|
|
|
86
90
|
._notification__close_m746g_69 svg {
|
|
87
91
|
width: 24px;
|
|
88
92
|
height: 24px;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
93
|
+
} }
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/**
|
|
2
6
|
* Pictograph Component Styles
|
|
3
7
|
*
|
|
4
8
|
* Grid-based layout for pictograph items with responsive columns,
|
|
@@ -198,5 +202,4 @@
|
|
|
198
202
|
--_pictograph-text-color: var(--color-semantic-foreground-inverse);
|
|
199
203
|
--_pictograph-icon-color: var(--color-semantic-foreground-inverse);
|
|
200
204
|
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
205
|
+
} }
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/**
|
|
2
6
|
* PictographItem Component Styles
|
|
3
7
|
*
|
|
4
8
|
* Individual pictograph item containing an icon and text area.
|
|
@@ -62,5 +66,4 @@
|
|
|
62
66
|
|
|
63
67
|
._pictograph-item_1jsnm_9[data-pictograph-content='long'] ._pictograph-item__text_1jsnm_35 > p {
|
|
64
68
|
font: var(--_pictograph-long-body-font);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
69
|
+
} }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@layer dds-components {._quote_1dakr_1 {
|
|
1
|
+
@layer dds-base, dds-components;@layer dds-components { @layer fallback, components; }@layer dds-components.components{._quote_1dakr_1 {
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: flex-start;
|
|
4
4
|
gap: var(--spacing-space-20);
|
|
@@ -91,5 +91,4 @@
|
|
|
91
91
|
._quote__mark_1dakr_15 {
|
|
92
92
|
color: CanvasText;
|
|
93
93
|
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
94
|
+
} }
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@layer dds-components
|
|
1
|
+
@layer dds-base, dds-components;
|
|
2
|
+
|
|
3
|
+
@layer dds-components { @layer fallback, components; }
|
|
4
|
+
|
|
5
|
+
@layer dds-components.components{/* ─────────────────────────────────────────────────────────────
|
|
2
6
|
Spinner — base
|
|
3
7
|
───────────────────────────────────────────────────────────── */
|
|
4
8
|
|
|
@@ -112,5 +116,4 @@
|
|
|
112
116
|
._spinner__car_j28th_88 {
|
|
113
117
|
animation-duration: 3s;
|
|
114
118
|
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
119
|
+
} }
|
package/dist/index.cjs
CHANGED
|
@@ -5,12 +5,17 @@ const Accordion = require("./components/Accordion/Accordion.cjs");
|
|
|
5
5
|
const AccordionItem = require("./components/AccordionItem/AccordionItem.cjs");
|
|
6
6
|
const Breadcrumb = require("./components/Breadcrumb/Breadcrumb.cjs");
|
|
7
7
|
const Button = require("./components/Button/Button.cjs");
|
|
8
|
+
const ButtonCard = require("./components/ButtonCard/ButtonCard.cjs");
|
|
8
9
|
const ColorScheme = require("./components/ColorScheme/ColorScheme.cjs");
|
|
10
|
+
const ContentCard = require("./components/ContentCard/ContentCard.cjs");
|
|
11
|
+
const Drawer = require("./components/Drawer/Drawer.cjs");
|
|
9
12
|
const Footer = require("./components/Footer/Footer.cjs");
|
|
13
|
+
const FunctionButton = require("./components/FunctionButton/FunctionButton.cjs");
|
|
10
14
|
const Hero = require("./components/Hero/Hero.cjs");
|
|
11
15
|
const IconButton = require("./components/IconButton/IconButton.cjs");
|
|
12
16
|
const Label = require("./components/Label/Label.cjs");
|
|
13
17
|
const MainNavigation = require("./components/MainNavigation/MainNavigation.cjs");
|
|
18
|
+
const Modal = require("./components/Modal/Modal.cjs");
|
|
14
19
|
const Notification = require("./components/Notification/Notification.cjs");
|
|
15
20
|
const Pictograph = require("./components/Pictograph/Pictograph.cjs");
|
|
16
21
|
const PictographItem = require("./components/Pictograph/PictographItem.cjs");
|
|
@@ -21,12 +26,17 @@ exports.Accordion = Accordion.Accordion;
|
|
|
21
26
|
exports.AccordionItem = AccordionItem.AccordionItem;
|
|
22
27
|
exports.Breadcrumb = Breadcrumb.Breadcrumb;
|
|
23
28
|
exports.Button = Button.Button;
|
|
29
|
+
exports.ButtonCard = ButtonCard.ButtonCard;
|
|
24
30
|
exports.ColorScheme = ColorScheme.ColorScheme;
|
|
31
|
+
exports.ContentCard = ContentCard.ContentCard;
|
|
32
|
+
exports.Drawer = Drawer.Drawer;
|
|
25
33
|
exports.Footer = Footer.Footer;
|
|
34
|
+
exports.FunctionButton = FunctionButton.FunctionButton;
|
|
26
35
|
exports.Hero = Hero.Hero;
|
|
27
36
|
exports.IconButton = IconButton.IconButton;
|
|
28
37
|
exports.Label = Label.Label;
|
|
29
38
|
exports.MainNavigation = MainNavigation.MainNavigation;
|
|
39
|
+
exports.Modal = Modal.Modal;
|
|
30
40
|
exports.Notification = Notification.Notification;
|
|
31
41
|
exports.Pictograph = Pictograph.Pictograph;
|
|
32
42
|
exports.PictographItem = PictographItem.PictographItem;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|