{"version":3,"file":"grptx-ng-canvas-gauges.mjs","sources":["../../../projects/ng-canvas-gauges/src/lib/base-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/linear-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/radial-gauge.ts","../../../projects/ng-canvas-gauges/src/lib/gauges.module.ts","../../../projects/ng-canvas-gauges/src/public_api.ts","../../../projects/ng-canvas-gauges/src/grptx-ng-canvas-gauges.ts"],"sourcesContent":["/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { ViewChild, Input, NgZone, ElementRef, OnInit, AfterViewInit, Directive } from '@angular/core';\nimport * as CanvasGauges from 'canvas-gauges';\nimport * as Rx from 'rx-dom-html';\n\n\n\n// String utils\nconst toCamelCase = (str: string) => str.replace(/(\\-\\w)/g, (matches) => matches[1].toUpperCase());\n\nconst toKebabCase = (str: string) => str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\nconst attributeName2PropertyName = (attrName: string) => toCamelCase(attrName);\n\n\n\n\n/**\n * Base gauge component for the Gauges rendering\n * T - Type of the Gauge to be rendered (Currently RadialGauge, LinearGauge from the original library)\n * T2 - Type of config options used by the particular gauge (RadialGaugeOptions, LinearGaugeOptions)\n */\n@Directive()\nexport abstract class BaseGauge<T extends CanvasGauges.BaseGauge, T2 extends CanvasGauges.GenericOptions>\n    implements OnInit, AfterViewInit {\n\n    /**\n     * Canvas element on the template used by the library to draw gauge element\n     */\n    @ViewChild('gauge', { static: true })\n    protected canvas: ElementRef;\n\n    /**\n     * A gauge instance responsible for rendering and updates on the canvas.\n     * Subclasses should initialize in their ngOnInit implementation.\n     */\n    protected gauge: T;\n\n\n    /**\n     * Flag indicating that OnViewInit life-cycle has completed\n     */\n    private isInited = false;\n\n    /**\n     * value property of gauge prior to component view initialization\n     */\n    private preInitValue: number;\n\n    /**\n     * options property of gauge prior to component view initialization\n     */\n    private preInitOptions: T2;\n\n\n    /**\n     * Listen for attribute changes, i.e., options properties that are stored\n     * as attributes on this ElementRef\n     */\n    private domListener: MutationObserver;\n\n\n    /**\n     *\n     * @param el - reference to the element of the whole component, used to scrape options declared on the component itself\n     * @param zone - required to redraw gauge outside of Angular, due to animation lags caused by the ovewritten function of the ngZone\n     */\n    constructor(private el: ElementRef, public zone: NgZone) {\n    }\n\n\n    /**\n     * Subclasses should instantiate the CanvasGauge object in the child component\n     */\n    abstract ngOnInit(): void;\n\n\n    /**\n     * Returns gauges properties as an options object.\n     * Option properties consist of the attribute-based properties and those\n     * explicitly set.\n     * @returns <T2>\n     */\n    public get options(): T2 {\n\n        const options = {} as T2;\n        options.renderTo = this.canvas.nativeElement;\n\n        // Map attribute-based options onto options.\n        // Requries converting kebab style attribute names to camelCase property names\n        for (const attr of this.el.nativeElement.attributes) {\n            const prop = attributeName2PropertyName(attr.name);\n            options[prop] = CanvasGauges.DomObserver.parse(attr.value);\n        }\n\n        // merge preOptons with attribute-based properties\n        // tslint:disable-next-line:forin\n        for (const prop in this.preInitOptions) {\n            options[prop] = this.preInitOptions[prop];\n        }\n\n        // clear the preInitOptions as they have already been merged\n        // with the attribute-based properties\n        if (this.isInited) {\n            this.preInitOptions = null;\n        }\n\n        return options;\n    }\n\n\n    /**\n     * Assign gauge options at anytime in the lifecycle.\n     * @param newOptions - assign the style and size properties\n     */\n    @Input()\n    public set options(newOptions: T2) {\n\n        // cache newOptions as preInitOptions until gauge is ready\n        if (!this.isInited) {\n            this.preInitOptions = newOptions;\n            return;\n        }\n\n        this.update(newOptions);\n    }\n\n\n    /**\n     * Assign the value of the gauge visual indicator such as a needle or pointer\n     * @param newValue  the guage new value\n     */\n    @Input()\n    public set value(newValue: number) {\n\n        // case new gauge value as preInitValue until the gauge is ready\n        if (!this.isInited) {\n            this.preInitValue = newValue;\n            return;\n        }\n\n        this.zone.runOutsideAngular(() => {\n            this.gauge.value = newValue;\n        });\n    }\n\n\n    /**\n     * Update the gauge options. Do not use until after OnViewInit() before using.\n     *\n     * Special implementation note - options.properties are maintained as\n     * attribute name->value on this component's elementRef.  Thus this method\n     * maps each newOptions property onto the property's corresponding attribute.\n     * The attribute update triggers a DOM mutation event which  \"this\" listens for.\n     * See #listenForDOMEvents()\n     *\n     * @param newOptions  - the options to update the gauge\n     */\n    public update(newOptions: T2 | {}) {\n\n        // map all options onto this element's attributes\n        // Then attribute changes will be detected and pushed to the gauge.update()\n        if (!newOptions) { return; }\n\n        // tslint:disable-next-line:forin\n        for (const prop in newOptions) {\n            const val = newOptions[prop].toString();\n\n            if (prop === 'value') {\n                // short circuit the value property update by calling\n                // the gauge.value api directly for efficient animated update\n                this.value = CanvasGauges.DomObserver.parse(val);\n            } else {\n                const attrName = toKebabCase(prop);\n                this.el.nativeElement.setAttribute(attrName, val);\n            }\n        }\n    }\n\n\n    /**\n     * Perform gauge initialization.\n     * Subclasses that override this method must this super version\n     * for proper operation.\n     */\n    public ngAfterViewInit() {\n\n        // initial update of gauge properties\n        this.initGauge();\n\n        this.listenForDOMEvents();\n\n        this.isInited = true;\n    }\n\n\n    /**\n     * Listen for attribute-change events that are created when updating\n     * the options of this gauge.\n     */\n    protected listenForDOMEvents() {\n        // Listen to gauge element for attribute changes\n        // Convert all changed attribtues into a GenericOptions or subclass\n        // Update the gauge with the new options.\n        this.domListener =\n            Rx.DOM.fromMutationObserver(this.el.nativeElement, { attributes: true }).\n                subscribe(changes => {\n                    const newOptions = {} as T2;\n                    changes.forEach(change => {\n                        if ('attributes' === change.type) {\n                            // console.log('DOM, change', change.attributeName);\n                            newOptions[attributeName2PropertyName(change.attributeName)] =\n                                CanvasGauges.DomObserver.parse(\n                                    this.el.nativeElement.getAttribute(change.attributeName));\n                        }\n                    });\n\n                    this.basicUpdate(newOptions);\n                });\n    }\n\n\n    /**\n     * Discontinue listening for attribute change events.\n     */\n    protected stopListeningForDOMEvents() {\n        if (this.domListener) {\n            this.domListener.disconnect();\n            this.domListener = null;\n        }\n    }\n\n\n    /**\n     * Initalize the gauge with all options defined by attributes and\n     * parent component options.\n     */\n    protected initGauge() {\n        const options = this.options;\n        if (this.preInitValue) {\n            options.value = this.preInitValue;\n        }\n\n        // init options.renderTo if needed\n        if (!options.hasOwnProperty('renderTo') || !options.renderTo) {\n            options.renderTo = this.canvas.nativeElement;\n        }\n\n        this.basicUpdate(options);\n    }\n\n\n    /**\n     * Performs the gauge update using the current options\n     * @param options  The options for the guage\n     */\n    protected basicUpdate(options: T2) {\n\n        // treat the value property special and update it through the\n        // value getter.\n        if (typeof options.value === 'number') {\n\n            // use gauge api directly for most efficient update method\n            this.value = options.value;\n\n            // filter value property from options to avoid redundant\n            // processing by gauge\n            delete options.value;\n        }\n\n        // do nothing if no option properties to update\n        if (Object.keys(options).length) {\n            this.gauge.update(options);\n        }\n    }\n\n}\n\n\n\n","/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {Component, NgZone, ElementRef, OnInit} from '@angular/core';\nimport {BaseGauge} from './base-gauge';\nimport * as CanvasGauges from 'canvas-gauges';\n\nexport { LinearGaugeOptions } from 'canvas-gauges';\n\n/**\n * Implements Linear Gauge from the original library\n */\n@Component({\n    // tslint:disable-next-line:component-selector\n    selector: 'linear-gauge',\n    template: '<canvas #gauge></canvas>'\n})\n// tslint:disable-next-line:component-class-suffix\nexport class LinearGauge extends BaseGauge<CanvasGauges.LinearGauge, CanvasGauges.LinearGaugeOptions> implements OnInit {\n\n    constructor(el: ElementRef, zone: NgZone) {\n        super(el, zone);\n    }\n\n\n    ngOnInit(): void {\n        this.gauge = new CanvasGauges.LinearGauge(this.options).draw();\n    }\n}\n","/*!\n * The MIT License (MIT)\n *\n * Copyright (c) 2017 Vlad Martynenko <vladimir.martynenko.work@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Component, NgZone, ElementRef, OnInit } from '@angular/core';\nimport { BaseGauge } from './base-gauge';\nimport * as CanvasGauges from 'canvas-gauges';\n\nexport { RadialGaugeOptions } from 'canvas-gauges';\n\n/**\n * Implements Radial Gauge from the original library\n */\n@Component({\n    // tslint:disable-next-line:component-selector\n    selector: 'radial-gauge',\n    template: '<canvas #gauge></canvas>'\n})\n// tslint:disable-next-line:component-class-suffix\nexport class RadialGauge extends BaseGauge<CanvasGauges.RadialGauge, CanvasGauges.RadialGaugeOptions> implements OnInit {\n    constructor(el: ElementRef, zone: NgZone) {\n        super(el, zone);\n    }\n\n    ngOnInit() {\n        this.gauge = new CanvasGauges.RadialGauge(this.options).draw();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { LinearGauge } from './linear-gauge';\nimport { RadialGauge } from './radial-gauge';\n\n@NgModule({\n  declarations: [\n    LinearGauge,\n    RadialGauge],\n  imports: [\n  ],\n  exports: [\n    LinearGauge,\n    RadialGauge]\n})\nexport class GaugesModule { }\n","/*\n * Public API Surface of ng-canvas-gauges\n */\nexport * from './lib/gauges.module';\n\n// components\nexport * from './lib/linear-gauge';\nexport * from './lib/radial-gauge';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}