{"version":3,"sources":["../src/hooks/usePositioning/utils/placement.ts"],"sourcesContent":["import { resolvePositioningShorthand } from '@fluentui/react-positioning';\nimport type { Alignment, Position, PositioningShorthandValue } from '@fluentui/react-positioning';\nimport type { LogicalAlignment } from '../types';\nimport { ALIGNMENTS, POSITIONS, POSITION_AREA_MAP } from '../constants';\n\nconst ALIGN_ALIASES: Record<string, LogicalAlignment> = {\n  top: ALIGNMENTS.start,\n  bottom: ALIGNMENTS.end,\n};\n\nexport function normalizeAlign(raw: string): LogicalAlignment {\n  if (raw === ALIGNMENTS.start || raw === ALIGNMENTS.center || raw === ALIGNMENTS.end) {\n    return raw;\n  }\n\n  return ALIGN_ALIASES[raw] ?? ALIGNMENTS.center;\n}\n\n/**\n * Maps (position, align) into the placement value used for the `data-placement`\n * attribute. Center alignment renders as the bare position; horizontal positions\n * (`before`/`after`) render their alignment as physical (`top`/`bottom`) to\n * match react-positioning's convention.\n */\nexport function getPlacementString(position: Position, align: Alignment): PositioningShorthandValue {\n  const logical = normalizeAlign(align);\n\n  if (logical === ALIGNMENTS.center) {\n    return position;\n  }\n\n  if (position === POSITIONS.before || position === POSITIONS.after) {\n    return `${position}-${logical === ALIGNMENTS.start ? 'top' : 'bottom'}`;\n  }\n\n  return `${position}-${logical}`;\n}\n\nexport function shorthandToPositionArea(shorthand: PositioningShorthandValue): string {\n  const { position = POSITIONS.above, align = ALIGNMENTS.center } = resolvePositioningShorthand(shorthand);\n  return POSITION_AREA_MAP[position][normalizeAlign(align)];\n}\n\nexport function getCoverSelfAlignment(\n  position: Position,\n  align: LogicalAlignment,\n): { alignSelf: string; justifySelf: string } {\n  if (position === POSITIONS.above) {\n    return { alignSelf: ALIGNMENTS.end, justifySelf: align };\n  }\n\n  if (position === POSITIONS.below) {\n    return { alignSelf: ALIGNMENTS.start, justifySelf: align };\n  }\n\n  if (position === POSITIONS.before) {\n    return { alignSelf: align, justifySelf: ALIGNMENTS.end };\n  }\n\n  return { alignSelf: align, justifySelf: ALIGNMENTS.start };\n}\n"],"names":["getCoverSelfAlignment","getPlacementString","normalizeAlign","shorthandToPositionArea","ALIGN_ALIASES","top","ALIGNMENTS","start","bottom","end","raw","center","position","align","logical","POSITIONS","before","after","shorthand","above","resolvePositioningShorthand","POSITION_AREA_MAP","alignSelf","justifySelf","below"],"mappings":";;;;;;;;;;;IA2CgBA,qBAAqB;eAArBA;;IAnBAC,kBAAkB;eAAlBA;;IAdAC,cAAc;eAAdA;;IA4BAC,uBAAuB;eAAvBA;;;kCAtC4B;2BAGa;AAEzD,MAAMC,gBAAkD;IACtDC,KAAKC,qBAAU,CAACC,KAAK;IACrBC,QAAQF,qBAAU,CAACG,GAAG;AACxB;AAEO,SAASP,eAAeQ,GAAW;IACxC,IAAIA,QAAQJ,qBAAU,CAACC,KAAK,IAAIG,QAAQJ,qBAAU,CAACK,MAAM,IAAID,QAAQJ,qBAAU,CAACG,GAAG,EAAE;QACnF,OAAOC;IACT;IAEA,OAAON,aAAa,CAACM,IAAI,IAAIJ,qBAAU,CAACK,MAAM;AAChD;AAQO,SAASV,mBAAmBW,QAAkB,EAAEC,KAAgB;IACrE,MAAMC,UAAUZ,eAAeW;IAE/B,IAAIC,YAAYR,qBAAU,CAACK,MAAM,EAAE;QACjC,OAAOC;IACT;IAEA,IAAIA,aAAaG,oBAAS,CAACC,MAAM,IAAIJ,aAAaG,oBAAS,CAACE,KAAK,EAAE;QACjE,OAAO,GAAGL,SAAS,CAAC,EAAEE,YAAYR,qBAAU,CAACC,KAAK,GAAG,QAAQ,UAAU;IACzE;IAEA,OAAO,GAAGK,SAAS,CAAC,EAAEE,SAAS;AACjC;AAEO,SAASX,wBAAwBe,SAAoC;IAC1E,MAAM,EAAEN,WAAWG,oBAAS,CAACI,KAAK,EAAEN,QAAQP,qBAAU,CAACK,MAAM,EAAE,GAAGS,IAAAA,6CAA2B,EAACF;IAC9F,OAAOG,4BAAiB,CAACT,SAAS,CAACV,eAAeW,OAAO;AAC3D;AAEO,SAASb,sBACdY,QAAkB,EAClBC,KAAuB;IAEvB,IAAID,aAAaG,oBAAS,CAACI,KAAK,EAAE;QAChC,OAAO;YAAEG,WAAWhB,qBAAU,CAACG,GAAG;YAAEc,aAAaV;QAAM;IACzD;IAEA,IAAID,aAAaG,oBAAS,CAACS,KAAK,EAAE;QAChC,OAAO;YAAEF,WAAWhB,qBAAU,CAACC,KAAK;YAAEgB,aAAaV;QAAM;IAC3D;IAEA,IAAID,aAAaG,oBAAS,CAACC,MAAM,EAAE;QACjC,OAAO;YAAEM,WAAWT;YAAOU,aAAajB,qBAAU,CAACG,GAAG;QAAC;IACzD;IAEA,OAAO;QAAEa,WAAWT;QAAOU,aAAajB,qBAAU,CAACC,KAAK;IAAC;AAC3D"}