{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/popper/src/utils.ts"],"sourcesContent":["import { isClient, unrefElement } from '@vueuse/core'\n\nimport type { ComponentPublicInstance } from 'vue'\nimport type { MaybeRef } from '@vueuse/core'\nimport type { Measurable } from '@bigin/tokens'\nimport type { PopperCoreConfigProps } from './content'\n\ntype ArrowProps = {\n  arrowEl: HTMLElement | undefined\n  arrowOffset: number | undefined\n}\n\nexport const buildPopperOptions = (\n  props: PopperCoreConfigProps,\n  arrowProps: ArrowProps\n) => {\n  const { placement, strategy, popperOptions } = props\n  const options = {\n    placement,\n    strategy,\n    ...popperOptions,\n    modifiers: genModifiers(props),\n  }\n\n  attachArrow(options, arrowProps)\n  deriveExtraModifiers(options, popperOptions?.modifiers)\n  return options\n}\n\nexport const unwrapMeasurableEl = (\n  $el: MaybeRef<Measurable | undefined | ComponentPublicInstance>\n) => {\n  if (!isClient) return\n  return unrefElement($el as HTMLElement)\n}\n\nfunction genModifiers(options: PopperCoreConfigProps) {\n  const { offset, gpuAcceleration, fallbackPlacements } = options\n  return [\n    {\n      name: 'offset',\n      options: {\n        offset: [0, offset ?? 12],\n      },\n    },\n    {\n      name: 'preventOverflow',\n      options: {\n        padding: {\n          top: 2,\n          bottom: 2,\n          left: 5,\n          right: 5,\n        },\n      },\n    },\n    {\n      name: 'flip',\n      options: {\n        padding: 5,\n        fallbackPlacements,\n      },\n    },\n    {\n      name: 'computeStyles',\n      options: {\n        gpuAcceleration,\n        adaptive: gpuAcceleration,\n      },\n    },\n  ]\n}\n\nfunction attachArrow(options: any, { arrowEl, arrowOffset }: ArrowProps) {\n  options.modifiers.push({\n    name: 'arrow',\n    options: {\n      element: arrowEl,\n      padding: arrowOffset ?? 5,\n    },\n  } as any)\n}\n\nfunction deriveExtraModifiers(\n  options: any,\n  modifiers: PopperCoreConfigProps['popperOptions']['modifiers']\n) {\n  if (modifiers) {\n    options.modifiers = [...options.modifiers, ...(modifiers ?? [])]\n  }\n}\n"],"names":[],"mappings":";;AAYa,MAAA,kBAAA,GAAqB,CAChC,KAAA,EACA,UACG,KAAA;AACH,EAAA,MAAM,EAAE,SAAA,EAAW,QAAU,EAAA,aAAA,EAAkB,GAAA,KAAA,CAAA;AAC/C,EAAA,MAAM,OAAU,GAAA;AAAA,IACd,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG,aAAA;AAAA,IACH,SAAA,EAAW,aAAa,KAAK,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,WAAA,CAAY,SAAS,UAAU,CAAA,CAAA;AAC/B,EAAqB,oBAAA,CAAA,OAAA,EAAS,eAAe,SAAS,CAAA,CAAA;AACtD,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEa,MAAA,kBAAA,GAAqB,CAChC,GACG,KAAA;AACH,EAAA,IAAI,CAAC,QAAA;AAAU,IAAA,OAAA;AACf,EAAA,OAAO,aAAa,GAAkB,CAAA,CAAA;AACxC,EAAA;AAEA,SAAS,aAAa,OAAgC,EAAA;AACpD,EAAA,MAAM,EAAE,MAAA,EAAQ,eAAiB,EAAA,kBAAA,EAAuB,GAAA,OAAA,CAAA;AACxD,EAAO,OAAA;AAAA,IACL;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,CAAC,CAAG,EAAA,MAAA,IAAU,EAAE,CAAA;AAAA,OAC1B;AAAA,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,iBAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,OAAS,EAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,IAAM,EAAA,CAAA;AAAA,UACN,KAAO,EAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,OAAS,EAAA,CAAA;AAAA,QACT,kBAAA;AAAA,OACF;AAAA,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,eAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,eAAA;AAAA,QACA,QAAU,EAAA,eAAA;AAAA,OACZ;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,WAAY,CAAA,OAAA,EAAc,EAAE,OAAA,EAAS,aAA2B,EAAA;AACvE,EAAA,OAAA,CAAQ,UAAU,IAAK,CAAA;AAAA,IACrB,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,OAAA;AAAA,MACT,SAAS,WAAe,IAAA,CAAA;AAAA,KAC1B;AAAA,GACM,CAAA,CAAA;AACV,CAAA;AAEA,SAAS,oBAAA,CACP,SACA,SACA,EAAA;AACA,EAAA,IAAI,SAAW,EAAA;AACb,IAAQ,OAAA,CAAA,SAAA,GAAY,CAAC,GAAG,OAAA,CAAQ,WAAW,GAAI,SAAA,IAAa,EAAG,CAAA,CAAA;AAAA,GACjE;AACF;;;;"}