diff --git a/hdyc-svelte/src/app.css b/hdyc-svelte/src/app.css index e40af41..1632c6f 100644 --- a/hdyc-svelte/src/app.css +++ b/hdyc-svelte/src/app.css @@ -328,9 +328,11 @@ a:hover { .palette-dots { display: flex; gap: 0.25rem; - overflow: hidden; - max-width: 38px; - transition: max-width 0.2s ease, gap 0.2s ease; + width: 38px; + overflow-x: hidden; + overflow-y: visible; + flex: 0 0 auto; + transition: width 0.2s ease, gap 0.2s ease; } .palette-dot { width: 30px; @@ -370,7 +372,7 @@ a:hover { } .floating-palette-controls:hover .palette-dots, .floating-palette-controls:focus-within .palette-dots { - max-width: 360px; + width: 360px; gap: 0.25rem; } .floating-palette-controls:hover .palette-dot:not(.active), diff --git a/hdyc-svelte/src/lib/data/calculators.ts b/hdyc-svelte/src/lib/data/calculators.ts index 5612ae5..1640f27 100644 --- a/hdyc-svelte/src/lib/data/calculators.ts +++ b/hdyc-svelte/src/lib/data/calculators.ts @@ -21,10 +21,12 @@ export const categories: Record = { weight: { label: 'Weight / Mass', icon: 'โš–๏ธ' }, temperature: { label: 'Temperature', icon: '๐ŸŒก๏ธ' }, volume: { label: 'Volume', icon: '๐Ÿงช' }, + fluids: { label: 'Fluids', icon: '๐Ÿ’ง' }, area: { label: 'Area', icon: '๐Ÿ“' }, speed: { label: 'Speed / Velocity', icon: '๐Ÿ’จ' }, pressure: { label: 'Pressure', icon: '๐Ÿ”ฝ' }, energy: { label: 'Energy', icon: 'โšก' }, + currency: { label: 'Currency', icon: '๐Ÿ’ฑ' }, magnetism: { label: 'Magnetism', icon: '๐Ÿงฒ' }, power: { label: 'Power', icon: '๐Ÿ”Œ' }, data: { label: 'Data Storage', icon: '๐Ÿ’พ' }, @@ -303,7 +305,7 @@ export const calculators: CalculatorDef[] = [ {"slug": "fahrenheit-to-celsius", "name": "Fahrenheit to Celsius", "category": "temperature", "type": "standard", "labels": {"in1": "Fahrenheit", "in2": "Celsius"}, "factor": 0.5555555555555556, "offset": -17.778, "hidden": true}, {"slug": "feet-per-second-to-meters-per-second", "name": "Feet per Second to Meters per Second", "category": "length", "type": "standard", "labels": {"in1": "Feet per Second", "in2": "Meters per Second"}, "factor": 0.3048, "hidden": true}, {"slug": "fluid-ounces-to-milliliters", "name": "Fluid Ounces to Milliliters", "category": "weight", "type": "standard", "labels": {"in1": "Fluid Ounces", "in2": "Milliliters"}, "factor": 29.5735296}, - {"slug": "gallons-per-minute-to-liters-per-second", "name": "Gallons per Minute to Liters per Second", "category": "volume", "type": "standard", "labels": {"in1": "Gallons per Minute", "in2": "Liters per Second"}, "factor": 0.0630901964, "hidden": true}, + {"slug": "gallons-per-minute-to-liters-per-second", "name": "Gallons per Minute to Liters per Second", "category": "fluids", "type": "standard", "labels": {"in1": "Gallons per Minute", "in2": "Liters per Second"}, "factor": 0.0630901964, "hidden": true}, {"slug": "grains-to-grams", "name": "Grains to Grams", "category": "weight", "type": "standard", "labels": {"in1": "Grains", "in2": "Grams"}, "factor": 0.06479891, "hidden": true}, {"slug": "grams-to-milligrams", "name": "Grams to Milligrams", "category": "weight", "type": "standard", "labels": {"in1": "Grams", "in2": "Milligrams"}, "factor": 1000.0}, {"slug": "grams-to-ounces", "name": "Grams to Ounces", "category": "weight", "type": "standard", "labels": {"in1": "Grams", "in2": "Ounces"}, "factor": 0.0352739619, "hidden": true}, @@ -519,7 +521,7 @@ export const calculators: CalculatorDef[] = [ {"slug": "knots-to-miles-per-hour", "name": "Knots to Miles per hour", "category": "length", "type": "standard", "labels": {"in1": "Knots", "in2": "Miles per hour"}, "factor": 1.15077945}, {"slug": "light-years-to-astronomical-units", "name": "Light years to Astronomical units", "category": "light", "type": "standard", "labels": {"in1": "Light years", "in2": "Astronomical units"}, "factor": 63241.077}, {"slug": "light-years-to-parsecs", "name": "Light years to Parsecs", "category": "light", "type": "standard", "labels": {"in1": "Light years", "in2": "Parsecs"}, "factor": 0.306601394, "hidden": true}, - {"slug": "liters-per-second-to-gallons-per-minute", "name": "Liters per second to Gallons per minute", "category": "volume", "type": "standard", "labels": {"in1": "Liters per second", "in2": "Gallons per minute"}, "factor": 15.8503231}, + {"slug": "liters-per-second-to-gallons-per-minute", "name": "Liters per second to Gallons per minute", "category": "fluids", "type": "standard", "labels": {"in1": "Liters per second", "in2": "Gallons per minute"}, "factor": 15.8503231}, {"slug": "parsecs-to-astronomical-units", "name": "Parsecs to Astronomical Units", "category": "other", "type": "standard", "teaser": "Translate parsec distances into astronomical units.", "labels": {"in1": "Parsecs", "in2": "Astronomical Units"}, "factor": 206265.0}, {"slug": "parsecs-to-kilometers", "name": "Parsecs to Kilometers", "category": "length", "type": "standard", "teaser": "Turn parsecs into kilometers for cosmic scales.", "labels": {"in1": "Parsecs", "in2": "Kilometers"}, "factor": 30856775814913.7}, {"slug": "parsecs-to-light-years", "name": "Parsecs to Light Years", "category": "light", "type": "standard", "teaser": "Express parsecs as light years.", "labels": {"in1": "Parsecs", "in2": "Light Years"}, "factor": 3.261563777}, @@ -527,10 +529,10 @@ export const calculators: CalculatorDef[] = [ {"slug": "liters-to-gallons", "name": "Liters to Gallons", "category": "volume", "type": "standard", "labels": {"in1": "Liters", "in2": "Gallons"}, "factor": 0.264172052, "hidden": true}, {"slug": "liters-to-pints", "name": "Liters to Pints", "category": "volume", "type": "standard", "labels": {"in1": "Liters", "in2": "Pints"}, "factor": 2.11337642}, {"slug": "liters-to-quarts", "name": "Liters to Quarts", "category": "volume", "type": "standard", "labels": {"in1": "Liters", "in2": "Quarts"}, "factor": 1.05668821}, - {"slug": "liters-per-100-km-to-kilometers-per-liter", "name": "Liters per 100 km to Kilometers per liter", "category": "length", "type": "standard", "teaser": "Turn consumption from L/100 km into km per liter.", "labels": {"in1": "Liters per 100 km", "in2": "Kilometers per liter"}}, - {"slug": "liters-per-100-km-to-miles-per-gallon", "name": "Liters per 100 km to Miles per gallon", "category": "length", "type": "inverse", "teaser": "Convert L/100 km into MPG.", "labels": {"in1": "Liters per 100 km", "in2": "Miles per gallon"}}, - {"slug": "liters-per-minute-to-gallons-per-minute", "name": "Liters per minute to Gallons per minute", "category": "volume", "type": "standard", "labels": {"in1": "Liters per minute", "in2": "Gallons per minute"}, "factor": 0.264172052, "hidden": true}, - {"slug": "liters-per-second-to-cms", "name": "Liters per second to CMS", "category": "volume", "type": "standard", "teaser": "Convert liters per second into cubic meters per second.", "labels": {"in1": "Liters per second", "in2": "CMS"}, "factor": 0.001}, + {"slug": "liters-per-100-km-to-kilometers-per-liter", "name": "Liters per 100 km to Kilometers per liter", "category": "fluids", "type": "standard", "teaser": "Turn consumption from L/100 km into km per liter.", "labels": {"in1": "Liters per 100 km", "in2": "Kilometers per liter"}}, + {"slug": "liters-per-100-km-to-miles-per-gallon", "name": "Liters per 100 km to Miles per gallon", "category": "fluids", "type": "inverse", "teaser": "Convert L/100 km into MPG.", "labels": {"in1": "Liters per 100 km", "in2": "Miles per gallon"}}, + {"slug": "liters-per-minute-to-gallons-per-minute", "name": "Liters per minute to Gallons per minute", "category": "fluids", "type": "standard", "labels": {"in1": "Liters per minute", "in2": "Gallons per minute"}, "factor": 0.264172052, "hidden": true}, + {"slug": "liters-per-second-to-cms", "name": "Liters per second to CMS", "category": "fluids", "type": "standard", "teaser": "Convert liters per second into cubic meters per second.", "labels": {"in1": "Liters per second", "in2": "CMS"}, "factor": 0.001}, {"slug": "liters-to-cubic-inches", "name": "Liters to Cubic inches", "category": "length", "type": "standard", "teaser": "Express liters as cubic inches.", "labels": {"in1": "Liters", "in2": "Cubic inches"}, "factor": 61.0237441}, {"slug": "liters-to-cubic-meters", "name": "Liters to Cubic Meters", "category": "length", "type": "standard", "teaser": "Express liters as cubic meters.", "labels": {"in1": "Liters", "in2": "Cubic Meters"}, "factor": 0.001, "hidden": true}, {"slug": "liters-to-fluid-ounces", "name": "Liters to Fluid Ounces", "category": "weight", "type": "standard", "teaser": "Express liters as US fluid ounces.", "labels": {"in1": "Liters", "in2": "Fluid Ounces"}, "factor": 33.8140227}, @@ -631,7 +633,7 @@ export const calculators: CalculatorDef[] = [ {"slug": "abvolts-to-watts", "name": "Abvolts to Watts", "category": "power", "type": "3col", "teaser": "Convert abvolts into watts when current is included.", "labels": {"in1": "Abvolts", "in2": "Watts", "in3": "Result"}}, {"slug": "siemens-to-ohms", "name": "Siemens to ohms", "category": "electrical", "type": "inverse", "labels": {"in1": "Siemens", "in2": "ohms"}, "hidden": true}, {"slug": "ohms-to-siemens", "name": "Ohms to siemens", "category": "electrical", "type": "inverse", "labels": {"in1": "Ohms", "in2": "siemens"}}, - {"slug": "miles-per-gallon-to-liters-per-100-km", "name": "Miles per gallon to liters per 100 km", "category": "length", "type": "inverse", "labels": {"in1": "Miles per gallon", "in2": "liters per 100 km"}, "hidden": true}, + {"slug": "miles-per-gallon-to-liters-per-100-km", "name": "Miles per gallon to liters per 100 km", "category": "fluids", "type": "inverse", "labels": {"in1": "Miles per gallon", "in2": "liters per 100 km"}, "hidden": true}, {"slug": "lux-to-lumens", "name": "Lux to lumens", "category": "light", "type": "3col-mul", "labels": {"in1": "Lux", "in2": "lumens", "in3": "Area (sq m)"}, "hidden": true}, {"slug": "lumens-to-lux", "name": "Lumens to lux", "category": "light", "type": "3col", "labels": {"in1": "Lumens", "in2": "lux", "in3": "Area (sq m)"}}, {"slug": "grams-to-moles", "name": "Grams to moles", "category": "weight", "type": "3col", "labels": {"in1": "Grams", "in2": "moles", "in3": "Molar Mass"}}, @@ -907,13 +909,13 @@ export const calculators: CalculatorDef[] = [ {"slug": "pints-to-cups", "name": "Pints to Cups", "category": "volume", "type": "standard", "teaser": "Convert pints into cups for cooking measures.", "labels": {"in1": "Pints", "in2": "Cups"}, "factor": 2.0}, {"slug": "pints-to-gallons", "name": "Pints to Gallons", "category": "volume", "type": "standard", "teaser": "Convert pints into gallons for volume tracking.", "labels": {"in1": "Pints", "in2": "Gallons"}, "factor": 0.125, "hidden": true}, {"slug": "pints-to-quarts", "name": "Pints to Quarts", "category": "volume", "type": "standard", "teaser": "Convert pints into quarts for canning ratios.", "labels": {"in1": "Pints", "in2": "Quarts"}, "factor": 0.5, "hidden": true}, - {"slug": "percent-to-ppm", "name": "Percent to PPM", "category": "other", "type": "standard", "labels": {"in1": "Percent", "in2": "PPM"}, "factor": 10000.0}, + {"slug": "percent-to-ppm", "name": "Percent to PPM", "category": "fluids", "type": "standard", "labels": {"in1": "Percent", "in2": "PPM"}, "factor": 10000.0}, {"slug": "percent-abv-to-proof", "name": "Percent ABV to Proof", "category": "other", "type": "standard", "teaser": "Convert alcohol by volume into US proof values (Proof = 2 \u00d7 ABV).", "labels": {"in1": "Percent ABV", "in2": "Proof"}, "factor": 2.0}, {"slug": "proof-to-percent-abv", "name": "Proof to Percent ABV", "category": "other", "type": "standard", "teaser": "Convert US proof back into ABV (ABV = Proof / 2).", "labels": {"in1": "Proof", "in2": "Percent ABV"}, "factor": 0.5, "hidden": true}, - {"slug": "ppb-to-ppm", "name": "PPB to PPM", "category": "other", "type": "standard", "teaser": "Convert parts per billion into ppm.", "labels": {"in1": "PPB", "in2": "PPM"}, "factor": 0.001, "hidden": true}, - {"slug": "ppm-to-mg-per-liter", "name": "PPM to mg/L", "category": "other", "type": "standard", "teaser": "For dilute aqueous solutions, treat ppm as mg per liter.", "labels": {"in1": "PPM", "in2": "mg/L"}}, - {"slug": "ppm-to-percent", "name": "PPM to Percent", "category": "other", "type": "standard", "teaser": "Convert ppm values into percent by mass.", "labels": {"in1": "PPM", "in2": "Percent"}, "factor": 0.0001, "hidden": true}, - {"slug": "ppm-to-ppb", "name": "PPM to PPB", "category": "other", "type": "standard", "teaser": "Convert parts per million into parts per billion.", "labels": {"in1": "PPM", "in2": "PPB"}, "factor": 1000.0}, + {"slug": "ppb-to-ppm", "name": "PPB to PPM", "category": "fluids", "type": "standard", "teaser": "Convert parts per billion into ppm.", "labels": {"in1": "PPB", "in2": "PPM"}, "factor": 0.001, "hidden": true}, + {"slug": "ppm-to-mg-per-liter", "name": "PPM to mg/L", "category": "fluids", "type": "standard", "teaser": "For dilute aqueous solutions, treat ppm as mg per liter.", "labels": {"in1": "PPM", "in2": "mg/L"}}, + {"slug": "ppm-to-percent", "name": "PPM to Percent", "category": "fluids", "type": "standard", "teaser": "Convert ppm values into percent by mass.", "labels": {"in1": "PPM", "in2": "Percent"}, "factor": 0.0001, "hidden": true}, + {"slug": "ppm-to-ppb", "name": "PPM to PPB", "category": "fluids", "type": "standard", "teaser": "Convert parts per million into parts per billion.", "labels": {"in1": "PPM", "in2": "PPB"}, "factor": 1000.0}, {"slug": "planck-mass-to-kilograms", "name": "Planck mass to Kilograms", "category": "weight", "type": "standard", "teaser": "Convert the Planck mass into SI kilograms.", "labels": {"in1": "Planck mass", "in2": "Kilograms"}, "factor": 2.176434e-08}, {"slug": "planck-time-to-seconds", "name": "Planck time to Seconds", "category": "time", "type": "standard", "teaser": "Express Planck time in seconds.", "labels": {"in1": "Planck time", "in2": "Seconds"}, "factor": 5.391247e-44}, {"slug": "points-compass-to-degrees", "name": "Points (compass) to Degrees", "category": "angle", "type": "standard", "teaser": "Convert compass points into degrees.", "labels": {"in1": "Points (compass)", "in2": "Degrees"}, "factor": 11.25}, @@ -1012,8 +1014,8 @@ export const calculators: CalculatorDef[] = [ {"slug": "furlongs-per-fortnight-to-meters-per-second", "name": "Furlongs per fortnight to m/s", "category": "speed", "type": "standard", "teaser": "Traveling at one furlong per fortnight, what speed in meters per second is that?", "labels": {"in1": "Furlongs per fortnight", "in2": "m/s"}, "factor": 1.336e-05}, {"slug": "furlongs-to-meters", "name": "Furlongs to Meters", "category": "length", "type": "standard", "teaser": "A race distance of two furlongs equals how many meters?", "labels": {"in1": "Furlongs", "in2": "Meters"}, "factor": 201.168}, {"slug": "furlongs-to-miles", "name": "Furlongs to Miles", "category": "length", "type": "standard", "teaser": "A course covers eight furlongs; how far is that in miles?", "labels": {"in1": "Furlongs", "in2": "Miles"}, "factor": 0.125, "hidden": true}, - {"slug": "gallons-per-minute-to-cubic-feet-per-second", "name": "Gallons per minute to CFS", "category": "volume", "type": "standard", "teaser": "A pump pushes 200 gpm; what is that flow rate in cubic feet per second?", "labels": {"in1": "Gallons per minute", "in2": "CFS"}, "factor": 0.00222801}, - {"slug": "gallons-per-minute-to-liters-per-minute", "name": "Gallons per minute to Liters per minute", "category": "volume", "type": "standard", "teaser": "A faucet flows at three gpm; what is that in liters per minute?", "labels": {"in1": "Gallons per minute", "in2": "Liters per minute"}, "factor": 3.78541}, + {"slug": "gallons-per-minute-to-cubic-feet-per-second", "name": "Gallons per minute to CFS", "category": "fluids", "type": "standard", "teaser": "A pump pushes 200 gpm; what is that flow rate in cubic feet per second?", "labels": {"in1": "Gallons per minute", "in2": "CFS"}, "factor": 0.00222801}, + {"slug": "gallons-per-minute-to-liters-per-minute", "name": "Gallons per minute to Liters per minute", "category": "fluids", "type": "standard", "teaser": "A faucet flows at three gpm; what is that in liters per minute?", "labels": {"in1": "Gallons per minute", "in2": "Liters per minute"}, "factor": 3.78541}, {"slug": "gallons-to-barrel-us-oil", "name": "Gallons to Barrel (US oil)", "category": "volume", "type": "standard", "teaser": "A tanker carries 840 gallons; how many US oil barrels is that?", "labels": {"in1": "Gallons", "in2": "Barrel (US oil)"}, "factor": 0.0238095238}, {"slug": "gallons-to-cubic-feet", "name": "Gallons to Cubic Feet", "category": "length", "type": "standard", "teaser": "A tank holds fifty gallons; how many cubic feet does that represent?", "labels": {"in1": "Gallons", "in2": "Cubic Feet"}, "factor": 0.133681, "hidden": true}, {"slug": "gallons-to-cubic-meters", "name": "Gallons to Cubic Meters", "category": "length", "type": "standard", "teaser": "A reservoir stores 1,200 gallons; what is the cubic meter value?", "labels": {"in1": "Gallons", "in2": "Cubic Meters"}, "factor": 0.00378541}, @@ -1035,8 +1037,8 @@ export const calculators: CalculatorDef[] = [ {"slug": "gradians-to-degrees", "name": "Gradians to Degrees", "category": "angle", "type": "standard", "teaser": "A surveyor logs 100 gradians; what is that angle in degrees?", "labels": {"in1": "Gradians", "in2": "Degrees"}, "factor": 0.9}, {"slug": "gradians-to-radians", "name": "Gradians to Radians", "category": "angle", "type": "standard", "teaser": "A control dial sweeps 200 gradians; what is that rotation in radians?", "labels": {"in1": "Gradians", "in2": "Radians"}, "factor": 0.01570796, "hidden": true}, {"slug": "grains-to-ounces", "name": "Grains to Ounces", "category": "weight", "type": "standard", "teaser": "A jewelry batch weighs 100 grains; how many ounces is that?", "labels": {"in1": "Grains", "in2": "Ounces"}, "factor": 0.002285714, "hidden": true}, - {"slug": "grams-per-cubic-centimeter-to-kilograms-per-liter", "name": "Grams per cubic centimeter to Kilograms per liter", "category": "length", "type": "standard", "teaser": "A fluid density of 1 g/cm\u00b3 equals how many kg/L?", "labels": {"in1": "Grams per cubic centimeter", "in2": "Kilograms per liter"}}, - {"slug": "grams-per-milliliter-to-kilograms-per-cubic-meter", "name": "Grams per milliliter to Kilograms per cubic meter", "category": "length", "type": "standard", "teaser": "A solution at 1.2 g/mL corresponds to how many kg/m\u00b3?", "labels": {"in1": "Grams per milliliter", "in2": "Kilograms per cubic meter"}, "factor": 1000.0}, + {"slug": "grams-per-cubic-centimeter-to-kilograms-per-liter", "name": "Grams per cubic centimeter to Kilograms per liter", "category": "fluids", "type": "standard", "teaser": "A fluid density of 1 g/cm\u00b3 equals how many kg/L?", "labels": {"in1": "Grams per cubic centimeter", "in2": "Kilograms per liter"}}, + {"slug": "grams-per-milliliter-to-kilograms-per-cubic-meter", "name": "Grams per milliliter to Kilograms per cubic meter", "category": "fluids", "type": "standard", "teaser": "A solution at 1.2 g/mL corresponds to how many kg/m\u00b3?", "labels": {"in1": "Grams per milliliter", "in2": "Kilograms per cubic meter"}, "factor": 1000.0}, {"slug": "grams-to-drams", "name": "Grams to Drams", "category": "weight", "type": "standard", "teaser": "A tea blend calls for 2 grams; how many drams should you measure?", "labels": {"in1": "Grams", "in2": "Drams"}, "factor": 0.564383}, {"slug": "grams-to-kilograms", "name": "Grams to Kilograms", "category": "weight", "type": "standard", "teaser": "A parcel weighs 3,000 grams; how many kilograms is that weight?", "labels": {"in1": "Grams", "in2": "Kilograms"}, "factor": 0.001}, {"slug": "grams-to-momme", "name": "Grams to Momme", "category": "weight", "type": "standard", "teaser": "A silk roll weighs 20 grams; how many momme does that equal?", "labels": {"in1": "Grams", "in2": "Momme"}, "factor": 0.2666667, "hidden": true}, @@ -1186,14 +1188,14 @@ export const calculators: CalculatorDef[] = [ {"slug": "lamberts-to-phot", "name": "Lamberts to Phot", "category": "other", "type": "standard", "teaser": "Flip lamberts back into phots.", "labels": {"in1": "Lamberts", "in2": "Phot"}}, {"slug": "phot-to-foot-lamberts", "name": "Phot to Foot-lamberts", "category": "other", "type": "standard", "teaser": "One phot (10,000 lux) equals about 929 foot-lamberts.", "labels": {"in1": "Phot", "in2": "Foot-lamberts"}, "factor": 929.03}, {"slug": "foot-lamberts-to-phot", "name": "Foot-lamberts to Phot", "category": "other", "type": "standard", "teaser": "Express foot-lamberts as phots (1 ft-L \u2248 0.0010764 phot).", "labels": {"in1": "Foot-lamberts", "in2": "Phot"}, "factor": 0.00107639, "hidden": true}, - {"slug": "lumens-to-lux-per-square-meter", "name": "Lumens to Lux per square meter", "category": "area", "type": "standard", "teaser": "Spread lumens over 1 m\u00b2 to get lux.", "labels": {"in1": "Lumens", "in2": "Lux per square meter"}}, - {"slug": "lux-to-lumens-per-square-meter", "name": "Lux to Lumens per square meter", "category": "area", "type": "standard", "teaser": "Treat lux as lumens on each square meter.", "labels": {"in1": "Lux", "in2": "Lumens per square meter"}}, + {"slug": "lumens-to-lux-per-square-meter", "name": "Lumens to Lux per square meter", "category": "fluids", "type": "standard", "teaser": "Spread lumens over 1 m\u00b2 to get lux.", "labels": {"in1": "Lumens", "in2": "Lux per square meter"}}, + {"slug": "lux-to-lumens-per-square-meter", "name": "Lux to Lumens per square meter", "category": "fluids", "type": "standard", "teaser": "Treat lux as lumens on each square meter.", "labels": {"in1": "Lux", "in2": "Lumens per square meter"}}, {"slug": "foot-candles-to-phot", "name": "Foot-candles to Phot", "category": "other", "type": "standard", "teaser": "Convert foot-candles into phots via the 10,000 lux anchor.", "labels": {"in1": "Foot-candles", "in2": "Phot"}, "factor": 0.00107639, "hidden": true}, {"slug": "phot-to-foot-candles", "name": "Phot to Foot-candles", "category": "other", "type": "standard", "teaser": "Express phots as foot-candles for practical light meter use.", "labels": {"in1": "Phot", "in2": "Foot-candles"}, "factor": 929.03}, - {"slug": "lumens-to-nits-per-square-meter", "name": "Lumens to Nits per square meter", "category": "area", "type": "standard", "teaser": "A lumen/m\u00b2 (lux) equals about 0.31831 nits under Lambertian lighting.", "labels": {"in1": "Lumens", "in2": "Nits per square meter"}, "factor": 0.318309886}, - {"slug": "nits-to-lumens-per-square-meter", "name": "Nits to Lumens per square meter", "category": "area", "type": "standard", "teaser": "Back-convert nits into lumens/m\u00b2 using \u03c0.", "labels": {"in1": "Nits", "in2": "Lumens per square meter"}, "factor": 3.141592654}, - {"slug": "lumens-to-foot-lamberts-per-square-meter", "name": "Lumens to Foot-lamberts per square meter", "category": "area", "type": "standard", "teaser": "One lux equals 0.092903 foot-lamberts.", "labels": {"in1": "Lumens", "in2": "Foot-lamberts per square meter"}, "factor": 0.09290304}, - {"slug": "foot-lamberts-to-lumens-per-square-meter", "name": "Foot-lamberts to Lumens per square meter", "category": "area", "type": "standard", "teaser": "Translate foot-lamberts into lux for metric flux (multiply by 10.7639).", "labels": {"in1": "Foot-lamberts", "in2": "Lumens per square meter"}, "factor": 10.7639}, + {"slug": "lumens-to-nits-per-square-meter", "name": "Lumens to Nits per square meter", "category": "fluids", "type": "standard", "teaser": "A lumen/m\u00b2 (lux) equals about 0.31831 nits under Lambertian lighting.", "labels": {"in1": "Lumens", "in2": "Nits per square meter"}, "factor": 0.318309886}, + {"slug": "nits-to-lumens-per-square-meter", "name": "Nits to Lumens per square meter", "category": "fluids", "type": "standard", "teaser": "Back-convert nits into lumens/m\u00b2 using \u03c0.", "labels": {"in1": "Nits", "in2": "Lumens per square meter"}, "factor": 3.141592654}, + {"slug": "lumens-to-foot-lamberts-per-square-meter", "name": "Lumens to Foot-lamberts per square meter", "category": "fluids", "type": "standard", "teaser": "One lux equals 0.092903 foot-lamberts.", "labels": {"in1": "Lumens", "in2": "Foot-lamberts per square meter"}, "factor": 0.09290304}, + {"slug": "foot-lamberts-to-lumens-per-square-meter", "name": "Foot-lamberts to Lumens per square meter", "category": "fluids", "type": "standard", "teaser": "Translate foot-lamberts into lux for metric flux (multiply by 10.7639).", "labels": {"in1": "Foot-lamberts", "in2": "Lumens per square meter"}, "factor": 10.7639}, {"slug": "stilbs-to-nits", "name": "Stilbs to Nits", "category": "other", "type": "standard", "teaser": "A stilb equals 10,000 nits for high-luminance scopes.", "labels": {"in1": "Stilbs", "in2": "Nits"}, "factor": 10000.0}, {"slug": "nits-to-stilbs", "name": "Nits to Stilbs", "category": "other", "type": "standard", "teaser": "Convert nits into the CGS stilb scale (1 nit = 0.0001 stilb).", "labels": {"in1": "Nits", "in2": "Stilbs"}, "factor": 0.0001, "hidden": true}, {"slug": "stilbs-to-lux", "name": "Stilbs to Lux", "category": "light", "type": "standard", "teaser": "Multiply stilbs by \u03c0 to get the matching lux value (\u2248 31,415.93 lux).", "labels": {"in1": "Stilbs", "in2": "Lux"}, "factor": 31415.92654}, @@ -1206,7 +1208,7 @@ export const calculators: CalculatorDef[] = [ {"slug": "metric-horsepower-to-watts", "name": "Metric Horsepower (PS) to Watts", "category": "power", "type": "standard", "teaser": "Convert metric horsepower into watts for European ratings.", "labels": {"in1": "Metric Horsepower (PS)", "in2": "Watts"}, "factor": 735.49875}, {"slug": "metric-tons-to-kilograms", "name": "Metric Tons to Kilograms", "category": "weight", "type": "standard", "teaser": "Convert metric tons into kilograms for bulk weights.", "labels": {"in1": "Metric Tons", "in2": "Kilograms"}, "factor": 1000.0}, {"slug": "metric-tons-to-pounds", "name": "Metric Tons to Pounds", "category": "weight", "type": "standard", "teaser": "Convert metric tons into pounds.", "labels": {"in1": "Metric Tons", "in2": "Pounds"}, "factor": 2204.62262}, - {"slug": "mg-per-liter-to-ppm", "name": "mg/L to PPM", "category": "other", "type": "standard", "teaser": "Treat milligrams per liter as parts per million for dilute solutions.", "labels": {"in1": "mg/L", "in2": "PPM"}}, + {"slug": "mg-per-liter-to-ppm", "name": "mg/L to PPM", "category": "fluids", "type": "standard", "teaser": "Treat milligrams per liter as parts per million for dilute solutions.", "labels": {"in1": "mg/L", "in2": "PPM"}}, {"slug": "microfarads-to-farads", "name": "Microfarads to Farads", "category": "radiation", "type": "standard", "teaser": "Convert capacitance from microfarads to farads.", "labels": {"in1": "Microfarads", "in2": "Farads"}, "factor": 1e-06, "hidden": true}, {"slug": "microfarads-to-picofarads", "name": "Microfarads to Picofarads", "category": "radiation", "type": "standard", "teaser": "Convert microfarads to picofarads.", "labels": {"in1": "Microfarads", "in2": "Picofarads"}, "factor": 1000000.0}, {"slug": "microhenries-to-millihenries", "name": "Microhenries to Millihenries", "category": "angle", "type": "standard", "teaser": "Convert inductance from microhenries to millihenries.", "labels": {"in1": "Microhenries", "in2": "Millihenries"}, "factor": 0.001, "hidden": true}, @@ -1481,8 +1483,8 @@ export const calculators: CalculatorDef[] = [ {"slug": "volumetric-heat-capacity-kj-per-cubic-meter-k-to-j-per-cubic-meter-k", "name": "Volumetric heat capacity (kJ/(m\u00b3\u00b7K)) to J/(m\u00b3\u00b7K)", "category": "fluids", "type": "standard", "teaser": "Convert the kilojoule-based heat density back into joules.", "labels": {"in1": "Volumetric heat capacity (kJ/(m\u00b3\u00b7K))", "in2": "J/(m\u00b3\u00b7K)"}, "factor": 1000.0}, {"slug": "heat-flux-density-w-per-square-meter-to-w-per-square-foot", "name": "Heat flux density (W/m\u00b2) to W/ft\u00b2", "category": "fluids", "type": "standard", "teaser": "Express surface heat flow in imperial area units.", "labels": {"in1": "Heat flux density (W/m\u00b2)", "in2": "W/ft\u00b2"}, "factor": 0.092903}, {"slug": "heat-flux-density-w-per-square-foot-to-w-per-square-meter", "name": "Heat flux density (W/ft\u00b2) to W/m\u00b2", "category": "fluids", "type": "standard", "teaser": "Return the imperial flux back into SI.", "labels": {"in1": "Heat flux density (W/ft\u00b2)", "in2": "W/m\u00b2"}, "factor": 10.7639}, - {"slug": "heat-transfer-coefficient-w-per-square-meter-k-to-w-per-square-foot-f", "name": "Heat transfer coefficient (W/(m\u00b2\u00b7K)) to W/(ft\u00b2\u00b7\u00b0F)", "category": "temperature", "type": "standard", "teaser": "Convert SI conductance into imperial units per area and degree.", "labels": {"in1": "Heat transfer coefficient (W/(m\u00b2\u00b7K))", "in2": "W/(ft\u00b2\u00b7\u00b0F)"}, "factor": 0.05144}, - {"slug": "heat-transfer-coefficient-w-per-square-foot-f-to-w-per-square-meter-k", "name": "Heat transfer coefficient (W/(ft\u00b2\u00b7\u00b0F)) to W/(m\u00b2\u00b7K)", "category": "temperature", "type": "standard", "teaser": "Turn imperial film coefficients back into SI.", "labels": {"in1": "Heat transfer coefficient (W/(ft\u00b2\u00b7\u00b0F))", "in2": "W/(m\u00b2\u00b7K)"}, "factor": 19.374}, + {"slug": "heat-transfer-coefficient-w-per-square-meter-k-to-w-per-square-foot-f", "name": "Heat transfer coefficient (W/(m\u00b2\u00b7K)) to W/(ft\u00b2\u00b7\u00b0F)", "category": "fluids", "type": "standard", "teaser": "Convert SI conductance into imperial units per area and degree.", "labels": {"in1": "Heat transfer coefficient (W/(m\u00b2\u00b7K))", "in2": "W/(ft\u00b2\u00b7\u00b0F)"}, "factor": 0.05144}, + {"slug": "heat-transfer-coefficient-w-per-square-foot-f-to-w-per-square-meter-k", "name": "Heat transfer coefficient (W/(ft\u00b2\u00b7\u00b0F)) to W/(m\u00b2\u00b7K)", "category": "fluids", "type": "standard", "teaser": "Turn imperial film coefficients back into SI.", "labels": {"in1": "Heat transfer coefficient (W/(ft\u00b2\u00b7\u00b0F))", "in2": "W/(m\u00b2\u00b7K)"}, "factor": 19.374}, {"slug": "sievert-to-gray", "name": "Sievert to Gray", "category": "radiation", "type": "standard", "teaser": "Convert sievert exposures into energy-absorption grays for gamma/beta radiation.", "labels": {"in1": "Sievert", "in2": "Gray"}, "hidden": true}, {"slug": "smoots-to-meters", "name": "Smoots to Meters", "category": "length", "type": "standard", "teaser": "Translate historic smoot measurements into meters for consistent distances.", "labels": {"in1": "Smoots", "in2": "Meters"}, "factor": 1.7018}, {"slug": "solar-luminosities-to-watts", "name": "Solar luminosities to Watts", "category": "power", "type": "standard", "teaser": "Express a star\u2019s luminosity in watts for energy output comparisons.", "labels": {"in1": "Solar luminosities", "in2": "Watts"}, "factor": 3.828e+26}, @@ -1520,18 +1522,18 @@ export const calculators: CalculatorDef[] = [ {"slug": "millitesla-to-tesla", "name": "Millitesla to Tesla", "category": "magnetism", "type": "standard", "teaser": "Convert millitesla readings back into tesla.", "labels": {"in1": "Millitesla", "in2": "Tesla"}, "factor": 0.001, "hidden": true}, {"slug": "tesla-to-kilogauss", "name": "Tesla to Kilogauss", "category": "magnetism", "type": "standard", "teaser": "Translate tesla directly to kilogauss for chart comparisons.", "labels": {"in1": "Tesla", "in2": "Kilogauss"}, "factor": 10.0}, {"slug": "kilogauss-to-tesla", "name": "Kilogauss to Tesla", "category": "magnetism", "type": "standard", "teaser": "Return kilogauss values back into tesla.", "labels": {"in1": "Kilogauss", "in2": "Tesla"}, "factor": 0.1, "hidden": true}, - {"slug": "cubic-meters-per-second-to-liters-per-minute", "name": "Cubic meters per second to Liters per minute", "category": "length", "type": "standard", "teaser": "Turn volumetric flow rates into convenient liters/minute values.", "labels": {"in1": "Cubic meters per second", "in2": "Liters per minute"}, "factor": 60000.0}, - {"slug": "liters-per-minute-to-gallons-per-minute", "name": "Liters per minute to Gallons per minute", "category": "volume", "type": "standard", "teaser": "Express liters/min as US gallons/min for flow metering.", "labels": {"in1": "Liters per minute", "in2": "Gallons per minute"}, "factor": 0.264172052, "hidden": true}, - {"slug": "kilograms-per-second-to-pounds-per-hour", "name": "Kilograms per second to Pounds per hour", "category": "weight", "type": "standard", "teaser": "Convert mass flow from the SI kilogram scale to imperial pounds per hour.", "labels": {"in1": "Kilograms per second", "in2": "Pounds per hour"}, "factor": 7936.641761}, - {"slug": "pounds-per-hour-to-kilograms-per-second", "name": "Pounds per hour to Kilograms per second", "category": "weight", "type": "standard", "teaser": "Bring imperial mass flow back into the SI kilogram rate.", "labels": {"in1": "Pounds per hour", "in2": "Kilograms per second"}, "factor": 0.000126577, "hidden": true}, - {"slug": "moles-per-second-to-moles-per-hour", "name": "Moles per second to Moles per hour", "category": "time", "type": "standard", "teaser": "Translate molar flow between seconds and hours.", "labels": {"in1": "Moles per second", "in2": "Moles per hour"}, "factor": 3600.0}, - {"slug": "moles-per-hour-to-moles-per-second", "name": "Moles per hour to Moles per second", "category": "time", "type": "standard", "teaser": "Return molar flow rates back to per-second units.", "labels": {"in1": "Moles per hour", "in2": "Moles per second"}, "factor": 0.0002777778, "hidden": true}, - {"slug": "kilograms-per-second-per-square-meter-to-grams-per-second-per-square-centimeter", "name": "Kilograms per second per square meter to Grams per second per square centimeter", "category": "area", "type": "standard", "teaser": "Express mass flux density using metric subunits.", "labels": {"in1": "Kilograms per second per square meter", "in2": "Grams per second per square centimeter"}, "factor": 0.1, "hidden": true}, - {"slug": "grams-per-second-per-square-centimeter-to-kilograms-per-second-per-square-meter", "name": "Grams per second per square centimeter to Kilograms per second per square meter", "category": "area", "type": "standard", "teaser": "Convert compact mass flux into the SI-friendly base.", "labels": {"in1": "Grams per second per square centimeter", "in2": "Kilograms per second per square meter"}, "factor": 10.0}, - {"slug": "mol-per-cubic-meter-to-mmol-per-liter", "name": "Mol per cubic meter to mmol per liter", "category": "length", "type": "standard", "teaser": "Translate molar concentrations across common volume units.", "labels": {"in1": "Mol per cubic meter", "in2": "mmol per liter"}, "hidden": true}, - {"slug": "mmol-per-liter-to-mol-per-cubic-meter", "name": "mmol per liter to mol per cubic meter", "category": "length", "type": "standard", "teaser": "Convert molar concentration back into SI cubic meters.", "labels": {"in1": "mmol per liter", "in2": "mol per cubic meter"}}, - {"slug": "percent-by-mass-to-ppm", "name": "Percent by mass to ppm", "category": "other", "type": "standard", "teaser": "Turn mass-percent concentrations into parts-per-million.", "labels": {"in1": "Percent by mass", "in2": "ppm"}, "factor": 10000.0}, - {"slug": "ppm-to-percent-by-mass", "name": "ppm to Percent by mass", "category": "other", "type": "standard", "teaser": "Return ppm values to mass-percent.", "labels": {"in1": "ppm", "in2": "Percent by mass"}, "factor": 0.0001, "hidden": true}, + {"slug": "cubic-meters-per-second-to-liters-per-minute", "name": "Cubic meters per second to Liters per minute", "category": "fluids", "type": "standard", "teaser": "Turn volumetric flow rates into convenient liters/minute values.", "labels": {"in1": "Cubic meters per second", "in2": "Liters per minute"}, "factor": 60000.0}, + {"slug": "liters-per-minute-to-gallons-per-minute", "name": "Liters per minute to Gallons per minute", "category": "fluids", "type": "standard", "teaser": "Express liters/min as US gallons/min for flow metering.", "labels": {"in1": "Liters per minute", "in2": "Gallons per minute"}, "factor": 0.264172052, "hidden": true}, + {"slug": "kilograms-per-second-to-pounds-per-hour", "name": "Kilograms per second to Pounds per hour", "category": "fluids", "type": "standard", "teaser": "Convert mass flow from the SI kilogram scale to imperial pounds per hour.", "labels": {"in1": "Kilograms per second", "in2": "Pounds per hour"}, "factor": 7936.641761}, + {"slug": "pounds-per-hour-to-kilograms-per-second", "name": "Pounds per hour to Kilograms per second", "category": "fluids", "type": "standard", "teaser": "Bring imperial mass flow back into the SI kilogram rate.", "labels": {"in1": "Pounds per hour", "in2": "Kilograms per second"}, "factor": 0.000126577, "hidden": true}, + {"slug": "moles-per-second-to-moles-per-hour", "name": "Moles per second to Moles per hour", "category": "fluids", "type": "standard", "teaser": "Translate molar flow between seconds and hours.", "labels": {"in1": "Moles per second", "in2": "Moles per hour"}, "factor": 3600.0}, + {"slug": "moles-per-hour-to-moles-per-second", "name": "Moles per hour to Moles per second", "category": "fluids", "type": "standard", "teaser": "Return molar flow rates back to per-second units.", "labels": {"in1": "Moles per hour", "in2": "Moles per second"}, "factor": 0.0002777778, "hidden": true}, + {"slug": "kilograms-per-second-per-square-meter-to-grams-per-second-per-square-centimeter", "name": "Kilograms per second per square meter to Grams per second per square centimeter", "category": "fluids", "type": "standard", "teaser": "Express mass flux density using metric subunits.", "labels": {"in1": "Kilograms per second per square meter", "in2": "Grams per second per square centimeter"}, "factor": 0.1, "hidden": true}, + {"slug": "grams-per-second-per-square-centimeter-to-kilograms-per-second-per-square-meter", "name": "Grams per second per square centimeter to Kilograms per second per square meter", "category": "fluids", "type": "standard", "teaser": "Convert compact mass flux into the SI-friendly base.", "labels": {"in1": "Grams per second per square centimeter", "in2": "Kilograms per second per square meter"}, "factor": 10.0}, + {"slug": "mol-per-cubic-meter-to-mmol-per-liter", "name": "Mol per cubic meter to mmol per liter", "category": "fluids", "type": "standard", "teaser": "Translate molar concentrations across common volume units.", "labels": {"in1": "Mol per cubic meter", "in2": "mmol per liter"}, "hidden": true}, + {"slug": "mmol-per-liter-to-mol-per-cubic-meter", "name": "mmol per liter to mol per cubic meter", "category": "fluids", "type": "standard", "teaser": "Convert molar concentration back into SI cubic meters.", "labels": {"in1": "mmol per liter", "in2": "mol per cubic meter"}}, + {"slug": "percent-by-mass-to-ppm", "name": "Percent by mass to ppm", "category": "fluids", "type": "standard", "teaser": "Turn mass-percent concentrations into parts-per-million.", "labels": {"in1": "Percent by mass", "in2": "ppm"}, "factor": 10000.0}, + {"slug": "ppm-to-percent-by-mass", "name": "ppm to Percent by mass", "category": "fluids", "type": "standard", "teaser": "Return ppm values to mass-percent.", "labels": {"in1": "ppm", "in2": "Percent by mass"}, "factor": 0.0001, "hidden": true}, {"slug": "pascal-second-to-poise", "name": "Pascal-second to Poise", "category": "pressure", "type": "standard", "teaser": "Convert SI dynamic viscosity into CGS poise.", "labels": {"in1": "Pascal-second", "in2": "Poise"}, "factor": 10.0}, {"slug": "poise-to-pascal-second", "name": "Poise to Pascal-second", "category": "pressure", "type": "standard", "teaser": "Bring poise measurements back into pascal-seconds.", "labels": {"in1": "Poise", "in2": "Pascal-second"}, "factor": 0.1, "hidden": true}, {"slug": "pascal-second-to-centipoise", "name": "Pascal-second to Centipoise", "category": "pressure", "type": "standard", "teaser": "Express pascal-seconds as centipoise for lab viscosity.", "labels": {"in1": "Pascal-second", "in2": "Centipoise"}, "factor": 100.0}, diff --git a/hdyc-svelte/src/lib/data/unitDefinitions.ts b/hdyc-svelte/src/lib/data/unitDefinitions.ts index e63bfb1..f664239 100644 --- a/hdyc-svelte/src/lib/data/unitDefinitions.ts +++ b/hdyc-svelte/src/lib/data/unitDefinitions.ts @@ -17,6 +17,10 @@ const domainDefinitions: Record = summary: 'measures three-dimensional capacity inside containers or spaces.', context: 'Useful for describing liquids, gases, or any amount of space you can fill.', }, + fluids: { + summary: 'captures flow rates, flux densities, and transport-related metrics.', + context: 'Reach for these units when comparing pumps, pipes, or any movement of liquids, gases, or charged particles across an area.', + }, area: { summary: 'tracks two-dimensional surface coverage.', context: 'Helpful when sizing plots of land, floor space, or sheets of material.', @@ -33,6 +37,10 @@ const domainDefinitions: Record = summary: 'represents the capacity to do work or release heat.', context: 'Energy units compare calories, joules, or BTUs when tracking work, heat, or stored energy.', }, + currency: { + summary: 'records monetary values across different global currencies.', + context: 'Use these converters when comparing dollars, euros, pounds, yens, or other exchange rates for budgeting or pricing.', + }, magnetism: { summary: 'captures magnetic intensity, flux, and field density.', context: 'Use these units when comparing magnets, coils, or magnetic flux through areas and materials.', diff --git a/migrate.py b/migrate.py index fc46370..0f03f74 100644 --- a/migrate.py +++ b/migrate.py @@ -6,6 +6,60 @@ BASE_DIR = Path(__file__).resolve().parent CALCLIST = BASE_DIR / 'calculators_list.md' OUTPUT_FILE = BASE_DIR / 'hdyc-svelte/src/lib/data/calculators.ts' +FLUID_KEYWORDS = [ + 'flow', + 'mass flux', + 'volumetric', + 'permeability', + 'viscosity', + 'kinematic', + 'surface tension', + 'molar', + 'concentration', + 'flux density', + 'flow rate', + 'gallon per', + 'gallons per', + 'liter per', + 'liters per', + 'cubic per', + 'cubic meter per', + 'cubic meters per', + 'cubic foot per', + 'cubic feet per', + 'cubic inch per', + 'cubic inches per', + 'kg per', + 'kilogram per', + 'kilograms per', + 'gram per', + 'grams per', + 'g per', + 'lb per', + 'lbs per', + 'pound per', + 'pounds per', + 'mole per', + 'moles per', + 'mol per', + 'mmol per', + 'percent by mass', + 'ppm', + 'heat transfer coefficient', + 'per square meter', + 'per square metre', + 'per square foot', + 'per square inch', + 'per square centimeter', + 'per square centimetre', + 'per cubic meter', + 'per cubic metre', + 'per cubic foot', + 'per cubic inch' +] + +CURRENCY_KEYWORDS = ['currency', 'exchange rate', 'forex'] + def load_external_descriptions(): # Placeholder for future enrichment sources. return {} @@ -55,11 +109,14 @@ def split_conversion_name(name): def guess_category(name): name_l = name.lower() + if any(keyword in name_l for keyword in CURRENCY_KEYWORDS): + return 'currency' + if any(keyword in name_l for keyword in FLUID_KEYWORDS): + return 'fluids' if any(x in name_l for x in ['acre-foot', 'acre-feet', 'acrefoot', 'acre feet']): return 'volume' if 'temp scale' in name_l or 'newton (temp' in name_l: return 'temperature' - if any(x in name_l for x in ['flow', 'mass flux', 'volumetric', 'permeability', 'viscosity', 'kinematic', 'surface tension', 'molar', 'concentration', 'flux density', 'flow rate']): return 'fluids' if any(x in name_l for x in ['force', 'torque', 'newton', 'dyne', 'foot-pound']): return 'force' if any(x in name_l for x in ['acre', 'hectare', 'square']): return 'area' if any(x in name_l for x in ['meter', 'inch', 'feet', 'yard', 'mile', 'cable', 'fathom', 'rod', 'chain', 'nautical', 'league']): return 'length' @@ -306,10 +363,12 @@ export const categories: Record = { weight: { label: 'Weight / Mass', icon: 'โš–๏ธ' }, temperature: { label: 'Temperature', icon: '๐ŸŒก๏ธ' }, volume: { label: 'Volume', icon: '๐Ÿงช' }, + fluids: { label: 'Fluids', icon: '๐Ÿ’ง' }, area: { label: 'Area', icon: '๐Ÿ“' }, speed: { label: 'Speed / Velocity', icon: '๐Ÿ’จ' }, pressure: { label: 'Pressure', icon: '๐Ÿ”ฝ' }, energy: { label: 'Energy', icon: 'โšก' }, + currency: { label: 'Currency', icon: '๐Ÿ’ฑ' }, magnetism: { label: 'Magnetism', icon: '๐Ÿงฒ' }, power: { label: 'Power', icon: '๐Ÿ”Œ' }, data: { label: 'Data Storage', icon: '๐Ÿ’พ' },