UNPKG

@material/icon-toggle

Version:
1,388 lines (1,142 loc) 92.8 kB
/*! Material Components for the Web Copyright (c) 2019 Google Inc. License: MIT */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["iconToggle"] = factory(); else root["mdc"] = root["mdc"] || {}, root["mdc"]["iconToggle"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 122); /******/ }) /************************************************************************/ /******/ ({ /***/ 0: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * @template A */ var MDCFoundation = function () { _createClass(MDCFoundation, null, [{ key: "cssClasses", /** @return enum{cssClasses} */ get: function get() { // Classes extending MDCFoundation should implement this method to return an object which exports every // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'} return {}; } /** @return enum{strings} */ }, { key: "strings", get: function get() { // Classes extending MDCFoundation should implement this method to return an object which exports all // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'} return {}; } /** @return enum{numbers} */ }, { key: "numbers", get: function get() { // Classes extending MDCFoundation should implement this method to return an object which exports all // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350} return {}; } /** @return {!Object} */ }, { key: "defaultAdapter", get: function get() { // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter // validation. return {}; } /** * @param {A=} adapter */ }]); function MDCFoundation() { var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, MDCFoundation); /** @protected {!A} */ this.adapter_ = adapter; } _createClass(MDCFoundation, [{ key: "init", value: function init() { // Subclasses should override this method to perform initialization routines (registering events, etc.) } }, { key: "destroy", value: function destroy() { // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.) } }]); return MDCFoundation; }(); /* harmony default export */ __webpack_exports__["a"] = (MDCFoundation); /***/ }), /***/ 1: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__foundation__ = __webpack_require__(0); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * @template F */ var MDCComponent = function () { _createClass(MDCComponent, null, [{ key: 'attachTo', /** * @param {!Element} root * @return {!MDCComponent} */ value: function attachTo(root) { // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and // returns an instantiated component with its root set to that element. Also note that in the cases of // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized // from getDefaultFoundation(). return new MDCComponent(root, new __WEBPACK_IMPORTED_MODULE_0__foundation__["a" /* default */]()); } /** * @param {!Element} root * @param {F=} foundation * @param {...?} args */ }]); function MDCComponent(root) { var foundation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; _classCallCheck(this, MDCComponent); /** @protected {!Element} */ this.root_ = root; for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { args[_key - 2] = arguments[_key]; } this.initialize.apply(this, args); // Note that we initialize foundation here and not within the constructor's default param so that // this.root_ is defined and can be used within the foundation class. /** @protected {!F} */ this.foundation_ = foundation === undefined ? this.getDefaultFoundation() : foundation; this.foundation_.init(); this.initialSyncWithDOM(); } _createClass(MDCComponent, [{ key: 'initialize', value: function initialize() /* ...args */{} // Subclasses can override this to do any additional setup work that would be considered part of a // "constructor". Essentially, it is a hook into the parent constructor before the foundation is // initialized. Any additional arguments besides root and foundation will be passed in here. /** * @return {!F} foundation */ }, { key: 'getDefaultFoundation', value: function getDefaultFoundation() { // Subclasses must override this method to return a properly configured foundation class for the // component. throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + 'foundation class'); } }, { key: 'initialSyncWithDOM', value: function initialSyncWithDOM() { // Subclasses should override this method if they need to perform work to synchronize with a host DOM // object. An example of this would be a form control wrapper that needs to synchronize its internal state // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor. } }, { key: 'destroy', value: function destroy() { // Subclasses may implement this method to release any resources / deregister any listeners they have // attached. An example of this might be deregistering a resize event from the window object. this.foundation_.destroy(); } /** * Wrapper method to add an event listener to the component's root element. This is most useful when * listening for custom events. * @param {string} evtType * @param {!Function} handler */ }, { key: 'listen', value: function listen(evtType, handler) { this.root_.addEventListener(evtType, handler); } /** * Wrapper method to remove an event listener to the component's root element. This is most useful when * unlistening for custom events. * @param {string} evtType * @param {!Function} handler */ }, { key: 'unlisten', value: function unlisten(evtType, handler) { this.root_.removeEventListener(evtType, handler); } /** * Fires a cross-browser-compatible custom event from the component root of the given type, * with the given data. * @param {string} evtType * @param {!Object} evtData * @param {boolean=} shouldBubble */ }, { key: 'emit', value: function emit(evtType, evtData) { var shouldBubble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var evt = void 0; if (typeof CustomEvent === 'function') { evt = new CustomEvent(evtType, { detail: evtData, bubbles: shouldBubble }); } else { evt = document.createEvent('CustomEvent'); evt.initCustomEvent(evtType, shouldBubble, false, evtData); } this.root_.dispatchEvent(evt); } }]); return MDCComponent; }(); /* harmony default export */ __webpack_exports__["a"] = (MDCComponent); /***/ }), /***/ 122: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MDCIconToggle", function() { return MDCIconToggle; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__material_base_component__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation__ = __webpack_require__(123); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__material_ripple_index__ = __webpack_require__(4); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "MDCIconToggleFoundation", function() { return __WEBPACK_IMPORTED_MODULE_1__foundation__["a"]; }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * @extends {MDCComponent<!MDCIconToggleFoundation>} */ var MDCIconToggle = function (_MDCComponent) { _inherits(MDCIconToggle, _MDCComponent); _createClass(MDCIconToggle, null, [{ key: 'attachTo', value: function attachTo(root) { return new MDCIconToggle(root); } }]); function MDCIconToggle() { var _ref; _classCallCheck(this, MDCIconToggle); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } /** @private {!MDCRipple} */ var _this = _possibleConstructorReturn(this, (_ref = MDCIconToggle.__proto__ || Object.getPrototypeOf(MDCIconToggle)).call.apply(_ref, [this].concat(args))); _this.ripple_ = _this.initRipple_(); return _this; } /** @return {!Element} */ _createClass(MDCIconToggle, [{ key: 'initRipple_', /** * @return {!MDCRipple} * @private */ value: function initRipple_() { var _this2 = this; var adapter = _extends(__WEBPACK_IMPORTED_MODULE_2__material_ripple_index__["MDCRipple"].createAdapter(this), { isUnbounded: function isUnbounded() { return true; }, isSurfaceActive: function isSurfaceActive() { return _this2.foundation_.isKeyboardActivated(); } }); var foundation = new __WEBPACK_IMPORTED_MODULE_2__material_ripple_index__["MDCRippleFoundation"](adapter); return new __WEBPACK_IMPORTED_MODULE_2__material_ripple_index__["MDCRipple"](this.root_, foundation); } }, { key: 'destroy', value: function destroy() { this.ripple_.destroy(); _get(MDCIconToggle.prototype.__proto__ || Object.getPrototypeOf(MDCIconToggle.prototype), 'destroy', this).call(this); } /** @return {!MDCIconToggleFoundation} */ }, { key: 'getDefaultFoundation', value: function getDefaultFoundation() { var _this3 = this; return new __WEBPACK_IMPORTED_MODULE_1__foundation__["a" /* default */]({ addClass: function addClass(className) { return _this3.iconEl_.classList.add(className); }, removeClass: function removeClass(className) { return _this3.iconEl_.classList.remove(className); }, registerInteractionHandler: function registerInteractionHandler(type, handler) { return _this3.root_.addEventListener(type, handler); }, deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) { return _this3.root_.removeEventListener(type, handler); }, setText: function setText(text) { return _this3.iconEl_.textContent = text; }, getTabIndex: function getTabIndex() { return (/* number */_this3.root_.tabIndex ); }, setTabIndex: function setTabIndex(tabIndex) { return _this3.root_.tabIndex = tabIndex; }, getAttr: function getAttr(name, value) { return _this3.root_.getAttribute(name, value); }, setAttr: function setAttr(name, value) { return _this3.root_.setAttribute(name, value); }, rmAttr: function rmAttr(name) { return _this3.root_.removeAttribute(name); }, notifyChange: function notifyChange(evtData) { return _this3.emit(__WEBPACK_IMPORTED_MODULE_1__foundation__["a" /* default */].strings.CHANGE_EVENT, evtData); } }); } }, { key: 'initialSyncWithDOM', value: function initialSyncWithDOM() { this.on = this.root_.getAttribute(__WEBPACK_IMPORTED_MODULE_1__foundation__["a" /* default */].strings.ARIA_PRESSED) === 'true'; this.disabled = this.root_.getAttribute(__WEBPACK_IMPORTED_MODULE_1__foundation__["a" /* default */].strings.ARIA_DISABLED) === 'true'; } /** @return {!MDCRipple} */ }, { key: 'refreshToggleData', value: function refreshToggleData() { this.foundation_.refreshToggleData(); } }, { key: 'iconEl_', get: function get() { var sel = this.root_.dataset['iconInnerSelector']; return sel ? /** @type {!Element} */this.root_.querySelector(sel) : this.root_; } }, { key: 'ripple', get: function get() { return this.ripple_; } /** @return {boolean} */ }, { key: 'on', get: function get() { return this.foundation_.isOn(); } /** @param {boolean} isOn */ , set: function set(isOn) { this.foundation_.toggle(isOn); } /** @return {boolean} */ }, { key: 'disabled', get: function get() { return this.foundation_.isDisabled(); } /** @param {boolean} isDisabled */ , set: function set(isDisabled) { this.foundation_.setDisabled(isDisabled); } }]); return MDCIconToggle; }(__WEBPACK_IMPORTED_MODULE_0__material_base_component__["a" /* default */]); /***/ }), /***/ 123: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__material_base_foundation__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__adapter__ = __webpack_require__(124); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constants__ = __webpack_require__(125); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* eslint-disable no-unused-vars */ /** * @extends {MDCFoundation<!MDCIconToggleAdapter>} */ var MDCIconToggleFoundation = function (_MDCFoundation) { _inherits(MDCIconToggleFoundation, _MDCFoundation); _createClass(MDCIconToggleFoundation, null, [{ key: 'cssClasses', get: function get() { return __WEBPACK_IMPORTED_MODULE_2__constants__["a" /* cssClasses */]; } }, { key: 'strings', get: function get() { return __WEBPACK_IMPORTED_MODULE_2__constants__["b" /* strings */]; } }, { key: 'defaultAdapter', get: function get() { return { addClass: function addClass() /* className: string */{}, removeClass: function removeClass() /* className: string */{}, registerInteractionHandler: function registerInteractionHandler() /* type: string, handler: EventListener */{}, deregisterInteractionHandler: function deregisterInteractionHandler() /* type: string, handler: EventListener */{}, setText: function setText() /* text: string */{}, getTabIndex: function getTabIndex() { return (/* number */0 ); }, setTabIndex: function setTabIndex() /* tabIndex: number */{}, getAttr: function getAttr() { return (/* name: string */ /* string */'' ); }, setAttr: function setAttr() /* name: string, value: string */{}, rmAttr: function rmAttr() /* name: string */{}, notifyChange: function notifyChange() /* evtData: IconToggleEvent */{} }; } }]); function MDCIconToggleFoundation(adapter) { _classCallCheck(this, MDCIconToggleFoundation); /** @private {boolean} */ var _this = _possibleConstructorReturn(this, (MDCIconToggleFoundation.__proto__ || Object.getPrototypeOf(MDCIconToggleFoundation)).call(this, _extends(MDCIconToggleFoundation.defaultAdapter, adapter))); _this.on_ = false; /** @private {boolean} */ _this.disabled_ = false; /** @private {number} */ _this.savedTabIndex_ = -1; /** @private {?IconToggleState} */ _this.toggleOnData_ = null; /** @private {?IconToggleState} */ _this.toggleOffData_ = null; _this.clickHandler_ = /** @private {!EventListener} */function () { return _this.toggleFromEvt_(); }; /** @private {boolean} */ _this.isHandlingKeydown_ = false; _this.keydownHandler_ = /** @private {!EventListener} */function ( /** @type {!KeyboardKey} */evt) { if (isSpace(evt)) { _this.isHandlingKeydown_ = true; return evt.preventDefault(); } }; _this.keyupHandler_ = /** @private {!EventListener} */function ( /** @type {!KeyboardKey} */evt) { if (isSpace(evt)) { _this.isHandlingKeydown_ = false; _this.toggleFromEvt_(); } }; return _this; } _createClass(MDCIconToggleFoundation, [{ key: 'init', value: function init() { this.refreshToggleData(); this.savedTabIndex_ = this.adapter_.getTabIndex(); this.adapter_.registerInteractionHandler('click', this.clickHandler_); this.adapter_.registerInteractionHandler('keydown', this.keydownHandler_); this.adapter_.registerInteractionHandler('keyup', this.keyupHandler_); } }, { key: 'refreshToggleData', value: function refreshToggleData() { var _MDCIconToggleFoundat = MDCIconToggleFoundation.strings, DATA_TOGGLE_ON = _MDCIconToggleFoundat.DATA_TOGGLE_ON, DATA_TOGGLE_OFF = _MDCIconToggleFoundat.DATA_TOGGLE_OFF; this.toggleOnData_ = this.parseJsonDataAttr_(DATA_TOGGLE_ON); this.toggleOffData_ = this.parseJsonDataAttr_(DATA_TOGGLE_OFF); } }, { key: 'destroy', value: function destroy() { this.adapter_.deregisterInteractionHandler('click', this.clickHandler_); this.adapter_.deregisterInteractionHandler('keydown', this.keydownHandler_); this.adapter_.deregisterInteractionHandler('keyup', this.keyupHandler_); } /** @private */ }, { key: 'toggleFromEvt_', value: function toggleFromEvt_() { this.toggle(); var isOn = this.on_; this.adapter_.notifyChange( /** @type {!IconToggleEvent} */{ isOn: isOn }); } /** @return {boolean} */ }, { key: 'isOn', value: function isOn() { return this.on_; } /** @param {boolean=} isOn */ }, { key: 'toggle', value: function toggle() { var isOn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !this.on_; this.on_ = isOn; var _MDCIconToggleFoundat2 = MDCIconToggleFoundation.strings, ARIA_LABEL = _MDCIconToggleFoundat2.ARIA_LABEL, ARIA_PRESSED = _MDCIconToggleFoundat2.ARIA_PRESSED; if (this.on_) { this.adapter_.setAttr(ARIA_PRESSED, 'true'); } else { this.adapter_.setAttr(ARIA_PRESSED, 'false'); } var _ref = this.on_ ? this.toggleOffData_ : this.toggleOnData_, classToRemove = _ref.cssClass; if (classToRemove) { this.adapter_.removeClass(classToRemove); } var _ref2 = this.on_ ? this.toggleOnData_ : this.toggleOffData_, content = _ref2.content, label = _ref2.label, cssClass = _ref2.cssClass; if (cssClass) { this.adapter_.addClass(cssClass); } if (content) { this.adapter_.setText(content); } if (label) { this.adapter_.setAttr(ARIA_LABEL, label); } } /** * @param {string} dataAttr * @return {!IconToggleState} */ }, { key: 'parseJsonDataAttr_', value: function parseJsonDataAttr_(dataAttr) { var val = this.adapter_.getAttr(dataAttr); if (!val) { return {}; } return (/** @type {!IconToggleState} */JSON.parse(val) ); } /** @return {boolean} */ }, { key: 'isDisabled', value: function isDisabled() { return this.disabled_; } /** @param {boolean} isDisabled */ }, { key: 'setDisabled', value: function setDisabled(isDisabled) { this.disabled_ = isDisabled; var DISABLED = MDCIconToggleFoundation.cssClasses.DISABLED; var ARIA_DISABLED = MDCIconToggleFoundation.strings.ARIA_DISABLED; if (this.disabled_) { this.savedTabIndex_ = this.adapter_.getTabIndex(); this.adapter_.setTabIndex(-1); this.adapter_.setAttr(ARIA_DISABLED, 'true'); this.adapter_.addClass(DISABLED); } else { this.adapter_.setTabIndex(this.savedTabIndex_); this.adapter_.rmAttr(ARIA_DISABLED); this.adapter_.removeClass(DISABLED); } } /** @return {boolean} */ }, { key: 'isKeyboardActivated', value: function isKeyboardActivated() { return this.isHandlingKeydown_; } }]); return MDCIconToggleFoundation; }(__WEBPACK_IMPORTED_MODULE_0__material_base_foundation__["a" /* default */]); /** * @typedef {{ * key: string, * keyCode: number * }} */ var KeyboardKey = void 0; /** * @param {!KeyboardKey} keyboardKey * @return {boolean} */ function isSpace(keyboardKey) { return keyboardKey.key === 'Space' || keyboardKey.keyCode === 32; } /** @record */ var IconToggleState = function IconToggleState() { _classCallCheck(this, IconToggleState); }; /** * The aria-label value of the icon toggle, or undefined if there is no aria-label. * @export {string|undefined} */ IconToggleState.prototype.label; /** * The text for the icon toggle, or undefined if there is no text. * @export {string|undefined} */ IconToggleState.prototype.content; /** * The CSS class to add to the icon toggle, or undefined if there is no CSS class. * @export {string|undefined} */ IconToggleState.prototype.cssClass; /* harmony default export */ __webpack_exports__["a"] = (MDCIconToggleFoundation); /***/ }), /***/ 124: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export MDCIconToggleAdapter */ /* unused harmony export IconToggleEvent */ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * @license * Copyright 2017 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* eslint no-unused-vars: [2, {"args": "none"}] */ /** * Adapter for MDC Icon Toggle. Provides an interface for managing * - classes * - dom * - inner text * - event handlers * - event dispatch * * Additionally, provides type information for the adapter to the Closure * compiler. * * Implement this adapter for your framework of choice to delegate updates to * the component in your framework of choice. See architecture documentation * for more details. * https://github.com/material-components/material-components-web/blob/master/docs/code/architecture.md * * @record */ var MDCIconToggleAdapter = function () { function MDCIconToggleAdapter() { _classCallCheck(this, MDCIconToggleAdapter); } _createClass(MDCIconToggleAdapter, [{ key: "addClass", /** @param {string} className */ value: function addClass(className) {} /** @param {string} className */ }, { key: "removeClass", value: function removeClass(className) {} /** * @param {string} type * @param {!EventListener} handler */ }, { key: "registerInteractionHandler", value: function registerInteractionHandler(type, handler) {} /** * @param {string} type * @param {!EventListener} handler */ }, { key: "deregisterInteractionHandler", value: function deregisterInteractionHandler(type, handler) {} /** @param {string} text */ }, { key: "setText", value: function setText(text) {} /** @return {number} */ }, { key: "getTabIndex", value: function getTabIndex() {} /** @param {number} tabIndex */ }, { key: "setTabIndex", value: function setTabIndex(tabIndex) {} /** * @param {string} name * @return {string} */ }, { key: "getAttr", value: function getAttr(name) {} /** * @param {string} name * @param {string} value */ }, { key: "setAttr", value: function setAttr(name, value) {} /** @param {string} name */ }, { key: "rmAttr", value: function rmAttr(name) {} /** @param {!IconToggleEvent} evtData */ }, { key: "notifyChange", value: function notifyChange(evtData) {} }]); return MDCIconToggleAdapter; }(); /** * @typedef {{ * isOn: boolean, * }} */ var IconToggleEvent = void 0; /***/ }), /***/ 125: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return cssClasses; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return strings; }); /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** @enum {string} */ var cssClasses = { ROOT: 'mdc-icon-toggle', DISABLED: 'mdc-icon-toggle--disabled' }; /** @enum {string} */ var strings = { DATA_TOGGLE_ON: 'data-toggle-on', DATA_TOGGLE_OFF: 'data-toggle-off', ARIA_PRESSED: 'aria-pressed', ARIA_DISABLED: 'aria-disabled', ARIA_LABEL: 'aria-label', CHANGE_EVENT: 'MDCIconToggle:change' }; /***/ }), /***/ 2: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "supportsCssVariables", function() { return supportsCssVariables; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyPassive", function() { return applyPassive; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMatchesProperty", function() { return getMatchesProperty; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNormalizedEventCoords", function() { return getNormalizedEventCoords; }); /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * Stores result from supportsCssVariables to avoid redundant processing to detect CSS custom variable support. * @private {boolean|undefined} */ var supportsCssVariables_ = void 0; /** * Stores result from applyPassive to avoid redundant processing to detect passive event listener support. * @private {boolean|undefined} */ var supportsPassive_ = void 0; /** * @param {!Window} windowObj * @return {boolean} */ function detectEdgePseudoVarBug(windowObj) { // Detect versions of Edge with buggy var() support // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/ var document = windowObj.document; var node = document.createElement('div'); node.className = 'mdc-ripple-surface--test-edge-var-bug'; document.body.appendChild(node); // The bug exists if ::before style ends up propagating to the parent element. // Additionally, getComputedStyle returns null in iframes with display: "none" in Firefox, // but Firefox is known to support CSS custom properties correctly. // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397 var computedStyle = windowObj.getComputedStyle(node); var hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid'; node.remove(); return hasPseudoVarBug; } /** * @param {!Window} windowObj * @param {boolean=} forceRefresh * @return {boolean|undefined} */ function supportsCssVariables(windowObj) { var forceRefresh = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var supportsCssVariables = supportsCssVariables_; if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) { return supportsCssVariables; } var supportsFunctionPresent = windowObj.CSS && typeof windowObj.CSS.supports === 'function'; if (!supportsFunctionPresent) { return; } var explicitlySupportsCssVars = windowObj.CSS.supports('--css-vars', 'yes'); // See: https://bugs.webkit.org/show_bug.cgi?id=154669 // See: README section on Safari var weAreFeatureDetectingSafari10plus = windowObj.CSS.supports('(--css-vars: yes)') && windowObj.CSS.supports('color', '#00000000'); if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) { supportsCssVariables = !detectEdgePseudoVarBug(windowObj); } else { supportsCssVariables = false; } if (!forceRefresh) { supportsCssVariables_ = supportsCssVariables; } return supportsCssVariables; } // /** * Determine whether the current browser supports passive event listeners, and if so, use them. * @param {!Window=} globalObj * @param {boolean=} forceRefresh * @return {boolean|!EventListenerOptions} */ function applyPassive() { var globalObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window; var forceRefresh = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (supportsPassive_ === undefined || forceRefresh) { var isSupported = false; try { globalObj.document.addEventListener('test', null, { get passive() { isSupported = true; return isSupported; } }); } catch (e) {} supportsPassive_ = isSupported; } return supportsPassive_ ? /** @type {!EventListenerOptions} */{ passive: true } : false; } /** * @param {!Object} HTMLElementPrototype * @return {string} */ function getMatchesProperty(HTMLElementPrototype) { /** * Order is important because we return the first existing method we find. * Do not change the order of the items in the below array. */ var matchesMethods = ['matches', 'webkitMatchesSelector', 'msMatchesSelector']; var method = 'matches'; for (var i = 0; i < matchesMethods.length; i++) { var matchesMethod = matchesMethods[i]; if (matchesMethod in HTMLElementPrototype) { method = matchesMethod; break; } } return method; } /** * @param {!Event} ev * @param {{x: number, y: number}} pageOffset * @param {!ClientRect} clientRect * @return {{x: number, y: number}} */ function getNormalizedEventCoords(ev, pageOffset, clientRect) { var x = pageOffset.x, y = pageOffset.y; var documentX = x + clientRect.left; var documentY = y + clientRect.top; var normalizedX = void 0; var normalizedY = void 0; // Determine touch point relative to the ripple container. if (ev.type === 'touchstart') { ev = /** @type {!TouchEvent} */ev; normalizedX = ev.changedTouches[0].pageX - documentX; normalizedY = ev.changedTouches[0].pageY - documentY; } else { ev = /** @type {!MouseEvent} */ev; normalizedX = ev.pageX - documentX; normalizedY = ev.pageY - documentY; } return { x: normalizedX, y: normalizedY }; } /***/ }), /***/ 3: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * @license * Copyright 2016 Google Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /* eslint no-unused-vars: [2, {"args": "none"}] */ /** * Adapter for MDC Ripple. Provides an interface for managing * - classes * - dom * - CSS variables * - position * - dimensions * - scroll position * - event handlers * - unbounded, active and disabled states * * Additionally, provides type information for the adapter to the Closure * compiler. * * Implement this adapter for your framework of choice to delegate updates to * the component in your framework of choice. See architecture documentation * for more details. * https://github.com/material-components/material-components-web/blob/master/docs/code/architecture.md * * @record */ var MDCRippleAdapter = function () { function MDCRippleAdapter() { _classCallCheck(this, MDCRippleAdapter); } _createClass(MDCRippleAdapter, [{ key: "browserSupportsCssVars", /** @return {boolean} */ value: function browserSupportsCssVars() {} /** @return {boolean} */ }, { key: "isUnbounded", value: function isUnbounded() {} /** @return {boolean} */ }, { key: "isSurfaceActive", value: function isSurfaceActive() {} /** @return {boolean} */ }, { key: "isSurfaceDisabled", value: function isSurfaceDisabled() {} /** @param {string} className */ },