{"version":3,"file":"RemoteDialogTrigger.cjs","sources":["../../../../src/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.tsx"],"sourcesContent":["'use client'\n\nimport {\n  type FC,\n  type MouseEvent,\n  type ReactElement,\n  cloneElement,\n  useCallback,\n  useMemo,\n} from 'react'\n\nimport { TRIGGER_EVENT } from '../useRemoteTrigger'\n\nconst onClickRemoteDialogTrigger = (ariaControls: string) => {\n  document.dispatchEvent(\n    new CustomEvent(TRIGGER_EVENT, {\n      detail: { id: ariaControls },\n    }),\n  )\n}\n\nexport const RemoteDialogTrigger: FC<{\n  targetId: string\n  onClick?: (open: () => void) => void\n  children: Omit<ReactElement, 'onClick' | 'aria-haspopup' | 'aria-controls'>\n}> = ({ targetId, children, onClick, ...rest }) => {\n  const actualOnClick = useCallback(\n    (e: MouseEvent<HTMLElement>) => {\n      // HINT: onClick内で非同期処理される場合、e.currentTargetがnullになってしまう可能性があるため\n      // 先にariaControlsを取得しておく\n      const ariaControls = e.currentTarget.getAttribute('aria-controls') as string\n\n      if (onClick) {\n        return onClick(() => {\n          onClickRemoteDialogTrigger(ariaControls)\n        })\n      }\n\n      onClickRemoteDialogTrigger(ariaControls)\n    },\n    [onClick],\n  )\n  const actualTrigger = useMemo(\n    () =>\n      cloneElement(children as ReactElement, {\n        ...rest,\n        onClick: actualOnClick,\n        'aria-haspopup': 'dialog',\n        'aria-controls': targetId,\n      }),\n    [children, actualOnClick, targetId, rest],\n  )\n\n  return actualTrigger\n}\n"],"names":[],"mappings":";;;;;;AAaA;AACE;AAEI;AACD;AAEL;AAEO;AAKL;;;;;;;AASM;;;AAIJ;;AAMI;AACA;AACA;AACA;;AAKN;AACF;;"}