Fix categories

This commit is contained in:
Codex
2026-03-07 22:19:06 +00:00
parent 5ba1ecf459
commit 3d3e5c32c8
2 changed files with 60 additions and 30 deletions

View File

@@ -2,7 +2,7 @@
import { browser } from '$app/environment';
import { onMount } from 'svelte';
import { page } from '$app/stores';
import { categories, getCalculatorsByCategory, type CalculatorDef } from '$lib/data/calculators';
import { categories, categoryOrder, getCalculatorsByCategory, type CalculatorDef } from '$lib/data/calculators';
let expandedCategory = '';
let expandedUnits: Record<string, string> = {};
@@ -31,18 +31,21 @@
conversions: CalculatorDef[];
};
$: categoryUnitGroups = Object.entries(categories).map(([key, meta]) => {
$: categoryUnitGroups = categoryOrder
.map(key => {
const meta = categories[key];
if (!meta) return null;
const buckets = new Map<string, UnitBucket>();
const calcs = getCalculatorsByCategory(key);
calcs.forEach(calc => {
[calc.labels.in1, calc.labels.in2].forEach(unit => {
const key = unit.toLowerCase();
const existing = buckets.get(key);
const lower = unit.toLowerCase();
const existing = buckets.get(lower);
if (existing) {
existing.conversions.push(calc);
} else {
buckets.set(key, {
buckets.set(lower, {
label: unit,
conversions: [calc],
});
@@ -58,7 +61,8 @@
}));
return { key, meta, units };
});
})
.filter(Boolean);
function toggle(cat: string) {
const wasOpen = expandedCategory === cat;

View File

@@ -39,6 +39,29 @@ export const categories: Record<string, { label: string; icon: string }> = {
other: { label: 'Other', icon: '🔄' },
};
export const categoryOrder = [
'length',
'weight',
'temperature',
'volume',
'fluids',
'area',
'speed',
'pressure',
'energy',
'magnetism',
'power',
'data',
'time',
'angle',
'number-systems',
'radiation',
'electrical',
'force',
'light',
'other',
] as const;
export const calculators: CalculatorDef[] = [
{"slug": "inches-to-feet", "name": "Inches to Feet", "category": "length", "type": "standard", "teaser": "If a shelf spans 36 inches, how many feet of trim does it cover?", "labels": {"in1": "Inches", "in2": "Feet"}, "factor": 12.0},
{"slug": "kilograms-to-pounds", "name": "Kilograms to Pounds", "category": "weight", "type": "standard", "labels": {"in1": "Kilograms", "in2": "Pounds"}, "factor": 2.20462262},
@@ -1319,11 +1342,14 @@ export function getCalculatorsByCategory(category: string): CalculatorDef[] {
}
export function getCategoriesWithCounts(): { key: string; label: string; icon: string; count: number }[] {
return Object.entries(categories).map(([key, meta]) => ({
key,
...meta,
count: calculators.filter(c => c.category === key && !c.hidden).length,
}));
return categoryOrder
.map(key => {
const meta = categories[key];
if (!meta) return null;
const count = calculators.filter(c => c.category === key && !c.hidden).length;
return { key, ...meta, count };
})
.filter(Boolean) as { key: string; label: string; icon: string; count: number }[];
}
export function searchCalculators(query: string): CalculatorDef[] {