diff --git a/packages/dim-si/README.md b/packages/dim-si/README.md
index 86d3739..dbefc40 100644
--- a/packages/dim-si/README.md
+++ b/packages/dim-si/README.md
@@ -95,6 +95,31 @@ const speed = divide(kilometer(100), hour(2));
_\* [Affine quantity](../dim-unit/README.md#affine-units) —
zero point is arbitrary, which restricts valid operations._
+## Type Annotations
+
+Each quantity module exports a type for use in function signatures:
+
+```typescript
+import type { Length } from "@isentropic/dim-si/length";
+import type { Time } from "@isentropic/dim-si/time";
+import type { Velocity } from "@isentropic/dim-si/velocity";
+import { divide } from "@isentropic/dim-si/ops";
+
+function speed(d: Length, t: Time): Velocity {
+ return divide(d, t);
+}
+```
+
+Temperature has two types — `Temperature` for absolute values (affine) and
+`TemperatureDifference` for deltas (linear):
+
+```typescript
+import type {
+ Temperature,
+ TemperatureDifference,
+} from "@isentropic/dim-si/temperature";
+```
+
## Custom Scaled Units
Use SI prefixes to create units not provided out of the box:
@@ -127,15 +152,18 @@ dimension:
* @module
*/
- import type { Jerk } from "@isentropic/dim-isq";
+ import type { Jerk as JerkDim } from "@isentropic/dim-isq";
+ import type { Linear } from "@isentropic/dim-unit";
import { jerk } from "@isentropic/dim-isq";
- import type { BaseUnit } from "./system.ts";
+ import type { BaseUnit } from "./types.ts";
+ import type { Si } from "./system.ts";
import { si } from "./system.ts";
- export type { Jerk } from "@isentropic/dim-isq";
+ /** An SI jerk quantity. */
+ export type Jerk = Linear;
/** Meter per second cubed (m/s³) — SI unit of jerk. */
- export const meterPerSecondCubed: BaseUnit = si.unit(jerk);
+ export const meterPerSecondCubed: BaseUnit = si.unit(jerk);
```
> **Note:** The quantity (`jerk`) must exist in `dim-isq` first. See the
diff --git a/packages/dim-si/src/absorbed-dose.ts b/packages/dim-si/src/absorbed-dose.ts
index 52173ee..9825997 100644
--- a/packages/dim-si/src/absorbed-dose.ts
+++ b/packages/dim-si/src/absorbed-dose.ts
@@ -17,15 +17,18 @@
* @module
*/
-import type { AbsorbedDose } from "@isentropic/dim-isq";
+import type { AbsorbedDose as AbsorbedDoseDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { absorbedDose } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { AbsorbedDose } from "@isentropic/dim-isq";
+/** An SI absorbed dose quantity. */
+export type AbsorbedDose = Linear;
/** Gray (Gy) — SI unit of absorbed dose. */
-export const gray: BaseUnit = si.unit(absorbedDose);
+export const gray: BaseUnit = si.unit(absorbedDose);
/** Sievert (Sv) — SI unit of equivalent dose (same dimension as gray). */
-export const sievert: BaseUnit = si.unit(absorbedDose);
+export const sievert: BaseUnit = si.unit(absorbedDose);
diff --git a/packages/dim-si/src/acceleration.ts b/packages/dim-si/src/acceleration.ts
index 44b9a9d..3507e78 100644
--- a/packages/dim-si/src/acceleration.ts
+++ b/packages/dim-si/src/acceleration.ts
@@ -13,14 +13,17 @@
* @module
*/
-import type { Acceleration } from "@isentropic/dim-isq";
+import type { Acceleration as AccelerationDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { acceleration } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Acceleration } from "@isentropic/dim-isq";
+/** An SI acceleration quantity. */
+export type Acceleration = Linear;
/** Meter per second squared (m/s²) — SI unit of acceleration. */
-export const meterPerSecondSquared: BaseUnit = si.unit(
+export const meterPerSecondSquared: BaseUnit = si.unit(
acceleration,
);
diff --git a/packages/dim-si/src/amount.ts b/packages/dim-si/src/amount.ts
index 9486ebd..fad336e 100644
--- a/packages/dim-si/src/amount.ts
+++ b/packages/dim-si/src/amount.ts
@@ -15,19 +15,22 @@
* @module
*/
-import type { Amount } from "@isentropic/dim-isq";
+import type { Amount as AmountDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { amount } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MICRO, MILLI } from "./prefixes.ts";
-export type { Amount } from "@isentropic/dim-isq";
+/** An SI amount quantity. */
+export type Amount = Linear;
/** Mole (mol) — SI unit of amount of substance. */
-export const mole: BaseUnit = si.unit(amount);
+export const mole: BaseUnit = si.unit(amount);
/** Millimole (mmol) — 10⁻³ moles. */
-export const millimole: ScaledUnit = mole.scaled(MILLI);
+export const millimole: ScaledUnit = mole.scaled(MILLI);
/** Micromole (μmol) — 10⁻⁶ moles. */
-export const micromole: ScaledUnit = mole.scaled(MICRO);
+export const micromole: ScaledUnit = mole.scaled(MICRO);
diff --git a/packages/dim-si/src/area.ts b/packages/dim-si/src/area.ts
index b7c592a..ecee908 100644
--- a/packages/dim-si/src/area.ts
+++ b/packages/dim-si/src/area.ts
@@ -15,15 +15,18 @@
* @module
*/
-import type { Area } from "@isentropic/dim-isq";
+import type { Area as AreaDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { area } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Area } from "@isentropic/dim-isq";
+/** An SI area quantity. */
+export type Area = Linear;
/** Square meter (m²) — SI unit of area. */
-export const squareMeter: BaseUnit = si.unit(area);
+export const squareMeter: BaseUnit = si.unit(area);
/** Hectare (ha) — 10000 square meters. */
-export const hectare: ScaledUnit = squareMeter.scaled(10000);
+export const hectare: ScaledUnit = squareMeter.scaled(10000);
diff --git a/packages/dim-si/src/capacitance.ts b/packages/dim-si/src/capacitance.ts
index 66781b8..6b8ab1f 100644
--- a/packages/dim-si/src/capacitance.ts
+++ b/packages/dim-si/src/capacitance.ts
@@ -16,22 +16,25 @@
* @module
*/
-import type { Capacitance } from "@isentropic/dim-isq";
+import type { Capacitance as CapacitanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { capacitance } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MICRO, NANO, PICO } from "./prefixes.ts";
-export type { Capacitance } from "@isentropic/dim-isq";
+/** An SI capacitance quantity. */
+export type Capacitance = Linear;
/** Farad (F) — SI unit of capacitance. */
-export const farad: BaseUnit = si.unit(capacitance);
+export const farad: BaseUnit = si.unit(capacitance);
/** Microfarad (μF) — 10⁻⁶ farads. */
-export const microfarad: ScaledUnit = farad.scaled(MICRO);
+export const microfarad: ScaledUnit = farad.scaled(MICRO);
/** Nanofarad (nF) — 10⁻⁹ farads. */
-export const nanofarad: ScaledUnit = farad.scaled(NANO);
+export const nanofarad: ScaledUnit = farad.scaled(NANO);
/** Picofarad (pF) — 10⁻¹² farads. */
-export const picofarad: ScaledUnit = farad.scaled(PICO);
+export const picofarad: ScaledUnit = farad.scaled(PICO);
diff --git a/packages/dim-si/src/catalytic-activity.ts b/packages/dim-si/src/catalytic-activity.ts
index 8070088..178a43f 100644
--- a/packages/dim-si/src/catalytic-activity.ts
+++ b/packages/dim-si/src/catalytic-activity.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { CatalyticActivity } from "@isentropic/dim-isq";
+import type { CatalyticActivity as CatalyticActivityDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { catalyticActivity } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { CatalyticActivity } from "@isentropic/dim-isq";
+/** An SI catalytic activity quantity. */
+export type CatalyticActivity = Linear;
/** Katal (kat) — SI unit of catalytic activity. */
-export const katal: BaseUnit = si.unit(catalyticActivity);
+export const katal: BaseUnit = si.unit(catalyticActivity);
diff --git a/packages/dim-si/src/charge.ts b/packages/dim-si/src/charge.ts
index 9c4d70b..fc88adc 100644
--- a/packages/dim-si/src/charge.ts
+++ b/packages/dim-si/src/charge.ts
@@ -17,12 +17,15 @@
* @module
*/
-import type { Charge } from "@isentropic/dim-isq";
+import type { Charge as ChargeDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { charge } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Charge } from "@isentropic/dim-isq";
+/** An SI charge quantity. */
+export type Charge = Linear;
/** Coulomb (C) — SI unit of electric charge. */
-export const coulomb: BaseUnit = si.unit(charge);
+export const coulomb: BaseUnit = si.unit(charge);
diff --git a/packages/dim-si/src/conductance.ts b/packages/dim-si/src/conductance.ts
index a6fb2f0..3f4b2d8 100644
--- a/packages/dim-si/src/conductance.ts
+++ b/packages/dim-si/src/conductance.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { Conductance } from "@isentropic/dim-isq";
+import type { Conductance as ConductanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { conductance } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Conductance } from "@isentropic/dim-isq";
+/** An SI conductance quantity. */
+export type Conductance = Linear;
/** Siemens (S) — SI unit of electrical conductance. */
-export const siemens: BaseUnit = si.unit(conductance);
+export const siemens: BaseUnit = si.unit(conductance);
diff --git a/packages/dim-si/src/current.ts b/packages/dim-si/src/current.ts
index a0f6aba..b091803 100644
--- a/packages/dim-si/src/current.ts
+++ b/packages/dim-si/src/current.ts
@@ -15,19 +15,22 @@
* @module
*/
-import type { Current } from "@isentropic/dim-isq";
+import type { Current as CurrentDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { current } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MICRO, MILLI } from "./prefixes.ts";
-export type { Current } from "@isentropic/dim-isq";
+/** An SI current quantity. */
+export type Current = Linear;
/** Ampere (A) — SI unit of electric current. */
-export const ampere: BaseUnit = si.unit(current);
+export const ampere: BaseUnit = si.unit(current);
/** Milliampere (mA) — 10⁻³ amperes. */
-export const milliampere: ScaledUnit = ampere.scaled(MILLI);
+export const milliampere: ScaledUnit = ampere.scaled(MILLI);
/** Microampere (μA) — 10⁻⁶ amperes. */
-export const microampere: ScaledUnit = ampere.scaled(MICRO);
+export const microampere: ScaledUnit = ampere.scaled(MICRO);
diff --git a/packages/dim-si/src/energy.ts b/packages/dim-si/src/energy.ts
index 4f8cec1..7ddf54d 100644
--- a/packages/dim-si/src/energy.ts
+++ b/packages/dim-si/src/energy.ts
@@ -16,27 +16,30 @@
* @module
*/
-import type { Energy } from "@isentropic/dim-isq";
+import type { Energy as EnergyDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { energy } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { KILO, MEGA } from "./prefixes.ts";
import { kilowatt } from "./power.ts";
import { hour } from "./time.ts";
-export type { Energy } from "@isentropic/dim-isq";
+/** An SI energy quantity. */
+export type Energy = Linear;
/** Joule (J) — SI unit of energy. */
-export const joule: BaseUnit = si.unit(energy);
+export const joule: BaseUnit = si.unit(energy);
/** Kilojoule (kJ) — 1000 joules. */
-export const kilojoule: ScaledUnit = joule.scaled(KILO);
+export const kilojoule: ScaledUnit = joule.scaled(KILO);
/** Megajoule (MJ) — 10⁶ joules. */
-export const megajoule: ScaledUnit = joule.scaled(MEGA);
+export const megajoule: ScaledUnit = joule.scaled(MEGA);
/** Kilowatt-hour (kWh) — 3.6 megajoules. */
// 1 kWh = 1 kW × 1 hour = 3.6 MJ
-export const kilowattHour: ScaledUnit = joule.scaled(
+export const kilowattHour: ScaledUnit = joule.scaled(
kilowatt.scale * hour.scale,
);
diff --git a/packages/dim-si/src/force.ts b/packages/dim-si/src/force.ts
index 1b78086..a9fbce4 100644
--- a/packages/dim-si/src/force.ts
+++ b/packages/dim-si/src/force.ts
@@ -17,12 +17,15 @@
* @module
*/
-import type { Force } from "@isentropic/dim-isq";
+import type { Force as ForceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { force } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Force } from "@isentropic/dim-isq";
+/** An SI force quantity. */
+export type Force = Linear;
/** Newton (N) — SI unit of force. */
-export const newton: BaseUnit = si.unit(force);
+export const newton: BaseUnit = si.unit(force);
diff --git a/packages/dim-si/src/frequency.ts b/packages/dim-si/src/frequency.ts
index 4367cac..8a203fe 100644
--- a/packages/dim-si/src/frequency.ts
+++ b/packages/dim-si/src/frequency.ts
@@ -19,25 +19,28 @@
* @module
*/
-import type { Frequency } from "@isentropic/dim-isq";
+import type { Frequency as FrequencyDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { frequency } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { GIGA, KILO, MEGA } from "./prefixes.ts";
-export type { Frequency } from "@isentropic/dim-isq";
+/** An SI frequency quantity. */
+export type Frequency = Linear;
/** Hertz (Hz) — SI unit of frequency. */
-export const hertz: BaseUnit = si.unit(frequency);
+export const hertz: BaseUnit = si.unit(frequency);
/** Becquerel (Bq) — SI unit of radioactivity (same dimension as hertz). */
-export const becquerel: BaseUnit = si.unit(frequency);
+export const becquerel: BaseUnit = si.unit(frequency);
/** Kilohertz (kHz) — 1000 hertz. */
-export const kilohertz: ScaledUnit = hertz.scaled(KILO);
+export const kilohertz: ScaledUnit = hertz.scaled(KILO);
/** Megahertz (MHz) — 10⁶ hertz. */
-export const megahertz: ScaledUnit = hertz.scaled(MEGA);
+export const megahertz: ScaledUnit = hertz.scaled(MEGA);
/** Gigahertz (GHz) — 10⁹ hertz. */
-export const gigahertz: ScaledUnit = hertz.scaled(GIGA);
+export const gigahertz: ScaledUnit = hertz.scaled(GIGA);
diff --git a/packages/dim-si/src/illuminance.ts b/packages/dim-si/src/illuminance.ts
index df7d064..d524d4f 100644
--- a/packages/dim-si/src/illuminance.ts
+++ b/packages/dim-si/src/illuminance.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { Illuminance } from "@isentropic/dim-isq";
+import type { Illuminance as IlluminanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { illuminance } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Illuminance } from "@isentropic/dim-isq";
+/** An SI illuminance quantity. */
+export type Illuminance = Linear;
/** Lux (lx) — SI unit of illuminance. */
-export const lux: BaseUnit = si.unit(illuminance);
+export const lux: BaseUnit = si.unit(illuminance);
diff --git a/packages/dim-si/src/inductance.ts b/packages/dim-si/src/inductance.ts
index c8f9494..c6ff01e 100644
--- a/packages/dim-si/src/inductance.ts
+++ b/packages/dim-si/src/inductance.ts
@@ -16,19 +16,22 @@
* @module
*/
-import type { Inductance } from "@isentropic/dim-isq";
+import type { Inductance as InductanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { inductance } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MICRO, MILLI } from "./prefixes.ts";
-export type { Inductance } from "@isentropic/dim-isq";
+/** An SI inductance quantity. */
+export type Inductance = Linear;
/** Henry (H) — SI unit of inductance. */
-export const henry: BaseUnit = si.unit(inductance);
+export const henry: BaseUnit = si.unit(inductance);
/** Millihenry (mH) — 10⁻³ henrys. */
-export const millihenry: ScaledUnit = henry.scaled(MILLI);
+export const millihenry: ScaledUnit = henry.scaled(MILLI);
/** Microhenry (μH) — 10⁻⁶ henrys. */
-export const microhenry: ScaledUnit = henry.scaled(MICRO);
+export const microhenry: ScaledUnit = henry.scaled(MICRO);
diff --git a/packages/dim-si/src/length.ts b/packages/dim-si/src/length.ts
index b67bca7..10ac863 100644
--- a/packages/dim-si/src/length.ts
+++ b/packages/dim-si/src/length.ts
@@ -16,31 +16,34 @@
* @module
*/
-import type { Length } from "@isentropic/dim-isq";
+import type { Length as LengthDim } from "@isentropic/dim-isq";
import { length } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { CENTI, KILO, MICRO, MILLI, NANO, PICO } from "./prefixes.ts";
-export type { Length } from "@isentropic/dim-isq";
+/** An SI length quantity. */
+export type Length = Linear;
/** Meter (m) — SI unit of length. */
-export const meter: BaseUnit = si.unit(length);
+export const meter: BaseUnit = si.unit(length);
/** Kilometer (km) — 1000 meters. */
-export const kilometer: ScaledUnit = meter.scaled(KILO);
+export const kilometer: ScaledUnit = meter.scaled(KILO);
/** Centimeter (cm) — 0.01 meters. */
-export const centimeter: ScaledUnit = meter.scaled(CENTI);
+export const centimeter: ScaledUnit = meter.scaled(CENTI);
/** Millimeter (mm) — 0.001 meters. */
-export const millimeter: ScaledUnit = meter.scaled(MILLI);
+export const millimeter: ScaledUnit = meter.scaled(MILLI);
/** Micrometer (μm) — 10⁻⁶ meters. */
-export const micrometer: ScaledUnit = meter.scaled(MICRO);
+export const micrometer: ScaledUnit = meter.scaled(MICRO);
/** Nanometer (nm) — 10⁻⁹ meters. */
-export const nanometer: ScaledUnit = meter.scaled(NANO);
+export const nanometer: ScaledUnit = meter.scaled(NANO);
/** Picometer (pm) — 10⁻¹² meters. */
-export const picometer: ScaledUnit = meter.scaled(PICO);
+export const picometer: ScaledUnit = meter.scaled(PICO);
diff --git a/packages/dim-si/src/luminosity.ts b/packages/dim-si/src/luminosity.ts
index ae87bdf..9f925a6 100644
--- a/packages/dim-si/src/luminosity.ts
+++ b/packages/dim-si/src/luminosity.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { Luminosity } from "@isentropic/dim-isq";
+import type { Luminosity as LuminosityDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { luminosity } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Luminosity } from "@isentropic/dim-isq";
+/** An SI luminosity quantity. */
+export type Luminosity = Linear;
/** Candela (cd) — SI unit of luminous intensity. */
-export const candela: BaseUnit = si.unit(luminosity);
+export const candela: BaseUnit = si.unit(luminosity);
diff --git a/packages/dim-si/src/luminous-flux.ts b/packages/dim-si/src/luminous-flux.ts
index c53278b..c25c9a0 100644
--- a/packages/dim-si/src/luminous-flux.ts
+++ b/packages/dim-si/src/luminous-flux.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { LuminousFlux } from "@isentropic/dim-isq";
+import type { LuminousFlux as LuminousFluxDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { luminousFlux } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { LuminousFlux } from "@isentropic/dim-isq";
+/** An SI luminous flux quantity. */
+export type LuminousFlux = Linear;
/** Lumen (lm) — SI unit of luminous flux. */
-export const lumen: BaseUnit = si.unit(luminousFlux);
+export const lumen: BaseUnit = si.unit(luminousFlux);
diff --git a/packages/dim-si/src/magnetic-flux-density.ts b/packages/dim-si/src/magnetic-flux-density.ts
index 3263d74..e50cb78 100644
--- a/packages/dim-si/src/magnetic-flux-density.ts
+++ b/packages/dim-si/src/magnetic-flux-density.ts
@@ -13,14 +13,17 @@
* @module
*/
-import type { MagneticFluxDensity } from "@isentropic/dim-isq";
+import type { MagneticFluxDensity as MagneticFluxDensityDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { magneticFluxDensity } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { MagneticFluxDensity } from "@isentropic/dim-isq";
+/** An SI magnetic flux density quantity. */
+export type MagneticFluxDensity = Linear;
/** Tesla (T) — SI unit of magnetic flux density. */
-export const tesla: BaseUnit = si.unit(
+export const tesla: BaseUnit = si.unit(
magneticFluxDensity,
);
diff --git a/packages/dim-si/src/magnetic-flux.ts b/packages/dim-si/src/magnetic-flux.ts
index da49d01..b5a7974 100644
--- a/packages/dim-si/src/magnetic-flux.ts
+++ b/packages/dim-si/src/magnetic-flux.ts
@@ -13,12 +13,15 @@
* @module
*/
-import type { MagneticFlux } from "@isentropic/dim-isq";
+import type { MagneticFlux as MagneticFluxDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { magneticFlux } from "@isentropic/dim-isq";
import type { BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { MagneticFlux } from "@isentropic/dim-isq";
+/** An SI magnetic flux quantity. */
+export type MagneticFlux = Linear;
/** Weber (Wb) — SI unit of magnetic flux. */
-export const weber: BaseUnit = si.unit(magneticFlux);
+export const weber: BaseUnit = si.unit(magneticFlux);
diff --git a/packages/dim-si/src/mass.ts b/packages/dim-si/src/mass.ts
index 6e6f111..2677b22 100644
--- a/packages/dim-si/src/mass.ts
+++ b/packages/dim-si/src/mass.ts
@@ -16,28 +16,31 @@
* @module
*/
-import type { Mass } from "@isentropic/dim-isq";
+import type { Mass as MassDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { mass } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { KILO, MICRO, MILLI, NANO } from "./prefixes.ts";
-export type { Mass } from "@isentropic/dim-isq";
+/** An SI mass quantity. */
+export type Mass = Linear;
/** Kilogram (kg) — SI unit of mass. */
-export const kilogram: BaseUnit = si.unit(mass);
+export const kilogram: BaseUnit = si.unit(mass);
/** Gram (g) — 0.001 kilograms. */
-export const gram: ScaledUnit = kilogram.scaled(MILLI);
+export const gram: ScaledUnit = kilogram.scaled(MILLI);
/** Milligram (mg) — 10⁻³ grams. */
-export const milligram: ScaledUnit = gram.scaled(MILLI);
+export const milligram: ScaledUnit = gram.scaled(MILLI);
/** Microgram (μg) — 10⁻⁶ grams. */
-export const microgram: ScaledUnit = gram.scaled(MICRO);
+export const microgram: ScaledUnit = gram.scaled(MICRO);
/** Nanogram (ng) — 10⁻⁹ grams. */
-export const nanogram: ScaledUnit = gram.scaled(NANO);
+export const nanogram: ScaledUnit = gram.scaled(NANO);
/** Tonne (t) — 1000 kilograms. */
-export const tonne: ScaledUnit = kilogram.scaled(KILO);
+export const tonne: ScaledUnit = kilogram.scaled(KILO);
diff --git a/packages/dim-si/src/power.ts b/packages/dim-si/src/power.ts
index a7c25aa..8f954d3 100644
--- a/packages/dim-si/src/power.ts
+++ b/packages/dim-si/src/power.ts
@@ -16,28 +16,31 @@
* @module
*/
-import type { Power } from "@isentropic/dim-isq";
+import type { Power as PowerDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { power } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { GIGA, KILO, MEGA, MILLI, TERA } from "./prefixes.ts";
-export type { Power } from "@isentropic/dim-isq";
+/** An SI power quantity. */
+export type Power = Linear;
/** Watt (W) — SI unit of power. */
-export const watt: BaseUnit = si.unit(power);
+export const watt: BaseUnit = si.unit(power);
/** Milliwatt (mW) — 10⁻³ watts. */
-export const milliwatt: ScaledUnit = watt.scaled(MILLI);
+export const milliwatt: ScaledUnit = watt.scaled(MILLI);
/** Kilowatt (kW) — 1000 watts. */
-export const kilowatt: ScaledUnit = watt.scaled(KILO);
+export const kilowatt: ScaledUnit = watt.scaled(KILO);
/** Megawatt (MW) — 10⁶ watts. */
-export const megawatt: ScaledUnit = watt.scaled(MEGA);
+export const megawatt: ScaledUnit = watt.scaled(MEGA);
/** Gigawatt (GW) — 10⁹ watts. */
-export const gigawatt: ScaledUnit = watt.scaled(GIGA);
+export const gigawatt: ScaledUnit = watt.scaled(GIGA);
/** Terawatt (TW) — 10¹² watts. */
-export const terawatt: ScaledUnit = watt.scaled(TERA);
+export const terawatt: ScaledUnit = watt.scaled(TERA);
diff --git a/packages/dim-si/src/pressure.ts b/packages/dim-si/src/pressure.ts
index 68ea4f6..5e954b8 100644
--- a/packages/dim-si/src/pressure.ts
+++ b/packages/dim-si/src/pressure.ts
@@ -16,19 +16,22 @@
* @module
*/
-import type { Pressure } from "@isentropic/dim-isq";
+import type { Pressure as PressureDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { pressure } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MILLI } from "./prefixes.ts";
-export type { Pressure } from "@isentropic/dim-isq";
+/** An SI pressure quantity. */
+export type Pressure = Linear;
/** Pascal (Pa) — SI unit of pressure. */
-export const pascal: BaseUnit = si.unit(pressure);
+export const pascal: BaseUnit = si.unit(pressure);
/** Bar — 100000 pascals. */
-export const bar: ScaledUnit = pascal.scaled(100000);
+export const bar: ScaledUnit = pascal.scaled(100000);
/** Millibar (mbar) — 100 pascals. */
-export const millibar: ScaledUnit = bar.scaled(MILLI);
+export const millibar: ScaledUnit = bar.scaled(MILLI);
diff --git a/packages/dim-si/src/resistance.ts b/packages/dim-si/src/resistance.ts
index b768c54..faa0cb6 100644
--- a/packages/dim-si/src/resistance.ts
+++ b/packages/dim-si/src/resistance.ts
@@ -15,22 +15,25 @@
* @module
*/
-import type { Resistance } from "@isentropic/dim-isq";
+import type { Resistance as ResistanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { resistance } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { KILO, MEGA, MILLI } from "./prefixes.ts";
-export type { Resistance } from "@isentropic/dim-isq";
+/** An SI resistance quantity. */
+export type Resistance = Linear;
/** Ohm (Ω) — SI unit of electrical resistance. */
-export const ohm: BaseUnit = si.unit(resistance);
+export const ohm: BaseUnit = si.unit(resistance);
/** Milliohm (mΩ) — 10⁻³ ohms. */
-export const milliohm: ScaledUnit = ohm.scaled(MILLI);
+export const milliohm: ScaledUnit = ohm.scaled(MILLI);
/** Kilohm (kΩ) — 1000 ohms. */
-export const kilohm: ScaledUnit = ohm.scaled(KILO);
+export const kilohm: ScaledUnit = ohm.scaled(KILO);
/** Megohm (MΩ) — 10⁶ ohms. */
-export const megohm: ScaledUnit = ohm.scaled(MEGA);
+export const megohm: ScaledUnit = ohm.scaled(MEGA);
diff --git a/packages/dim-si/src/scalar.ts b/packages/dim-si/src/scalar.ts
index bb81d88..e57a021 100644
--- a/packages/dim-si/src/scalar.ts
+++ b/packages/dim-si/src/scalar.ts
@@ -6,4 +6,9 @@
* @module
*/
-export type { Scalar } from "@isentropic/dim-isq";
+import type { Scalar as ScalarDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
+import type { Si } from "./system.ts";
+
+/** An SI scalar (dimensionless) quantity. */
+export type Scalar = Linear;
diff --git a/packages/dim-si/src/temperature.ts b/packages/dim-si/src/temperature.ts
index 82ea360..afe8776 100644
--- a/packages/dim-si/src/temperature.ts
+++ b/packages/dim-si/src/temperature.ts
@@ -28,15 +28,21 @@
* @module
*/
-import type { Temperature } from "@isentropic/dim-isq";
+import type { Temperature as TemperatureDim } from "@isentropic/dim-isq";
+import type { Affine, Linear } from "@isentropic/dim-unit";
import { temperature } from "@isentropic/dim-isq";
import type { AffineUnit, BaseUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
-export type { Temperature } from "@isentropic/dim-isq";
+/** An SI absolute temperature quantity (affine). */
+export type Temperature = Affine;
+
+/** An SI temperature difference quantity (linear). */
+export type TemperatureDifference = Linear;
/** Kelvin (K) — SI unit of thermodynamic temperature. */
-export const kelvin: BaseUnit = si.unit(temperature);
+export const kelvin: BaseUnit = si.unit(temperature);
/**
* Celsius (°C) — temperature offset from kelvin by 273.15.
@@ -47,7 +53,7 @@ export const kelvin: BaseUnit = si.unit(temperature);
* const newTemp = add(celsius(20), rise); // 30°C
* ```
*/
-export const celsius: AffineUnit = kelvin.offset(273.15);
+export const celsius: AffineUnit = kelvin.offset(273.15);
/**
* Fahrenheit (°F) — temperature with scale 5/9 and offset from kelvin.
@@ -59,6 +65,7 @@ export const celsius: AffineUnit = kelvin.offset(273.15);
*/
// Fahrenheit to Kelvin: K = (°F + 459.67) × 5/9
// 459.67 is the offset in Rankine scale (0°R = 0K, 0°F = 459.67°R)
-export const fahrenheit: AffineUnit = kelvin.scaled(5 / 9).offset(
- 459.67 * 5 / 9,
-);
+export const fahrenheit: AffineUnit = kelvin.scaled(5 / 9)
+ .offset(
+ 459.67 * 5 / 9,
+ );
diff --git a/packages/dim-si/src/thermal-conductance.ts b/packages/dim-si/src/thermal-conductance.ts
index 49838f9..e81824a 100644
--- a/packages/dim-si/src/thermal-conductance.ts
+++ b/packages/dim-si/src/thermal-conductance.ts
@@ -13,23 +13,28 @@
* @module
*/
-import type { ThermalConductance } from "@isentropic/dim-isq";
+import type { ThermalConductance as ThermalConductanceDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { thermalConductance } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { KILO, MILLI } from "./prefixes.ts";
-export type { ThermalConductance } from "@isentropic/dim-isq";
+/** An SI thermal conductance quantity. */
+export type ThermalConductance = Linear;
/** Watt per kelvin (W/K) — SI unit of thermal conductance. */
-export const wattPerKelvin: BaseUnit = si.unit(
+export const wattPerKelvin: BaseUnit = si.unit(
thermalConductance,
);
/** Milliwatt per kelvin (mW/K) — 10⁻³ watts per kelvin. */
-export const milliwattPerKelvin: ScaledUnit = wattPerKelvin
- .scaled(MILLI);
+export const milliwattPerKelvin: ScaledUnit =
+ wattPerKelvin
+ .scaled(MILLI);
/** Kilowatt per kelvin (kW/K) — 1000 watts per kelvin. */
-export const kilowattPerKelvin: ScaledUnit = wattPerKelvin
- .scaled(KILO);
+export const kilowattPerKelvin: ScaledUnit =
+ wattPerKelvin
+ .scaled(KILO);
diff --git a/packages/dim-si/src/time.ts b/packages/dim-si/src/time.ts
index 697049d..672da87 100644
--- a/packages/dim-si/src/time.ts
+++ b/packages/dim-si/src/time.ts
@@ -16,34 +16,37 @@
* @module
*/
-import type { Time } from "@isentropic/dim-isq";
+import type { Time as TimeDim } from "@isentropic/dim-isq";
+import type { Linear } from "@isentropic/dim-unit";
import { time } from "@isentropic/dim-isq";
import type { BaseUnit, ScaledUnit } from "./types.ts";
+import type { Si } from "./system.ts";
import { si } from "./system.ts";
import { MICRO, MILLI, NANO, PICO } from "./prefixes.ts";
-export type { Time } from "@isentropic/dim-isq";
+/** An SI time quantity. */
+export type Time = Linear;
/** Second (s) — SI unit of time. */
-export const second: BaseUnit