From 83e5305966eb8756ee1a866759c69bf9f7fbf15c Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Fri, 2 May 2025 20:29:10 +0300 Subject: [PATCH] UI: Add new unit definition --- ui-ngx/src/app/shared/models/unit.models.ts | 7 ++ .../models/units/Magnetic-permeability.ts | 37 ++++++++++ .../shared/models/units/air-quality-index.ts | 19 +++++ .../models/units/amount-of-substance.ts | 41 +++++++++++ ui-ngx/src/app/shared/models/units/area.ts | 7 +- .../app/shared/models/units/blood-glucose.ts | 20 ++++++ .../app/shared/models/units/capacitance.ts | 59 +++++++++++++++ .../shared/models/units/catalytic-activity.ts | 19 +++++ .../models/units/concentration-gradient.ts | 40 +++++++++++ .../models/units/concentration-volume.ts | 63 ++++++++++++++++ .../shared/models/units/current-density.ts | 26 +++++++ .../shared/models/units/data-transfer-rate.ts | 59 +++++++++++++++ ui-ngx/src/app/shared/models/units/density.ts | 50 +++++++++++++ .../models/units/dimensionless-ratio.ts | 21 ++++++ .../shared/models/units/dynamic-viscosity.ts | 60 ++++++++++++++++ .../models/units/earthquake-magnitude.ts | 19 +++++ .../models/units/electric-field-strength.ts | 29 ++++++++ .../app/shared/models/units/electric-flux.ts | 46 ++++++++++++ .../shared/models/units/electric-moment.ts | 26 +++++++ .../models/units/electric-permittivity.ts | 21 ++++++ .../models/units/electrical-conductance.ts | 44 ++++++++++++ .../models/units/electrical-conductivity.ts | 30 ++++++++ .../src/app/shared/models/units/frequency.ts | 17 ++++- .../shared/models/units/fuel-efficiency.ts | 46 ++++++++++++ .../app/shared/models/units/heat-capacity.ts | 21 ++++++ .../src/app/shared/models/units/humidity.ts | 20 ++++++ .../src/app/shared/models/units/inductance.ts | 40 +++++++++++ .../models/units/kinematic-viscosity.ts | 55 ++++++++++++++ .../app/shared/models/units/light-exposure.ts | 21 ++++++ .../models/units/liner-charge-density.ts | 21 ++++++ .../shared/models/units/logarithmic-units.ts | 29 ++++++++ .../shared/models/units/luminous-efficacy.ts | 21 ++++++ .../app/shared/models/units/luminous-flux.ts | 21 ++++++ .../shared/models/units/luminous-intensity.ts | 21 ++++++ .../models/units/magnetic-field-gradient.ts | 25 +++++++ .../app/shared/models/units/magnetic-field.ts | 71 +++++++++++++++++++ .../app/shared/models/units/magnetic-flux.ts | 44 ++++++++++++ .../shared/models/units/magnetic-moment.ts | 26 +++++++ .../app/shared/models/units/molar-energy.ts | 21 ++++++ .../models/units/molar-heat-capacity.ts | 21 ++++++ .../src/app/shared/models/units/molar-mass.ts | 29 ++++++++ .../models/units/particle-concentration.ts | 19 +++++ .../src/app/shared/models/units/percentage.ts | 20 ++++++ ui-ngx/src/app/shared/models/units/ph.ts | 19 +++++ .../app/shared/models/units/polarization.ts | 21 ++++++ .../app/shared/models/units/power-density.ts | 65 +++++++++++++++++ .../src/app/shared/models/units/pressure.ts | 16 ++++- .../src/app/shared/models/units/radiance.ts | 19 +++++ .../shared/models/units/radiant-intensity.ts | 20 ++++++ .../app/shared/models/units/radiation-dose.ts | 50 +++++++++++++ .../models/units/radioactive-decay-rate.ts | 25 +++++++ .../units/radioactivity-concentration.ts | 25 +++++++ .../app/shared/models/units/radioactivity.ts | 40 +++++++++++ .../src/app/shared/models/units/resistance.ts | 46 ++++++++++++ .../shared/models/units/reynolds-number.ts | 21 ++++++ .../shared/models/units/signal-strength.ts | 31 ++++++++ .../app/shared/models/units/solid-angle.ts | 21 ++++++ .../shared/models/units/specific-energy.ts | 21 ++++++ .../models/units/specific-heat-capacity.ts | 21 ++++++ .../shared/models/units/specific-volume.ts | 21 ++++++ ui-ngx/src/app/shared/models/units/speed.ts | 7 +- .../app/shared/models/units/sugar-content.ts | 19 +++++ .../models/units/surface-charge-density.ts | 21 ++++++ .../shared/models/units/surface-tension.ts | 21 ++++++ .../models/units/thermal-conductivity.ts | 21 ++++++ .../src/app/shared/models/units/turbidity.ts | 20 ++++++ .../models/units/volume-charge-density.ts | 21 ++++++ .../src/app/shared/models/units/wavenumber.ts | 21 ++++++ .../assets/locale/locale.constant-en_US.json | 2 - 69 files changed, 1980 insertions(+), 7 deletions(-) create mode 100644 ui-ngx/src/app/shared/models/units/Magnetic-permeability.ts create mode 100644 ui-ngx/src/app/shared/models/units/air-quality-index.ts create mode 100644 ui-ngx/src/app/shared/models/units/amount-of-substance.ts create mode 100644 ui-ngx/src/app/shared/models/units/blood-glucose.ts create mode 100644 ui-ngx/src/app/shared/models/units/capacitance.ts create mode 100644 ui-ngx/src/app/shared/models/units/catalytic-activity.ts create mode 100644 ui-ngx/src/app/shared/models/units/concentration-gradient.ts create mode 100644 ui-ngx/src/app/shared/models/units/concentration-volume.ts create mode 100644 ui-ngx/src/app/shared/models/units/current-density.ts create mode 100644 ui-ngx/src/app/shared/models/units/data-transfer-rate.ts create mode 100644 ui-ngx/src/app/shared/models/units/density.ts create mode 100644 ui-ngx/src/app/shared/models/units/dimensionless-ratio.ts create mode 100644 ui-ngx/src/app/shared/models/units/dynamic-viscosity.ts create mode 100644 ui-ngx/src/app/shared/models/units/earthquake-magnitude.ts create mode 100644 ui-ngx/src/app/shared/models/units/electric-field-strength.ts create mode 100644 ui-ngx/src/app/shared/models/units/electric-flux.ts create mode 100644 ui-ngx/src/app/shared/models/units/electric-moment.ts create mode 100644 ui-ngx/src/app/shared/models/units/electric-permittivity.ts create mode 100644 ui-ngx/src/app/shared/models/units/electrical-conductance.ts create mode 100644 ui-ngx/src/app/shared/models/units/electrical-conductivity.ts create mode 100644 ui-ngx/src/app/shared/models/units/fuel-efficiency.ts create mode 100644 ui-ngx/src/app/shared/models/units/heat-capacity.ts create mode 100644 ui-ngx/src/app/shared/models/units/humidity.ts create mode 100644 ui-ngx/src/app/shared/models/units/inductance.ts create mode 100644 ui-ngx/src/app/shared/models/units/kinematic-viscosity.ts create mode 100644 ui-ngx/src/app/shared/models/units/light-exposure.ts create mode 100644 ui-ngx/src/app/shared/models/units/liner-charge-density.ts create mode 100644 ui-ngx/src/app/shared/models/units/logarithmic-units.ts create mode 100644 ui-ngx/src/app/shared/models/units/luminous-efficacy.ts create mode 100644 ui-ngx/src/app/shared/models/units/luminous-flux.ts create mode 100644 ui-ngx/src/app/shared/models/units/luminous-intensity.ts create mode 100644 ui-ngx/src/app/shared/models/units/magnetic-field-gradient.ts create mode 100644 ui-ngx/src/app/shared/models/units/magnetic-field.ts create mode 100644 ui-ngx/src/app/shared/models/units/magnetic-flux.ts create mode 100644 ui-ngx/src/app/shared/models/units/magnetic-moment.ts create mode 100644 ui-ngx/src/app/shared/models/units/molar-energy.ts create mode 100644 ui-ngx/src/app/shared/models/units/molar-heat-capacity.ts create mode 100644 ui-ngx/src/app/shared/models/units/molar-mass.ts create mode 100644 ui-ngx/src/app/shared/models/units/particle-concentration.ts create mode 100644 ui-ngx/src/app/shared/models/units/percentage.ts create mode 100644 ui-ngx/src/app/shared/models/units/ph.ts create mode 100644 ui-ngx/src/app/shared/models/units/polarization.ts create mode 100644 ui-ngx/src/app/shared/models/units/power-density.ts create mode 100644 ui-ngx/src/app/shared/models/units/radiance.ts create mode 100644 ui-ngx/src/app/shared/models/units/radiant-intensity.ts create mode 100644 ui-ngx/src/app/shared/models/units/radiation-dose.ts create mode 100644 ui-ngx/src/app/shared/models/units/radioactive-decay-rate.ts create mode 100644 ui-ngx/src/app/shared/models/units/radioactivity-concentration.ts create mode 100644 ui-ngx/src/app/shared/models/units/radioactivity.ts create mode 100644 ui-ngx/src/app/shared/models/units/resistance.ts create mode 100644 ui-ngx/src/app/shared/models/units/reynolds-number.ts create mode 100644 ui-ngx/src/app/shared/models/units/signal-strength.ts create mode 100644 ui-ngx/src/app/shared/models/units/solid-angle.ts create mode 100644 ui-ngx/src/app/shared/models/units/specific-energy.ts create mode 100644 ui-ngx/src/app/shared/models/units/specific-heat-capacity.ts create mode 100644 ui-ngx/src/app/shared/models/units/specific-volume.ts create mode 100644 ui-ngx/src/app/shared/models/units/sugar-content.ts create mode 100644 ui-ngx/src/app/shared/models/units/surface-charge-density.ts create mode 100644 ui-ngx/src/app/shared/models/units/surface-tension.ts create mode 100644 ui-ngx/src/app/shared/models/units/thermal-conductivity.ts create mode 100644 ui-ngx/src/app/shared/models/units/turbidity.ts create mode 100644 ui-ngx/src/app/shared/models/units/volume-charge-density.ts create mode 100644 ui-ngx/src/app/shared/models/units/wavenumber.ts diff --git a/ui-ngx/src/app/shared/models/unit.models.ts b/ui-ngx/src/app/shared/models/unit.models.ts index 4f73fc4fbc..27cca5f603 100644 --- a/ui-ngx/src/app/shared/models/unit.models.ts +++ b/ui-ngx/src/app/shared/models/unit.models.ts @@ -146,6 +146,7 @@ export interface Unit { tags: string[]; to_anchor: number; anchor_shift?: number; + transform?: (value: number) => number; } export type TbUnit = string | TbUnitMapping; @@ -235,6 +236,9 @@ export class Converter { if (origin.unit.anchor_shift) { result -= origin.unit.anchor_shift; } + if (typeof origin.unit.transform === 'function') { + result = origin.unit.transform(result); + } if (origin.system !== destination.system) { const measureUnits = this.measureData[origin.measure][origin.system]; const transform = measureUnits?.transform; @@ -251,6 +255,9 @@ export class Converter { if (destination.unit.anchor_shift) { result += destination.unit.anchor_shift; } + if (typeof destination.unit.transform === 'function') { + result = destination.unit.transform(result); + } return result / destination.unit.to_anchor; } diff --git a/ui-ngx/src/app/shared/models/units/Magnetic-permeability.ts b/ui-ngx/src/app/shared/models/units/Magnetic-permeability.ts new file mode 100644 index 0000000000..be120c4b15 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/Magnetic-permeability.ts @@ -0,0 +1,37 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MagneticPermeabilityMetricUnits = 'H/m'; +export type MagneticPermeabilityImperialUnits = 'G/Oe'; + +export type MagneticPermeabilityUnits = + | MagneticPermeabilityMetricUnits + | MagneticPermeabilityImperialUnits; + +const METRIC: TbMeasureUnits = { + transform: (Hm) => Hm * 795774.715, + units: { + 'H/m': { + name: 'unit.henry-per-meter', + tags: ['magnetic permeability', 'henry per meter', 'H/m'], + to_anchor: 1, + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + transform: (GOe) => GOe / 795774.715, + units: { + 'G/Oe': { + name: 'unit.gauss-per-oersted', + tags: ['magnetic field', 'Gauss per Oersted', 'G/Oe'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/air-quality-index.ts b/ui-ngx/src/app/shared/models/units/air-quality-index.ts new file mode 100644 index 0000000000..907071b594 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/air-quality-index.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type AirQualityIndexUnits = 'aqi'; + +const METRIC: TbMeasureUnits = { + units: { + aqi: { + name: 'unit.aqi', + tags: ['AQI', 'air quality index'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/amount-of-substance.ts b/ui-ngx/src/app/shared/models/units/amount-of-substance.ts new file mode 100644 index 0000000000..47f798c388 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/amount-of-substance.ts @@ -0,0 +1,41 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type AmountOfSubstanceMetricUnits = 'mol' | 'nmol' | 'μmol' | 'mmol' | 'kmol'; + +export type AmountOfSubstanceUnits = AmountOfSubstanceMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'mol': { + name: 'unit.mole', + tags: ['amount of substance', 'chemical amount', 'mole', 'mol'], + to_anchor: 1, + }, + 'nmol': { + name: 'unit.nanomole', + tags: ['amount of substance', 'nanomole', 'nmol'], + to_anchor: 0.000000001, + }, + 'μmol': { + name: 'unit.micromole', + tags: ['amount of substance', 'micromole', 'μmol'], + to_anchor: 0.000001, + }, + 'mmol': { + name: 'unit.millimole', + tags: ['amount of substance', 'millimole', 'mmol'], + to_anchor: 0.001, + }, + 'kmol': { + name: 'unit.kilomole', + tags: ['amount of substance', 'kilomole', 'kmol'], + to_anchor: 1000, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/area.ts b/ui-ngx/src/app/shared/models/units/area.ts index 6a364496b5..6c36d6d976 100644 --- a/ui-ngx/src/app/shared/models/units/area.ts +++ b/ui-ngx/src/app/shared/models/units/area.ts @@ -16,7 +16,7 @@ import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; -export type AreaMetricUnits = 'mm²' | 'cm²' | 'm²' | 'a' | 'ha' | 'km²'; +export type AreaMetricUnits = 'mm²' | 'cm²' | 'm²' | 'a' | 'ha' | 'km²' | 'barn'; export type AreaImperialUnits = 'in²' | 'yd²' | 'ft²' | 'ac' | 'ml²' | 'cin'; export type AreaUnits = AreaMetricUnits | AreaImperialUnits; @@ -54,6 +54,11 @@ const METRIC: TbMeasureUnits = { tags: ['area','lot','zone','space','region','square kilometer','square kilometers','km²','sq-km'], to_anchor: 1000000, }, + barn: { + name: 'unit.barn', + tags: ['cross-sectional area', 'particle physics', 'nuclear physics', 'barn'], + to_anchor: 1e-28, + }, } }; diff --git a/ui-ngx/src/app/shared/models/units/blood-glucose.ts b/ui-ngx/src/app/shared/models/units/blood-glucose.ts new file mode 100644 index 0000000000..18b0902591 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/blood-glucose.ts @@ -0,0 +1,20 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type BloodGlucoseUnits = BloodGlucoseMetricUnits; +export type BloodGlucoseMetricUnits = 'mg/dL'; + +const METRIC: TbMeasureUnits = { + units: { + 'mg/dL': { + name: 'unit.milligrams-per-deciliter', + tags: ['glucose', 'blood sugar', 'glucose level', 'mg/dL'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/capacitance.ts b/ui-ngx/src/app/shared/models/units/capacitance.ts new file mode 100644 index 0000000000..4999afd536 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/capacitance.ts @@ -0,0 +1,59 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type CapacitanceUnits = 'F' | 'mF' | 'μF' | 'nF' | 'pF' | 'kF' | 'MF' | 'GF' | 'TF'; + +const METRIC: TbMeasureUnits = { + units: { + 'F': { + name: 'unit.farad', + tags: ['electric capacitance', 'capacitance', 'farad', 'F'], + to_anchor: 1, + }, + 'mF': { + name: 'unit.millifarad', + tags: ['electric capacitance', 'capacitance', 'millifarad', 'mF'], + to_anchor: 1e-3, + }, + 'μF': { + name: 'unit.microfarad', + tags: ['electric capacitance', 'capacitance', 'microfarad', 'μF'], + to_anchor: 1e-6, + }, + 'nF': { + name: 'unit.nanofarad', + tags: ['electric capacitance', 'capacitance', 'nanofarad', 'nF'], + to_anchor: 1e-9, + }, + 'pF': { + name: 'unit.picofarad', + tags: ['electric capacitance', 'capacitance', 'picofarad', 'pF'], + to_anchor: 1e-12, + }, + 'kF': { + name: 'unit.kilofarad', + tags: ['electric capacitance', 'capacitance', 'kilofarad', 'kF'], + to_anchor: 1e3, + }, + 'MF': { + name: 'unit.megafarad', + tags: ['electric capacitance', 'capacitance', 'megafarad', 'MF'], + to_anchor: 1e6, + }, + 'GF': { + name: 'unit.gigafarad', + tags: ['electric capacitance', 'capacitance', 'gigafarad', 'GF'], + to_anchor: 1e9, + }, + 'TF': { + name: 'unit.terafarad', + tags: ['electric capacitance', 'capacitance', 'terafarad', 'TF'], + to_anchor: 1e12, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/catalytic-activity.ts b/ui-ngx/src/app/shared/models/units/catalytic-activity.ts new file mode 100644 index 0000000000..7198bf4d9c --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/catalytic-activity.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type AirQualityIndexUnits = 'kat'; + +const METRIC: TbMeasureUnits = { + units: { + kat: { + name: 'unit.katal', + tags: ['catalytic activity', 'enzyme activity', 'kat'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/concentration-gradient.ts b/ui-ngx/src/app/shared/models/units/concentration-gradient.ts new file mode 100644 index 0000000000..ef406445d2 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/concentration-gradient.ts @@ -0,0 +1,40 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ConcentrationMetricUnits = 'mol/m³' | 'mg/mL' | 'mg/m³' | 'µg/m³' | 'particles/mL'; +export type ConcentrationUnits = ConcentrationMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'mol/m³': { + name: 'unit.mole-per-cubic-meter', + tags: ['concentration', 'amount of substance per unit volume', 'mole per cubic meter', 'mol/m³'], + to_anchor: 1, + }, + 'mg/mL': { + name: 'unit.milligram-per-milliliter', + tags: ['concentration', 'mass per unit volume', 'milligram per milliliter', 'mg/mL'], + to_anchor: 1, + }, + 'mg/m³': { + name: 'unit.milligram-per-cubic-meter', + tags: ['concentration', 'mass per unit volume', 'milligram per cubic meter', 'mg/m³'], + to_anchor: 1, + }, + 'µg/m³': { + name: 'unit.micrograms-per-cubic-meter', + tags: ['concentration', 'air quality', 'particulate matter', 'PM2.5', 'PM10', 'micrograms per cubic meter', 'µg/m³'], + to_anchor: 1, + }, + 'particles/mL': { + name: 'unit.particle-density', + tags: ['concentration', 'particle density', 'particles per milliliter', 'particles/mL'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/concentration-volume.ts b/ui-ngx/src/app/shared/models/units/concentration-volume.ts new file mode 100644 index 0000000000..94c8050fee --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/concentration-volume.ts @@ -0,0 +1,63 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ConcentrationVolumeMetricUnits = + 'mol/m³' + | 'µg/m³' + | 'mg/m³' + | 'g/m³' + | 'mg/L' + | 'mg/mL' + | 'kat/m³' + | '°Bx'; +export type ConcentrationVolumeUnits = ConcentrationVolumeMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'mol/m³': { + name: 'unit.mole-per-cubic-meter', + tags: ['concentration', 'amount of substance', 'mole per cubic meter', 'mol/m³'], + to_anchor: 1, + }, + 'µg/m³': { + name: 'unit.micrograms-per-cubic-meter', + tags: ['coarse particulate matter', 'pm10', 'fine particulate matter', 'pm2.5', 'aqi', 'air quality', 'total volatile organic compounds', 'tvoc', 'micrograms per cubic meter', 'µg/m³'], + to_anchor: 1e-9, + }, + 'mg/m³': { + name: 'unit.milligram-per-cubic-meter', + tags: ['concentration', 'mass per volume', 'mg/m³'], + to_anchor: 1e-6, + }, + 'g/m³': { + name: 'unit.gram-per-cubic-meter', + tags: ['humidity', 'moisture', 'absolute humidity', 'g/m³'], + to_anchor: 1 / 1000, + }, + 'mg/L': { + name: 'unit.mg-per-liter', + tags: ['dissolved oxygen', 'water quality', 'mg/L'], + to_anchor: 1e-6, + }, + 'mg/mL': { + name: 'unit.milligram-per-milliliter', + tags: ['concentration', 'mass per volume', 'mg/mL'], + to_anchor: 1 / 1000, + }, + 'kat/m³': { + name: 'unit.katal-per-cubic-metre', + tags: ['catalytic activity concentration', 'enzyme concentration', 'kat/m³'], + to_anchor: 1, + }, + '°Bx': { + name: 'unit.degrees-brix', + tags: ['sugar content', 'fruit ripeness', 'Bx'], + to_anchor: 10.04 * 1e-3, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/current-density.ts b/ui-ngx/src/app/shared/models/units/current-density.ts new file mode 100644 index 0000000000..7b332c57f4 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/current-density.ts @@ -0,0 +1,26 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type CurrentDensityMetricUnits = 'µA/cm²' | 'A/m²'; + +export type CurrentDensityUnits = CurrentDensityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'µA/cm²': { + name: 'unit.microampere-per-square-centimeter', + tags: ['current density', 'microampere per square centimeter', 'µA/cm²'], + to_anchor: 10000, + }, + 'A/m²': { + name: 'unit.ampere-per-square-meter', + tags: ['current density', 'current per unit area', 'ampere per square meter', 'A/m²'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/data-transfer-rate.ts b/ui-ngx/src/app/shared/models/units/data-transfer-rate.ts new file mode 100644 index 0000000000..e3b9095700 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/data-transfer-rate.ts @@ -0,0 +1,59 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type DataTransferRateUnits = 'bps' | 'kbps' | 'Mbps' | 'Gbps' | 'Tbps' | 'B/s' | 'KB/s' | 'MB/s' | 'GB/s'; + +const METRIC: TbMeasureUnits = { + units: { + 'bps': { + name: 'unit.bit-per-second', + tags: ['data transfer rate', 'bps'], + to_anchor: 1, + }, + 'kbps': { + name: 'unit.kilobit-per-second', + tags: ['data transfer rate', 'kbps'], + to_anchor: 1e3, + }, + 'Mbps': { + name: 'unit.megabit-per-second', + tags: ['data transfer rate', 'Mbps'], + to_anchor: 1e6, + }, + 'Gbps': { + name: 'unit.gigabit-per-second', + tags: ['data transfer rate', 'Gbps'], + to_anchor: 1e9, + }, + 'Tbps': { + name: 'unit.terabit-per-second', + tags: ['data transfer rate', 'Tbps'], + to_anchor: 1e12, + }, + 'B/s': { + name: 'unit.byte-per-second', + tags: ['data transfer rate', 'B/s'], + to_anchor: 8, + }, + 'KB/s': { + name: 'unit.kilobyte-per-second', + tags: ['data transfer rate', 'KB/s'], + to_anchor: 8e3, + }, + 'MB/s': { + name: 'unit.megabyte-per-second', + tags: ['data transfer rate', 'MB/s'], + to_anchor: 8e6, + }, + 'GB/s': { + name: 'unit.gigabyte-per-second', + tags: ['data transfer rate', 'GB/s'], + to_anchor: 8e9, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/density.ts b/ui-ngx/src/app/shared/models/units/density.ts new file mode 100644 index 0000000000..8603de1976 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/density.ts @@ -0,0 +1,50 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type DensityMetricUnits = 'kg/m³' | 'g/cm³'; +export type DensityImperialUnits = 'lb/ft³' | 'oz/in³' | 'ton/yd³'; + +export type DensityUnits = DensityMetricUnits | DensityImperialUnits; + +const METRIC: TbMeasureUnits = { + ratio: 0.062428, + units: { + 'kg/m³': { + name: 'unit.kilogram-per-cubic-meter', + tags: ['density', 'mass per unit volume', 'kg/m³'], + to_anchor: 1, // Base unit: kg/m³ + }, + 'g/cm³': { + name: 'unit.gram-per-cubic-centimeter', + tags: ['density', 'mass per unit volume', 'g/cm³'], + to_anchor: 1000, // 1 g/cm³ = 10³ kg/m³ + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + ratio: 1 / 0.062428, + units: { + 'lb/ft³': { + name: 'unit.pound-per-cubic-foot', + tags: ['density', 'mass per unit volume', 'lb/ft³'], + to_anchor: 1, + }, + 'oz/in³': { + name: 'unit.ounces-per-cubic-inch', + tags: ['density', 'mass per unit volume', 'oz/in³'], + to_anchor: 1728, + }, + 'ton/yd³': { + name: 'unit.tons-per-cubic-yard', + tags: ['density', 'mass per unit volume', 'ton/yd³'], + to_anchor: 74.074, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/dimensionless-ratio.ts b/ui-ngx/src/app/shared/models/units/dimensionless-ratio.ts new file mode 100644 index 0000000000..71972aa6e8 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/dimensionless-ratio.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type DimensionlessRatioMetricUnits = 'm/m'; + +export type DimensionRatioUnits = DimensionlessRatioMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'm/m': { + name: 'unit.meter-per-meter', + tags: ['ratio of length to length', 'meter per meter', 'm/m'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/dynamic-viscosity.ts b/ui-ngx/src/app/shared/models/units/dynamic-viscosity.ts new file mode 100644 index 0000000000..272892f9df --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/dynamic-viscosity.ts @@ -0,0 +1,60 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type DynamicViscosityMetricUnits = 'Pa·s' | 'cP' | 'P' | 'N·s/m²' | 'dyn·s/cm²' | 'kg/(m·s)'; +export type DynamicViscosityImperialUnits = 'lb/(ft·h)'; + +export type DynamicViscosityUnits = DynamicViscosityMetricUnits | DynamicViscosityImperialUnits; + +const METRIC: TbMeasureUnits = { + ratio: 2419.0883293091, + units: { + 'Pa·s': { + name: 'unit.pascal-second', + tags: ['dynamic viscosity', 'viscosity', 'fluid mechanics', 'Pa·s'], + to_anchor: 1, + }, + 'cP': { + name: 'unit.centipoise', + tags: ['viscosity', 'dynamic viscosity', 'fluid viscosity', 'centipoise', 'cP'], + to_anchor: 0.001, + }, + 'P': { + name: 'unit.poise', + tags: ['viscosity', 'dynamic viscosity', 'fluid viscosity', 'poise', 'P'], + to_anchor: 0.1, + }, + 'N·s/m²': { + name: 'unit.newton-second-per-square-meter', + tags: ['newton second per square meter', 'N·s/m²'], + to_anchor: 1, + }, + 'dyn·s/cm²': { + name: 'unit.dyne-second-per-square-centimeter', + tags: ['dyne second per square centimeter', 'dyn·s/cm²'], + to_anchor: 0.1, + }, + 'kg/(m·s)': { + name: 'unit.kilogram-per-meter-second', + tags: ['kilogram per meter-second', 'kg/(m·s)'], + to_anchor: 1, + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + ratio: 0.00041337887, + units: { + 'lb/(ft·h)': { + name: 'unit.pound-per-foot-hour', + tags: ['pound per foot-hour', 'lb/(ft·h)'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/earthquake-magnitude.ts b/ui-ngx/src/app/shared/models/units/earthquake-magnitude.ts new file mode 100644 index 0000000000..02658073b5 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/earthquake-magnitude.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type EarthquakeMagnitudeUnits = 'richter'; + +const METRIC: TbMeasureUnits = { + units: { + richter: { + name: 'unit.richter-scale', + tags: ['earthquake', 'seismic activity', 'richter'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electric-field-strength.ts b/ui-ngx/src/app/shared/models/units/electric-field-strength.ts new file mode 100644 index 0000000000..f8d753c401 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electric-field-strength.ts @@ -0,0 +1,29 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricFieldStrengthUnits = 'V/m' | 'mV/m' | 'kV/m'; + +const METRIC: TbMeasureUnits = { + units: { + 'V/m': { + name: 'unit.volts-per-meter', + tags: ['electric field strength', 'volts per meter', 'V/m'], + to_anchor: 1, + }, + 'mV/m': { + name: 'unit.millivolts-per-meter', + tags: ['electric field strength', 'millivolts per meter', 'mV/m'], + to_anchor: 1e-3, + }, + 'kV/m': { + name: 'unit.kilovolts-per-meter', + tags: ['electric field strength', 'kilovolts per meter', 'kV/m'], + to_anchor: 1e3, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electric-flux.ts b/ui-ngx/src/app/shared/models/units/electric-flux.ts new file mode 100644 index 0000000000..ac40a58293 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electric-flux.ts @@ -0,0 +1,46 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricFluxMetricUnits = 'V·m' | 'kV·m' | 'MV·m' | 'µV·m' | 'mV·m' | 'nV·m'; + +export type ElectricFluxUnits = ElectricFluxMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'V·m': { + name: 'unit.volt-meter', + tags: ['electric flux', 'volt-meter', 'V·m'], + to_anchor: 1, + }, + 'kV·m': { + name: 'unit.kilovolt-meter', + tags: ['electric flux', 'kilovolt-meter', 'kV·m'], + to_anchor: 1000, + }, + 'MV·m': { + name: 'unit.megavolt-meter', + tags: ['electric flux', 'megavolt-meter', 'MV·m'], + to_anchor: 1000000, + }, + 'µV·m': { + name: 'unit.microvolt-meter', + tags: ['electric flux', 'microvolt-meter', 'µV·m'], + to_anchor: 0.000001, + }, + 'mV·m': { + name: 'unit.millivolt-meter', + tags: ['electric flux', 'millivolt-meter', 'mV·m'], + to_anchor: 0.001, + }, + 'nV·m': { + name: 'unit.nanovolt-meter', + tags: ['electric flux', 'nanovolt-meter', 'nV·m'], + to_anchor: 0.000000001, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electric-moment.ts b/ui-ngx/src/app/shared/models/units/electric-moment.ts new file mode 100644 index 0000000000..47a8e55830 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electric-moment.ts @@ -0,0 +1,26 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricMomentMetricUnits = 'C·m' | 'D'; + +export type ElectricMomentUnits = ElectricMomentMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'C·m': { + name: 'unit.electric-dipole-moment', + tags: ['electric dipole', 'dipole moment', 'coulomb meter', 'C·m'], + to_anchor: 1, + }, + 'D': { + name: 'unit.debye', + tags: ['polarization', 'electric dipole moment', 'debye', 'D'], + to_anchor: 3.33564e-30 + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electric-permittivity.ts b/ui-ngx/src/app/shared/models/units/electric-permittivity.ts new file mode 100644 index 0000000000..d9bea899a7 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electric-permittivity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricPermittivityMetricUnits = 'F/m'; + +export type ElectricPermittivityUnits = ElectricPermittivityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'F/m': { + name: 'unit.farad-per-meter', + tags: ['electric permittivity', 'farad per meter', 'F/m'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electrical-conductance.ts b/ui-ngx/src/app/shared/models/units/electrical-conductance.ts new file mode 100644 index 0000000000..0a1fe6bebe --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electrical-conductance.ts @@ -0,0 +1,44 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricalConductanceUnits = 'S' | 'mS' | 'μS' | 'kS' | 'MS' | 'GS'; + +const METRIC: TbMeasureUnits = { + units: { + 'S': { + name: 'unit.siemens', + tags: ['electrical conductance', 'conductance', 'siemens', 'S'], + to_anchor: 1, + }, + 'mS': { + name: 'unit.millisiemens', + tags: ['electrical conductance', 'conductance', 'millisiemens', 'mS'], + to_anchor: 1e-3, + }, + 'μS': { + name: 'unit.microsiemens', + tags: ['electrical conductance', 'conductance', 'microsiemens', 'μS'], + to_anchor: 1e-6, + }, + 'kS': { + name: 'unit.kilosiemens', + tags: ['electrical conductance', 'conductance', 'kilosiemens', 'kS'], + to_anchor: 1e3, + }, + 'MS': { + name: 'unit.megasiemens', + tags: ['electrical conductance', 'conductance', 'megasiemens', 'MS'], + to_anchor: 1e6, + }, + 'GS': { + name: 'unit.gigasiemens', + tags: ['electrical conductance', 'conductance', 'gigasiemens', 'GS'], + to_anchor: 1e9, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/electrical-conductivity.ts b/ui-ngx/src/app/shared/models/units/electrical-conductivity.ts new file mode 100644 index 0000000000..9bf7245ff1 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/electrical-conductivity.ts @@ -0,0 +1,30 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ElectricalConductivityMetricUnits = 'µS/cm' | 'mS/m' | 'S/m'; +export type ElectricalConductivityUnits = ElectricalConductivityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'S/m': { + name: 'unit.siemens-per-meter', + tags: ['Electrical conductivity', 'water quality', 'soil quality', 'siemens per meter', 'S/m'], + to_anchor: 1, + }, + 'µS/cm': { + name: 'unit.microsiemens-per-centimeter', + tags: ['Electrical conductivity', 'water quality', 'soil quality', 'microsiemens per centimeter', 'µS/cm'], + to_anchor: 0.0001, + }, + 'mS/m': { + name: 'unit.millisiemens-per-meter', + tags: ['Electrical conductivity', 'water quality', 'soil quality', 'millisiemens per meter', 'mS/m'], + to_anchor: 0.001, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/frequency.ts b/ui-ngx/src/app/shared/models/units/frequency.ts index ecff651b78..f677803fe8 100644 --- a/ui-ngx/src/app/shared/models/units/frequency.ts +++ b/ui-ngx/src/app/shared/models/units/frequency.ts @@ -17,7 +17,7 @@ import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; export type FrequencyUnits = FrequencyMetricUnits; -export type FrequencyMetricUnits = 'mHz' | 'Hz' | 'kHz' | 'MHz' | 'GHz' | 'THz' | 'rpm' | 'deg/s' | 'rad/s'; +export type FrequencyMetricUnits = 'mHz' | 'Hz' | 'kHz' | 'MHz' | 'GHz' | 'THz' | 'rpm' | 'deg/s' | 'rad/s' | 'RPM' | 'λ' | 'bpm'; const METRIC: TbMeasureUnits = { units: { @@ -56,6 +56,21 @@ const METRIC: TbMeasureUnits = { tags: ['frequency', 'rotation per minute', 'rotations per minute', 'rpm', 'angular velocity'], to_anchor: 1 / 60, }, + RPM: { + name: 'unit.rpm', + tags: ['rotational speed', 'angular velocity', 'revolutions per minute', 'RPM'], + to_anchor: 1 / 60, + }, + 'λ': { + name: 'unit.lambda', + tags: ['wavelength', 'lambda', 'λ'], + to_anchor: 299792458, + }, + bpm: { + name: 'unit.beats-per-minute', + tags: ['heart rate', 'pulse', 'bpm'], + to_anchor: 0.0167 + }, 'deg/s': { name: 'unit.deg-per-second', tags: ['angular velocity', 'degrees per second', 'deg/s'], diff --git a/ui-ngx/src/app/shared/models/units/fuel-efficiency.ts b/ui-ngx/src/app/shared/models/units/fuel-efficiency.ts new file mode 100644 index 0000000000..f097382089 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/fuel-efficiency.ts @@ -0,0 +1,46 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type FuelEfficiencyMetricUnits = 'km/L' | 'L/100km'; +export type FuelEfficiencyImperialUnits = 'mpg' | 'gal/mi'; + +export type FuelEfficiencyUnits = FuelEfficiencyMetricUnits | FuelEfficiencyImperialUnits; + +const METRIC: TbMeasureUnits = { + ratio: 2.35214583, + units: { + 'km/L': { + name: 'unit.kilometers-per-liter', + tags: ['fuel efficiency', 'km/L'], + to_anchor: 1, + }, + 'L/100km': { + name: 'unit.liters-per-100-km', + tags: ['fuel efficiency', 'L/100km'], + to_anchor: 1, + transform: (value) => 100 / value, + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + ratio: 0.425144, + units: { + 'mpg': { + name: 'unit.miles-per-gallon', + tags: ['fuel efficiency', 'mpg'], + to_anchor: 0.425144, + }, + 'gal/mi': { + name: 'unit.gallons-per-mile', + tags: ['fuel efficiency', 'gal/mi'], + to_anchor: 2.35214583, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/heat-capacity.ts b/ui-ngx/src/app/shared/models/units/heat-capacity.ts new file mode 100644 index 0000000000..05b56cd0a7 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/heat-capacity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type HeatCapacityMetricUnits = 'J/K'; + +export type HeatCapacityUnits = HeatCapacityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'J/K': { + name: 'unit.joule-per-kelvin', + tags: ['specific heat capacity', 'heat capacity per unit temperature', 'joule per kelvin', 'J/K'], + to_anchor: 1, // Base unit: J/K + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/humidity.ts b/ui-ngx/src/app/shared/models/units/humidity.ts new file mode 100644 index 0000000000..22bf1d6902 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/humidity.ts @@ -0,0 +1,20 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type HumidityUnits = HumidityMetricUnits; +export type HumidityMetricUnits = 'g/kg'; + +const METRIC: TbMeasureUnits = { + units: { + 'g/kg': { + name: 'unit.gram-per-kilogram', + tags: ['humidity', 'moisture', 'specific humidity', 'g/kg'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/inductance.ts b/ui-ngx/src/app/shared/models/units/inductance.ts new file mode 100644 index 0000000000..9f0d0bb3eb --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/inductance.ts @@ -0,0 +1,40 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type InductanceMetricUnits = 'H' | 'mH' | 'µH' | 'nH' | 'T·m/A'; +export type InductanceUnits = InductanceMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + H: { + name: 'unit.henry', + tags: ['inductance', 'magnetic induction', 'H'], + to_anchor: 1, + }, + mH: { + name: 'unit.millihenry', + tags: ['inductance', 'millihenry', 'mH'], + to_anchor: 0.001, + }, + µH: { + name: 'unit.microhenry', + tags: ['inductance', 'microhenry', 'µH'], + to_anchor: 1e-6, + }, + nH: { + name: 'unit.nanohenry', + tags: ['inductance', 'nanohenry', 'nH'], + to_anchor: 1e-9, + }, + 'T·m/A': { + name: 'unit.tesla-meter-per-ampere', + tags: ['magnetic field', 'Tesla Meter per Ampere', 'T·m/A', 'magnetic flux'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/kinematic-viscosity.ts b/ui-ngx/src/app/shared/models/units/kinematic-viscosity.ts new file mode 100644 index 0000000000..6a9104ff9f --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/kinematic-viscosity.ts @@ -0,0 +1,55 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type KinematicViscosityMetricUnits = 'm²/s' | 'cm²/s' | 'St' | 'cSt'; +export type KinematicViscosityImperialUnits = 'ft²/s' | 'in²/s'; + +export type KinematicViscosityUnits = KinematicViscosityMetricUnits | KinematicViscosityImperialUnits; + +const METRIC: TbMeasureUnits = { + ratio: 10.7639104167097, + units: { + 'm²/s': { + name: 'unit.square-meter-per-second', + tags: ['kinematic viscosity', 'm²/s'], + to_anchor: 1, + }, + 'cm²/s': { + name: 'unit.square-centimeter-per-second', + tags: ['kinematic viscosity', 'cm²/s'], + to_anchor: 1e-4, + }, + 'St': { + name: 'unit.stoke', + tags: ['kinematic viscosity', 'stokes', 'St'], + to_anchor: 1e-4, // St to m²/s + }, + 'cSt': { + name: 'unit.centistokes', + tags: ['kinematic viscosity', 'centistokes', 'cSt'], + to_anchor: 1e-6, // cSt to m²/s + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + ratio: 0.09290304, + units: { + 'ft²/s': { + name: 'unit.square-foot-per-second', + tags: ['kinematic viscosity', 'ft²/s'], + to_anchor: 0.09290304, + }, + 'in²/s': { + name: 'unit.square-inch-per-second', + tags: ['kinematic viscosity', 'in²/s'], + to_anchor: 0.00064516, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/light-exposure.ts b/ui-ngx/src/app/shared/models/units/light-exposure.ts new file mode 100644 index 0000000000..353cf57a37 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/light-exposure.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LightExposureMetricUnits = 'lx·s'; + +export type LightExposureUnits = LightExposureMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'lx·s': { + name: 'unit.lux-second', + tags: ['light exposure', 'illuminance over time', 'lux-second', 'lx·s'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/liner-charge-density.ts b/ui-ngx/src/app/shared/models/units/liner-charge-density.ts new file mode 100644 index 0000000000..4a2239b1d7 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/liner-charge-density.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LinerChargeDensityMetricUnits = 'C/m'; + +export type LinerChargeDensityUnits = LinerChargeDensityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'C/m': { + name: 'unit.coulomb-per-meter', + tags: ['electric displacement field per length', 'coulomb per meter', 'C/m'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/logarithmic-units.ts b/ui-ngx/src/app/shared/models/units/logarithmic-units.ts new file mode 100644 index 0000000000..ccbfd9af8e --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/logarithmic-units.ts @@ -0,0 +1,29 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LogarithmicUnits = 'dB' | 'B' | 'Np'; + +const METRIC: TbMeasureUnits = { + units: { + 'dB': { + name: 'unit.decibel', + tags: ['noise level', 'sound level', 'volume', 'acoustics', 'decibel', 'dB'], + to_anchor: 1, + }, + 'B': { + name: 'unit.bel', + tags: ['logarithmic unit', 'power ratio', 'intensity ratio', 'bel', 'B'], + to_anchor: 10, + }, + 'Np': { + name: 'unit.neper', + tags: ['logarithmic unit', 'ratio', 'gain', 'loss', 'attenuation', 'neper', 'Np'], + to_anchor: 8.685889638, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/luminous-efficacy.ts b/ui-ngx/src/app/shared/models/units/luminous-efficacy.ts new file mode 100644 index 0000000000..1aa5c496fb --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/luminous-efficacy.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LuminousEfficacyMetricUnits = 'lm/W'; + +export type LuminousEfficacyUnits = LuminousEfficacyMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'lm/W': { + name: 'unit.lumens-per-watt', + tags: ['luminous efficacy', 'lighting efficiency', 'lumens per watt', 'lm/W'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/luminous-flux.ts b/ui-ngx/src/app/shared/models/units/luminous-flux.ts new file mode 100644 index 0000000000..ff1b052919 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/luminous-flux.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LuminousFluxMetricUnits = 'lm'; + +export type LuminousFluxUnits = LuminousFluxMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'lm': { + name: 'unit.lumen', + tags: ['luminous flux', 'total light output', 'lumen', 'lm'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/luminous-intensity.ts b/ui-ngx/src/app/shared/models/units/luminous-intensity.ts new file mode 100644 index 0000000000..7168aab088 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/luminous-intensity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type LuminousIntensityMetricUnits = 'cd'; + +export type LuminousIntensityUnits = LuminousIntensityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'cd': { + name: 'unit.candela', + tags: ['luminous intensity', 'light intensity', 'candela', 'cd'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/magnetic-field-gradient.ts b/ui-ngx/src/app/shared/models/units/magnetic-field-gradient.ts new file mode 100644 index 0000000000..41e8fade91 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/magnetic-field-gradient.ts @@ -0,0 +1,25 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MagneticFieldGradientUnits = MagneticFieldGradientMetricUnits; +export type MagneticFieldGradientMetricUnits = 'T/m' | 'G/cm'; + +const METRIC: TbMeasureUnits = { + units: { + 'T/m': { + name: 'unit.tesla-per-meter', + tags: ['magnetic field', 'tesla per meter', 'T/m'], + to_anchor: 1, + }, + 'G/cm': { + name: 'unit.gauss-per-centimeter', + tags: ['magnetic field', 'gauss per centimeter', 'G/cm'], + to_anchor: 0.01, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/magnetic-field.ts b/ui-ngx/src/app/shared/models/units/magnetic-field.ts new file mode 100644 index 0000000000..8996c7911b --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/magnetic-field.ts @@ -0,0 +1,71 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MagneticFieldMetricUnits = 'T' | 'mT' | 'μT' | 'nT' | 'kT' | 'MT' | 'G' | 'kG' | 'γ' | 'A/m' | 'Oe'; + +export type MagneticFieldUnits = MagneticFieldMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'T': { + name: 'unit.tesla', + tags: ['magnetic field', 'magnetic field strength', 'tesla', 'T', 'magnetic flux density'], + to_anchor: 1, + }, + 'mT': { + name: 'unit.millitesla', + tags: ['magnetic field', 'magnetic field strength', 'millitesla', 'mT'], + to_anchor: 0.001, + }, + 'μT': { + name: 'unit.microtesla', + tags: ['magnetic field', 'magnetic field strength', 'microtesla', 'μT'], + to_anchor: 0.000001, + }, + 'nT': { + name: 'unit.nanotesla', + tags: ['magnetic field', 'magnetic field strength', 'nanotesla', 'nT'], + to_anchor: 0.000000001, + }, + 'kT': { + name: 'unit.kilotesla', + tags: ['magnetic field', 'magnetic field strength', 'kilotesla', 'kT'], + to_anchor: 1000, + }, + 'MT': { + name: 'unit.megatesla', + tags: ['magnetic field', 'magnetic field strength', 'megatesla', 'MT'], + to_anchor: 1000000, + }, + 'G': { + name: 'unit.gauss', + tags: ['magnetic field', 'magnetic field strength', 'gauss', 'G', 'magnetic flux density'], + to_anchor: 0.0001, + }, + 'kG': { + name: 'unit.kilogauss', + tags: ['magnetic field', 'magnetic field strength', 'kilogauss', 'kG', 'magnetic flux density'], + to_anchor: 0.1, + }, + 'γ': { + name: 'unit.gamma', + tags: ['magnetic flux density', 'gamma', 'γ'], + to_anchor: 0.000000001, + }, + 'A/m': { + name: 'unit.ampere-per-meter', + tags: ['magnetic field strength', 'magnetic field intensity', 'ampere per meter', 'A/m'], + to_anchor: 0.00000125663706143591, + }, + 'Oe': { + name: 'unit.oersted', + tags: ['magnetic field', 'oersted', 'Oe'], + to_anchor: 0.0001, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/magnetic-flux.ts b/ui-ngx/src/app/shared/models/units/magnetic-flux.ts new file mode 100644 index 0000000000..467d317d7a --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/magnetic-flux.ts @@ -0,0 +1,44 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MagneticFluxUnits = 'Wb' | 'µWb' | 'mWb' | 'Mx' | 'G·cm²' | 'kG·cm²'; + +const METRIC: TbMeasureUnits = { + units: { + 'Wb': { + name: 'unit.weber', + tags: ['magnetic flux', 'weber', 'Wb'], + to_anchor: 1, + }, + 'µWb': { + name: 'unit.microweber', + tags: ['magnetic flux', 'microweber', 'µWb'], + to_anchor: 1e-6, + }, + 'mWb': { + name: 'unit.milliweber', + tags: ['magnetic flux', 'milliweber', 'mWb'], + to_anchor: 1e-3, + }, + 'Mx': { + name: 'unit.maxwell', + tags: ['magnetic flux', 'magnetic field', 'maxwell', 'Mx'], + to_anchor: 1e-8, + }, + 'G·cm²': { + name: 'unit.gauss-square-centimeter', + tags: ['magnetic flux', 'gauss-square centimeter', 'G·cm²'], + to_anchor: 1e-8, + }, + 'kG·cm²': { + name: 'unit.kilogauss-square-centimeter', + tags: ['magnetic flux', 'kilogauss-square centimeter', 'kG·cm²'], + to_anchor: 1e-5, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/magnetic-moment.ts b/ui-ngx/src/app/shared/models/units/magnetic-moment.ts new file mode 100644 index 0000000000..d7771bdf33 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/magnetic-moment.ts @@ -0,0 +1,26 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MagneticMomentMetricUnits = 'A·m²' | 'μB'; + +export type MagneticMomentUnits = MagneticMomentMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'A·m²': { + name: 'unit.magnetic-dipole-moment', + tags: ['magnetic dipole', 'dipole moment', 'ampere square meter', 'A·m²'], + to_anchor: 1, + }, + 'μB': { + name: 'unit.bohr-magneton', + tags: ['atomic physics', 'magnetic moment', 'bohr magneton', 'μB'], + to_anchor: 9.274e-24, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/molar-energy.ts b/ui-ngx/src/app/shared/models/units/molar-energy.ts new file mode 100644 index 0000000000..41e7b5a75e --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/molar-energy.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MolarEnergyMetricUnits = 'J/mol'; + +export type MolarEnergyUnits = MolarEnergyMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'J/mol': { + name: 'unit.joule-per-mole', + tags: ['molar energy', 'joule per mole', 'J/mol'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/molar-heat-capacity.ts b/ui-ngx/src/app/shared/models/units/molar-heat-capacity.ts new file mode 100644 index 0000000000..104a44b3de --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/molar-heat-capacity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MolarHeatCapacityMetricUnits = 'J/(mol·K)'; + +export type MolarHeatCapacityUnits = MolarHeatCapacityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'J/(mol·K)': { + name: 'unit.joule-per-mole-kelvin', + tags: ['molar heat capacity', 'joule per mole-kelvin', 'J/(mol·K)'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/molar-mass.ts b/ui-ngx/src/app/shared/models/units/molar-mass.ts new file mode 100644 index 0000000000..c9a6b89639 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/molar-mass.ts @@ -0,0 +1,29 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type MolarMassUnits = 'kg/mol' | 'g/mol' | 'mg/mol'; + +const METRIC: TbMeasureUnits = { + units: { + 'g/mol': { + name: 'unit.gram-per-mole', + tags: ['molar mass', 'gram per mole', 'g/mol'], + to_anchor: 1, + }, + 'kg/mol': { + name: 'unit.kilogram-per-mole', + tags: ['molar mass', 'kilogram per mole', 'kg/mol'], + to_anchor: 1e3, + }, + 'mg/mol': { + name: 'unit.milligram-per-mole', + tags: ['molar mass', 'milligram per mole', 'mg/mol'], + to_anchor: 1e-3, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/particle-concentration.ts b/ui-ngx/src/app/shared/models/units/particle-concentration.ts new file mode 100644 index 0000000000..991d5a9f78 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/particle-concentration.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ParticleConcentrationUnits = 'particles/mL'; + +const METRIC: TbMeasureUnits = { + units: { + 'particles/mL': { + name: 'unit.particle-density', + tags: ['particle concentration', 'count', 'particles/mL'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/percentage.ts b/ui-ngx/src/app/shared/models/units/percentage.ts new file mode 100644 index 0000000000..1bd796b0f5 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/percentage.ts @@ -0,0 +1,20 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type PercentageMetricUnits = '%'; +export type PercentageUnits = PercentageMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + '%': { + name: 'unit.percent', + tags: ['power source', 'state of charge (SoC)', 'battery', 'battery level', 'level', 'humidity', 'moisture', 'percentage', 'relative humidity', 'water content', 'soil moisture', 'irrigation', 'water in soil', 'soil water content', 'VWC', 'Volumetric Water Content', 'Total Harmonic Distortion', 'THD', 'power quality', 'UV Transmittance', '%', 'capacity'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/ph.ts b/ui-ngx/src/app/shared/models/units/ph.ts new file mode 100644 index 0000000000..d394d0f8ec --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/ph.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type PHUnits = 'pH'; + +const METRIC: TbMeasureUnits = { + units: { + pH: { + name: 'unit.ph-level', + tags: ['acidity', 'alkalinity', 'neutral', 'acid', 'base', 'pH', 'soil pH', 'water quality', 'water pH'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/polarization.ts b/ui-ngx/src/app/shared/models/units/polarization.ts new file mode 100644 index 0000000000..09528228a0 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/polarization.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type PolarizationMetricUnits = 'C·m²/V'; + +export type PolarizationUnits = PolarizationMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'C·m²/V': { + name: 'unit.coulomb-per-square-meter-per-volt', + tags: ['polarization', 'electric field', 'coulomb per square meter per volt', 'C·m²/V'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/power-density.ts b/ui-ngx/src/app/shared/models/units/power-density.ts new file mode 100644 index 0000000000..38ec33fd6e --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/power-density.ts @@ -0,0 +1,65 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type PowerDensityMetricUnits = 'mW/cm²' | 'W/cm²' | 'kW/cm²' | 'mW/m²' | 'W/m²' | 'kW/m²'; +export type PowerDensityImperialUnits = 'W/in²' | 'kW/in²'; + +export type PowerDensityUnits = PowerDensityMetricUnits | PowerDensityImperialUnits; + +const METRIC: TbMeasureUnits = { + ratio: 0.00064516, + units: { + 'mW/cm²': { + name: 'unit.milliwatt-per-square-centimeter', + tags: ['power density', 'radiation intensity', 'sunlight intensity', 'signal power', 'intensity', 'milliwatts per square centimeter', 'UV Intensity', 'mW/cm²'], + to_anchor: 10000, + }, + 'W/cm²': { + name: 'unit.watt-per-square-centimeter', + tags: ['power density', 'intensity of power', 'watts per square centimeter', 'W/cm²'], + to_anchor: 10000, + }, + 'kW/cm²': { + name: 'unit.kilowatt-per-square-centimeter', + tags: ['power density', 'intensity of power', 'kilowatts per square centimeter', 'kW/cm²'], + to_anchor: 10000000, + }, + 'mW/m²': { + name: 'unit.milliwatt-per-square-meter', + tags: ['power density', 'intensity of power', 'milliwatts per square meter', 'mW/m²'], + to_anchor: 0.001, + }, + 'W/m²': { + name: 'unit.watt-per-square-meter', + tags: ['power density', 'intensity of power', 'watts per square meter', 'W/m²'], + to_anchor: 1, + }, + 'kW/m²': { + name: 'unit.kilowatt-per-square-meter', + tags: ['power density', 'intensity of power', 'kilowatts per square meter', 'kW/m²'], + to_anchor: 1000, + }, + }, +}; + +const IMPERIAL: TbMeasureUnits = { + ratio: 1 / 0.00064516, + units: { + 'W/in²': { + name: 'unit.watt-per-square-inch', + tags: ['power density', 'intensity of power', 'watts per square inch', 'W/in²'], + to_anchor: 1, + }, + 'kW/in²': { + name: 'unit.kilowatt-per-square-inch', + tags: ['power density', 'intensity of power', 'kilowatts per square inch', 'kW/in²'], + to_anchor: 1000, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, + IMPERIAL, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/pressure.ts b/ui-ngx/src/app/shared/models/units/pressure.ts index ad5c9b0dbb..7443763754 100644 --- a/ui-ngx/src/app/shared/models/units/pressure.ts +++ b/ui-ngx/src/app/shared/models/units/pressure.ts @@ -36,7 +36,9 @@ export type PressureMetricUnits = | 'N/m²' | 'kN/m²' | 'kgf/m²' - | 'Pa/cm²'; + | 'Pa/cm²' + | 'J/m³' + | 'kg/m²'; export type PressureImperialUnits = 'psi' | 'ksi' | 'inHg' | 'psi/in²' | 'tonf/in²'; @@ -46,7 +48,7 @@ const METRIC: TbMeasureUnits = { Pa: { name: 'unit.pascal', tags: ['pressure', 'force', 'compression', 'tension', 'pascal', 'pascals', 'Pa', 'atmospheric pressure', 'air pressure', 'weather', 'altitude', 'flight'], - to_anchor: 0.001, // 1 Pa = 0.001 kPa + to_anchor: 0.001, }, kPa: { name: 'unit.kilopascal', @@ -133,6 +135,16 @@ const METRIC: TbMeasureUnits = { tags: ['pressure', 'stress', 'mechanical strength', 'pascal per square centimeter', 'Pa/cm²'], to_anchor: 0.1, }, + 'J/m³': { + name: 'unit.joule-per-cubic-meter', + tags: ['energy density', 'joule per cubic meter', 'J/m³'], + to_anchor: 0.001, + }, + 'kg/m²': { + name: 'unit.kilogram-per-square-meter', + tags: ['density','surface density','areal density','mass per unit area','kg/m²'], + to_anchor: 0.00980665 + } }, }; diff --git a/ui-ngx/src/app/shared/models/units/radiance.ts b/ui-ngx/src/app/shared/models/units/radiance.ts new file mode 100644 index 0000000000..38fb646fab --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radiance.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadianceUnits = 'W/(m²·sr)'; + +const METRIC: TbMeasureUnits = { + units: { + 'W/(m²·sr)': { + name: 'unit.watt-per-square-metre-steradian', + tags: ['radiance', 'radiant flux density', 'wTape per square metre-steradian', 'W/(m²·sr)'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/radiant-intensity.ts b/ui-ngx/src/app/shared/models/units/radiant-intensity.ts new file mode 100644 index 0000000000..78ee45ee5d --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radiant-intensity.ts @@ -0,0 +1,20 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadiantIntensityUnits = RadiantIntensityMetricUnits; +export type RadiantIntensityMetricUnits = 'W/sr'; + +const METRIC: TbMeasureUnits = { + units: { + 'W/sr': { + name: 'unit.watt-per-steradian', + tags: ['radiant intensity', 'power per unit solid angle', 'watt per steradian', 'W/sr'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/radiation-dose.ts b/ui-ngx/src/app/shared/models/units/radiation-dose.ts new file mode 100644 index 0000000000..1619a48780 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radiation-dose.ts @@ -0,0 +1,50 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadiationDoseMetricUnits = 'Gy' | 'Sv' | 'Rad' | 'Rem' | 'R' | 'C/kg' | 'Gy/s'; +export type RadiationDoseUnits = RadiationDoseMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'Sv': { + name: 'unit.sievert', + tags: ['radiation dose', 'sievert', 'radiation dose equivalent', 'Sv'], + to_anchor: 1, + }, + 'Gy': { + name: 'unit.gray', + tags: ['radiation dose', 'absorbed dose', 'gray', 'Gy'], + to_anchor: 1, + }, + 'Rad': { + name: 'unit.rad', + tags: ['radiation dose', 'rad'], + to_anchor: 0.01, + }, + 'Rem': { + name: 'unit.rem', + tags: ['radiation dose equivalent', 'rem'], + to_anchor: 0.01, + }, + 'R': { + name: 'unit.roentgen', + tags: ['radiation exposure', 'roentgen', 'R'], + to_anchor: 0.0093, + }, + 'C/kg': { + name: 'unit.coulombs-per-kilogram', + tags: ['radiation exposure', 'dose', 'coulombs per kilogram', 'electric charge-to-mass ratio', 'C/kg'], + to_anchor: 34, + }, + 'Gy/s': { + name: 'unit.gy-per-second', + tags: ['absorbed dose rate', 'radiation dose rate', 'gray per second', 'Gy/s'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/radioactive-decay-rate.ts b/ui-ngx/src/app/shared/models/units/radioactive-decay-rate.ts new file mode 100644 index 0000000000..d357c11b72 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radioactive-decay-rate.ts @@ -0,0 +1,25 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadioactiveDecayRateUnits = 'Bq/s' | 'Ci/s'; + +const METRIC: TbMeasureUnits = { + transform: (Bq_s) => Bq_s / 3.7e10, // Convert Bq/s to Ci/s + units: { + 'Bq/s': { + name: 'unit.becquerels-per-second', + tags: ['radioactive decay rate', 'becquerels per second', 'Bq/s'], + to_anchor: 1, + }, + 'Ci/s': { + name: 'unit.curies-per-second', + tags: ['radioactive decay rate', 'curies per second', 'Ci/s'], + to_anchor: 3.7e10, + }, + } +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/radioactivity-concentration.ts b/ui-ngx/src/app/shared/models/units/radioactivity-concentration.ts new file mode 100644 index 0000000000..8036332f13 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radioactivity-concentration.ts @@ -0,0 +1,25 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadioactivityConcentrationMetricUnits = 'Bq/m³' | 'Ci/L'; +export type RadioactivityConcentrationUnits = RadioactivityConcentrationMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'Bq/m³': { + name: 'unit.becquerels-per-cubic-meter', + tags: ['radioactivity', 'radiation', 'becquerels per cubic meter', 'Bq/m³'], + to_anchor: 1, + }, + 'Ci/L': { + name: 'unit.curies-per-liter', + tags: ['radioactivity', 'radiation', 'curies per liter', 'Ci/L'], + to_anchor: 3.7e10 * 1000, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/radioactivity.ts b/ui-ngx/src/app/shared/models/units/radioactivity.ts new file mode 100644 index 0000000000..8db76da7af --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/radioactivity.ts @@ -0,0 +1,40 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type RadioactivityMetricUnits = 'Bq' | 'Ci' | 'Rd' | 'dps' | 'cps'; +export type RadioactivityUnits = RadioactivityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'Bq': { + name: 'unit.becquerel', + tags: ['radioactivity', 'decay rate', 'becquerel', 'Bq'], + to_anchor: 1, + }, + 'Ci': { + name: 'unit.curie', + tags: ['radioactivity', 'radiation', 'curie', 'Ci'], + to_anchor: 3.7e10, + }, + 'Rd': { + name: 'unit.rutherford', + tags: ['radioactive decay', 'radioactivity', 'rutherford', 'Rd'], + to_anchor: 1e6, + }, + 'dps': { + name: 'unit.dps', + tags: ['radioactive decay', 'radioactivity', 'disintegrations per second', 'dps'], + to_anchor: 1, + }, + cps: { + name: 'unit.cps', + tags: ['radiation detection', 'counts per second', 'cps'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/resistance.ts b/ui-ngx/src/app/shared/models/units/resistance.ts new file mode 100644 index 0000000000..6f14faf4c4 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/resistance.ts @@ -0,0 +1,46 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ResistanceMetricUnits = 'Ω' | 'μΩ' | 'mΩ' | 'kΩ' | 'MΩ' | 'GΩ'; + +export type ResistanceUnits = ResistanceMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'Ω': { + name: 'unit.ohm', + tags: ['electrical resistance', 'resistance', 'impedance', 'ohm'], + to_anchor: 1, + }, + 'μΩ': { + name: 'unit.microohm', + tags: ['electrical resistance', 'resistance', 'microohm', 'μΩ'], + to_anchor: 0.000001, + }, + 'mΩ': { + name: 'unit.milliohm', + tags: ['electrical resistance', 'resistance', 'milliohm', 'mΩ'], + to_anchor: 0.001, + }, + 'kΩ': { + name: 'unit.kilohm', + tags: ['electrical resistance', 'resistance', 'kilohm', 'kΩ'], + to_anchor: 1000, + }, + 'MΩ': { + name: 'unit.megohm', + tags: ['electrical resistance', 'resistance', 'megohm', 'MΩ'], + to_anchor: 1000000, + }, + 'GΩ': { + name: 'unit.gigohm', + tags: ['electrical resistance', 'resistance', 'gigohm', 'GΩ'], + to_anchor: 1000000000, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/reynolds-number.ts b/ui-ngx/src/app/shared/models/units/reynolds-number.ts new file mode 100644 index 0000000000..a9e8b8c01e --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/reynolds-number.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ReynoldsNumberMetricUnits = 'Re'; + +export type ReynoldsNumberUnits = ReynoldsNumberMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + Re: { + name: 'unit.reynolds', + tags: ['fluid flow regime', 'fluid mechanics', 'reynolds', 'Re'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/signal-strength.ts b/ui-ngx/src/app/shared/models/units/signal-strength.ts new file mode 100644 index 0000000000..ef6a595ea3 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/signal-strength.ts @@ -0,0 +1,31 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SignalStrengthMetricUnits = 'dBmV' | 'dBm' | 'rssi'; + +export type SignalStrengthUnits = SignalStrengthMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'dBmV': { + name: 'unit.dbmV', + tags: ['decibels millivolt', 'voltage level', 'signal', 'dBmV'], + to_anchor: 1, + }, + 'dBm': { + name: 'unit.dbm', + tags: ['decibel milliwatts', 'output power', 'signal', 'dBm'], + to_anchor: 1, + }, + 'rssi': { + name: 'unit.rssi', + tags: ['signal strength', 'signal level', 'received signal strength indicator', 'rssi', 'dBm'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/solid-angle.ts b/ui-ngx/src/app/shared/models/units/solid-angle.ts new file mode 100644 index 0000000000..c339884b65 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/solid-angle.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SolidAngleMetricUnits = 'sr'; + +export type SolidAngleUnits = SolidAngleMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'sr': { + name: 'unit.steradian', + tags: ['solid angle', 'spatial extent', 'steradian', 'sr'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/specific-energy.ts b/ui-ngx/src/app/shared/models/units/specific-energy.ts new file mode 100644 index 0000000000..3ca9d44221 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/specific-energy.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SpecificEnergyMetricUnits = 'J/kg'; + +export type SpecificEnergyUnits = SpecificEnergyMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'J/kg': { + name: 'unit.joule-per-kilogram', + tags: ['specific energy', 'specific energy capacity', 'joule per kilogram', 'J/kg'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/specific-heat-capacity.ts b/ui-ngx/src/app/shared/models/units/specific-heat-capacity.ts new file mode 100644 index 0000000000..9bdf38e80c --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/specific-heat-capacity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SpecificHeatCapacityMetricUnits = 'J/(kg·K)'; + +export type SpecificHeatCapacityUnits = SpecificHeatCapacityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'J/(kg·K)': { + name: 'unit.joule-per-kilogram-kelvin', + tags: ['specific heat capacity', 'heat capacity per unit mass and temperature', 'joule per kilogram-kelvin', 'J/(kg·K)'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/specific-volume.ts b/ui-ngx/src/app/shared/models/units/specific-volume.ts new file mode 100644 index 0000000000..9968454e41 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/specific-volume.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SpecificVolumeMetricUnits = 'm³/kg'; + +export type SpecificVolumeUnits = SpecificVolumeMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'm³/kg': { + name: 'unit.cubic-meter-per-kilogram', + tags: ['specific volume', 'volume per unit mass', 'cubic meter per kilogram', 'm³/kg'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/speed.ts b/ui-ngx/src/app/shared/models/units/speed.ts index 095bb0c759..f44553a7a7 100644 --- a/ui-ngx/src/app/shared/models/units/speed.ts +++ b/ui-ngx/src/app/shared/models/units/speed.ts @@ -18,7 +18,7 @@ import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; export type SpeedUnits = SpeedMetricUnits | SpeedImperialUnits; -export type SpeedMetricUnits = 'm/s' | 'km/h' | 'mm/min'; +export type SpeedMetricUnits = 'm/s' | 'km/h' | 'mm/min' | 'mm/s'; export type SpeedImperialUnits = 'mph' | 'kt' | 'ft/s' | 'ft/min' | 'in/h'; const METRIC: TbMeasureUnits = { @@ -39,6 +39,11 @@ const METRIC: TbMeasureUnits = { tags: ['feed rate', 'cutting feed rate', 'millimeters per minute', 'mm/min'], to_anchor: 0.06, }, + 'mm/s': { + name: 'unit.millimeters-per-second', + tags: ['velocity', 'speed', 'vibration rate', 'millimeters per second', 'mm/s'], + to_anchor: 0.0036, + }, }, }; diff --git a/ui-ngx/src/app/shared/models/units/sugar-content.ts b/ui-ngx/src/app/shared/models/units/sugar-content.ts new file mode 100644 index 0000000000..1badaf3ce0 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/sugar-content.ts @@ -0,0 +1,19 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SugarContentUnits = '°Bx'; + +const METRIC: TbMeasureUnits = { + units: { + '°Bx': { + name: 'unit.degrees-brix', + tags: ['sugar content', 'fruit ripeness', 'Bx'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/surface-charge-density.ts b/ui-ngx/src/app/shared/models/units/surface-charge-density.ts new file mode 100644 index 0000000000..306649db3c --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/surface-charge-density.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SurfaceChargeDensityMetricUnits = 'C/m²'; + +export type SurfaceChargeDensityUnits = SurfaceChargeDensityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'C/m²': { + name: 'unit.coulomb-per-square-meter', + tags: ['electric surface charge density', 'coulomb per square meter', 'C/m²'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/surface-tension.ts b/ui-ngx/src/app/shared/models/units/surface-tension.ts new file mode 100644 index 0000000000..b1c5593354 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/surface-tension.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type SurfaceTensionMetricUnits = 'N/m'; + +export type SurfaceTensionhUnits = SurfaceTensionMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'N/m': { + name: 'unit.newton-per-meter', + tags: ['linear density', 'force per unit length', 'newton per meter', 'N/m'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/thermal-conductivity.ts b/ui-ngx/src/app/shared/models/units/thermal-conductivity.ts new file mode 100644 index 0000000000..3c27727919 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/thermal-conductivity.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type ThermalConductivityMetricUnits = 'W/(m·K)'; + +export type ThermalConductivityUnits = ThermalConductivityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'W/(m·K)': { + name: 'unit.watt-per-meter-kelvin', + tags: ['thermal conductivity', 'watt per meter-kelvin', 'W/(m·K)'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/turbidity.ts b/ui-ngx/src/app/shared/models/units/turbidity.ts new file mode 100644 index 0000000000..92b1122437 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/turbidity.ts @@ -0,0 +1,20 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type TurbidityUnits = TurbidityMetricUnits; +export type TurbidityMetricUnits = 'NTU'; + +const METRIC: TbMeasureUnits = { + units: { + NTU: { + name: 'unit.turbidity', + tags: ['water turbidity', 'water clarity', 'Nephelometric Turbidity Units', 'NTU'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/volume-charge-density.ts b/ui-ngx/src/app/shared/models/units/volume-charge-density.ts new file mode 100644 index 0000000000..0b172962fd --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/volume-charge-density.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type VolumeChargeDensityMetricUnits = 'C/m³'; + +export type VolumeChargeDensityUnits = VolumeChargeDensityMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'C/m³': { + name: 'unit.coulomb-per-cubic-meter', + tags: ['electric charge density', 'coulomb per cubic meter', 'C/m³'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/app/shared/models/units/wavenumber.ts b/ui-ngx/src/app/shared/models/units/wavenumber.ts new file mode 100644 index 0000000000..6745601328 --- /dev/null +++ b/ui-ngx/src/app/shared/models/units/wavenumber.ts @@ -0,0 +1,21 @@ +import { TbMeasure, TbMeasureUnits } from '@shared/models/unit.models'; + +export type WavenumberMetricUnits = 'm⁻¹'; + +export type WavenumberUnits = WavenumberMetricUnits; + +const METRIC: TbMeasureUnits = { + units: { + 'm⁻¹': { + name: 'unit.reciprocal-metre', + tags: ['wavenumber', 'wave density', 'wave frequency', 'm⁻¹'], + to_anchor: 1, + }, + }, +}; + +const measure: TbMeasure = { + METRIC, +}; + +export default measure; diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 3001671891..c685b6171e 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -6074,7 +6074,6 @@ "oersted": "Oersted", "bohr-magneton": "Bohr Magneton", "ampere-meter-squared": "Ampere-Meter Squared", - "ampere-meter": "Ampere-Meter", "nanovolt": "Nanovolt", "picovolt": "Picovolt", "millivolt": "Millivolts", @@ -6112,7 +6111,6 @@ "lux-second": "Lux second", "lumen-second": "Lumen second", "lumens-per-watt": "Lumens per watt", - "absorbance": "Absorbance", "mole": "Mole", "nanomole": "Nanomole", "micromole": "MicroMole",