👽️ Updated legacy svelte components to runes
All checks were successful
Build and deploy website / build (push) Successful in 1m7s
All checks were successful
Build and deploy website / build (push) Successful in 1m7s
This commit is contained in:
@ -1,20 +1,23 @@
|
||||
<script lang="ts">
|
||||
import { createEventDispatcher } from "svelte"
|
||||
|
||||
// TODO move to types?
|
||||
interface Option {
|
||||
key: string
|
||||
interface Option<Key> {
|
||||
key: Key
|
||||
value: string
|
||||
}
|
||||
|
||||
export let options: Option[] = []
|
||||
// TODO bind data instead of dispatching events
|
||||
const dispatch = createEventDispatcher<{ change: string }>()
|
||||
interface Props<Key = string> {
|
||||
selected: Key
|
||||
options?: Option<Key>[]
|
||||
class?: string
|
||||
}
|
||||
|
||||
let { selected = $bindable(), options = [], class: clazz }: Props = $props()
|
||||
</script>
|
||||
|
||||
<select
|
||||
class="select select-bordered w-full max-w-xs ${$$restProps.class}"
|
||||
on:change={(value) => dispatch("change", value.currentTarget.value)}
|
||||
bind:value={selected}
|
||||
class="select select-bordered w-full max-w-xs ${clazz}"
|
||||
>
|
||||
{#each options as { key, value }}
|
||||
<option value={key}>{value}</option>
|
||||
|
@ -2,32 +2,32 @@
|
||||
import Select from "./Select.svelte"
|
||||
import * as m from "@/paraglide/messages"
|
||||
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) => ({
|
||||
key: item.id,
|
||||
value: item.data.title
|
||||
}))
|
||||
|
||||
let selectedHardwareKey: string = uses[0].id
|
||||
$: selectedHardware = uses.find((item) => item.id === selectedHardwareKey)!
|
||||
|
||||
// TODO bind to component
|
||||
// TODO onChange not called
|
||||
function onChange({ detail }: CustomEvent<string>) {
|
||||
selectedHardwareKey = detail
|
||||
}
|
||||
let selectedHardwareKey = $state(uses[0].id)
|
||||
let selectedHardware = $derived(uses.find((item) => item.id === selectedHardwareKey)!)
|
||||
|
||||
</script>
|
||||
|
||||
<div class="px-2 max-w-[750px] sm:min-w-[750px] w-screen">
|
||||
<h1 class="text-center">{m.uses()}</h1>
|
||||
<div>
|
||||
<Select options={hardwareOptions} on:change={onChange} class="mx-auto w-max" />
|
||||
<Select options={hardwareOptions} bind:selected={selectedHardwareKey} class="mx-auto w-max" />
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<CollapseList items={selectedHardware.data.hardware} title={m.uses()} />
|
||||
<CollapseList items={selectedHardware.data.hardware} title={m.hardware()} />
|
||||
<div class="my-2"></div>
|
||||
{#if (selectedHardware.data.accessories)}
|
||||
<CollapseList items={selectedHardware.data.accessories} title={m.accessories()} />
|
||||
|
@ -1,10 +1,16 @@
|
||||
<script lang="ts">
|
||||
export let title: string = ""
|
||||
|
||||
interface Props {
|
||||
title?: string
|
||||
children: any
|
||||
}
|
||||
|
||||
const { title = "", children }: Props = $props()
|
||||
</script>
|
||||
|
||||
<details class="collapse collapse-arrow bg-base-200">
|
||||
<summary class="collapse-title text-xl font-medium">{title}</summary>
|
||||
<div class="collapse-content">
|
||||
<slot />
|
||||
{@render children()}
|
||||
</div>
|
||||
</details>
|
@ -1,9 +1,12 @@
|
||||
<script lang="ts">
|
||||
import Collapse from "@/components/collapse/Collapse.svelte"
|
||||
|
||||
export let items: string[] = []
|
||||
export let title: string = ""
|
||||
interface Props {
|
||||
items?: string[]
|
||||
title?: string
|
||||
}
|
||||
|
||||
const { items = [], title = "" }: Props = $props()
|
||||
</script>
|
||||
|
||||
<Collapse title={title}>
|
||||
|
Reference in New Issue
Block a user