\r\n {props.children}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Card\":\"Card--3D4vL\",\"Card-img\":\"Card-img--Qbwvg\",\"Card-preHeading\":\"Card-preHeading--y48En\",\"Card-heading\":\"Card-heading--21dGp\",\"Card-hint\":\"Card-hint--FEs-H\",\"Card--blueDark\":\"Card--blueDark--jY8-3\",\"Card--blueMid\":\"Card--blueMid--2EGE-\",\"Card--blueLight\":\"Card--blueLight--3UL7x\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MediaTeaser\":\"MediaTeaser--2yJ00\",\"MediaTeaser-media\":\"MediaTeaser-media--y6KSp\",\"MediaTeaser-content\":\"MediaTeaser-content--3_OuN\",\"MediaTeaser-heading\":\"MediaTeaser-heading--lrkg2\",\"MediaTeaser-preHeading\":\"MediaTeaser-preHeading--tOBYb\",\"MediaTeaser--imageRight\":\"MediaTeaser--imageRight--2INKH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ArticleSection\":\"ArticleSection--3aaIB\",\"ArticleSection-heading\":\"ArticleSection-heading--1HDXY\",\"ArticleSection-content\":\"ArticleSection-content--2-j6j\",\"ArticleSection-img\":\"ArticleSection-img--ONF5P\",\"ArticleSection--borderless\":\"ArticleSection--borderless--3cKMX\",\"ArticleSection--withImage\":\"ArticleSection--withImage--37Hks\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Page\":\"Page--2dsx8\",\"Page-navInner\":\"Page-navInner--1ipQq\",\"Page--menuOpen\":\"Page--menuOpen--2WSr_\",\"Page-navButton\":\"Page-navButton--1STY0\",\"Page-main\":\"Page-main--1fuKg\",\"Page-nav\":\"Page-nav--1zQ0c\"};","import React from \"react\";\r\nimport styles from \"./Spacer.module.less\";\r\n\r\nexport default function Spacer(props: {\r\n children: React.ReactNode;\r\n size: keyof typeof styles\r\n}) {\r\n return
{props.children}
;\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Header\":\"Header--2TUzx\",\"Header-video\":\"Header-video--28LTz\",\"Header-logo\":\"Header-logo--HMtKT\",\"Header-heading\":\"Header-heading--TuL4q\",\"Header-content\":\"Header-content--1zcIH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CompactNav\":\"CompactNav--3Jw2b\",\"CompactNav-ul\":\"CompactNav-ul--3jMwT\",\"CompactNav-li\":\"CompactNav-li--3P1Te\",\"CompactNav-btn\":\"CompactNav-btn--2tEvn\",\"CompactNav-btn--blueDark\":\"CompactNav-btn--blueDark--YKlNf\",\"CompactNav-btn--blueMid\":\"CompactNav-btn--blueMid--1YGTb\",\"CompactNav-btn--blueLight\":\"CompactNav-btn--blueLight--1eKRB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ArticleHeader\":\"ArticleHeader--30vsw\",\"ArticleHeader-preHeading\":\"ArticleHeader-preHeading--k2mAL\",\"ArticleHeader-heading\":\"ArticleHeader-heading--38aa4\",\"ArticleHeader-close\":\"ArticleHeader-close--3dPCR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ChapterHeading\":\"ChapterHeading--2hFUo\",\"ChapterHeading-preHeading\":\"ChapterHeading-preHeading--2AfdM\",\"ChapterHeading-heading\":\"ChapterHeading-heading--3YOLX\"};","import React from \"react\";\r\nimport styles from \"./MediaTeaser.module.less\";\r\nimport Button from \"../Button/Button\";\r\n\r\nexport interface Props {\r\n heading: string;\r\n preHeading?: string;\r\n body?: string;\r\n image: string;\r\n linkText: string;\r\n linkTo: string;\r\n imagePosition?: \"left\" | \"right\";\r\n}\r\n\r\nexport default function MediaTeaser(props: Props) {\r\n return (\r\n
\r\n \r\n

\r\n
\r\n \r\n {props.preHeading ?
{props.preHeading} : null}\r\n
{props.heading}
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n );\r\n}\r\n","export const scrollToRef = (ref: React.RefObject
) =>\r\n ref.current?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"start\"\r\n });\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Search\":\"Search--1YMPf\",\"Search-input\":\"Search-input--1Vqy_\",\"Search-input--hasValue\":\"Search-input--hasValue--1oI_1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"HighlightBox\":\"HighlightBox--2Jcqf\",\"HighlightBox-heading\":\"HighlightBox-heading--3tuCq\",\"HighlightBox-content\":\"HighlightBox-content--1PFmd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"QuestionAnswer\":\"QuestionAnswer--25q2L\",\"QuestionAnswer-question\":\"QuestionAnswer-question--3rFcK\",\"QuestionAnswer-answer\":\"QuestionAnswer-answer--3ZY3K\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"LinkList\":\"LinkList--2DiKR\",\"LinkList-li\":\"LinkList-li--uIujN\",\"LinkList-a\":\"LinkList-a--3gAWU\"};","import React from \"react\";\r\nimport styles from \"./ChapterHeading.module.less\";\r\n\r\nexport interface Props {\r\n heading: string;\r\n preHeading?: string;\r\n}\r\n\r\nfunction ChapterHeading(props: Props) {\r\n return (\r\n \r\n {props.preHeading ? {props.preHeading} : null}\r\n
{props.heading}
\r\n \r\n );\r\n}\r\n\r\nexport default ChapterHeading;\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport styles from \"./Card.module.less\";\r\n\r\nexport interface Props {\r\n image?: string;\r\n preHeading?: string;\r\n heading: string;\r\n linkTo: string;\r\n backgroundColor: \"blueDark\" | \"blueMid\" | \"blueLight\";\r\n}\r\n\r\nfunction Card(props: Props) {\r\n const backgroundClass = styles[`Card--${props.backgroundColor}`];\r\n\r\n return (\r\n \r\n
\r\n {props.preHeading}\r\n {props.heading}
\r\n Read more\r\n \r\n );\r\n}\r\n\r\nexport default Card;\r\n","import React from \"react\";\r\nimport styles from \"./Grid.module.less\";\r\n\r\nexport interface Props {\r\n children: JSX.Element | JSX.Element[] | null;\r\n columns: number;\r\n}\r\n\r\nexport default function Grid(props: Props) {\r\n if (props.children === null) {\r\n return null;\r\n }\r\n return {props.children}
;\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PatternBackground\":\"PatternBackground--1VMfk\",\"PatternBackground--withOverflow\":\"PatternBackground--withOverflow--18n_O\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CollapseContent-content\":\"CollapseContent-content--2u7Ev\",\"CollapseContent-btn\":\"CollapseContent-btn--UwNay\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Footer\":\"Footer--WNcNY\",\"Footer-copyright\":\"Footer-copyright--2a7oW\"};","import React, { useState, useEffect, useMemo, createRef } from \"react\";\r\nimport Header from \"../components/Header/Header\";\r\nimport { Chapter, getChapters, ChapterArticle } from \"../api/cocApi\";\r\nimport ChapterHeading from \"../components/ChapterHeading/ChapterHeading\";\r\nimport Card from \"../components/Card/Card\";\r\nimport Grid from \"../components/Grid/Grid\";\r\nimport Container from \"../components/Container/Container\";\r\nimport CompactNav from \"../components/CompactNav/CompactNav\";\r\nimport Media from \"react-media\";\r\nimport PatternBackground from \"../components/PatternBackground/PatternBackground\";\r\nimport MediaTeaser from \"../components/MediaTeaser/MediaTeaser\";\r\nimport { scrollToRef } from \"../common/scrollToRef\";\r\nimport Spacer from \"../components/Spacer/Spacer\";\r\nimport searchStyles from \"../common/Search.module.less\";\r\nimport Button from \"../components/Button/Button\";\r\n\r\nfunction Home() {\r\n const [chapters, setChapters] = useState([]);\r\n const [results, setResults] = useState([]);\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const chapterRefs = useMemo(() => Array.from({ length: 3 }).map(() => createRef()), []);\r\n const matchText = (query: string, source: string) => source.search(new RegExp(query, \"i\")) !== -1;\r\n const anyMatchText = (query: string, ...sources: string[]) => sources.some(source => matchText(query, source));\r\n\r\n useEffect(() => {\r\n getChapters().then(chapters => {\r\n setChapters(chapters);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!searchQuery || searchQuery === \"\") {\r\n return;\r\n }\r\n\r\n const result = chapters.flatMap(chapter => {\r\n return chapter.items\r\n .filter(item =>\r\n anyMatchText(\r\n searchQuery,\r\n item.heading,\r\n item.howToAct.map(x => x.answer + x.question).join(),\r\n item.introduction,\r\n item.keyTakeaways,\r\n item.meaning.asEmployee,\r\n item.meaning.asLeader,\r\n item.relatedMaterial.map(x => x.text).join(),\r\n item.standFor\r\n )\r\n )\r\n .toArray();\r\n });\r\n\r\n setResults(result as ChapterArticle[]);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [chapters, searchQuery]);\r\n\r\n return (\r\n <>\r\n \r\n (\r\n {\r\n setSearchQuery(\"\");\r\n setImmediate(() => {\r\n scrollToRef(chapterRefs[0]);\r\n });\r\n }\r\n },\r\n {\r\n title: \"Chapter 2\",\r\n background: \"blueLight\",\r\n onClick: () => {\r\n setSearchQuery(\"\");\r\n setImmediate(() => {\r\n scrollToRef(chapterRefs[1]);\r\n });\r\n }\r\n },\r\n {\r\n title: \"Chapter 3\",\r\n background: \"blueMid\",\r\n onClick: () => {\r\n setSearchQuery(\"\");\r\n setImmediate(() => {\r\n scrollToRef(chapterRefs[2]);\r\n });\r\n }\r\n }\r\n ]}\r\n />\r\n )}\r\n />\r\n\r\n \r\n setSearchQuery(e.target.value)}\r\n />\r\n
\r\n\r\n \r\n \r\n {searchQuery ? (\r\n <>\r\n \r\n\r\n {results.length > 0 ? (\r\n \r\n {results.map(item => (\r\n \r\n ))}\r\n \r\n ) : (\r\n \r\n
The search query did not match any articles.
\r\n
\r\n
\r\n )}\r\n \r\n ) : (\r\n chapters.map((chapter, chapterIndex) => (\r\n \r\n \r\n\r\n \r\n {chapter.items.toArray().map((item, itemIndex) => (\r\n \r\n ))}\r\n \r\n
\r\n ))\r\n )}\r\n \r\n \r\n\r\n \r\n\r\n - Jan Larsson
CEO and President\"\r\n linkText=\"Read more\"\r\n linkTo=\"/word-from-our-ceo\"\r\n image={process.env.PUBLIC_URL + \"/assets/ceo.jpg\"}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Home;\r\n","import React from \"react\";\r\nimport styles from \"./Header.module.less\";\r\nimport Media from \"react-media\";\r\n\r\nexport interface Props {}\r\n\r\nfunction Header(props: Props) {\r\n return (\r\n \r\n (\r\n \r\n )}\r\n />\r\n\r\n
\r\n\r\n (\r\n <>\r\n Code of Conduct
\r\n \r\n
\r\n A guide on how we act in our daily work, both as business partners, employers, employees\r\n and members of society.\r\n
\r\n
\r\n \r\n )}\r\n />\r\n \r\n );\r\n}\r\n\r\nexport default Header;\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Grid\":\"Grid--2tz2Z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Container\":\"Container--2nQXc\"};","import React from \"react\";\r\nimport { ChapterColor } from \"../../api/cocApi\";\r\nimport styles from \"./CompactNav.module.less\";\r\n\r\nexport interface Props {\r\n items: { title: string; onClick?: () => void; background: ChapterColor }[];\r\n}\r\n\r\nexport default function CompactNav(props: Props) {\r\n return (\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Spacer--medium\":\"Spacer--medium--2vu9y\",\"Spacer--large\":\"Spacer--large--3HctI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Intro\":\"Intro--1wtZu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Editorial\":\"Editorial--hI_zN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FullWidthTeaser\":\"FullWidthTeaser--NcFUs\"};","import React from \"react\";\r\nimport styles from \"./ArticleHeader.module.less\";\r\nimport Container from \"../Container/Container\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport interface Props {\r\n image?: string;\r\n imageHeight?: number;\r\n backgroundImage?: string;\r\n heading: string;\r\n preHeading?: string;\r\n onClose?: () => void;\r\n}\r\n\r\nexport default function ArticleHeading(props: Props) {\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n {props.preHeading ? (\r\n {props.preHeading}\r\n ) : null}\r\n {props.heading}
\r\n\r\n {props.onClose ? (\r\n \r\n ) : null}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./Intro.module.less\";\r\n\r\nexport interface Props {\r\n content: string;\r\n}\r\n\r\nexport default function Intro(props: Props) {\r\n return (\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./Editorial.module.less\";\r\n\r\nexport default function Editorial(props: { className?: string, children: React.ReactNode }) {\r\n return
{props.children}
;\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport ArticleHeader from \"../components/ArticleHeader/ArticleHeader\";\r\nimport Container from \"../components/Container/Container\";\r\nimport Intro from \"../components/Intro/Intro\";\r\nimport PatternBackground from \"../components/PatternBackground/PatternBackground\";\r\nimport Spacer from \"../components/Spacer/Spacer\";\r\nimport Editorial from \"../components/Editorial/Editorial\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { getArticle, Article as ArticleModel } from \"../api/cocApi\";\r\n\r\nexport interface Props extends RouteComponentProps<{ slug?: string }> {}\r\n\r\nfunction Article(props: Props) {\r\n const [article, setArticle] = useState
();\r\n\r\n useEffect(() => {\r\n if (props.match.params.slug) {\r\n getArticle(\"/\" + props.match.params.slug).then(c => setArticle(c));\r\n }\r\n }, [props.match.params.slug]);\r\n\r\n if (article == null) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n {article.introduction ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Article;\r\n","import React from \"react\";\r\nimport styles from \"./HighlightBox.module.less\";\r\n\r\nexport interface Props {\r\n heading: string;\r\n content: string;\r\n}\r\n\r\nexport default function HighlightBox(props: Props) {\r\n return (\r\n \r\n
{props.heading}
\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./ArticleSection.module.less\";\r\n\r\nexport interface Props {\r\n heading: string;\r\n headingImage?: string;\r\n children: React.ReactNode;\r\n borderless?: boolean;\r\n}\r\n\r\nexport default function ArticleSection(props: Props) {\r\n return (\r\n
\r\n
\r\n
{props.heading}
\r\n {props.headingImage ?

: null}\r\n
\r\n
{props.children}
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./QuestionAnswer.module.less\";\r\n\r\nexport default function QuestionAnswer(props: { question: string; answer: string }) {\r\n return (\r\n \r\n
\r\n Q: \r\n
\r\n
\r\n A: \r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./LinkList.module.less\";\r\n\r\nexport interface Props {\r\n links: {\r\n text: string;\r\n url: string;\r\n }[];\r\n}\r\n\r\nexport default function Intro(props: Props) {\r\n return (\r\n \r\n {props.links.map((link, index) => (\r\n - {link.text}
\r\n ))}\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport styles from \"./ArticleNav.module.less\";\r\nimport Container from \"../Container/Container\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ChapterArticle } from \"../../api/cocApi\";\r\n\r\nexport interface Props {\r\n nextArticle?: ChapterArticle;\r\n previousArticle?: ChapterArticle;\r\n}\r\n\r\nexport default function ArticleNav(props: Props) {\r\n return (\r\n \r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport useCollapse from \"react-collapsed\";\r\nimport Button from \"../Button/Button\";\r\nimport styles from \"./CollapseContent.module.less\";\r\n\r\nexport interface Props {\r\n enabled?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport default function CollapseContent(props: Props): JSX.Element {\r\n const [isOpen, setOpen] = useState(false);\r\n const { getCollapseProps, getToggleProps } = useCollapse({ isOpen, collapsedHeight: 115 });\r\n\r\n if (!props.enabled) {\r\n return <>{props.children};\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {props.children}\r\n
\r\n\r\n