Untitled
unknown
plain_text
a year ago
3.7 kB
8
Indexable
<script lang="ts">
// Define types
type Brand = 'intel' | 'amd';
type Socket = { value: string; name: string };
type Model = { value: string; name: string };
type CpuData = {
[brand in Brand]: {
sockets: Socket[];
models: {
[socket: string]: Model[];
};
};
};
// Define CPU data
const cpuData: CpuData = {
intel: {
sockets: [
{ value: 'lga1700', name: 'LGA 1700' },
{ value: 'lga1200', name: 'LGA 1200' }
],
models: {
lga1700: [
{ value: 'intel_i9_14900k', name: 'Intel Core i9-14900K' },
{ value: 'intel_i7_14700k', name: 'Intel Core i7-14700K' }
],
lga1200: [
{ value: 'intel_i9_11900k', name: 'Intel Core i9-11900K' },
{ value: 'intel_i7_11700k', name: 'Intel Core i7-11700K' }
]
}
},
amd: {
sockets: [
{ value: 'am4', name: 'AM4' },
{ value: 'am5', name: 'AM5' }
],
models: {
am5: [
{ value: 'ryzen9_7950x3d', name: 'Ryzen 9 7950X3D' },
{ value: 'ryzen7_7800x3d', name: 'Ryzen 7 7800X3D' }
],
am4: [
{ value: 'ryzen9_5950x', name: 'Ryzen 9 5950X' },
{ value: 'ryzen7_5800x3d', name: 'Ryzen 7 5800X3D' }
]
}
}
};
// State variables
let selectedBrand: Brand | '' = '';
let selectedSocket = '';
let selectedModel = '';
// Derived values
$: brands = Object.keys(cpuData) as Brand[];
$: availableSockets = selectedBrand ? cpuData[selectedBrand].sockets : [];
$: availableModels = selectedBrand && selectedSocket
? cpuData[selectedBrand].models[selectedSocket] || []
: [];
// Reset dependent selections when a parent selection changes
$: if (selectedBrand) {
selectedSocket = '';
selectedModel = '';
}
$: if (selectedSocket) {
selectedModel = '';
}
</script>
<style>
.cpu-selector-card {
background-color: rgba(255, 255, 255, 0.1);
border-radius: 1rem;
padding: 2rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.select-container {
display: flex;
flex-direction: column;
align-items: center;
}
.select {
width: 200px;
}
</style>
<div class="flex justify-center items-center min-h-screen py-8">
<div class="cpu-selector-card max-w-md">
<header>
<h2 class="text-2xl font-bold mb-6 text-center">CPU Selector</h2>
</header>
<section class="space-y-4 select-container">
<label class="label">
<span>CPU Brand</span>
<select class="select" bind:value={selectedBrand}>
<option value="">Select a brand</option>
{#each brands as brand}
<option value={brand.value}>{brand.name}</option>
{/each}
</select>
</label>
<label class="label">
<span>CPU Socket</span>
<select class="select" bind:value={selectedSocket} disabled={!selectedBrand}>
<option value="">Select a socket</option>
{#each availableSockets as socket}
<option value={socket.value}>{socket.name}</option>
{/each}
</select>
</label>
<label class="label">
<span>CPU Model</span>
<select class="select" bind:value={selectedModel} disabled={!selectedSocket}>
<option value="">Select a model</option>
{#each availableModels as model}
<option value={model.value}>{model.name}</option>
{/each}
</select>
</label>
</section>
</div>
</div>Editor is loading...
Leave a Comment