// @flow /** * Describes spaces between different classes of atoms. */ import type {Measurement} from "./units"; const thinspace: Measurement = { number: 3, unit: "mu", }; const mediumspace: Measurement = { number: 4, unit: "mu", }; const thickspace: Measurement = { number: 5, unit: "mu", }; // Making the type below exact with all optional fields doesn't work due to // - https://github.com/facebook/flow/issues/4582 // - https://github.com/facebook/flow/issues/5688 // However, since *all* fields are optional, $Shape<> works as suggested in 5688 // above. export type Spacings = $Shape<{ mord: Measurement, mop: Measurement, mbin: Measurement, mrel: Measurement, mopen: Measurement, mclose: Measurement, mpunct: Measurement, minner: Measurement, }> & {}; // Spacing relationships for display and text styles export const spacings: {[$Keys]: Spacings} = { mord: { mop: thinspace, mbin: mediumspace, mrel: thickspace, minner: thinspace, }, mop: { mord: thinspace, mop: thinspace, mrel: thickspace, minner: thinspace, }, mbin: { mord: mediumspace, mop: mediumspace, mopen: mediumspace, minner: mediumspace, }, mrel: { mord: thickspace, mop: thickspace, mopen: thickspace, minner: thickspace, }, mopen: {}, mclose: { mop: thinspace, mbin: mediumspace, mrel: thickspace, minner: thinspace, }, mpunct: { mord: thinspace, mop: thinspace, mrel: thickspace, mopen: thinspace, mclose: thinspace, mpunct: thinspace, minner: thinspace, }, minner: { mord: thinspace, mop: thinspace, mbin: mediumspace, mrel: thickspace, mopen: thinspace, mpunct: thinspace, minner: thinspace, }, }; // Spacing relationships for script and scriptscript styles export const tightSpacings: {[$Keys]: Spacings} = { mord: { mop: thinspace, }, mop: { mord: thinspace, mop: thinspace, }, mbin: {}, mrel: {}, mopen: {}, mclose: { mop: thinspace, }, mpunct: {}, minner: { mop: thinspace, }, };