From 6994547d13f40df5b5cf643e789e4b0bb839fd1d Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Mon, 23 Dec 2024 01:16:48 +0100 Subject: [PATCH] Lib: Add non-lazy variants for card, image and dropdown --- src/lib/components/Image.svelte | 15 +++ src/lib/components/cards/Card.svelte | 47 +++++++++ src/lib/components/form/Dropdown.svelte | 130 ++++++++++++++++++++++++ src/lib/components/form/Dropdown.ts | 10 ++ src/lib/components/index.ts | 8 ++ 5 files changed, 210 insertions(+) create mode 100644 src/lib/components/Image.svelte create mode 100644 src/lib/components/cards/Card.svelte create mode 100644 src/lib/components/form/Dropdown.svelte create mode 100644 src/lib/components/form/Dropdown.ts 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 @@ + + +
+
+ {@render children()} +
+ + {#if action} + event.preventDefault()} + value={get_label(input_variable) ?? placeholder} + {...restProps} + /> + {:else} + event.preventDefault()} + value={get_label(input_variable) ?? placeholder} + {...restProps} + /> + {/if} +
+ +
+ + {#each options as option} + +
+ {#if option.icon_url} + + {/if} + {option.label} +
+
+ {/each} +
+
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,