{"version":3,"sources":["../src/components/Stack/StackShim.tsx"],"sourcesContent":["'use client';\n\nimport { mergeClasses } from '@griffel/react';\nimport { classNamesFunction } from '@fluentui/react';\nimport type { IStackProps, IStackTokens, IStackItemProps } from '@fluentui/react';\nimport * as React from 'react';\n\nimport { getChildrenGapStyles } from './stackUtils';\nimport type { StackShimStyles } from './stackUtils';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport {\n  useFlexAlignItemsStyles,\n  useFlexGrowStyles,\n  useFlexJustifyContentStyles,\n  useStackStyles,\n} from './StackShim.styles';\n\nconst stackClassNames = {\n  root: 'ms-Stack',\n  inner: 'ms-Stack-inner',\n};\n\nconst getClassNames = classNamesFunction<IStackProps, StackShimStyles>();\nexport const StackShim = (props: IStackProps): JSXElement => {\n  const styles = useStackStyles();\n  const alignItemsFlexStyles = useFlexAlignItemsStyles();\n  const justifyContentFlexStyles = useFlexJustifyContentStyles();\n  const growFlexStyles: Record<string, string> = useFlexGrowStyles();\n\n  const {\n    as: RootType = 'div',\n    verticalFill,\n    horizontal,\n    reversed,\n    grow,\n    wrap,\n    horizontalAlign,\n    verticalAlign,\n    disableShrink,\n    className,\n  } = props;\n\n  const tokens: IStackTokens = { ...props.tokens };\n\n  let tokensRootStyles = {};\n  let tokensInnerStyles = {};\n  let childrenGapClassName;\n\n  if (tokens) {\n    tokensRootStyles = {\n      padding: !wrap ? tokens.padding : undefined,\n      maxHeight: tokens.maxHeight,\n      maxWidth: tokens.maxWidth,\n    };\n\n    tokensInnerStyles = {\n      padding: wrap ? tokens.padding : undefined,\n    };\n\n    if (tokens.childrenGap) {\n      childrenGapClassName = getClassNames(getChildrenGapStyles, {\n        horizontal,\n        reversed,\n        tokens,\n      });\n    }\n  }\n\n  const stackStyles = [\n    wrap ? styles.wrap : styles.root,\n    horizontal && styles.horizontal,\n    verticalFill && styles.verticalFill,\n  ];\n\n  const stackInnerStyles = [\n    styles.inner,\n    horizontal && styles.horizontal,\n    (!tokens || !tokens.childrenGap) && styles.innerWidth,\n  ];\n\n  type StackChildren = Exclude<React.ReactNode, boolean | string | number | bigint | null | undefined>;\n\n  let stackChildren = React.Children.toArray(props.children) as StackChildren[];\n  if (\n    stackChildren.length === 1 &&\n    React.isValidElement(stackChildren[0]) &&\n    stackChildren[0].type === React.Fragment\n  ) {\n    stackChildren = (stackChildren[0].props as React.FragmentProps).children as StackChildren[];\n  }\n\n  stackChildren = React.Children.map(stackChildren, child => {\n    if (!child) {\n      return null;\n    }\n\n    const _child = child as React.ReactElement<{}, React.ComponentType>;\n\n    if (_child.type && _child.type.name === 'StackItemShim') {\n      const defaultItemProps: IStackItemProps = {\n        shrink: !disableShrink,\n      };\n\n      return React.cloneElement(_child, {\n        ...defaultItemProps,\n        ..._child.props,\n      });\n    }\n\n    return child;\n  });\n\n  if (reversed) {\n    if (horizontal) {\n      stackStyles.push(styles.reversedHorizontal);\n      stackInnerStyles.push(styles.reversedHorizontal);\n    } else {\n      stackStyles.push(styles.reversedVertical);\n      stackInnerStyles.push(styles.reversedVertical);\n    }\n  }\n\n  if (grow) {\n    const flexGrow = grow === true ? growFlexStyles[1] : growFlexStyles[grow];\n    stackStyles.push(flexGrow);\n  }\n\n  if (disableShrink) {\n    stackStyles.push(styles.disableShrink);\n  }\n\n  if (horizontalAlign) {\n    if (horizontal) {\n      stackStyles.push(justifyContentFlexStyles[horizontalAlign]);\n      stackInnerStyles.push(justifyContentFlexStyles[horizontalAlign]);\n    } else {\n      stackStyles.push(alignItemsFlexStyles[horizontalAlign]);\n      stackInnerStyles.push(alignItemsFlexStyles[horizontalAlign]);\n    }\n  }\n\n  if (verticalAlign) {\n    if (horizontal) {\n      stackStyles.push(alignItemsFlexStyles[verticalAlign]);\n      stackInnerStyles.push(alignItemsFlexStyles[verticalAlign]);\n    } else {\n      stackStyles.push(justifyContentFlexStyles[verticalAlign]);\n      stackInnerStyles.push(justifyContentFlexStyles[verticalAlign]);\n    }\n  }\n\n  const rootClass = mergeClasses(\n    stackClassNames.root,\n    ...stackStyles,\n    childrenGapClassName && !wrap && childrenGapClassName.root,\n    className,\n  );\n\n  const innerClass = mergeClasses(\n    stackClassNames.inner,\n    ...stackInnerStyles,\n    childrenGapClassName && wrap && childrenGapClassName.inner,\n  );\n\n  return wrap ? (\n    <RootType className={rootClass} style={tokensRootStyles}>\n      <div className={innerClass} style={tokensInnerStyles}>\n        {stackChildren}\n      </div>\n    </RootType>\n  ) : (\n    <RootType className={rootClass} style={tokensRootStyles}>\n      {stackChildren}\n    </RootType>\n  );\n};\n"],"names":["mergeClasses","classNamesFunction","React","getChildrenGapStyles","useFlexAlignItemsStyles","useFlexGrowStyles","useFlexJustifyContentStyles","useStackStyles","stackClassNames","root","inner","getClassNames","StackShim","props","styles","alignItemsFlexStyles","justifyContentFlexStyles","growFlexStyles","as","RootType","verticalFill","horizontal","reversed","grow","wrap","horizontalAlign","verticalAlign","disableShrink","className","tokens","tokensRootStyles","tokensInnerStyles","childrenGapClassName","padding","undefined","maxHeight","maxWidth","childrenGap","stackStyles","stackInnerStyles","innerWidth","stackChildren","Children","toArray","children","length","isValidElement","type","Fragment","map","child","_child","name","defaultItemProps","shrink","cloneElement","push","reversedHorizontal","reversedVertical","flexGrow","rootClass","innerClass","style","div"],"mappings":"AAAA;;;;;+BAuBaY;;;;;;;uBArBgB,iBAAiB;wBACX,kBAAkB;kEAE9B,QAAQ;4BAEM,kBAAe;iCAQ7C,wBAAqB;AAE5B,MAAMJ,kBAAkB;IACtBC,MAAM;IACNC,OAAO;AACT;AAEA,MAAMC,oBAAgBV,0BAAAA;AACf,kBAAkB,CAACY;IACxB,MAAMC,aAASP,+BAAAA;IACf,MAAMQ,2BAAuBX,wCAAAA;IAC7B,MAAMY,+BAA2BV,4CAAAA;IACjC,MAAMW,qBAAyCZ,kCAAAA;IAE/C,MAAM,EACJa,IAAIC,WAAW,KAAK,EACpBC,YAAY,EACZC,UAAU,EACVC,QAAQ,EACRC,IAAI,EACJC,IAAI,EACJC,eAAe,EACfC,aAAa,EACbC,aAAa,EACbC,SAAS,EACV,GAAGf;IAEJ,MAAMgB,SAAuB;QAAE,GAAGhB,MAAMgB,MAAM;IAAC;IAE/C,IAAIC,mBAAmB,CAAC;IACxB,IAAIC,oBAAoB,CAAC;IACzB,IAAIC;IAEJ,IAAIH,QAAQ;QACVC,mBAAmB;YACjBG,SAAS,CAACT,OAAOK,OAAOI,OAAO,GAAGC;YAClCC,WAAWN,OAAOM,SAAS;YAC3BC,UAAUP,OAAOO,QAAQ;QAC3B;QAEAL,oBAAoB;YAClBE,SAAST,OAAOK,OAAOI,OAAO,GAAGC;QACnC;QAEA,IAAIL,OAAOQ,WAAW,EAAE;YACtBL,uBAAuBrB,cAAcR,gCAAAA,EAAsB;gBACzDkB;gBACAC;gBACAO;YACF;QACF;IACF;IAEA,MAAMS,cAAc;QAClBd,OAAOV,OAAOU,IAAI,GAAGV,OAAOL,IAAI;QAChCY,cAAcP,OAAOO,UAAU;QAC/BD,gBAAgBN,OAAOM,YAAY;KACpC;IAED,MAAMmB,mBAAmB;QACvBzB,OAAOJ,KAAK;QACZW,cAAcP,OAAOO,UAAU;SAC9B,CAACQ,UAAU,CAACA,OAAOQ,WAAAA,AAAU,KAAMvB,OAAO0B,UAAU;KACtD;IAID,IAAIC,gBAAgBvC,QAAMwC,QAAQ,CAACC,OAAO,CAAC9B,MAAM+B,QAAQ;IACzD,IACEH,cAAcI,MAAM,KAAK,KAAA,WAAA,GACzB3C,QAAM4C,cAAc,CAACL,aAAa,CAAC,EAAE,KACrCA,aAAa,CAAC,EAAE,CAACM,IAAI,KAAK7C,QAAM8C,QAAQ,EACxC;QACAP,gBAAiBA,aAAa,CAAC,EAAE,CAAC5B,KAAK,CAAyB+B,QAAQ;IAC1E;IAEAH,gBAAgBvC,QAAMwC,QAAQ,CAACO,GAAG,CAACR,eAAeS,CAAAA;QAChD,IAAI,CAACA,OAAO;YACV,OAAO;QACT;QAEA,MAAMC,SAASD;QAEf,IAAIC,OAAOJ,IAAI,IAAII,OAAOJ,IAAI,CAACK,IAAI,KAAK,iBAAiB;YACvD,MAAMC,mBAAoC;gBACxCC,QAAQ,CAAC3B;YACX;YAEA,OAAA,WAAA,GAAOzB,QAAMqD,YAAY,CAACJ,QAAQ;gBAChC,GAAGE,gBAAgB;gBACnB,GAAGF,OAAOtC,KAAK;YACjB;QACF;QAEA,OAAOqC;IACT;IAEA,IAAI5B,UAAU;QACZ,IAAID,YAAY;YACdiB,YAAYkB,IAAI,CAAC1C,OAAO2C,kBAAkB;YAC1ClB,iBAAiBiB,IAAI,CAAC1C,OAAO2C,kBAAkB;QACjD,OAAO;YACLnB,YAAYkB,IAAI,CAAC1C,OAAO4C,gBAAgB;YACxCnB,iBAAiBiB,IAAI,CAAC1C,OAAO4C,gBAAgB;QAC/C;IACF;IAEA,IAAInC,MAAM;QACR,MAAMoC,WAAWpC,SAAS,OAAON,cAAc,CAAC,EAAE,GAAGA,cAAc,CAACM,KAAK;QACzEe,YAAYkB,IAAI,CAACG;IACnB;IAEA,IAAIhC,eAAe;QACjBW,YAAYkB,IAAI,CAAC1C,OAAOa,aAAa;IACvC;IAEA,IAAIF,iBAAiB;QACnB,IAAIJ,YAAY;YACdiB,YAAYkB,IAAI,CAACxC,wBAAwB,CAACS,gBAAgB;YAC1Dc,iBAAiBiB,IAAI,CAACxC,wBAAwB,CAACS,gBAAgB;QACjE,OAAO;YACLa,YAAYkB,IAAI,CAACzC,oBAAoB,CAACU,gBAAgB;YACtDc,iBAAiBiB,IAAI,CAACzC,oBAAoB,CAACU,gBAAgB;QAC7D;IACF;IAEA,IAAIC,eAAe;QACjB,IAAIL,YAAY;YACdiB,YAAYkB,IAAI,CAACzC,oBAAoB,CAACW,cAAc;YACpDa,iBAAiBiB,IAAI,CAACzC,oBAAoB,CAACW,cAAc;QAC3D,OAAO;YACLY,YAAYkB,IAAI,CAACxC,wBAAwB,CAACU,cAAc;YACxDa,iBAAiBiB,IAAI,CAACxC,wBAAwB,CAACU,cAAc;QAC/D;IACF;IAEA,MAAMkC,gBAAY5D,mBAAAA,EAChBQ,gBAAgBC,IAAI,KACjB6B,aACHN,wBAAwB,CAACR,QAAQQ,qBAAqBvB,IAAI,EAC1DmB;IAGF,MAAMiC,iBAAa7D,mBAAAA,EACjBQ,gBAAgBE,KAAK,KAClB6B,kBACHP,wBAAwBR,QAAQQ,qBAAqBtB,KAAK;IAG5D,OAAOc,OAAAA,WAAAA,GACL,QAAA,aAAA,CAACL,UAAAA;QAASS,WAAWgC;QAAWE,OAAOhC;qBACrC,QAAA,aAAA,CAACiC,OAAAA;QAAInC,WAAWiC;QAAYC,OAAO/B;OAChCU,kBAAAA,WAAAA,GAIL,QAAA,aAAA,CAACtB,UAAAA;QAASS,WAAWgC;QAAWE,OAAOhC;OACpCW;AAGP,EAAE"}