{"version":3,"sources":["webpack:///./src/components/chevron-down.tsx","webpack:///./src/components/chevron-up.tsx","webpack:///./src/components/table-of-contents/table-of-contents-list-item.tsx","webpack:///./src/components/table-of-contents/table-of-contents-link.tsx","webpack:///./src/components/table-of-contents/table-of-contents-item.tsx","webpack:///./src/components/table-of-contents/table-of-contents.tsx","webpack:///./src/templates/blog-post.tsx"],"names":["ChevronDown","xmlns","viewBox","fill","fillRule","d","clipRule","ChevronUp","TableOfContentsListItem","children","collapsed","className","TableOfContentsLink","isActive","to","useContext","HeadingContext","onScreenHeadings","fallbackHeading","navigateToHeading","length","onClick","navigate","TableOfContentsItem","data","index","maxIndex","useState","isExpanded","setIsExpanded","isCollapsed","key","url","title","items","map","item","itemIndex","isItemCollapsed","TableOfContents","toggleIsExpanded","aria-label","reduce","accumulator","currentItem","component","components","BlogPostTemplate","mdx","body","fields","slug","date","frontmatter","shortTitle","description","timeToRead","tableOfContents","path","Header","breadcrumbs","text","routes","ROOT","Content"],"mappings":"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","file":"component---src-templates-blog-post-tsx-d7828e3768ee8bf07fc8.js","sourcesContent":["import React from \"react\"\n\nconst ChevronDown: React.FC = () => (\n \n)\n\nexport default ChevronDown\n","import React from \"react\"\n\nconst ChevronUp: React.FC = () => (\n \n)\n\nexport default ChevronUp\n","import React from \"react\"\n\ntype TableOfContentsListItemProps = {\n children: React.ReactNode\n collapsed?: boolean\n}\n\nconst TableOfContentsListItem: React.FC = ({\n children,\n collapsed,\n}) => {\n return (\n {children}\n )\n}\n\nexport default TableOfContentsListItem\n","import React, { useContext } from \"react\"\nimport { navigate } from \"gatsby\"\n\nimport { HeadingContext } from \"../../context/provider\"\n\ntype TableOfContentsLinkProps = {\n children: React.ReactNode\n to: string\n}\n\nconst TableOfContentsLink: React.FC = ({\n children,\n to,\n}) => {\n const { onScreenHeadings, fallbackHeading, navigateToHeading } = useContext(\n HeadingContext\n )\n\n let isActive\n if (onScreenHeadings.length > 0) {\n isActive = onScreenHeadings[0] === to\n } else {\n isActive = fallbackHeading === to\n }\n\n return (\n \n )\n}\n\nexport default TableOfContentsLink\n","import React, { useState } from \"react\"\n\nimport TableOfContentsListItem from \"./table-of-contents-list-item\"\nimport TableOfContentsLink from \"./table-of-contents-link\"\n\ntype Item = {\n title: string\n url: string\n}\n\nexport type TableOfContentsItemProps = {\n data: Item & {\n items?: Item[]\n }\n index: number\n maxIndex: number\n}\n\nconst TableOfContentsItem: React.FC = ({\n data,\n index,\n maxIndex,\n}) => {\n const [isExpanded, setIsExpanded] = useState(false)\n\n const toggleIsExpanded = () => setIsExpanded(!isExpanded)\n\n const isCollapsed = maxIndex && index > maxIndex\n\n return (\n \n {data.title}\n {data.items && (\n <>\n \n\n \n {data.items.map((item, itemIndex) => {\n const isItemCollapsed = maxIndex && index + itemIndex > maxIndex\n\n return (\n \n \n {item.title}\n \n \n )\n })}\n
\n >\n )}\n \n )\n}\n\nexport default TableOfContentsItem\n","import React, { useState } from \"react\"\n\nimport ChevronDown from \"../chevron-down\"\nimport ChevronUp from \"../chevron-up\"\nimport TableOfContentsItem from \"./table-of-contents-item\"\n\ntype Item = {\n title: string\n url: string\n}\n\ntype TableOfContentsItem = Item & {\n items?: Item[]\n}\n\nexport type TableOfContentsData = { items: TableOfContentsItem[] }\n\ntype TableOfContentsProps = {\n data?: TableOfContentsData\n}\n\nconst TableOfContents: React.FC = ({ data }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n\n const toggleIsExpanded = () => setIsExpanded(!isExpanded)\n\n const findItemComponents = (accumulator, currentItem) => {\n const component = (\n \n )\n\n let index = accumulator.index + 1\n if (currentItem.items) {\n index += currentItem.items.length\n }\n\n return {\n components: [...accumulator.components, component],\n index,\n }\n }\n\n return (\n \n )\n}\n\nexport default TableOfContents\n","import React from \"react\"\nimport { graphql, PageProps } from \"gatsby\"\n\nimport PostLayout from \"../layouts/post\"\nimport Article from \"../components/article/article\"\nimport TableOfContents, {\n TableOfContentsData,\n} from \"../components/table-of-contents/table-of-contents\"\nimport routes from \"../common/routes\"\nimport MDX from \"../components/mdx/mdx\"\n\ntype DataProps = {\n mdx: {\n body: string\n fields: {\n date: string\n slug: string\n }\n frontmatter: {\n description: string\n shortTitle: string\n title: string\n }\n timeToRead: number\n tableOfContents: TableOfContentsData\n }\n}\n\nconst BlogPostTemplate: React.FC> = ({ data }) => {\n const {\n mdx: {\n body,\n fields: { slug, date },\n frontmatter: { title, shortTitle, description },\n timeToRead,\n tableOfContents,\n },\n } = data\n\n return (\n \n \n \n \n \n {body}\n \n \n \n )\n}\n\nexport default BlogPostTemplate\n\nexport const query = graphql`\n query($slug: String!) {\n mdx(fields: { slug: { eq: $slug } }) {\n ...BlogPost\n body\n frontmatter {\n shortTitle\n }\n tableOfContents(maxDepth: 3)\n }\n }\n`\n"],"sourceRoot":""}