*.log
*.swp
*.stackdump
+
+# Generated
+/types/tests/autogen*.ts
"eslint-plugin-es": "^4.1.0",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-markdown": "^2.1.0",
+ "esm": "^3.2.25",
"glob": "^7.1.6",
"jasmine": "^3.7.0",
"jasmine-core": "^3.7.1",
"node": ">=4"
}
},
+ "node_modules/esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw==",
"dev": true,
"requires": {
- "@babel/core": "^7.11.0",
"@babel/helper-compilation-targets": "^7.9.6",
"@babel/helper-module-imports": "^7.8.3",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@vue/babel-plugin-jsx": "^1.0.3",
"@vue/babel-preset-jsx": "^1.2.4",
"babel-plugin-dynamic-import-node": "^2.3.3",
- "core-js": "^3.6.5",
"core-js-compat": "^3.6.5",
"semver": "^6.1.0"
},
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true
},
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "dev": true
+ },
"espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"lint-js": "eslint \"src/**/*.js\" \"test/**/*.js\" \"docs/**/*.js\"",
"lint-md": "eslint \"**/*.md\"",
"lint-tsc": "tsc",
- "lint-types": "eslint \"types/**/*.ts\" && tsc -p types/tests/",
+ "lint-types": "eslint \"types/**/*.ts\" && node -r esm types/tests/autogen.js && tsc -p types/tests/",
"lint": "concurrently \"npm:lint-*\"",
"test": "npm run lint && cross-env NODE_ENV=test karma start --auto-watch --single-run --coverage --grep"
},
"eslint-plugin-es": "^4.1.0",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-markdown": "^2.1.0",
+ "esm": "^3.2.25",
"glob": "^7.1.6",
"jasmine": "^3.7.0",
"jasmine-core": "^3.7.1",
x: number;
y: number;
}
+
+export type TRBL = {
+ top: number;
+ right: number;
+ bottom: number;
+ left: number;
+}
+
+export type TRBLCorners = {
+ topLeft: number;
+ topRight: number;
+ bottomLeft: number;
+ bottomRight: number;
+};
+
+export type CornerRadius = number | Partial<TRBLCorners>;
+
+export type RoundedRect = {
+ x: number;
+ y: number;
+ w: number;
+ h: number;
+ radius?: CornerRadius
+}
import { PointStyle } from '../index.esm';
import { Color } from '../color';
-import { ChartArea } from '../geometric';
+import { ChartArea, RoundedRect } from '../geometric';
import { CanvasFontSpec } from './helpers.options';
export function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D): void;
font: CanvasFontSpec,
opts?: RenderTextOpts
): void;
+
+export function addRoundedRectPath(ctx: CanvasRenderingContext2D, rect: RoundedRect): void;
* @returns {boolean}
*/
export function isFinite(value: unknown): value is number;
+
+/**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param {*} value - The value to return if defined.
+ * @param {*} defaultValue - The value to return if `value` is not finite.
+ * @returns {*}
+ */
+export function finiteOrDefault(value: unknown, defaultValue: number): number;
+
/**
* Returns `value` if defined, else returns `defaultValue`.
* @param {*} value - The value to return if defined.
* @returns {*}
*/
export function valueOrDefault<T>(value: T | undefined, defaultValue: T): T;
+
+export function toPercentage(value: number | string, dimesion: number): number;
+export function toDimension(value: number | string, dimension: number): number;
+
/**
* Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
* value returned by `fn`. If `fn` is not a function, this method returns undefined.
export function resolveObjectKey(obj: AnyObject, key: string): AnyObject;
+export function defined(value: unknown): boolean;
+
+export function isFunction(value: unknown): boolean;
+
export function setsEqual(a: Set<unknown>, b: Set<unknown>): boolean;
forceRatio: number,
forceStyle?: boolean
): void;
+export function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined;
export function almostEquals(x: number, y: number, epsilon: number): boolean;
export function almostWhole(x: number, epsilon: number): number;
export function sign(x: number): number;
+export function niceNum(range: number): number;
export function toRadians(degrees: number): number;
export function toDegrees(radians: number): number;
/**
+import { TRBL, TRBLCorners } from '../geometric';
import { FontSpec } from '../index.esm';
export interface CanvasFontSpec extends FontSpec {
*/
export function toLineHeight(value: string, size: number): number;
+export function toTRBL(value: number | Partial<TRBL>): TRBL;
+export function toTRBLCorners(value: number | Partial<TRBLCorners>): TRBLCorners;
+
/**
* Converts the given value into a padding object with pre-computed width/height.
* @param {number|object} value - If a number, set the value to all TRBL component;
--- /dev/null
+import * as fs from 'fs';
+import * as path from 'path';
+import * as helpers from '../../src/helpers/index.js';
+
+let fd;
+
+try {
+ const fn = path.resolve(__dirname, 'autogen_helpers.ts');
+ fd = fs.openSync(fn, 'w+');
+ fs.writeSync(fd, 'import * as helpers from \'../helpers\';\n\n');
+
+ fs.writeSync(fd, 'const testKeys = [];\n');
+ for (const key of Object.keys(helpers)) {
+ if (key[0] !== '_' && typeof helpers[key] === 'function') {
+ fs.writeSync(fd, `testKeys.push(helpers.${key});\n`);
+ }
+ }
+} finally {
+ if (fd !== undefined) {
+ fs.closeSync(fd);
+ }
+}