@charcoal-ui/react 5.2.0 → 5.3.0-beta.2

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["OriginSSRProvider","defaultProps: Props","Button","Clickable","requiredIconSize: string","React","RadioInput","RadioInput","React","Icon","SwitchInput","React","SwitchWithLabel","Switch","SwitchInput","React","FieldLabel","mergeRefs","React","value","count","FieldLabel","forwardRef","rows","value","count","FieldLabel","mergeRefs","forwardRef","React","Dialog","forwardRef","React","React","React","IconButton","LoadingSpinnerIcon","React","children","React","propsArray: DropdownMenuItemProps[]","FieldLabel","Icon","ListItem","MenuItem","ListItem","MenuItem","Icon","RadioProvider: React.FC<RadioProviderProps>","CheckboxInput","CheckboxWithLabel","Checkbox","CheckboxInput","Icon","Icon"],"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/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"],"sourcesContent":["import { SSRProvider as OriginSSRProvider } from '@react-aria/ssr'\nimport { version, Fragment } from 'react'\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 { 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/**\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 = themeSetter(),\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 useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\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'\nimport type { PixivIcon, Props } from '@charcoal-ui/icons'\n\nexport interface OwnProps {\n unsafeNonGuidelineScale?: number\n className?: string\n}\n\nexport interface IconProps\n extends OwnProps,\n React.PropsWithoutRef<\n Omit<Props, 'class' | 'unsafe-non-guideline-scale' | 'css'>\n > {}\n\nconst Icon = React.forwardRef<PixivIcon, IconProps>(function IconInner(\n { name, scale, unsafeNonGuidelineScale, className, ...rest },\n ref,\n) {\n return (\n <pixiv-icon\n ref={ref}\n name={name}\n scale={scale}\n unsafe-non-guideline-scale={unsafeNonGuidelineScale}\n class={className}\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\" unsafe-non-guideline-scale={16 / 24} />\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 { useId } from '@react-aria/utils'\nimport SwitchInput, { type SwitchInputProps } from './SwitchInput'\nimport { SwitchWithLabel } from './SwitchWithLabel'\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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString } from '../../_lib'\nimport { useFocusWithClick } from './useFocusWithClick'\nimport { mergeRefs, useId } from '@react-aria/utils'\nimport { AssistiveText } from './AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\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 <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 {(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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString, mergeRefs } from '../../_lib'\nimport { useFocusWithClick } from '../TextField/useFocusWithClick'\nimport { useId } from '@react-aria/utils'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport type TextAreaProps = {\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 autoHeight?: boolean\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 invalid,\n getCount = countCodePointsInString,\n ...props\n },\n forwardRef,\n ) {\n const { visuallyHiddenProps } = useVisuallyHidden()\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const [count, setCount] = useState(getCount(value ?? ''))\n const [rows, setRows] = useState(initialRows)\n\n const syncHeight = useCallback(\n (textarea: HTMLTextAreaElement) => {\n const rows = (`${textarea.value}\\n`.match(/\\n/gu)?.length ?? 0) || 1\n setRows(initialRows <= rows ? rows : initialRows)\n },\n [initialRows],\n )\n\n const nonControlled = value === undefined\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value\n const count = getCount(value)\n if (maxLength !== undefined && count > maxLength) {\n return\n }\n if (nonControlled) {\n setCount(count)\n }\n if (autoHeight && textareaRef.current !== null) {\n syncHeight(textareaRef.current)\n }\n onChange?.(value)\n },\n [autoHeight, getCount, maxLength, nonControlled, onChange, syncHeight],\n )\n\n useEffect(() => {\n setCount(getCount(value ?? ''))\n }, [getCount, value])\n\n useEffect(() => {\n if (autoHeight && textareaRef.current !== null) {\n syncHeight(textareaRef.current)\n }\n }, [autoHeight, syncHeight])\n\n const containerRef = useRef(null)\n\n useFocusWithClick(containerRef, textareaRef)\n\n const textAreaId = useId(props.id)\n const describedbyId = useId()\n const labelledbyId = useId()\n\n const classNames = useClassNames('charcoal-text-area-root', className)\n\n const showAssistiveText =\n assistiveText != null && assistiveText.length !== 0\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 {...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/dialog'\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 {\n AriaModalOverlayProps,\n ModalOverlayAria,\n ariaHideOutside,\n useOverlay,\n useOverlayFocusContain,\n} from '@react-aria/overlays'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\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 { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport { Overlay } from '@react-aria/overlays'\nimport type { AriaDialogProps } from '@react-types/dialog'\nimport { animated, useTransition, easings } from 'react-spring'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { useObjectRef } from '@react-aria/utils'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\n\nimport './index.css'\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 transition = useTransition(isOpen, {\n from: {\n transform: 'translateY(100%)',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n overflow: 'hidden',\n },\n enter: {\n transform: 'translateY(0%)',\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n },\n update: {\n overflow: 'auto',\n },\n leave: {\n transform: 'translateY(100%)',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n overflow: 'hidden',\n },\n config: transitionEnabled\n ? { duration: 400, easing: easings.easeOutQuart }\n : { duration: 0 },\n })\n\n const bgRef = React.useRef<HTMLDivElement>(null)\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 return transition(\n ({ backgroundColor, overflow, transform }, item) =>\n item && (\n <Overlay portalContainer={portalContainer}>\n {/* https://github.com/pmndrs/react-spring/issues/1515 */}\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <animated.div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={\n transitionEnabled\n ? { backgroundColor, overflow, zIndex }\n : { zIndex }\n }\n data-bottom-sheet={bottomSheet}\n onClick={handleClick}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n {/* https://github.com/pmndrs/react-spring/issues/1515 */}\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <AnimatedDialog\n ref={ref}\n {...modalProps}\n style={transitionEnabled ? { transform } : {}}\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 </AnimatedDialog>\n </ModalBackgroundContext.Provider>\n </animated.div>\n </Overlay>\n ),\n )\n})\n\nconst AnimatedDialog = animated(Dialog)\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 { DismissButton, Overlay, usePopover } from '@react-aria/overlays'\nimport { ModalBackgroundContext } from '../../Modal/ModalBackgroundContext'\nimport { usePreventScroll } from './usePreventScroll'\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\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 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 >\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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { useId } from '@react-aria/utils'\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}\n\nexport default function DropdownSelector({\n onChange,\n showLabel = false,\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\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 >\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 >\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 { useContext } from 'react'\nimport Icon from '../../Icon'\n\nexport type DropdownMenuItemProps = Omit<MenuItemProps, 'as'>\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, ...rest } = props\n\n return (\n <MenuItem {...rest} aria-selected={isSelected}>\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\"\n data-selected={isSelected}\n >\n {children}\n </span>\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 type { RadioGroupState } from '@react-stately/radio'\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 { useRadioGroupState } from '@react-stately/radio'\nimport {\n AriaRadioGroupProps,\n AriaRadioProps,\n useRadio,\n useRadioGroup,\n} from '@react-aria/radio'\nimport { RadioProvider, useRadioContext } from './RadioGroupContext'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\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\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 ref={ref} {...radioGroupProps} className={className}>\n <RadioProvider value={state}>\n {segmentedControlItems.map((item) => (\n <Segmented\n key={item.value}\n value={item.value}\n disabled={item.disabled}\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}\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 >\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 { useId } from '@react-aria/utils'\nimport CheckboxInput, { CheckboxInputProps } from './CheckboxInput'\nimport { CheckboxWithLabel } from './CheckboxWithLabel'\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 { useObjectRef } from '@react-aria/utils'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\n\ntype SizeMap = {\n S: 32\n M: 40\n}\n\nexport type TagItemProps<T extends React.ElementType = 'button'> = {\n label: string\n translatedLabel?: string\n bgColor?: string\n bgImage?: string\n status?: 'default' | 'active' | 'inactive'\n size?: keyof SizeMap\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 TagItem = forwardRef<HTMLButtonElement, 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 ...props\n }: TagItemProps<T>,\n _ref: ForwardedRef<HTMLButtonElement>,\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 ?? 'button', [component])\n\n return (\n <Component\n {...props}\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 = 'button'>(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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["OriginSSRProvider","defaultProps: Props","Button","Clickable","requiredIconSize: string","React","RadioInput","RadioInput","React","Icon","SwitchInput","React","SwitchWithLabel","Switch","SwitchInput","React","FieldLabel","mergeRefs","React","value","count","FieldLabel","forwardRef","rows","value","count","FieldLabel","mergeRefs","forwardRef","React","Dialog","forwardRef","React","React","React","IconButton","LoadingSpinnerIcon","React","children","React","propsArray: DropdownMenuItemProps[]","FieldLabel","Icon","ListItem","MenuItem","ListItem","MenuItem","Icon","RadioProvider: React.FC<RadioProviderProps>","CheckboxInput","CheckboxWithLabel","Checkbox","CheckboxInput","Icon","Icon"],"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/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"],"sourcesContent":["import { SSRProvider as OriginSSRProvider } from '@react-aria/ssr'\nimport { version, Fragment } from 'react'\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 { 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/**\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 = themeSetter(),\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 useEffect(() => {\n fetch()\n window.addEventListener('storage', handleStorage)\n return () => {\n window.removeEventListener('storage', handleStorage)\n }\n })\n\n const handleStorage = (e: StorageEvent) => {\n if (e.storageArea !== localStorage) {\n return\n }\n if (e.key !== key) {\n return\n }\n fetch()\n }\n\n const fetch = () => {\n const raw = localStorage.getItem(key)\n setState((raw !== null ? deserialize(raw) : null) ?? defaultValueMemo)\n setReady(true)\n }\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'\nimport type { PixivIcon, Props } from '@charcoal-ui/icons'\n\nexport interface OwnProps {\n unsafeNonGuidelineScale?: number\n className?: string\n}\n\nexport interface IconProps\n extends OwnProps,\n React.PropsWithoutRef<\n Omit<Props, 'class' | 'unsafe-non-guideline-scale' | 'css'>\n > {}\n\nconst Icon = React.forwardRef<PixivIcon, IconProps>(function IconInner(\n { name, scale, unsafeNonGuidelineScale, className, ...rest },\n ref,\n) {\n return (\n <pixiv-icon\n ref={ref}\n name={name}\n scale={scale}\n unsafe-non-guideline-scale={unsafeNonGuidelineScale}\n class={className}\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\" unsafe-non-guideline-scale={16 / 24} />\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 { useId } from '@react-aria/utils'\nimport SwitchInput, { type SwitchInputProps } from './SwitchInput'\nimport { SwitchWithLabel } from './SwitchWithLabel'\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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport * as React from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString } from '../../_lib'\nimport { useFocusWithClick } from './useFocusWithClick'\nimport { mergeRefs, useId } from '@react-aria/utils'\nimport { AssistiveText } from './AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\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 <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 {(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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\nimport FieldLabel from '../FieldLabel'\nimport { countCodePointsInString, mergeRefs } from '../../_lib'\nimport { useFocusWithClick } from '../TextField/useFocusWithClick'\nimport { useId } from '@react-aria/utils'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport type TextAreaProps = {\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 autoHeight?: boolean\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 invalid,\n getCount = countCodePointsInString,\n ...props\n },\n forwardRef,\n ) {\n const { visuallyHiddenProps } = useVisuallyHidden()\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const [count, setCount] = useState(getCount(value ?? ''))\n const [rows, setRows] = useState(initialRows)\n\n const syncHeight = useCallback(\n (textarea: HTMLTextAreaElement) => {\n const rows = (`${textarea.value}\\n`.match(/\\n/gu)?.length ?? 0) || 1\n setRows(initialRows <= rows ? rows : initialRows)\n },\n [initialRows],\n )\n\n const nonControlled = value === undefined\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value\n const count = getCount(value)\n if (maxLength !== undefined && count > maxLength) {\n return\n }\n if (nonControlled) {\n setCount(count)\n }\n if (autoHeight && textareaRef.current !== null) {\n syncHeight(textareaRef.current)\n }\n onChange?.(value)\n },\n [autoHeight, getCount, maxLength, nonControlled, onChange, syncHeight],\n )\n\n useEffect(() => {\n setCount(getCount(value ?? ''))\n }, [getCount, value])\n\n useEffect(() => {\n if (autoHeight && textareaRef.current !== null) {\n syncHeight(textareaRef.current)\n }\n }, [autoHeight, syncHeight])\n\n const containerRef = useRef(null)\n\n useFocusWithClick(containerRef, textareaRef)\n\n const textAreaId = useId(props.id)\n const describedbyId = useId()\n const labelledbyId = useId()\n\n const classNames = useClassNames('charcoal-text-area-root', className)\n\n const showAssistiveText =\n assistiveText != null && assistiveText.length !== 0\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 {...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/dialog'\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 {\n AriaModalOverlayProps,\n ModalOverlayAria,\n ariaHideOutside,\n useOverlay,\n useOverlayFocusContain,\n} from '@react-aria/overlays'\nimport { usePreventScroll } from '../DropdownSelector/Popover/usePreventScroll'\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 { useContext, forwardRef, memo } from 'react'\nimport * as React from 'react'\nimport { Overlay } from '@react-aria/overlays'\nimport type { AriaDialogProps } from '@react-types/dialog'\nimport { animated, useTransition, easings } from 'react-spring'\nimport Button, { ButtonProps } from '../Button'\nimport IconButton, { IconButtonProps } from '../IconButton'\nimport { useObjectRef } from '@react-aria/utils'\nimport { Dialog } from './Dialog'\nimport { ModalBackgroundContext } from './ModalBackgroundContext'\nimport {\n CharcoalModalOverlayProps,\n useCharcoalModalOverlay,\n useWindowWidth,\n} from './useCustomModalOverlay'\n\nimport './index.css'\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 transition = useTransition(isOpen, {\n from: {\n transform: 'translateY(100%)',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n overflow: 'hidden',\n },\n enter: {\n transform: 'translateY(0%)',\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n },\n update: {\n overflow: 'auto',\n },\n leave: {\n transform: 'translateY(100%)',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n overflow: 'hidden',\n },\n config: transitionEnabled\n ? { duration: 400, easing: easings.easeOutQuart }\n : { duration: 0 },\n })\n\n const bgRef = React.useRef<HTMLDivElement>(null)\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 return transition(\n ({ backgroundColor, overflow, transform }, item) =>\n item && (\n <Overlay portalContainer={portalContainer}>\n {/* https://github.com/pmndrs/react-spring/issues/1515 */}\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <animated.div\n className=\"charcoal-modal-background\"\n ref={bgRef}\n {...underlayProps}\n style={\n transitionEnabled\n ? { backgroundColor, overflow, zIndex }\n : { zIndex }\n }\n data-bottom-sheet={bottomSheet}\n onClick={handleClick}\n >\n <ModalBackgroundContext.Provider value={bgRef.current}>\n {/* https://github.com/pmndrs/react-spring/issues/1515 */}\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <AnimatedDialog\n ref={ref}\n {...modalProps}\n style={transitionEnabled ? { transform } : {}}\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 </AnimatedDialog>\n </ModalBackgroundContext.Provider>\n </animated.div>\n </Overlay>\n ),\n )\n})\n\nconst AnimatedDialog = animated(Dialog)\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 { DismissButton, Overlay, usePopover } from '@react-aria/overlays'\nimport { ModalBackgroundContext } from '../../Modal/ModalBackgroundContext'\nimport { usePreventScroll } from './usePreventScroll'\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 { useVisuallyHidden } from '@react-aria/visually-hidden'\nimport { AssistiveText } from '../TextField/AssistiveText'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport { useId } from '@react-aria/utils'\nimport { PopoverProps } from './Popover'\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} & Pick<PopoverProps, 'inertWorkaround'>\n\nexport default function DropdownSelector({\n onChange,\n showLabel = false,\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\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 >\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 { useContext } from 'react'\nimport Icon from '../../Icon'\n\nexport type DropdownMenuItemProps = Omit<MenuItemProps, 'as'>\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, ...rest } = props\n\n return (\n <MenuItem {...rest} aria-selected={isSelected}>\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\"\n data-selected={isSelected}\n >\n {children}\n </span>\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 type { RadioGroupState } from '@react-stately/radio'\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 { useRadioGroupState } from '@react-stately/radio'\nimport {\n AriaRadioGroupProps,\n AriaRadioProps,\n useRadio,\n useRadioGroup,\n} from '@react-aria/radio'\nimport { RadioProvider, useRadioContext } from './RadioGroupContext'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\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 { useId } from '@react-aria/utils'\nimport CheckboxInput, { CheckboxInputProps } from './CheckboxInput'\nimport { CheckboxWithLabel } from './CheckboxWithLabel'\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 { useObjectRef } from '@react-aria/utils'\nimport Icon from '../Icon'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nimport './index.css'\n\ntype SizeMap = {\n S: 32\n M: 40\n}\n\nexport type TagItemProps<T extends React.ElementType = 'button'> = {\n label: string\n translatedLabel?: string\n bgColor?: string\n bgImage?: string\n status?: 'default' | 'active' | 'inactive'\n size?: keyof SizeMap\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 TagItem = forwardRef<HTMLButtonElement, 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 ...props\n }: TagItemProps<T>,\n _ref: ForwardedRef<HTMLButtonElement>,\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 ?? 'button', [component])\n\n return (\n <Component\n {...props}\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 = 'button'>(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"],"mappings":"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"}