{"version":3,"file":"DisclosureTrigger.cjs","sources":["../../../src/components/Disclosure/DisclosureTrigger.tsx"],"sourcesContent":["'use client'\n\nimport { type FC, type ReactElement, useEffect, useMemo, useRef } from 'react'\n\nimport { useDisclosure } from './useDisclosure'\n\ntype DisclosureTriggerNodeChildren = Omit<\n  ReactElement,\n  'onClick' | 'aria-expanded' | 'aria-controls'\n>\ntype DisclosureTriggerFuncChildren = (args: { expanded: boolean }) => DisclosureTriggerNodeChildren\n\ntype DisclosureTriggerProps = {\n  /** DisclosureContentのidと紐づける文字列 */\n  targetId: string\n  /** 開閉時のハンドラー */\n  onClick?: (open: () => void, e: MouseEvent) => void\n  children: DisclosureTriggerNodeChildren | DisclosureTriggerFuncChildren\n}\n\nexport const DisclosureTrigger: FC<DisclosureTriggerProps> = ({ targetId, children, onClick }) => {\n  const [expanded, setExpanded] = useDisclosure(targetId)\n  const ref = useRef<HTMLSpanElement | null>(null)\n\n  const actualOnClick = useMemo(() => {\n    const toggleExpanded = () => {\n      setExpanded((current) => !current)\n    }\n\n    if (onClick) {\n      return (e: MouseEvent) => {\n        onClick(toggleExpanded, e)\n      }\n    }\n\n    return toggleExpanded\n  }, [onClick, setExpanded])\n\n  useEffect(() => {\n    if (!ref.current) {\n      return\n    }\n\n    const button = ref.current.querySelector('button')\n\n    if (!button) {\n      throw new Error('DisclosureTriggerのchildrenにbutton要素を設置してください')\n    }\n\n    button.setAttribute('aria-expanded', expanded.toString())\n    button.setAttribute('aria-controls', targetId)\n    button.addEventListener('click', actualOnClick)\n\n    return () => {\n      button.removeEventListener('click', actualOnClick)\n    }\n  }, [expanded, children, actualOnClick, targetId])\n\n  // HINT: 念の為spanに対して外部からstyleを当てられるようにしておく。\n  // Fragmentにrefが渡せるようになったタイミングでclassNameも不要になる\n  // TODO: 将来的にspan -> Fragmentに変更する\n  return (\n    <span className=\"smarthr-ui-DisclosureTriggerWrapper shr-contents\" ref={ref}>\n      {children instanceof Function ? children({ expanded }) : children}\n    </span>\n  )\n}\n"],"names":[],"mappings":";;;;;;;AAoBO;;AAEL;AAEA;;;AAGE;;;AAII;AACF;;AAGF;AACF;;AAGE;;;;;AAOE;;;AAIF;AACA;AAEA;AACE;AACF;;;;;AAMF;AAKF;;"}