{"version":3,"sources":["../src/components/Stack/stackUtils.ts"],"sourcesContent":["import type { IStackProps, IStackTokens, IStyle, ITheme } from '@fluentui/react';\nimport { getTheme } from '@fluentui/react';\n\n// Helper function that converts a themed spacing key (if given) to the corresponding themed spacing value.\nconst getThemedSpacing = (space: string, theme: ITheme): string => {\n  if (theme.spacing.hasOwnProperty(space)) {\n    return theme.spacing[space as keyof typeof theme.spacing];\n  }\n  return space;\n};\n\n// Helper function that takes a gap as a string and converts it into a { value, unit } representation.\nconst getValueUnitGap = (gap: string): { value: number; unit: string } => {\n  const numericalPart = parseFloat(gap);\n  const numericalValue = isNaN(numericalPart) ? 0 : numericalPart;\n  const numericalString = isNaN(numericalPart) ? '' : numericalPart.toString();\n\n  const unitPart = gap.substring(numericalString.toString().length);\n\n  return {\n    value: numericalValue,\n    unit: unitPart || 'px',\n  };\n};\n\n/**\n * Takes in a gap size in either a CSS-style format (e.g. 10 or \"10px\")\n *  or a key of a themed spacing value (e.g. \"s1\").\n * Returns the separate numerical value of the padding (e.g. 10)\n *  and the CSS unit (e.g. \"px\").\n */\nexport const parseGap = (\n  gap: IStackProps['gap'],\n  theme: ITheme,\n): { rowGap: { value: number; unit: string }; columnGap: { value: number; unit: string } } => {\n  if (gap === undefined || gap === '') {\n    return {\n      rowGap: {\n        value: 0,\n        unit: 'px',\n      },\n      columnGap: {\n        value: 0,\n        unit: 'px',\n      },\n    };\n  }\n\n  if (typeof gap === 'number') {\n    return {\n      rowGap: {\n        value: gap,\n        unit: 'px',\n      },\n      columnGap: {\n        value: gap,\n        unit: 'px',\n      },\n    };\n  }\n\n  const splitGap = gap.split(' ');\n\n  // If the array has more than two values, then return 0px.\n  if (splitGap.length > 2) {\n    return {\n      rowGap: {\n        value: 0,\n        unit: 'px',\n      },\n      columnGap: {\n        value: 0,\n        unit: 'px',\n      },\n    };\n  }\n\n  // If the array has two values, then parse each one.\n  if (splitGap.length === 2) {\n    return {\n      rowGap: getValueUnitGap(getThemedSpacing(splitGap[0], theme)),\n      columnGap: getValueUnitGap(getThemedSpacing(splitGap[1], theme)),\n    };\n  }\n\n  // Else, parse the numerical value and pass it as both the vertical and horizontal gap.\n  const calculatedGap = getValueUnitGap(getThemedSpacing(gap, theme));\n\n  return {\n    rowGap: calculatedGap,\n    columnGap: calculatedGap,\n  };\n};\n\n/**\n * Takes in a padding in a CSS-style format (e.g. 10, \"10px\", \"10px 10px\", etc.)\n *  where the separate padding values can also be the key of a themed spacing value\n *  (e.g. \"s1 m\", \"10px l1 20px l2\", etc.).\n * Returns a CSS-style padding.\n */\nexport const parsePadding = (padding: number | string | undefined, theme: ITheme): number | string | undefined => {\n  if (padding === undefined || typeof padding === 'number' || padding === '') {\n    return padding;\n  }\n\n  const paddingValues = padding.split(' ');\n  if (paddingValues.length < 2) {\n    return getThemedSpacing(padding, theme);\n  }\n\n  return paddingValues.reduce((padding1: string, padding2: string) => {\n    return getThemedSpacing(padding1, theme) + ' ' + getThemedSpacing(padding2, theme);\n  });\n};\n\nexport interface StackShimStyles {\n  root?: IStyle;\n  inner?: IStyle;\n}\n/**\n *\n * getStyles function for Stack.tokens.childrenGap prop styling\n */\nexport const getChildrenGapStyles = (props: IStackProps): StackShimStyles => {\n  const theme = getTheme();\n\n  const { horizontal, reversed } = props;\n  const tokens: IStackTokens = { ...props.tokens };\n\n  const { rowGap, columnGap } = parseGap(tokens.childrenGap, theme);\n  const horizontalMargin = `${-0.5 * columnGap.value}${columnGap.unit}`;\n  const verticalMargin = `${-0.5 * rowGap.value}${rowGap.unit}`;\n\n  return {\n    root: [\n      reversed &&\n        horizontal && {\n          '> *:not(:last-child)': {\n            marginLeft: `${columnGap.value}${columnGap.unit}`,\n          },\n        },\n      reversed &&\n        !horizontal && {\n          '> *:not(:last-child)': {\n            marginTop: `${rowGap.value}${rowGap.unit}`,\n          },\n        },\n      !reversed &&\n        horizontal && {\n          '> *:not(:first-child)': {\n            marginLeft: `${columnGap.value}${columnGap.unit}`,\n          },\n        },\n      !reversed &&\n        !horizontal && {\n          '> *:not(:first-child)': {\n            marginTop: `${rowGap.value}${rowGap.unit}`,\n          },\n        },\n    ],\n    inner: [\n      {\n        marginLeft: horizontalMargin,\n        marginRight: horizontalMargin,\n        marginTop: verticalMargin,\n        marginBottom: verticalMargin,\n        width: columnGap.value === 0 ? '100%' : `calc(100% + ${columnGap.value}${columnGap.unit})`,\n        '> *': {\n          margin: `${0.5 * rowGap.value}${rowGap.unit} ${0.5 * columnGap.value}${columnGap.unit}`,\n        },\n      },\n      horizontal && {\n        height: rowGap.value === 0 ? '100%' : `calc(100% + ${rowGap.value}${rowGap.unit})`,\n        '> *': {\n          maxWidth: columnGap.value === 0 ? '100%' : `calc(100% - ${columnGap.value}${columnGap.unit})`,\n        },\n      },\n      !horizontal && {\n        height: `calc(100% + ${rowGap.value}${rowGap.unit})`,\n        '> *': {\n          maxHeight: rowGap.value === 0 ? '100%' : `calc(100% - ${rowGap.value}${rowGap.unit})`,\n        },\n      },\n    ],\n  };\n};\n"],"names":["getTheme","getThemedSpacing","space","theme","spacing","hasOwnProperty","getValueUnitGap","gap","numericalPart","parseFloat","numericalValue","isNaN","numericalString","toString","unitPart","substring","length","value","unit","parseGap","undefined","rowGap","columnGap","splitGap","split","calculatedGap","parsePadding","padding","paddingValues","reduce","padding1","padding2","getChildrenGapStyles","props","horizontal","reversed","tokens","childrenGap","horizontalMargin","verticalMargin","root","marginLeft","marginTop","inner","marginRight","marginBottom","width","margin","height","maxWidth","maxHeight"],"mappings":"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"}