UNPKG

@daybrush/utils

Version:
239 lines (206 loc) 5.81 kB
/** * @namespace * @name Consts */ import { IObject, OpenCloseCharacter } from "./types"; /** * get string "rgb" * @memberof Color * @example import {RGB} from "@daybrush/utils"; console.log(RGB); // "rgb" */ export const RGB = "rgb"; /** * get string "rgba" * @memberof Color * @example import {RGBA} from "@daybrush/utils"; console.log(RGBA); // "rgba" */ export const RGBA = "rgba"; /** * get string "hsl" * @memberof Color * @example import {HSL} from "@daybrush/utils"; console.log(HSL); // "hsl" */ export const HSL = "hsl"; /** * get string "hsla" * @memberof Color * @example import {HSLA} from "@daybrush/utils"; console.log(HSLA); // "hsla" */ export const HSLA = "hsla"; /** * gets an array of color models. * @memberof Color * @example import {COLOR_MODELS} from "@daybrush/utils"; console.log(COLOR_MODELS); // ["rgb", "rgba", "hsl", "hsla"]; */ export const COLOR_MODELS = [RGB, RGBA, HSL, HSLA]; /** * get string "function" * @memberof Consts * @example import {FUNCTION} from "@daybrush/utils"; console.log(FUNCTION); // "function" */ export const FUNCTION = "function"; /** * get string "property" * @memberof Consts * @example import {PROPERTY} from "@daybrush/utils"; console.log(PROPERTY); // "property" */ export const PROPERTY = "property"; /** * get string "array" * @memberof Consts * @example import {ARRAY} from "@daybrush/utils"; console.log(ARRAY); // "array" */ export const ARRAY = "array"; /** * get string "object" * @memberof Consts * @example import {OBJECT} from "@daybrush/utils"; console.log(OBJECT); // "object" */ export const OBJECT = "object"; /** * get string "string" * @memberof Consts * @example import {STRING} from "@daybrush/utils"; console.log(STRING); // "string" */ export const STRING = "string"; /** * get string "number" * @memberof Consts * @example import {NUMBER} from "@daybrush/utils"; console.log(NUMBER); // "number" */ export const NUMBER = "number"; /** * get string "undefined" * @memberof Consts * @example import {UNDEFINED} from "@daybrush/utils"; console.log(UNDEFINED); // "undefined" */ export const UNDEFINED = "undefined"; /** * Check whether the environment is window or node.js. * @memberof Consts * @example import {IS_WINDOW} from "@daybrush/utils"; console.log(IS_WINDOW); // false in node.js console.log(IS_WINDOW); // true in browser */ export const IS_WINDOW = typeof window !== UNDEFINED; /** * Check whether the environment is window or node.js. * @memberof Consts * @name document * @example import {IS_WINDOW} from "@daybrush/utils"; console.log(IS_WINDOW); // false in node.js console.log(IS_WINDOW); // true in browser */ const doc = (typeof document !== UNDEFINED && document) as Document; // FIXME: this type maybe false export {doc as document}; const prefixes: string[] = ["webkit", "ms", "moz", "o"]; /** * @namespace CrossBrowser */ /** * Get a CSS property with a vendor prefix that supports cross browser. * @function * @param {string} property - A CSS property * @return {string} CSS property with cross-browser vendor prefix * @memberof CrossBrowser * @example import {getCrossBrowserProperty} from "@daybrush/utils"; console.log(getCrossBrowserProperty("transform")); // "transform", "-ms-transform", "-webkit-transform" console.log(getCrossBrowserProperty("filter")); // "filter", "-webkit-filter" */ export const getCrossBrowserProperty = /*#__PURE__*/(property: string) => { if (!doc) { return ""; } const styles = (doc.body || doc.documentElement).style as any; const length = prefixes.length; if (typeof styles[property] !== UNDEFINED) { return property; } for (let i = 0; i < length; ++i) { const name = `-${prefixes[i]}-${property}`; if (typeof styles[name] !== UNDEFINED) { return name; } } return ""; }; /** * get string "transfrom" with the vendor prefix. * @memberof CrossBrowser * @example import {TRANSFORM} from "@daybrush/utils"; console.log(TRANSFORM); // "transform", "-ms-transform", "-webkit-transform" */ export const TRANSFORM = /*#__PURE__*/getCrossBrowserProperty("transform"); /** * get string "filter" with the vendor prefix. * @memberof CrossBrowser * @example import {FILTER} from "@daybrush/utils"; console.log(FILTER); // "filter", "-ms-filter", "-webkit-filter" */ export const FILTER = /*#__PURE__*/getCrossBrowserProperty("filter"); /** * get string "animation" with the vendor prefix. * @memberof CrossBrowser * @example import {ANIMATION} from "@daybrush/utils"; console.log(ANIMATION); // "animation", "-ms-animation", "-webkit-animation" */ export const ANIMATION = /*#__PURE__*/getCrossBrowserProperty("animation"); /** * get string "keyframes" with the vendor prefix. * @memberof CrossBrowser * @example import {KEYFRAMES} from "@daybrush/utils"; console.log(KEYFRAMES); // "keyframes", "-ms-keyframes", "-webkit-keyframes" */ export const KEYFRAMES = /*#__PURE__*/ANIMATION.replace("animation", "keyframes"); export const OPEN_CLOSED_CHARACTERS: OpenCloseCharacter[] = [ { open: "(", close: ")" }, { open: `"`, close: `"`}, { open: `'`, close: `'`}, { open: `\\"`, close: `\\"`}, { open: `\\'`, close: `\\'`}, ]; export const TINY_NUM = 0.0000001; export const REVERSE_TINY_NUM = 1 / TINY_NUM; export const DEFAULT_UNIT_PRESETS: IObject<(pos: number, size?: number) => number> = { "cm": pos => pos * 96 / 2.54, "mm": pos => pos * 96 / 254, "in": pos => pos * 96, "pt": pos => pos * 96 / 72, "pc": pos => pos * 96 / 6, "%": (pos, size) => pos * size! / 100, "vw": (pos, size = window.innerWidth) => pos / 100 * size, "vh": (pos, size = window.innerHeight) => pos / 100 * size, "vmax": (pos, size = Math.max(window.innerWidth, window.innerHeight)) => pos / 100 * size, "vmin": (pos, size = Math.min(window.innerWidth, window.innerHeight)) => pos / 100 * size, };