{"version":3,"file":"usePlacementAliases.mjs","sources":["../../../../src/composables/usePlacementAliases.ts"],"sourcesContent":["import { PropType, ExtractPropTypes, computed } from 'vue'\n\ntype verticalPlacement = 'top' | 'bottom'\ntype horizontalPlacement = 'left' | 'right'\ntype PlacementAlias = `${verticalPlacement}-${horizontalPlacement}` | `${horizontalPlacement}-${verticalPlacement}`\n\nexport type PlacementPosition = horizontalPlacement | verticalPlacement\ntype PlacementPositionWithDefault = PlacementPosition | 'auto'\n\nexport type PlacementAlignment = 'start' | 'end' | 'center'\nexport type Placement = PlacementPositionWithDefault | `${PlacementPosition}-${PlacementAlignment}`\nexport type PlacementWithAlias = Placement | PlacementAlias\nexport type ParsedPlacement = { position: PlacementPosition, align: PlacementAlignment }\n\nconst verticalPlacement: verticalPlacement[] = ['top', 'bottom']\nconst horizontalPlacement: horizontalPlacement[] = ['left', 'right']\nconst placementPosition = [...verticalPlacement, ...horizontalPlacement] as PlacementPosition[]\nconst placementAlignment = ['start', 'end', 'center'] as PlacementAlignment[]\n\nexport const placementsPositions = placementPosition\n  .reduce((acc, position) => {\n    acc.push(position)\n    placementAlignment.forEach((alignment) => acc.push(`${position}-${alignment}`))\n    return acc\n  }, ['auto'] as Placement[])\n\nexport const placementAliasesPositions = verticalPlacement\n  .reduce((acc, yPosition) => {\n    horizontalPlacement.forEach((xPosition) => {\n      acc.push(`${yPosition}-${xPosition}`)\n      acc.push(`${xPosition}-${yPosition}`)\n    })\n    return acc\n  }, [] as PlacementAlias[])\n\nexport const placementsPositionsWithAliases: PlacementWithAlias[] = [...placementsPositions, ...placementAliasesPositions]\n\n// TODO: may be rewrite this const, it's not very flexible\nexport const aliasToPlacement: Record<PlacementAlias, Placement> = {\n  'top-left': 'top-start',\n  'left-top': 'top-start',\n  'top-right': 'top-end',\n  'right-top': 'top-end',\n  'bottom-left': 'bottom-start',\n  'left-bottom': 'bottom-start',\n  'bottom-right': 'bottom-end',\n  'right-bottom': 'bottom-end',\n}\n\nexport const usePlacementAliasesProps = {\n  placement: {\n    type: String as PropType<PlacementWithAlias>,\n    default: 'auto',\n    validator: (position: PlacementWithAlias) => placementsPositionsWithAliases.includes(position),\n  },\n}\n\nexport type UsePlacementAliasesProps = ExtractPropTypes<typeof usePlacementAliasesProps>\n\nexport const usePlacementAliases = (props: UsePlacementAliasesProps) => {\n  const placementArray = computed(() => {\n    const placement = aliasToPlacement[props.placement as PlacementAlias] || props.placement as PlacementWithAlias\n    return placement.split('-')\n  })\n\n  const position = computed(() => {\n    const position = placementArray.value[0]\n    return (position === 'auto' ? 'bottom' : position) as PlacementPosition\n  })\n\n  const align = computed(() => {\n    return (placementArray.value[1] || 'center') as PlacementAlignment\n  })\n\n  return { position, align }\n}\n"],"names":["position"],"mappings":";AAcA,MAAM,oBAAyC,CAAC,OAAO,QAAQ;AAC/D,MAAM,sBAA6C,CAAC,QAAQ,OAAO;AACnE,MAAM,oBAAoB,CAAC,GAAG,mBAAmB,GAAG,mBAAmB;AACvE,MAAM,qBAAqB,CAAC,SAAS,OAAO,QAAQ;AAE7C,MAAM,sBAAsB,kBAChC,OAAO,CAAC,KAAK,aAAa;AACzB,MAAI,KAAK,QAAQ;AACE,qBAAA,QAAQ,CAAC,cAAc,IAAI,KAAK,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;AACvE,SAAA;AACT,GAAG,CAAC,MAAM,CAAgB;AAErB,MAAM,4BAA4B,kBACtC,OAAO,CAAC,KAAK,cAAc;AACN,sBAAA,QAAQ,CAAC,cAAc;AACzC,QAAI,KAAK,GAAG,SAAS,IAAI,SAAS,EAAE;AACpC,QAAI,KAAK,GAAG,SAAS,IAAI,SAAS,EAAE;AAAA,EAAA,CACrC;AACM,SAAA;AACT,GAAG,CAAsB,CAAA;AAEpB,MAAM,iCAAuD,CAAC,GAAG,qBAAqB,GAAG,yBAAyB;AAGlH,MAAM,mBAAsD;AAAA,EACjE,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAClB;AAEO,MAAM,2BAA2B;AAAA,EACtC,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW,CAAC,aAAiC,+BAA+B,SAAS,QAAQ;AAAA,EAC/F;AACF;AAIa,MAAA,sBAAsB,CAAC,UAAoC;AAChE,QAAA,iBAAiB,SAAS,MAAM;AACpC,UAAM,YAAY,iBAAiB,MAAM,SAA2B,KAAK,MAAM;AACxE,WAAA,UAAU,MAAM,GAAG;AAAA,EAAA,CAC3B;AAEK,QAAA,WAAW,SAAS,MAAM;AACxBA,UAAAA,YAAW,eAAe,MAAM,CAAC;AAC/BA,WAAAA,cAAa,SAAS,WAAWA;AAAAA,EAAA,CAC1C;AAEK,QAAA,QAAQ,SAAS,MAAM;AACnB,WAAA,eAAe,MAAM,CAAC,KAAK;AAAA,EAAA,CACpC;AAEM,SAAA,EAAE,UAAU;AACrB;"}