UNPKG

konva

Version:

HTML5 2d canvas library for interactive graphics, design editors, whiteboards, and diagrams.

190 lines (189 loc) 6.33 kB
/* * Konva JavaScript Framework v10.6.0 * http://konvajs.org/ * Licensed under the MIT * Date: @@date * * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS) * Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva) * * @license */ const PI_OVER_180 = Math.PI / 180; /** * @namespace Konva */ function detectBrowser() { return (typeof window !== 'undefined' && // browser case ({}.toString.call(window) === '[object Window]' || // electron case {}.toString.call(window) === '[object global]')); } export const glob = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' ? self : {}; export const Konva = { _global: glob, version: '10.6.0', isBrowser: detectBrowser(), isUnminified: /param/.test(function (param) { }.toString()), dblClickWindow: 400, getAngle(angle) { return Konva.angleDeg ? angle * PI_OVER_180 : angle; }, enableTrace: false, pointerEventsEnabled: true, /** * Should Konva automatically update canvas on any changes. Default is true. * @property autoDrawEnabled * @default true * @name autoDrawEnabled * @memberof Konva * @example * Konva.autoDrawEnabled = true; */ autoDrawEnabled: true, /** * Should we enable hit detection while dragging? For performance reasons, by default it is false. * But on some rare cases you want to see hit graph and check intersections. Just set it to true. * @property hitOnDragEnabled * @default false * @name hitOnDragEnabled * @memberof Konva * @example * Konva.hitOnDragEnabled = true; */ hitOnDragEnabled: false, /** * Should we capture touch events and bind them to the touchstart target? That is how it works on DOM elements. * The case: we touchstart on div1, then touchmove out of that element into another element div2. * DOM will continue trigger touchmove events on div1 (not div2). Because events are "captured" into initial target. * By default Konva do not do that and will trigger touchmove on another element, while pointer is moving. * @property capturePointerEventsEnabled * @default false * @name capturePointerEventsEnabled * @memberof Konva * @example * Konva.capturePointerEventsEnabled = true; */ capturePointerEventsEnabled: false, _renderBackend: 'web', // web, node-canvas, skia-canvas /** * Use legacy text rendering. with "middle" baseline by default. * @property legacyTextRendering * @default false * @name legacyTextRendering * @memberof Konva * @example * Konva.legacyTextRendering = true; */ legacyTextRendering: false, /** * Global pixel ratio configuration. KonvaJS automatically detect pixel ratio of current device. * But you may override such property, if you want to use your value. Set this value before any components initializations. * @property pixelRatio * @default window.devicePixelRatio || 1 * @name pixelRatio * @memberof Konva * @example * // before any Konva code: * Konva.pixelRatio = 1; */ pixelRatio: (typeof window !== 'undefined' && window.devicePixelRatio) || 1, /** * Drag distance property. If you start to drag a node you may want to wait until pointer is moved to some distance from start point * on either axis, only then start dragging. Default is 3px. * @property dragDistance * @default 3 * @memberof Konva * @example * Konva.dragDistance = 10; */ dragDistance: 3, /** * Use degree values for angle properties. You may set this property to false if you want to use radian values. * @property angleDeg * @default true * @memberof Konva * @example * node.rotation(45); // 45 degrees * Konva.angleDeg = false; * node.rotation(Math.PI / 2); // PI/2 radian */ angleDeg: true, /** * Show warnings about wrong API usage (`Konva.Util.warn`). Errors are always printed * @property showWarnings * @default true * @memberof Konva * @example * Konva.showWarnings = false; */ showWarnings: true, /** * Configure what mouse buttons can be used for drag and drop. * Default value is [0, 1] - left and middle mouse buttons. * @property dragButtons * @default [0, 1] * @memberof Konva * @example * // enable left and right mouse buttons * Konva.dragButtons = [0, 2]; */ dragButtons: [0, 1], /** * returns whether or not drag and drop is currently active * @method * @memberof Konva */ isDragging() { return Konva['DD'].isDragging; }, /** * returns whether or not a Transformer is currently transforming a node * @method * @memberof Konva */ isTransforming() { var _a, _b; return (_b = (_a = Konva['Transformer']) === null || _a === void 0 ? void 0 : _a.isTransforming()) !== null && _b !== void 0 ? _b : false; }, /** * returns whether or not a drag and drop operation is ready, but may * not necessarily have started * @method * @memberof Konva */ isDragReady() { return !!Konva['DD'].node; }, /** * Should Konva release canvas elements on destroy. Default is true. * Useful to avoid memory leak issues in Safari on macOS/iOS. * @property releaseCanvasOnDestroy * @default true * @name releaseCanvasOnDestroy * @memberof Konva * @example * Konva.releaseCanvasOnDestroy = true; */ releaseCanvasOnDestroy: true, document: glob.document, // insert Konva into global namespace (window) // it is required for npm packages _injectGlobal(Konva) { if (typeof glob.Konva !== 'undefined') { console.error('Several Konva instances detected. It is not recommended to use multiple Konva instances in the same environment.'); } glob.Konva = Konva; }, }; export const _registerNode = (NodeClass) => { Konva[NodeClass.prototype.getClassName()] = NodeClass; }; Konva._injectGlobal(Konva);