HeadingLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
",
+ },
+ },
+ }}
+/>
+
diff --git a/src/lib/components/addons/stories/AddOnsNavigation.stories.svelte b/src/lib/components/addons/stories/AddOnsNavigation.stories.svelte
new file mode 100644
index 000000000..fc3a9a5f8
--- /dev/null
+++ b/src/lib/components/addons/stories/AddOnsNavigation.stories.svelte
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/lib/components/common/Empty.svelte b/src/lib/components/common/Empty.svelte
index 82dbae30f..88b42311d 100644
--- a/src/lib/components/common/Empty.svelte
+++ b/src/lib/components/common/Empty.svelte
@@ -13,6 +13,7 @@
.container {
display: flex;
padding: 1.5rem;
+ flex: 1 0 0;
flex-direction: column;
align-items: center;
justify-content: center;
diff --git a/src/lib/components/common/Tip.svelte b/src/lib/components/common/Tip.svelte
new file mode 100644
index 000000000..9f8566db0
--- /dev/null
+++ b/src/lib/components/common/Tip.svelte
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/src/lib/components/common/stories/Tip.stories.svelte b/src/lib/components/common/stories/Tip.stories.svelte
new file mode 100644
index 000000000..e5b6af04a
--- /dev/null
+++ b/src/lib/components/common/stories/Tip.stories.svelte
@@ -0,0 +1,48 @@
+
+
+
+ All dogs go to heaven
+
+
+
+
+
+ Pinned items will appear here.
+
+
+
+
+
+
+ This feature is for premium users.
+
+
+
+
+
+
+ Learn about all the interesting facts
+
+
diff --git a/src/lib/components/Search.svelte b/src/lib/components/inputs/Search.svelte
similarity index 90%
rename from src/lib/components/Search.svelte
rename to src/lib/components/inputs/Search.svelte
index a6e59aa50..886392cef 100644
--- a/src/lib/components/Search.svelte
+++ b/src/lib/components/inputs/Search.svelte
@@ -1,6 +1,7 @@
DocumentCloud
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/routes/app/+page.svelte b/src/routes/app/+page.svelte
index 8ea406a44..66cb3ba50 100644
--- a/src/routes/app/+page.svelte
+++ b/src/routes/app/+page.svelte
@@ -1,6 +1,6 @@
-
-
-
-
- {#await searchResults}
- Loading…
- {:then results}
-
- {/await}
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+ {#await searchResults}
+ Loading…
+ {:then results}
+
+ {/await}
-
- {#if $visible && $total}
- Showing {$visible.size.toLocaleString()} of {$total.toLocaleString()} results
- {/if}
-
-
-
+
+
+
+
+ {#if $visible && $total}
+ Showing {$visible.size.toLocaleString()} of {$total.toLocaleString()}
+ results
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/routes/app/add-ons/+page.ts b/src/routes/app/add-ons/+page.ts
index e69de29bb..788335f94 100644
--- a/src/routes/app/add-ons/+page.ts
+++ b/src/routes/app/add-ons/+page.ts
@@ -0,0 +1,9 @@
+import { getAddons } from "@/lib/api/addons.js";
+
+export async function load({ url, fetch }) {
+ const params = Object.fromEntries(url.searchParams.entries());
+ const addons = getAddons(params, fetch);
+ return {
+ addons,
+ };
+}
diff --git a/src/routes/app/add-ons/[owner]/[repo]/+layout.ts b/src/routes/app/add-ons/[owner]/[repo]/+layout.ts
new file mode 100644
index 000000000..d7732afd2
--- /dev/null
+++ b/src/routes/app/add-ons/[owner]/[repo]/+layout.ts
@@ -0,0 +1,18 @@
+import { breadcrumbTrail } from "$lib/utils/navigation";
+import { getAddon } from "@/lib/api/addons.js";
+import { error } from "@sveltejs/kit";
+
+export async function load({ url, params, fetch, parent }) {
+ const { owner, repo } = params;
+ const addon = await getAddon(owner, repo, fetch);
+ if (!addon) {
+ return error(404, "Add-On Not Found");
+ }
+ const breadcrumbs = await breadcrumbTrail(parent, [
+ { href: url.pathname, title: addon.name },
+ ]);
+ return {
+ addon,
+ breadcrumbs,
+ };
+}
diff --git a/src/routes/app/add-ons/[owner]/[repo]/+page.svelte b/src/routes/app/add-ons/[owner]/[repo]/+page.svelte
index e69de29bb..f7cb5f44b 100644
--- a/src/routes/app/add-ons/[owner]/[repo]/+page.svelte
+++ b/src/routes/app/add-ons/[owner]/[repo]/+page.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+ {data.addon.name}
+
+
diff --git a/src/routes/app/sidebar/AddOns.svelte b/src/routes/app/sidebar/AddOns.svelte
index 778d6fabd..72b0f54e7 100644
--- a/src/routes/app/sidebar/AddOns.svelte
+++ b/src/routes/app/sidebar/AddOns.svelte
@@ -9,6 +9,7 @@
import SidebarItem from "$lib/components/sidebar/SidebarItem.svelte";
import SidebarGroup from "$lib/components/sidebar/SidebarGroup.svelte";
import Pin from "@/common/Pin.svelte";
+ import { getPinnedAddons } from "@/lib/api/addons";
export let pinnedAddOns: Promise>;