{"version":3,"sources":["webpack:///./Avensia.Common/Features/Shared/Accordion/index.tsx"],"names":["spacingStyle","marginLeft","marginRight","HeaderWrapper","props","Div","restProps","Header","width","height","textAlign","paddingTop","paddingBottom","HeaderLayout","padding","compose","css","display","justifyContent","alignItems","Body","shouldTranslateHeight","position","overflow","property","duration","DURATION","willChange","Panel","div","right","bottom","left","IconWrap","Plus","transition","AccordionHeader","span","lineHeight","fontWeight","fontSize","marginBottom","Accordion","mounted","state","componentWillReceiveProps","nextProps","isOpen","this","setState","shouldComponentUpdate","nextState","header","onToggle","children","componentDidMount","componentWillUnmount","updateOffsetHeight","ref","requestAnimationFrame","offsetHeight","Math","abs","render","borderWidth","noBorder","borderBottom","style","color","monochrome","black","onClick","disabled","appearance","Full","Bare","id","className","extraPadding","cursor","mediumGrey","upperCaseHeading","textTransform","headerFontSize","transform","isCompact","iconWidth","ToggleableField"],"mappings":"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","file":"assets/7.chunk.8d5bf2835d260bd8691e.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { Plus24x24 } from 'Shared/Icons/Plus';\r\nimport * as style from 'Shared/Style';\r\nimport Button, { Appearance as ButtonAppearance } from 'Shared/Button';\r\n\r\nconst spacingStyle = {\r\n // When the accordion is stretched to full viewport width we want\r\n // to narrows the content like with page components\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n};\r\n\r\ntype HeaderWrapperType = React.HTMLAttributes<HTMLDivElement> & {\r\n \r\n};\r\nconst HeaderWrapper: React.StatelessComponent<HeaderWrapperType> = props => {\r\n const { ...restProps } = props;\r\n return (\r\n <styled.Div\r\n {...restProps}\r\n />\r\n );\r\n};\r\n\r\nconst Header = styled(Button, {\r\n width: '100%',\r\n height: '100%',\r\n textAlign: 'left',\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n});\r\n\r\ntype HeaderLayoutPropType = React.HTMLAttributes<HTMLDivElement> &\r\n StyledProps & {\r\n padding: boolean;\r\n };\r\n\r\nconst HeaderLayout = styled((props: HeaderLayoutPropType) => {\r\n const { padding, compose, ...restProps } = props;\r\n return (\r\n <styled.Div\r\n {...restProps}\r\n css={compose({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n ...spacingStyle,\r\n })}\r\n />\r\n );\r\n});\r\n\r\nconst DURATION = 300;\r\n\r\ntype BodyStyleType = React.HTMLAttributes<HTMLDivElement> &\r\n StyledProps & {\r\n shouldTranslateHeight: boolean;\r\n };\r\nconst Body = styled((props: BodyStyleType) => {\r\n const { shouldTranslateHeight, compose, ...restProps } = props;\r\n return (\r\n <styled.Div\r\n {...restProps}\r\n css={compose({\r\n position: 'relative',\r\n overflow: 'hidden',\r\n ...spacingStyle,\r\n ...(shouldTranslateHeight && {\r\n ...style.transition({\r\n property: 'height',\r\n duration: `${DURATION}ms`,\r\n willChange: true,\r\n }),\r\n }),\r\n })}\r\n />\r\n );\r\n});\r\n\r\nconst Panel = styled.div({\r\n position: 'absolute',\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n});\r\n\r\nconst IconWrap = styled.div({\r\n display: 'inline-flex',\r\n})\r\n\r\nconst Plus = styled(Plus24x24, {\r\n transition: {\r\n property: 'transform',\r\n duration: 300,\r\n },\r\n});\r\n\r\nexport const AccordionHeader = styled.span({\r\n lineHeight: '130%',\r\n fontWeight: 500,\r\n fontSize: 20,\r\n marginBottom: 0,\r\n display: 'inline-block'\r\n});\r\n\r\ntype StateType = {\r\n height?: number;\r\n shouldTranslateHeight?: boolean;\r\n};\r\n\r\ntype PropType = {\r\n header: string | React.ReactNode;\r\n onToggle: () => void;\r\n isOpen?: boolean;\r\n className?: string;\r\n hasLinks?: boolean;\r\n extraPadding?: boolean;\r\n noBorder?: boolean;\r\n children?: string | React.ReactNode;\r\n upperCaseHeading?: boolean;\r\n headerFontSize?: string;\r\n iconWidth?: string;\r\n isCompact?: boolean;\r\n borderWidth?: number; \r\n fontWeight?: number;\r\n disabled?: boolean;\r\n /* css?: StyledDecorator | StyleOrStyleArray<Style>; */\r\n};\r\n\r\nconst Accordion = styled(\r\n class AccordionClass extends Component<PropType & StyledProps, StateType> {\r\n mounted = false;\r\n state = {\r\n height: 0,\r\n shouldTranslateHeight: true,\r\n };\r\n componentWillReceiveProps(nextProps: PropType) {\r\n if (nextProps.isOpen !== this.props.isOpen) {\r\n this.setState({ shouldTranslateHeight: true });\r\n } else {\r\n this.setState({ shouldTranslateHeight: false });\r\n }\r\n }\r\n shouldComponentUpdate(nextProps: PropType, nextState: StateType) {\r\n return (\r\n this.props.isOpen !== nextProps.isOpen ||\r\n this.props.header !== nextProps.header ||\r\n this.props.onToggle !== nextProps.onToggle ||\r\n this.props.children !== nextProps.children ||\r\n this.state.height !== nextState.height\r\n );\r\n }\r\n componentDidMount() {\r\n this.mounted = true;\r\n }\r\n componentWillUnmount() {\r\n this.mounted = false;\r\n }\r\n updateOffsetHeight(ref: HTMLElement) {\r\n if (ref) {\r\n // ref to prevent browser freeze\r\n requestAnimationFrame(() => {\r\n const height = ref.offsetHeight;\r\n if (this.mounted && Math.abs(this.state.height - height) > 2) {\r\n this.setState({ height });\r\n }\r\n });\r\n }\r\n }\r\n render() {\r\n const { shouldTranslateHeight, height } = this.state;\r\n const { borderWidth = 1 } = this.props;\r\n return (\r\n <styled.Div \r\n css={this.props.compose({\r\n ...(!this.props.noBorder && {\r\n borderBottom: {\r\n style: 'solid',\r\n width: borderWidth + 'px',\r\n color: style.colors.monochrome.black,\r\n },\r\n marginBottom: '16px',\r\n paddingBottom: '16px',\r\n }),\r\n /* ...this.props.compose(), */\r\n })}\r\n >\r\n <HeaderWrapper>\r\n <Header\r\n onClick={() => !this.props.disabled && this.props.onToggle()}\r\n appearance={[ButtonAppearance.Full, ButtonAppearance.Bare]}\r\n id={this.props.className}\r\n className={this.props.isOpen && this.props.className === \"size-guide-button-js\" ? \"open\" : \"\"} \r\n >\r\n <HeaderLayout padding={this.props.extraPadding} css={{...(this.props.disabled && { cursor: 'default'})}}>\r\n {typeof this.props.header === 'string' ? (\r\n <AccordionHeader css={{...(this.props.disabled && { color: style.colors.monochrome.mediumGrey}), ...(this.props.upperCaseHeading && { textTransform: 'uppercase'}), ...(this.props.fontWeight && { fontWeight: this.props.fontWeight}), ...(this.props.headerFontSize && { fontSize: this.props.headerFontSize, lineHeight: '100%'})}}>{this.props.header}</AccordionHeader>\r\n ) : (\r\n this.props.header\r\n )}\r\n {!this.props.disabled && \r\n <IconWrap>\r\n <Plus css={{\r\n transform: this.props.isOpen ? 'rotate(45deg)' : 'rotate(0deg)',\r\n width: this.props.isCompact ? '16px' : '24px',\r\n ...(this.props.iconWidth && {\r\n width: this.props.iconWidth\r\n })\r\n }} />\r\n </IconWrap> }\r\n </HeaderLayout>\r\n </Header>\r\n </HeaderWrapper>\r\n <Body\r\n shouldTranslateHeight={shouldTranslateHeight}\r\n css={{ height: this.props.isOpen && height ? `${height}px` : '0px' }}\r\n >\r\n <Panel ref={ref => this.updateOffsetHeight(ref)}>{this.props.children}</Panel>\r\n </Body>\r\n </styled.Div>\r\n );\r\n }\r\n },\r\n);\r\n\r\nexport default Accordion;\r\n\r\nexport const ToggleableField = styled(Accordion, {\r\n\r\n});\r\n"],"sourceRoot":""}