{"version":3,"file":"dropdownHelper.cjs","sources":["../../../src/components/Dropdown/dropdownHelper.ts"],"sourcesContent":["import { tabbable } from '../../libs/tabbable'\n\nimport type { RefObject } from 'react'\n\nexport type Rect = {\n  top: number\n  right: number\n  bottom: number\n  left: number\n}\n\ntype Size = { width: number; height: number }\nexport type ContentBoxStyle = {\n  top: string\n  left?: string\n  right?: string\n  maxHeight: string\n}\n\nexport function isEventFromChild(e: Event, parent: Element | null): boolean {\n  if (!parent) {\n    return false\n  }\n\n  const path = e.composedPath()\n\n  if (path.length === 0) {\n    return false\n  }\n\n  return path.includes(parent)\n}\n\nexport function getContentBoxStyle(\n  triggerRect: Rect,\n  contentSize: Size,\n  windowSize: Size,\n  scroll: {\n    top: number\n    left: number\n  },\n) {\n  const contentBox: ContentBoxStyle = {\n    top: 'auto',\n    maxHeight: '',\n  }\n\n  if (triggerRect.bottom + contentSize.height <= windowSize.height) {\n    // ドロップダウンのサイズがトリガの下側の領域に収まる場合\n    contentBox.top = `${scroll.top + triggerRect.bottom - 5}px`\n  } else if (triggerRect.top - contentSize.height >= 0) {\n    // ドロップダウンのサイズがトリガの上川の領域に収まる場合\n    contentBox.top = `${scroll.top + triggerRect.top - contentSize.height + 5}px`\n  } else {\n    const padding = 10\n    const triggerHeight = triggerRect.bottom - triggerRect.top\n\n    if (triggerRect.top + triggerHeight / 2 < windowSize.height / 2) {\n      // 下側の領域のほうが広い場合\n      contentBox.top = `${scroll.top + triggerRect.bottom - 5}px`\n      contentBox.maxHeight = `${windowSize.height - triggerRect.bottom - padding}px`\n    } else {\n      // 上側の領域のほうが広い場合\n      contentBox.top = `${scroll.top + padding + 5}px`\n      contentBox.maxHeight = `${triggerRect.top - padding}px`\n    }\n  }\n\n  const triggerAlignCenter = triggerRect.left + (triggerRect.right - triggerRect.left) / 2\n\n  if (triggerAlignCenter <= windowSize.width / 2) {\n    // トリガが画面左寄りの場合\n    contentBox.left = `${scroll.left + triggerRect.left - 5}px`\n  } else {\n    // トリガが画面右寄りの場合\n    contentBox.right = `${windowSize.width - triggerRect.right - scroll.left - 5}px`\n  }\n\n  return contentBox\n}\n\nexport function getFirstTabbable(ref: RefObject<HTMLElement>) {\n  if (ref.current) {\n    return tabbable(ref.current)[0]\n  }\n\n  return null\n}\n"],"names":["tabbable"],"mappings":";;;;AAmBM,SAAU,gBAAgB,CAAC,CAAQ,EAAE,MAAsB,EAAA;IAC/D,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE;AAE7B,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9B;AAEM,SAAU,kBAAkB,CAChC,WAAiB,EACjB,WAAiB,EACjB,UAAgB,EAChB,MAGC,EAAA;AAED,IAAA,MAAM,UAAU,GAAoB;AAClC,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,SAAS,EAAE,EAAE;KACd;AAED,IAAA,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE;;AAEhE,QAAA,UAAU,CAAC,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI;IAC7D;SAAO,IAAI,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;;AAEpD,QAAA,UAAU,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI;IAC/E;SAAO;QACL,MAAM,OAAO,GAAG,EAAE;QAClB,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG;AAE1D,QAAA,IAAI,WAAW,CAAC,GAAG,GAAG,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE/D,YAAA,UAAU,CAAC,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI;AAC3D,YAAA,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO,IAAI;QAChF;aAAO;;AAEL,YAAA,UAAU,CAAC,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,CAAA,EAAA,CAAI;YAChD,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAA,EAAA,CAAI;QACzD;IACF;AAEA,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,IAAI,CAAC;IAExF,IAAI,kBAAkB,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE;;AAE9C,QAAA,UAAU,CAAC,IAAI,GAAG,CAAA,EAAG,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI;IAC7D;SAAO;;AAEL,QAAA,UAAU,CAAC,KAAK,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI;IAClF;AAEA,IAAA,OAAO,UAAU;AACnB;AAEM,SAAU,gBAAgB,CAAC,GAA2B,EAAA;AAC1D,IAAA,IAAI,GAAG,CAAC,OAAO,EAAE;QACf,OAAOA,sBAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC;AAEA,IAAA,OAAO,IAAI;AACb;;;;;;"}