👽️ Updated legacy svelte components to runes
All checks were successful
Build and deploy website / build (push) Successful in 1m7s

This commit is contained in:
Martin Berg Alstad 2025-02-15 14:34:47 +01:00
parent 7c5b228e59
commit 04f279dab3
Signed by: martials
GPG Key ID: 706F53DD087A91DE
8 changed files with 39 additions and 24 deletions

View File

@ -8,6 +8,7 @@
"myLinks": "My links", "myLinks": "My links",
"myProjects": "My projects", "myProjects": "My projects",
"uses": "Uses", "uses": "Uses",
"hardware": "Hardware",
"accessories": "Accessories", "accessories": "Accessories",
"sourceCode": "Source code", "sourceCode": "Source code",
"createdAt": "Created at", "createdAt": "Created at",

View File

@ -8,6 +8,7 @@
"myLinks": "Mine lenker", "myLinks": "Mine lenker",
"myProjects": "Mine prosjekter", "myProjects": "Mine prosjekter",
"uses": "Uses", "uses": "Uses",
"hardware": "Maskinvare",
"accessories": "Tilbehør", "accessories": "Tilbehør",
"sourceCode": "Kildekode", "sourceCode": "Kildekode",
"createdAt": "Opprettet", "createdAt": "Opprettet",

View File

@ -8,6 +8,7 @@
"build": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide && astro check && astro build", "build": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide && astro check && astro build",
"preview": "astro preview", "preview": "astro preview",
"astro": "astro", "astro": "astro",
"type-check": "astro check",
"postinstall": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide", "postinstall": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide",
"format": "prettier --write \"./src/**/*.{js,mjs,ts,astro,svelte,css,md,json}\"", "format": "prettier --write \"./src/**/*.{js,mjs,ts,astro,svelte,css,md,json}\"",
"watch-messages": "paraglide-js compile --watch --project ./project.inlang --outdir ./src/paraglide" "watch-messages": "paraglide-js compile --watch --project ./project.inlang --outdir ./src/paraglide"

View File

@ -1,20 +1,23 @@
<script lang="ts"> <script lang="ts">
import { createEventDispatcher } from "svelte"
// TODO move to types? // TODO move to types?
interface Option { interface Option<Key> {
key: string key: Key
value: string value: string
} }
export let options: Option[] = [] interface Props<Key = string> {
// TODO bind data instead of dispatching events selected: Key
const dispatch = createEventDispatcher<{ change: string }>() options?: Option<Key>[]
class?: string
}
let { selected = $bindable(), options = [], class: clazz }: Props = $props()
</script> </script>
<select <select
class="select select-bordered w-full max-w-xs ${$$restProps.class}" bind:value={selected}
on:change={(value) => dispatch("change", value.currentTarget.value)} class="select select-bordered w-full max-w-xs ${clazz}"
> >
{#each options as { key, value }} {#each options as { key, value }}
<option value={key}>{value}</option> <option value={key}>{value}</option>

View File

@ -2,32 +2,32 @@
import Select from "./Select.svelte" import Select from "./Select.svelte"
import * as m from "@/paraglide/messages" import * as m from "@/paraglide/messages"
import CollapseList from "@/components/collapse/CollapseList.svelte" import CollapseList from "@/components/collapse/CollapseList.svelte"
import type { CollectionEntry } from "astro:content"
export let uses: any[] = [] interface Props {
uses: CollectionEntry<'uses'>[]
}
const { uses }: Props = $props()
const hardwareOptions = uses.map((item) => ({ const hardwareOptions = uses.map((item) => ({
key: item.id, key: item.id,
value: item.data.title value: item.data.title
})) }))
let selectedHardwareKey: string = uses[0].id let selectedHardwareKey = $state(uses[0].id)
$: selectedHardware = uses.find((item) => item.id === selectedHardwareKey)! let selectedHardware = $derived(uses.find((item) => item.id === selectedHardwareKey)!)
// TODO bind to component
// TODO onChange not called
function onChange({ detail }: CustomEvent<string>) {
selectedHardwareKey = detail
}
</script> </script>
<div class="px-2 max-w-[750px] sm:min-w-[750px] w-screen"> <div class="px-2 max-w-[750px] sm:min-w-[750px] w-screen">
<h1 class="text-center">{m.uses()}</h1> <h1 class="text-center">{m.uses()}</h1>
<div> <div>
<Select options={hardwareOptions} on:change={onChange} class="mx-auto w-max" /> <Select options={hardwareOptions} bind:selected={selectedHardwareKey} class="mx-auto w-max" />
</div> </div>
<br /> <br />
<CollapseList items={selectedHardware.data.hardware} title={m.uses()} /> <CollapseList items={selectedHardware.data.hardware} title={m.hardware()} />
<div class="my-2"></div> <div class="my-2"></div>
{#if (selectedHardware.data.accessories)} {#if (selectedHardware.data.accessories)}
<CollapseList items={selectedHardware.data.accessories} title={m.accessories()} /> <CollapseList items={selectedHardware.data.accessories} title={m.accessories()} />

View File

@ -1,10 +1,16 @@
<script lang="ts"> <script lang="ts">
export let title: string = ""
interface Props {
title?: string
children: any
}
const { title = "", children }: Props = $props()
</script> </script>
<details class="collapse collapse-arrow bg-base-200"> <details class="collapse collapse-arrow bg-base-200">
<summary class="collapse-title text-xl font-medium">{title}</summary> <summary class="collapse-title text-xl font-medium">{title}</summary>
<div class="collapse-content"> <div class="collapse-content">
<slot /> {@render children()}
</div> </div>
</details> </details>

View File

@ -1,9 +1,12 @@
<script lang="ts"> <script lang="ts">
import Collapse from "@/components/collapse/Collapse.svelte" import Collapse from "@/components/collapse/Collapse.svelte"
export let items: string[] = [] interface Props {
export let title: string = "" items?: string[]
title?: string
}
const { items = [], title = "" }: Props = $props()
</script> </script>
<Collapse title={title}> <Collapse title={title}>

View File

@ -8,5 +8,5 @@ const uses = await getCollection("uses")
--- ---
<Layout title="Hardware" class="mx-auto max-w-[750px]"> <Layout title="Hardware" class="mx-auto max-w-[750px]">
<UsesPage server:defer uses={uses} /> <UsesPage client:load uses={uses} />
</Layout> </Layout>