@charcoal-ui/react 6.0.0-rc.6 → 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/index.d.ts +2 -0
- package/dist/components/Carousel/index.d.ts.map +1 -1
- 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/index.d.ts.map +1 -1
- 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 +1380 -1355
- package/dist/index.js +31 -12
- package/dist/layered.css +1376 -1351
- package/dist/layered.css.map +1 -1
- package/package.json +5 -5
- package/src/components/Carousel/MIGRATION.md +8 -8
- package/src/components/Carousel/__snapshots__/index.css.snap +4 -2
- package/src/components/Carousel/index.css +5 -2
- package/src/components/Carousel/index.story.tsx +14 -12
- package/src/components/Carousel/index.test.tsx +24 -0
- package/src/components/Carousel/index.tsx +17 -0
- package/src/components/TagItem/index.test.tsx +38 -0
- package/src/components/TagItem/index.tsx +1 -0
- package/src/components/TextArea/__snapshots__/index.css.snap +29 -8
- package/src/components/TextArea/index.css +30 -8
- package/src/components/TextArea/index.tsx +1 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["version","Fragment","SSRProvider","OriginSSRProvider","isReactVersionOver","minVersion","reactMajorVersion","parseInt","split","Number","isFinite","React","OverlayProvider","SSRProvider","CharcoalProviderProps","children","ReactNode","CharcoalProvider","useCallback","useEffect","useMemo","useState","LOCAL_STORAGE_KEY","DEFAULT_ROOT_ATTRIBUTE","keyStringRegExp","RegExp","assertKeyString","key","test","Error","themeSetter","attr","theme","undefined","document","documentElement","dataset","defaultThemeSetter","themeSelector","T","S","const","prefersColorScheme","useThemeSetter","setter","system","useTheme","getThemeSync","localStorage","getItem","localStorageKey","isDark","useMedia","media","local","setTheme","ready","useLocalStorage","defaultValue","setReady","state","setState","defaultValueMemo","fetch","raw","deserialize","handleStorage","e","StorageEvent","storageArea","window","addEventListener","removeEventListener","set","value","removeItem","serialize","setItem","event","bubbles","cancelable","url","location","href","dispatchEvent","JSON","parse","stringify","query","match","matcher","matchMedia","onChange","matches","assertKeyString","DEFAULT_ROOT_ATTRIBUTE","LOCAL_STORAGE_KEY","Props","localStorageKey","rootAttribute","makeSetThemeScriptCode","defaultProps","Partial","SetThemeScript","src","__html","useMemo","useClassNames","classNames","filter","v","join","React","ForwardedRef","ReactNode","forwardRef","useMemo","JSX","useClassNames","Variant","Size","ButtonProps","ElementType","children","variant","size","fullWidth","isActive","component","T","Omit","ComponentPropsWithRef","Button","className","props","ref","HTMLButtonElement","Component","classNames","p","Element","React","useMemo","forwardRef","ReactNode","JSX","useClassNames","ClickableProps","ElementType","children","component","T","Omit","ComponentPropsWithRef","Clickable","props","ref","ForwardedRef","HTMLButtonElement","className","Component","p","Element","ClickableElement","HTMLAnchorElement","React","ForwardedRef","forwardRef","useMemo","JSX","useClassNames","KnownIconType","Variant","Size","IconButtonProps","ElementType","variant","size","icon","isActive","component","T","Omit","ComponentPropsWithRef","IconButton","HTMLButtonElement","IconButtonInner","rest","ref","validateIconSize","Component","classNames","className","p","Element","requiredIconSize","result","exec","Error","iconSize","console","warn","React","RadioGroupContext","name","selected","disabled","readonly","invalid","onChange","next","createContext","undefined","Error","forwardRef","memo","useCallback","useClassNames","CharcoalRadioInputProps","invalid","onChange","value","InputProps","React","HTMLProps","HTMLInputElement","RadioInputProps","Omit","RadioInput","className","props","ref","handleChange","e","ChangeEvent","el","currentTarget","classNames","memo","forwardRef","useContext","React","warning","useClassNames","RadioGroupContext","RadioInput","RadioProps","PropsWithChildren","value","disabled","className","Radio","HTMLInputElement","RadioInner","children","props","ref","name","selected","isParentDisabled","readonly","invalid","onChange","classNames","undefined","isSelected","isDisabled","isReadonly","forwardRef","useCallback","useMemo","JSX","React","useClassNames","RadioGroupContext","RadioGroupProps","PropsWithChildren","className","value","Value","label","name","onChange","next","disabled","readonly","invalid","ref","Ref","HTMLDivElement","ComponentProps","RadioGroup","RadioGroupInner","children","ariaOrientation","props","classNames","handleChange","contextValue","selected","Element","createContext","MultiSelectGroupContext","name","selected","disabled","readonly","invalid","onChange","value","undefined","Error","React","calcActualSize","IconSizing","PixivIcon","Props","OwnProps","unsafeNonGuidelineScale","fixedSize","className","IconProps","PropsWithoutRef","Omit","Icon","forwardRef","IconInner","name","scale","style","userStyle","rest","ref","actualSize","useMemo","CSSProperties","trim","ChangeEvent","useCallback","useContext","forwardRef","memo","React","warning","MultiSelectGroupContext","Icon","useClassNames","MultiSelectProps","PropsWithChildren","value","disabled","variant","className","onChange","payload","selected","MultiSelect","HTMLInputElement","MultiSelectInner","children","ref","name","parentDisabled","readonly","invalid","parentOnChange","undefined","isSelected","includes","isDisabled","handleChange","event","currentTarget","checked","classNames","Boolean","MultiSelectGroupProps","style","CSSProperties","label","MultiSelectGroup","index","indexOf","slice","Array","from","Set","forwardRef","useCallback","useClassNames","CharcoalSwitchProps","onChange","checked","InputProps","React","HTMLProps","HTMLInputElement","SwitchInputProps","Omit","SwitchInput","className","props","ref","handleChange","e","ChangeEvent","el","currentTarget","classNames","React","useClassNames","SwitchWithLabel","memo","children","className","disabled","id","input","ReactNode","classNames","memo","forwardRef","SwitchInput","SwitchInputProps","SwitchWithLabel","useId","SwitchProps","Switch","HTMLInputElement","children","onChange","disabled","className","id","props","ref","htmlId","noChildren","undefined","input","React","useClassNames","FieldLabelProps","LabelHTMLAttributes","HTMLLabelElement","className","label","subLabel","ReactNode","required","requiredText","FieldLabel","forwardRef","style","labelProps","ref","classNames","unreachable","value","Error","arguments","length","JSON","stringify","mergeRefs","refs","React","Ref","T","RefCallback","ref","MutableRefObject","current","countCodePointsInString","string","Array","from","useEffect","React","useFocusWithClick","containerRef","RefObject","HTMLDivElement","inputRef","HTMLInputElement","HTMLTextAreaElement","el","current","handleDown","e","MouseEvent","target","focus","addEventListener","removeEventListener","forwardRef","useClassNames","createDivComponent","mainClassName","HTMLDivElement","React","ComponentPropsWithRef","DivComponent","className","props","ref","classNames","createDivComponent","AssistiveText","ReactNode","useCallback","useEffect","useRef","useState","React","FieldLabel","countCodePointsInString","mergeRefs","useFocusWithClick","AssistiveText","useClassNames","useVisuallyHidden","useId","TextFieldProps","prefix","suffix","value","onChange","showCount","showLabel","assistiveText","invalid","label","requiredText","disabled","subLabel","rdfaPrefix","getCount","Omit","ComponentPropsWithoutRef","TextField","forwardRef","HTMLInputElement","SingleLineTextFieldInner","className","maxLength","required","type","props","inputRef","visuallyHiddenProps","count","setCount","handleChange","e","ChangeEvent","target","undefined","containerRef","inputId","id","describedbyId","labelledbyId","showAssistiveText","length","classNames","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","FieldLabel","countCodePointsInString","mergeRefs","useFocusWithClick","AssistiveText","useClassNames","useVisuallyHidden","useId","TextAreaImperativeHandle","setValue","value","sync","TextAreaProps","onChange","imperativeRef","React","Ref","showCount","showLabel","assistiveText","invalid","label","requiredText","disabled","subLabel","ReactNode","autoHeight","maxRows","getCount","Omit","ComponentPropsWithoutRef","TextArea","HTMLTextAreaElement","TextAreaInner","className","required","maxLength","rows","initialRows","defaultValue","props","isUncontrolled","undefined","countValue","toString","setRows","count","setCount","textareaRef","containerRef","visuallyHiddenProps","isEnableAutoHeight","classNames","showAssistiveText","length","syncHeight","textarea","currentRows","match","hasValidMaxRows","nextRows","Math","min","syncTextAreaState","handleChange","e","ChangeEvent","currentTarget","current","textAreaId","id","describedbyId","labelledbyId","React","useForwardedRef","ref","ForwardedRef","T","innerRef","useRef","useEffect","current","forwardRef","React","useDialog","useForwardedRef","Size","BottomSheet","useClassNames","Dialog","HTMLDivElement","ComponentPropsWithoutRef","size","bottomSheet","className","props","ref","dialogProps","role","classNames","tabIndex","onBlur","React","ModalBackgroundContext","createContext","HTMLElement","useEffect","usePreventScroll","element","HTMLElement","isOpen","useClip","defaultPaddingRight","style","paddingRight","defaultOverflow","overflow","window","innerWidth","clientWidth","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","useEffect","useLayoutEffect","useIsomorphicLayoutEffect","window","useCallback","useEffect","useState","RefObject","TransitionEvent","useIsomorphicLayoutEffect","MODAL_TRANSITION_DURATION_MS","AnimationState","settle","state","useTransitionPresence","isOpen","enabled","backgroundRef","HTMLElement","dialogRef","setState","current","offsetHeight","s","isAnimating","timer","setTimeout","clearTimeout","handleTransitionEnd","e","isDialogSlide","target","propertyName","isPresent","animationState","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","ModalContext","useContext","createDivComponent","ModalHeader","modalCtx","bottomSheet","title","ModalAlign","ModalBody","ModalButtons","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","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","Key","useEffect","useRef","Popover","PopoverProps","DropdownPopoverProps","value","DropdownPopover","children","props","ref","HTMLDivElement","isOpen","current","triggerRef","style","width","clientWidth","undefined","windowScrollY","window","scrollY","windowScrollX","scrollX","selectedElement","document","querySelector","toString","HTMLElement","focus","scrollTo","el","onClose","inertWorkaround","ReactNode","React","findPreviewRecursive","children","value","childArray","Children","toArray","i","length","child","isValidElement","props","childValue","undefined","RefObject","createContext","DropdownMenuItemProps","MenuListContextType","root","HTMLUListElement","value","propsArray","setValue","v","MenuListContext","undefined","_v","React","MenuItem","MenuListChildren","MenuItemGroup","DropdownMenuItemProps","getValuesRecursive","children","childArray","Children","toArray","propsArray","i","length","child","isValidElement","props","value","disabled","ReactElement","push","useMemo","useRef","MenuListContext","getValuesRecursive","MenuItem","Divider","MenuItemGroup","MenuListChild","React","ReactElement","MenuListChildren","MenuListProps","children","value","onChange","v","MenuList","props","root","propsArray","setValue","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","ForwardedRef","forwardRef","ReactNode","useMemo","JSX","useClassNames","CustomJSXElement","IntrinsicElements","React","JSXElementConstructor","ListItemProps","ElementType","children","as","T","Omit","ComponentPropsWithRef","ListItem","className","props","ref","HTMLLIElement","Component","classNames","p","Element","handleFocusByKeyBoard","element","Element","parent","HTMLElement","isScrollable","scrollHeight","clientHeight","rect","getBoundingClientRect","parentRect","bottom","scrollTo","top","scrollTop","scrollIfNeeded","elementRect","isVisible","window","innerHeight","document","documentElement","scrollIntoView","block","useCallback","useContext","handleFocusByKeyBoard","MenuListContext","useMenuItemHandleKeyDown","value","e","React","KeyboardEvent","HTMLElement","setValue","root","propsArray","setContextValue","undefined","handleKeyDown","key","isForward","preventDefault","values","map","props","filter","v","index","indexOf","n","length","focusValue","next","current","querySelector","ariaDisabled","focus","preventScroll","parentElement","ForwardedRef","forwardRef","ListItem","ListItemProps","useMenuItemHandleKeyDown","MenuItemProps","React","ElementType","value","disabled","T","MenuItem","className","_","props","ref","HTMLLIElement","handleKeyDown","setContextValue","undefined","children","MenuItem","MenuItemProps","MenuListContext","ReactNode","useContext","Icon","DropdownMenuItemProps","Omit","secondary","contentFullWidth","DropdownMenuItem","props","value","ctxValue","isSelected","children","rest","fullWidthClassName","MenuItem","Divider","MenuItemGroupChild","React","ReactElement","MenuItemGroupProps","text","children","MenuItemGroup","props","createContext","useContext","React","RadioGroupState","RadioContext","RadioProviderProps","PropsWithChildren","value","RadioProvider","FC","children","useRadioContext","state","Error","ReactNode","forwardRef","memo","useMemo","useRef","React","RadioProvider","useRadioContext","useClassNames","AriaRadioGroupProps","AriaRadioProps","useRadio","useRadioGroup","useRadioGroupState","SegmentedControlItem","label","value","disabled","SegmentedControlProps","id","name","readonly","required","className","uniformSegmentWidth","fullWidth","defaultValue","data","onChange","SegmentedControl","HTMLDivElement","SegmentedControlInner","props","ref","ariaRadioGroupProps","isDisabled","isReadOnly","isRequired","state","radioGroupProps","segmentedControlItems","map","d","item","RadioProps","children","Segmented","HTMLInputElement","ariaRadioProps","inputProps","isSelected","forwardRef","memo","useCallback","useClassNames","CharcoalCheckboxInputProps","invalid","onChange","checked","rounded","InputProps","React","HTMLProps","HTMLInputElement","CheckboxInputProps","Omit","CheckboxInput","className","props","ref","handleChange","e","ChangeEvent","el","currentTarget","classNames","React","useClassNames","CheckboxWithLabel","memo","className","children","input","id","disabled","ReactNode","classNames","forwardRef","memo","CheckboxInput","CheckboxInputProps","CheckboxWithLabel","useId","CheckboxProps","Checkbox","HTMLInputElement","disabled","className","id","children","props","ref","htmlId","noChildren","undefined","input","React","forwardRef","memo","useMemo","ForwardedRef","JSX","Icon","useClassNames","useObjectRef","useLink","SizeMap","S","M","TagItemProps","ElementType","label","translatedLabel","bgColor","bgImage","status","size","disabled","component","T","Omit","ComponentPropsWithRef","TagItem","HTMLAnchorElement","TagItemInner","ariaDisabled","props","_ref","ref","hasTranslatedLabel","undefined","length","className","bgVariant","bg","Component","isButton","linkProps","isDisabled","elementType","disabledProps","p","Element","ReactNode","Icon","useClassNames","HintTextContext","HintTextProps","children","context","className","HintText","classNames","Children","isValidElement","ReactElement","ReactNode","getFinalTitle","showTooltip","title","children","undefined","resolvedTitle","onlyText","hasChildren","element","Boolean","props","childToString","child","JSON","stringify","toString","Array","isArray","toArray","reduce","text","newText","concat","getFinalTitle","useClassNames","CSSProperties","TextEllipsisProps","lineHeight","lineLimit","hyphens","showTooltip","useNowrap","React","ComponentPropsWithoutRef","TextEllipsis","t0","$","_c","children","props","t1","t2","t3","t4","title","undefined","t5","finalTitle","classNames","className","hasLineHeight","t6","t7","t8","style","t9","t10","useDebugValue","warning","PageRangeDisplayed","usePaginationWindow","page","pageCount","t0","$","_c","$i","Symbol","for","pageRangeDisplayed","undefined","process","env","NODE_ENV","visibleLastPage","Math","min","max","floor","t1","t2","Array","from","length","_temp","start","t3","__0","i_0","i","const","window","_","createContext","useContext","Size","PageRangeDisplayed","LinkComponentProps","href","className","children","React","ReactNode","PaginationContextValue","ElementType","page","pageCount","size","isLinkMode","makeUrl","LinkComponent","T","makeClickHandler","value","linkProps","Omit","ComponentPropsWithoutRef","PaginationContext","usePaginationContext","context","Error","usePaginationWindow","useClassNames","IconButton","IconButtonProps","PaginationContext","usePaginationContext","LinkComponentProps","PaginationContextValue","PageRangeDisplayed","Size","NavButtonProps","direction","ariaLabel","NavButton","t0","$","_c","page","pageCount","size","isLinkMode","makeUrl","LinkComponent","makeClickHandler","linkProps","isPrev","targetPage","Math","max","min","disabled","navButtonClassName","className","t1","t2","undefined","t3","component","href","onClick","t4","PageItem","value","pageItemClassName","PaginationCommonProps","pageRangeDisplayed","ariaLabelPrev","ariaLabelNext","NavProps","Omit","React","ComponentPropsWithoutRef","PaginationProps","ElementType","onChange","newPage","T","Pagination","navProps","window","t5","classNames","t6","contextValue","t7","t8","t9","map","_temp","t10","t11","t12","p","CENTER_ROOT_MARGIN","CenterEntry","observer","IntersectionObserver","callbacks","Map","Element","byRoot","observeCenter","el","HTMLElement","onEnter","window","undefined","root","parentElement","entry","get","entries","e","isIntersecting","target","rootMargin","threshold","set","observe","delete","unobserve","size","disconnect","observer","ResizeObserver","callbacks","Map","Element","getObserver","window","entries","e","get","target","observeResize","el","cb","obs","undefined","set","observe","delete","unobserve","size","disconnect","useEffect","useRef","ReactNode","CarouselStore","observeCenter","observeResize","CarouselItemProps","Readonly","index","store","onResize","children","CarouselItem","ref","HTMLDivElement","el","current","dispatch","type","lastNonce","getSnapshot","scroll","nonce","subscribe","scrollIntoView","behavior","inline","block","Store","Readonly","dispatch","action","Action","subscribe","listener","getSnapshot","State","createStore","reducer","state","initialState","listeners","Set","add","delete","createStore","Store","CarouselState","Readonly","activeIndex","canPrev","canNext","scroll","index","nonce","CarouselAction","type","CarouselStore","INITIAL_CAROUSEL_STATE","reducer","state","action","createCarouselStore","useCallback","useEffect","useRef","RefObject","useIsomorphicLayoutEffect","CarouselStore","ScrollAlign","ScrollStep","INTERACTION_EVENTS","const","CarouselScrollerOptions","Readonly","align","offset","scrollStep","onScroll","left","onResize","width","onScrollStateChange","canScroll","CarouselScrollerResult","scrollByStep","direction","onItemResize","resetScroll","useCarouselScroller","scrollerRef","HTMLElement","store","itemCount","options","initialScrollActive","callbacksRef","current","prevCanScroll","updateScrollState","el","scrollLeft","scrollWidth","clientWidth","canPrev","canNext","dispatch","type","applyInitialScroll","maxScroll","scrollTo","Math","max","min","behavior","handleScroll","addEventListener","passive","removeEventListener","ResizeObserver","ro","observe","disconnect","stop","delta","scrollBy","Children","forwardRef","isValidElement","memo","useCallback","useImperativeHandle","useRef","useState","useSyncExternalStore","ReactNode","mergeProps","useFocusRing","useKeyboard","useClassNames","IconButton","CarouselItem","CarouselSlide","createCarouselStore","INITIAL_CAROUSEL_STATE","CarouselState","useCarouselScroller","getServerSnapshot","ScrollAlign","ScrollSnapType","ScrollSnapAlign","ScrollSnap","Readonly","type","align","ScrollStepContext","clientWidth","scrollWidth","scrollLeft","direction","ScrollStep","ctx","CarouselHandlerRef","resetScroll","CarouselProps","className","hasGradient","fullWidth","navigationButtons","indicator","size","scrollStep","scrollSnap","onScroll","left","onResize","width","onScrollStateChange","canScroll","defaultScroll","offset","children","Direction","DEFAULT_SCROLL_STEP","NAV_ICON","prev","next","const","NavigationButtonProps","CarouselNavigationButton","handleClick","IndicatorItemProps","index","isActive","onSelect","CarouselIndicatorItem","undefined","Carousel","Render","props","ref","showNavigationButtons","showIndicator","snapType","snapAlign","slides","toArray","slideKeys","map","slide","i","key","scrollerRef","HTMLDivElement","store","scrollByStep","onItemResize","length","activeIndex","canPrev","canNext","subscribe","getSnapshot","scrollToItem","dispatch","keyboardProps","onKeyDown","e","preventDefault","continuePropagation","focusProps","scrollerFocusProps","isFocusVisible","scrollerFocusVisible","rootFocusProps","rootFocusVisible","within","_","displayName"],"sources":["../src/core/SSRProvider.tsx","../src/core/CharcoalProvider.tsx","../src/core/themeHelper.ts","../src/core/SetThemeScript.tsx","../src/_lib/useClassNames.ts","../src/components/Button/index.tsx","../src/components/Clickable/index.tsx","../src/components/IconButton/index.tsx","../src/components/Radio/RadioGroupContext.ts","../src/components/Radio/RadioInput/index.tsx","../src/components/Radio/index.tsx","../src/components/Radio/RadioGroup/index.tsx","../src/components/MultiSelect/context.ts","../src/components/Icon/index.tsx","../src/components/MultiSelect/index.tsx","../src/components/Switch/SwitchInput/index.tsx","../src/components/Switch/SwitchWithLabel.tsx","../src/components/Switch/index.tsx","../src/components/FieldLabel/index.tsx","../src/_lib/index.ts","../src/components/TextField/useFocusWithClick.tsx","../src/_lib/createDivComponent.tsx","../src/components/TextField/AssistiveText/index.tsx","../src/components/TextField/index.tsx","../src/components/TextArea/index.tsx","../src/_lib/useForwardedRef.tsx","../src/components/Modal/Dialog/index.tsx","../src/components/Modal/ModalBackgroundContext.tsx","../src/components/DropdownSelector/Popover/usePreventScroll.tsx","../src/components/Modal/useCustomModalOverlay.tsx","../src/_lib/useIsomorphicLayoutEffect.ts","../src/components/Modal/useTransitionPresence.ts","../src/components/Modal/index.tsx","../src/components/Modal/ModalPlumbing.tsx","../src/components/LoadingSpinner/index.tsx","../src/components/DropdownSelector/Popover/index.tsx","../src/components/DropdownSelector/DropdownPopover.tsx","../src/components/DropdownSelector/utils/findPreviewRecursive.tsx","../src/components/DropdownSelector/MenuList/MenuListContext.ts","../src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx","../src/components/DropdownSelector/MenuList/index.tsx","../src/components/DropdownSelector/index.tsx","../src/components/DropdownSelector/ListItem/index.tsx","../src/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.tsx","../src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx","../src/components/DropdownSelector/MenuItem/index.tsx","../src/components/DropdownSelector/DropdownMenuItem/index.tsx","../src/components/DropdownSelector/MenuItemGroup/index.tsx","../src/components/SegmentedControl/RadioGroupContext.tsx","../src/components/SegmentedControl/index.tsx","../src/components/Checkbox/CheckboxInput/index.tsx","../src/components/Checkbox/CheckboxWithLabel.tsx","../src/components/Checkbox/index.tsx","../src/components/TagItem/index.tsx","../src/components/HintText/index.tsx","../src/components/TextEllipsis/helper.ts","../src/components/TextEllipsis/index.tsx","../src/components/Pagination/helper.ts","../src/components/Pagination/PaginationContext.ts","../src/components/Pagination/index.tsx","../src/components/Carousel/intersectionObserver.ts","../src/components/Carousel/resizeObserver.ts","../src/components/Carousel/CarouselItem.tsx","../src/components/Carousel/store.ts","../src/components/Carousel/carouselStore.ts","../src/components/Carousel/useCarouselScroller.ts","../src/components/Carousel/index.tsx"],"sourcesContent":["import { version, Fragment } from 'react'\nimport { SSRProvider as OriginSSRProvider } from 'react-aria/SSRProvider'\n\nexport function isReactVersionOver(minVersion: number): boolean {\n // version history on the react side: https://github.com/facebook/react/commits/main/packages/shared/ReactVersion.js\n const reactMajorVersion = parseInt(version.split('.')[0], 10)\n return Number.isFinite(reactMajorVersion)\n ? reactMajorVersion >= minVersion\n : false\n}\n\nexport const SSRProvider = isReactVersionOver(18) ? Fragment : OriginSSRProvider\n","import * as React from 'react'\nimport { OverlayProvider } from './OverlayProvider'\nimport { SSRProvider } from './SSRProvider'\n\nexport type CharcoalProviderProps = {\n children: React.ReactNode\n}\n\nexport function CharcoalProvider({ children }: CharcoalProviderProps) {\n return (\n <SSRProvider>\n <OverlayProvider>{children}</OverlayProvider>\n </SSRProvider>\n )\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\n\nexport const LOCAL_STORAGE_KEY = 'charcoal-theme'\nexport const DEFAULT_ROOT_ATTRIBUTE = 'theme'\n\nconst keyStringRegExp = new RegExp(/^(\\w|-)+$/)\n\n/**\n * 文字列が英数字_-のみで構成されているか検証する。不正な文字列ならエラーを投げる\n * @param key 検証するキー\n */\nexport function assertKeyString(key: string) {\n if (!keyStringRegExp.test(key)) {\n throw new Error(`Unexpected key :${key}, expect: /^(\\\\w|-)+$/`)\n }\n}\n\n/**\n * `<html data-theme=\"dark\">` のような設定を行うデフォルトのセッター\n */\nexport const themeSetter =\n (attr: string = DEFAULT_ROOT_ATTRIBUTE) =>\n (theme: string | undefined) => {\n assertKeyString(attr)\n if (theme !== undefined) {\n document.documentElement.dataset[attr] = theme\n } else {\n delete document.documentElement.dataset[attr]\n }\n }\n\n// デフォルト引数で生成すると毎レンダー新しい関数になり、effect が再実行される\nconst defaultThemeSetter = themeSetter()\n\n/**\n * `<html data-theme=\"dark\">` にマッチするセレクタを生成する\n */\nexport function themeSelector<\n T extends string,\n S extends string = typeof DEFAULT_ROOT_ATTRIBUTE,\n>(theme: T, attr?: S) {\n return `:root[data-${attr ?? DEFAULT_ROOT_ATTRIBUTE}='${theme}']` as const\n}\n\n/**\n * prefers-color-scheme を利用する media クエリを生成する\n */\nexport function prefersColorScheme<T extends 'light' | 'dark'>(theme: T) {\n return `@media (prefers-color-scheme: ${theme})` as const\n}\n\n/**\n * LocalStorageからテーマの情報を取得して、変化時にテーマをセットするhooks\n */\nexport function useThemeSetter({\n key = LOCAL_STORAGE_KEY,\n setter = defaultThemeSetter,\n}: { key?: string; setter?: (theme: string | undefined) => void } = {}) {\n const [theme, , system] = useTheme(key)\n\n useEffect(() => {\n if (theme === undefined) {\n return\n }\n // prefers-color-scheme から値を取っている場合にはcssのみで処理したいのでアンセットする\n setter(system ? undefined : theme)\n }, [setter, system, theme])\n}\n\n/**\n * 同期的にLocalStorageからテーマを取得するヘルパ\n */\nexport function getThemeSync(key: string = LOCAL_STORAGE_KEY) {\n const theme = localStorage.getItem(key)\n return theme\n}\n\n/**\n * LocalStorage, prefers-color-scheme からテーマの情報を取得して、現在のテーマを返すhooks\n *\n * `dark` `light` という名前だけは特別扱いされていて、prefers-color-schemeにマッチした場合に返ります\n */\nexport const useTheme = (localStorageKey: string = LOCAL_STORAGE_KEY) => {\n assertKeyString(localStorageKey)\n const isDark = useMedia('(prefers-color-scheme: dark)')\n const media = isDark !== undefined ? (isDark ? 'dark' : 'light') : undefined\n const [local, setTheme, ready] =\n useLocalStorage<typeof media>(localStorageKey)\n const theme = !ready || media === undefined ? undefined : (local ?? media)\n const system = local === undefined\n return [theme, setTheme, system] as const\n}\n\nexport function useLocalStorage<T>(key: string, defaultValue?: () => T) {\n const [ready, setReady] = useState(false)\n const [state, setState] = useState<T>()\n const defaultValueMemo = useMemo(() => defaultValue?.(), [defaultValue])\n\n const fetch = useCallback(() => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }, [defaultValueMemo, key])\n\n const handleStorage = useCallback(\n (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n },\n [fetch, key],\n )\n\n // JSON は deserialize のたびに新しい object になるため、入力変更時だけ再取得する\n useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n }, [fetch, handleStorage])\n\n const set = (value: T | undefined) => {\n if (value === undefined) {\n // undefinedがセットされる場合にはkeyごと削除\n localStorage.removeItem(key)\n } else {\n const raw = serialize(value)\n localStorage.setItem(key, raw)\n }\n\n // 同一ウィンドウではstorageイベントが発火しないので、手動で発火させる\n const event = new StorageEvent('storage', {\n bubbles: true,\n cancelable: false,\n key,\n url: location.href,\n storageArea: localStorage,\n })\n dispatchEvent(event)\n }\n\n return [state ?? defaultValueMemo, set, ready] as const\n}\n\nfunction deserialize<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T\n } catch {\n // syntax error はすべて文字列として扱う\n return raw as unknown as T\n }\n}\n\nfunction serialize(value: unknown): string {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value)\n }\n}\n\nexport function useMedia(query: string) {\n const [match, setState] = useState<boolean>()\n\n useEffect(() => {\n const matcher = window.matchMedia(query)\n\n const onChange = () => {\n setState(matcher.matches)\n }\n\n matcher.addEventListener('change', onChange)\n\n setState(matcher.matches)\n\n return () => {\n matcher.removeEventListener('change', onChange)\n }\n }, [query])\n\n return match\n}\n","import {\n assertKeyString,\n DEFAULT_ROOT_ATTRIBUTE,\n LOCAL_STORAGE_KEY,\n} from './themeHelper'\n\ninterface Props {\n localStorageKey: string\n rootAttribute: string\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するコードを取得する\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns ソースコードの文字列\n */\nexport function makeSetThemeScriptCode({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Partial<Props> = defaultProps) {\n assertKeyString(localStorageKey)\n assertKeyString(rootAttribute)\n return `'use strict';\n(function () {\n var localStorageKey = '${localStorageKey}'\n var rootAttribute = '${rootAttribute}'\n var currentTheme = localStorage.getItem(localStorageKey);\n if (currentTheme) {\n document.documentElement.dataset[rootAttribute] = currentTheme;\n }\n})();\n`\n}\n\n/**\n * 同期的にテーマをローカルストレージから取得してhtmlの属性に設定するスクリプトタグ\n * @param props localStorageのキー、htmlのdataになる属性のキーを含むオブジェクト\n * @returns\n */\nexport function SetThemeScript({\n localStorageKey = defaultProps.localStorageKey,\n rootAttribute = defaultProps.rootAttribute,\n}: Props) {\n const src = makeSetThemeScriptCode({ localStorageKey, rootAttribute })\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: src,\n }}\n />\n )\n}\n\nconst defaultProps: Props = {\n localStorageKey: LOCAL_STORAGE_KEY,\n rootAttribute: DEFAULT_ROOT_ATTRIBUTE,\n}\n","import { useMemo } from 'react'\n\n/**\n * Join some class names if propsClassName is defined.\n */\nexport function useClassNames(...classNames: (string | undefined)[]) {\n return useMemo(() => classNames.filter((v) => v).join(' '), [classNames])\n}\n","import './index.css'\n\nimport React, {\n ForwardedRef,\n ReactNode,\n forwardRef,\n useMemo,\n type JSX,\n} from 'react'\n\nimport { useClassNames } from '../../_lib/useClassNames'\n\ntype Variant = 'Primary' | 'Default' | 'Overlay' | 'Danger' | 'Navigation'\n\ntype Size = 'S' | 'M'\n\nexport type ButtonProps<T extends React.ElementType = 'button'> = {\n children?: ReactNode\n variant?: Variant\n size?: Size\n fullWidth?: boolean\n isActive?: boolean\n /**\n * The component used for root element.\n * @type T extends React.ElementType = 'button'\n */\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children'>\n\nconst Button = forwardRef(function Button<T extends React.ElementType>(\n {\n variant,\n fullWidth,\n size,\n className,\n component,\n isActive,\n ...props\n }: ButtonProps<T>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n const Component = useMemo(() => component ?? 'button', [component])\n const classNames = useClassNames('charcoal-button', className)\n return (\n <Component\n {...props}\n className={classNames}\n data-variant={variant}\n data-size={size}\n data-full-width={fullWidth}\n data-active={isActive}\n ref={ref}\n />\n )\n}) as <T extends React.ElementType = 'button'>(\n p: 'button' extends T\n ? ButtonProps<'button'>\n : ButtonProps<T> & {\n component: T // required\n },\n) => JSX.Element\nexport default Button\n","import React, { useMemo, forwardRef, ReactNode, type JSX } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type ClickableProps<T extends React.ElementType = 'button'> = {\n children?: ReactNode\n /**\n * The component used for root element.\n * @type T extends React.ElementType = 'button'\n */\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children'>\n\nconst Clickable = forwardRef(function Clickable<T extends React.ElementType>(\n { component, ...props }: ClickableProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>,\n) {\n const className = useClassNames('charcoal-clickable', props.className)\n\n const Component = useMemo(() => component ?? 'button', [component])\n\n return <Component {...props} ref={ref} className={className} />\n}) as <T extends React.ElementType = 'button'>(\n p: ClickableProps<T>,\n) => JSX.Element\nexport default Clickable\n\n/**\n * @deprecated\n * remained for v3 compatibility and will be removed in the future\n */\nexport type ClickableElement = HTMLButtonElement & HTMLAnchorElement\n","import React, { ForwardedRef, forwardRef, useMemo, type JSX } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport type { KnownIconType } from '@charcoal-ui/icons'\n\nimport './index.css'\n\ntype Variant = 'Default' | 'Overlay'\ntype Size = 'XS' | 'S' | 'M'\n\nexport type IconButtonProps<T extends React.ElementType = 'button'> = {\n readonly variant?: Variant\n readonly size?: Size\n readonly icon: keyof KnownIconType\n readonly isActive?: boolean\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children' | 'as'>\n\nconst IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButtonInner<T extends React.ElementType>(\n {\n variant = 'Default',\n size = 'M',\n icon,\n isActive = false,\n component,\n ...rest\n }: IconButtonProps<T>,\n ref: ForwardedRef<HTMLButtonElement>,\n ) {\n validateIconSize(size, icon)\n const Component = useMemo(() => component ?? 'button', [component])\n const classNames = useClassNames('charcoal-icon-button', rest.className)\n\n return (\n <Component\n {...rest}\n ref={ref}\n className={classNames}\n data-size={size}\n data-active={isActive}\n data-variant={variant}\n >\n <pixiv-icon name={icon} />\n </Component>\n )\n },\n) as <T extends React.ElementType = 'button'>(\n p: IconButtonProps<T>,\n) => JSX.Element\n\nexport default IconButton\n\n/**\n * validates matches of size and icon\n */\nfunction validateIconSize(size: Size, icon: keyof KnownIconType) {\n let requiredIconSize: string\n switch (size) {\n case 'XS':\n requiredIconSize = '16'\n break\n case 'S':\n case 'M':\n requiredIconSize = '24'\n break\n }\n // アイコン名は サイズ/名前\n const result = /^\\d*/u.exec(icon)\n if (result == null) {\n throw new Error('Invalid icon name')\n }\n const [iconSize] = result\n if (iconSize !== requiredIconSize) {\n // eslint-disable-next-line no-console\n console.warn(\n `IconButton with size \"${size}\" expect icon size \"${requiredIconSize}, but got \"${iconSize}\"`,\n )\n }\n}\n","import * as React from 'react'\n\nexport interface RadioGroupContext {\n name: string\n selected?: string\n disabled: boolean\n readonly: boolean\n invalid: boolean\n onChange: (next: string) => void\n}\n\nexport const RadioGroupContext = React.createContext<RadioGroupContext>({\n name: undefined as never,\n selected: undefined,\n disabled: false,\n readonly: false,\n invalid: false,\n onChange() {\n throw new Error(\n 'Cannot find onChange() handler. Perhaps you forgot to wrap with <RadioGroup> ?',\n )\n },\n})\n","import './index.css'\n\nimport { forwardRef, memo, useCallback } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\ntype CharcoalRadioInputProps = {\n invalid?: boolean\n onChange?: (value: string) => void\n}\n\ntype InputProps = React.HTMLProps<HTMLInputElement>\n\nexport type RadioInputProps = CharcoalRadioInputProps &\n Omit<InputProps, keyof CharcoalRadioInputProps | 'ref'>\n\nconst RadioInput = forwardRef<HTMLInputElement, RadioInputProps>(\n function RadioInput({ onChange, invalid, className, ...props }, ref) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const el = e.currentTarget\n onChange?.(el.value)\n },\n [onChange],\n )\n\n const classNames = useClassNames('charcoal-radio-input', className)\n\n return (\n // eslint-disable-next-line jsx-a11y/role-supports-aria-props\n <input\n className={classNames}\n ref={ref}\n type=\"radio\"\n onChange={handleChange}\n aria-invalid={invalid}\n {...props}\n />\n )\n },\n)\n\nexport default memo(RadioInput)\n","import './index.css'\n\nimport { memo, forwardRef, useContext } from 'react'\nimport * as React from 'react'\nimport warning from 'warning'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport { RadioGroupContext } from './RadioGroupContext'\nimport RadioInput from './RadioInput'\n\nexport type RadioProps = React.PropsWithChildren<{\n value: string\n disabled?: boolean\n className?: string\n}>\n\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(function RadioInner(\n { value, disabled = false, children, ...props },\n ref,\n) {\n const {\n name,\n selected,\n disabled: isParentDisabled,\n readonly,\n invalid,\n onChange,\n } = useContext(RadioGroupContext)\n\n const classNames = useClassNames('charcoal-radio__label', props.className)\n\n warning(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n name !== undefined,\n `\"name\" is not Provided for <Radio>. Perhaps you forgot to wrap with <RadioGroup> ?`,\n )\n\n const isSelected = value === selected\n const isDisabled = disabled || isParentDisabled\n const isReadonly = readonly && !isSelected\n\n return (\n <label aria-disabled={isDisabled || isReadonly} className={classNames}>\n <RadioInput\n name={name}\n value={value}\n checked={isSelected}\n aria-invalid={invalid}\n onChange={onChange}\n disabled={isDisabled || isReadonly}\n ref={ref}\n />\n {children != null && (\n <div className=\"charcoal-radio__label_div\">{children}</div>\n )}\n </label>\n )\n})\n\nexport default memo(Radio)\n","import './index.css'\n\nimport { forwardRef, useCallback, useMemo, type JSX } from 'react'\nimport * as React from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\nimport { RadioGroupContext } from '../RadioGroupContext'\n\nexport type RadioGroupProps<Value extends string = string> =\n React.PropsWithChildren<{\n className?: string\n value?: Value\n /**\n * aria-label of RadioGroup\n */\n label?: string\n name: string\n onChange(next: Value): void\n disabled?: boolean\n readonly?: boolean\n invalid?: boolean\n ref?: React.Ref<HTMLDivElement>\n 'aria-labelledby'?: React.ComponentProps<'div'>['aria-labelledby']\n 'aria-orientation'?: React.ComponentProps<'div'>['aria-orientation']\n }>\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps<string>>(\n function RadioGroupInner(\n {\n value,\n label,\n name,\n onChange,\n disabled,\n readonly,\n invalid,\n children,\n 'aria-orientation': ariaOrientation = 'vertical',\n ...props\n },\n ref,\n ) {\n const classNames = useClassNames('charcoal-radio-group', props.className)\n\n const handleChange = useCallback(\n (next: string) => {\n onChange(next)\n },\n [onChange],\n )\n\n const contextValue = useMemo(\n () => ({\n name,\n selected: value,\n disabled: disabled ?? false,\n readonly: readonly ?? false,\n invalid: invalid ?? false,\n onChange: handleChange,\n }),\n [disabled, handleChange, invalid, name, readonly, value],\n )\n\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <div\n role=\"radiogroup\"\n aria-disabled={disabled}\n aria-invalid={invalid}\n aria-label={label}\n aria-labelledby={props['aria-labelledby']}\n aria-orientation={ariaOrientation}\n className={classNames}\n ref={ref}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n )\n },\n) as <Value extends string>(props: RadioGroupProps<Value>) => JSX.Element\n","import { createContext } from 'react'\n\ntype MultiSelectGroupContext = {\n name: string\n selected: string[]\n disabled: boolean\n readonly: boolean\n invalid: boolean\n onChange: ({ value, selected }: { value: string; selected: boolean }) => void\n}\n\nexport const MultiSelectGroupContext = createContext<MultiSelectGroupContext>({\n name: undefined as never,\n selected: [],\n disabled: false,\n readonly: false,\n invalid: false,\n onChange() {\n throw new Error(\n 'Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?',\n )\n },\n})\n","import * as React from 'react'\n\nimport '@charcoal-ui/icons'\n// tmp fix for https://github.com/rolldown/tsdown/pull/981\nimport '../../../../icons/css/icon.css'\nimport { calcActualSize } from '@charcoal-ui/icons'\nimport type { IconSizing, PixivIcon, Props } from '@charcoal-ui/icons'\n\nexport interface OwnProps {\n /**\n * @deprecated `fixedSize` を利用してください。\n * `attr()` の数値解釈サポートが限定的なため、リセット CSS だけではレイアウトシフトが防げません。\n */\n unsafeNonGuidelineScale?: number\n /**\n * 固定 px サイズで描画します。ガイドライン外のサイズを利用する場合に推奨される指定方法で、\n * 他のサイズ指定 (`scale` / `unsafeNonGuidelineScale`) よりも常に優先されます。\n *\n * `<Icon>` は同じ値を `--charcoal-icon-size` インライン CSS 変数として自動付与するため、\n * Web Component の hydrate 前後でレイアウトシフトは発生しません。\n */\n fixedSize?: number\n className?: string\n}\n\nexport interface IconProps\n extends OwnProps,\n React.PropsWithoutRef<\n Omit<Props, 'class' | 'unsafe-non-guideline-scale' | 'fixed-size' | 'css'>\n > {}\n\nconst Icon = React.forwardRef<PixivIcon, IconProps>(function IconInner(\n {\n name,\n scale,\n unsafeNonGuidelineScale,\n fixedSize,\n className,\n style: userStyle,\n ...rest\n },\n ref,\n) {\n const actualSize = React.useMemo(\n // IconSizing の排他制約は IconProps の型レベルで保証されるため、内部では緩和する\n () =>\n calcActualSize({\n name,\n scale,\n unsafeNonGuidelineScale,\n fixedSize,\n } as { name: string } & IconSizing),\n [name, scale, unsafeNonGuidelineScale, fixedSize],\n )\n\n const style = React.useMemo(\n () =>\n ({\n ...userStyle,\n '--charcoal-icon-size': `${actualSize}px`,\n }) as React.CSSProperties,\n [actualSize, userStyle],\n )\n\n return (\n <pixiv-icon\n ref={ref}\n name={name}\n scale={scale}\n unsafe-non-guideline-scale={unsafeNonGuidelineScale}\n fixed-size={fixedSize}\n style={style}\n class={`charcoal-icon ${className || ''}`.trim()}\n {...rest}\n />\n )\n})\n\nexport default Icon\n","import { ChangeEvent, useCallback, useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport warning from 'warning'\n\nimport { MultiSelectGroupContext } from './context'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type MultiSelectProps = React.PropsWithChildren<{\n value: string\n disabled?: boolean\n variant?: 'default' | 'overlay'\n className?: string\n onChange?: (payload: { value: string; selected: boolean }) => void\n}>\n\nconst MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(\n function MultiSelectInner(\n {\n value,\n disabled = false,\n onChange,\n variant = 'default',\n className,\n children,\n },\n ref,\n ) {\n const {\n name,\n selected,\n disabled: parentDisabled,\n readonly,\n invalid,\n onChange: parentOnChange,\n } = useContext(MultiSelectGroupContext)\n\n warning(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n name !== undefined,\n `\"name\" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`,\n )\n\n const isSelected = selected.includes(value)\n const isDisabled = disabled || parentDisabled || readonly\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!(event.currentTarget instanceof HTMLInputElement)) {\n return\n }\n if (onChange) onChange({ value, selected: event.currentTarget.checked })\n parentOnChange({ value, selected: event.currentTarget.checked })\n },\n [onChange, parentOnChange, value],\n )\n const classNames = useClassNames('charcoal-multi-select', className)\n return (\n <label aria-disabled={isDisabled} className={classNames}>\n <input\n className=\"charcoal-multi-select-input\"\n name={name}\n value={value}\n type=\"checkbox\"\n checked={isSelected}\n disabled={isDisabled}\n onChange={handleChange}\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n ref={ref}\n />\n <div\n className=\"charcoal-multi-select-overlay\"\n data-overlay={variant === 'overlay'}\n aria-invalid={invalid}\n aria-hidden\n >\n <Icon name=\"24/Check\" fixedSize={16} />\n </div>\n {Boolean(children) && (\n <div className=\"charcoal-multi-select-label\">{children}</div>\n )}\n </label>\n )\n },\n)\n\nexport default memo(MultiSelect)\n\nexport type MultiSelectGroupProps = React.PropsWithChildren<{\n className?: string\n style?: React.CSSProperties\n name: string\n label: string\n selected: string[]\n onChange: (selected: string[]) => void\n disabled?: boolean\n readonly?: boolean\n invalid?: boolean\n}>\n\nexport function MultiSelectGroup({\n className,\n style,\n name,\n label,\n selected,\n onChange,\n disabled = false,\n readonly = false,\n invalid = false,\n children,\n}: MultiSelectGroupProps) {\n const handleChange = useCallback(\n (payload: { value: string; selected: boolean }) => {\n const index = selected.indexOf(payload.value)\n\n if (payload.selected) {\n if (index < 0) {\n onChange([...selected, payload.value])\n }\n } else {\n if (index >= 0) {\n onChange([...selected.slice(0, index), ...selected.slice(index + 1)])\n }\n }\n },\n [onChange, selected],\n )\n\n return (\n <MultiSelectGroupContext.Provider\n value={{\n name,\n selected: Array.from(new Set(selected)),\n disabled,\n readonly,\n invalid,\n onChange: handleChange,\n }}\n >\n <div\n className={className}\n style={style}\n aria-label={label}\n data-testid=\"SelectGroup\"\n >\n {children}\n </div>\n </MultiSelectGroupContext.Provider>\n )\n}\n","import './index.css'\n\nimport { forwardRef, useCallback } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport type CharcoalSwitchProps = {\n onChange?: (checked: boolean) => void\n}\n\ntype InputProps = React.HTMLProps<HTMLInputElement>\n\nexport type SwitchInputProps = CharcoalSwitchProps &\n Omit<InputProps, keyof CharcoalSwitchProps | 'ref'>\n\nconst SwitchInput = forwardRef<\n HTMLInputElement,\n Omit<SwitchInputProps, 'children'>\n>(function SwitchInput({ onChange, className, ...props }, ref) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const el = e.currentTarget\n onChange?.(el.checked)\n },\n [onChange],\n )\n\n const classNames = useClassNames('charcoal-switch-input', className)\n return (\n <input\n ref={ref}\n className={classNames}\n type=\"checkbox\"\n onChange={handleChange}\n {...props}\n />\n )\n})\n\nexport default SwitchInput\n","import * as React from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport const SwitchWithLabel = React.memo(function SwitchWithLabel({\n children,\n className,\n disabled,\n id,\n input,\n}: {\n children: React.ReactNode\n className?: string\n disabled?: boolean\n id?: string\n input: React.ReactNode\n}) {\n const classNames = useClassNames('charcoal-switch__label', className)\n return (\n <label htmlFor={id} className={classNames} aria-disabled={disabled}>\n {input}\n <div className=\"charcoal-switch__label_div\">{children}</div>\n </label>\n )\n})\n","import './index.css'\n\nimport { memo, forwardRef } from 'react'\nimport SwitchInput, { type SwitchInputProps } from './SwitchInput'\nimport { SwitchWithLabel } from './SwitchWithLabel'\nimport { useId } from 'react-aria/useId'\n\nexport type SwitchProps = SwitchInputProps\n\nconst Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { children, onChange, disabled, className, id, ...props },\n ref,\n) {\n const htmlId = useId(id)\n const noChildren = children === undefined\n const input = (\n <SwitchInput\n {...props}\n disabled={disabled}\n className={noChildren ? className : undefined}\n id={htmlId}\n onChange={onChange}\n ref={ref}\n role=\"switch\"\n type=\"checkbox\"\n />\n )\n\n if (noChildren) {\n return input\n }\n\n return (\n <SwitchWithLabel\n className={className}\n disabled={disabled}\n id={htmlId}\n input={input}\n >\n {children}\n </SwitchWithLabel>\n )\n})\n\nexport default memo(Switch)\n","import * as React from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\n\nexport interface FieldLabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {\n readonly className?: string\n readonly label: string\n readonly subLabel?: React.ReactNode\n readonly required?: boolean\n // TODO: 翻訳用のContextで注入する\n readonly requiredText?: string\n}\n\nconst FieldLabel = React.forwardRef<HTMLLabelElement, FieldLabelProps>(\n function FieldLabel(\n {\n style,\n className,\n label,\n required = false,\n requiredText,\n subLabel,\n ...labelProps\n },\n ref,\n ) {\n const classNames = useClassNames('charcoal-field-label-root', className)\n return (\n <div style={style} className={classNames}>\n <label ref={ref} className=\"charcoal-field-label\" {...labelProps}>\n {label}\n </label>\n {required && (\n <div className=\"charcoal-field-label-required-text\">\n {requiredText}\n </div>\n )}\n <div className=\"charcoal-field-label-sub-label\">\n <span>{subLabel}</span>\n </div>\n </div>\n )\n },\n)\n\nexport default FieldLabel\n","/**\n * 今後ポートされる予定の汎用的な関数群\n */\n\n/**\n * Function used to assert a given code path is unreachable\n */\nexport function unreachable(): never\n/**\n * Function used to assert a given code path is unreachable.\n * Very useful for ensuring switches are exhaustive:\n *\n * ```ts\n * switch (a.type) {\n * case Types.A:\n * case Types.B:\n * break\n * default:\n * unreachable(a) // will cause a build error if there was\n * // a Types.C that was not checked\n * }\n * ```\n *\n * @param value Value to be asserted as unreachable\n */\n// NOTE: Uses separate overloads, _not_ `value?: never`, to not allow `undefined` to be passed\n\nexport function unreachable(value: never): never\nexport function unreachable(value?: never): never {\n throw new Error(\n arguments.length === 0\n ? 'unreachable'\n : `unreachable (${JSON.stringify(value)})`,\n )\n}\n\n/**\n * 複数のrefをマージする。\n *\n * forwardRefで受け取ったrefと、コンポーネント内で定義したrefを同じ要素につけたいケースなどで使う\n */\nexport function mergeRefs<T>(...refs: React.Ref<T>[]): React.RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(value)\n } else if (ref !== null) {\n // TODO: use RefObject\n // https://react.dev/blog/2024/04/25/react-19-upgrade-guide#:~:text=%3D%201%3B-,MutableRef,-is%20now%20deprecated\n ;(ref as React.MutableRefObject<T | null>).current = value\n }\n }\n }\n}\n\nexport function countCodePointsInString(string: string) {\n // [...string] とするとproduction buildで動かなくなる\n // cf. https://twitter.com/f_subal/status/1497214727511891972\n return Array.from(string).length\n}\n","import { useEffect } from 'react'\nimport * as React from 'react'\n\nexport function useFocusWithClick(\n containerRef: React.RefObject<HTMLDivElement | null>,\n inputRef: React.RefObject<HTMLInputElement | HTMLTextAreaElement | null>,\n) {\n useEffect(() => {\n const el = containerRef.current\n if (el) {\n const handleDown = (e: MouseEvent) => {\n if (e.target !== inputRef.current) {\n inputRef.current?.focus()\n }\n }\n el.addEventListener('click', handleDown)\n return () => {\n el.removeEventListener('click', handleDown)\n }\n }\n })\n}\n","import { forwardRef } from 'react'\nimport { useClassNames } from './useClassNames'\n\nexport function createDivComponent(mainClassName: string) {\n return forwardRef<HTMLDivElement, React.ComponentPropsWithRef<'div'>>(\n function DivComponent({ className, ...props }, ref) {\n const classNames = useClassNames(mainClassName, className)\n return <div className={classNames} ref={ref} {...props} />\n },\n )\n}\n","import { createDivComponent } from '../../../_lib/createDivComponent'\nimport './index.css'\n\nexport const AssistiveText = createDivComponent(\n 'charcoal-text-field-assistive-text',\n)\n","import './index.css'\n\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString, mergeRefs } from '../../_lib'\nimport { useFocusWithClick } from './useFocusWithClick'\nimport { AssistiveText } from './AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { useVisuallyHidden } from 'react-aria/VisuallyHidden'\nimport { useId } from 'react-aria/useId'\n\nexport type TextFieldProps = {\n prefix?: ReactNode\n suffix?: ReactNode\n\n value?: string\n onChange?: (value: string) => void\n\n showCount?: boolean\n showLabel?: boolean\n assistiveText?: string\n invalid?: boolean\n\n label?: string\n requiredText?: string\n disabled?: boolean\n subLabel?: React.ReactNode\n rdfaPrefix?: string\n\n getCount?: (value: string) => number\n} & Omit<React.ComponentPropsWithoutRef<'input'>, 'prefix' | 'onChange'>\n\nconst TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(\n function SingleLineTextFieldInner(\n {\n assistiveText,\n className,\n disabled = false,\n label = '',\n maxLength,\n onChange,\n prefix = null,\n required,\n requiredText,\n showCount = false,\n showLabel = false,\n subLabel,\n suffix = null,\n type = 'text',\n invalid,\n value,\n getCount = countCodePointsInString,\n ...props\n },\n forwardRef,\n ) {\n const inputRef = useRef<HTMLInputElement>(null)\n\n const { visuallyHiddenProps } = useVisuallyHidden()\n\n const [count, setCount] = useState(getCount(value ?? ''))\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n const count = getCount(value)\n if (maxLength !== undefined && count > maxLength) {\n return\n }\n setCount(count)\n onChange?.(value)\n },\n [getCount, maxLength, onChange],\n )\n\n useEffect(() => {\n setCount(getCount(value ?? ''))\n }, [getCount, value])\n\n const containerRef = useRef(null)\n\n useFocusWithClick(containerRef, inputRef)\n\n const inputId = useId(props.id)\n const describedbyId = useId()\n const labelledbyId = useId()\n\n const showAssistiveText =\n assistiveText != null && assistiveText.length !== 0\n\n const classNames = useClassNames('charcoal-text-field-root', className)\n\n return (\n <div className={classNames} aria-disabled={disabled}>\n <FieldLabel\n htmlFor={inputId}\n id={labelledbyId}\n label={label}\n required={required}\n requiredText={requiredText}\n subLabel={subLabel}\n {...(!showLabel ? visuallyHiddenProps : {})}\n />\n <div\n className=\"charcoal-text-field-container\"\n aria-disabled={disabled === true ? true : undefined}\n data-invalid={invalid === true}\n ref={containerRef}\n >\n {prefix && <div className=\"charcoal-text-field-prefix\">{prefix}</div>}\n <div className=\"charcoal-text-field-input-root\">\n <input\n className=\"charcoal-text-field-input\"\n aria-describedby={showAssistiveText ? describedbyId : undefined}\n aria-invalid={invalid}\n aria-labelledby={labelledbyId}\n id={inputId}\n data-invalid={invalid === true}\n maxLength={maxLength}\n onChange={handleChange}\n disabled={disabled}\n ref={mergeRefs(forwardRef, inputRef)}\n type={type}\n value={value}\n {...props}\n />\n </div>\n {(suffix || showCount) && (\n <div className=\"charcoal-text-field-suffix\">\n {suffix}\n {showCount && (\n <span className=\"charcoal-text-field-line-counter\">\n {maxLength !== undefined ? `${count}/${maxLength}` : count}\n </span>\n )}\n </div>\n )}\n </div>\n {showAssistiveText && (\n <AssistiveText data-invalid={invalid === true} id={describedbyId}>\n {assistiveText}\n </AssistiveText>\n )}\n </div>\n )\n },\n)\n\nexport default TextField\n","import './index.css'\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString, mergeRefs } from '../../_lib'\nimport { useFocusWithClick } from '../TextField/useFocusWithClick'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { useVisuallyHidden } from 'react-aria/VisuallyHidden'\nimport { useId } from 'react-aria/useId'\n\n/**\n * `TextArea` を `imperativeRef` から操作するためのハンドル\n */\nexport type TextAreaImperativeHandle = {\n /**\n * textarea の値を更新し、文字数や高さなどの内部状態を同期する\n */\n setValue: (value: string) => void\n /**\n * textarea の現在の値をもとに、文字数や高さなどの内部状態を同期する\n */\n sync: () => void\n}\n\nexport type TextAreaProps = {\n value?: string\n onChange?: (value: string) => void\n imperativeRef?: React.Ref<TextAreaImperativeHandle>\n\n showCount?: boolean\n showLabel?: boolean\n assistiveText?: string\n invalid?: boolean\n\n label?: string\n requiredText?: string\n disabled?: boolean\n subLabel?: React.ReactNode\n autoHeight?: boolean\n\n maxRows?: number\n\n getCount?: (value: string) => number\n} & Omit<React.ComponentPropsWithoutRef<'textarea'>, 'onChange'>\n\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n function TextAreaInner(\n {\n onChange,\n className,\n value,\n showCount = false,\n showLabel = false,\n label = '',\n requiredText,\n subLabel,\n disabled = false,\n required,\n assistiveText,\n maxLength,\n autoHeight = false,\n rows: initialRows = 4,\n maxRows,\n invalid,\n getCount = countCodePointsInString,\n defaultValue,\n imperativeRef,\n ...props\n },\n forwardRef,\n ) {\n const isUncontrolled = value === undefined\n // `null` is invalid for TextAreaProps, but may arrive at runtime. Keep the\n // pre-f710d512 nullish fallback so getCount is never called with null.\n const countValue = value ?? defaultValue?.toString() ?? ''\n const [rows, setRows] = useState(initialRows)\n const [count, setCount] = useState(getCount(countValue))\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const containerRef = useRef(null)\n useFocusWithClick(containerRef, textareaRef)\n const { visuallyHiddenProps } = useVisuallyHidden()\n\n const isEnableAutoHeight = useMemo(\n () => autoHeight || (maxRows && maxRows >= 0),\n [autoHeight, maxRows],\n )\n const classNames = useClassNames('charcoal-text-area-root', className)\n const showAssistiveText =\n assistiveText != null && assistiveText.length !== 0\n\n const syncHeight = useCallback(\n (textarea: HTMLTextAreaElement) => {\n const currentRows =\n (`${textarea.value}\\n`.match(/\\n/gu)?.length ?? 0) || 1\n const hasValidMaxRows = maxRows !== undefined && maxRows >= 1\n const nextRows = initialRows <= currentRows ? currentRows : initialRows\n\n if (!hasValidMaxRows) {\n setRows(nextRows)\n return\n }\n\n setRows(Math.min(nextRows, maxRows))\n },\n [initialRows, maxRows],\n )\n\n const syncTextAreaState = useCallback(\n (textarea: HTMLTextAreaElement) => {\n const count = getCount(textarea.value)\n\n if (isUncontrolled) {\n setCount(count)\n }\n\n if (isEnableAutoHeight) {\n syncHeight(textarea)\n }\n\n return count\n },\n [getCount, isEnableAutoHeight, isUncontrolled, syncHeight],\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.currentTarget.value\n const count = getCount(value)\n if (maxLength !== undefined && count > maxLength) {\n return\n }\n\n syncTextAreaState(e.currentTarget)\n onChange?.(value)\n },\n [getCount, maxLength, onChange, syncTextAreaState],\n )\n\n useImperativeHandle(\n imperativeRef,\n () => ({\n setValue: (value: string) => {\n if (textareaRef.current === null) {\n return\n }\n\n textareaRef.current.value = value\n syncTextAreaState(textareaRef.current)\n },\n sync: () => {\n if (textareaRef.current !== null) {\n syncTextAreaState(textareaRef.current)\n }\n },\n }),\n [syncTextAreaState],\n )\n\n const textAreaId = useId(props.id)\n const describedbyId = useId()\n const labelledbyId = useId()\n\n useEffect(() => {\n // 制御コンポーネントの時の挙動\n if (!isUncontrolled) {\n setCount(getCount(countValue))\n }\n\n // autoHeight同期(valueが変更された時にsyncHeightしたい)\n if (isEnableAutoHeight && textareaRef.current !== null) {\n syncHeight(textareaRef.current)\n }\n }, [\n isUncontrolled,\n countValue,\n getCount,\n isEnableAutoHeight,\n textareaRef,\n syncHeight,\n ])\n\n return (\n <div className={classNames} aria-disabled={disabled}>\n <FieldLabel\n htmlFor={textAreaId}\n id={labelledbyId}\n label={label}\n required={required}\n requiredText={requiredText}\n subLabel={subLabel}\n {...(!showLabel ? visuallyHiddenProps : {})}\n />\n <div\n className=\"charcoal-text-area-container\"\n aria-disabled={disabled === true ? 'true' : undefined}\n aria-invalid={invalid === true}\n ref={containerRef}\n style={{\n '--charcoal-text-area-rows': `${showCount ? rows + 1 : rows}`,\n }}\n >\n <textarea\n className=\"charcoal-text-area-textarea\"\n aria-describedby={showAssistiveText ? describedbyId : undefined}\n aria-invalid={invalid}\n aria-labelledby={labelledbyId}\n id={textAreaId}\n maxLength={maxLength}\n data-no-bottom-padding={showCount}\n onChange={handleChange}\n ref={mergeRefs(forwardRef, textareaRef)}\n rows={rows}\n value={value}\n disabled={disabled}\n defaultValue={defaultValue}\n {...props}\n />\n {showCount && (\n <span className=\"charcoal-text-area-counter\">\n {maxLength !== undefined ? `${count}/${maxLength}` : count}\n </span>\n )}\n </div>\n {showAssistiveText && (\n <AssistiveText data-invalid={invalid === true} id={describedbyId}>\n {assistiveText}\n </AssistiveText>\n )}\n </div>\n )\n },\n)\n\nexport default TextArea\n","import * as React from 'react'\n\nexport function useForwardedRef<T>(ref: React.ForwardedRef<T>) {\n const innerRef = React.useRef<T>(null)\n\n React.useEffect(() => {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(innerRef.current)\n } else {\n // eslint-disable-next-line react-compiler/react-compiler\n ref.current = innerRef.current\n }\n })\n\n return innerRef\n}\n","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","import * as React from 'react'\n\n/**\n * ModalBackgroundのElementが入ったコンテキスト\n */\nexport const ModalBackgroundContext = React.createContext<HTMLElement | null>(\n null,\n)\n","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","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","import { useEffect, useLayoutEffect } from 'react'\n\n/**\n * SSR では useLayoutEffect が警告を出すため、サーバーでは useEffect にフォールバックする\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n","import {\n useCallback,\n useEffect,\n useState,\n RefObject,\n TransitionEvent,\n} from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\n\n// index.css の transition-duration と一致させること\nexport const MODAL_TRANSITION_DURATION_MS = 400\n\ntype AnimationState = 'exited' | 'entering' | 'entered' | 'exiting'\n\n/**\n * アニメーション終了時の状態遷移。\n * 途中で open/close が切り替わって state が既に進んでいた場合は何もしない\n */\nfunction settle(state: AnimationState): AnimationState {\n if (state === 'entering') return 'entered'\n if (state === 'exiting') return 'exited'\n return state\n}\n\n/**\n * CSS transition によるモーダルの開閉アニメーションを管理する。\n * exit アニメーションが終わるまで DOM をマウントしたままにする\n *\n * @param isOpen モーダルを開くべきか\n * @param enabled アニメーションを行うか(false なら即座にマウント・アンマウント)\n * @param backgroundRef 背景要素。マウント直後の layout flush に使う\n * @param dialogRef transform をアニメーションさせる要素(ダイアログ)\n */\nexport function useTransitionPresence(\n isOpen: boolean,\n enabled: boolean,\n backgroundRef: RefObject<HTMLElement>,\n dialogRef: RefObject<HTMLElement>,\n) {\n // 開いた状態で初回マウントされた場合もアニメーションさせるため常に 'exited' から始める。\n // enabled でない場合は下の layout effect が描画前に 'entered' へ進める\n const [state, setState] = useState<AnimationState>('exited')\n\n useIsomorphicLayoutEffect(() => {\n if (!enabled) {\n setState(isOpen ? 'entered' : 'exited')\n } else if (isOpen) {\n // 閉じた状態のスタイルを確定させ、enter の transition が発火するようにする。\n // dialogRef は子コンポーネントの passive effect で張られるためこの時点では\n // まだ古い/null のことがあり、同じ commit で同期的に張られる背景要素を読む\n if (backgroundRef.current) void backgroundRef.current.offsetHeight\n setState((s) => (s === 'exited' || s === 'exiting' ? 'entering' : s))\n } else {\n setState((s) => (s === 'exited' ? s : 'exiting'))\n }\n }, [isOpen, enabled, backgroundRef])\n\n // safety net: transitionend が来なくても(トランジションのキャンセル、\n // reduced-motion、バックグラウンドタブ等)モーダルが永遠に残らないようにする\n const isAnimating = state === 'entering' || state === 'exiting'\n useEffect(() => {\n if (!isAnimating) return\n // transitionend と同時刻に発火して競合しないよう少し遅らせる\n const timer = setTimeout(\n () => setState(settle),\n MODAL_TRANSITION_DURATION_MS + 100,\n )\n return () => clearTimeout(timer)\n }, [isAnimating, state])\n\n // 背景 div に付ける。ダイアログの transform の transitionend だけが\n // 開閉アニメーションの終了を意味する(他のトランジションもバブルしてくるため絞り込む)。\n // propertyName は index.css がアニメーションさせるプロパティと一致させること。\n // なお enter 完了直後の close では、完了済み enter の transitionend が\n // 'exiting' へ遷移した後に届いて exit アニメーションが省略される可能性が\n // 理論上あるが、サブフレーム幅のレースで実害は見た目のみのため許容している\n const handleTransitionEnd = useCallback(\n (e: TransitionEvent<HTMLElement>) => {\n const isDialogSlide =\n e.target === dialogRef.current && e.propertyName === 'transform'\n if (isDialogSlide) {\n setState(settle)\n }\n },\n [dialogRef],\n )\n\n return {\n // enabled でないときは isOpen だけで即座にマウント・アンマウントする\n // (state 経由にすると close 時に開いたツリーを丸ごと 1 回余計に描画する)\n isPresent: enabled ? isOpen || state !== 'exited' : isOpen,\n animationState: state,\n handleTransitionEnd,\n }\n}\n","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","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","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","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","import { Key, useEffect, useRef } from 'react'\nimport Popover, { PopoverProps } from './Popover'\n\ntype DropdownPopoverProps = PopoverProps & {\n value?: Key\n}\n\n/**\n * DropdownSelectorの選択肢をを表示するためのPopover\n * triggerRefの要素と同じ幅になる\n * 表示の際にvalueが等しいDropdownMenuItemを中央に表示する\n */\nexport function DropdownPopover({ children, ...props }: DropdownPopoverProps) {\n const ref = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (props.isOpen && ref.current && props.triggerRef.current) {\n ref.current.style.width = `${props.triggerRef.current.clientWidth}px`\n }\n }, [props.triggerRef, props.isOpen])\n\n useEffect(() => {\n if (props.isOpen) {\n if (props.value !== undefined && props.value !== '') {\n // windowのスクロールを維持したまま選択肢をPopoverの中心に表示する\n const windowScrollY = window.scrollY\n const windowScrollX = window.scrollX\n const selectedElement = document.querySelector(\n `[data-key=\"${props.value.toString()}\"]`,\n ) as HTMLElement | undefined\n selectedElement?.focus()\n window.scrollTo(windowScrollX, windowScrollY)\n } else {\n const el = ref.current?.querySelector(\"[role='option']\")\n if (el instanceof HTMLElement) {\n el.focus()\n }\n }\n }\n }, [props.value, props.isOpen])\n\n return (\n <Popover\n isOpen={props.isOpen}\n onClose={props.onClose}\n popoverRef={ref}\n triggerRef={props.triggerRef}\n inertWorkaround={props.inertWorkaround}\n >\n {children}\n </Popover>\n )\n}\n","import { ReactNode } from 'react'\nimport * as React from 'react'\n\n/**\n * DropdownSelectorの選択中の要素をレンダリングするため、\n * 選択中のMenuItemを再帰的に探索しReactNodeを返す。\n *\n * @param children\n * @param value\n * @param values\n * @returns\n */\nexport function findPreviewRecursive(\n children: ReactNode,\n value: string,\n): ReactNode | undefined {\n const childArray = React.Children.toArray(children)\n for (let i = 0; i < childArray.length; i++) {\n const child = childArray[i]\n if (React.isValidElement(child)) {\n if ('value' in child.props) {\n const childValue = (child.props as { value: string }).value\n if (childValue === value && 'children' in child.props) {\n const children = (child.props as { children: ReactNode }).children\n return children\n }\n }\n if ('children' in child.props) {\n const children = findPreviewRecursive(\n (child.props as { children: ReactNode }).children,\n value,\n )\n if (children !== undefined) {\n return children\n }\n }\n }\n }\n}\n","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","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","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","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","import './index.css'\n\nimport { ForwardedRef, forwardRef, ReactNode, useMemo, type JSX } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\nexport type CustomJSXElement =\n | keyof JSX.IntrinsicElements\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | React.JSXElementConstructor<any>\n\nexport type ListItemProps<T extends React.ElementType = 'li'> = {\n children?: ReactNode\n as?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children' | 'as'>\n\nconst ListItem = forwardRef(function ListItem<T extends React.ElementType>(\n { as, className, ...props }: ListItemProps<T>,\n ref: ForwardedRef<HTMLLIElement>,\n) {\n const Component = useMemo(() => as ?? 'li', [as])\n const classNames = useClassNames('charcoal-list-item', className)\n return <Component className={classNames} ref={ref} {...props} />\n}) as <T extends React.ElementType = 'li'>(p: ListItemProps<T>) => JSX.Element\n\nexport default ListItem\n","/**\n * elementをparentのスクロールビューに入るようにスクロールする\n * parentがスクロール可能でなければelementが見えるようにスクロールする\n *\n * @param element\n * @param parent\n */\nexport function handleFocusByKeyBoard(element: Element, parent: HTMLElement) {\n const isScrollable = parent.scrollHeight > parent.clientHeight\n if (isScrollable) {\n const rect = element.getBoundingClientRect()\n const parentRect = parent.getBoundingClientRect()\n if (rect.bottom > parentRect.bottom) {\n parent.scrollTo({\n top: parent.scrollTop + rect.bottom - parentRect.bottom,\n })\n } else if (rect.top < parentRect.top) {\n parent.scrollTo({\n top: parent.scrollTop - (parentRect.top - rect.top),\n })\n }\n } else {\n scrollIfNeeded(element)\n }\n}\n\n/**\n * 要素が画面外にあればスクロールする、画面内にあればスクロールしない\n * @param element\n */\nfunction scrollIfNeeded(element: Element) {\n const elementRect = element.getBoundingClientRect()\n const isVisible =\n elementRect.top >= 0 &&\n elementRect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight)\n\n if (!isVisible) {\n element.scrollIntoView({\n block: 'nearest',\n })\n }\n}\n","import { useCallback, useContext } from 'react'\nimport { handleFocusByKeyBoard } from './handleFocusByKeyBoard'\nimport { MenuListContext } from '../../MenuList/MenuListContext'\n\n/**\n * MenuListContextに含まれるvalue間で上下キーでfocusを移動できる\n * EnterキーでMenuListContextに値を設定する\n * 上記2つの処理を含む処理(handleKeyDown)と、Enterキーを押下した処理(setContextValue)を配列で返す\n * @param value\n * @returns\n */\nexport function useMenuItemHandleKeyDown(\n value?: string,\n): [(e: React.KeyboardEvent<HTMLElement>) => void, () => void] {\n const { setValue, root, propsArray } = useContext(MenuListContext)\n const setContextValue = useCallback(() => {\n if (value !== undefined) setValue(value)\n }, [value, setValue])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter') {\n setContextValue()\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n const isForward = e.key === 'ArrowDown'\n // prevent scroll\n e.preventDefault()\n if (!propsArray || value === undefined) return\n const values = propsArray\n .map((props) => props.value)\n .filter((v) => v) as string[]\n let index = values.indexOf(value)\n if (index === -1) return\n\n for (let n = 0; n < values.length; n++) {\n const focusValue = isForward\n ? // prev or last\n index + 1 >= values.length\n ? values[0]\n : values[index + 1]\n : // next or first\n index - 1 < 0\n ? values[values.length - 1]\n : values[index - 1]\n const next = root?.current?.querySelector(\n `[data-key='${focusValue}']`,\n )\n\n if (next instanceof HTMLElement) {\n if (next.ariaDisabled === 'true') {\n index += isForward ? 1 : -1\n continue\n }\n next.focus({ preventScroll: true })\n if (root?.current?.parentElement) {\n handleFocusByKeyBoard(next, root.current.parentElement)\n }\n break\n }\n }\n }\n },\n [setContextValue, propsArray, value, root],\n )\n return [handleKeyDown, setContextValue]\n}\n","import { ForwardedRef, forwardRef } from 'react'\nimport ListItem, { ListItemProps } from '../ListItem'\nimport { useMenuItemHandleKeyDown } from './internals/useMenuItemHandleKeyDown'\n\nexport type MenuItemProps<T extends React.ElementType = 'li'> = {\n value?: string\n disabled?: boolean\n} & ListItemProps<T>\n\n/**\n * 上下キーでフォーカス移動でき、エンターキーで選択できるリストの項目\n * 基本的に`<MenuList>`, `<MenuGroup>`と合わせて使用する\n */\nconst MenuItem = forwardRef(function MenuItem<\n T extends React.ElementType = 'li',\n>(\n { className: _, value, disabled, ...props }: MenuItemProps<T>,\n ref: ForwardedRef<HTMLLIElement>,\n) {\n const [handleKeyDown, setContextValue] = useMenuItemHandleKeyDown(value)\n return (\n // @ts-expect-error TODO: fix mismatch between MenuItemProps and ListItemProps\n <ListItem\n {...props}\n ref={ref}\n data-key={value}\n onKeyDown={handleKeyDown}\n onClick={disabled === true ? undefined : setContextValue}\n tabIndex={-1}\n aria-disabled={disabled}\n role=\"option\"\n >\n {props.children}\n </ListItem>\n )\n})\nexport default MenuItem\n","import './index.css'\n\nimport MenuItem, { MenuItemProps } from '../MenuItem'\nimport { MenuListContext } from '../MenuList/MenuListContext'\nimport { ReactNode, useContext } from 'react'\nimport Icon from '../../Icon'\n\nexport type DropdownMenuItemProps = Omit<MenuItemProps, 'as'> & {\n secondary?: ReactNode\n contentFullWidth?: boolean\n}\n\n/**\n * DropdownSelectorの選択肢として使うMenuItem\n */\nexport default function DropdownMenuItem(props: DropdownMenuItemProps) {\n const { value: ctxValue } = useContext(MenuListContext)\n const isSelected = props.value === ctxValue\n const { children, secondary, ...rest } = props\n\n const fullWidthClassName = props.contentFullWidth\n ? 'charcoal-dropdown-selector-menu-fullwidth'\n : ''\n\n return (\n <MenuItem {...rest} aria-selected={isSelected}>\n <div className={fullWidthClassName}>\n <div\n className={`charcoal-dropdown-selector-menu-item-container ${\n fullWidthClassName\n }`}\n >\n {isSelected && (\n <Icon\n className=\"charcoal-dropdown-selector-menu-item-icon\"\n name=\"16/Check\"\n />\n )}\n <span\n className={`charcoal-dropdown-selector-menu-item ${fullWidthClassName}`}\n data-selected={isSelected}\n >\n {children}\n </span>\n </div>\n {secondary && (\n <span className=\"charcoal-dropdown-selector-menu-secondary\">\n {secondary}\n </span>\n )}\n </div>\n </MenuItem>\n )\n}\n","import './index.css'\n\nimport MenuItem from '../MenuItem'\nimport { Divider } from '../Divider'\n\ntype MenuItemGroupChild = React.ReactElement<typeof MenuItem | typeof Divider>\n\nexport type MenuItemGroupProps = {\n text: string\n children: MenuItemGroupChild | MenuItemGroupChild[]\n}\n\nexport default function MenuItemGroup(props: MenuItemGroupProps) {\n return (\n <li className=\"charcoal-menu-item-group\" role=\"presentation\">\n <span>{props.text}</span>\n <ul role=\"group\">{props.children}</ul>\n </li>\n )\n}\n","import { createContext, useContext } from 'react'\nimport * as React from 'react'\nimport { RadioGroupState } from 'react-stately/useRadioGroupState'\n\nconst RadioContext = createContext<RadioGroupState | null>(null)\n\ntype RadioProviderProps = React.PropsWithChildren<{\n value: RadioGroupState\n}>\nexport const RadioProvider: React.FC<RadioProviderProps> = ({\n value,\n children,\n}) => {\n return <RadioContext.Provider value={value}>{children}</RadioContext.Provider>\n}\nexport const useRadioContext = () => {\n const state = useContext(RadioContext)\n\n if (state === null)\n throw new Error('`<RadioProvider>` is not likely mounted.')\n\n return state\n}\n","import { ReactNode, forwardRef, memo, useMemo, useRef } from 'react'\nimport * as React from 'react'\nimport { RadioProvider, useRadioContext } from './RadioGroupContext'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\nimport {\n AriaRadioGroupProps,\n AriaRadioProps,\n useRadio,\n useRadioGroup,\n} from 'react-aria/useRadioGroup'\n\nimport { useRadioGroupState } from 'react-stately/useRadioGroupState'\n\ntype SegmentedControlItem = {\n label: React.ReactNode\n value: string\n disabled?: boolean\n}\n\nexport type SegmentedControlProps = {\n readonly id?: string\n readonly name?: string\n readonly disabled?: boolean\n readonly readonly?: boolean\n readonly required?: boolean\n readonly className?: string\n readonly uniformSegmentWidth?: boolean\n readonly fullWidth?: boolean\n\n readonly value?: string\n readonly defaultValue?: string\n\n readonly data: string[] | SegmentedControlItem[]\n\n readonly onChange?: (value: string) => void\n}\n\nconst SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControlInner(props, ref) {\n const className = useClassNames(\n 'charcoal-segmented-control',\n props.className,\n )\n\n const ariaRadioGroupProps = useMemo<AriaRadioGroupProps>(\n () => ({\n ...props,\n isDisabled: props.disabled,\n isReadOnly: props.readonly,\n isRequired: props.required,\n 'aria-label': props.name,\n }),\n [props],\n )\n const state = useRadioGroupState(ariaRadioGroupProps)\n const { radioGroupProps } = useRadioGroup(ariaRadioGroupProps, state)\n const segmentedControlItems = useMemo<SegmentedControlItem[]>(() => {\n return props.data.map((d) =>\n typeof d === 'string' ? { value: d, label: d } : d,\n )\n }, [props.data])\n\n return (\n <div\n ref={ref}\n {...radioGroupProps}\n className={className}\n data-uniform-segment-width={props.uniformSegmentWidth}\n data-full-width={props.fullWidth}\n >\n <RadioProvider value={state}>\n {segmentedControlItems.map((item) => (\n <Segmented\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n uniformSegmentWidth={props.uniformSegmentWidth}\n >\n {item.label}\n </Segmented>\n ))}\n </RadioProvider>\n </div>\n )\n },\n)\n\nexport default memo(SegmentedControl)\n\ntype RadioProps = {\n value: string\n disabled?: boolean\n children?: ReactNode\n uniformSegmentWidth?: boolean\n fullWidth?: boolean\n}\n\nconst Segmented = (props: RadioProps) => {\n const state = useRadioContext()\n const ref = useRef<HTMLInputElement>(null)\n const ariaRadioProps = useMemo<AriaRadioProps>(\n () => ({\n value: props.value,\n isDisabled: props.disabled,\n children: props.children,\n }),\n [props],\n )\n\n const { inputProps, isDisabled, isSelected } = useRadio(\n ariaRadioProps,\n state,\n ref,\n )\n\n return (\n <label\n className=\"charcoal-segmented-control-radio__label\"\n aria-disabled={isDisabled || state.isReadOnly}\n data-checked={isSelected}\n data-uniform-segment-width={props.uniformSegmentWidth}\n data-full-width={props.fullWidth}\n >\n <input\n className=\"charcoal-segmented-control-radio__input\"\n {...inputProps}\n ref={ref}\n />\n {props.children}\n </label>\n )\n}\n","import './index.css'\n\nimport { forwardRef, memo, useCallback } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\ntype CharcoalCheckboxInputProps = {\n invalid?: boolean\n onChange?: (checked: boolean) => void\n rounded?: boolean\n}\n\ntype InputProps = React.HTMLProps<HTMLInputElement>\n\nexport type CheckboxInputProps = CharcoalCheckboxInputProps &\n Omit<InputProps, keyof CharcoalCheckboxInputProps | 'ref'>\n\nconst CheckboxInput = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function CheckboxInput(\n { onChange, checked, invalid, className, rounded, ...props },\n ref,\n ) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const el = e.currentTarget\n onChange?.(el.checked)\n },\n [onChange],\n )\n\n const classNames = useClassNames('charcoal-checkbox-input', className)\n\n return (\n <input\n className={classNames}\n ref={ref}\n type=\"checkbox\"\n onChange={handleChange}\n aria-invalid={invalid}\n checked={checked}\n data-rounded={rounded}\n {...props}\n />\n )\n },\n)\n\nexport default memo(CheckboxInput)\n","import React from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport const CheckboxWithLabel = React.memo(function CheckboxWithLabel({\n className,\n children,\n input,\n id,\n disabled,\n}: {\n children: React.ReactNode\n input: React.ReactNode\n disabled?: boolean\n className?: string\n id?: string\n}) {\n const classNames = useClassNames('charcoal-checkbox__label', className)\n return (\n <label htmlFor={id} aria-disabled={disabled} className={classNames}>\n {input}\n <div className=\"charcoal-checkbox__label_div\">{children}</div>\n </label>\n )\n})\n","import './index.css'\n\nimport { forwardRef, memo } from 'react'\nimport CheckboxInput, { CheckboxInputProps } from './CheckboxInput'\nimport { CheckboxWithLabel } from './CheckboxWithLabel'\nimport { useId } from 'react-aria/useId'\n\nexport type CheckboxProps = CheckboxInputProps\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function Checkbox({ disabled, className, id, children, ...props }, ref) {\n const htmlId = useId(id)\n const noChildren = children === undefined\n const input = (\n <CheckboxInput\n {...props}\n className={noChildren ? className : undefined}\n disabled={disabled}\n id={htmlId}\n ref={ref}\n />\n )\n if (noChildren) {\n return input\n }\n return (\n <CheckboxWithLabel\n className={className}\n disabled={disabled}\n id={htmlId}\n input={input}\n >\n {children}\n </CheckboxWithLabel>\n )\n },\n)\n\nexport default memo(Checkbox)\n","import React, { forwardRef, memo, useMemo, ForwardedRef, type JSX } from 'react'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nimport { useObjectRef } from 'react-aria/useObjectRef'\nimport { useLink } from 'react-aria'\n\ntype SizeMap = {\n S: 32\n M: 40\n}\n\nexport type TagItemProps<T extends React.ElementType = 'a'> = {\n label: string\n translatedLabel?: string\n bgColor?: string\n bgImage?: string\n status?: 'default' | 'active' | 'inactive'\n size?: keyof SizeMap\n disabled?: boolean\n /**\n * The component used for root element.\n * @type T extends React.ElementType = 'a'\n */\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children' | 'disabled'>\n\nconst TagItem = forwardRef<HTMLAnchorElement, TagItemProps>(\n function TagItemInner<T extends React.ElementType>(\n {\n component,\n label,\n translatedLabel,\n bgColor = '#7ACCB1',\n bgImage,\n size = 'M',\n status = 'default',\n disabled,\n 'aria-disabled': ariaDisabled,\n ...props\n }: TagItemProps<T>,\n _ref: ForwardedRef<HTMLAnchorElement>,\n ) {\n const ref = useObjectRef(_ref)\n\n const hasTranslatedLabel =\n translatedLabel !== undefined && translatedLabel.length > 0\n const className = useClassNames(\n 'charcoal-tag-item',\n 'charcoal-tag-item__bg',\n props.className,\n )\n\n const bgVariant =\n bgImage !== undefined && bgImage.length > 0 ? 'image' : 'color'\n const bg = bgVariant === 'color' ? bgColor : `url(${bgImage ?? ''})`\n\n const Component = useMemo(() => component ?? 'a', [component])\n const isButton = Component === 'button'\n\n const { linkProps } = useLink(\n {\n isDisabled: disabled,\n elementType: typeof Component === 'string' ? Component : 'a',\n },\n ref,\n )\n\n const disabledProps = isButton\n ? { disabled, 'aria-disabled': ariaDisabled }\n : linkProps\n\n return (\n <Component\n {...props}\n {...disabledProps}\n ref={ref}\n className={className}\n data-state={status}\n data-bg-variant={bgVariant}\n data-size={hasTranslatedLabel ? 'M' : size}\n style={{ '--charcoal-tag-item-bg': bg }}\n >\n <div\n className=\"charcoal-tag-item__label\"\n data-has-translate={hasTranslatedLabel}\n >\n {hasTranslatedLabel && (\n <span className=\"charcoal-tag-item__label__translated\">\n {translatedLabel}\n </span>\n )}\n <span\n className=\"charcoal-tag-item__label__text\"\n data-has-translate={hasTranslatedLabel}\n >\n {label}\n </span>\n </div>\n {status === 'active' && <Icon name=\"16/Remove\" />}\n </Component>\n )\n },\n) as <T extends React.ElementType = 'a'>(p: TagItemProps<T>) => JSX.Element\n\nexport default memo(TagItem)\n","import { ReactNode } from 'react'\nimport Icon from '../Icon'\n\nimport './index.css'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport type HintTextContext = 'page' | 'section'\nexport interface HintTextProps {\n children: ReactNode\n context?: HintTextContext\n className?: string\n}\n\nexport default function HintText({\n children,\n context = 'section',\n className,\n}: HintTextProps) {\n const classNames = useClassNames('charcoal-hint-text', className)\n\n return (\n <div className={classNames} data-context={context}>\n <div className=\"charcoal-hint-text-icon\">\n <Icon name=\"16/Info\" />\n </div>\n <p className=\"charcoal-hint-text-message\">{children}</p>\n </div>\n )\n}\n","// https://github.com/fernandopasik/react-children-utilities/blob/971d8a0324e6183734d8d1af9a65dbad18ab3d00/src/lib/onlyText.ts\n\nimport { Children, isValidElement, ReactElement, ReactNode } from 'react'\n\nexport const getFinalTitle = (\n showTooltip: boolean,\n title?: string,\n children?: ReactNode,\n): string | undefined => {\n // 1. 表示フラグが false なら即終了\n if (!showTooltip) {\n return undefined\n }\n\n // 2. タイトルの候補を取得\n const resolvedTitle = title ?? onlyText(children)\n\n // 3. resolvedTitle が falsy (undefined, null, \"\") なら終了\n if (!resolvedTitle) {\n return undefined\n }\n\n // 4. 有効な文字列のみを返す\n return resolvedTitle\n}\n\nconst hasChildren = (\n element: ReactNode,\n): element is ReactElement<{ children: ReactNode[] }> =>\n isValidElement<{ children?: ReactNode[] }>(element) &&\n Boolean(element.props.children)\n\nexport const childToString = (\n child?: number | string | boolean | {} | null,\n): string => {\n if (\n typeof child === 'undefined' ||\n child === null ||\n typeof child === 'boolean'\n ) {\n return ''\n }\n\n if (JSON.stringify(child) === '{}') {\n return ''\n }\n\n return (child as string | number).toString()\n}\n\nexport const onlyText = (children: ReactNode): string => {\n if (!Array.isArray(children) && !isValidElement(children)) {\n return childToString(children)\n }\n\n return Children.toArray(children).reduce(\n (text: string, child: ReactNode): string => {\n let newText = ''\n\n if (isValidElement(child) && hasChildren(child)) {\n newText = onlyText(child.props.children)\n } else if (isValidElement(child) && !hasChildren(child)) {\n newText = ''\n } else {\n newText = childToString(child)\n }\n\n return text.concat(newText)\n },\n '',\n )\n}\n","import './index.css'\n\nimport { getFinalTitle } from './helper'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { CSSProperties } from 'react'\n\nexport type TextEllipsisProps = {\n lineHeight?: number\n lineLimit?: number\n /**\n * @default 'auto'\n */\n hyphens?: CSSProperties['hyphens']\n /**\n * html title属性を付与。false のときは付与せず、空文字のときは表示しない\n * @default true\n */\n showTooltip?: boolean\n /**\n *\n * @default false\n * true: use white-space: nowrap if lineLimit is 1\n * false: use -webkit-line-clamp if lineLimit is 1\n */\n useNowrap?: boolean\n} & React.ComponentPropsWithoutRef<'div'>\n\n/**\n * 複数行のテキストに表示行数制限を設けて`...`で省略する\n */\nexport default function TextEllipsis({\n lineHeight,\n lineLimit = 1,\n children,\n title,\n hyphens = 'auto',\n showTooltip = true,\n useNowrap = false,\n ...props\n}: TextEllipsisProps) {\n 'use memo'\n const finalTitle = getFinalTitle(showTooltip, title, children)\n\n const classNames = useClassNames('charcoal-text-ellipsis', props.className)\n const hasLineHeight = lineHeight !== undefined\n\n return (\n <div\n {...props}\n className={classNames}\n data-line-limit={lineLimit}\n data-has-line-height={hasLineHeight}\n {...(useNowrap ? { 'data-use-nowrap': useNowrap } : {})}\n style={\n {\n ...(hasLineHeight && {\n '--charcoal-text-ellipsis-line-height': `${lineHeight}px`,\n }),\n '--charcoal-text-ellipsis-line-limit': lineLimit,\n hyphens,\n ...props.style,\n } satisfies React.CSSProperties\n }\n title={finalTitle}\n >\n {children}\n </div>\n )\n}\n","import { useDebugValue } from 'react'\nimport warning from 'warning'\nimport type { PageRangeDisplayed } from './PaginationContext'\n\nexport function usePaginationWindow(\n page: number,\n pageCount: number,\n pageRangeDisplayed: PageRangeDisplayed = 7,\n) {\n 'use memo'\n // ページャーのリンク生成例:\n //\n // < [ 1 ] [*2*] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] [ 2 ] [ 3 ] [*4*] [ 5 ] [ 6 ] [ 7 ] >\n //\n // < [ 1 ] ... [ 4 ] [*5*] [ 6 ] [ 7 ] [ 8 ] >\n //\n // < [ 1 ] ... [ 99 ] [*100*] [ 101 ] [ 102 ] [ 103 ] >\n //\n // < [ 1 ] ... [ 99 ] [ 100 ] [ 101 ] [ 102 ] [*103*]\n //\n // [*1*] [ 2 ] >\n //\n // デザインの意図: 前後移動時のカーソル移動を最小限にする。\n\n if (process.env.NODE_ENV !== 'production') {\n warning((page | 0) === page, `\\`page\\` must be integer (${page})`)\n warning(\n (pageCount | 0) === pageCount,\n `\\`pageCount\\` must be integer (${pageCount})`,\n )\n warning(\n pageRangeDisplayed === 5 || pageRangeDisplayed === 7,\n `\\`pageRangeDisplayed\\` must be 5 or 7 (${pageRangeDisplayed})`,\n )\n }\n\n const visibleFirstPage = 1\n const visibleLastPage = Math.min(\n pageCount,\n Math.max(page + Math.floor(pageRangeDisplayed / 2), pageRangeDisplayed),\n )\n\n const window = (() => {\n if (visibleLastPage <= pageRangeDisplayed) {\n // 表示範囲が1-7ページなら省略は無い。\n return Array.from(\n { length: 1 + visibleLastPage - visibleFirstPage },\n (_, i) => visibleFirstPage + i,\n )\n } else {\n const start = visibleLastPage - (pageRangeDisplayed - 1) + 2\n // 表示範囲が1-7ページを超えるなら、\n // - 1ページ目は固定で表示する\n // - 2ページ目から現在のページの直前までは省略する\n return [\n visibleFirstPage,\n '...' as const,\n ...Array.from(\n { length: 1 + visibleLastPage - start },\n (_, i) => start + i,\n ),\n ]\n }\n })()\n\n useDebugValue(window)\n\n return window\n}\n","import { createContext, useContext } from 'react'\n\nexport type Size = 'S' | 'M'\n\nexport type PageRangeDisplayed = 5 | 7\n\nexport type LinkComponentProps = {\n href: string\n className?: string\n children?: React.ReactNode\n}\n\nexport type PaginationContextValue<T extends React.ElementType = 'a'> = {\n page: number\n pageCount: number\n size: Size\n isLinkMode: boolean\n makeUrl?: (page: number) => string\n LinkComponent: T\n makeClickHandler: (value: number) => () => void\n linkProps?: Omit<React.ComponentPropsWithoutRef<T>, 'href' | 'children'>\n}\n\nexport const PaginationContext = createContext<PaginationContextValue<\n React.ElementType<LinkComponentProps>\n> | null>(null)\n\nexport function usePaginationContext<\n T extends React.ElementType = 'a',\n>(): PaginationContextValue<T> {\n const context = useContext(PaginationContext)\n if (context == null) {\n throw new Error(\n 'Pagination components must be used within a Pagination component',\n )\n }\n return context as PaginationContextValue<T>\n}\n","import './index.css'\n\nimport { usePaginationWindow } from './helper'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport {\n PaginationContext,\n usePaginationContext,\n type LinkComponentProps,\n type PaginationContextValue,\n type PageRangeDisplayed,\n type Size,\n} from './PaginationContext'\n\ntype NavButtonProps = {\n direction: 'prev' | 'next'\n ariaLabel: IconButtonProps['aria-label']\n}\n\nfunction NavButton({ direction, ariaLabel }: NavButtonProps) {\n 'use memo'\n const {\n page,\n pageCount,\n size,\n isLinkMode,\n makeUrl,\n LinkComponent,\n makeClickHandler,\n linkProps,\n } = usePaginationContext()\n\n const isPrev = direction === 'prev'\n const targetPage = isPrev\n ? Math.max(1, page - 1)\n : Math.min(pageCount, page + 1)\n const disabled = isPrev ? page <= 1 : page >= pageCount\n const navButtonClassName = useClassNames(\n 'charcoal-pagination-nav-button',\n linkProps?.className,\n )\n\n return (\n <IconButton\n icon={isPrev ? '24/Prev' : '24/Next'}\n size={size}\n /* Use data-hidden, not [hidden]: Tailwind preflight's `[hidden] { display: none !important }` would clobber `visibility: hidden` and collapse the layout space. */\n data-hidden={disabled || undefined}\n aria-label={ariaLabel}\n {...(isLinkMode && makeUrl\n ? {\n component: LinkComponent as 'a',\n href: makeUrl(targetPage),\n 'aria-disabled': disabled,\n ...linkProps,\n className: navButtonClassName,\n }\n : {\n disabled,\n onClick: makeClickHandler(targetPage),\n className: navButtonClassName,\n })}\n />\n )\n}\n\nfunction PageItem({ value }: { value: number | string }) {\n 'use memo'\n const {\n page,\n size,\n isLinkMode,\n makeUrl,\n LinkComponent,\n makeClickHandler,\n linkProps,\n } = usePaginationContext()\n const pageItemClassName = useClassNames(\n 'charcoal-pagination-button',\n linkProps?.className,\n )\n\n // 省略記号\n if (value === '...') {\n return (\n <IconButton\n icon=\"24/Dot\"\n size={size}\n disabled\n className=\"charcoal-pagination-spacer\"\n aria-hidden\n />\n )\n }\n // 現在ページ(クリック不可)\n if (value === page) {\n return (\n <span className=\"charcoal-pagination-button\" aria-current=\"page\">\n {value}\n </span>\n )\n }\n if (typeof value !== 'number') return null\n // リンクモード: ページへのリンク\n if (isLinkMode && makeUrl) {\n return (\n <LinkComponent\n href={makeUrl(value)}\n {...linkProps}\n className={pageItemClassName}\n >\n {value}\n </LinkComponent>\n )\n }\n // ボタンモード: クリックでページ遷移\n return (\n <button\n type=\"button\"\n className=\"charcoal-pagination-button\"\n onClick={makeClickHandler(value)}\n >\n {value}\n </button>\n )\n}\n\ninterface PaginationCommonProps {\n page: number\n pageCount: number\n pageRangeDisplayed?: PageRangeDisplayed\n size?: Size\n ariaLabelPrev?: string\n ariaLabelNext?: string\n}\n\ntype NavProps = Omit<React.ComponentPropsWithoutRef<'nav'>, 'onChange'>\n\n/**\n * Pagination component. Use either `onChange` (button mode) or `makeUrl` (link mode).\n *\n * @example\n * // Button mode - for client-side state\n * <Pagination page={1} pageCount={10} onChange={setPage} />\n *\n * @example\n * // Link mode - for server routing / static pages\n * <Pagination page={1} pageCount={10} makeUrl={(p) => `?page=${p}`} />\n *\n * @example\n * // Link mode with custom component (e.g. Next.js Link)\n * <Pagination page={1} pageCount={10} makeUrl={(p) => `?page=${p}`} component={Link} />\n *\n * @example\n * // Link mode with linkProps (e.g. Next.js scroll)\n * <Pagination page={1} pageCount={10} makeUrl={(p) => `?page=${p}`} component={Link} linkProps={{ scroll: 'marker' }} />\n */\nexport type PaginationProps<T extends React.ElementType = 'a'> =\n PaginationCommonProps &\n NavProps &\n (\n | {\n onChange(newPage: number): void\n makeUrl?: never\n component?: never\n linkProps?: undefined\n }\n | {\n makeUrl(page: number): string\n onChange?: never\n /**\n * The component used for link elements. Receives `href`, `className`, and `children`.\n * @default 'a'\n */\n component?: T\n /**\n * Additional props passed to all link elements (e.g. Next.js Link's scroll, prefetch).\n */\n linkProps?: Omit<\n React.ComponentPropsWithoutRef<T>,\n 'href' | 'children'\n >\n }\n )\n\nexport default function Pagination<T extends React.ElementType = 'a'>({\n page,\n pageCount,\n pageRangeDisplayed,\n size = 'M',\n onChange,\n makeUrl,\n component: LinkComponent = 'a' as T,\n linkProps,\n className,\n ariaLabelNext = 'Next',\n ariaLabelPrev = 'Previous',\n ...navProps\n}: PaginationProps<T>) {\n 'use memo'\n const window = usePaginationWindow(page, pageCount, pageRangeDisplayed)\n const isLinkMode = makeUrl !== undefined\n const makeClickHandler = (value: number) => () => onChange?.(value)\n const classNames = useClassNames('charcoal-pagination', className)\n\n const contextValue = {\n page,\n pageCount,\n size,\n isLinkMode,\n makeUrl,\n LinkComponent,\n makeClickHandler,\n linkProps,\n }\n\n return (\n <PaginationContext.Provider\n value={\n contextValue as PaginationContextValue<\n React.ElementType<LinkComponentProps>\n >\n }\n >\n <nav\n data-size={size}\n aria-label=\"Pagination\"\n {...navProps}\n className={classNames}\n >\n <NavButton direction=\"prev\" ariaLabel={ariaLabelPrev} />\n {window.map((p) => (\n <PageItem key={p} value={p} />\n ))}\n <NavButton direction=\"next\" ariaLabel={ariaLabelNext} />\n </nav>\n </PaginationContext.Provider>\n )\n}\n","// 中央検出(左右 50% を除外)。root は item の親(scroller)から導出する。\nconst CENTER_ROOT_MARGIN = '0px -50% 0px -50%'\n\ntype CenterEntry = {\n observer: IntersectionObserver\n callbacks: Map<Element, () => void>\n}\n\n// root(= el.parentElement)ごとに observer を1つ共有する。\nconst byRoot = new Map<Element, CenterEntry>()\n\n/**\n * `el` がその親(= scroller)の中央ラインに重なったら `onEnter` を呼ぶ。同一 root の\n * IntersectionObserver を共有する singleton。返り値で監視解除(最後の1つで disconnect)。\n * SSR / 非対応環境では no-op。\n */\nexport function observeCenter(\n el: HTMLElement,\n onEnter: () => void,\n): () => void {\n // window で SSR を弾く。polyfill が global に IntersectionObserver を生やしていても\n // サーバー上では observe しない。\n if (\n typeof window === 'undefined' ||\n typeof IntersectionObserver === 'undefined'\n )\n return () => undefined\n const root = el.parentElement\n if (!root) return () => undefined\n\n let entry = byRoot.get(root)\n if (!entry) {\n const callbacks = new Map<Element, () => void>()\n const observer = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (e.isIntersecting) callbacks.get(e.target)?.()\n }\n },\n { root, rootMargin: CENTER_ROOT_MARGIN, threshold: 0 },\n )\n entry = { observer, callbacks }\n byRoot.set(root, entry)\n }\n entry.callbacks.set(el, onEnter)\n entry.observer.observe(el)\n\n return () => {\n const e = byRoot.get(root)\n if (!e) return\n e.callbacks.delete(el)\n e.observer.unobserve(el)\n if (e.callbacks.size === 0) {\n e.observer.disconnect()\n byRoot.delete(root)\n }\n }\n}\n","// 全 el で単一の ResizeObserver を共有する singleton。\nlet observer: ResizeObserver | null = null\nconst callbacks = new Map<Element, () => void>()\n\nfunction getObserver(): ResizeObserver | null {\n // window で SSR を弾く。polyfill が global に ResizeObserver を生やしていても\n // サーバー上では observe しない。\n if (typeof window === 'undefined' || typeof ResizeObserver === 'undefined')\n return null\n if (!observer) {\n observer = new ResizeObserver((entries) => {\n for (const e of entries) callbacks.get(e.target)?.()\n })\n }\n return observer\n}\n\n/**\n * `el` のサイズ変化で `cb` を呼ぶ。全要素で単一の ResizeObserver を共有する singleton。\n * 返り値で監視解除(最後の1つで disconnect)。SSR / 非対応環境では no-op。\n */\nexport function observeResize(el: Element, cb: () => void): () => void {\n const obs = getObserver()\n if (!obs) return () => undefined\n callbacks.set(el, cb)\n obs.observe(el)\n return () => {\n callbacks.delete(el)\n obs.unobserve(el)\n if (callbacks.size === 0) {\n obs.disconnect()\n observer = null\n }\n }\n}\n","import { useEffect, useRef, type ReactNode } from 'react'\nimport type { CarouselStore } from './carouselStore'\nimport { observeCenter } from './intersectionObserver'\nimport { observeResize } from './resizeObserver'\n\nexport type CarouselItemProps = Readonly<{\n index: number\n store: CarouselStore\n onResize: () => void\n children: ReactNode\n}>\n\nexport const CarouselItem = ({\n index,\n store,\n onResize,\n children,\n}: CarouselItemProps) => {\n const ref = useRef<HTMLDivElement>(null)\n\n // activeIndex: 自分が中央に来たら store に報告する(root は親=scroller から導出)。\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return observeCenter(el, () => store.dispatch({ type: 'setActive', index }))\n }, [index, store])\n\n // scrollToItem: 自分宛ての命令でだけ自己スクロールする(再レンダーしない)。\n useEffect(() => {\n let lastNonce = store.getSnapshot().scroll?.nonce ?? 0\n return store.subscribe(() => {\n const scroll = store.getSnapshot().scroll\n if (!scroll || scroll.index !== index || scroll.nonce === lastNonce)\n return\n lastNonce = scroll.nonce\n ref.current?.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n block: 'nearest',\n })\n })\n }, [index, store])\n\n // 遅延コンテンツ: 自分のサイズ変化を onResize で通知する。\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return observeResize(el, onResize)\n }, [onResize])\n\n return (\n <div ref={ref} className=\"charcoal-carousel__item\">\n {children}\n </div>\n )\n}\n","export type Store<State, Action> = Readonly<{\n dispatch: (action: Action) => void\n subscribe: (listener: () => void) => () => void\n getSnapshot: () => State\n}>\n\nexport function createStore<State, Action>(\n reducer: (state: State, action: Action) => State,\n initialState: State,\n): Store<State, Action> {\n let state = initialState\n const listeners = new Set<() => void>()\n\n return {\n dispatch(action) {\n state = reducer(state, action)\n for (const listener of listeners) listener()\n },\n subscribe(listener) {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n getSnapshot: () => state,\n }\n}\n","import { createStore, type Store } from './store'\n\nexport type CarouselState = Readonly<{\n activeIndex: number\n canPrev: boolean\n canNext: boolean\n scroll: { index: number; nonce: number } | null\n}>\n\nexport type CarouselAction =\n | { type: 'setActive'; index: number }\n | { type: 'setScrollState'; canPrev: boolean; canNext: boolean }\n | { type: 'requestScroll'; index: number }\n\nexport type CarouselStore = Store<CarouselState, CarouselAction>\n\nexport const INITIAL_CAROUSEL_STATE: CarouselState = {\n activeIndex: 0,\n canPrev: false,\n canNext: false,\n scroll: null,\n}\n\nconst reducer = (\n state: CarouselState,\n action: CarouselAction,\n): CarouselState => {\n switch (action.type) {\n case 'setActive':\n return state.activeIndex === action.index\n ? state\n : { ...state, activeIndex: action.index }\n case 'setScrollState':\n return state.canPrev === action.canPrev &&\n state.canNext === action.canNext\n ? state\n : { ...state, canPrev: action.canPrev, canNext: action.canNext }\n case 'requestScroll':\n return {\n ...state,\n scroll: { index: action.index, nonce: (state.scroll?.nonce ?? 0) + 1 },\n }\n }\n}\n\nexport function createCarouselStore(): CarouselStore {\n return createStore(reducer, INITIAL_CAROUSEL_STATE)\n}\n","import { useCallback, useEffect, useRef, type RefObject } from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\nimport type { CarouselStore } from './carouselStore'\nimport type { ScrollAlign, ScrollStep } from './index'\n\nconst INTERACTION_EVENTS = ['pointerdown', 'wheel', 'touchstart'] as const\n\nexport type CarouselScrollerOptions = Readonly<{\n align: ScrollAlign\n offset: number\n scrollStep: ScrollStep\n onScroll?: (left: number) => void\n onResize?: (width: number) => void\n onScrollStateChange?: (canScroll: boolean) => void\n}>\n\nexport type CarouselScrollerResult = Readonly<{\n scrollByStep: (direction: 'prev' | 'next') => void\n onItemResize: () => void\n resetScroll: () => void\n}>\n\nexport function useCarouselScroller(\n scrollerRef: RefObject<HTMLElement | null>,\n store: CarouselStore,\n itemCount: number,\n options: CarouselScrollerOptions,\n): CarouselScrollerResult {\n const { align, offset, scrollStep, onScroll, onResize, onScrollStateChange } =\n options\n const initialScrollActive = useRef(true)\n\n // コールバックは最新参照を ref に保持し、リスナーの貼り直しを避ける。\n const callbacksRef = useRef({ onScroll, onResize, onScrollStateChange })\n useEffect(() => {\n callbacksRef.current = { onScroll, onResize, onScrollStateChange }\n })\n\n // onScrollStateChange は canScroll(=canPrev||canNext) が変化した時だけ発火する。\n const prevCanScroll = useRef<boolean | null>(null)\n\n const updateScrollState = useCallback(() => {\n const el = scrollerRef.current\n if (!el) return\n const { scrollLeft, scrollWidth, clientWidth } = el\n const canPrev = scrollLeft > 1\n const canNext = scrollLeft < scrollWidth - clientWidth - 1\n store.dispatch({ type: 'setScrollState', canPrev, canNext })\n const canScroll = canPrev || canNext\n if (prevCanScroll.current !== canScroll) {\n prevCanScroll.current = canScroll\n callbacksRef.current.onScrollStateChange?.(canScroll)\n }\n }, [scrollerRef, store])\n\n const applyInitialScroll = useCallback(() => {\n const el = scrollerRef.current\n if (!el || !initialScrollActive.current) return\n const maxScroll = el.scrollWidth - el.clientWidth\n let left = offset\n switch (align) {\n case 'center':\n left = maxScroll / 2 + offset\n break\n case 'right':\n left = maxScroll + offset\n break\n }\n // scrollLeft 代入は CSS の scroll-behavior: smooth の対象になり\n // 初期位置決めがアニメーションしてしまうため、instant で確定させる。\n el.scrollTo({\n left: Math.max(0, Math.min(left, maxScroll)),\n behavior: 'instant',\n })\n }, [scrollerRef, align, offset])\n\n // canPrev/canNext: scroll で更新。onScroll もここから発火。itemCount 変化で貼り直し。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el) return\n updateScrollState()\n const handleScroll = () => {\n updateScrollState()\n callbacksRef.current.onScroll?.(el.scrollLeft)\n }\n el.addEventListener('scroll', handleScroll, { passive: true })\n return () => el.removeEventListener('scroll', handleScroll)\n }, [scrollerRef, updateScrollState, itemCount])\n\n // scroller 幅の変化で onResize(clientWidth) を通知し、状態と初期位置を再計算する。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => {\n applyInitialScroll()\n updateScrollState()\n callbacksRef.current.onResize?.(el.clientWidth)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [scrollerRef, applyInitialScroll, updateScrollState])\n\n // 初期スクロール適用 + ユーザー操作で打ち切り。\n useIsomorphicLayoutEffect(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n // 初期位置適用後の scrollLeft で canPrev/canNext を確定させる\n // (center/right 初期化で scroll イベント待ちにならないように)。\n updateScrollState()\n const el = scrollerRef.current\n if (!el) return\n const stop = () => {\n initialScrollActive.current = false\n }\n for (const type of INTERACTION_EVENTS) el.addEventListener(type, stop, true)\n return () => {\n for (const type of INTERACTION_EVENTS)\n el.removeEventListener(type, stop, true)\n }\n }, [scrollerRef, applyInitialScroll, updateScrollState, itemCount])\n\n const onItemResize = useCallback(() => {\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n // defaultScroll の初期位置へ戻す(命令的 API: CarouselHandlerRef.resetScroll)。\n const resetScroll = useCallback(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n const scrollByStep = useCallback(\n (direction: 'prev' | 'next') => {\n const el = scrollerRef.current\n if (!el) return\n initialScrollActive.current = false\n const { clientWidth, scrollWidth, scrollLeft } = el\n // 進む量(px)の絶対値。符号は direction で付ける。\n const delta =\n typeof scrollStep === 'function'\n ? scrollStep({ clientWidth, scrollWidth, scrollLeft, direction })\n : clientWidth * scrollStep\n el.scrollBy({\n left: direction === 'next' ? delta : -delta,\n behavior: 'smooth',\n })\n },\n [scrollerRef, scrollStep],\n )\n\n return { scrollByStep, onItemResize, resetScroll }\n}\n","import './index.css'\n\nimport {\n Children,\n forwardRef,\n isValidElement,\n memo,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport { mergeProps, useFocusRing, useKeyboard } from 'react-aria'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport IconButton from '../IconButton'\nimport { CarouselItem as CarouselSlide } from './CarouselItem'\nimport {\n createCarouselStore,\n INITIAL_CAROUSEL_STATE,\n type CarouselState,\n} from './carouselStore'\nimport { useCarouselScroller } from './useCarouselScroller'\n\nconst getServerSnapshot = (): CarouselState => INITIAL_CAROUSEL_STATE\n\nexport type ScrollAlign = 'left' | 'center' | 'right'\n\nexport type ScrollSnapType = 'none' | 'proximity' | 'mandatory'\n\nexport type ScrollSnapAlign = 'center' | 'start'\n\nexport type ScrollSnap = Readonly<{\n type?: ScrollSnapType\n align?: ScrollSnapAlign\n}>\n\nexport type ScrollStepContext = Readonly<{\n clientWidth: number\n scrollWidth: number\n scrollLeft: number\n direction: 'prev' | 'next'\n}>\n\nexport type ScrollStep = number | ((ctx: ScrollStepContext) => number)\n\n// 命令的 API。ref 経由で初期位置へのリセットを公開する(react-sandbox 互換)。\nexport type CarouselHandlerRef = {\n resetScroll: () => void\n}\n\nexport type CarouselProps = Readonly<{\n className?: string\n hasGradient?: boolean\n fullWidth?: boolean\n navigationButtons?: boolean\n indicator?: boolean\n size?: 'S' | 'M'\n // 進む量。number は clientWidth に対する比率、function は進む px を直接返す。\n scrollStep?: ScrollStep\n // スクロールスナップ。未指定時は size 基準(M=none / S=mandatory)、align=center。\n // M の none は sandbox 同等に 0.75×表示幅ちょうど進む(スナップで着地を吸着しない)。\n scrollSnap?: ScrollSnap\n // react-sandbox 互換のコールバック。\n onScroll?: (left: number) => void\n onResize?: (width: number) => void\n onScrollStateChange?: (canScroll: boolean) => void\n defaultScroll?: { align?: ScrollAlign; offset?: number }\n // 1 直接子要素 = 1 スライド(react-sandbox 互換)。\n children: ReactNode\n}>\n\ntype Direction = 'prev' | 'next'\n\nconst DEFAULT_SCROLL_STEP = 0.75\n\nconst NAV_ICON = {\n prev: '24/Prev',\n next: '24/Next',\n} as const\n\ntype NavigationButtonProps = Readonly<{\n direction: Direction\n canScroll: boolean\n onScroll: (direction: Direction) => void\n}>\n\nconst CarouselNavigationButton = ({\n direction,\n canScroll,\n onScroll,\n}: NavigationButtonProps) => {\n const handleClick = useCallback(() => {\n onScroll(direction)\n }, [onScroll, direction])\n return (\n <IconButton\n variant=\"Overlay\"\n size=\"S\"\n icon={NAV_ICON[direction]}\n aria-label={direction === 'prev' ? 'Previous' : 'Next'}\n disabled={!canScroll}\n onClick={handleClick}\n className=\"charcoal-carousel__navigation__item\"\n data-direction={direction}\n data-hidden={!canScroll}\n />\n )\n}\n\ntype IndicatorItemProps = Readonly<{\n index: number\n isActive: boolean\n onSelect: (index: number) => void\n}>\n\nconst CarouselIndicatorItem = ({\n index,\n isActive,\n onSelect,\n}: IndicatorItemProps) => {\n const handleClick = useCallback(() => {\n onSelect(index)\n }, [onSelect, index])\n return (\n <button\n className=\"charcoal-carousel__indicator__item\"\n data-active={isActive}\n aria-current={isActive || undefined}\n aria-label={`Go to slide ${index + 1}`}\n onClick={handleClick}\n />\n )\n}\n\nconst Carousel = forwardRef<CarouselHandlerRef, CarouselProps>(function Render(\n {\n size = 'M',\n navigationButtons,\n indicator,\n hasGradient = false,\n fullWidth = false,\n scrollStep = DEFAULT_SCROLL_STEP,\n scrollSnap,\n onScroll,\n onResize,\n onScrollStateChange,\n defaultScroll: { align = 'left', offset = 0 } = {},\n children,\n ...props\n }: CarouselProps,\n ref,\n) {\n const className = useClassNames('charcoal-carousel', props.className)\n const showNavigationButtons = navigationButtons ?? size === 'M'\n const showIndicator = indicator ?? size === 'S'\n const snapType = scrollSnap?.type ?? (size === 'S' ? 'mandatory' : 'none')\n const snapAlign = scrollSnap?.align ?? 'center'\n\n // 直接子要素 1 つを 1 スライドとして数える。key は子要素の key を引き継ぐ\n // (toArray が付与する接頭辞付き key。無ければ index)。\n const slides = Children.toArray(children)\n const slideKeys = slides.map((slide, i) =>\n isValidElement(slide) && slide.key != null ? slide.key : i,\n )\n\n const scrollerRef = useRef<HTMLDivElement>(null)\n const [store] = useState(createCarouselStore)\n\n const { scrollByStep, onItemResize, resetScroll } = useCarouselScroller(\n scrollerRef,\n store,\n slides.length,\n { align, offset, scrollStep, onScroll, onResize, onScrollStateChange },\n )\n\n useImperativeHandle(ref, () => ({ resetScroll }), [resetScroll])\n\n const { activeIndex, canPrev, canNext } = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n getServerSnapshot,\n )\n\n const scrollToItem = useCallback(\n (index: number) => store.dispatch({ type: 'requestScroll', index }),\n [store],\n )\n\n // ←/→ でスクロール。コンテナにフォーカスがある時のみ。\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n scrollByStep('next')\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n scrollByStep('prev')\n } else {\n e.continuePropagation()\n }\n },\n })\n\n const {\n focusProps: scrollerFocusProps,\n isFocusVisible: scrollerFocusVisible,\n } = useFocusRing()\n\n // ナビゲーションボタン表示用。クリックで残留したフォーカス(pointer 由来)では\n // 表示し続けないよう、キーボード由来のフォーカスのみを検知する。\n const { focusProps: rootFocusProps, isFocusVisible: rootFocusVisible } =\n useFocusRing({ within: true })\n\n return (\n <div\n {...rootFocusProps}\n className={className}\n data-size={size}\n data-has-gradient={hasGradient}\n data-full-width={fullWidth}\n data-indicator={showIndicator}\n data-scroll-snap-type={snapType}\n data-scroll-snap-align={snapAlign}\n data-can-prev={canPrev}\n data-can-next={canNext}\n data-focus-visible-within={rootFocusVisible || undefined}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label=\"Carousel\"\n >\n {/* フォーカスリングは viewport に描く(理由は index.css の同セレクタ参照) */}\n <div\n className=\"charcoal-carousel__viewport\"\n data-focus-visible={scrollerFocusVisible || undefined}\n >\n <div\n {...mergeProps(scrollerFocusProps, keyboardProps)}\n ref={scrollerRef}\n className=\"charcoal-carousel__scroller\"\n tabIndex={0}\n >\n {slides.map((slide, i) => (\n <CarouselSlide\n key={slideKeys[i]}\n index={i}\n store={store}\n onResize={onItemResize}\n >\n {slide}\n </CarouselSlide>\n ))}\n </div>\n\n <div\n className=\"charcoal-carousel__navigation\"\n data-visible={showNavigationButtons}\n aria-hidden={!showNavigationButtons}\n >\n <CarouselNavigationButton\n direction=\"prev\"\n canScroll={canPrev}\n onScroll={scrollByStep}\n />\n <CarouselNavigationButton\n direction=\"next\"\n canScroll={canNext}\n onScroll={scrollByStep}\n />\n </div>\n </div>\n\n <div\n className=\"charcoal-carousel__indicator\"\n data-visible={showIndicator}\n aria-hidden={!showIndicator}\n >\n {slides.map((_, i) => (\n <CarouselIndicatorItem\n key={slideKeys[i]}\n index={i}\n isActive={i === activeIndex}\n onSelect={scrollToItem}\n />\n ))}\n </div>\n </div>\n )\n})\n\nCarousel.displayName = 'Carousel'\n\nexport default memo(Carousel)\n"],"mappings":"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"}
|