{"version":3,"file":"useListbox.cjs","sources":["../../../src/components/Combobox/useListbox.tsx"],"sourcesContent":["import {\n  type KeyboardEvent,\n  type ReactNode,\n  type RefObject,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { useEnhancedEffect } from '../../hooks/useEnhancedEffect'\nimport { usePortal } from '../../hooks/usePortal'\nimport { useTheme } from '../../hooks/useTheme'\nimport { useIntl } from '../../intl'\nimport { FaCircleInfoIcon } from '../Icon'\nimport { Loader } from '../Loader'\nimport { Scroller } from '../Scroller'\nimport { Text } from '../Text'\nimport { VisuallyHiddenText } from '../VisuallyHiddenText'\n\nimport { ItemButton } from './ItemButton'\nimport { useActiveOption } from './useActiveOption'\nimport { usePartialRendering } from './usePartialRendering'\n\nimport type { ComboboxItem, ComboboxOption } from './types'\n\ntype Props<T> = {\n  options: Array<ComboboxOption<T>>\n  dropdownHelpMessage?: ReactNode\n  dropdownWidth?: string | number\n  onAdd?: (label: string) => void\n  onSelect: (item: ComboboxItem<T>) => void\n  isExpanded: boolean\n  isLoading?: boolean\n  triggerRef: RefObject<HTMLElement>\n  /** 検索結果が0件の時に表示するコンテンツ */\n  noResultText?: ReactNode\n}\n\ntype Rect = {\n  top: number\n  left: number\n  height?: number\n}\n\nconst KEY_DOWN_REGEX = /^(Arrow)?Down$/\nconst KEY_UP_REGEX = /^(Arrow)?Up/\n\nconst classNameGenerator = tv({\n  slots: {\n    wrapper: 'shr-absolute',\n    dropdownList: [\n      'smarthr-ui-Combobox-dropdownList',\n      'shr-absolute shr-z-overlap shr-box-border shr-min-w-full shr-rounded-m shr-bg-white shr-py-0.5 shr-shadow-layer-3',\n      /* 縦スクロールに気づきやすくするために8個目のアイテムが半分見切れるように max-height を算出\n      = (アイテムのフォントサイズ + アイテムの上下padding) * 7.5 + コンテナの上padding */\n      'shr-max-h-[calc((theme(fontSize.base)_+_theme(spacing[0.5])_*_2)_*_7.5_+_theme(spacing[0.5]))]',\n      'aria-hidden:shr-hidden',\n    ],\n    helpMessage:\n      'shr-whitespace-[initial] shr-border-b-shorthand shr-mx-0.5 shr-mb-0.5 shr-mt-0 shr-px-0.5 shr-pb-0.5 shr-pt-0 shr-text-sm',\n    loaderWrapper: 'shr-flex shr-items-center shr-justify-center shr-p-1',\n    noItems: 'smarthr-ui-Combobox-noItems shr-my-0 shr-bg-white shr-px-1 shr-py-0.5 shr-text-base',\n  },\n})\n\nexport const useListbox = <T,>({\n  options,\n  dropdownHelpMessage,\n  dropdownWidth,\n  onAdd,\n  onSelect,\n  isExpanded,\n  isLoading,\n  triggerRef,\n  noResultText: orgNoResultText,\n}: Props<T>) => {\n  const theme = useTheme()\n  const [navigationType, setNavigationType] = useState<'pointer' | 'key'>('pointer')\n  const { activeOption, setActiveOption, moveActiveOptionIndex } = useActiveOption({ options })\n  const { localize } = useIntl()\n\n  useEffect(() => {\n    // 閉じたときに activeOption を初期化\n    if (!isExpanded) {\n      setActiveOption(null)\n    }\n  }, [isExpanded, setActiveOption])\n\n  const listBoxRef = useRef<HTMLDivElement>(null)\n  const [listBoxRect, setListBoxRect] = useState<Rect>({\n    top: 0,\n    left: 0,\n  })\n  // HINT: calculateRectで同時に計算するとwidthの幅が変更されるタイミングの問題でlistBoxHeightが変化する場合がある\n  const [triggerWidth, setTriggerWidth] = useState(0)\n\n  useEffect(() => {\n    if (!triggerRef.current) {\n      return\n    }\n\n    const rect = triggerRef.current.getBoundingClientRect()\n\n    setTriggerWidth(rect.width)\n  }, [isExpanded, triggerRef])\n\n  const calculateRect = useCallback(() => {\n    if (!listBoxRef.current || !triggerRef.current) {\n      return\n    }\n    const rect = triggerRef.current.getBoundingClientRect()\n    const bottomSpace = window.innerHeight - rect.bottom\n    const topSpace = rect.top\n    const listBoxHeight = Math.min(\n      listBoxRef.current.scrollHeight,\n      parseInt(getComputedStyle(listBoxRef.current).maxHeight, 10),\n    )\n    const offset = 2\n\n    let top = 0\n    let height: number | undefined = undefined\n\n    if (bottomSpace >= listBoxHeight) {\n      // 下側に十分なスペースがある場合は下側に通常表示\n      top = rect.top + rect.height - offset + window.pageYOffset\n    } else if (topSpace >= listBoxHeight) {\n      // 上側に十分なスペースがある場合は上側に通常表示\n      top = rect.top - listBoxHeight + offset + window.pageYOffset\n    } else if (topSpace > bottomSpace) {\n      // 上下に十分なスペースがなく、上側の方がスペースが大きい場合は上側に縮めて表示\n      top = rect.top - topSpace + offset + window.pageYOffset\n      height = topSpace\n    } else {\n      // 下側に縮めて表示\n      top = rect.top + rect.height - offset + window.pageYOffset\n      height = bottomSpace\n    }\n\n    setListBoxRect({\n      top,\n      left: rect.left + window.pageXOffset,\n      height,\n    })\n    setTriggerWidth(rect.width)\n  }, [listBoxRef, triggerRef])\n\n  const activeRef = useRef<HTMLButtonElement>(null)\n\n  useEffect(() => {\n    // actionOption の要素が表示される位置までリストボックス内をスクロールさせる\n    if (\n      !activeRef.current ||\n      !listBoxRef.current ||\n      activeOption === null ||\n      navigationType !== 'key'\n    ) {\n      return\n    }\n\n    const activeRect = activeRef.current.getBoundingClientRect()\n    const containerRect = listBoxRef.current.getBoundingClientRect()\n\n    if (activeRect.top < containerRect.top) {\n      listBoxRef.current.scrollTop -= containerRect.top - activeRect.top\n    } else if (activeRect.bottom > containerRect.bottom) {\n      listBoxRef.current.scrollTop += activeRect.bottom - containerRect.bottom\n    }\n  }, [activeOption, listBoxRef, navigationType])\n\n  useEnhancedEffect(() => {\n    if (isExpanded) {\n      // options の更新毎に座標を再計算する\n      calculateRect()\n    }\n  }, [calculateRect, isExpanded, options])\n\n  const onKeyDownListBox = useCallback(\n    (e: KeyboardEvent<HTMLElement>) => {\n      setNavigationType('key')\n\n      if (KEY_DOWN_REGEX.test(e.key)) {\n        e.stopPropagation()\n        moveActiveOptionIndex(activeOption, 1)\n      } else if (KEY_UP_REGEX.test(e.key)) {\n        e.stopPropagation()\n        moveActiveOptionIndex(activeOption, -1)\n      } else if (e.key === 'Enter') {\n        if (activeOption === null) {\n          return\n        }\n\n        e.stopPropagation()\n\n        if (!activeOption.isNew) {\n          onSelect(activeOption.item)\n        } else if (onAdd) {\n          onAdd(activeOption.item.value)\n        }\n      } else {\n        setActiveOption(null)\n      }\n    },\n    [activeOption, moveActiveOptionIndex, onAdd, onSelect, setActiveOption],\n  )\n\n  const { createPortal } = usePortal()\n  const listBoxId = useId()\n  const { items: partialOptions, renderIntersection } = usePartialRendering({\n    items: options,\n    minLength: useMemo(\n      () => (activeOption === null ? 0 : options.indexOf(activeOption)) + 1,\n      [activeOption, options],\n    ),\n  })\n\n  const handleAdd = useMemo(\n    () =>\n      onAdd\n        ? (option: ComboboxOption<T>) => {\n            // HINT: Dropdown系コンポーネント内でComboboxを使うと、選択肢がportalで表現されている関係上Dropdownが閉じてしまう\n            // requestAnimationFrameを追加、処理を遅延させることで正常に閉じる/閉じないの判定を行えるようにする\n            requestAnimationFrame(() => {\n              onAdd(option.item.value)\n            })\n          }\n        : undefined,\n    [onAdd],\n  )\n  const handleSelect = useCallback(\n    (option: ComboboxOption<T>) => {\n      onSelect(option.item)\n    },\n    [onSelect],\n  )\n  const handleHoverOption = useCallback(\n    (option: ComboboxOption<T>) => {\n      setNavigationType('pointer')\n      setActiveOption(option)\n    },\n    [setActiveOption],\n  )\n\n  const wrapperStyle = useMemo(() => {\n    const { top, left } = listBoxRect\n\n    return {\n      top: `${top}px`,\n      left: `${left}px`,\n      width: `${triggerWidth}px`,\n    }\n  }, [listBoxRect, triggerWidth])\n  const dropdownListStyle = useMemo(() => {\n    const { left, height } = listBoxRect\n    const dropdownListWidth = dropdownWidth || triggerWidth\n\n    return {\n      width: typeof dropdownListWidth === 'string' ? dropdownListWidth : `${dropdownListWidth}px`,\n      maxWidth: `calc(100vw - ${left}px - ${theme.spacingByChar(0.5)})`,\n      height: height ? `${height}px` : undefined,\n    }\n  }, [listBoxRect, triggerWidth, dropdownWidth, theme])\n\n  const classNames = useMemo(() => {\n    const { wrapper, dropdownList, helpMessage, loaderWrapper, noItems } = classNameGenerator()\n\n    return {\n      wrapper: wrapper(),\n      dropdownList: dropdownList(),\n      helpMessage: helpMessage(),\n      loaderWrapper: loaderWrapper(),\n      noItems: noItems(),\n    }\n  }, [])\n\n  const texts = useMemo(\n    () => ({\n      loadingText: localize({ id: 'smarthr-ui/Combobox/loadingText', defaultText: '処理中' }),\n      noResultText:\n        orgNoResultText ??\n        localize({\n          id: 'smarthr-ui/Combobox/noResultsText',\n          defaultText: '一致する選択肢がありません。',\n        }),\n    }),\n    [orgNoResultText, localize],\n  )\n\n  const renderListBox = useCallback(\n    () =>\n      createPortal(\n        <div className={classNames.wrapper} style={wrapperStyle}>\n          {isExpanded && isLoading && (\n            <VisuallyHiddenText role=\"status\">{texts.loadingText}</VisuallyHiddenText>\n          )}\n          <Scroller\n            id={listBoxId}\n            ref={listBoxRef}\n            role=\"listbox\"\n            aria-hidden={!isExpanded}\n            className={classNames.dropdownList}\n            style={dropdownListStyle}\n          >\n            {dropdownHelpMessage && (\n              <Text\n                className={classNames.helpMessage}\n                icon={<FaCircleInfoIcon color=\"TEXT_GREY\" />}\n                as=\"p\"\n              >\n                {dropdownHelpMessage}\n              </Text>\n            )}\n            {isExpanded ? (\n              isLoading ? (\n                <div className={classNames.loaderWrapper}>\n                  <Loader aria-hidden />\n                </div>\n              ) : options.length === 0 ? (\n                <p role=\"alert\" aria-live=\"polite\" className={classNames.noItems}>\n                  {texts.noResultText}\n                </p>\n              ) : (\n                partialOptions.map((option) => (\n                  <ItemButton\n                    key={option.id}\n                    option={option}\n                    onAdd={handleAdd}\n                    onSelect={handleSelect}\n                    onMouseOver={handleHoverOption}\n                    activeRef={option.id === activeOption?.id ? activeRef : undefined}\n                  />\n                ))\n              )\n            ) : null}\n            {renderIntersection()}\n          </Scroller>\n        </div>,\n      ),\n    [\n      activeOption?.id,\n      renderIntersection,\n      partialOptions,\n      options.length,\n      isExpanded,\n      isLoading,\n      dropdownHelpMessage,\n      listBoxId,\n      texts,\n      handleAdd,\n      handleHoverOption,\n      handleSelect,\n      classNames,\n      dropdownListStyle,\n      wrapperStyle,\n      createPortal,\n    ],\n  )\n\n  return {\n    renderListBox,\n    activeOption,\n    onKeyDownListBox,\n    listBoxId,\n    listBoxRef,\n  }\n}\n"],"names":["tv","useTheme","useState","useActiveOption","useIntl","useEffect","useRef","useCallback","useEnhancedEffect","usePortal","useId","usePartialRendering","useMemo","_jsxs","_jsx","VisuallyHiddenText","Scroller","Text","FaCircleInfoIcon","Loader","ItemButton"],"mappings":"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"}