summaryrefslogtreecommitdiff
path: root/docs/src/components/LeftSidebar/LeftSidebar.astro
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src/components/LeftSidebar/LeftSidebar.astro')
-rw-r--r--docs/src/components/LeftSidebar/LeftSidebar.astro96
1 files changed, 96 insertions, 0 deletions
diff --git a/docs/src/components/LeftSidebar/LeftSidebar.astro b/docs/src/components/LeftSidebar/LeftSidebar.astro
new file mode 100644
index 000000000..f44762dba
--- /dev/null
+++ b/docs/src/components/LeftSidebar/LeftSidebar.astro
@@ -0,0 +1,96 @@
+---
+import { SIDEBAR } from '../../config.ts';
+const {currentPage} = Astro.props;
+---
+
+<nav aria-labelledby="grid-left">
+ <ul class="nav-groups">
+ {SIDEBAR.map(category => (
+ <li>
+ <div class="nav-group">
+ <h2 class="nav-group-title">{category.text}</h2>
+ <ul>
+ {category.children.map(child => (
+ <li class="nav-link"><a href={`${Astro.site.pathname}${child.link}`} aria-current={`${currentPage === child.link ? 'page' : 'false'}`}>{child.text}</a></li>
+ ))}
+ </ul>
+ </div>
+ </li>
+ ))}
+ </ul>
+</nav>
+
+<script>
+ window.addEventListener('DOMContentLoaded', (event) => {
+ var target = document.querySelector('[aria-current="page"]');
+ if (target && (target.offsetTop > (window.innerHeight - 100))) {
+ document.querySelector('.nav-groups').scrollTop = target.offsetTop;
+ }
+ });
+</script>
+
+<style>
+ nav {
+ width: 100%;
+ margin-right: 1rem;
+ }
+ .nav-groups {
+ height: 100%;
+ padding: 2rem 0;
+ overflow-x: visible;
+ overflow-y: auto;
+ max-height: 100vh;
+ }
+
+ .nav-groups > li + li {
+ margin-top: 2rem;
+ }
+
+ .nav-groups > :first-child {
+ padding-top: var(--doc-padding);
+ }
+
+ .nav-groups > :last-child {
+ padding-bottom: 2rem;
+ margin-bottom: var(--theme-navbar-height);
+ }
+
+ .nav-group-title {
+ font-size: 1.0rem;
+ font-weight: 700;
+ padding: 0.1rem 1rem;
+ text-transform: uppercase;
+ margin-bottom: 0.5rem;
+ }
+
+ .nav-link a {
+ font-size: 1.0rem;
+ margin: 1px;
+ padding: 0.3rem 1rem;
+ font: inherit;
+ color: inherit;
+ text-decoration: none;
+ display: block;
+ }
+ .nav-link a:hover,
+ .nav-link a:focus {
+ background-color: var(--theme-bg-hover);
+ }
+
+ .nav-link a[aria-current="page"] {
+ color: var(--theme-text-accent);
+ background-color: var(--theme-bg-accent);
+ font-weight: 600;
+ }
+
+ :global(:root.theme-dark) .nav-link a[aria-current="page"] {
+ color: hsla(var(--color-base-white), 100%, 1);
+ }
+
+ @media (min-width: 50em) {
+ .nav-groups {
+ padding: 0;
+ }
+ }
+
+</style>