UNPKG

@blueprintjs/core

Version:
110 lines (108 loc) 16.1 kB
/* * Copyright 2016 Palantir Technologies, Inc. All rights reserved. * Licensed under the BSD-3 License as modified (the “License”); you may obtain a copy * of the license at https://github.com/palantir/blueprint/blob/master/LICENSE * and https://github.com/palantir/blueprint/blob/master/PATENTS */ "use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var classNames = require("classnames"); var PureRender = require("pure-render-decorator"); var React = require("react"); var abstractComponent_1 = require("../../common/abstractComponent"); var Classes = require("../../common/classes"); var utils_1 = require("../../common/utils"); var CoreSlider = (function (_super) { __extends(CoreSlider, _super); function CoreSlider() { var _this = this; _super.apply(this, arguments); this.state = { tickSize: 0, }; this.className = Classes.SLIDER; this.refHandlers = { track: function (el) { return _this.trackElement = el; }, }; this.maybeHandleTrackClick = function (event) { var target = event.target; // ensure event does not come from inside the handle if (!_this.props.disabled && target.closest("." + Classes.SLIDER_HANDLE) == null) { _this.handleTrackClick(event.nativeEvent); } }; } CoreSlider.prototype.render = function () { var disabled = this.props.disabled; var classes = classNames(this.className, (_a = {}, _a[Classes.DISABLED] = disabled, _a[Classes.SLIDER + "-unlabeled"] = this.props.renderLabel === false, _a ), this.props.className); return (React.createElement("div", {className: classes, onMouseDown: this.maybeHandleTrackClick}, React.createElement("div", {className: Classes.SLIDER + "-track", ref: this.refHandlers.track}), this.maybeRenderFill(), this.maybeRenderAxis(), this.renderHandles())); var _a; }; CoreSlider.prototype.componentDidMount = function () { this.updateTickSize(); }; CoreSlider.prototype.componentDidUpdate = function () { this.updateTickSize(); }; CoreSlider.prototype.formatLabel = function (value) { var renderLabel = this.props.renderLabel; if (renderLabel === false) { return undefined; } else if (utils_1.isFunction(renderLabel)) { return renderLabel(value); } else { return value; } }; CoreSlider.prototype.maybeRenderAxis = function () { var _a = this.props, max = _a.max, min = _a.min, labelStepSize = _a.labelStepSize; if (this.props.renderLabel === false) { return undefined; } var stepSize = Math.round(this.state.tickSize * labelStepSize); var labels = []; // tslint:disable-next-line:one-variable-per-declaration for (var i = min, left = 0; i < max || utils_1.approxEqual(i, max); i += labelStepSize, left += stepSize) { labels.push(React.createElement("div", {className: Classes.SLIDER + "-label", key: i, style: { left: left }}, this.formatLabel(i))); } return React.createElement("div", {className: Classes.SLIDER + "-axis"}, labels); }; CoreSlider.prototype.maybeRenderFill = function () { if (this.props.showTrackFill && this.trackElement != null) { return this.renderFill(); } return undefined; }; CoreSlider.prototype.updateTickSize = function () { if (this.trackElement != null) { var tickSize = this.trackElement.clientWidth / (this.props.max - this.props.min); this.setState({ tickSize: tickSize }); } }; CoreSlider = __decorate([ PureRender ], CoreSlider); return CoreSlider; }(abstractComponent_1.AbstractComponent)); exports.CoreSlider = CoreSlider; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9jb3JlU2xpZGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7OztBQUVILElBQVksVUFBVSxXQUFNLFlBQVksQ0FBQyxDQUFBO0FBQ3pDLElBQVksVUFBVSxXQUFNLHVCQUF1QixDQUFDLENBQUE7QUFDcEQsSUFBWSxLQUFLLFdBQU0sT0FBTyxDQUFDLENBQUE7QUFFL0Isa0NBQWtDLGdDQUFnQyxDQUFDLENBQUE7QUFDbkUsSUFBWSxPQUFPLFdBQU0sc0JBQXNCLENBQUMsQ0FBQTtBQUVoRCxzQkFBd0Msb0JBQW9CLENBQUMsQ0FBQTtBQXNEN0Q7SUFBcUUsOEJBQWtDO0lBQXZHO1FBQUEsaUJBc0ZDO1FBdEZvRSw4QkFBa0M7UUFDNUYsVUFBSyxHQUFpQjtZQUN6QixRQUFRLEVBQUUsQ0FBQztTQUNkLENBQUM7UUFFSyxjQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUcxQixnQkFBVyxHQUFHO1lBQ2xCLEtBQUssRUFBRSxVQUFDLEVBQWtCLElBQUssT0FBQSxLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBdEIsQ0FBc0I7U0FDeEQsQ0FBQztRQThETSwwQkFBcUIsR0FBRyxVQUFDLEtBQXVDO1lBQ3BFLElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1lBQzNDLG9EQUFvRDtZQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBSSxPQUFPLENBQUMsYUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDOUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUF5QixDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNMLENBQUMsQ0FBQTtJQVFMLENBQUM7SUExRVUsMkJBQU0sR0FBYjtRQUNZLGtDQUFRLENBQWdCO1FBQ2hD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Q0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQVVPLG1DQUFjLEdBQXRCO1FBQ0ksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUF0Rkw7UUFBQyxVQUFVO2tCQUFBO0lBdUZYLGlCQUFDO0FBQUQsQ0F0RkEsQUFzRkMsQ0F0Rm9FLHFDQUFpQixHQXNGckY7QUF0RnFCLGtCQUFVLGFBc0YvQixDQUFBIiwiZmlsZSI6ImNvbXBvbmVudHMvc2xpZGVyL2NvcmVTbGlkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTYgUGFsYW50aXIgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNELTMgTGljZW5zZSBhcyBtb2RpZmllZCAodGhlIOKAnExpY2Vuc2XigJ0pOyB5b3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBsaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9ibHVlcHJpbnQvYmxvYi9tYXN0ZXIvUEFURU5UU1xuICovXG5cbmltcG9ydCAqIGFzIGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCAqIGFzIFB1cmVSZW5kZXIgZnJvbSBcInB1cmUtcmVuZGVyLWRlY29yYXRvclwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9hYnN0cmFjdENvbXBvbmVudFwiO1xuaW1wb3J0ICogYXMgQ2xhc3NlcyBmcm9tIFwiLi4vLi4vY29tbW9uL2NsYXNzZXNcIjtcbmltcG9ydCB7IElQcm9wcyB9IGZyb20gXCIuLi8uLi9jb21tb24vcHJvcHNcIjtcbmltcG9ydCB7IGFwcHJveEVxdWFsLCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlU2xpZGVyUHJvcHMgZXh0ZW5kcyBJUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBub24taW50ZXJhY3RpdmUuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgYmV0d2VlbiBzdWNjZXNzaXZlIGxhYmVscy5cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgbGFiZWxTdGVwU2l6ZT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE1heGltdW0gdmFsdWUgb2YgdGhlIHNsaWRlci5cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIG1heD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE1pbmltdW0gdmFsdWUgb2YgdGhlIHNsaWRlci5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgbWluPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBhIHNvbGlkIGJhciBzaG91bGQgYmUgcmVuZGVyZWQgb24gdGhlIHRyYWNrIGJldHdlZW4gY3VycmVudCBhbmQgaW5pdGlhbCB2YWx1ZXMsXG4gICAgICogb3IgYmV0d2VlbiBoYW5kbGVzIGZvciBgUmFuZ2VTbGlkZXJgLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBzaG93VHJhY2tGaWxsPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgdmFsdWVzOyBhbW91bnQgYnkgd2hpY2ggdGhlIGhhbmRsZSBtb3Zlcy5cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgc3RlcFNpemU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byByZW5kZXIgYSBzaW5nbGUgbGFiZWwuIFVzZWZ1bCBmb3IgZm9ybWF0dGluZyBudW1iZXJzIGFzIGN1cnJlbmN5IG9yIHBlcmNlbnRhZ2VzLlxuICAgICAqIElmIGB0cnVlYCwgbGFiZWxzIHdpbGwgdXNlIG51bWJlciB2YWx1ZS4gSWYgYGZhbHNlYCwgbGFiZWxzIHdpbGwgbm90IGJlIHNob3duLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICByZW5kZXJMYWJlbD86ICgodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nIHwgSlNYLkVsZW1lbnQpIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2xpZGVyU3RhdGUge1xuICAgIC8qKiB0aGUgY2xpZW50IHNpemUsIGluIHBpeGVscywgb2Ygb25lIHRpY2sgKi9cbiAgICB0aWNrU2l6ZT86IG51bWJlcjtcbn1cblxuQFB1cmVSZW5kZXJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb3JlU2xpZGVyPFAgZXh0ZW5kcyBJQ29yZVNsaWRlclByb3BzPiBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50PFAsIElTbGlkZXJTdGF0ZT4ge1xuICAgIHB1YmxpYyBzdGF0ZTogSVNsaWRlclN0YXRlID0ge1xuICAgICAgICB0aWNrU2l6ZTogMCxcbiAgICB9O1xuXG4gICAgcHVibGljIGNsYXNzTmFtZSA9IENsYXNzZXMuU0xJREVSO1xuXG4gICAgcHJpdmF0ZSB0cmFja0VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgcmVmSGFuZGxlcnMgPSB7XG4gICAgICAgIHRyYWNrOiAoZWw6IEhUTUxEaXZFbGVtZW50KSA9PiB0aGlzLnRyYWNrRWxlbWVudCA9IGVsLFxuICAgIH07XG5cbiAgICBwdWJsaWMgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyh0aGlzLmNsYXNzTmFtZSwge1xuICAgICAgICAgICAgW0NsYXNzZXMuRElTQUJMRURdOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIFtgJHtDbGFzc2VzLlNMSURFUn0tdW5sYWJlbGVkYF06IHRoaXMucHJvcHMucmVuZGVyTGFiZWwgPT09IGZhbHNlLFxuICAgICAgICB9LCB0aGlzLnByb3BzLmNsYXNzTmFtZSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlc30gb25Nb3VzZURvd249e3RoaXMubWF5YmVIYW5kbGVUcmFja0NsaWNrfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7Q2xhc3Nlcy5TTElERVJ9LXRyYWNrYH0gcmVmPXt0aGlzLnJlZkhhbmRsZXJzLnRyYWNrfSAvPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1heWJlUmVuZGVyRmlsbCgpfVxuICAgICAgICAgICAgICAgIHt0aGlzLm1heWJlUmVuZGVyQXhpcygpfVxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckhhbmRsZXMoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUaWNrU2l6ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGlja1NpemUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVuZGVySGFuZGxlcygpOiBKU1guRWxlbWVudCB8IEpTWC5FbGVtZW50W107XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlckZpbGwoKTogSlNYLkVsZW1lbnQ7XG4gICAgLyoqIEFuIGV2ZW50IGxpc3RlbmVyIGludm9rZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIHRyYWNrIG91dHNpZGUgYSBoYW5kbGUgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGFuZGxlVHJhY2tDbGljayhldmVudDogTW91c2VFdmVudCB8IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+KTogdm9pZDtcblxuICAgIHByb3RlY3RlZCBmb3JtYXRMYWJlbCh2YWx1ZTogbnVtYmVyKTogUmVhY3QuUmVhY3RDaGlsZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyTGFiZWwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChyZW5kZXJMYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihyZW5kZXJMYWJlbCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJMYWJlbCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1heWJlUmVuZGVyQXhpcygpIHtcbiAgICAgICAgY29uc3QgeyBtYXgsIG1pbiwgbGFiZWxTdGVwU2l6ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVuZGVyTGFiZWwgPT09IGZhbHNlKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICAgICAgICBjb25zdCBzdGVwU2l6ZSA9IE1hdGgucm91bmQodGhpcy5zdGF0ZS50aWNrU2l6ZSAqIGxhYmVsU3RlcFNpemUpO1xuICAgICAgICBjb25zdCBsYWJlbHM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgZm9yIChsZXQgaSA9IG1pbiwgbGVmdCA9IDA7IGkgPCBtYXggfHwgYXBwcm94RXF1YWwoaSwgbWF4KTsgaSArPSBsYWJlbFN0ZXBTaXplLCBsZWZ0ICs9IHN0ZXBTaXplKSB7XG4gICAgICAgICAgICBsYWJlbHMucHVzaCg8ZGl2IGNsYXNzTmFtZT17YCR7Q2xhc3Nlcy5TTElERVJ9LWxhYmVsYH0ga2V5PXtpfSBzdHlsZT17e2xlZnR9fT57dGhpcy5mb3JtYXRMYWJlbChpKX08L2Rpdj4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17YCR7Q2xhc3Nlcy5TTElERVJ9LWF4aXNgfT57bGFiZWxzfTwvZGl2PjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1heWJlUmVuZGVyRmlsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2hvd1RyYWNrRmlsbCAmJiB0aGlzLnRyYWNrRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1heWJlSGFuZGxlVHJhY2tDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAvLyBlbnN1cmUgZXZlbnQgZG9lcyBub3QgY29tZSBmcm9tIGluc2lkZSB0aGUgaGFuZGxlXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5kaXNhYmxlZCAmJiB0YXJnZXQuY2xvc2VzdChgLiR7Q2xhc3Nlcy5TTElERVJfSEFORExFfWApID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhY2tDbGljayhldmVudC5uYXRpdmVFdmVudCBhcyBNb3VzZUV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGlja1NpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYWNrRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0aWNrU2l6ZSA9IHRoaXMudHJhY2tFbGVtZW50LmNsaWVudFdpZHRoIC8gKHRoaXMucHJvcHMubWF4IC0gdGhpcy5wcm9wcy5taW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRpY2tTaXplIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9