diff --git a/website/database/seeders/ConfigOptionSeeder.php b/website/database/seeders/ConfigOptionSeeder.php index 48daa64..635e1d7 100644 --- a/website/database/seeders/ConfigOptionSeeder.php +++ b/website/database/seeders/ConfigOptionSeeder.php @@ -464,23 +464,44 @@ class ConfigOptionSeeder extends Seeder // FreeBSD 15.0 (Dec 2025), 14.4 (Mar 2026) // Proxmox VE 9.1 (Nov 2025), 8.4 (security through Aug 2026) // Windows Server 2025 (Nov 2024), 2022, 2019 + // Each Linux distro has a "Minimal" variant where one is published + // upstream — stripped-down image with no GUI / dev tools / docs, + // intended for cloud / container / appliance workloads. Slugs use + // the `-min` suffix; family grouping in the picker keeps the pair + // adjacent. Proxmox / Windows / "No OS" don't have minimal variants. $this->seedValues($gen14OsOption, [ - ['label' => 'AlmaLinux 10', 'value' => 'alma10', 'monthly' => 0, 'is_default' => true], - ['label' => 'AlmaLinux 9', 'value' => 'alma9', 'monthly' => 0], + ['label' => 'AlmaLinux 10', 'value' => 'alma10', 'monthly' => 0], + ['label' => 'AlmaLinux 10 Minimal', 'value' => 'alma10-min', 'monthly' => 0], + ['label' => 'AlmaLinux 9', 'value' => 'alma9', 'monthly' => 0, 'is_default' => true], + ['label' => 'AlmaLinux 9 Minimal', 'value' => 'alma9-min', 'monthly' => 0], ['label' => 'AlmaLinux 8', 'value' => 'alma8', 'monthly' => 0], + ['label' => 'AlmaLinux 8 Minimal', 'value' => 'alma8-min', 'monthly' => 0], ['label' => 'Rocky Linux 10', 'value' => 'rocky10', 'monthly' => 0], + ['label' => 'Rocky Linux 10 Minimal', 'value' => 'rocky10-min', 'monthly' => 0], ['label' => 'Rocky Linux 9', 'value' => 'rocky9', 'monthly' => 0], + ['label' => 'Rocky Linux 9 Minimal', 'value' => 'rocky9-min', 'monthly' => 0], ['label' => 'Rocky Linux 8', 'value' => 'rocky8', 'monthly' => 0], + ['label' => 'Rocky Linux 8 Minimal', 'value' => 'rocky8-min', 'monthly' => 0], ['label' => 'Ubuntu 26.04 LTS', 'value' => 'ubuntu26', 'monthly' => 0], + ['label' => 'Ubuntu 26.04 LTS Minimal', 'value' => 'ubuntu26-min', 'monthly' => 0], ['label' => 'Ubuntu 24.04 LTS', 'value' => 'ubuntu24', 'monthly' => 0], + ['label' => 'Ubuntu 24.04 LTS Minimal', 'value' => 'ubuntu24-min', 'monthly' => 0], ['label' => 'Ubuntu 22.04 LTS', 'value' => 'ubuntu22', 'monthly' => 0], + ['label' => 'Ubuntu 22.04 LTS Minimal', 'value' => 'ubuntu22-min', 'monthly' => 0], ['label' => 'Debian 13 (Trixie)', 'value' => 'debian13', 'monthly' => 0], + ['label' => 'Debian 13 Minimal', 'value' => 'debian13-min', 'monthly' => 0], ['label' => 'Debian 12 (Bookworm)', 'value' => 'debian12', 'monthly' => 0], + ['label' => 'Debian 12 Minimal', 'value' => 'debian12-min', 'monthly' => 0], ['label' => 'Fedora Server 44', 'value' => 'fedora44', 'monthly' => 0], + ['label' => 'Fedora Server 44 Minimal', 'value' => 'fedora44-min', 'monthly' => 0], ['label' => 'Fedora Server 43', 'value' => 'fedora43', 'monthly' => 0], + ['label' => 'Fedora Server 43 Minimal', 'value' => 'fedora43-min', 'monthly' => 0], ['label' => 'openSUSE Leap 16.0', 'value' => 'opensuse-leap-160', 'monthly' => 0], + ['label' => 'openSUSE Leap 16.0 Minimal', 'value' => 'opensuse-leap-160-min', 'monthly' => 0], ['label' => 'FreeBSD 15.0', 'value' => 'freebsd15', 'monthly' => 0], + ['label' => 'FreeBSD 15.0 Minimal', 'value' => 'freebsd15-min', 'monthly' => 0], ['label' => 'FreeBSD 14.4', 'value' => 'freebsd14', 'monthly' => 0], + ['label' => 'FreeBSD 14.4 Minimal', 'value' => 'freebsd14-min', 'monthly' => 0], ['label' => 'Proxmox VE 9.1', 'value' => 'proxmox9', 'monthly' => 0], ['label' => 'Proxmox VE 8.4', 'value' => 'proxmox8', 'monthly' => 0], ['label' => 'Windows Server 2025 (BYOL)', 'value' => 'windows-2025-byol', 'monthly' => 0], diff --git a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/OsGroupSelector.vue b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/OsGroupSelector.vue index d5ccb94..2651350 100644 --- a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/OsGroupSelector.vue +++ b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/OsGroupSelector.vue @@ -56,34 +56,28 @@ const familyGroups = computed(() => { return Array.from(map.values()).sort((a, b) => a.rank - b.rank) }) -// Set of family names that are currently expanded. By default we open -// only the family that contains the current selection — keeps the picker -// compact while still showing the active choice. -const openFamilies = ref>(new Set()) +// Single-open accordion: only one family expanded at a time. Defaults to +// whichever family contains the current selection so the user always sees +// their pick on first paint. Click the open family's header to close it +// (no family expanded), or click another to swap. +const openFamily = ref('') watch( () => props.selected, (slug) => { if (!slug) return const meta = metaFor(slug) - if (!openFamilies.value.has(meta.family)) { - const next = new Set(openFamilies.value) - next.add(meta.family) - openFamilies.value = next - } + openFamily.value = meta.family }, { immediate: true }, ) function toggleFamily(name: string): void { - const next = new Set(openFamilies.value) - if (next.has(name)) next.delete(name) - else next.add(name) - openFamilies.value = next + openFamily.value = openFamily.value === name ? '' : name } function isFamilyOpen(name: string): boolean { - return openFamilies.value.has(name) + return openFamily.value === name } function selectedInFamily(fam: FamilyGroup): DedicatedConfigValue | null { @@ -120,38 +114,12 @@ function priceLabel(v: DedicatedConfigValue): string { function logoFor(slug: string): string { return metaFor(slug).logo } - -function expandAll(): void { - openFamilies.value = new Set(familyGroups.value.map(f => f.family)) -} - -function collapseAll(): void { - // Keep the family with the selection open so the user always sees their pick. - const meta = props.selected ? metaFor(props.selected) : null - openFamilies.value = new Set(meta ? [meta.family] : []) -} - -const allOpen = computed(() => openFamilies.value.size === familyGroups.value.length)