{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/stack/index.tsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { tsx, create, isWNode, isVNode } from '@dojo/framework/core/vdom';\nimport icache from '@dojo/framework/core/middleware/icache';\nimport theme from '../middleware/theme';\n\nimport * as fixedCss from './styles/stack.m.css';\nimport * as css from '../theme/default/stack.m.css';\n\nexport { Spacer } from './Spacer';\n\nexport interface StackProperties {\n\t/** The direction of the stack */\n\tdirection: 'vertical' | 'horizontal';\n\t/** The sets the alignment of the stack for the opposite direction of the stack, i.e. for a vertical stack it is the horizontal alignment */\n\talign?: 'start' | 'middle' | 'end';\n\t/** The spacing between children */\n\tspacing?: 'small' | 'medium' | 'large';\n\t/** The padding for stack container */\n\tpadding?: 'small' | 'medium' | 'large';\n\t/** Stretches the container to fit the space */\n\tstretch?: boolean;\n}\n\nconst factory = create({ icache, theme }).properties<StackProperties>();\n\nexport const Stack = factory(function Stack({\n\tproperties,\n\tmiddleware: { icache, theme },\n\tchildren\n}) {\n\tconst { direction, align, spacing, padding = false, stretch = false } = properties();\n\tconst themeCss = theme.classes(css);\n\tlet spacingClass: string | undefined;\n\tlet paddingClass: string | undefined;\n\tlet alignClass: string | undefined;\n\n\tswitch (spacing) {\n\t\tcase 'small':\n\t\t\tspacingClass = themeCss.smallSpacing;\n\t\t\tbreak;\n\t\tcase 'medium':\n\t\t\tspacingClass = themeCss.mediumSpacing;\n\t\t\tbreak;\n\t\tcase 'large':\n\t\t\tspacingClass = themeCss.largeSpacing;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tswitch (padding) {\n\t\tcase 'small':\n\t\t\tpaddingClass = themeCss.smallPadding;\n\t\t\tbreak;\n\t\tcase 'medium':\n\t\t\tpaddingClass = themeCss.mediumPadding;\n\t\t\tbreak;\n\t\tcase 'large':\n\t\t\tpaddingClass = themeCss.largePadding;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tswitch (align) {\n\t\tcase 'start':\n\t\t\talignClass = fixedCss.start;\n\t\t\tbreak;\n\t\tcase 'middle':\n\t\t\talignClass = fixedCss.middle;\n\t\t\tbreak;\n\t\tcase 'end':\n\t\t\talignClass = fixedCss.end;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\tconst wrappedChildren = children().map((child, index) => {\n\t\tif (isWNode(child) || isVNode(child)) {\n\t\t\t// A callback that allows the stack to control the flex span\n\t\t\t// of the wrapping node of a spacer required for using the stacks\n\t\t\t// as a custom element.\n\t\t\tchild.properties.spanCallback = (span: number) => {\n\t\t\t\tconst currentSpan = icache.get(`span-${index}`);\n\t\t\t\tif (currentSpan !== span) {\n\t\t\t\t\ticache.set(`span-${index}`, span);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst span = icache.get(`span-${index}`);\n\t\tif (span) {\n\t\t\treturn (\n\t\t\t\t<div key={index} styles={{ flex: `${span}` }} classes={[fixedCss.spacer]}>\n\t\t\t\t\t{child}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={index}\n\t\t\t\tclasses={[spacingClass, direction === 'vertical' && alignClass, fixedCss.child]}\n\t\t\t>\n\t\t\t\t{child}\n\t\t\t</div>\n\t\t);\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tclasses={[\n\t\t\t\ttheme.variant(),\n\t\t\t\tdirection === 'horizontal' ? themeCss.horizontal : themeCss.vertical,\n\t\t\t\tdirection === 'horizontal' ? fixedCss.horizontal : fixedCss.vertical,\n\t\t\t\tfixedCss.root,\n\t\t\t\tdirection === 'horizontal' && alignClass,\n\t\t\t\tpaddingClass,\n\t\t\t\tstretch && fixedCss.stretch\n\t\t\t]}\n\t\t>\n\t\t\t{wrappedChildren}\n\t\t</div>\n\t);\n});\n\nexport default Stack;\n"]}