initial commit
This commit is contained in:
commit
3c2fb32b3e
73 changed files with 22349 additions and 0 deletions
124
src/components/navigation/sidebars/nav/Tree.tsx
Normal file
124
src/components/navigation/sidebars/nav/Tree.tsx
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
import { type Component, Index, For } from "solid-js";
|
||||
import { Accordion } from "@ark-ui/solid";
|
||||
|
||||
import { ShevronSmallDown } from "@icons";
|
||||
import type { TreeProps } from "../types";
|
||||
|
||||
export const Tree: Component<TreeProps> = props => {
|
||||
const { currentRoute, currentModule, currentClass, items } =
|
||||
props;
|
||||
|
||||
const typeKeys = items!.types && Object.keys(items!.types);
|
||||
|
||||
const tutorials =
|
||||
items!.tutorials && items!.tutorials
|
||||
? items!.tutorials.configuration
|
||||
: null;
|
||||
|
||||
return (
|
||||
<nav class="navtree">
|
||||
<Accordion.Root
|
||||
defaultValue={
|
||||
currentRoute === "types" ? ["Types"] : ["Configuration"]
|
||||
}
|
||||
collapsible
|
||||
multiple
|
||||
>
|
||||
<Accordion.Item value={"Configuration"}>
|
||||
<Accordion.ItemTrigger>
|
||||
<Accordion.ItemIndicator>
|
||||
<ShevronSmallDown class={"nav-shevron"} />
|
||||
</Accordion.ItemIndicator>
|
||||
<p>
|
||||
<a href={"/docs/configuration"}>Configuration</a>
|
||||
</p>
|
||||
</Accordion.ItemTrigger>
|
||||
<Accordion.ItemContent>
|
||||
<For each={tutorials}>
|
||||
{item => (
|
||||
<div
|
||||
class={`arktree-item ${currentModule === item.type ? "__current-type-doc" : ""}`}
|
||||
>
|
||||
<a href={`/docs/configuration/${item.type}`}>
|
||||
{item.name}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</For>
|
||||
</Accordion.ItemContent>
|
||||
</Accordion.Item>
|
||||
<Accordion.Item value={"Types"}>
|
||||
<Accordion.ItemTrigger>
|
||||
<Accordion.ItemIndicator>
|
||||
<ShevronSmallDown class={"nav-shevron"} />
|
||||
</Accordion.ItemIndicator>
|
||||
<p>
|
||||
<a href={"/docs/types"}>Type Definitions</a>
|
||||
</p>
|
||||
</Accordion.ItemTrigger>
|
||||
<Accordion.ItemContent>
|
||||
<Index each={typeKeys}>
|
||||
{typeKey => {
|
||||
return (
|
||||
<Accordion.Root
|
||||
defaultValue={
|
||||
currentModule === typeKey()
|
||||
? [typeKey()]
|
||||
: [""]
|
||||
}
|
||||
multiple
|
||||
collapsible
|
||||
>
|
||||
<Accordion.Item
|
||||
value={typeKey()}
|
||||
id={typeKey()}
|
||||
class={
|
||||
typeKey() === currentModule
|
||||
? "__current-type-doc"
|
||||
: ""
|
||||
}
|
||||
>
|
||||
<Accordion.ItemTrigger
|
||||
id={`${typeKey()}:button`}
|
||||
>
|
||||
<Accordion.ItemIndicator>
|
||||
<ShevronSmallDown
|
||||
class={"nav-shevron"}
|
||||
/>
|
||||
</Accordion.ItemIndicator>
|
||||
<p>
|
||||
<a href={`/docs/types/${typeKey()}`}>
|
||||
{typeKey()}
|
||||
</a>
|
||||
</p>
|
||||
</Accordion.ItemTrigger>
|
||||
<Accordion.ItemContent>
|
||||
<For each={items!.types[typeKey()]}>
|
||||
{submodule => (
|
||||
<div
|
||||
class={
|
||||
currentClass === submodule.name
|
||||
? "__current-type-doc"
|
||||
: ""
|
||||
}
|
||||
>
|
||||
<a
|
||||
href={`/docs/types/${submodule.type}/${submodule.name}`}
|
||||
>
|
||||
{submodule.name}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</For>
|
||||
</Accordion.ItemContent>
|
||||
</Accordion.Item>
|
||||
</Accordion.Root>
|
||||
);
|
||||
}}
|
||||
</Index>
|
||||
</Accordion.ItemContent>
|
||||
</Accordion.Item>
|
||||
</Accordion.Root>
|
||||
</nav>
|
||||
);
|
||||
};
|
||||
52
src/components/navigation/sidebars/nav/index.tsx
Normal file
52
src/components/navigation/sidebars/nav/index.tsx
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import { createSignal, type Component } from "solid-js";
|
||||
|
||||
import { LoadingSpinner, MenuToX, XToMenu } from "@icons";
|
||||
import { Tree } from "./Tree";
|
||||
import type { NavProps } from "../types";
|
||||
|
||||
const NavComponent: Component<NavProps> = props => {
|
||||
const [open, setOpen] = createSignal<boolean>(false);
|
||||
const { tree, mobile, routes } = props;
|
||||
|
||||
if (!tree) {
|
||||
return <LoadingSpinner />;
|
||||
}
|
||||
|
||||
function toggle(e: MouseEvent) {
|
||||
e.preventDefault();
|
||||
setOpen(!open());
|
||||
}
|
||||
|
||||
if (!mobile) {
|
||||
return (
|
||||
<Tree
|
||||
currentRoute={tree.currentRoute}
|
||||
currentModule={tree.currentModule || null}
|
||||
currentClass={tree.currentClass || null}
|
||||
items={routes}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div class="nav-toggle">
|
||||
<div onclick={e => toggle(e)}>
|
||||
{open() ? (
|
||||
<MenuToX class="nav-icon" />
|
||||
) : (
|
||||
<XToMenu class="nav-icon" />
|
||||
)}
|
||||
</div>
|
||||
<div class={`nav-items ${open() ? "shown" : ""}`}>
|
||||
<Tree
|
||||
currentRoute={tree.currentRoute}
|
||||
currentModule={tree.currentModule}
|
||||
currentClass={tree.currentClass}
|
||||
items={routes}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default NavComponent;
|
||||
Loading…
Add table
Add a link
Reference in a new issue