mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 11:44:40 +00:00
feat: improve units
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { createEventDispatcher, onDestroy } from 'svelte';
|
import { createEventDispatcher, onDestroy } from 'svelte';
|
||||||
import debounce from '@/seqta/utils/debounce';
|
import { unitFullNames } from './unitMap';
|
||||||
import * as math from 'mathjs';
|
import * as math from 'mathjs';
|
||||||
|
|
||||||
let { searchTerm = '', isSelected = false } = $props<{ searchTerm: string, isSelected: boolean }>();
|
let { searchTerm = '', isSelected = false } = $props<{ searchTerm: string, isSelected: boolean }>();
|
||||||
@@ -14,28 +14,6 @@
|
|||||||
let inputUnit = $state<string>('');
|
let inputUnit = $state<string>('');
|
||||||
let outputUnit = $state<string>('');
|
let outputUnit = $state<string>('');
|
||||||
|
|
||||||
// Map of unit abbreviations to full names
|
|
||||||
const unitFullNames: Record<string, string> = {
|
|
||||||
km: 'Kilometers',
|
|
||||||
m: 'Meters',
|
|
||||||
cm: 'Centimeters',
|
|
||||||
mm: 'Millimeters',
|
|
||||||
mi: 'Miles',
|
|
||||||
ft: 'Feet',
|
|
||||||
in: 'Inches',
|
|
||||||
kg: 'Kilograms',
|
|
||||||
g: 'Grams',
|
|
||||||
lb: 'Pounds',
|
|
||||||
oz: 'Ounces',
|
|
||||||
l: 'Liters',
|
|
||||||
ml: 'Milliliters',
|
|
||||||
gal: 'Gallons',
|
|
||||||
h: 'Hours',
|
|
||||||
min: 'Minutes',
|
|
||||||
s: 'Seconds',
|
|
||||||
ms: 'Milliseconds'
|
|
||||||
};
|
|
||||||
|
|
||||||
function detectUnit(expression: string): string {
|
function detectUnit(expression: string): string {
|
||||||
try {
|
try {
|
||||||
const unit = math.unit(expression);
|
const unit = math.unit(expression);
|
||||||
@@ -51,7 +29,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process the input with debounce to avoid unnecessary calculations
|
// Process the input with debounce to avoid unnecessary calculations
|
||||||
const processInput = debounce((input: string) => {
|
const processInput = (input: string) => {
|
||||||
try {
|
try {
|
||||||
if (!input.trim()) {
|
if (!input.trim()) {
|
||||||
result = null;
|
result = null;
|
||||||
@@ -103,7 +81,7 @@
|
|||||||
} finally {
|
} finally {
|
||||||
isCalculating = false;
|
isCalculating = false;
|
||||||
}
|
}
|
||||||
}, 2);
|
}
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
processInput(searchTerm);
|
processInput(searchTerm);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { onMount, tick } from 'svelte';
|
import { onMount, tick } from 'svelte';
|
||||||
import { settingsState } from '@/seqta/utils/listeners/SettingsState'
|
import { settingsState } from '@/seqta/utils/listeners/SettingsState'
|
||||||
import { fade, scale } from 'svelte/transition';
|
import { fade, scale } from 'svelte/transition';
|
||||||
import { quintOut } from 'svelte/easing';
|
import { circOut, quintOut } from 'svelte/easing';
|
||||||
import { getStaticCommands, type StaticCommandItem } from './commands';
|
import { getStaticCommands, type StaticCommandItem } from './commands';
|
||||||
import { getAllDynamicItems, type DynamicContentItem } from './dynamicSearch';
|
import { getAllDynamicItems, type DynamicContentItem } from './dynamicSearch';
|
||||||
import type { CombinedResult } from './types';
|
import type { CombinedResult } from './types';
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
<div role="dialog" aria-modal="true" class={settingsState.DarkMode ? 'dark' : ''}>
|
<div role="dialog" aria-modal="true" class={settingsState.DarkMode ? 'dark' : ''}>
|
||||||
<div
|
<div
|
||||||
class="fixed inset-0 z-[50000] bg-zinc-900/40 dark:bg-black/60"
|
class="fixed inset-0 z-[50000] bg-zinc-900/40 dark:bg-black/60"
|
||||||
transition:fade={{ duration: 150 }}
|
transition:fade={{ duration: 150, easing: quintOut }}
|
||||||
></div>
|
></div>
|
||||||
|
|
||||||
<div class="fixed inset-0 z-[50000] flex justify-center place-items-start p-8 sm:p-6 md:p-8 select-none"
|
<div class="fixed inset-0 z-[50000] flex justify-center place-items-start p-8 sm:p-6 md:p-8 select-none"
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
tabindex="0">
|
tabindex="0">
|
||||||
<div
|
<div
|
||||||
class="w-full max-w-2xl rounded-xl ring-1 shadow-2xl ring-black/5 dark:ring-white/10 { transparencyEffects ? 'bg-white/80 dark:bg-zinc-900/80 backdrop-blur' : 'bg-white dark:bg-zinc-900' }"
|
class="w-full max-w-2xl rounded-xl ring-1 shadow-2xl ring-black/5 dark:ring-white/10 { transparencyEffects ? 'bg-white/80 dark:bg-zinc-900/80 backdrop-blur' : 'bg-white dark:bg-zinc-900' }"
|
||||||
transition:scale={{ duration: 200, start: 0.95, opacity: 0, easing: quintOut }}
|
transition:scale={{ duration: 100, start: 0.95, opacity: 0, easing: circOut }}
|
||||||
onclick={(e) => {
|
onclick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
export const unitFullNames: Record<string, string> = {
|
||||||
|
// --- Length ---
|
||||||
|
"m": "Meters",
|
||||||
|
"km": "Kilometers",
|
||||||
|
"cm": "Centimeters",
|
||||||
|
"mm": "Millimeters",
|
||||||
|
"µm": "Micrometers",
|
||||||
|
"nm": "Nanometers",
|
||||||
|
"pm": "Picometers",
|
||||||
|
"fm": "Femtometers",
|
||||||
|
"am": "Attometers",
|
||||||
|
"zm": "Zeptometers",
|
||||||
|
"ym": "Yoctometers",
|
||||||
|
"mi": "Miles",
|
||||||
|
"yd": "Yards",
|
||||||
|
"ft": "Feet",
|
||||||
|
"in": "Inches",
|
||||||
|
"nmi": "Nautical Miles",
|
||||||
|
"angstrom": "Angstroms",
|
||||||
|
"au": "Astronomical Units",
|
||||||
|
"ly": "Light Years",
|
||||||
|
"pc": "Parsecs",
|
||||||
|
|
||||||
|
// --- Mass ---
|
||||||
|
"kg": "Kilograms",
|
||||||
|
"g": "Grams",
|
||||||
|
"mg": "Milligrams",
|
||||||
|
"µg": "Micrograms",
|
||||||
|
"ng": "Nanograms",
|
||||||
|
"lb": "Pounds",
|
||||||
|
"oz": "Ounces",
|
||||||
|
"ton": "Tons (Imperial)",
|
||||||
|
"tonne": "Tonnes (Metric)",
|
||||||
|
"slug": "Slugs",
|
||||||
|
"stone": "Stones",
|
||||||
|
|
||||||
|
// --- Time ---
|
||||||
|
"s": "Seconds",
|
||||||
|
"ms": "Milliseconds",
|
||||||
|
"µs": "Microseconds",
|
||||||
|
"ns": "Nanoseconds",
|
||||||
|
"ps": "Picoseconds",
|
||||||
|
"min": "Minutes",
|
||||||
|
"h": "Hours",
|
||||||
|
"day": "Days",
|
||||||
|
"week": "Weeks",
|
||||||
|
"month": "Months (30 days)",
|
||||||
|
"year": "Years (365 days)",
|
||||||
|
"fortnight": "Fortnights",
|
||||||
|
|
||||||
|
// --- Temperature ---
|
||||||
|
"K": "Kelvin",
|
||||||
|
"degC": "Degrees Celsius",
|
||||||
|
"degF": "Degrees Fahrenheit",
|
||||||
|
"degR": "Degrees Rankine",
|
||||||
|
|
||||||
|
// --- Volume ---
|
||||||
|
"m³": "Cubic Meters",
|
||||||
|
"cm³": "Cubic Centimeters",
|
||||||
|
"mm³": "Cubic Millimeters",
|
||||||
|
"l": "Liters",
|
||||||
|
"ml": "Milliliters",
|
||||||
|
"gal": "Gallons (US)",
|
||||||
|
"qt": "Quarts (US)",
|
||||||
|
"pt": "Pints (US)",
|
||||||
|
"cup": "Cups (US)",
|
||||||
|
"floz": "Fluid Ounces (US)",
|
||||||
|
"tbsp": "Tablespoons (US)",
|
||||||
|
"tsp": "Teaspoons (US)",
|
||||||
|
|
||||||
|
// --- Area ---
|
||||||
|
"m²": "Square Meters",
|
||||||
|
"km²": "Square Kilometers",
|
||||||
|
"cm²": "Square Centimeters",
|
||||||
|
"mm²": "Square Millimeters",
|
||||||
|
"ha": "Hectares",
|
||||||
|
"acre": "Acres",
|
||||||
|
"ft²": "Square Feet",
|
||||||
|
"in²": "Square Inches",
|
||||||
|
"mi²": "Square Miles",
|
||||||
|
|
||||||
|
// --- Speed ---
|
||||||
|
"m/s": "Meters per Second",
|
||||||
|
"km/h": "Kilometers per Hour",
|
||||||
|
"mph": "Miles per Hour",
|
||||||
|
"knot": "Knots",
|
||||||
|
|
||||||
|
// --- Acceleration ---
|
||||||
|
"m/s²": "Meters per Second Squared",
|
||||||
|
|
||||||
|
// --- Force ---
|
||||||
|
"N": "Newtons",
|
||||||
|
"lbf": "Pound-Force",
|
||||||
|
"dyn": "Dynes",
|
||||||
|
|
||||||
|
// --- Energy ---
|
||||||
|
"J": "Joules",
|
||||||
|
"kJ": "Kilojoules",
|
||||||
|
"cal": "Calories",
|
||||||
|
"kcal": "Kilocalories",
|
||||||
|
"Wh": "Watt Hours",
|
||||||
|
"kWh": "Kilowatt Hours",
|
||||||
|
"BTU": "British Thermal Units",
|
||||||
|
"erg": "Ergs",
|
||||||
|
"eV": "Electronvolts",
|
||||||
|
|
||||||
|
// --- Power ---
|
||||||
|
"W": "Watts",
|
||||||
|
"kW": "Kilowatts",
|
||||||
|
"MW": "Megawatts",
|
||||||
|
"GW": "Gigawatts",
|
||||||
|
"hp": "Horsepower",
|
||||||
|
|
||||||
|
// --- Pressure ---
|
||||||
|
"Pa": "Pascals",
|
||||||
|
"kPa": "Kilopascals",
|
||||||
|
"bar": "Bar",
|
||||||
|
"atm": "Atmospheres",
|
||||||
|
"psi": "Pounds per Square Inch",
|
||||||
|
"torr": "Torr",
|
||||||
|
"mmHg": "Millimeters of Mercury",
|
||||||
|
|
||||||
|
// --- Frequency ---
|
||||||
|
"Hz": "Hertz",
|
||||||
|
"kHz": "Kilohertz",
|
||||||
|
"MHz": "Megahertz",
|
||||||
|
"GHz": "Gigahertz",
|
||||||
|
"THz": "Terahertz",
|
||||||
|
|
||||||
|
// --- Electric ---
|
||||||
|
"V": "Volts",
|
||||||
|
"A": "Amperes",
|
||||||
|
"C": "Coulombs",
|
||||||
|
"Ω": "Ohms",
|
||||||
|
"F": "Farads",
|
||||||
|
"S": "Siemens",
|
||||||
|
"H": "Henries",
|
||||||
|
"Wb": "Webers",
|
||||||
|
"T": "Teslas",
|
||||||
|
"lx": "Lux",
|
||||||
|
|
||||||
|
// --- Angle & Rotation ---
|
||||||
|
"rad": "Radians",
|
||||||
|
"deg": "Degrees",
|
||||||
|
"grad": "Gradians",
|
||||||
|
"cycle": "Cycles",
|
||||||
|
"turn": "Turns",
|
||||||
|
"rev": "Revolutions",
|
||||||
|
|
||||||
|
// --- Charge & Capacitance ---
|
||||||
|
"e": "Elementary Charges",
|
||||||
|
|
||||||
|
// --- Magnetic & Light ---
|
||||||
|
"lm": "Lumens",
|
||||||
|
"ph": "Photons",
|
||||||
|
|
||||||
|
// --- Miscellaneous / Dimensionless ---
|
||||||
|
"%": "Percent",
|
||||||
|
"ppm": "Parts per Million",
|
||||||
|
"ppb": "Parts per Billion",
|
||||||
|
"pptr": "Parts per Trillion",
|
||||||
|
"dB": "Decibels",
|
||||||
|
"bit": "Bits",
|
||||||
|
"byte": "Bytes",
|
||||||
|
|
||||||
|
// --- Digital Storage ---
|
||||||
|
"b": "Bits",
|
||||||
|
"B": "Bytes",
|
||||||
|
"kb": "Kilobits",
|
||||||
|
"kB": "Kilobytes",
|
||||||
|
"Mb": "Megabits",
|
||||||
|
"MB": "Megabytes",
|
||||||
|
"Gb": "Gigabits",
|
||||||
|
"GB": "Gigabytes",
|
||||||
|
"Tb": "Terabits",
|
||||||
|
"TB": "Terabytes",
|
||||||
|
|
||||||
|
// --- Currency ---
|
||||||
|
"USD": "US Dollars",
|
||||||
|
"EUR": "Euros",
|
||||||
|
"GBP": "British Pounds",
|
||||||
|
"AUD": "Australian Dollars",
|
||||||
|
"CAD": "Canadian Dollars",
|
||||||
|
"CHF": "Swiss Francs",
|
||||||
|
"JPY": "Japanese Yen",
|
||||||
|
"CNY": "Chinese Yuan",
|
||||||
|
"INR": "Indian Rupees",
|
||||||
|
"NZD": "New Zealand Dollars",
|
||||||
|
"SEK": "Swedish Krona",
|
||||||
|
"NOK": "Norwegian Krone",
|
||||||
|
"SGD": "Singapore Dollars",
|
||||||
|
"HKD": "Hong Kong Dollars"
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user