diff --git a/src/lib/components/Image.svelte b/src/lib/components/Image.svelte
new file mode 100644
index 0000000..b7a5cb2
--- /dev/null
+++ b/src/lib/components/Image.svelte
@@ -0,0 +1,15 @@
+
+
+{#await fetch_image_base64(src) then data}
+
+{/await}
diff --git a/src/lib/components/cards/Card.svelte b/src/lib/components/cards/Card.svelte
new file mode 100644
index 0000000..f889c65
--- /dev/null
+++ b/src/lib/components/cards/Card.svelte
@@ -0,0 +1,47 @@
+
+
+
+
+ {#if imgsrc !== undefined}
+
+ {/if}
+
+
+ {@render children()}
+
+
diff --git a/src/lib/components/form/Dropdown.svelte b/src/lib/components/form/Dropdown.svelte
new file mode 100644
index 0000000..8948192
--- /dev/null
+++ b/src/lib/components/form/Dropdown.svelte
@@ -0,0 +1,130 @@
+
+
+
+
+
diff --git a/src/lib/components/form/Dropdown.ts b/src/lib/components/form/Dropdown.ts
new file mode 100644
index 0000000..64da5f5
--- /dev/null
+++ b/src/lib/components/form/Dropdown.ts
@@ -0,0 +1,10 @@
+export interface DropdownOption {
+ /** The label displayed in the list of options. */
+ label: string;
+
+ /** The value assigned to the dropdown value variable */
+ value: string;
+
+ /** An optional icon displayed left to the label */
+ icon_url?: string;
+}
diff --git a/src/lib/components/index.ts b/src/lib/components/index.ts
index faf6ecd..673fbb6 100644
--- a/src/lib/components/index.ts
+++ b/src/lib/components/index.ts
@@ -1,18 +1,22 @@
+import Image from "./Image.svelte";
import LazyImage from "./LazyImage.svelte";
import LoadingIndicator from "./LoadingIndicator.svelte";
import Table from "./Table.svelte";
import Button from "./form/Button.svelte";
+import Dropdown from "./form/Dropdown.svelte";
import Input from "./form/Input.svelte";
import LazyDropdown from "./form/LazyDropdown.svelte";
import Search from "./form/Search.svelte";
+import Card from "./cards/Card.svelte";
import DriverCard from "./cards/DriverCard.svelte";
import LazyCard from "./cards/LazyCard.svelte";
import RaceCard from "./cards/RaceCard.svelte";
import SubstitutionCard from "./cards/SubstitutionCard.svelte";
import TeamCard from "./cards/TeamCard.svelte";
+import type { DropdownOption } from "./form/Dropdown";
import type { LazyDropdownOption } from "./form/LazyDropdown";
import type { TableColumn } from "./Table";
@@ -22,17 +26,20 @@ import UserIcon from "./svg/UserIcon.svelte";
export {
// Components
+ Image,
LazyImage,
LoadingIndicator,
Table,
// Form
Button,
+ Dropdown,
Input,
LazyDropdown,
Search,
// Cards
+ Card,
DriverCard,
LazyCard,
RaceCard,
@@ -40,6 +47,7 @@ export {
TeamCard,
// Types
+ type DropdownOption,
type LazyDropdownOption,
type TableColumn,