@charcoal-ui/react 6.0.0-rc.7 → 6.0.0-rc.8
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/_lib/createDivComponent.cjs +20 -0
- package/dist/_lib/createDivComponent.cjs.map +1 -0
- package/dist/_lib/createDivComponent.js +19 -0
- package/dist/_lib/createDivComponent.js.map +1 -0
- package/dist/_lib/index.cjs +22 -0
- package/dist/_lib/index.cjs.map +1 -0
- package/dist/_lib/index.js +20 -0
- package/dist/_lib/index.js.map +1 -0
- package/dist/_lib/useClassNames.cjs +15 -0
- package/dist/_lib/useClassNames.cjs.map +1 -0
- package/dist/_lib/useClassNames.js +14 -0
- package/dist/_lib/useClassNames.js.map +1 -0
- package/dist/_lib/useForwardedRef.cjs +19 -0
- package/dist/_lib/useForwardedRef.cjs.map +1 -0
- package/dist/_lib/useForwardedRef.js +17 -0
- package/dist/_lib/useForwardedRef.js.map +1 -0
- package/dist/_lib/useIsomorphicLayoutEffect.cjs +13 -0
- package/dist/_lib/useIsomorphicLayoutEffect.cjs.map +1 -0
- package/dist/_lib/useIsomorphicLayoutEffect.js +12 -0
- package/dist/_lib/useIsomorphicLayoutEffect.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +30 -0
- package/dist/components/Button/index2.cjs +26 -0
- package/dist/components/Button/index2.cjs.map +1 -0
- package/dist/components/Button/index2.js +24 -0
- package/dist/components/Button/index2.js.map +1 -0
- package/dist/components/Carousel/CarouselItem.cjs +46 -0
- package/dist/components/Carousel/CarouselItem.cjs.map +1 -0
- package/dist/components/Carousel/CarouselItem.js +45 -0
- package/dist/components/Carousel/CarouselItem.js.map +1 -0
- package/dist/components/Carousel/carouselStore.cjs +38 -0
- package/dist/components/Carousel/carouselStore.cjs.map +1 -0
- package/dist/components/Carousel/carouselStore.js +37 -0
- package/dist/components/Carousel/carouselStore.js.map +1 -0
- package/dist/components/Carousel/index2.cjs +145 -0
- package/dist/components/Carousel/index2.cjs.map +1 -0
- package/dist/components/Carousel/index2.js +144 -0
- package/dist/components/Carousel/index2.js.map +1 -0
- package/dist/components/Carousel/intersectionObserver.cjs +46 -0
- package/dist/components/Carousel/intersectionObserver.cjs.map +1 -0
- package/dist/components/Carousel/intersectionObserver.js +45 -0
- package/dist/components/Carousel/intersectionObserver.js.map +1 -0
- package/dist/components/Carousel/resizeObserver.cjs +34 -0
- package/dist/components/Carousel/resizeObserver.cjs.map +1 -0
- package/dist/components/Carousel/resizeObserver.js +33 -0
- package/dist/components/Carousel/resizeObserver.js.map +1 -0
- package/dist/components/Carousel/store.cjs +24 -0
- package/dist/components/Carousel/store.cjs.map +1 -0
- package/dist/components/Carousel/store.js +23 -0
- package/dist/components/Carousel/store.js.map +1 -0
- package/dist/components/Carousel/useCarouselScroller.cjs +149 -0
- package/dist/components/Carousel/useCarouselScroller.cjs.map +1 -0
- package/dist/components/Carousel/useCarouselScroller.js +148 -0
- package/dist/components/Carousel/useCarouselScroller.js.map +1 -0
- package/dist/components/Checkbox/CheckboxInput/index2.cjs +29 -0
- package/dist/components/Checkbox/CheckboxInput/index2.cjs.map +1 -0
- package/dist/components/Checkbox/CheckboxInput/index2.js +28 -0
- package/dist/components/Checkbox/CheckboxInput/index2.js.map +1 -0
- package/dist/components/Checkbox/CheckboxWithLabel.cjs +23 -0
- package/dist/components/Checkbox/CheckboxWithLabel.cjs.map +1 -0
- package/dist/components/Checkbox/CheckboxWithLabel.js +21 -0
- package/dist/components/Checkbox/CheckboxWithLabel.js.map +1 -0
- package/dist/components/Checkbox/index2.cjs +34 -0
- package/dist/components/Checkbox/index2.cjs.map +1 -0
- package/dist/components/Checkbox/index2.js +33 -0
- package/dist/components/Checkbox/index2.js.map +1 -0
- package/dist/components/Clickable/index2.cjs +21 -0
- package/dist/components/Clickable/index2.cjs.map +1 -0
- package/dist/components/Clickable/index2.js +19 -0
- package/dist/components/Clickable/index2.js.map +1 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs +44 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.js +43 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.js.map +1 -0
- package/dist/components/DropdownSelector/DropdownPopover.cjs +41 -0
- package/dist/components/DropdownSelector/DropdownPopover.cjs.map +1 -0
- package/dist/components/DropdownSelector/DropdownPopover.js +40 -0
- package/dist/components/DropdownSelector/DropdownPopover.js.map +1 -0
- package/dist/components/DropdownSelector/ListItem/index2.cjs +19 -0
- package/dist/components/DropdownSelector/ListItem/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/ListItem/index2.js +18 -0
- package/dist/components/DropdownSelector/ListItem/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/index.cjs +30 -0
- package/dist/components/DropdownSelector/MenuItem/index.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/index.js +29 -0
- package/dist/components/DropdownSelector/MenuItem/index.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs +30 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js +29 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs +53 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js +52 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs +20 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.js +19 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs +15 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.js +14 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/index2.cjs +32 -0
- package/dist/components/DropdownSelector/MenuList/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/index2.js +31 -0
- package/dist/components/DropdownSelector/MenuList/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs +34 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js +32 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js.map +1 -0
- package/dist/components/DropdownSelector/Popover/index2.cjs +71 -0
- package/dist/components/DropdownSelector/Popover/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/Popover/index2.js +70 -0
- package/dist/components/DropdownSelector/Popover/index2.js.map +1 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs +27 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs.map +1 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.js +26 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.js.map +1 -0
- package/dist/components/DropdownSelector/index2.cjs +113 -0
- package/dist/components/DropdownSelector/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/index2.js +111 -0
- package/dist/components/DropdownSelector/index2.js.map +1 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs +34 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs.map +1 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.js +32 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.js.map +1 -0
- package/dist/components/FieldLabel/index2.cjs +35 -0
- package/dist/components/FieldLabel/index2.cjs.map +1 -0
- package/dist/components/FieldLabel/index2.js +33 -0
- package/dist/components/FieldLabel/index2.js.map +1 -0
- package/dist/components/HintText/index2.cjs +25 -0
- package/dist/components/HintText/index2.cjs.map +1 -0
- package/dist/components/HintText/index2.js +24 -0
- package/dist/components/HintText/index2.js.map +1 -0
- package/dist/components/Icon/index.cjs +39 -0
- package/dist/components/Icon/index.cjs.map +1 -0
- package/dist/components/Icon/index.js +37 -0
- package/dist/components/Icon/index.js.map +1 -0
- package/dist/components/IconButton/index2.cjs +46 -0
- package/dist/components/IconButton/index2.cjs.map +1 -0
- package/dist/components/IconButton/index2.js +44 -0
- package/dist/components/IconButton/index2.js.map +1 -0
- package/dist/components/LoadingSpinner/index2.cjs +43 -0
- package/dist/components/LoadingSpinner/index2.cjs.map +1 -0
- package/dist/components/LoadingSpinner/index2.js +41 -0
- package/dist/components/LoadingSpinner/index2.js.map +1 -0
- package/dist/components/Modal/Dialog/index2.cjs +30 -0
- package/dist/components/Modal/Dialog/index2.cjs.map +1 -0
- package/dist/components/Modal/Dialog/index2.js +28 -0
- package/dist/components/Modal/Dialog/index2.js.map +1 -0
- package/dist/components/Modal/ModalBackgroundContext.cjs +14 -0
- package/dist/components/Modal/ModalBackgroundContext.cjs.map +1 -0
- package/dist/components/Modal/ModalBackgroundContext.js +12 -0
- package/dist/components/Modal/ModalBackgroundContext.js.map +1 -0
- package/dist/components/Modal/ModalPlumbing2.cjs +30 -0
- package/dist/components/Modal/ModalPlumbing2.cjs.map +1 -0
- package/dist/components/Modal/ModalPlumbing2.js +26 -0
- package/dist/components/Modal/ModalPlumbing2.js.map +1 -0
- package/dist/components/Modal/index2.cjs +121 -0
- package/dist/components/Modal/index2.cjs.map +1 -0
- package/dist/components/Modal/index2.js +118 -0
- package/dist/components/Modal/index2.js.map +1 -0
- package/dist/components/Modal/useCustomModalOverlay.cjs +48 -0
- package/dist/components/Modal/useCustomModalOverlay.cjs.map +1 -0
- package/dist/components/Modal/useCustomModalOverlay.js +45 -0
- package/dist/components/Modal/useCustomModalOverlay.js.map +1 -0
- package/dist/components/Modal/useTransitionPresence.cjs +57 -0
- package/dist/components/Modal/useTransitionPresence.cjs.map +1 -0
- package/dist/components/Modal/useTransitionPresence.js +56 -0
- package/dist/components/Modal/useTransitionPresence.js.map +1 -0
- package/dist/components/MultiSelect/context.cjs +19 -0
- package/dist/components/MultiSelect/context.cjs.map +1 -0
- package/dist/components/MultiSelect/context.js +18 -0
- package/dist/components/MultiSelect/context.js.map +1 -0
- package/dist/components/MultiSelect/index2.cjs +97 -0
- package/dist/components/MultiSelect/index2.cjs.map +1 -0
- package/dist/components/MultiSelect/index2.js +93 -0
- package/dist/components/MultiSelect/index2.js.map +1 -0
- package/dist/components/Pagination/PaginationContext.cjs +16 -0
- package/dist/components/Pagination/PaginationContext.cjs.map +1 -0
- package/dist/components/Pagination/PaginationContext.js +14 -0
- package/dist/components/Pagination/PaginationContext.js.map +1 -0
- package/dist/components/Pagination/helper.cjs +63 -0
- package/dist/components/Pagination/helper.cjs.map +1 -0
- package/dist/components/Pagination/helper.js +61 -0
- package/dist/components/Pagination/helper.js.map +1 -0
- package/dist/components/Pagination/index2.cjs +301 -0
- package/dist/components/Pagination/index2.cjs.map +1 -0
- package/dist/components/Pagination/index2.js +288 -0
- package/dist/components/Pagination/index2.js.map +1 -0
- package/dist/components/Radio/RadioGroup/index2.cjs +49 -0
- package/dist/components/Radio/RadioGroup/index2.cjs.map +1 -0
- package/dist/components/Radio/RadioGroup/index2.js +47 -0
- package/dist/components/Radio/RadioGroup/index2.js.map +1 -0
- package/dist/components/Radio/RadioGroupContext.cjs +20 -0
- package/dist/components/Radio/RadioGroupContext.cjs.map +1 -0
- package/dist/components/Radio/RadioGroupContext.js +18 -0
- package/dist/components/Radio/RadioGroupContext.js.map +1 -0
- package/dist/components/Radio/RadioInput/index2.cjs +27 -0
- package/dist/components/Radio/RadioInput/index2.cjs.map +1 -0
- package/dist/components/Radio/RadioInput/index2.js +26 -0
- package/dist/components/Radio/RadioInput/index2.js.map +1 -0
- package/dist/components/Radio/index2.cjs +42 -0
- package/dist/components/Radio/index2.cjs.map +1 -0
- package/dist/components/Radio/index2.js +39 -0
- package/dist/components/Radio/index2.js.map +1 -0
- package/dist/components/SegmentedControl/RadioGroupContext.cjs +24 -0
- package/dist/components/SegmentedControl/RadioGroupContext.cjs.map +1 -0
- package/dist/components/SegmentedControl/RadioGroupContext.js +21 -0
- package/dist/components/SegmentedControl/RadioGroupContext.js.map +1 -0
- package/dist/components/SegmentedControl/index2.cjs +72 -0
- package/dist/components/SegmentedControl/index2.cjs.map +1 -0
- package/dist/components/SegmentedControl/index2.js +70 -0
- package/dist/components/SegmentedControl/index2.js.map +1 -0
- package/dist/components/Switch/SwitchInput/index2.cjs +25 -0
- package/dist/components/Switch/SwitchInput/index2.cjs.map +1 -0
- package/dist/components/Switch/SwitchInput/index2.js +24 -0
- package/dist/components/Switch/SwitchInput/index2.js.map +1 -0
- package/dist/components/Switch/SwitchWithLabel.cjs +23 -0
- package/dist/components/Switch/SwitchWithLabel.cjs.map +1 -0
- package/dist/components/Switch/SwitchWithLabel.js +21 -0
- package/dist/components/Switch/SwitchWithLabel.js.map +1 -0
- package/dist/components/Switch/index2.cjs +37 -0
- package/dist/components/Switch/index2.cjs.map +1 -0
- package/dist/components/Switch/index2.js +36 -0
- package/dist/components/Switch/index2.js.map +1 -0
- package/dist/components/TagItem/index2.cjs +57 -0
- package/dist/components/TagItem/index2.cjs.map +1 -0
- package/dist/components/TagItem/index2.js +55 -0
- package/dist/components/TagItem/index2.js.map +1 -0
- package/dist/components/TextArea/index2.cjs +134 -0
- package/dist/components/TextArea/index2.cjs.map +1 -0
- package/dist/components/TextArea/index2.js +133 -0
- package/dist/components/TextArea/index2.js.map +1 -0
- package/dist/components/TextEllipsis/helper.cjs +31 -0
- package/dist/components/TextEllipsis/helper.cjs.map +1 -0
- package/dist/components/TextEllipsis/helper.js +30 -0
- package/dist/components/TextEllipsis/helper.js.map +1 -0
- package/dist/components/TextEllipsis/index2.cjs +119 -0
- package/dist/components/TextEllipsis/index2.cjs.map +1 -0
- package/dist/components/TextEllipsis/index2.js +114 -0
- package/dist/components/TextEllipsis/index2.js.map +1 -0
- package/dist/components/TextField/AssistiveText/index2.cjs +10 -0
- package/dist/components/TextField/AssistiveText/index2.cjs.map +1 -0
- package/dist/components/TextField/AssistiveText/index2.js +10 -0
- package/dist/components/TextField/AssistiveText/index2.js.map +1 -0
- package/dist/components/TextField/index2.cjs +101 -0
- package/dist/components/TextField/index2.cjs.map +1 -0
- package/dist/components/TextField/index2.js +100 -0
- package/dist/components/TextField/index2.js.map +1 -0
- package/dist/components/TextField/useFocusWithClick.cjs +23 -0
- package/dist/components/TextField/useFocusWithClick.cjs.map +1 -0
- package/dist/components/TextField/useFocusWithClick.js +22 -0
- package/dist/components/TextField/useFocusWithClick.js.map +1 -0
- package/dist/core/CharcoalProvider.cjs +16 -0
- package/dist/core/CharcoalProvider.cjs.map +1 -0
- package/dist/core/CharcoalProvider.js +14 -0
- package/dist/core/CharcoalProvider.js.map +1 -0
- package/dist/core/OverlayProvider.js +4 -0
- package/dist/core/SSRProvider.cjs +15 -0
- package/dist/core/SSRProvider.cjs.map +1 -0
- package/dist/core/SSRProvider.js +14 -0
- package/dist/core/SSRProvider.js.map +1 -0
- package/dist/core/SetThemeScript.cjs +45 -0
- package/dist/core/SetThemeScript.cjs.map +1 -0
- package/dist/core/SetThemeScript.js +43 -0
- package/dist/core/SetThemeScript.js.map +1 -0
- package/dist/core/themeHelper.cjs +154 -0
- package/dist/core/themeHelper.cjs.map +1 -0
- package/dist/core/themeHelper.js +143 -0
- package/dist/core/themeHelper.js.map +1 -0
- package/dist/index.cjs +81 -12
- package/dist/index.css +799 -799
- package/dist/index.js +31 -12
- package/dist/layered.css +802 -802
- package/dist/layered.css.map +1 -1
- package/package.json +5 -5
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useClassNames } from "../../_lib/useClassNames.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { forwardRef, memo, useImperativeHandle, useRef } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/LoadingSpinner/index.tsx
|
|
8
|
+
const LoadingSpinner = forwardRef(function LoadingSpinnerInner({ size = 48, padding = 16, transparent = false, ...props }, ref) {
|
|
9
|
+
const classNames = useClassNames("charcoal-loading-spinner", props.className);
|
|
10
|
+
return /* @__PURE__ */ jsx("div", {
|
|
11
|
+
role: "progressbar",
|
|
12
|
+
style: {
|
|
13
|
+
"--charcoal-loading-spinner-size": `${size}px`,
|
|
14
|
+
"--charcoal-loading-spinner-padding": `${padding}px`
|
|
15
|
+
},
|
|
16
|
+
"data-transparent": transparent,
|
|
17
|
+
className: classNames,
|
|
18
|
+
ref,
|
|
19
|
+
children: /* @__PURE__ */ jsx(LoadingSpinnerIcon, {})
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
var LoadingSpinner_default = memo(LoadingSpinner);
|
|
23
|
+
const LoadingSpinnerIcon = forwardRef(function LoadingSpinnerIcon({ once = false }, ref) {
|
|
24
|
+
const iconRef = useRef(null);
|
|
25
|
+
useImperativeHandle(ref, () => ({ restart: () => {
|
|
26
|
+
if (!iconRef.current) return;
|
|
27
|
+
iconRef.current.dataset.resetAnimation = "true";
|
|
28
|
+
iconRef.current.offsetWidth;
|
|
29
|
+
delete iconRef.current.dataset.resetAnimation;
|
|
30
|
+
} }));
|
|
31
|
+
return /* @__PURE__ */ jsx("div", {
|
|
32
|
+
role: "presentation",
|
|
33
|
+
ref: iconRef,
|
|
34
|
+
"data-once": once,
|
|
35
|
+
className: "charcoal-loading-spinner-icon"
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { LoadingSpinnerIcon, LoadingSpinner_default as default };
|
|
41
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["forwardRef","useImperativeHandle","useRef","memo","useClassNames","LoadingSpinnerProps","size","padding","transparent","className","LoadingSpinner","HTMLDivElement","LoadingSpinnerInner","props","ref","classNames","Props","once","LoadingSpinnerIconHandler","restart","LoadingSpinnerIcon","iconRef","current","dataset","resetAnimation","offsetWidth"],"sources":["../../../src/components/LoadingSpinner/index.tsx"],"sourcesContent":["import { forwardRef, useImperativeHandle, useRef, memo } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\n\nexport type LoadingSpinnerProps = {\n readonly size?: number\n readonly padding?: number\n readonly transparent?: boolean\n readonly className?: string\n}\n\nconst LoadingSpinner = forwardRef<HTMLDivElement, LoadingSpinnerProps>(\n function LoadingSpinnerInner(\n { size = 48, padding = 16, transparent = false, ...props },\n ref,\n ) {\n const classNames = useClassNames(\n 'charcoal-loading-spinner',\n props.className,\n )\n\n return (\n <div\n role=\"progressbar\"\n style={{\n '--charcoal-loading-spinner-size': `${size}px`,\n '--charcoal-loading-spinner-padding': `${padding}px`,\n }}\n data-transparent={transparent}\n className={classNames}\n ref={ref}\n >\n <LoadingSpinnerIcon />\n </div>\n )\n },\n)\n\nexport default memo(LoadingSpinner)\n\ntype Props = {\n once?: boolean\n}\n\nexport interface LoadingSpinnerIconHandler {\n restart(): void\n}\n\nexport const LoadingSpinnerIcon = forwardRef<LoadingSpinnerIconHandler, Props>(\n function LoadingSpinnerIcon({ once = false }, ref) {\n const iconRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => ({\n restart: () => {\n if (!iconRef.current) {\n return\n }\n iconRef.current.dataset.resetAnimation = 'true'\n // Force reflow hack!\n void iconRef.current.offsetWidth\n delete iconRef.current.dataset.resetAnimation\n },\n }))\n\n return (\n <div\n role=\"presentation\"\n ref={iconRef}\n data-once={once}\n className=\"charcoal-loading-spinner-icon\"\n />\n )\n },\n)\n"],"mappings":";;;;;;;AAYA,MAAMU,iBAAiBV,WACrB,SAASY,oBACP,EAAEN,OAAO,IAAIC,UAAU,IAAIC,cAAc,OAAO,GAAGK,SACnDC,KACA;CACA,MAAMC,aAAaX,cACjB,4BACAS,MAAMJ,UACP;CAED,OACE,oBAAC,OAAD;EACE,MAAK;EACL,OAAO;GACL,mCAAmC,GAAGH,KAAI;GAC1C,sCAAsC,GAAGC,QAAO;GACjD;EACD,oBAAkBC;EAClB,WAAWO;EACND;YAEL,oBAAC,oBAAD,EAAmB;EACf;EAGX;AAED,6BAAeX,KAAKO,eAAe;AAUnC,MAAaU,qBAAqBpB,WAChC,SAASoB,mBAAmB,EAAEH,OAAO,SAASH,KAAK;CACjD,MAAMO,UAAUnB,OAAuB,KAAK;CAE5CD,oBAAoBa,YAAY,EAC9BK,eAAe;EACb,IAAI,CAACE,QAAQC,SACX;EAEFD,QAAQC,QAAQC,QAAQC,iBAAiB;EAEzC,AAAKH,QAAQC,QAAQG;EACrB,OAAOJ,QAAQC,QAAQC,QAAQC;IAElC,EAAE;CAEH,OACE,oBAAC,OAAD;EACE,MAAK;EACL,KAAKH;EACL,aAAWJ;EACX,WAAU;EACV;EAGP"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useClassNames = require('../../../_lib/useClassNames.cjs');
|
|
4
|
+
const require_useForwardedRef = require('../../../_lib/useForwardedRef.cjs');
|
|
5
|
+
require('./index.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
react = require_runtime.__toESM(react);
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
let react_aria_useDialog = require("react-aria/useDialog");
|
|
10
|
+
|
|
11
|
+
//#region src/components/Modal/Dialog/index.tsx
|
|
12
|
+
const Dialog = (0, react.forwardRef)(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {
|
|
13
|
+
const ref = require_useForwardedRef.useForwardedRef(forwardRef);
|
|
14
|
+
const { dialogProps } = (0, react_aria_useDialog.useDialog)({ role: "dialog" }, ref);
|
|
15
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
16
|
+
className: require_useClassNames.useClassNames("charcoal-modal-dialog", className),
|
|
17
|
+
role: dialogProps.role,
|
|
18
|
+
"data-bottom-sheet": bottomSheet,
|
|
19
|
+
tabIndex: dialogProps.tabIndex,
|
|
20
|
+
"aria-labelledby": dialogProps["aria-labelledby"],
|
|
21
|
+
onBlur: dialogProps.onBlur,
|
|
22
|
+
"data-size": size,
|
|
23
|
+
ref,
|
|
24
|
+
...props
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.Dialog = Dialog;
|
|
30
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["forwardRef","React","useDialog","useForwardedRef","Size","BottomSheet","useClassNames","Dialog","HTMLDivElement","ComponentPropsWithoutRef","size","bottomSheet","className","props","ref","dialogProps","role","classNames","tabIndex","onBlur"],"sources":["../../../../src/components/Modal/Dialog/index.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport * as React from 'react'\nimport { useDialog } from 'react-aria/useDialog'\nimport { useForwardedRef } from '../../../_lib/useForwardedRef'\nimport { Size, BottomSheet } from '..'\n\nimport './index.css'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport const Dialog = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<'div'> & {\n size: Size\n bottomSheet: BottomSheet\n }\n>(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {\n const ref = useForwardedRef(forwardRef)\n const { dialogProps } = useDialog(\n {\n role: 'dialog',\n },\n ref,\n )\n\n const classNames = useClassNames('charcoal-modal-dialog', className)\n return (\n <div\n className={classNames}\n role={dialogProps.role}\n data-bottom-sheet={bottomSheet}\n tabIndex={dialogProps.tabIndex}\n aria-labelledby={dialogProps['aria-labelledby']}\n onBlur={dialogProps.onBlur}\n data-size={size}\n ref={ref}\n {...props}\n />\n )\n})\n"],"mappings":";;;;;;;;;;;AASA,MAAaO,+BAMX,SAASA,OAAO,EAAEG,MAAMC,aAAaC,WAAW,GAAGC,SAASb,YAAY;CACxE,MAAMc,MAAMX,wCAAgBH,WAAW;CACvC,MAAM,EAAEe,oDACN,EACEC,MAAM,UACP,EACDF,IACD;CAGD,OACE,2CAAC,OAAD;EACE,WAHeR,oCAAc,yBAAyBM,UAGjC;EACrB,MAAMG,YAAYC;EAClB,qBAAmBL;EACnB,UAAUI,YAAYG;EACtB,mBAAiBH,YAAY;EAC7B,QAAQA,YAAYI;EACpB,aAAWT;EACNI;EACL,GAAID;EACJ;EAEJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useClassNames } from "../../../_lib/useClassNames.js";
|
|
3
|
+
import { useForwardedRef } from "../../../_lib/useForwardedRef.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import { forwardRef } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { useDialog } from "react-aria/useDialog";
|
|
8
|
+
|
|
9
|
+
//#region src/components/Modal/Dialog/index.tsx
|
|
10
|
+
const Dialog = forwardRef(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {
|
|
11
|
+
const ref = useForwardedRef(forwardRef);
|
|
12
|
+
const { dialogProps } = useDialog({ role: "dialog" }, ref);
|
|
13
|
+
return /* @__PURE__ */ jsx("div", {
|
|
14
|
+
className: useClassNames("charcoal-modal-dialog", className),
|
|
15
|
+
role: dialogProps.role,
|
|
16
|
+
"data-bottom-sheet": bottomSheet,
|
|
17
|
+
tabIndex: dialogProps.tabIndex,
|
|
18
|
+
"aria-labelledby": dialogProps["aria-labelledby"],
|
|
19
|
+
onBlur: dialogProps.onBlur,
|
|
20
|
+
"data-size": size,
|
|
21
|
+
ref,
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { Dialog };
|
|
28
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["forwardRef","React","useDialog","useForwardedRef","Size","BottomSheet","useClassNames","Dialog","HTMLDivElement","ComponentPropsWithoutRef","size","bottomSheet","className","props","ref","dialogProps","role","classNames","tabIndex","onBlur"],"sources":["../../../../src/components/Modal/Dialog/index.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport * as React from 'react'\nimport { useDialog } from 'react-aria/useDialog'\nimport { useForwardedRef } from '../../../_lib/useForwardedRef'\nimport { Size, BottomSheet } from '..'\n\nimport './index.css'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport const Dialog = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<'div'> & {\n size: Size\n bottomSheet: BottomSheet\n }\n>(function Dialog({ size, bottomSheet, className, ...props }, forwardRef) {\n const ref = useForwardedRef(forwardRef)\n const { dialogProps } = useDialog(\n {\n role: 'dialog',\n },\n ref,\n )\n\n const classNames = useClassNames('charcoal-modal-dialog', className)\n return (\n <div\n className={classNames}\n role={dialogProps.role}\n data-bottom-sheet={bottomSheet}\n tabIndex={dialogProps.tabIndex}\n aria-labelledby={dialogProps['aria-labelledby']}\n onBlur={dialogProps.onBlur}\n data-size={size}\n ref={ref}\n {...props}\n />\n )\n})\n"],"mappings":";;;;;;;;;AASA,MAAaO,SAASP,WAMpB,SAASO,OAAO,EAAEG,MAAMC,aAAaC,WAAW,GAAGC,SAASb,YAAY;CACxE,MAAMc,MAAMX,gBAAgBH,WAAW;CACvC,MAAM,EAAEe,gBAAgBb,UACtB,EACEc,MAAM,UACP,EACDF,IACD;CAGD,OACE,oBAAC,OAAD;EACE,WAHeR,cAAc,yBAAyBM,UAGjC;EACrB,MAAMG,YAAYC;EAClB,qBAAmBL;EACnB,UAAUI,YAAYG;EACtB,mBAAiBH,YAAY;EAC7B,QAAQA,YAAYI;EACpB,aAAWT;EACNI;EACL,GAAID;EACJ;EAEJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
let react = require("react");
|
|
4
|
+
react = require_runtime.__toESM(react);
|
|
5
|
+
|
|
6
|
+
//#region src/components/Modal/ModalBackgroundContext.tsx
|
|
7
|
+
/**
|
|
8
|
+
* ModalBackgroundのElementが入ったコンテキスト
|
|
9
|
+
*/
|
|
10
|
+
const ModalBackgroundContext = react.createContext(null);
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.ModalBackgroundContext = ModalBackgroundContext;
|
|
14
|
+
//# sourceMappingURL=ModalBackgroundContext.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalBackgroundContext.cjs","names":["React","ModalBackgroundContext","createContext","HTMLElement"],"sources":["../../../src/components/Modal/ModalBackgroundContext.tsx"],"sourcesContent":["import * as React from 'react'\n\n/**\n * ModalBackgroundのElementが入ったコンテキスト\n */\nexport const ModalBackgroundContext = React.createContext<HTMLElement | null>(\n null,\n)\n"],"mappings":";;;;;;;;;AAKA,MAAaC,yBAAyBD,MAAME,cAC1C,KACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/Modal/ModalBackgroundContext.tsx
|
|
5
|
+
/**
|
|
6
|
+
* ModalBackgroundのElementが入ったコンテキスト
|
|
7
|
+
*/
|
|
8
|
+
const ModalBackgroundContext = React$1.createContext(null);
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { ModalBackgroundContext };
|
|
12
|
+
//# sourceMappingURL=ModalBackgroundContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalBackgroundContext.js","names":["React","ModalBackgroundContext","createContext","HTMLElement"],"sources":["../../../src/components/Modal/ModalBackgroundContext.tsx"],"sourcesContent":["import * as React from 'react'\n\n/**\n * ModalBackgroundのElementが入ったコンテキスト\n */\nexport const ModalBackgroundContext = React.createContext<HTMLElement | null>(\n null,\n)\n"],"mappings":";;;;;;;AAKA,MAAaC,yBAAyBD,QAAME,cAC1C,KACD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_createDivComponent = require('../../_lib/createDivComponent.cjs');
|
|
4
|
+
const require_index = require('./index2.cjs');
|
|
5
|
+
require('./ModalPlumbing.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
|
|
9
|
+
//#region src/components/Modal/ModalPlumbing.tsx
|
|
10
|
+
function ModalHeader() {
|
|
11
|
+
const modalCtx = (0, react.useContext)(require_index.ModalContext);
|
|
12
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
13
|
+
className: "charcoal-modal-header-root",
|
|
14
|
+
"data-bottom-sheet": modalCtx.bottomSheet,
|
|
15
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
16
|
+
className: "charcoal-modal-header-title",
|
|
17
|
+
children: modalCtx.title
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const ModalAlign = require_createDivComponent.createDivComponent("charcoal-modal-align");
|
|
22
|
+
const ModalBody = require_createDivComponent.createDivComponent("charcoal-modal-body");
|
|
23
|
+
const ModalButtons = require_createDivComponent.createDivComponent("charcoal-modal-buttons");
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.ModalAlign = ModalAlign;
|
|
27
|
+
exports.ModalBody = ModalBody;
|
|
28
|
+
exports.ModalButtons = ModalButtons;
|
|
29
|
+
exports.ModalHeader = ModalHeader;
|
|
30
|
+
//# sourceMappingURL=ModalPlumbing2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalPlumbing2.cjs","names":["ModalContext","useContext","createDivComponent","ModalHeader","modalCtx","bottomSheet","title","ModalAlign","ModalBody","ModalButtons"],"sources":["../../../src/components/Modal/ModalPlumbing.tsx"],"sourcesContent":["import { ModalContext } from '.'\nimport { useContext } from 'react'\n\nimport './ModalPlumbing.css'\nimport { createDivComponent } from '../../_lib/createDivComponent'\n\nexport function ModalHeader() {\n const modalCtx = useContext(ModalContext)\n return (\n <div\n className=\"charcoal-modal-header-root\"\n data-bottom-sheet={modalCtx.bottomSheet}\n >\n <div className=\"charcoal-modal-header-title\">{modalCtx.title}</div>\n </div>\n )\n}\n\nexport const ModalAlign = createDivComponent('charcoal-modal-align')\n\nexport const ModalBody = createDivComponent('charcoal-modal-body')\n\nexport const ModalButtons = createDivComponent('charcoal-modal-buttons')\n"],"mappings":";;;;;;;;;AAMA,SAAgBG,cAAc;CAC5B,MAAMC,iCAAsBJ,2BAAa;CACzC,OACE,2CAAC,OAAD;EACE,WAAU;EACV,qBAAmBI,SAASC;YAE5B,2CAAC,OAAD;GAAK,WAAU;aAA+BD,SAASE;GAAW;EAC9D;;AAIV,MAAaC,aAAaL,8CAAmB,uBAAuB;AAEpE,MAAaM,YAAYN,8CAAmB,sBAAsB;AAElE,MAAaO,eAAeP,8CAAmB,yBAAyB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createDivComponent } from "../../_lib/createDivComponent.js";
|
|
3
|
+
import { ModalContext } from "./index2.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import { useContext } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/components/Modal/ModalPlumbing.tsx
|
|
9
|
+
function ModalHeader() {
|
|
10
|
+
const modalCtx = useContext(ModalContext);
|
|
11
|
+
return /* @__PURE__ */ jsx("div", {
|
|
12
|
+
className: "charcoal-modal-header-root",
|
|
13
|
+
"data-bottom-sheet": modalCtx.bottomSheet,
|
|
14
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
15
|
+
className: "charcoal-modal-header-title",
|
|
16
|
+
children: modalCtx.title
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const ModalAlign = createDivComponent("charcoal-modal-align");
|
|
21
|
+
const ModalBody = createDivComponent("charcoal-modal-body");
|
|
22
|
+
const ModalButtons = createDivComponent("charcoal-modal-buttons");
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { ModalAlign, ModalBody, ModalButtons, ModalHeader };
|
|
26
|
+
//# sourceMappingURL=ModalPlumbing2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalPlumbing2.js","names":["ModalContext","useContext","createDivComponent","ModalHeader","modalCtx","bottomSheet","title","ModalAlign","ModalBody","ModalButtons"],"sources":["../../../src/components/Modal/ModalPlumbing.tsx"],"sourcesContent":["import { ModalContext } from '.'\nimport { useContext } from 'react'\n\nimport './ModalPlumbing.css'\nimport { createDivComponent } from '../../_lib/createDivComponent'\n\nexport function ModalHeader() {\n const modalCtx = useContext(ModalContext)\n return (\n <div\n className=\"charcoal-modal-header-root\"\n data-bottom-sheet={modalCtx.bottomSheet}\n >\n <div className=\"charcoal-modal-header-title\">{modalCtx.title}</div>\n </div>\n )\n}\n\nexport const ModalAlign = createDivComponent('charcoal-modal-align')\n\nexport const ModalBody = createDivComponent('charcoal-modal-body')\n\nexport const ModalButtons = createDivComponent('charcoal-modal-buttons')\n"],"mappings":";;;;;;;;AAMA,SAAgBG,cAAc;CAC5B,MAAMC,WAAWH,WAAWD,aAAa;CACzC,OACE,oBAAC,OAAD;EACE,WAAU;EACV,qBAAmBI,SAASC;YAE5B,oBAAC,OAAD;GAAK,WAAU;aAA+BD,SAASE;GAAW;EAC9D;;AAIV,MAAaC,aAAaL,mBAAmB,uBAAuB;AAEpE,MAAaM,YAAYN,mBAAmB,sBAAsB;AAElE,MAAaO,eAAeP,mBAAmB,yBAAyB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_index = require('../IconButton/index2.cjs');
|
|
4
|
+
const require_index$1 = require('./Dialog/index2.cjs');
|
|
5
|
+
const require_ModalBackgroundContext = require('./ModalBackgroundContext.cjs');
|
|
6
|
+
const require_useCustomModalOverlay = require('./useCustomModalOverlay.cjs');
|
|
7
|
+
const require_useTransitionPresence = require('./useTransitionPresence.cjs');
|
|
8
|
+
require('./index.cjs');
|
|
9
|
+
let react = require("react");
|
|
10
|
+
react = require_runtime.__toESM(react);
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
+
let react_aria_Overlay = require("react-aria/Overlay");
|
|
13
|
+
let react_aria_useObjectRef = require("react-aria/useObjectRef");
|
|
14
|
+
|
|
15
|
+
//#region src/components/Modal/index.tsx
|
|
16
|
+
const DEFAULT_Z_INDEX = 10;
|
|
17
|
+
/**
|
|
18
|
+
* モーダルコンポーネント。
|
|
19
|
+
*
|
|
20
|
+
* @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する
|
|
21
|
+
* ```tsx
|
|
22
|
+
* import {
|
|
23
|
+
* OverlayProvider,
|
|
24
|
+
* Modal,
|
|
25
|
+
* ModalHeader,
|
|
26
|
+
* ModalBody,
|
|
27
|
+
* ModalButtons
|
|
28
|
+
* } from '@charcoal-ui/react'
|
|
29
|
+
*
|
|
30
|
+
* <OverlayProvider>
|
|
31
|
+
* <App>
|
|
32
|
+
* <Modal title="Title" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>
|
|
33
|
+
* <ModalHeader />
|
|
34
|
+
* <ModalBody>
|
|
35
|
+
* ...
|
|
36
|
+
* <ModalButtons>...</ModalButtons>
|
|
37
|
+
* </ModalBody>
|
|
38
|
+
* </Modal>
|
|
39
|
+
* </App>
|
|
40
|
+
* </OverlayProvider>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
const Modal = (0, react.forwardRef)(function ModalInner({ children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props }, external) {
|
|
44
|
+
const { title, size = "M", bottomSheet = false, isDismissable, onClose, className, isOpen = false, closeButtonAriaLabel = "Close" } = props;
|
|
45
|
+
const ref = (0, react_aria_useObjectRef.useObjectRef)(external);
|
|
46
|
+
const { modalProps, underlayProps } = require_useCustomModalOverlay.useCharcoalModalOverlay({
|
|
47
|
+
...props,
|
|
48
|
+
isKeyboardDismissDisabled: isDismissable === void 0 || isDismissable === false
|
|
49
|
+
}, {
|
|
50
|
+
onClose,
|
|
51
|
+
isOpen
|
|
52
|
+
}, ref);
|
|
53
|
+
const isMobile = (require_useCustomModalOverlay.useWindowWidth() ?? Infinity) < 744;
|
|
54
|
+
const transitionEnabled = isMobile && bottomSheet !== false;
|
|
55
|
+
const showDismiss = !isMobile || bottomSheet !== true;
|
|
56
|
+
const bgRef = react.useRef(null);
|
|
57
|
+
const { isPresent, animationState, handleTransitionEnd } = require_useTransitionPresence.useTransitionPresence(isOpen, transitionEnabled, bgRef, ref);
|
|
58
|
+
const handleClick = react.useCallback((e) => {
|
|
59
|
+
if (e.currentTarget === e.target) onClose();
|
|
60
|
+
}, [onClose]);
|
|
61
|
+
if (!isPresent) return null;
|
|
62
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_Overlay.Overlay, {
|
|
63
|
+
portalContainer,
|
|
64
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
65
|
+
className: "charcoal-modal-background",
|
|
66
|
+
ref: bgRef,
|
|
67
|
+
...underlayProps,
|
|
68
|
+
style: { zIndex },
|
|
69
|
+
"data-bottom-sheet": bottomSheet,
|
|
70
|
+
"data-animation": transitionEnabled ? animationState : void 0,
|
|
71
|
+
onClick: handleClick,
|
|
72
|
+
onTransitionEnd: handleTransitionEnd,
|
|
73
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ModalBackgroundContext.ModalBackgroundContext.Provider, {
|
|
74
|
+
value: bgRef.current,
|
|
75
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.Dialog, {
|
|
76
|
+
ref,
|
|
77
|
+
...modalProps,
|
|
78
|
+
size,
|
|
79
|
+
bottomSheet,
|
|
80
|
+
className,
|
|
81
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ModalContext.Provider, {
|
|
82
|
+
value: {
|
|
83
|
+
titleProps: {},
|
|
84
|
+
title,
|
|
85
|
+
close: onClose,
|
|
86
|
+
showDismiss,
|
|
87
|
+
bottomSheet
|
|
88
|
+
},
|
|
89
|
+
children: [children, isDismissable === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalCloseButton, {
|
|
90
|
+
"aria-label": closeButtonAriaLabel,
|
|
91
|
+
onClick: onClose
|
|
92
|
+
})]
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
var Modal_default = (0, react.memo)(Modal);
|
|
100
|
+
const ModalContext = react.createContext({
|
|
101
|
+
titleProps: {},
|
|
102
|
+
title: "",
|
|
103
|
+
close: void 0,
|
|
104
|
+
showDismiss: true,
|
|
105
|
+
bottomSheet: false
|
|
106
|
+
});
|
|
107
|
+
function ModalCloseButton(props) {
|
|
108
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
|
|
109
|
+
className: "charcoal-modal-close-button",
|
|
110
|
+
size: "S",
|
|
111
|
+
icon: "24/Close",
|
|
112
|
+
type: "button",
|
|
113
|
+
...props
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
//#endregion
|
|
118
|
+
exports.ModalCloseButton = ModalCloseButton;
|
|
119
|
+
exports.ModalContext = ModalContext;
|
|
120
|
+
exports.default = Modal_default;
|
|
121
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["useContext","forwardRef","memo","React","AriaDialogProps","Button","ButtonProps","IconButton","IconButtonProps","Dialog","ModalBackgroundContext","CharcoalModalOverlayProps","useCharcoalModalOverlay","useWindowWidth","useTransitionPresence","Overlay","useObjectRef","BottomSheet","Size","ModalProps","children","ReactNode","zIndex","title","size","bottomSheet","isOpen","onClose","className","closeButtonAriaLabel","portalContainer","HTMLElement","DEFAULT_Z_INDEX","Modal","HTMLDivElement","ModalInner","props","external","isDismissable","ref","modalProps","underlayProps","isKeyboardDismissDisabled","undefined","isMobile","Infinity","transitionEnabled","showDismiss","bgRef","useRef","isPresent","animationState","handleTransitionEnd","handleClick","useCallback","e","MouseEvent","currentTarget","target","current","titleProps","close","ModalContext","createContext","HTMLAttributes","ModalCloseButton","Omit","ModalDismissButton"],"sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport type { AriaDialogProps } from 'react-aria/useDialog'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\nimport { useTransitionPresence } from './useTransitionPresence'\n\nimport './index.css'\n\nimport { Overlay } from 'react-aria/Overlay'\nimport { useObjectRef } from 'react-aria/useObjectRef'\n\nexport type BottomSheet = boolean | 'full'\nexport type Size = 'S' | 'M' | 'L'\n\nexport type ModalProps = CharcoalModalOverlayProps &\n AriaDialogProps & {\n children: React.ReactNode\n zIndex?: number\n title: string\n size?: Size\n bottomSheet?: BottomSheet\n isOpen: boolean\n onClose: () => void\n className?: string\n closeButtonAriaLabel?: string\n\n /**\n * https://github.com/adobe/react-spectrum/issues/3787\n * Next.jsで使用する際に発生するエラーの一時的な回避策でdocument.bodyを指定する必要がある\n */\n portalContainer?: HTMLElement\n }\n\nconst DEFAULT_Z_INDEX = 10\n\n/**\n * モーダルコンポーネント。\n *\n * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する\n * ```tsx\n * import {\n * OverlayProvider,\n * Modal,\n * ModalHeader,\n * ModalBody,\n * ModalButtons\n * } from '@charcoal-ui/react'\n *\n * <OverlayProvider>\n * <App>\n * <Modal title=\"Title\" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>\n * <ModalHeader />\n * <ModalBody>\n * ...\n * <ModalButtons>...</ModalButtons>\n * </ModalBody>\n * </Modal>\n * </App>\n * </OverlayProvider>\n * ```\n */\nconst Modal = forwardRef<HTMLDivElement, ModalProps>(function ModalInner(\n { children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props },\n external,\n) {\n const {\n title,\n size = 'M',\n bottomSheet = false,\n isDismissable,\n onClose,\n className,\n isOpen = false,\n closeButtonAriaLabel = 'Close',\n } = props\n\n const ref = useObjectRef<HTMLDivElement>(external)\n\n const { modalProps, underlayProps } = useCharcoalModalOverlay(\n {\n ...props,\n isKeyboardDismissDisabled:\n isDismissable === undefined || isDismissable === false,\n },\n {\n onClose,\n isOpen,\n },\n ref,\n )\n\n const isMobile = (useWindowWidth() ?? Infinity) < 744\n const transitionEnabled = isMobile && bottomSheet !== false\n const showDismiss = !isMobile || bottomSheet !== true\n\n const bgRef = React.useRef<HTMLDivElement>(null)\n\n const { isPresent, animationState, handleTransitionEnd } =\n useTransitionPresence(isOpen, transitionEnabled, bgRef, ref)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (e.currentTarget === e.target) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!isPresent) {\n return null\n }\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={{ zIndex }}\n data-bottom-sheet={bottomSheet}\n data-animation={transitionEnabled ? animationState : undefined}\n onClick={handleClick}\n onTransitionEnd={handleTransitionEnd}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n <Dialog\n ref={ref}\n {...modalProps}\n size={size}\n bottomSheet={bottomSheet}\n className={className}\n >\n <ModalContext.Provider\n value={{\n titleProps: {},\n title,\n close: onClose,\n showDismiss,\n bottomSheet,\n }}\n >\n {children}\n {isDismissable === true && (\n <ModalCloseButton\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n />\n )}\n </ModalContext.Provider>\n </Dialog>\n </ModalBackgroundContext.Provider>\n </div>\n </Overlay>\n )\n})\n\nexport default memo(Modal)\n\nexport const ModalContext = React.createContext<{\n /**\n * @deprecated\n */\n titleProps: React.HTMLAttributes<HTMLElement>\n title: string\n close?: () => void\n showDismiss: boolean\n bottomSheet: BottomSheet\n}>({\n titleProps: {},\n title: '',\n close: undefined,\n showDismiss: true,\n bottomSheet: false,\n})\n\nexport function ModalCloseButton(props: Omit<IconButtonProps, 'icon'>) {\n return (\n <IconButton\n className=\"charcoal-modal-close-button\"\n size=\"S\"\n icon=\"24/Close\"\n type=\"button\"\n {...props}\n />\n )\n}\n\nexport function ModalDismissButton({ children, ...props }: ButtonProps) {\n const { close, showDismiss } = useContext(ModalContext)\n\n if (!showDismiss) {\n return null\n }\n\n return (\n <Button {...props} onClick={close} fullWidth>\n {children}\n </Button>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyCA,MAAMgC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BxB,MAAMC,8BAA+C,SAASE,WAC5D,EAAEf,UAAUE,SAASU,iBAAiBF,iBAAiB,GAAGM,SAC1DC,UACA;CACA,MAAM,EACJd,OACAC,OAAO,KACPC,cAAc,OACda,eACAX,SACAC,WACAF,SAAS,OACTG,uBAAuB,YACrBO;CAEJ,MAAMG,gDAAmCF,SAAS;CAElD,MAAM,EAAEG,YAAYC,kBAAkB7B,sDACpC;EACE,GAAGwB;EACHM,2BACEJ,kBAAkBK,UAAaL,kBAAkB;EACpD,EACD;EACEX;EACAD;EACD,EACDa,IACD;CAED,MAAMK,YAAY/B,8CAAgB,IAAIgC,YAAY;CAClD,MAAMC,oBAAoBF,YAAYnB,gBAAgB;CACtD,MAAMsB,cAAc,CAACH,YAAYnB,gBAAgB;CAEjD,MAAMuB,QAAQ7C,MAAM8C,OAAuB,KAAK;CAEhD,MAAM,EAAEC,WAAWC,gBAAgBC,wBACjCtC,oDAAsBY,QAAQoB,mBAAmBE,OAAOT,IAAI;CAE9D,MAAMc,cAAclD,MAAMmD,aACvBC,MAAoD;EACnD,IAAIA,EAAEE,kBAAkBF,EAAEG,QACxB/B,SAAS;IAGb,CAACA,QACH,CAAC;CAED,IAAI,CAACuB,WACH,OAAO;CAGT,OACE,2CAAC,4BAAD;EAA0BpB;YACxB,2CAAC,OAAD;GACE,WAAU;GACV,KAAKkB;GACL,GAAIP;GACJ,OAAO,EAAEnB,QAAQ;GACjB,qBAAmBG;GACnB,kBAAgBqB,oBAAoBK,iBAAiBR;GACrD,SAASU;GACT,iBAAiBD;aAEjB,2CAAC,sDAAuB,UAAxB;IAAiC,OAAOJ,MAAMW;cAC5C,2CAAC,wBAAD;KACOpB;KACL,GAAIC;KACEhB;KACOC;KACFG;eAEX,4CAAC,aAAa,UAAd;MACE,OAAO;OACLgC,YAAY,EAAE;OACdrC;OACAsC,OAAOlC;OACPoB;OACAtB;OACD;gBAPH,CASGL,UACAkB,kBAAkB,QACjB,2CAAC,kBAAD;OACE,cAAYT;OACZ,SAASF;OAEZ,EACoB;;KACjB;IACuB;GAC9B;EACG;EAEZ;AAEF,oCAAoBM,MAAM;AAE1B,MAAa6B,eAAe3D,MAAM4D,cAS/B;CACDH,YAAY,EAAE;CACdrC,OAAO;CACPsC,OAAOlB;CACPI,aAAa;CACbtB,aAAa;CACd,CAAC;AAEF,SAAgBwC,iBAAiB7B,OAAsC;CACrE,OACE,2CAAC,uBAAD;EACE,WAAU;EACV,MAAK;EACL,MAAK;EACL,MAAK;EACL,GAAIA;EACJ"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import IconButton from "../IconButton/index2.js";
|
|
3
|
+
import { Dialog } from "./Dialog/index2.js";
|
|
4
|
+
import { ModalBackgroundContext } from "./ModalBackgroundContext.js";
|
|
5
|
+
import { useCharcoalModalOverlay, useWindowWidth } from "./useCustomModalOverlay.js";
|
|
6
|
+
import { useTransitionPresence } from "./useTransitionPresence.js";
|
|
7
|
+
/* empty css */
|
|
8
|
+
import * as React$1 from "react";
|
|
9
|
+
import { forwardRef, memo, useContext } from "react";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { Overlay } from "react-aria/Overlay";
|
|
12
|
+
import { useObjectRef } from "react-aria/useObjectRef";
|
|
13
|
+
|
|
14
|
+
//#region src/components/Modal/index.tsx
|
|
15
|
+
const DEFAULT_Z_INDEX = 10;
|
|
16
|
+
/**
|
|
17
|
+
* モーダルコンポーネント。
|
|
18
|
+
*
|
|
19
|
+
* @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する
|
|
20
|
+
* ```tsx
|
|
21
|
+
* import {
|
|
22
|
+
* OverlayProvider,
|
|
23
|
+
* Modal,
|
|
24
|
+
* ModalHeader,
|
|
25
|
+
* ModalBody,
|
|
26
|
+
* ModalButtons
|
|
27
|
+
* } from '@charcoal-ui/react'
|
|
28
|
+
*
|
|
29
|
+
* <OverlayProvider>
|
|
30
|
+
* <App>
|
|
31
|
+
* <Modal title="Title" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>
|
|
32
|
+
* <ModalHeader />
|
|
33
|
+
* <ModalBody>
|
|
34
|
+
* ...
|
|
35
|
+
* <ModalButtons>...</ModalButtons>
|
|
36
|
+
* </ModalBody>
|
|
37
|
+
* </Modal>
|
|
38
|
+
* </App>
|
|
39
|
+
* </OverlayProvider>
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
const Modal = forwardRef(function ModalInner({ children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props }, external) {
|
|
43
|
+
const { title, size = "M", bottomSheet = false, isDismissable, onClose, className, isOpen = false, closeButtonAriaLabel = "Close" } = props;
|
|
44
|
+
const ref = useObjectRef(external);
|
|
45
|
+
const { modalProps, underlayProps } = useCharcoalModalOverlay({
|
|
46
|
+
...props,
|
|
47
|
+
isKeyboardDismissDisabled: isDismissable === void 0 || isDismissable === false
|
|
48
|
+
}, {
|
|
49
|
+
onClose,
|
|
50
|
+
isOpen
|
|
51
|
+
}, ref);
|
|
52
|
+
const isMobile = (useWindowWidth() ?? Infinity) < 744;
|
|
53
|
+
const transitionEnabled = isMobile && bottomSheet !== false;
|
|
54
|
+
const showDismiss = !isMobile || bottomSheet !== true;
|
|
55
|
+
const bgRef = React$1.useRef(null);
|
|
56
|
+
const { isPresent, animationState, handleTransitionEnd } = useTransitionPresence(isOpen, transitionEnabled, bgRef, ref);
|
|
57
|
+
const handleClick = React$1.useCallback((e) => {
|
|
58
|
+
if (e.currentTarget === e.target) onClose();
|
|
59
|
+
}, [onClose]);
|
|
60
|
+
if (!isPresent) return null;
|
|
61
|
+
return /* @__PURE__ */ jsx(Overlay, {
|
|
62
|
+
portalContainer,
|
|
63
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
64
|
+
className: "charcoal-modal-background",
|
|
65
|
+
ref: bgRef,
|
|
66
|
+
...underlayProps,
|
|
67
|
+
style: { zIndex },
|
|
68
|
+
"data-bottom-sheet": bottomSheet,
|
|
69
|
+
"data-animation": transitionEnabled ? animationState : void 0,
|
|
70
|
+
onClick: handleClick,
|
|
71
|
+
onTransitionEnd: handleTransitionEnd,
|
|
72
|
+
children: /* @__PURE__ */ jsx(ModalBackgroundContext.Provider, {
|
|
73
|
+
value: bgRef.current,
|
|
74
|
+
children: /* @__PURE__ */ jsx(Dialog, {
|
|
75
|
+
ref,
|
|
76
|
+
...modalProps,
|
|
77
|
+
size,
|
|
78
|
+
bottomSheet,
|
|
79
|
+
className,
|
|
80
|
+
children: /* @__PURE__ */ jsxs(ModalContext.Provider, {
|
|
81
|
+
value: {
|
|
82
|
+
titleProps: {},
|
|
83
|
+
title,
|
|
84
|
+
close: onClose,
|
|
85
|
+
showDismiss,
|
|
86
|
+
bottomSheet
|
|
87
|
+
},
|
|
88
|
+
children: [children, isDismissable === true && /* @__PURE__ */ jsx(ModalCloseButton, {
|
|
89
|
+
"aria-label": closeButtonAriaLabel,
|
|
90
|
+
onClick: onClose
|
|
91
|
+
})]
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
var Modal_default = memo(Modal);
|
|
99
|
+
const ModalContext = React$1.createContext({
|
|
100
|
+
titleProps: {},
|
|
101
|
+
title: "",
|
|
102
|
+
close: void 0,
|
|
103
|
+
showDismiss: true,
|
|
104
|
+
bottomSheet: false
|
|
105
|
+
});
|
|
106
|
+
function ModalCloseButton(props) {
|
|
107
|
+
return /* @__PURE__ */ jsx(IconButton, {
|
|
108
|
+
className: "charcoal-modal-close-button",
|
|
109
|
+
size: "S",
|
|
110
|
+
icon: "24/Close",
|
|
111
|
+
type: "button",
|
|
112
|
+
...props
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
export { ModalCloseButton, ModalContext, Modal_default as default };
|
|
118
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["useContext","forwardRef","memo","React","AriaDialogProps","Button","ButtonProps","IconButton","IconButtonProps","Dialog","ModalBackgroundContext","CharcoalModalOverlayProps","useCharcoalModalOverlay","useWindowWidth","useTransitionPresence","Overlay","useObjectRef","BottomSheet","Size","ModalProps","children","ReactNode","zIndex","title","size","bottomSheet","isOpen","onClose","className","closeButtonAriaLabel","portalContainer","HTMLElement","DEFAULT_Z_INDEX","Modal","HTMLDivElement","ModalInner","props","external","isDismissable","ref","modalProps","underlayProps","isKeyboardDismissDisabled","undefined","isMobile","Infinity","transitionEnabled","showDismiss","bgRef","useRef","isPresent","animationState","handleTransitionEnd","handleClick","useCallback","e","MouseEvent","currentTarget","target","current","titleProps","close","ModalContext","createContext","HTMLAttributes","ModalCloseButton","Omit","ModalDismissButton"],"sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport type { AriaDialogProps } from 'react-aria/useDialog'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\nimport { useTransitionPresence } from './useTransitionPresence'\n\nimport './index.css'\n\nimport { Overlay } from 'react-aria/Overlay'\nimport { useObjectRef } from 'react-aria/useObjectRef'\n\nexport type BottomSheet = boolean | 'full'\nexport type Size = 'S' | 'M' | 'L'\n\nexport type ModalProps = CharcoalModalOverlayProps &\n AriaDialogProps & {\n children: React.ReactNode\n zIndex?: number\n title: string\n size?: Size\n bottomSheet?: BottomSheet\n isOpen: boolean\n onClose: () => void\n className?: string\n closeButtonAriaLabel?: string\n\n /**\n * https://github.com/adobe/react-spectrum/issues/3787\n * Next.jsで使用する際に発生するエラーの一時的な回避策でdocument.bodyを指定する必要がある\n */\n portalContainer?: HTMLElement\n }\n\nconst DEFAULT_Z_INDEX = 10\n\n/**\n * モーダルコンポーネント。\n *\n * @example アプリケーションルートで `<OverlayProvider>` ないし `<CharcoalProvider>` で囲った上で利用する\n * ```tsx\n * import {\n * OverlayProvider,\n * Modal,\n * ModalHeader,\n * ModalBody,\n * ModalButtons\n * } from '@charcoal-ui/react'\n *\n * <OverlayProvider>\n * <App>\n * <Modal title=\"Title\" isOpen={state.isOpen} onClose={() => state.close()} isDismissable>\n * <ModalHeader />\n * <ModalBody>\n * ...\n * <ModalButtons>...</ModalButtons>\n * </ModalBody>\n * </Modal>\n * </App>\n * </OverlayProvider>\n * ```\n */\nconst Modal = forwardRef<HTMLDivElement, ModalProps>(function ModalInner(\n { children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props },\n external,\n) {\n const {\n title,\n size = 'M',\n bottomSheet = false,\n isDismissable,\n onClose,\n className,\n isOpen = false,\n closeButtonAriaLabel = 'Close',\n } = props\n\n const ref = useObjectRef<HTMLDivElement>(external)\n\n const { modalProps, underlayProps } = useCharcoalModalOverlay(\n {\n ...props,\n isKeyboardDismissDisabled:\n isDismissable === undefined || isDismissable === false,\n },\n {\n onClose,\n isOpen,\n },\n ref,\n )\n\n const isMobile = (useWindowWidth() ?? Infinity) < 744\n const transitionEnabled = isMobile && bottomSheet !== false\n const showDismiss = !isMobile || bottomSheet !== true\n\n const bgRef = React.useRef<HTMLDivElement>(null)\n\n const { isPresent, animationState, handleTransitionEnd } =\n useTransitionPresence(isOpen, transitionEnabled, bgRef, ref)\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (e.currentTarget === e.target) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!isPresent) {\n return null\n }\n\n return (\n <Overlay portalContainer={portalContainer}>\n <div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={{ zIndex }}\n data-bottom-sheet={bottomSheet}\n data-animation={transitionEnabled ? animationState : undefined}\n onClick={handleClick}\n onTransitionEnd={handleTransitionEnd}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n <Dialog\n ref={ref}\n {...modalProps}\n size={size}\n bottomSheet={bottomSheet}\n className={className}\n >\n <ModalContext.Provider\n value={{\n titleProps: {},\n title,\n close: onClose,\n showDismiss,\n bottomSheet,\n }}\n >\n {children}\n {isDismissable === true && (\n <ModalCloseButton\n aria-label={closeButtonAriaLabel}\n onClick={onClose}\n />\n )}\n </ModalContext.Provider>\n </Dialog>\n </ModalBackgroundContext.Provider>\n </div>\n </Overlay>\n )\n})\n\nexport default memo(Modal)\n\nexport const ModalContext = React.createContext<{\n /**\n * @deprecated\n */\n titleProps: React.HTMLAttributes<HTMLElement>\n title: string\n close?: () => void\n showDismiss: boolean\n bottomSheet: BottomSheet\n}>({\n titleProps: {},\n title: '',\n close: undefined,\n showDismiss: true,\n bottomSheet: false,\n})\n\nexport function ModalCloseButton(props: Omit<IconButtonProps, 'icon'>) {\n return (\n <IconButton\n className=\"charcoal-modal-close-button\"\n size=\"S\"\n icon=\"24/Close\"\n type=\"button\"\n {...props}\n />\n )\n}\n\nexport function ModalDismissButton({ children, ...props }: ButtonProps) {\n const { close, showDismiss } = useContext(ModalContext)\n\n if (!showDismiss) {\n return null\n }\n\n return (\n <Button {...props} onClick={close} fullWidth>\n {children}\n </Button>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAyCA,MAAMgC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BxB,MAAMC,QAAQhC,WAAuC,SAASkC,WAC5D,EAAEf,UAAUE,SAASU,iBAAiBF,iBAAiB,GAAGM,SAC1DC,UACA;CACA,MAAM,EACJd,OACAC,OAAO,KACPC,cAAc,OACda,eACAX,SACAC,WACAF,SAAS,OACTG,uBAAuB,YACrBO;CAEJ,MAAMG,MAAMvB,aAA6BqB,SAAS;CAElD,MAAM,EAAEG,YAAYC,kBAAkB7B,wBACpC;EACE,GAAGwB;EACHM,2BACEJ,kBAAkBK,UAAaL,kBAAkB;EACpD,EACD;EACEX;EACAD;EACD,EACDa,IACD;CAED,MAAMK,YAAY/B,gBAAgB,IAAIgC,YAAY;CAClD,MAAMC,oBAAoBF,YAAYnB,gBAAgB;CACtD,MAAMsB,cAAc,CAACH,YAAYnB,gBAAgB;CAEjD,MAAMuB,QAAQ7C,QAAM8C,OAAuB,KAAK;CAEhD,MAAM,EAAEC,WAAWC,gBAAgBC,wBACjCtC,sBAAsBY,QAAQoB,mBAAmBE,OAAOT,IAAI;CAE9D,MAAMc,cAAclD,QAAMmD,aACvBC,MAAoD;EACnD,IAAIA,EAAEE,kBAAkBF,EAAEG,QACxB/B,SAAS;IAGb,CAACA,QACH,CAAC;CAED,IAAI,CAACuB,WACH,OAAO;CAGT,OACE,oBAAC,SAAD;EAA0BpB;YACxB,oBAAC,OAAD;GACE,WAAU;GACV,KAAKkB;GACL,GAAIP;GACJ,OAAO,EAAEnB,QAAQ;GACjB,qBAAmBG;GACnB,kBAAgBqB,oBAAoBK,iBAAiBR;GACrD,SAASU;GACT,iBAAiBD;aAEjB,oBAAC,uBAAuB,UAAxB;IAAiC,OAAOJ,MAAMW;cAC5C,oBAAC,QAAD;KACOpB;KACL,GAAIC;KACEhB;KACOC;KACFG;eAEX,qBAAC,aAAa,UAAd;MACE,OAAO;OACLgC,YAAY,EAAE;OACdrC;OACAsC,OAAOlC;OACPoB;OACAtB;OACD;gBAPH,CASGL,UACAkB,kBAAkB,QACjB,oBAAC,kBAAD;OACE,cAAYT;OACZ,SAASF;OAEZ,EACoB;;KACjB;IACuB;GAC9B;EACG;EAEZ;AAEF,oBAAezB,KAAK+B,MAAM;AAE1B,MAAa6B,eAAe3D,QAAM4D,cAS/B;CACDH,YAAY,EAAE;CACdrC,OAAO;CACPsC,OAAOlB;CACPI,aAAa;CACbtB,aAAa;CACd,CAAC;AAEF,SAAgBwC,iBAAiB7B,OAAsC;CACrE,OACE,oBAAC,YAAD;EACE,WAAU;EACV,MAAK;EACL,MAAK;EACL,MAAK;EACL,GAAIA;EACJ"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_usePreventScroll = require('../DropdownSelector/Popover/usePreventScroll.cjs');
|
|
4
|
+
let react = require("react");
|
|
5
|
+
react = require_runtime.__toESM(react);
|
|
6
|
+
let react_aria_private_overlays_ariaHideOutside = require("react-aria/private/overlays/ariaHideOutside");
|
|
7
|
+
let react_aria_private_overlays_Overlay = require("react-aria/private/overlays/Overlay");
|
|
8
|
+
let react_aria_useOverlay = require("react-aria/useOverlay");
|
|
9
|
+
|
|
10
|
+
//#region src/components/Modal/useCustomModalOverlay.tsx
|
|
11
|
+
function useCharcoalModalOverlay(props, state, ref) {
|
|
12
|
+
const { overlayProps, underlayProps } = (0, react_aria_useOverlay.useOverlay)({
|
|
13
|
+
...props,
|
|
14
|
+
isOpen: state.isOpen,
|
|
15
|
+
onClose: state.onClose,
|
|
16
|
+
shouldCloseOnInteractOutside: () => false
|
|
17
|
+
}, ref);
|
|
18
|
+
require_usePreventScroll.usePreventScroll(typeof document !== "undefined" ? document.body : null, state.isOpen, props.overflowClip);
|
|
19
|
+
(0, react_aria_private_overlays_Overlay.useOverlayFocusContain)();
|
|
20
|
+
react.useEffect(() => {
|
|
21
|
+
if (state.isOpen && ref.current) return (0, react_aria_private_overlays_ariaHideOutside.ariaHideOutside)([ref.current]);
|
|
22
|
+
}, [state.isOpen, ref]);
|
|
23
|
+
return {
|
|
24
|
+
modalProps: overlayProps,
|
|
25
|
+
underlayProps
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function isWindowDefined() {
|
|
29
|
+
return typeof window !== "undefined";
|
|
30
|
+
}
|
|
31
|
+
function useWindowWidth() {
|
|
32
|
+
const [width, setWidth] = react.useState(isWindowDefined() ? window.innerWidth : null);
|
|
33
|
+
react.useEffect(() => {
|
|
34
|
+
const handleResize = () => {
|
|
35
|
+
setWidth(window.innerWidth);
|
|
36
|
+
};
|
|
37
|
+
window.addEventListener("resize", handleResize);
|
|
38
|
+
return () => {
|
|
39
|
+
window.removeEventListener("resize", handleResize);
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
return width;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
exports.useCharcoalModalOverlay = useCharcoalModalOverlay;
|
|
47
|
+
exports.useWindowWidth = useWindowWidth;
|
|
48
|
+
//# sourceMappingURL=useCustomModalOverlay.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomModalOverlay.cjs","names":["React","ariaHideOutside","useOverlayFocusContain","usePreventScroll","AriaModalOverlayProps","ModalOverlayAria","useOverlay","CharcoalModalOverlayProps","overflowClip","useCharcoalModalOverlay","props","state","isOpen","onClose","ref","RefObject","HTMLElement","overlayProps","underlayProps","shouldCloseOnInteractOutside","document","body","useEffect","current","modalProps","isWindowDefined","window","useWindowWidth","width","setWidth","useState","innerWidth","handleResize","addEventListener","removeEventListener"],"sources":["../../../src/components/Modal/useCustomModalOverlay.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside'\nimport { useOverlayFocusContain } from 'react-aria/private/overlays/Overlay'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\n\nimport {\n AriaModalOverlayProps,\n ModalOverlayAria,\n} from 'react-aria/useModalOverlay'\nimport { useOverlay } from 'react-aria/useOverlay'\n\n/**\n * We want to enable scrolling on the modal background,\n * but `useModalOverlay` (specifically, `useOverlay` within it) detects pointer events on the scrollbar.\n * Therefore, to prevent this issue, we need to override `shouldCloseOnInteractOutside` in `useModalOverlay`.\n */\nexport type CharcoalModalOverlayProps = AriaModalOverlayProps & {\n overflowClip?: boolean\n}\nexport function useCharcoalModalOverlay(\n props: CharcoalModalOverlayProps,\n state: { isOpen: boolean; onClose: () => void },\n ref: React.RefObject<HTMLElement | null>,\n): ModalOverlayAria {\n const { overlayProps, underlayProps } = useOverlay(\n {\n ...props,\n isOpen: state.isOpen,\n onClose: state.onClose,\n shouldCloseOnInteractOutside: () => false,\n },\n ref,\n )\n\n usePreventScroll(\n typeof document !== 'undefined' ? document.body : null,\n state.isOpen,\n props.overflowClip,\n )\n\n useOverlayFocusContain()\n\n React.useEffect(() => {\n if (state.isOpen && ref.current) {\n return ariaHideOutside([ref.current])\n }\n }, [state.isOpen, ref])\n\n return {\n modalProps: overlayProps,\n underlayProps,\n }\n}\n\nfunction isWindowDefined() {\n return typeof window !== 'undefined'\n}\n\nexport function useWindowWidth() {\n const [width, setWidth] = React.useState(\n isWindowDefined() ? window.innerWidth : null,\n )\n React.useEffect(() => {\n const handleResize = () => {\n setWidth(window.innerWidth)\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n })\n return width\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgBS,wBACdC,OACAC,OACAG,KACkB;CAClB,MAAM,EAAEG,cAAcC,wDACpB;EACE,GAAGR;EACHE,QAAQD,MAAMC;EACdC,SAASF,MAAME;EACfM,oCAAoC;EACrC,EACDL,IACD;CAEDX,0CACE,OAAOiB,aAAa,cAAcA,SAASC,OAAO,MAClDV,MAAMC,QACNF,MAAMF,aACP;CAEDN,iEAAwB;CAExBF,MAAMsB,gBAAgB;EACpB,IAAIX,MAAMC,UAAUE,IAAIS,SACtB,wEAAuB,CAACT,IAAIS,QAAQ,CAAC;IAEtC,CAACZ,MAAMC,QAAQE,IAAI,CAAC;CAEvB,OAAO;EACLU,YAAYP;EACZC;EACD;;AAGH,SAASO,kBAAkB;CACzB,OAAO,OAAOC,WAAW;;AAG3B,SAAgBC,iBAAiB;CAC/B,MAAM,CAACC,OAAOC,YAAY7B,MAAM8B,SAC9BL,iBAAiB,GAAGC,OAAOK,aAAa,KACzC;CACD/B,MAAMsB,gBAAgB;EACpB,MAAMU,qBAAqB;GACzBH,SAASH,OAAOK,WAAW;;EAE7BL,OAAOO,iBAAiB,UAAUD,aAAa;EAC/C,aAAa;GACXN,OAAOQ,oBAAoB,UAAUF,aAAa;;GAEpD;CACF,OAAOJ"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { usePreventScroll } from "../DropdownSelector/Popover/usePreventScroll.js";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
import { ariaHideOutside } from "react-aria/private/overlays/ariaHideOutside";
|
|
5
|
+
import { useOverlayFocusContain } from "react-aria/private/overlays/Overlay";
|
|
6
|
+
import { useOverlay } from "react-aria/useOverlay";
|
|
7
|
+
|
|
8
|
+
//#region src/components/Modal/useCustomModalOverlay.tsx
|
|
9
|
+
function useCharcoalModalOverlay(props, state, ref) {
|
|
10
|
+
const { overlayProps, underlayProps } = useOverlay({
|
|
11
|
+
...props,
|
|
12
|
+
isOpen: state.isOpen,
|
|
13
|
+
onClose: state.onClose,
|
|
14
|
+
shouldCloseOnInteractOutside: () => false
|
|
15
|
+
}, ref);
|
|
16
|
+
usePreventScroll(typeof document !== "undefined" ? document.body : null, state.isOpen, props.overflowClip);
|
|
17
|
+
useOverlayFocusContain();
|
|
18
|
+
React$1.useEffect(() => {
|
|
19
|
+
if (state.isOpen && ref.current) return ariaHideOutside([ref.current]);
|
|
20
|
+
}, [state.isOpen, ref]);
|
|
21
|
+
return {
|
|
22
|
+
modalProps: overlayProps,
|
|
23
|
+
underlayProps
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function isWindowDefined() {
|
|
27
|
+
return typeof window !== "undefined";
|
|
28
|
+
}
|
|
29
|
+
function useWindowWidth() {
|
|
30
|
+
const [width, setWidth] = React$1.useState(isWindowDefined() ? window.innerWidth : null);
|
|
31
|
+
React$1.useEffect(() => {
|
|
32
|
+
const handleResize = () => {
|
|
33
|
+
setWidth(window.innerWidth);
|
|
34
|
+
};
|
|
35
|
+
window.addEventListener("resize", handleResize);
|
|
36
|
+
return () => {
|
|
37
|
+
window.removeEventListener("resize", handleResize);
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
return width;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { useCharcoalModalOverlay, useWindowWidth };
|
|
45
|
+
//# sourceMappingURL=useCustomModalOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomModalOverlay.js","names":["React","ariaHideOutside","useOverlayFocusContain","usePreventScroll","AriaModalOverlayProps","ModalOverlayAria","useOverlay","CharcoalModalOverlayProps","overflowClip","useCharcoalModalOverlay","props","state","isOpen","onClose","ref","RefObject","HTMLElement","overlayProps","underlayProps","shouldCloseOnInteractOutside","document","body","useEffect","current","modalProps","isWindowDefined","window","useWindowWidth","width","setWidth","useState","innerWidth","handleResize","addEventListener","removeEventListener"],"sources":["../../../src/components/Modal/useCustomModalOverlay.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside'\nimport { useOverlayFocusContain } from 'react-aria/private/overlays/Overlay'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\n\nimport {\n AriaModalOverlayProps,\n ModalOverlayAria,\n} from 'react-aria/useModalOverlay'\nimport { useOverlay } from 'react-aria/useOverlay'\n\n/**\n * We want to enable scrolling on the modal background,\n * but `useModalOverlay` (specifically, `useOverlay` within it) detects pointer events on the scrollbar.\n * Therefore, to prevent this issue, we need to override `shouldCloseOnInteractOutside` in `useModalOverlay`.\n */\nexport type CharcoalModalOverlayProps = AriaModalOverlayProps & {\n overflowClip?: boolean\n}\nexport function useCharcoalModalOverlay(\n props: CharcoalModalOverlayProps,\n state: { isOpen: boolean; onClose: () => void },\n ref: React.RefObject<HTMLElement | null>,\n): ModalOverlayAria {\n const { overlayProps, underlayProps } = useOverlay(\n {\n ...props,\n isOpen: state.isOpen,\n onClose: state.onClose,\n shouldCloseOnInteractOutside: () => false,\n },\n ref,\n )\n\n usePreventScroll(\n typeof document !== 'undefined' ? document.body : null,\n state.isOpen,\n props.overflowClip,\n )\n\n useOverlayFocusContain()\n\n React.useEffect(() => {\n if (state.isOpen && ref.current) {\n return ariaHideOutside([ref.current])\n }\n }, [state.isOpen, ref])\n\n return {\n modalProps: overlayProps,\n underlayProps,\n }\n}\n\nfunction isWindowDefined() {\n return typeof window !== 'undefined'\n}\n\nexport function useWindowWidth() {\n const [width, setWidth] = React.useState(\n isWindowDefined() ? window.innerWidth : null,\n )\n React.useEffect(() => {\n const handleResize = () => {\n setWidth(window.innerWidth)\n }\n window.addEventListener('resize', handleResize)\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n })\n return width\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgBS,wBACdC,OACAC,OACAG,KACkB;CAClB,MAAM,EAAEG,cAAcC,kBAAkBZ,WACtC;EACE,GAAGI;EACHE,QAAQD,MAAMC;EACdC,SAASF,MAAME;EACfM,oCAAoC;EACrC,EACDL,IACD;CAEDX,iBACE,OAAOiB,aAAa,cAAcA,SAASC,OAAO,MAClDV,MAAMC,QACNF,MAAMF,aACP;CAEDN,wBAAwB;CAExBF,QAAMsB,gBAAgB;EACpB,IAAIX,MAAMC,UAAUE,IAAIS,SACtB,OAAOtB,gBAAgB,CAACa,IAAIS,QAAQ,CAAC;IAEtC,CAACZ,MAAMC,QAAQE,IAAI,CAAC;CAEvB,OAAO;EACLU,YAAYP;EACZC;EACD;;AAGH,SAASO,kBAAkB;CACzB,OAAO,OAAOC,WAAW;;AAG3B,SAAgBC,iBAAiB;CAC/B,MAAM,CAACC,OAAOC,YAAY7B,QAAM8B,SAC9BL,iBAAiB,GAAGC,OAAOK,aAAa,KACzC;CACD/B,QAAMsB,gBAAgB;EACpB,MAAMU,qBAAqB;GACzBH,SAASH,OAAOK,WAAW;;EAE7BL,OAAOO,iBAAiB,UAAUD,aAAa;EAC/C,aAAa;GACXN,OAAOQ,oBAAoB,UAAUF,aAAa;;GAEpD;CACF,OAAOJ"}
|