@charcoal-ui/react 6.0.0-rc.7 → 6.0.0-rc.9
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 +1536 -1530
- package/dist/index.js +31 -12
- package/dist/layered.css +1508 -1502
- package/dist/layered.css.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/css-shorthand-safety.test.ts +150 -0
- package/src/components/Button/__snapshots__/index.css.snap +8 -3
- package/src/components/Button/index.css +8 -3
- package/src/components/LoadingSpinner/__snapshots__/index.css.snap +1 -2
- package/src/components/LoadingSpinner/index.css +1 -2
- package/src/components/Pagination/__snapshots__/index.css.snap +3 -1
- package/src/components/Pagination/index.css +3 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/DropdownSelector/MenuList/MenuListContext.ts
|
|
5
|
+
const MenuListContext = createContext({
|
|
6
|
+
root: void 0,
|
|
7
|
+
value: "",
|
|
8
|
+
propsArray: [],
|
|
9
|
+
setValue: (_v) => {}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { MenuListContext };
|
|
14
|
+
//# sourceMappingURL=MenuListContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuListContext.js","names":["RefObject","createContext","DropdownMenuItemProps","MenuListContextType","root","HTMLUListElement","value","propsArray","setValue","v","MenuListContext","undefined","_v"],"sources":["../../../../src/components/DropdownSelector/MenuList/MenuListContext.ts"],"sourcesContent":["import { RefObject, createContext } from 'react'\nimport { DropdownMenuItemProps } from '../DropdownMenuItem'\n\ntype MenuListContextType = {\n root?: RefObject<HTMLUListElement | null>\n value?: string\n propsArray?: DropdownMenuItemProps[]\n setValue: (v: string) => void\n}\n\nexport const MenuListContext = createContext<MenuListContextType>({\n root: undefined,\n value: '',\n propsArray: [],\n setValue: (_v: string) => {\n // empty\n },\n})\n"],"mappings":";;;;AAUA,MAAaU,kBAAkBT,cAAmC;CAChEG,MAAMO;CACNL,OAAO;CACPC,YAAY,EAAE;CACdC,WAAWI,OAAe;CAG3B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
require('./index.cjs');
|
|
4
|
+
const require_MenuListContext = require('./MenuListContext.cjs');
|
|
5
|
+
const require_getValuesRecursive = require('./internals/getValuesRecursive.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
|
|
9
|
+
//#region src/components/DropdownSelector/MenuList/index.tsx
|
|
10
|
+
function MenuList(props) {
|
|
11
|
+
const root = (0, react.useRef)(null);
|
|
12
|
+
const propsArray = (0, react.useMemo)(() => require_getValuesRecursive.getValuesRecursive(props.children), [props.children]);
|
|
13
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
14
|
+
className: "charcoal-menu-list",
|
|
15
|
+
ref: root,
|
|
16
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuListContext.MenuListContext.Provider, {
|
|
17
|
+
value: {
|
|
18
|
+
value: props.value ?? "",
|
|
19
|
+
root,
|
|
20
|
+
propsArray,
|
|
21
|
+
setValue: (v) => {
|
|
22
|
+
props.onChange?.(v);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
children: props.children
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
31
|
+
exports.default = MenuList;
|
|
32
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["useMemo","useRef","MenuListContext","getValuesRecursive","MenuItem","Divider","MenuItemGroup","MenuListChild","React","ReactElement","MenuListChildren","MenuListProps","children","value","onChange","v","MenuList","props","root","propsArray","setValue"],"sources":["../../../../src/components/DropdownSelector/MenuList/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { useMemo, useRef } from 'react'\nimport { MenuListContext } from './MenuListContext'\nimport { getValuesRecursive } from './internals/getValuesRecursive'\nimport MenuItem from '../MenuItem'\nimport { Divider } from '../Divider'\nimport MenuItemGroup from '../MenuItemGroup'\n\ntype MenuListChild = React.ReactElement<\n typeof MenuItem | typeof MenuItemGroup | typeof Divider\n>\n\nexport type MenuListChildren = MenuListChild | MenuListChild[]\n\nexport type MenuListProps = {\n children: MenuListChildren\n value?: string\n onChange?: (v: string) => void\n}\n\nexport default function MenuList(props: MenuListProps) {\n const root = useRef(null)\n const propsArray = useMemo(\n () => getValuesRecursive(props.children),\n [props.children],\n )\n\n return (\n <ul className=\"charcoal-menu-list\" ref={root}>\n <MenuListContext.Provider\n value={{\n value: props.value ?? '',\n root,\n propsArray,\n setValue: (v) => {\n props.onChange?.(v)\n },\n }}\n >\n {props.children}\n </MenuListContext.Provider>\n </ul>\n )\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAwBgB,SAASC,OAAsB;CACrD,MAAMC,yBAAc,KAAK;CACzB,MAAMC,sCACEhB,8CAAmBc,MAAML,SAAS,EACxC,CAACK,MAAML,SACT,CAAC;CAED,OACE,2CAAC,MAAD;EAAI,WAAU;EAAqB,KAAKM;YACtC,2CAAC,wCAAgB,UAAjB;GACE,OAAO;IACLL,OAAOI,MAAMJ,SAAS;IACtBK;IACAC;IACAC,WAAWL,MAAM;KACfE,MAAMH,WAAWC,EAAE;;IAEtB;aAEAE,MAAML;GACiB;EACvB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import { MenuListContext } from "./MenuListContext.js";
|
|
4
|
+
import { getValuesRecursive } from "./internals/getValuesRecursive.js";
|
|
5
|
+
import { useMemo, useRef } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/components/DropdownSelector/MenuList/index.tsx
|
|
9
|
+
function MenuList(props) {
|
|
10
|
+
const root = useRef(null);
|
|
11
|
+
const propsArray = useMemo(() => getValuesRecursive(props.children), [props.children]);
|
|
12
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
13
|
+
className: "charcoal-menu-list",
|
|
14
|
+
ref: root,
|
|
15
|
+
children: /* @__PURE__ */ jsx(MenuListContext.Provider, {
|
|
16
|
+
value: {
|
|
17
|
+
value: props.value ?? "",
|
|
18
|
+
root,
|
|
19
|
+
propsArray,
|
|
20
|
+
setValue: (v) => {
|
|
21
|
+
props.onChange?.(v);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
children: props.children
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { MenuList as default };
|
|
31
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["useMemo","useRef","MenuListContext","getValuesRecursive","MenuItem","Divider","MenuItemGroup","MenuListChild","React","ReactElement","MenuListChildren","MenuListProps","children","value","onChange","v","MenuList","props","root","propsArray","setValue"],"sources":["../../../../src/components/DropdownSelector/MenuList/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { useMemo, useRef } from 'react'\nimport { MenuListContext } from './MenuListContext'\nimport { getValuesRecursive } from './internals/getValuesRecursive'\nimport MenuItem from '../MenuItem'\nimport { Divider } from '../Divider'\nimport MenuItemGroup from '../MenuItemGroup'\n\ntype MenuListChild = React.ReactElement<\n typeof MenuItem | typeof MenuItemGroup | typeof Divider\n>\n\nexport type MenuListChildren = MenuListChild | MenuListChild[]\n\nexport type MenuListProps = {\n children: MenuListChildren\n value?: string\n onChange?: (v: string) => void\n}\n\nexport default function MenuList(props: MenuListProps) {\n const root = useRef(null)\n const propsArray = useMemo(\n () => getValuesRecursive(props.children),\n [props.children],\n )\n\n return (\n <ul className=\"charcoal-menu-list\" ref={root}>\n <MenuListContext.Provider\n value={{\n value: props.value ?? '',\n root,\n propsArray,\n setValue: (v) => {\n props.onChange?.(v)\n },\n }}\n >\n {props.children}\n </MenuListContext.Provider>\n </ul>\n )\n}\n"],"mappings":";;;;;;;;AAqBA,SAAwBgB,SAASC,OAAsB;CACrD,MAAMC,OAAOjB,OAAO,KAAK;CACzB,MAAMkB,aAAanB,cACXG,mBAAmBc,MAAML,SAAS,EACxC,CAACK,MAAML,SACT,CAAC;CAED,OACE,oBAAC,MAAD;EAAI,WAAU;EAAqB,KAAKM;YACtC,oBAAC,gBAAgB,UAAjB;GACE,OAAO;IACLL,OAAOI,MAAMJ,SAAS;IACtBK;IACAC;IACAC,WAAWL,MAAM;KACfE,MAAMH,WAAWC,EAAE;;IAEtB;aAEAE,MAAML;GACiB;EACvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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/DropdownSelector/MenuList/internals/getValuesRecursive.tsx
|
|
7
|
+
/**
|
|
8
|
+
* valueというpropsを持つ子要素の値を再起的に探索して配列にする
|
|
9
|
+
*
|
|
10
|
+
* @param children
|
|
11
|
+
* @param value
|
|
12
|
+
* @param values
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
function getValuesRecursive(children) {
|
|
16
|
+
const childArray = react.Children.toArray(children);
|
|
17
|
+
const propsArray = [];
|
|
18
|
+
for (let i = 0; i < childArray.length; i++) {
|
|
19
|
+
const child = childArray[i];
|
|
20
|
+
if (react.isValidElement(child)) {
|
|
21
|
+
const props = child.props;
|
|
22
|
+
if ("value" in props && typeof props.value === "string") propsArray.push({
|
|
23
|
+
disabled: props.disabled,
|
|
24
|
+
value: props.value
|
|
25
|
+
});
|
|
26
|
+
if ("children" in props && props.children) propsArray.push(...getValuesRecursive(props.children));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return propsArray;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.getValuesRecursive = getValuesRecursive;
|
|
34
|
+
//# sourceMappingURL=getValuesRecursive.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getValuesRecursive.cjs","names":["React","MenuItem","MenuListChildren","MenuItemGroup","DropdownMenuItemProps","getValuesRecursive","children","childArray","Children","toArray","propsArray","i","length","child","isValidElement","props","value","disabled","ReactElement","push"],"sources":["../../../../../src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx"],"sourcesContent":["import * as React from 'react'\nimport MenuItem from '../../MenuItem'\nimport { MenuListChildren } from '..'\nimport MenuItemGroup from '../../MenuItemGroup'\nimport { DropdownMenuItemProps } from '../../DropdownMenuItem'\n\n/**\n * valueというpropsを持つ子要素の値を再起的に探索して配列にする\n *\n * @param children\n * @param value\n * @param values\n * @returns\n */\nexport function getValuesRecursive(children: MenuListChildren) {\n const childArray = React.Children.toArray(children)\n const propsArray: DropdownMenuItemProps[] = []\n for (let i = 0; i < childArray.length; i++) {\n const child = childArray[i]\n if (React.isValidElement(child)) {\n const props = child.props as {\n value?: string\n disabled?: boolean\n children?: React.ReactElement<typeof MenuItem | typeof MenuItemGroup>[]\n }\n if ('value' in props && typeof props.value === 'string') {\n propsArray.push({\n disabled: props.disabled,\n value: props.value,\n })\n }\n if ('children' in props && props.children) {\n propsArray.push(...getValuesRecursive(props.children))\n }\n }\n }\n return propsArray\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,SAAgBK,mBAAmBC,UAA4B;CAC7D,MAAMC,aAAaP,MAAMQ,SAASC,QAAQH,SAAS;CACnD,MAAMI,aAAsC,EAAE;CAC9C,KAAK,IAAIC,IAAI,GAAGA,IAAIJ,WAAWK,QAAQD,KAAK;EAC1C,MAAME,QAAQN,WAAWI;EACzB,IAAIX,MAAMc,eAAeD,MAAM,EAAE;GAC/B,MAAME,QAAQF,MAAME;GAKpB,IAAI,WAAWA,SAAS,OAAOA,MAAMC,UAAU,UAC7CN,WAAWS,KAAK;IACdF,UAAUF,MAAME;IAChBD,OAAOD,MAAMC;IACd,CAAC;GAEJ,IAAI,cAAcD,SAASA,MAAMT,UAC/BI,WAAWS,KAAK,GAAGd,mBAAmBU,MAAMT,SAAS,CAAC;;;CAI5D,OAAOI"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx
|
|
5
|
+
/**
|
|
6
|
+
* valueというpropsを持つ子要素の値を再起的に探索して配列にする
|
|
7
|
+
*
|
|
8
|
+
* @param children
|
|
9
|
+
* @param value
|
|
10
|
+
* @param values
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
function getValuesRecursive(children) {
|
|
14
|
+
const childArray = React$1.Children.toArray(children);
|
|
15
|
+
const propsArray = [];
|
|
16
|
+
for (let i = 0; i < childArray.length; i++) {
|
|
17
|
+
const child = childArray[i];
|
|
18
|
+
if (React$1.isValidElement(child)) {
|
|
19
|
+
const props = child.props;
|
|
20
|
+
if ("value" in props && typeof props.value === "string") propsArray.push({
|
|
21
|
+
disabled: props.disabled,
|
|
22
|
+
value: props.value
|
|
23
|
+
});
|
|
24
|
+
if ("children" in props && props.children) propsArray.push(...getValuesRecursive(props.children));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return propsArray;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
31
|
+
export { getValuesRecursive };
|
|
32
|
+
//# sourceMappingURL=getValuesRecursive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getValuesRecursive.js","names":["React","MenuItem","MenuListChildren","MenuItemGroup","DropdownMenuItemProps","getValuesRecursive","children","childArray","Children","toArray","propsArray","i","length","child","isValidElement","props","value","disabled","ReactElement","push"],"sources":["../../../../../src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx"],"sourcesContent":["import * as React from 'react'\nimport MenuItem from '../../MenuItem'\nimport { MenuListChildren } from '..'\nimport MenuItemGroup from '../../MenuItemGroup'\nimport { DropdownMenuItemProps } from '../../DropdownMenuItem'\n\n/**\n * valueというpropsを持つ子要素の値を再起的に探索して配列にする\n *\n * @param children\n * @param value\n * @param values\n * @returns\n */\nexport function getValuesRecursive(children: MenuListChildren) {\n const childArray = React.Children.toArray(children)\n const propsArray: DropdownMenuItemProps[] = []\n for (let i = 0; i < childArray.length; i++) {\n const child = childArray[i]\n if (React.isValidElement(child)) {\n const props = child.props as {\n value?: string\n disabled?: boolean\n children?: React.ReactElement<typeof MenuItem | typeof MenuItemGroup>[]\n }\n if ('value' in props && typeof props.value === 'string') {\n propsArray.push({\n disabled: props.disabled,\n value: props.value,\n })\n }\n if ('children' in props && props.children) {\n propsArray.push(...getValuesRecursive(props.children))\n }\n }\n }\n return propsArray\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgBK,mBAAmBC,UAA4B;CAC7D,MAAMC,aAAaP,QAAMQ,SAASC,QAAQH,SAAS;CACnD,MAAMI,aAAsC,EAAE;CAC9C,KAAK,IAAIC,IAAI,GAAGA,IAAIJ,WAAWK,QAAQD,KAAK;EAC1C,MAAME,QAAQN,WAAWI;EACzB,IAAIX,QAAMc,eAAeD,MAAM,EAAE;GAC/B,MAAME,QAAQF,MAAME;GAKpB,IAAI,WAAWA,SAAS,OAAOA,MAAMC,UAAU,UAC7CN,WAAWS,KAAK;IACdF,UAAUF,MAAME;IAChBD,OAAOD,MAAMC;IACd,CAAC;GAEJ,IAAI,cAAcD,SAASA,MAAMT,UAC/BI,WAAWS,KAAK,GAAGd,mBAAmBU,MAAMT,SAAS,CAAC;;;CAI5D,OAAOI"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_ModalBackgroundContext = require('../../Modal/ModalBackgroundContext.cjs');
|
|
4
|
+
const require_usePreventScroll = require('./usePreventScroll.cjs');
|
|
5
|
+
require('./index.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
let react_aria_Overlay = require("react-aria/Overlay");
|
|
9
|
+
let react_aria_usePopover = require("react-aria/usePopover");
|
|
10
|
+
|
|
11
|
+
//#region src/components/DropdownSelector/Popover/index.tsx
|
|
12
|
+
const _empty = () => null;
|
|
13
|
+
/**
|
|
14
|
+
* 画面の全面に動的に開くことができるコンテナ要素
|
|
15
|
+
* 外の要素をクリックしたり、内部からフォーカスを移動した場合に自動的に閉じる
|
|
16
|
+
*
|
|
17
|
+
* triggerRefの付近に画面内に収まるように表示される
|
|
18
|
+
*/
|
|
19
|
+
function Popover(props) {
|
|
20
|
+
const defaultPopoverRef = (0, react.useRef)(null);
|
|
21
|
+
const finalPopoverRef = props.popoverRef === void 0 ? defaultPopoverRef : props.popoverRef;
|
|
22
|
+
const { popoverProps, underlayProps } = (0, react_aria_usePopover.usePopover)({
|
|
23
|
+
triggerRef: props.triggerRef,
|
|
24
|
+
popoverRef: finalPopoverRef,
|
|
25
|
+
containerPadding: 16
|
|
26
|
+
}, {
|
|
27
|
+
close: props.onClose,
|
|
28
|
+
isOpen: props.isOpen,
|
|
29
|
+
open: _empty,
|
|
30
|
+
setOpen: _empty,
|
|
31
|
+
toggle: _empty
|
|
32
|
+
});
|
|
33
|
+
require_usePreventScroll.usePreventScroll((0, react.useContext)(require_ModalBackgroundContext.ModalBackgroundContext), props.isOpen);
|
|
34
|
+
if (!props.isOpen) return null;
|
|
35
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_aria_Overlay.Overlay, {
|
|
36
|
+
portalContainer: document.body,
|
|
37
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
38
|
+
...underlayProps,
|
|
39
|
+
...props.inertWorkaround ? {
|
|
40
|
+
"data-react-aria-top-layer": true,
|
|
41
|
+
onClick: props.onClose
|
|
42
|
+
} : {},
|
|
43
|
+
style: {
|
|
44
|
+
position: "fixed",
|
|
45
|
+
zIndex: typeof popoverProps.style?.zIndex === "number" ? popoverProps.style.zIndex - 1 : 99999,
|
|
46
|
+
inset: 0
|
|
47
|
+
}
|
|
48
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49
|
+
...popoverProps,
|
|
50
|
+
ref: finalPopoverRef,
|
|
51
|
+
className: "charcoal-popover",
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_Overlay.DismissButton, { onDismiss: () => props.onClose() }),
|
|
54
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
55
|
+
tabIndex: 0,
|
|
56
|
+
onFocus: props.onClose
|
|
57
|
+
}),
|
|
58
|
+
props.children,
|
|
59
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
60
|
+
tabIndex: 0,
|
|
61
|
+
onFocus: props.onClose
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_Overlay.DismissButton, { onDismiss: () => props.onClose() })
|
|
64
|
+
]
|
|
65
|
+
})]
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.default = Popover;
|
|
71
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["RefObject","useContext","useRef","ReactNode","ModalBackgroundContext","usePreventScroll","DismissButton","Overlay","usePopover","PopoverProps","isOpen","onClose","children","triggerRef","Element","popoverRef","HTMLDivElement","inertWorkaround","_empty","Popover","props","defaultPopoverRef","finalPopoverRef","undefined","popoverProps","underlayProps","containerPadding","close","open","setOpen","toggle","modalBackground","document","body","onClick","position","zIndex","style","inset"],"sources":["../../../../src/components/DropdownSelector/Popover/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { RefObject, useContext, useRef, ReactNode } from 'react'\nimport { ModalBackgroundContext } from '../../Modal/ModalBackgroundContext'\nimport { usePreventScroll } from './usePreventScroll'\nimport { DismissButton, Overlay } from 'react-aria/Overlay'\nimport { usePopover } from 'react-aria/usePopover'\n\nexport type PopoverProps = {\n isOpen: boolean\n onClose: () => void\n children: ReactNode\n triggerRef: RefObject<Element | null>\n popoverRef?: RefObject<HTMLDivElement | null>\n /**\n * A tmp workaround for react-aria above 3.27.3 setting overlay element to inert and causing background to be clickable.\n * This may become default at next major.\n * https://github.com/adobe/react-spectrum/pull/8796\n * https://github.com/adobe/react-spectrum/issues/8784\n *\n * @default false\n */\n inertWorkaround?: boolean\n}\n\nconst _empty = () => null\n\n/**\n * 画面の全面に動的に開くことができるコンテナ要素\n * 外の要素をクリックしたり、内部からフォーカスを移動した場合に自動的に閉じる\n *\n * triggerRefの付近に画面内に収まるように表示される\n */\nexport default function Popover(props: PopoverProps) {\n const defaultPopoverRef = useRef<HTMLDivElement>(null)\n const finalPopoverRef =\n props.popoverRef === undefined ? defaultPopoverRef : props.popoverRef\n const { popoverProps, underlayProps } = usePopover(\n {\n triggerRef: props.triggerRef,\n popoverRef: finalPopoverRef,\n containerPadding: 16,\n },\n {\n close: props.onClose,\n isOpen: props.isOpen,\n // never used\n open: _empty,\n setOpen: _empty,\n toggle: _empty,\n },\n )\n\n const modalBackground = useContext(ModalBackgroundContext)\n usePreventScroll(modalBackground, props.isOpen)\n\n if (!props.isOpen) return null\n\n return (\n <Overlay portalContainer={document.body}>\n <div\n {...underlayProps}\n // https://github.com/adobe/react-spectrum/issues/8784#issuecomment-3234771154\n {...(props.inertWorkaround\n ? { 'data-react-aria-top-layer': true, onClick: props.onClose }\n : {})}\n style={{\n position: 'fixed',\n zIndex:\n typeof popoverProps.style?.zIndex === 'number'\n ? popoverProps.style.zIndex - 1\n : 99999,\n inset: 0,\n }}\n />\n {/* @ts-expect-error react types we use does not support react 19 types yet */}\n <div {...popoverProps} ref={finalPopoverRef} className=\"charcoal-popover\">\n <DismissButton onDismiss={() => props.onClose()} />\n <div tabIndex={0} onFocus={props.onClose} />\n {props.children}\n <div tabIndex={0} onFocus={props.onClose} />\n <DismissButton onDismiss={() => props.onClose()} />\n </div>\n </Overlay>\n )\n}\n"],"mappings":";;;;;;;;;;;AAyBA,MAAMkB,eAAe;;;;;;;AAQrB,SAAwBC,QAAQC,OAAqB;CACnD,MAAMC,sCAA2C,KAAK;CACtD,MAAMC,kBACJF,MAAML,eAAeQ,SAAYF,oBAAoBD,MAAML;CAC7D,MAAM,EAAES,cAAcC,wDACpB;EACEZ,YAAYO,MAAMP;EAClBE,YAAYO;EACZI,kBAAkB;EACnB,EACD;EACEC,OAAOP,MAAMT;EACbD,QAAQU,MAAMV;EAEdkB,MAAMV;EACNW,SAASX;EACTY,QAAQZ;EAEZ,CAAC;CAGDb,gEADmCD,sDACH,EAAEgB,MAAMV,OAAO;CAE/C,IAAI,CAACU,MAAMV,QAAQ,OAAO;CAE1B,OACE,4CAAC,4BAAD;EAAS,iBAAiBsB,SAASC;YAAnC,CACE,2CAAC,OAAD;GACE,GAAIR;GAEJ,GAAKL,MAAMH,kBACP;IAAE,6BAA6B;IAAMiB,SAASd,MAAMT;IAAS,GAC7D,EAAG;GACP,OAAO;IACLwB,UAAU;IACVC,QACE,OAAOZ,aAAaa,OAAOD,WAAW,WAClCZ,aAAaa,MAAMD,SAAS,IAC5B;IACNE,OAAO;IACR;GAAC,GAGJ,4CAAC,OAAD;GAAK,GAAId;GAAc,KAAKF;GAAiB,WAAU;aAAvD;IACE,2CAAC,kCAAD,EAAe,iBAAiBF,MAAMT,SAAS,EAAC;IAChD,2CAAC,OAAD;KAAK,UAAU;KAAG,SAASS,MAAMT;KAAQ;IACxCS,MAAMR;IACP,2CAAC,OAAD;KAAK,UAAU;KAAG,SAASQ,MAAMT;KAAQ;IACzC,2CAAC,kCAAD,EAAe,iBAAiBS,MAAMT,SAAS,EAAC;IAC7C;KACG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { ModalBackgroundContext } from "../../Modal/ModalBackgroundContext.js";
|
|
3
|
+
import { usePreventScroll } from "./usePreventScroll.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import { useContext, useRef } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { DismissButton, Overlay } from "react-aria/Overlay";
|
|
8
|
+
import { usePopover } from "react-aria/usePopover";
|
|
9
|
+
|
|
10
|
+
//#region src/components/DropdownSelector/Popover/index.tsx
|
|
11
|
+
const _empty = () => null;
|
|
12
|
+
/**
|
|
13
|
+
* 画面の全面に動的に開くことができるコンテナ要素
|
|
14
|
+
* 外の要素をクリックしたり、内部からフォーカスを移動した場合に自動的に閉じる
|
|
15
|
+
*
|
|
16
|
+
* triggerRefの付近に画面内に収まるように表示される
|
|
17
|
+
*/
|
|
18
|
+
function Popover(props) {
|
|
19
|
+
const defaultPopoverRef = useRef(null);
|
|
20
|
+
const finalPopoverRef = props.popoverRef === void 0 ? defaultPopoverRef : props.popoverRef;
|
|
21
|
+
const { popoverProps, underlayProps } = usePopover({
|
|
22
|
+
triggerRef: props.triggerRef,
|
|
23
|
+
popoverRef: finalPopoverRef,
|
|
24
|
+
containerPadding: 16
|
|
25
|
+
}, {
|
|
26
|
+
close: props.onClose,
|
|
27
|
+
isOpen: props.isOpen,
|
|
28
|
+
open: _empty,
|
|
29
|
+
setOpen: _empty,
|
|
30
|
+
toggle: _empty
|
|
31
|
+
});
|
|
32
|
+
usePreventScroll(useContext(ModalBackgroundContext), props.isOpen);
|
|
33
|
+
if (!props.isOpen) return null;
|
|
34
|
+
return /* @__PURE__ */ jsxs(Overlay, {
|
|
35
|
+
portalContainer: document.body,
|
|
36
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
37
|
+
...underlayProps,
|
|
38
|
+
...props.inertWorkaround ? {
|
|
39
|
+
"data-react-aria-top-layer": true,
|
|
40
|
+
onClick: props.onClose
|
|
41
|
+
} : {},
|
|
42
|
+
style: {
|
|
43
|
+
position: "fixed",
|
|
44
|
+
zIndex: typeof popoverProps.style?.zIndex === "number" ? popoverProps.style.zIndex - 1 : 99999,
|
|
45
|
+
inset: 0
|
|
46
|
+
}
|
|
47
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
48
|
+
...popoverProps,
|
|
49
|
+
ref: finalPopoverRef,
|
|
50
|
+
className: "charcoal-popover",
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsx(DismissButton, { onDismiss: () => props.onClose() }),
|
|
53
|
+
/* @__PURE__ */ jsx("div", {
|
|
54
|
+
tabIndex: 0,
|
|
55
|
+
onFocus: props.onClose
|
|
56
|
+
}),
|
|
57
|
+
props.children,
|
|
58
|
+
/* @__PURE__ */ jsx("div", {
|
|
59
|
+
tabIndex: 0,
|
|
60
|
+
onFocus: props.onClose
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ jsx(DismissButton, { onDismiss: () => props.onClose() })
|
|
63
|
+
]
|
|
64
|
+
})]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { Popover as default };
|
|
70
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["RefObject","useContext","useRef","ReactNode","ModalBackgroundContext","usePreventScroll","DismissButton","Overlay","usePopover","PopoverProps","isOpen","onClose","children","triggerRef","Element","popoverRef","HTMLDivElement","inertWorkaround","_empty","Popover","props","defaultPopoverRef","finalPopoverRef","undefined","popoverProps","underlayProps","containerPadding","close","open","setOpen","toggle","modalBackground","document","body","onClick","position","zIndex","style","inset"],"sources":["../../../../src/components/DropdownSelector/Popover/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { RefObject, useContext, useRef, ReactNode } from 'react'\nimport { ModalBackgroundContext } from '../../Modal/ModalBackgroundContext'\nimport { usePreventScroll } from './usePreventScroll'\nimport { DismissButton, Overlay } from 'react-aria/Overlay'\nimport { usePopover } from 'react-aria/usePopover'\n\nexport type PopoverProps = {\n isOpen: boolean\n onClose: () => void\n children: ReactNode\n triggerRef: RefObject<Element | null>\n popoverRef?: RefObject<HTMLDivElement | null>\n /**\n * A tmp workaround for react-aria above 3.27.3 setting overlay element to inert and causing background to be clickable.\n * This may become default at next major.\n * https://github.com/adobe/react-spectrum/pull/8796\n * https://github.com/adobe/react-spectrum/issues/8784\n *\n * @default false\n */\n inertWorkaround?: boolean\n}\n\nconst _empty = () => null\n\n/**\n * 画面の全面に動的に開くことができるコンテナ要素\n * 外の要素をクリックしたり、内部からフォーカスを移動した場合に自動的に閉じる\n *\n * triggerRefの付近に画面内に収まるように表示される\n */\nexport default function Popover(props: PopoverProps) {\n const defaultPopoverRef = useRef<HTMLDivElement>(null)\n const finalPopoverRef =\n props.popoverRef === undefined ? defaultPopoverRef : props.popoverRef\n const { popoverProps, underlayProps } = usePopover(\n {\n triggerRef: props.triggerRef,\n popoverRef: finalPopoverRef,\n containerPadding: 16,\n },\n {\n close: props.onClose,\n isOpen: props.isOpen,\n // never used\n open: _empty,\n setOpen: _empty,\n toggle: _empty,\n },\n )\n\n const modalBackground = useContext(ModalBackgroundContext)\n usePreventScroll(modalBackground, props.isOpen)\n\n if (!props.isOpen) return null\n\n return (\n <Overlay portalContainer={document.body}>\n <div\n {...underlayProps}\n // https://github.com/adobe/react-spectrum/issues/8784#issuecomment-3234771154\n {...(props.inertWorkaround\n ? { 'data-react-aria-top-layer': true, onClick: props.onClose }\n : {})}\n style={{\n position: 'fixed',\n zIndex:\n typeof popoverProps.style?.zIndex === 'number'\n ? popoverProps.style.zIndex - 1\n : 99999,\n inset: 0,\n }}\n />\n {/* @ts-expect-error react types we use does not support react 19 types yet */}\n <div {...popoverProps} ref={finalPopoverRef} className=\"charcoal-popover\">\n <DismissButton onDismiss={() => props.onClose()} />\n <div tabIndex={0} onFocus={props.onClose} />\n {props.children}\n <div tabIndex={0} onFocus={props.onClose} />\n <DismissButton onDismiss={() => props.onClose()} />\n </div>\n </Overlay>\n )\n}\n"],"mappings":";;;;;;;;;;AAyBA,MAAMkB,eAAe;;;;;;;AAQrB,SAAwBC,QAAQC,OAAqB;CACnD,MAAMC,oBAAoBnB,OAAuB,KAAK;CACtD,MAAMoB,kBACJF,MAAML,eAAeQ,SAAYF,oBAAoBD,MAAML;CAC7D,MAAM,EAAES,cAAcC,kBAAkBjB,WACtC;EACEK,YAAYO,MAAMP;EAClBE,YAAYO;EACZI,kBAAkB;EACnB,EACD;EACEC,OAAOP,MAAMT;EACbD,QAAQU,MAAMV;EAEdkB,MAAMV;EACNW,SAASX;EACTY,QAAQZ;EAEZ,CAAC;CAGDb,iBADwBJ,WAAWG,uBACH,EAAEgB,MAAMV,OAAO;CAE/C,IAAI,CAACU,MAAMV,QAAQ,OAAO;CAE1B,OACE,qBAAC,SAAD;EAAS,iBAAiBsB,SAASC;YAAnC,CACE,oBAAC,OAAD;GACE,GAAIR;GAEJ,GAAKL,MAAMH,kBACP;IAAE,6BAA6B;IAAMiB,SAASd,MAAMT;IAAS,GAC7D,EAAG;GACP,OAAO;IACLwB,UAAU;IACVC,QACE,OAAOZ,aAAaa,OAAOD,WAAW,WAClCZ,aAAaa,MAAMD,SAAS,IAC5B;IACNE,OAAO;IACR;GAAC,GAGJ,qBAAC,OAAD;GAAK,GAAId;GAAc,KAAKF;GAAiB,WAAU;aAAvD;IACE,oBAAC,eAAD,EAAe,iBAAiBF,MAAMT,SAAS,EAAC;IAChD,oBAAC,OAAD;KAAK,UAAU;KAAG,SAASS,MAAMT;KAAQ;IACxCS,MAAMR;IACP,oBAAC,OAAD;KAAK,UAAU;KAAG,SAASQ,MAAMT;KAAQ;IACzC,oBAAC,eAAD,EAAe,iBAAiBS,MAAMT,SAAS,EAAC;IAC7C;KACG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
let react = require("react");
|
|
4
|
+
|
|
5
|
+
//#region src/components/DropdownSelector/Popover/usePreventScroll.tsx
|
|
6
|
+
function usePreventScroll(element, isOpen, useClip = false) {
|
|
7
|
+
(0, react.useEffect)(() => {
|
|
8
|
+
if (isOpen && element) {
|
|
9
|
+
const defaultPaddingRight = element.style.paddingRight;
|
|
10
|
+
const defaultOverflow = element.style.overflow;
|
|
11
|
+
element.style.paddingRight = `${window.innerWidth - element.clientWidth}px`;
|
|
12
|
+
element.style.overflow = useClip ? "clip" : "hidden";
|
|
13
|
+
return () => {
|
|
14
|
+
element.style.paddingRight = defaultPaddingRight;
|
|
15
|
+
element.style.overflow = defaultOverflow;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}, [
|
|
19
|
+
element,
|
|
20
|
+
isOpen,
|
|
21
|
+
useClip
|
|
22
|
+
]);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.usePreventScroll = usePreventScroll;
|
|
27
|
+
//# sourceMappingURL=usePreventScroll.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreventScroll.cjs","names":["useEffect","usePreventScroll","element","HTMLElement","isOpen","useClip","defaultPaddingRight","style","paddingRight","defaultOverflow","overflow","window","innerWidth","clientWidth"],"sources":["../../../../src/components/DropdownSelector/Popover/usePreventScroll.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nexport function usePreventScroll(\n element: HTMLElement | null,\n isOpen: boolean,\n useClip = false,\n) {\n useEffect(() => {\n if (isOpen && element) {\n const defaultPaddingRight = element.style.paddingRight\n const defaultOverflow = element.style.overflow\n // eslint-disable-next-line react-compiler/react-compiler\n element.style.paddingRight = `${\n window.innerWidth - element.clientWidth\n }px`\n element.style.overflow = useClip ? 'clip' : 'hidden'\n return () => {\n element.style.paddingRight = defaultPaddingRight\n element.style.overflow = defaultOverflow\n }\n }\n }, [element, isOpen, useClip])\n}\n"],"mappings":";;;;;AAEA,SAAgBC,iBACdC,SACAE,QACAC,UAAU,OACV;CACAL,2BAAgB;EACd,IAAII,UAAUF,SAAS;GACrB,MAAMI,sBAAsBJ,QAAQK,MAAMC;GAC1C,MAAMC,kBAAkBP,QAAQK,MAAMG;GAEtCR,QAAQK,MAAMC,eAAe,GAC3BG,OAAOC,aAAaV,QAAQW,YAAW;GAEzCX,QAAQK,MAAMG,WAAWL,UAAU,SAAS;GAC5C,aAAa;IACXH,QAAQK,MAAMC,eAAeF;IAC7BJ,QAAQK,MAAMG,WAAWD;;;IAG5B;EAACP;EAASE;EAAQC;EAAQ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/DropdownSelector/Popover/usePreventScroll.tsx
|
|
5
|
+
function usePreventScroll(element, isOpen, useClip = false) {
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (isOpen && element) {
|
|
8
|
+
const defaultPaddingRight = element.style.paddingRight;
|
|
9
|
+
const defaultOverflow = element.style.overflow;
|
|
10
|
+
element.style.paddingRight = `${window.innerWidth - element.clientWidth}px`;
|
|
11
|
+
element.style.overflow = useClip ? "clip" : "hidden";
|
|
12
|
+
return () => {
|
|
13
|
+
element.style.paddingRight = defaultPaddingRight;
|
|
14
|
+
element.style.overflow = defaultOverflow;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}, [
|
|
18
|
+
element,
|
|
19
|
+
isOpen,
|
|
20
|
+
useClip
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { usePreventScroll };
|
|
26
|
+
//# sourceMappingURL=usePreventScroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreventScroll.js","names":["useEffect","usePreventScroll","element","HTMLElement","isOpen","useClip","defaultPaddingRight","style","paddingRight","defaultOverflow","overflow","window","innerWidth","clientWidth"],"sources":["../../../../src/components/DropdownSelector/Popover/usePreventScroll.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nexport function usePreventScroll(\n element: HTMLElement | null,\n isOpen: boolean,\n useClip = false,\n) {\n useEffect(() => {\n if (isOpen && element) {\n const defaultPaddingRight = element.style.paddingRight\n const defaultOverflow = element.style.overflow\n // eslint-disable-next-line react-compiler/react-compiler\n element.style.paddingRight = `${\n window.innerWidth - element.clientWidth\n }px`\n element.style.overflow = useClip ? 'clip' : 'hidden'\n return () => {\n element.style.paddingRight = defaultPaddingRight\n element.style.overflow = defaultOverflow\n }\n }\n }, [element, isOpen, useClip])\n}\n"],"mappings":";;;;AAEA,SAAgBC,iBACdC,SACAE,QACAC,UAAU,OACV;CACAL,gBAAgB;EACd,IAAII,UAAUF,SAAS;GACrB,MAAMI,sBAAsBJ,QAAQK,MAAMC;GAC1C,MAAMC,kBAAkBP,QAAQK,MAAMG;GAEtCR,QAAQK,MAAMC,eAAe,GAC3BG,OAAOC,aAAaV,QAAQW,YAAW;GAEzCX,QAAQK,MAAMG,WAAWL,UAAU,SAAS;GAC5C,aAAa;IACXH,QAAQK,MAAMC,eAAeF;IAC7BJ,QAAQK,MAAMG,WAAWD;;;IAG5B;EAACP;EAASE;EAAQC;EAAQ,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useClassNames = require('../../_lib/useClassNames.cjs');
|
|
4
|
+
const require_index = require('../Icon/index.cjs');
|
|
5
|
+
const require_index$1 = require('../FieldLabel/index2.cjs');
|
|
6
|
+
const require_index$2 = require('../TextField/AssistiveText/index2.cjs');
|
|
7
|
+
require('./index.cjs');
|
|
8
|
+
const require_DropdownPopover = require('./DropdownPopover.cjs');
|
|
9
|
+
const require_findPreviewRecursive = require('./utils/findPreviewRecursive.cjs');
|
|
10
|
+
const require_getValuesRecursive = require('./MenuList/internals/getValuesRecursive.cjs');
|
|
11
|
+
const require_index$4 = require('./MenuList/index2.cjs');
|
|
12
|
+
let react = require("react");
|
|
13
|
+
react = require_runtime.__toESM(react);
|
|
14
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
15
|
+
let react_aria_useId = require("react-aria/useId");
|
|
16
|
+
let react_aria_VisuallyHidden = require("react-aria/VisuallyHidden");
|
|
17
|
+
|
|
18
|
+
//#region src/components/DropdownSelector/index.tsx
|
|
19
|
+
function DropdownSelector({ onChange, showLabel = false, selectRef, ...props }) {
|
|
20
|
+
const triggerRef = (0, react.useRef)(null);
|
|
21
|
+
const [isOpen, setIsOpen] = (0, react.useState)(false);
|
|
22
|
+
const preview = require_findPreviewRecursive.findPreviewRecursive(props.children, props.value);
|
|
23
|
+
const isPlaceholder = (0, react.useMemo)(() => props.placeholder !== void 0 && preview === void 0, [preview, props.placeholder]);
|
|
24
|
+
const propsArray = require_getValuesRecursive.getValuesRecursive(props.children);
|
|
25
|
+
const hasMatchedValue = (0, react.useMemo)(() => propsArray.some((itemProps) => itemProps.value === props.value), [propsArray, props.value]);
|
|
26
|
+
const { visuallyHiddenProps } = (0, react_aria_VisuallyHidden.useVisuallyHidden)();
|
|
27
|
+
const handleChange = (0, react.useCallback)((e) => {
|
|
28
|
+
onChange(e.target.value);
|
|
29
|
+
}, [onChange]);
|
|
30
|
+
const labelId = (0, react_aria_useId.useId)();
|
|
31
|
+
const describedbyId = (0, react_aria_useId.useId)();
|
|
32
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
33
|
+
className: require_useClassNames.useClassNames("charcoal-dropdown-selector-root", props.className),
|
|
34
|
+
"aria-disabled": props.disabled,
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
|
|
37
|
+
id: labelId,
|
|
38
|
+
label: props.label,
|
|
39
|
+
required: props.required,
|
|
40
|
+
requiredText: props.requiredText,
|
|
41
|
+
subLabel: props.subLabel,
|
|
42
|
+
...!showLabel ? visuallyHiddenProps : {}
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
45
|
+
...visuallyHiddenProps,
|
|
46
|
+
"aria-hidden": "true",
|
|
47
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
48
|
+
name: props.name,
|
|
49
|
+
value: props.value,
|
|
50
|
+
onChange: handleChange,
|
|
51
|
+
tabIndex: -1,
|
|
52
|
+
ref: selectRef,
|
|
53
|
+
children: [!hasMatchedValue && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
54
|
+
value: props.value,
|
|
55
|
+
children: props.value
|
|
56
|
+
}), propsArray.map((itemProps) => {
|
|
57
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
58
|
+
value: itemProps.value,
|
|
59
|
+
disabled: itemProps.disabled,
|
|
60
|
+
children: itemProps.value
|
|
61
|
+
}, itemProps.value);
|
|
62
|
+
})]
|
|
63
|
+
})
|
|
64
|
+
}),
|
|
65
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
66
|
+
className: "charcoal-dropdown-selector-button",
|
|
67
|
+
"aria-labelledby": labelId,
|
|
68
|
+
"aria-invalid": props.invalid,
|
|
69
|
+
"aria-describedby": props.assistiveText !== void 0 ? describedbyId : void 0,
|
|
70
|
+
disabled: props.disabled,
|
|
71
|
+
onClick: () => {
|
|
72
|
+
if (props.disabled === true) return;
|
|
73
|
+
setIsOpen(true);
|
|
74
|
+
},
|
|
75
|
+
ref: triggerRef,
|
|
76
|
+
type: "button",
|
|
77
|
+
"data-active": isOpen,
|
|
78
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
79
|
+
className: "charcoal-ui-dropdown-selector-text",
|
|
80
|
+
"data-placeholder": isPlaceholder,
|
|
81
|
+
children: isPlaceholder ? props.placeholder : preview
|
|
82
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index.default, {
|
|
83
|
+
className: "charcoal-ui-dropdown-selector-icon",
|
|
84
|
+
name: "16/Menu"
|
|
85
|
+
})]
|
|
86
|
+
}),
|
|
87
|
+
isOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_DropdownPopover.DropdownPopover, {
|
|
88
|
+
isOpen,
|
|
89
|
+
onClose: () => setIsOpen(false),
|
|
90
|
+
triggerRef,
|
|
91
|
+
value: props.value,
|
|
92
|
+
inertWorkaround: props.inertWorkaround,
|
|
93
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$4.default, {
|
|
94
|
+
value: props.value,
|
|
95
|
+
onChange: (v) => {
|
|
96
|
+
onChange(v);
|
|
97
|
+
setIsOpen(false);
|
|
98
|
+
},
|
|
99
|
+
children: props.children
|
|
100
|
+
})
|
|
101
|
+
}),
|
|
102
|
+
props.assistiveText !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$2.AssistiveText, {
|
|
103
|
+
"data-invalid": props.invalid === true,
|
|
104
|
+
id: describedbyId,
|
|
105
|
+
children: props.assistiveText
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
//#endregion
|
|
112
|
+
exports.default = DropdownSelector;
|
|
113
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["React","ReactNode","useState","useRef","useMemo","useCallback","Icon","FieldLabel","DropdownPopover","findPreviewRecursive","MenuList","MenuListChildren","getValuesRecursive","AssistiveText","useClassNames","PopoverProps","useVisuallyHidden","useId","DropdownSelectorProps","label","value","disabled","placeholder","showLabel","invalid","assistiveText","required","requiredText","subLabel","name","children","onChange","className","selectRef","Ref","HTMLSelectElement","Pick","DropdownSelector","props","triggerRef","HTMLButtonElement","isOpen","setIsOpen","preview","isPlaceholder","undefined","propsArray","hasMatchedValue","some","itemProps","visuallyHiddenProps","handleChange","e","ChangeEvent","target","labelId","describedbyId","classNames","map","inertWorkaround","v"],"sources":["../../../src/components/DropdownSelector/index.tsx"],"sourcesContent":["import './index.css'\n\nimport React, { ReactNode, useState, useRef, useMemo, useCallback } from 'react'\nimport Icon from '../Icon'\nimport FieldLabel from '../FieldLabel'\nimport { DropdownPopover } from './DropdownPopover'\nimport { findPreviewRecursive } from './utils/findPreviewRecursive'\nimport MenuList, { MenuListChildren } from './MenuList'\nimport { getValuesRecursive } from './MenuList/internals/getValuesRecursive'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { PopoverProps } from './Popover'\n\nimport { useVisuallyHidden } from 'react-aria/VisuallyHidden'\nimport { useId } from 'react-aria/useId'\n\nexport type DropdownSelectorProps = {\n label: string\n value: string\n disabled?: boolean\n placeholder?: string\n showLabel?: boolean\n invalid?: boolean\n assistiveText?: string\n required?: boolean\n requiredText?: string\n subLabel?: ReactNode\n /**\n * the name of hidden `<select />`\n */\n name?: string\n children: MenuListChildren\n onChange: (value: string) => void\n className?: string\n selectRef?: React.Ref<HTMLSelectElement>\n} & Pick<PopoverProps, 'inertWorkaround'>\n\nexport default function DropdownSelector({\n onChange,\n showLabel = false,\n selectRef,\n ...props\n}: DropdownSelectorProps) {\n const triggerRef = useRef<HTMLButtonElement>(null)\n const [isOpen, setIsOpen] = useState(false)\n const preview = findPreviewRecursive(props.children, props.value)\n\n const isPlaceholder = useMemo(\n () => props.placeholder !== undefined && preview === undefined,\n [preview, props.placeholder],\n )\n\n const propsArray = getValuesRecursive(props.children)\n const hasMatchedValue = useMemo(\n () => propsArray.some((itemProps) => itemProps.value === props.value),\n [propsArray, props.value],\n )\n\n const { visuallyHiddenProps } = useVisuallyHidden()\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange(e.target.value)\n },\n [onChange],\n )\n\n const labelId = useId()\n const describedbyId = useId()\n\n const classNames = useClassNames(\n 'charcoal-dropdown-selector-root',\n props.className,\n )\n\n return (\n <div className={classNames} aria-disabled={props.disabled}>\n <FieldLabel\n id={labelId}\n label={props.label}\n required={props.required}\n requiredText={props.requiredText}\n subLabel={props.subLabel}\n {...(!showLabel ? visuallyHiddenProps : {})}\n />\n <div {...visuallyHiddenProps} aria-hidden=\"true\">\n <select\n name={props.name}\n value={props.value}\n onChange={handleChange}\n tabIndex={-1}\n ref={selectRef}\n >\n {!hasMatchedValue && (\n <option value={props.value}>{props.value}</option>\n )}\n {propsArray.map((itemProps) => {\n return (\n <option\n key={itemProps.value}\n value={itemProps.value}\n disabled={itemProps.disabled}\n >\n {itemProps.value}\n </option>\n )\n })}\n </select>\n </div>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n className=\"charcoal-dropdown-selector-button\"\n aria-labelledby={labelId}\n aria-invalid={props.invalid}\n aria-describedby={\n props.assistiveText !== undefined ? describedbyId : undefined\n }\n disabled={props.disabled}\n onClick={() => {\n if (props.disabled === true) return\n setIsOpen(true)\n }}\n ref={triggerRef}\n type=\"button\"\n data-active={isOpen}\n >\n <span\n className=\"charcoal-ui-dropdown-selector-text\"\n data-placeholder={isPlaceholder}\n >\n {isPlaceholder ? props.placeholder : preview}\n </span>\n <Icon className=\"charcoal-ui-dropdown-selector-icon\" name=\"16/Menu\" />\n </button>\n {isOpen && (\n <DropdownPopover\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n triggerRef={triggerRef}\n value={props.value}\n inertWorkaround={props.inertWorkaround}\n >\n <MenuList\n value={props.value}\n onChange={(v) => {\n onChange(v)\n setIsOpen(false)\n }}\n >\n {props.children}\n </MenuList>\n </DropdownPopover>\n )}\n {props.assistiveText !== undefined && (\n <AssistiveText data-invalid={props.invalid === true} id={describedbyId}>\n {props.assistiveText}\n </AssistiveText>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqCA,SAAwBqC,iBAAiB,EACvCN,UACAR,YAAY,OACZU,WACA,GAAGK,SACqB;CACxB,MAAMC,+BAAuC,KAAK;CAClD,MAAM,CAACE,QAAQC,iCAAsB,MAAM;CAC3C,MAAMC,UAAUlC,kDAAqB6B,MAAMR,UAAUQ,MAAMlB,MAAM;CAEjE,MAAMwB,yCACEN,MAAMhB,gBAAgBuB,UAAaF,YAAYE,QACrD,CAACF,SAASL,MAAMhB,YAClB,CAAC;CAED,MAAMwB,aAAalC,8CAAmB0B,MAAMR,SAAS;CACrD,MAAMiB,2CACED,WAAWE,MAAMC,cAAcA,UAAU7B,UAAUkB,MAAMlB,MAAM,EACrE,CAAC0B,YAAYR,MAAMlB,MACrB,CAAC;CAED,MAAM,EAAE8B,0EAA2C;CAEnD,MAAMC,uCACHC,MAA4C;EAC3CrB,SAASqB,EAAEE,OAAOlC,MAAM;IAE1B,CAACW,SACH,CAAC;CAED,MAAMwB,uCAAiB;CACvB,MAAMC,6CAAuB;CAO7B,OACE,4CAAC,OAAD;EAAK,WANY1C,oCACjB,mCACAwB,MAAMN,UAIoB;EAAE,iBAAeM,MAAMjB;YAAjD;GACE,2CAAC,yBAAD;IACE,IAAIkC;IACJ,OAAOjB,MAAMnB;IACb,UAAUmB,MAAMZ;IAChB,cAAcY,MAAMX;IACpB,UAAUW,MAAMV;IAChB,GAAK,CAACL,YAAY2B,sBAAsB,EAAG;IAAC;GAE9C,2CAAC,OAAD;IAAK,GAAIA;IAAqB,eAAY;cACxC,4CAAC,UAAD;KACE,MAAMZ,MAAMT;KACZ,OAAOS,MAAMlB;KACb,UAAU+B;KACV,UAAU;KACV,KAAKlB;eALP,CAOG,CAACc,mBACA,2CAAC,UAAD;MAAQ,OAAOT,MAAMlB;gBAAQkB,MAAMlB;MACpC,GACA0B,WAAWY,KAAKT,cAAc;MAC7B,OACE,2CAAC,UAAD;OAEE,OAAOA,UAAU7B;OACjB,UAAU6B,UAAU5B;iBAEnB4B,UAAU7B;OACJ,EALF6B,UAAU7B,MAKR;OAEX,CACI;;IACL;GAEL,4CAAC,UAAD;IACE,WAAU;IACV,mBAAiBmC;IACjB,gBAAcjB,MAAMd;IACpB,oBACEc,MAAMb,kBAAkBoB,SAAYW,gBAAgBX;IAEtD,UAAUP,MAAMjB;IAChB,eAAe;KACb,IAAIiB,MAAMjB,aAAa,MAAM;KAC7BqB,UAAU,KAAK;;IAEjB,KAAKH;IACL,MAAK;IACL,eAAaE;cAdf,CAgBE,2CAAC,QAAD;KACE,WAAU;KACV,oBAAkBG;eAEjBA,gBAAgBN,MAAMhB,cAAcqB;KACjC,GACN,2CAAC,uBAAD;KAAM,WAAU;KAAqC,MAAK;KAAS,EAC7D;;GACPF,UACC,2CAAC,yCAAD;IACUA;IACR,eAAeC,UAAU,MAAM;IACnBH;IACZ,OAAOD,MAAMlB;IACb,iBAAiBkB,MAAMqB;cAEvB,2CAAC,yBAAD;KACE,OAAOrB,MAAMlB;KACb,WAAWwC,MAAM;MACf7B,SAAS6B,EAAE;MACXlB,UAAU,MAAM;;eAGjBJ,MAAMR;KACC;IAEb;GACAQ,MAAMb,kBAAkBoB,UACvB,2CAAC,+BAAD;IAAe,gBAAcP,MAAMd,YAAY;IAAM,IAAIgC;cACtDlB,MAAMb;IAEV;GACG"}
|