diff --git a/index.d.ts b/index.d.ts index dcd1f2a6278ded6b1e412a895b78ea11dea092a5..80fed17b512f103a7f26e8a11b8961b2da2b8086 100644 --- a/index.d.ts +++ b/index.d.ts @@ -50,6 +50,12 @@ interface BadgeProps { } export function Badge(props: BadgeProps): JSX.Element; +interface TocProps { + children?: React.ReactNode; + className?: string; +} +export function Toc(props: TocProps): JSX.Element; + interface LinkProps { children?: React.ReactNode; to: string; diff --git a/index.js b/index.js index 2bee6a9cf4c103c54597ee2c8f8a373d3130f788..a1707589bbc1f1cbc73a3ad0eee2ce9c50645eb1 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ export { default as Card } from "./src/components/core/Card"; export { default as Link } from "./src/components/core/Link"; export { default as Search } from "./src/components/core/Search"; export { default as Badge } from "./src/components/core/Badge"; +export { default as Toc } from "./src/components/core/Toc"; export { default as Map } from "./src/components/core/Map"; // Feature components diff --git a/src/components/core/Toc.tsx b/src/components/core/Toc.tsx new file mode 100644 index 0000000000000000000000000000000000000000..48cd82e0703dfd9e044af705e6c841c2c410ce69 --- /dev/null +++ b/src/components/core/Toc.tsx @@ -0,0 +1,141 @@ +import React from "react"; +import { useEffect, useState } from "react"; +import { useHeadsObserver } from "./utils/hook"; + +const rnd = (() => { + const gen = (min, max) => max++ && [...Array(max-min)].map((s, i) => String.fromCharCode(min+i)); + + const sets = { + alphaLower: gen(97,122), + alphaUpper: gen(65,90) + }; + + function* iter(len, set) { + if (set.length < 1) set = Object.values(sets).flat(); + for (let i = 0; i < len; i++) yield set[Math.random() * set.length|0] + } + + return Object.assign(((len, ...set) => [...iter(len, set.flat())].join('')), sets); +})(); + +const navStyle = { + position: "sticky -webkit-sticky", + top: "24px", + maxHeight: "calc(100vh - 40px)", + overflow: "auto", +} as unknown as React.CSSProperties; + +let navulliStyle = { + marginBottom: "15px", +} as React.CSSProperties; + +const getClassName = (level) => { + switch (level) { + case 1: + navulliStyle = { + ...navulliStyle, + marginLeft: "0px", + }; + return "head1"; + case 2: + navulliStyle = { + ...navulliStyle, + marginLeft: "10px", + }; + return "head2"; + case 3: + navulliStyle = { + ...navulliStyle, + marginLeft: "20px", + }; + return "head3"; + case 4: + navulliStyle = { + ...navulliStyle, + marginLeft: "30px", + }; + return "head4"; + default: + return undefined; + } +}; + +interface Props { + className?: string; +} + +const Toc = (props: Props) => { + const { className = "" } = props; + const [headings, setHeadings] = useState<any>([]); + const { activeId } = useHeadsObserver(); + + useEffect(() => { + const elements = Array.from( + document.querySelectorAll("h1, h2, h3, h4") + ).map((elem) => ({ + id: elem.id ? elem.id : elem.id=rnd(4), + text: elem.textContent, + level: Number(elem.nodeName.charAt(1)), + })); + setHeadings(elements); + }, []); + + return ( + <aside + className={`w-[20%] fixed right-0 top-auto h-screen bg-slate-50 p-5 ${className}`} + > + <div className="text-2xl pb-5 flex flex-row"> + <svg + xmlns="http://www.w3.org/2000/svg" + fill="none" + viewBox="0 0 24 24" + strokeWidth={1.5} + stroke="currentColor" + className="w-6 h-6 mt-2" + > + <path + strokeLinecap="round" + strokeLinejoin="round" + d="M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" + /> + </svg> + <p className="px-2 mt-0.5"> Menu interne </p> + </div> + <nav style={navStyle}> + <ul style={navulliStyle}> + {headings.map((heading) => ( + <li + key={heading.id} + className={getClassName(heading.level)} + style={navulliStyle} + > + <a + href={`#${heading.id}`} + onClick={(e) => { + e.preventDefault(); + const element = document.querySelector(`#${heading.id}`); + if(element) { + element?.scrollIntoView({ + behavior: "smooth", + }); + } + else { + console.log("No element"); + } + }} + style={{ + fontWeight: activeId == heading.id ? "bold" : "normal", + fontFamily: "Georgia, serif", + }} + > + {heading.text} + </a> + </li> + ))} + </ul> + </nav> + </aside> + ); +}; + +export default Toc; diff --git a/src/components/core/utils/hook.tsx b/src/components/core/utils/hook.tsx new file mode 100644 index 0000000000000000000000000000000000000000..352608659d061e0871952be6c7f436f79957b264 --- /dev/null +++ b/src/components/core/utils/hook.tsx @@ -0,0 +1,27 @@ +import { useRef, useState, useEffect } from "react"; + +export function useHeadsObserver() { + const observer = useRef<any>(); + const [activeId, setActiveId] = useState<any>(""); + + useEffect(() => { + const handleObsever = (entries) => { + entries.forEach((entry) => { + if (entry?.isIntersecting) { + setActiveId(entry.target.id); + } + }); + }; + + observer.current = new IntersectionObserver(handleObsever, { + rootMargin: "28% 0% -87% 0%", + }); + + const elements = document.querySelectorAll("h1, h2, h3, h4"); + elements.forEach((elem) => observer.current.observe(elem)); + + return () => observer.current?.disconnect(); + }, []); + + return { activeId }; +} diff --git a/src/pages-doc/doc/core/index.tsx b/src/pages-doc/doc/core/index.tsx index 6ba2f6780d2aa6a1e88a9a62a0d231d7ddb77968..f186edc6e0fbdd468cc59b364eb702589be41654 100644 --- a/src/pages-doc/doc/core/index.tsx +++ b/src/pages-doc/doc/core/index.tsx @@ -17,6 +17,8 @@ function index(): ReactElement { <br></br> <Link to="/doc/core/badge">Badge</Link> <br></br> + <Link to="/doc/core/toc">Toc</Link> + <br></br> <Link to="/doc/core/map">Map</Link> <br></br> <Link to="/doc/core/logo">Logo</Link> diff --git a/src/pages-doc/doc/core/toc.tsx b/src/pages-doc/doc/core/toc.tsx new file mode 100644 index 0000000000000000000000000000000000000000..566f4b99399d20b4d570344b956f9e84e5065097 --- /dev/null +++ b/src/pages-doc/doc/core/toc.tsx @@ -0,0 +1,567 @@ +import React from "react"; +import { Toc } from "@onegeo/gatsby-theme-onegeo"; +import { Link } from "gatsby"; + +function tocIndex() { + return ( + <> + <Toc className="" /> + <div className="mr-[25%] ml-4"> + <div className="prose"> + <Link to="/doc/core">Retour</Link> + <h2>Props</h2> + <div className="mockup-code"> + <pre> + <code> + {`interface Props { + className?: string; +}`} + </code> + </pre> + </div> + </div> + <br /> + <h1>Essai h1</h1> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h1>Essai h1 no_2</h1> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h2>Essai h2</h2> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h3>Essai h3</h3> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h4>Essai h4</h4> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h4>Essai h4 no_2</h4> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h3>Essai h3 no_2</h3> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h2>Essai h2 no_2</h2> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h1>Essai h1 no_3</h1> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + <h2>Essai h2 no_3</h2> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris + vestibulum posuere ultricies. Pellentesque habitant morbi tristique + senectus et netus et malesuada fames ac turpis egestas. Nullam sed + justo dolor. Aliquam luctus sem massa, suscipit suscipit arcu pulvinar + at. Duis laoreet nec nisl nec condimentum. Etiam bibendum felis + pulvinar nisi tincidunt, eget egestas dui sodales. Suspendisse + lobortis mi elit, eu auctor sem convallis quis. Nullam congue eleifend + nisi, et consectetur est maximus non. Nulla facilisi. Aenean posuere + nibh nec lacus fringilla lacinia. In varius dignissim elementum. Etiam + ornare quam nisl. Integer in tincidunt nisl. Suspendisse laoreet, odio + et blandit sodales, mi mauris euismod erat, at mattis ligula neque et + lectus. Suspendisse ullamcorper, odio eu euismod tempus, felis ex + vulputate lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum + primis in faucibus orci luctus et ultrices posuere cubilia curae; + Suspendisse laoreet tortor ut eleifend tristique. Proin porta sodales + lectus, a condimentum justo pretium sed. Quisque sapien sapien, + ultricies nec feugiat et, aliquam et purus. Integer quis ipsum + volutpat orci faucibus blandit quis at odio. Morbi ultrices tincidunt + neque, in rutrum libero cursus non. Pellentesque quis cursus lorem. + Vivamus tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. Lorem ipsum dolor sit amet, consectetur + adipiscing elit. Mauris vestibulum posuere ultricies. Pellentesque + habitant morbi tristique senectus et netus et malesuada fames ac + turpis egestas. Nullam sed justo dolor. Aliquam luctus sem massa, + suscipit suscipit arcu pulvinar at. Duis laoreet nec nisl nec + condimentum. Etiam bibendum felis pulvinar nisi tincidunt, eget + egestas dui sodales. Suspendisse lobortis mi elit, eu auctor sem + convallis quis. Nullam congue eleifend nisi, et consectetur est + maximus non. Nulla facilisi. Aenean posuere nibh nec lacus fringilla + lacinia. In varius dignissim elementum. Etiam ornare quam nisl. + Integer in tincidunt nisl. Suspendisse laoreet, odio et blandit + sodales, mi mauris euismod erat, at mattis ligula neque et lectus. + Suspendisse ullamcorper, odio eu euismod tempus, felis ex vulputate + lacus, eget sagittis mi nunc in dolor. Vestibulum ante ipsum primis in + faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse + laoreet tortor ut eleifend tristique. Proin porta sodales lectus, a + condimentum justo pretium sed. Quisque sapien sapien, ultricies nec + feugiat et, aliquam et purus. Integer quis ipsum volutpat orci + faucibus blandit quis at odio. Morbi ultrices tincidunt neque, in + rutrum libero cursus non. Pellentesque quis cursus lorem. Vivamus + tempus vulputate nisl, eu ultricies neque pulvinar eu. Ut vel + pellentesque dui. Nunc sit amet erat tincidunt, vehicula neque in, + ultrices felis. Sed pharetra tempor ante, at ultricies est elementum + nec. Proin sit amet augue a nunc cursus sollicitudin. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Mauris euismod tempus dui. Ut nec sem ligula. Quisque + pellentesque blandit nulla, at ornare nisi cursus at. Aliquam erat + volutpat. Phasellus pulvinar, nisl sit amet imperdiet accumsan, mauris + felis laoreet urna, laoreet varius nisi purus vitae mi. Aenean luctus + turpis vel eros scelerisque tempus. Pellentesque at cursus nisi. + Quisque aliquam libero vel lacus auctor pellentesque ut ut purus. Duis + hendrerit neque eget est ullamcorper volutpat. Pellentesque rhoncus + vel nisl eget aliquet. Vestibulum varius congue arcu et facilisis. + Donec dapibus purus metus, eget sodales leo molestie ac. Cras + porttitor lectus orci, id pulvinar ex ultricies at. Nunc non rhoncus + velit. Pellentesque ullamcorper elit neque, sit amet efficitur magna + aliquet at. Ut in nibh ut nisl dictum egestas. Quisque vel nulla + imperdiet sem scelerisque consectetur. Duis suscipit, orci in volutpat + consequat, nunc felis volutpat nulla, vel placerat risus purus quis + mi. Nullam maximus consequat mi, vitae fringilla nisl hendrerit at. + Cras ullamcorper nisi vitae efficitur pulvinar. Nulla sodales mollis + semper. Sed faucibus, ante quis congue convallis, tortor dolor + volutpat sem, et auctor arcu nulla sed ligula. Curabitur a arcu non + ipsum placerat aliquam sit amet id nibh. Sed condimentum magna ac + fringilla maximus. Vivamus pellentesque enim eget nunc gravida, vitae + varius orci convallis. Quisque sagittis mi lacus, sed aliquam velit + tincidunt sit amet. Nam vitae tortor feugiat, efficitur nisl ac, + fringilla urna. Vestibulum pharetra viverra laoreet. Mauris nec tortor + non lacus hendrerit hendrerit. + </div> + </> + ); +} + +export default tocIndex;