material_components_web-sass 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59f1f332cb247cd990daa0eb55e74a2c6ee66a97
4
- data.tar.gz: 688dbe9025f3e7d289bb129e496f1a3d05acfeb4
3
+ metadata.gz: bf304e5a7f4fb9aa0e5ca3694feaffd6f15fe86a
4
+ data.tar.gz: 31b7b07dd10423a6a93a849edce4686bb262428b
5
5
  SHA512:
6
- metadata.gz: 383cb970896719d80de84c2cc8adab4e2525dce76cc747465e600f19c58c40cc0406648b8f55739eef0ed82d6fa3b44e7e89a74dc5ca4a6f3488f10dc8f10e5e
7
- data.tar.gz: '08a151b718467b56e3c591f7e06f135a2b551190fca774a5986fcb719d3c0b897244f55a6e59d309e2d3f405cf10dbb7c2520b3305872ef36d82ff848044c20a'
6
+ metadata.gz: 8cc879dc83a2e975c89d3d538e171f2cc9c09637626982b773a65c4223d2704b61b85475d47c7ef797755d4c4147d4dba269678b1fe161b72ab41d0ebd3f9061
7
+ data.tar.gz: 4fded022b8095bf9438b3e49ad4df55fa4e85ac97ccca778c9690a87dfd19765113116c1780236a331c059d24c74ddd2d74c514247c9c5874e1148b7d1f04504
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.4.0 (2017-02-07)
2
+
3
+ - Update assets to match upstream version
4
+
5
+ Library version:
6
+
7
+ - Material Components for the web v0.4.0
8
+ - Material Icons v3.0.0
9
+
1
10
  ## 0.3.0 (2017-01-24)
2
11
 
3
12
  - Update assets to match upstream version
data/README.md CHANGED
@@ -51,12 +51,14 @@ Individual Sass components can be included like this:
51
51
  @import "@material/fab/mdc-fab";
52
52
  @import "@material/form-field/mdc-form-field";
53
53
  @import "@material/icon-toggle/mdc-icon-toggle";
54
+ @import "@material/layout-grid/mdc-layout-grid";
54
55
  @import "@material/list/mdc-list";
55
56
  @import "@material/menu/mdc-menu";
56
57
  @import "@material/radio/mdc-radio";
57
58
  @import "@material/ripple/mdc-ripple";
58
59
  @import "@material/select/mdc-select";
59
60
  @import "@material/snackbar/mdc-snackbar";
61
+ @import "@material/switch/mdc-switch";
60
62
  @import "@material/textfield/mdc-textfield";
61
63
  @import "@material/theme/mdc-theme";
62
64
  @import "@material/typography/mdc-typography";
@@ -1,5 +1,5 @@
1
1
  module MaterialComponentsWeb
2
2
  module Sass
3
- VERSION = '0.3.0'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
5
5
  end
@@ -74,7 +74,7 @@ return /******/ (function(modules) { // webpackBootstrap
74
74
 
75
75
  var checkbox = _interopRequireWildcard(_checkbox);
76
76
 
77
- var _iconToggle = __webpack_require__(8);
77
+ var _iconToggle = __webpack_require__(12);
78
78
 
79
79
  var iconToggle = _interopRequireWildcard(_iconToggle);
80
80
 
@@ -82,7 +82,7 @@ return /******/ (function(modules) { // webpackBootstrap
82
82
 
83
83
  var radio = _interopRequireWildcard(_radio);
84
84
 
85
- var _ripple = __webpack_require__(9);
85
+ var _ripple = __webpack_require__(5);
86
86
 
87
87
  var ripple = _interopRequireWildcard(_ripple);
88
88
 
@@ -415,13 +415,21 @@ return /******/ (function(modules) { // webpackBootstrap
415
415
  });
416
416
  exports.MDCCheckbox = exports.MDCCheckboxFoundation = undefined;
417
417
 
418
+ 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; };
419
+
420
+ 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); } };
421
+
418
422
  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; }; }();
419
423
 
420
424
  var _base = __webpack_require__(1);
421
425
 
422
- var _animation = __webpack_require__(5);
426
+ var _ripple = __webpack_require__(5);
423
427
 
424
- var _foundation = __webpack_require__(6);
428
+ var _util = __webpack_require__(9);
429
+
430
+ var _animation = __webpack_require__(7);
431
+
432
+ var _foundation = __webpack_require__(10);
425
433
 
426
434
  var _foundation2 = _interopRequireDefault(_foundation);
427
435
 
@@ -452,53 +460,113 @@ return /******/ (function(modules) { // webpackBootstrap
452
460
  var MDCCheckbox = exports.MDCCheckbox = function (_MDCComponent) {
453
461
  _inherits(MDCCheckbox, _MDCComponent);
454
462
 
463
+ _createClass(MDCCheckbox, [{
464
+ key: 'nativeCb_',
465
+ get: function get() {
466
+ var NATIVE_CONTROL_SELECTOR = _foundation2.default.strings.NATIVE_CONTROL_SELECTOR;
467
+
468
+ return this.root_.querySelector(NATIVE_CONTROL_SELECTOR);
469
+ }
470
+ }], [{
471
+ key: 'attachTo',
472
+ value: function attachTo(root) {
473
+ return new MDCCheckbox(root);
474
+ }
475
+ }]);
476
+
455
477
  function MDCCheckbox() {
478
+ var _ref;
479
+
456
480
  _classCallCheck(this, MDCCheckbox);
457
481
 
458
- return _possibleConstructorReturn(this, (MDCCheckbox.__proto__ || Object.getPrototypeOf(MDCCheckbox)).apply(this, arguments));
482
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
483
+ args[_key] = arguments[_key];
484
+ }
485
+
486
+ var _this = _possibleConstructorReturn(this, (_ref = MDCCheckbox.__proto__ || Object.getPrototypeOf(MDCCheckbox)).call.apply(_ref, [this].concat(args)));
487
+
488
+ _this.ripple_ = _this.initRipple_();
489
+ return _this;
459
490
  }
460
491
 
461
492
  _createClass(MDCCheckbox, [{
493
+ key: 'initRipple_',
494
+ value: function initRipple_() {
495
+ var _this2 = this;
496
+
497
+ var MATCHES = (0, _util.getMatchesProperty)(HTMLElement.prototype);
498
+ var adapter = _extends(_ripple.MDCRipple.createAdapter(this), {
499
+ isUnbounded: function isUnbounded() {
500
+ return true;
501
+ },
502
+ isSurfaceActive: function isSurfaceActive() {
503
+ return _this2.nativeCb_[MATCHES](':active');
504
+ },
505
+ registerInteractionHandler: function registerInteractionHandler(type, handler) {
506
+ return _this2.nativeCb_.addEventListener(type, handler);
507
+ },
508
+ deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) {
509
+ return _this2.nativeCb_.removeEventListener(type, handler);
510
+ },
511
+ computeBoundingRect: function computeBoundingRect() {
512
+ var _root_$getBoundingCli = _this2.root_.getBoundingClientRect(),
513
+ left = _root_$getBoundingCli.left,
514
+ top = _root_$getBoundingCli.top;
515
+
516
+ var DIM = 40;
517
+ return {
518
+ top: top,
519
+ left: left,
520
+ right: left + DIM,
521
+ bottom: top + DIM,
522
+ width: DIM,
523
+ height: DIM
524
+ };
525
+ }
526
+ });
527
+ var foundation = new _ripple.MDCRippleFoundation(adapter);
528
+ return new _ripple.MDCRipple(this.root_, foundation);
529
+ }
530
+ }, {
462
531
  key: 'getDefaultFoundation',
463
532
  value: function getDefaultFoundation() {
464
- var _this2 = this;
533
+ var _this3 = this;
465
534
 
466
535
  return new _foundation2.default({
467
536
  addClass: function addClass(className) {
468
- return _this2.root_.classList.add(className);
537
+ return _this3.root_.classList.add(className);
469
538
  },
470
539
  removeClass: function removeClass(className) {
471
- return _this2.root_.classList.remove(className);
540
+ return _this3.root_.classList.remove(className);
472
541
  },
473
542
  registerAnimationEndHandler: function registerAnimationEndHandler(handler) {
474
- return _this2.root_.addEventListener((0, _animation.getCorrectEventName)(window, 'animation'), handler);
543
+ return _this3.root_.addEventListener((0, _animation.getCorrectEventName)(window, 'animationend'), handler);
475
544
  },
476
545
  deregisterAnimationEndHandler: function deregisterAnimationEndHandler(handler) {
477
- return _this2.root_.removeEventListener((0, _animation.getCorrectEventName)(window, 'animation'), handler);
546
+ return _this3.root_.removeEventListener((0, _animation.getCorrectEventName)(window, 'animationend'), handler);
478
547
  },
479
548
  registerChangeHandler: function registerChangeHandler(handler) {
480
- return _this2.nativeCb_.addEventListener('change', handler);
549
+ return _this3.nativeCb_.addEventListener('change', handler);
481
550
  },
482
551
  deregisterChangeHandler: function deregisterChangeHandler(handler) {
483
- return _this2.nativeCb_.removeEventListener('change', handler);
552
+ return _this3.nativeCb_.removeEventListener('change', handler);
484
553
  },
485
554
  getNativeControl: function getNativeControl() {
486
- return _this2.nativeCb_;
555
+ return _this3.nativeCb_;
487
556
  },
488
557
  forceLayout: function forceLayout() {
489
- return _this2.root_.offsetWidth;
558
+ return _this3.root_.offsetWidth;
490
559
  },
491
560
  isAttachedToDOM: function isAttachedToDOM() {
492
- return Boolean(_this2.root_.parentNode);
561
+ return Boolean(_this3.root_.parentNode);
493
562
  }
494
563
  });
495
564
  }
496
565
  }, {
497
- key: 'nativeCb_',
498
- get: function get() {
499
- var NATIVE_CONTROL_SELECTOR = _foundation2.default.strings.NATIVE_CONTROL_SELECTOR;
500
-
501
- return this.root_.querySelector(NATIVE_CONTROL_SELECTOR);
566
+ key: 'destroy',
567
+ value: function destroy() {
568
+ this.ripple_.destroy();
569
+ _get(MDCCheckbox.prototype.__proto__ || Object.getPrototypeOf(MDCCheckbox.prototype), 'destroy', this).call(this);
502
570
  }
503
571
  }, {
504
572
  key: 'checked',
@@ -524,11 +592,6 @@ return /******/ (function(modules) { // webpackBootstrap
524
592
  set: function set(disabled) {
525
593
  this.foundation_.setDisabled(disabled);
526
594
  }
527
- }], [{
528
- key: 'attachTo',
529
- value: function attachTo(root) {
530
- return new MDCCheckbox(root);
531
- }
532
595
  }]);
533
596
 
534
597
  return MDCCheckbox;
@@ -536,138 +599,6 @@ return /******/ (function(modules) { // webpackBootstrap
536
599
 
537
600
  /***/ },
538
601
  /* 5 */
539
- /***/ function(module, exports) {
540
-
541
- 'use strict';
542
-
543
- Object.defineProperty(exports, "__esModule", {
544
- value: true
545
- });
546
- exports.getCorrectEventName = getCorrectEventName;
547
- exports.getCorrectPropertyName = getCorrectPropertyName;
548
- /**
549
- * Copyright 2016 Google Inc. All Rights Reserved.
550
- *
551
- * Licensed under the Apache License, Version 2.0 (the "License");
552
- * you may not use this file except in compliance with the License.
553
- * You may obtain a copy of the License at
554
- *
555
- * http://www.apache.org/licenses/LICENSE-2.0
556
- *
557
- * Unless required by applicable law or agreed to in writing, software
558
- * distributed under the License is distributed on an "AS IS" BASIS,
559
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
560
- * See the License for the specific language governing permissions and
561
- * limitations under the License.
562
- */
563
-
564
- var eventTypeMap = {
565
- animationstart: {
566
- noPrefix: 'animationstart',
567
- webkitPrefix: 'webkitAnimationStart'
568
- },
569
- animationend: {
570
- noPrefix: 'animationend',
571
- webkitPrefix: 'webkitAnimationEnd'
572
- },
573
- animationiteration: {
574
- noPrefix: 'animationiteration',
575
- webkitPrefix: 'webkitAnimationIteration'
576
- },
577
- transitionend: {
578
- noPrefix: 'transitionend',
579
- webkitPrefix: 'webkitTransitionEnd'
580
- }
581
- };
582
-
583
- var cssPropertyMap = {
584
- animation: {
585
- noPrefix: 'animation',
586
- webkitPrefix: '-webkit-animation'
587
- },
588
- transform: {
589
- noPrefix: 'transform',
590
- webkitPrefix: '-webkit-transform'
591
- },
592
- transition: {
593
- noPrefix: 'transition',
594
- webkitPrefix: '-webkit-transition'
595
- }
596
- };
597
-
598
- function hasProperShape(windowObj) {
599
- return windowObj.document !== undefined && typeof windowObj.document.createElement === 'function';
600
- }
601
-
602
- function eventFoundInMaps(eventType) {
603
- return eventType in eventTypeMap || eventType in cssPropertyMap;
604
- }
605
-
606
- // If 'animation' or 'transition' exist as style property, webkit prefix isn't necessary. Since we are unable to
607
- // see the event types on the element, we must rely on the corresponding style properties.
608
- function getJavaScriptEventName(eventType, map, el) {
609
- switch (eventType) {
610
- case 'animationstart':
611
- case 'animationend':
612
- case 'animationiteration':
613
- return 'animation' in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
614
- case 'transitionend':
615
- return 'transition' in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
616
- default:
617
- return map[eventType].noPrefix;
618
- }
619
- }
620
-
621
- // Helper function to determine browser prefix for CSS3 animation events
622
- // and property names
623
- //
624
- // Parameters:
625
- // windowObject: Object -- Contains Document with a `createElement()` method
626
- // eventType: string -- The type of animation
627
- //
628
- // returns the value of the event as a string, prefixed if necessary.
629
- // If proper arguments are not supplied, this function will return
630
- // the property or event type without webkit prefix.
631
- //
632
- function getAnimationName(windowObj, eventType) {
633
- if (!hasProperShape(windowObj) || !eventFoundInMaps(eventType)) {
634
- return eventType;
635
- }
636
-
637
- var map = eventType in eventTypeMap ? eventTypeMap : cssPropertyMap;
638
- var el = windowObj.document.createElement('div');
639
- var eventName = '';
640
-
641
- if (map === eventTypeMap) {
642
- eventName = getJavaScriptEventName(eventType, map, el);
643
- } else {
644
- eventName = map[eventType].noPrefix in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
645
- }
646
-
647
- return eventName;
648
- }
649
-
650
- // Public functions to access getAnimationName() for JavaScript events or CSS
651
- // property names.
652
- //
653
- // Parameters:
654
- // windowObject: Object -- Contains Document with a `createElement()` method
655
- // eventType: string -- The type of animation
656
- //
657
- // returns the value of the event as a string, prefixed if necessary.
658
- // If proper arguments are not supplied, this function will return
659
- // the property or event type without webkit prefix.
660
- //
661
- function getCorrectEventName(windowObj, eventType) {
662
- return getAnimationName(windowObj, eventType);
663
- }
664
-
665
- function getCorrectPropertyName(windowObj, eventType) {
666
- return getAnimationName(windowObj, eventType);
667
- }
668
-
669
- /***/ },
670
- /* 6 */
671
602
  /***/ function(module, exports, __webpack_require__) {
672
603
 
673
604
  'use strict';
@@ -675,14 +606,19 @@ return /******/ (function(modules) { // webpackBootstrap
675
606
  Object.defineProperty(exports, "__esModule", {
676
607
  value: true
677
608
  });
678
-
679
- 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; };
609
+ exports.MDCRipple = exports.MDCRippleFoundation = undefined;
680
610
 
681
611
  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; }; }();
682
612
 
683
613
  var _base = __webpack_require__(1);
684
614
 
685
- var _constants = __webpack_require__(7);
615
+ var _foundation = __webpack_require__(6);
616
+
617
+ var _foundation2 = _interopRequireDefault(_foundation);
618
+
619
+ var _util = __webpack_require__(9);
620
+
621
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
686
622
 
687
623
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
688
624
 
@@ -704,238 +640,607 @@ return /******/ (function(modules) { // webpackBootstrap
704
640
  * limitations under the License.
705
641
  */
706
642
 
707
- var CB_PROTO_PROPS = ['checked', 'indeterminate'];
643
+ var MATCHES = (0, _util.getMatchesProperty)(HTMLElement.prototype);
708
644
 
709
- var MDCCheckboxFoundation = function (_MDCFoundation) {
710
- _inherits(MDCCheckboxFoundation, _MDCFoundation);
645
+ exports.MDCRippleFoundation = _foundation2.default;
711
646
 
712
- _createClass(MDCCheckboxFoundation, null, [{
713
- key: 'cssClasses',
714
- get: function get() {
715
- return _constants.cssClasses;
647
+ var MDCRipple = exports.MDCRipple = function (_MDCComponent) {
648
+ _inherits(MDCRipple, _MDCComponent);
649
+
650
+ function MDCRipple() {
651
+ _classCallCheck(this, MDCRipple);
652
+
653
+ return _possibleConstructorReturn(this, (MDCRipple.__proto__ || Object.getPrototypeOf(MDCRipple)).apply(this, arguments));
654
+ }
655
+
656
+ _createClass(MDCRipple, [{
657
+ key: 'getDefaultFoundation',
658
+ value: function getDefaultFoundation() {
659
+ return new _foundation2.default(MDCRipple.createAdapter(this));
716
660
  }
717
661
  }, {
718
- key: 'strings',
719
- get: function get() {
720
- return _constants.strings;
662
+ key: 'initialSyncWithDOM',
663
+ value: function initialSyncWithDOM() {
664
+ this.unbounded = 'mdcRippleIsUnbounded' in this.root_.dataset;
721
665
  }
722
666
  }, {
723
- key: 'numbers',
667
+ key: 'unbounded',
724
668
  get: function get() {
725
- return _constants.numbers;
669
+ return this.unbounded_;
670
+ },
671
+ set: function set(unbounded) {
672
+ var UNBOUNDED = _foundation2.default.cssClasses.UNBOUNDED;
673
+
674
+ this.unbounded_ = Boolean(unbounded);
675
+ if (this.unbounded_) {
676
+ this.root_.classList.add(UNBOUNDED);
677
+ } else {
678
+ this.root_.classList.remove(UNBOUNDED);
679
+ }
680
+ }
681
+ }], [{
682
+ key: 'attachTo',
683
+ value: function attachTo(root) {
684
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
685
+ _ref$isUnbounded = _ref.isUnbounded,
686
+ isUnbounded = _ref$isUnbounded === undefined ? undefined : _ref$isUnbounded;
687
+
688
+ var ripple = new MDCRipple(root);
689
+ // Only override unbounded behavior if option is explicitly specified
690
+ if (isUnbounded !== undefined) {
691
+ ripple.unbounded = isUnbounded;
692
+ }
693
+ return ripple;
694
+ }
695
+ }, {
696
+ key: 'createAdapter',
697
+ value: function createAdapter(instance) {
698
+ return {
699
+ browserSupportsCssVars: function browserSupportsCssVars() {
700
+ return (0, _util.supportsCssVariables)(window);
701
+ },
702
+ isUnbounded: function isUnbounded() {
703
+ return instance.unbounded;
704
+ },
705
+ isSurfaceActive: function isSurfaceActive() {
706
+ return instance.root_[MATCHES](':active');
707
+ },
708
+ addClass: function addClass(className) {
709
+ return instance.root_.classList.add(className);
710
+ },
711
+ removeClass: function removeClass(className) {
712
+ return instance.root_.classList.remove(className);
713
+ },
714
+ registerInteractionHandler: function registerInteractionHandler(evtType, handler) {
715
+ return instance.root_.addEventListener(evtType, handler);
716
+ },
717
+ deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {
718
+ return instance.root_.removeEventListener(evtType, handler);
719
+ },
720
+ registerResizeHandler: function registerResizeHandler(handler) {
721
+ return window.addEventListener('resize', handler);
722
+ },
723
+ deregisterResizeHandler: function deregisterResizeHandler(handler) {
724
+ return window.removeEventListener('resize', handler);
725
+ },
726
+ updateCssVariable: function updateCssVariable(varName, value) {
727
+ return instance.root_.style.setProperty(varName, value);
728
+ },
729
+ computeBoundingRect: function computeBoundingRect() {
730
+ return instance.root_.getBoundingClientRect();
731
+ },
732
+ getWindowPageOffset: function getWindowPageOffset() {
733
+ return { x: window.pageXOffset, y: window.pageYOffset };
734
+ }
735
+ };
736
+ }
737
+ }]);
738
+
739
+ return MDCRipple;
740
+ }(_base.MDCComponent);
741
+
742
+ /***/ },
743
+ /* 6 */
744
+ /***/ function(module, exports, __webpack_require__) {
745
+
746
+ 'use strict';
747
+
748
+ Object.defineProperty(exports, "__esModule", {
749
+ value: true
750
+ });
751
+
752
+ 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; };
753
+
754
+ 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; }; }();
755
+
756
+ var _base = __webpack_require__(1);
757
+
758
+ var _animation = __webpack_require__(7);
759
+
760
+ var _constants = __webpack_require__(8);
761
+
762
+ var _util = __webpack_require__(9);
763
+
764
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
765
+
766
+ 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; }
767
+
768
+ 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; } /**
769
+ * Copyright 2016 Google Inc. All Rights Reserved.
770
+ *
771
+ * Licensed under the Apache License, Version 2.0 (the "License");
772
+ * you may not use this file except in compliance with the License.
773
+ * You may obtain a copy of the License at
774
+ *
775
+ * http://www.apache.org/licenses/LICENSE-2.0
776
+ *
777
+ * Unless required by applicable law or agreed to in writing, software
778
+ * distributed under the License is distributed on an "AS IS" BASIS,
779
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
780
+ * See the License for the specific language governing permissions and
781
+ * limitations under the License.
782
+ */
783
+
784
+ var DEACTIVATION_ACTIVATION_PAIRS = {
785
+ mouseup: 'mousedown',
786
+ pointerup: 'pointerdown',
787
+ touchend: 'touchstart',
788
+ keyup: 'keydown',
789
+ blur: 'focus'
790
+ };
791
+
792
+ var MDCRippleFoundation = function (_MDCFoundation) {
793
+ _inherits(MDCRippleFoundation, _MDCFoundation);
794
+
795
+ _createClass(MDCRippleFoundation, [{
796
+ key: 'isSupported_',
797
+
798
+
799
+ // We compute this property so that we are not querying information about the client
800
+ // until the point in time where the foundation requests it. This prevents scenarios where
801
+ // client-side feature-detection may happen too early, such as when components are rendered on the server
802
+ // and then initialized at mount time on the client.
803
+ get: function get() {
804
+ return this.adapter_.browserSupportsCssVars();
805
+ }
806
+ }], [{
807
+ key: 'cssClasses',
808
+ get: function get() {
809
+ return _constants.cssClasses;
810
+ }
811
+ }, {
812
+ key: 'strings',
813
+ get: function get() {
814
+ return _constants.strings;
815
+ }
816
+ }, {
817
+ key: 'numbers',
818
+ get: function get() {
819
+ return _constants.numbers;
726
820
  }
727
821
  }, {
728
822
  key: 'defaultAdapter',
729
823
  get: function get() {
730
824
  return {
825
+ browserSupportsCssVars: function browserSupportsCssVars() /* boolean - cached */{},
826
+ isUnbounded: function isUnbounded() /* boolean */{},
827
+ isSurfaceActive: function isSurfaceActive() /* boolean */{},
731
828
  addClass: function addClass() /* className: string */{},
732
829
  removeClass: function removeClass() /* className: string */{},
733
- registerAnimationEndHandler: function registerAnimationEndHandler() /* handler: EventListener */{},
734
- deregisterAnimationEndHandler: function deregisterAnimationEndHandler() /* handler: EventListener */{},
735
- registerChangeHandler: function registerChangeHandler() /* handler: EventListener */{},
736
- deregisterChangeHandler: function deregisterChangeHandler() /* handler: EventListener */{},
737
- getNativeControl: function getNativeControl() /* HTMLInputElement */{},
738
- forceLayout: function forceLayout() {},
739
- isAttachedToDOM: function isAttachedToDOM() /* boolean */{}
830
+ registerInteractionHandler: function registerInteractionHandler() /* evtType: string, handler: EventListener */{},
831
+ deregisterInteractionHandler: function deregisterInteractionHandler() /* evtType: string, handler: EventListener */{},
832
+ registerResizeHandler: function registerResizeHandler() /* handler: EventListener */{},
833
+ deregisterResizeHandler: function deregisterResizeHandler() /* handler: EventListener */{},
834
+ updateCssVariable: function updateCssVariable() /* varName: string, value: string */{},
835
+ computeBoundingRect: function computeBoundingRect() /* ClientRect */{},
836
+ getWindowPageOffset: function getWindowPageOffset() /* {x: number, y: number} */{}
740
837
  };
741
838
  }
742
839
  }]);
743
840
 
744
- function MDCCheckboxFoundation(adapter) {
745
- _classCallCheck(this, MDCCheckboxFoundation);
841
+ function MDCRippleFoundation(adapter) {
842
+ _classCallCheck(this, MDCRippleFoundation);
746
843
 
747
- var _this = _possibleConstructorReturn(this, (MDCCheckboxFoundation.__proto__ || Object.getPrototypeOf(MDCCheckboxFoundation)).call(this, _extends(MDCCheckboxFoundation.defaultAdapter, adapter)));
844
+ var _this = _possibleConstructorReturn(this, (MDCRippleFoundation.__proto__ || Object.getPrototypeOf(MDCRippleFoundation)).call(this, _extends(MDCRippleFoundation.defaultAdapter, adapter)));
748
845
 
749
- _this.currentCheckState_ = _constants.strings.TRANSITION_STATE_INIT;
750
- _this.currentAnimationClass_ = '';
751
- _this.animEndLatchTimer_ = 0;
752
- _this.animEndHandler_ = function () {
753
- clearTimeout(_this.animEndLatchTimer_);
754
- _this.animEndLatchTimer_ = setTimeout(function () {
755
- _this.adapter_.removeClass(_this.currentAnimationClass_);
756
- _this.adapter_.deregisterAnimationEndHandler(_this.animEndHandler_);
757
- }, _constants.numbers.ANIM_END_LATCH_MS);
846
+ _this.layoutFrame_ = 0;
847
+ _this.frame_ = { width: 0, height: 0 };
848
+ _this.activationState_ = _this.defaultActivationState_();
849
+ _this.xfDuration_ = 0;
850
+ _this.initialSize_ = 0;
851
+ _this.maxRadius_ = 0;
852
+ _this.listenerInfos_ = [{ activate: 'touchstart', deactivate: 'touchend' }, { activate: 'pointerdown', deactivate: 'pointerup' }, { activate: 'mousedown', deactivate: 'mouseup' }, { activate: 'keydown', deactivate: 'keyup' }, { focus: 'focus', blur: 'blur' }];
853
+ _this.listeners_ = {
854
+ activate: function activate(e) {
855
+ return _this.activate_(e);
856
+ },
857
+ deactivate: function deactivate(e) {
858
+ return _this.deactivate_(e);
859
+ },
860
+ focus: function focus() {
861
+ return requestAnimationFrame(function () {
862
+ return _this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_ACTIVE);
863
+ });
864
+ },
865
+ blur: function blur() {
866
+ return requestAnimationFrame(function () {
867
+ return _this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_ACTIVE);
868
+ });
869
+ }
758
870
  };
759
- _this.changeHandler_ = function () {
760
- return _this.transitionCheckState_();
871
+ _this.unboundedOpacityFadeTimer_ = 0;
872
+ _this.resizeHandler_ = function () {
873
+ return _this.layout();
874
+ };
875
+ _this.cancelBgBounded_ = function () {};
876
+ _this.cancelFgBounded_ = function () {};
877
+ _this.cancelFgUnbounded_ = function () {};
878
+ _this.unboundedCoords_ = {
879
+ left: 0,
880
+ top: 0
761
881
  };
882
+ _this.fgScale_ = 0;
762
883
  return _this;
763
884
  }
764
885
 
765
- _createClass(MDCCheckboxFoundation, [{
766
- key: 'init',
767
- value: function init() {
768
- this.adapter_.registerChangeHandler(this.changeHandler_);
769
- this.installPropertyChangeHooks_();
886
+ _createClass(MDCRippleFoundation, [{
887
+ key: 'defaultActivationState_',
888
+ value: function defaultActivationState_() {
889
+ return {
890
+ isActivated: false,
891
+ wasActivatedByPointer: false,
892
+ wasElementMadeActive: false,
893
+ activationStartTime: 0,
894
+ activationEvent: null
895
+ };
770
896
  }
771
897
  }, {
772
- key: 'destroy',
773
- value: function destroy() {
774
- this.adapter_.deregisterChangeHandler(this.changeHandler_);
775
- this.uninstallPropertyChangeHooks_();
898
+ key: 'init',
899
+ value: function init() {
900
+ var _this2 = this;
901
+
902
+ if (!this.isSupported_) {
903
+ return;
904
+ }
905
+ this.addEventListeners_();
906
+
907
+ var _MDCRippleFoundation$ = MDCRippleFoundation.cssClasses,
908
+ ROOT = _MDCRippleFoundation$.ROOT,
909
+ UNBOUNDED = _MDCRippleFoundation$.UNBOUNDED;
910
+
911
+ requestAnimationFrame(function () {
912
+ _this2.adapter_.addClass(ROOT);
913
+ if (_this2.adapter_.isUnbounded()) {
914
+ _this2.adapter_.addClass(UNBOUNDED);
915
+ }
916
+ _this2.layoutInternal_();
917
+ });
776
918
  }
777
919
  }, {
778
- key: 'isChecked',
779
- value: function isChecked() {
780
- return this.getNativeControl_().checked;
781
- }
782
- }, {
783
- key: 'setChecked',
784
- value: function setChecked(checked) {
785
- this.getNativeControl_().checked = checked;
786
- }
787
- }, {
788
- key: 'isIndeterminate',
789
- value: function isIndeterminate() {
790
- return this.getNativeControl_().indeterminate;
791
- }
792
- }, {
793
- key: 'setIndeterminate',
794
- value: function setIndeterminate(indeterminate) {
795
- this.getNativeControl_().indeterminate = indeterminate;
796
- }
797
- }, {
798
- key: 'isDisabled',
799
- value: function isDisabled() {
800
- return this.getNativeControl_().disabled;
801
- }
802
- }, {
803
- key: 'setDisabled',
804
- value: function setDisabled(disabled) {
805
- this.getNativeControl_().disabled = disabled;
920
+ key: 'addEventListeners_',
921
+ value: function addEventListeners_() {
922
+ var _this3 = this;
923
+
924
+ this.listenerInfos_.forEach(function (info) {
925
+ Object.keys(info).forEach(function (k) {
926
+ _this3.adapter_.registerInteractionHandler(info[k], _this3.listeners_[k]);
927
+ });
928
+ });
929
+ this.adapter_.registerResizeHandler(this.resizeHandler_);
806
930
  }
807
931
  }, {
808
- key: 'installPropertyChangeHooks_',
809
- value: function installPropertyChangeHooks_() {
810
- var _this2 = this;
932
+ key: 'activate_',
933
+ value: function activate_(e) {
934
+ var _this4 = this;
811
935
 
812
- var nativeCb = this.getNativeControl_();
813
- var cbProto = Object.getPrototypeOf(nativeCb);
936
+ var activationState = this.activationState_;
814
937
 
815
- CB_PROTO_PROPS.forEach(function (controlState) {
816
- var desc = Object.getOwnPropertyDescriptor(cbProto, controlState);
817
- // We have to check for this descriptor, since some browsers (Safari) don't support its return.
818
- // See: https://bugs.webkit.org/show_bug.cgi?id=49739
819
- if (validDescriptor(desc)) {
820
- Object.defineProperty(nativeCb, controlState, {
821
- get: desc.get,
822
- set: function set(state) {
823
- desc.set.call(nativeCb, state);
824
- _this2.transitionCheckState_();
825
- },
826
- configurable: desc.configurable,
827
- enumerable: desc.enumerable
828
- });
938
+ if (activationState.isActivated) {
939
+ return;
940
+ }
941
+
942
+ activationState.isActivated = true;
943
+ activationState.activationEvent = e;
944
+ activationState.wasActivatedByPointer = e.type === 'mousedown' || e.type === 'touchstart' || e.type === 'pointerdown';
945
+
946
+ activationState.activationStartTime = Date.now();
947
+ requestAnimationFrame(function () {
948
+ // This needs to be wrapped in an rAF call b/c web browsers
949
+ // report active states inconsistently when they're called within
950
+ // event handling code:
951
+ // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971
952
+ // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741
953
+ activationState.wasElementMadeActive = e.type === 'keydown' ? _this4.adapter_.isSurfaceActive() : true;
954
+ if (activationState.wasElementMadeActive) {
955
+ _this4.animateActivation_();
956
+ } else {
957
+ // Reset activation state immediately if element was not made active.
958
+ _this4.activationState_ = _this4.defaultActivationState_();
829
959
  }
830
960
  });
831
961
  }
832
962
  }, {
833
- key: 'uninstallPropertyChangeHooks_',
834
- value: function uninstallPropertyChangeHooks_() {
835
- var nativeCb = this.getNativeControl_();
836
- var cbProto = Object.getPrototypeOf(nativeCb);
963
+ key: 'animateActivation_',
964
+ value: function animateActivation_() {
965
+ var _this5 = this;
837
966
 
838
- CB_PROTO_PROPS.forEach(function (controlState) {
839
- var desc = Object.getOwnPropertyDescriptor(cbProto, controlState);
840
- if (validDescriptor(desc)) {
841
- Object.defineProperty(nativeCb, controlState, desc);
842
- }
967
+ var _MDCRippleFoundation$2 = MDCRippleFoundation.cssClasses,
968
+ BG_ACTIVE = _MDCRippleFoundation$2.BG_ACTIVE,
969
+ BG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$2.BG_BOUNDED_ACTIVE_FILL,
970
+ FG_UNBOUNDED_DEACTIVATION = _MDCRippleFoundation$2.FG_UNBOUNDED_DEACTIVATION,
971
+ FG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$2.FG_BOUNDED_ACTIVE_FILL;
972
+
973
+ // If ripple is currently deactivating, cancel those animations.
974
+
975
+ [BG_BOUNDED_ACTIVE_FILL, FG_UNBOUNDED_DEACTIVATION, FG_BOUNDED_ACTIVE_FILL].forEach(function (c) {
976
+ return _this5.adapter_.removeClass(c);
843
977
  });
978
+ this.cancelBgBounded_();
979
+ this.cancelFgBounded_();
980
+ this.cancelFgUnbounded_();
981
+ if (this.unboundedOpacityFadeTimer_) {
982
+ clearTimeout(this.unboundedOpacityFadeTimer_);
983
+ this.unboundedOpacityFadeTimer_ = 0;
984
+ }
985
+
986
+ this.adapter_.addClass(BG_ACTIVE);
987
+ if (this.adapter_.isUnbounded()) {
988
+ this.animateUnboundedActivation_();
989
+ }
844
990
  }
845
991
  }, {
846
- key: 'transitionCheckState_',
847
- value: function transitionCheckState_() {
848
- var nativeCb = this.adapter_.getNativeControl();
849
- if (!nativeCb) {
992
+ key: 'animateUnboundedActivation_',
993
+ value: function animateUnboundedActivation_() {
994
+ var FG_UNBOUNDED_ACTIVATION = MDCRippleFoundation.cssClasses.FG_UNBOUNDED_ACTIVATION;
995
+
996
+ this.adapter_.addClass(FG_UNBOUNDED_ACTIVATION);
997
+ }
998
+ }, {
999
+ key: 'deactivate_',
1000
+ value: function deactivate_(e) {
1001
+ var _this6 = this;
1002
+
1003
+ var activationState = this.activationState_;
1004
+ // This can happen in scenarios such as when you have a keyup event that blurs the element.
1005
+
1006
+ if (!activationState.isActivated) {
850
1007
  return;
851
1008
  }
852
- var oldState = this.currentCheckState_;
853
- var newState = this.determineCheckState_(nativeCb);
854
- if (oldState === newState) {
855
- return;
1009
+ var actualActivationType = DEACTIVATION_ACTIVATION_PAIRS[e.type];
1010
+ var expectedActivationType = activationState.activationEvent.type;
1011
+ // NOTE: Pointer events are tricky - https://patrickhlauke.github.io/touch/tests/results/
1012
+ // Essentially, what we need to do here is decouple the deactivation UX from the actual
1013
+ // deactivation state itself. This way, touch/pointer events in sequence do not trample one
1014
+ // another.
1015
+ var needsDeactivationUX = actualActivationType === expectedActivationType;
1016
+ var needsActualDeactivation = needsDeactivationUX;
1017
+ if (activationState.wasActivatedByPointer) {
1018
+ needsActualDeactivation = e.type === 'mouseup';
856
1019
  }
857
1020
 
858
- // Check to ensure that there isn't a previously existing animation class, in case for example
859
- // the user interacted with the checkbox before the animation was finished.
860
- if (this.currentAnimationClass_.length > 0) {
861
- clearTimeout(this.animEndLatchTimer_);
862
- this.adapter_.forceLayout();
863
- this.adapter_.removeClass(this.currentAnimationClass_);
1021
+ var state = _extends({}, this.activationState_);
1022
+ if (needsDeactivationUX) {
1023
+ requestAnimationFrame(function () {
1024
+ return _this6.animateDeactivation_(e, state);
1025
+ });
864
1026
  }
865
-
866
- this.currentAnimationClass_ = this.getTransitionAnimationClass_(oldState, newState);
867
- this.currentCheckState_ = newState;
868
-
869
- // Check for parentNode so that animations are only run when the element is attached
870
- // to the DOM.
871
- if (this.adapter_.isAttachedToDOM() && this.currentAnimationClass_.length > 0) {
872
- this.adapter_.addClass(this.currentAnimationClass_);
873
- this.adapter_.registerAnimationEndHandler(this.animEndHandler_);
1027
+ if (needsActualDeactivation) {
1028
+ this.activationState_ = this.defaultActivationState_();
874
1029
  }
875
1030
  }
876
1031
  }, {
877
- key: 'determineCheckState_',
878
- value: function determineCheckState_(nativeCb) {
879
- var TRANSITION_STATE_INDETERMINATE = _constants.strings.TRANSITION_STATE_INDETERMINATE,
880
- TRANSITION_STATE_CHECKED = _constants.strings.TRANSITION_STATE_CHECKED,
881
- TRANSITION_STATE_UNCHECKED = _constants.strings.TRANSITION_STATE_UNCHECKED;
882
-
1032
+ key: 'animateDeactivation_',
1033
+ value: function animateDeactivation_(e, _ref) {
1034
+ var wasActivatedByPointer = _ref.wasActivatedByPointer,
1035
+ wasElementMadeActive = _ref.wasElementMadeActive,
1036
+ activationStartTime = _ref.activationStartTime;
1037
+ var BG_ACTIVE = MDCRippleFoundation.cssClasses.BG_ACTIVE;
883
1038
 
884
- if (nativeCb.indeterminate) {
885
- return TRANSITION_STATE_INDETERMINATE;
1039
+ if (wasActivatedByPointer || wasElementMadeActive) {
1040
+ this.adapter_.removeClass(BG_ACTIVE);
1041
+ var isPointerEvent = e.type === 'touchend' || e.type === 'pointerup' || e.type === 'mouseup';
1042
+ if (this.adapter_.isUnbounded()) {
1043
+ this.animateUnboundedDeactivation_(this.getUnboundedDeactivationInfo_(activationStartTime));
1044
+ } else {
1045
+ this.animateBoundedDeactivation_(e, isPointerEvent);
1046
+ }
886
1047
  }
887
- return nativeCb.checked ? TRANSITION_STATE_CHECKED : TRANSITION_STATE_UNCHECKED;
888
1048
  }
889
1049
  }, {
890
- key: 'getTransitionAnimationClass_',
891
- value: function getTransitionAnimationClass_(oldState, newState) {
892
- var TRANSITION_STATE_INIT = _constants.strings.TRANSITION_STATE_INIT,
893
- TRANSITION_STATE_CHECKED = _constants.strings.TRANSITION_STATE_CHECKED,
894
- TRANSITION_STATE_UNCHECKED = _constants.strings.TRANSITION_STATE_UNCHECKED;
895
- var _MDCCheckboxFoundatio = MDCCheckboxFoundation.cssClasses,
896
- ANIM_UNCHECKED_CHECKED = _MDCCheckboxFoundatio.ANIM_UNCHECKED_CHECKED,
897
- ANIM_UNCHECKED_INDETERMINATE = _MDCCheckboxFoundatio.ANIM_UNCHECKED_INDETERMINATE,
898
- ANIM_CHECKED_UNCHECKED = _MDCCheckboxFoundatio.ANIM_CHECKED_UNCHECKED,
899
- ANIM_CHECKED_INDETERMINATE = _MDCCheckboxFoundatio.ANIM_CHECKED_INDETERMINATE,
900
- ANIM_INDETERMINATE_CHECKED = _MDCCheckboxFoundatio.ANIM_INDETERMINATE_CHECKED,
901
- ANIM_INDETERMINATE_UNCHECKED = _MDCCheckboxFoundatio.ANIM_INDETERMINATE_UNCHECKED;
1050
+ key: 'animateUnboundedDeactivation_',
1051
+ value: function animateUnboundedDeactivation_(_ref2) {
1052
+ var _this7 = this;
902
1053
 
1054
+ var opacityDuration = _ref2.opacityDuration,
1055
+ transformDuration = _ref2.transformDuration,
1056
+ approxCurScale = _ref2.approxCurScale;
1057
+ var _MDCRippleFoundation$3 = MDCRippleFoundation.cssClasses,
1058
+ FG_UNBOUNDED_ACTIVATION = _MDCRippleFoundation$3.FG_UNBOUNDED_ACTIVATION,
1059
+ FG_UNBOUNDED_DEACTIVATION = _MDCRippleFoundation$3.FG_UNBOUNDED_DEACTIVATION;
1060
+ var _MDCRippleFoundation$4 = MDCRippleFoundation.strings,
1061
+ VAR_FG_UNBOUNDED_OPACITY_DURATION = _MDCRippleFoundation$4.VAR_FG_UNBOUNDED_OPACITY_DURATION,
1062
+ VAR_FG_UNBOUNDED_TRANSFORM_DURATION = _MDCRippleFoundation$4.VAR_FG_UNBOUNDED_TRANSFORM_DURATION,
1063
+ VAR_FG_APPROX_XF = _MDCRippleFoundation$4.VAR_FG_APPROX_XF;
903
1064
 
904
- switch (oldState) {
905
- case TRANSITION_STATE_INIT:
906
- if (newState === TRANSITION_STATE_UNCHECKED) {
907
- return '';
908
- }
909
- // fallthrough
910
- case TRANSITION_STATE_UNCHECKED:
911
- return newState === TRANSITION_STATE_CHECKED ? ANIM_UNCHECKED_CHECKED : ANIM_UNCHECKED_INDETERMINATE;
912
- case TRANSITION_STATE_CHECKED:
913
- return newState === TRANSITION_STATE_UNCHECKED ? ANIM_CHECKED_UNCHECKED : ANIM_CHECKED_INDETERMINATE;
914
- // TRANSITION_STATE_INDETERMINATE
915
- default:
916
- return newState === TRANSITION_STATE_CHECKED ? ANIM_INDETERMINATE_CHECKED : ANIM_INDETERMINATE_UNCHECKED;
917
- }
1065
+ this.adapter_.updateCssVariable(VAR_FG_APPROX_XF, 'scale(' + approxCurScale + ')');
1066
+ this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_OPACITY_DURATION, opacityDuration + 'ms');
1067
+ this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_TRANSFORM_DURATION, transformDuration + 'ms');
1068
+ this.adapter_.addClass(FG_UNBOUNDED_DEACTIVATION);
1069
+ this.adapter_.removeClass(FG_UNBOUNDED_ACTIVATION);
1070
+ // We use setTimeout here since we know how long the fade will take.
1071
+ this.unboundedOpacityFadeTimer_ = setTimeout(function () {
1072
+ _this7.adapter_.removeClass(FG_UNBOUNDED_DEACTIVATION);
1073
+ }, opacityDuration);
918
1074
  }
919
1075
  }, {
920
- key: 'getNativeControl_',
921
- value: function getNativeControl_() {
922
- return this.adapter_.getNativeControl() || {
923
- checked: false,
924
- indeterminate: false,
925
- disabled: false
926
- };
927
- }
928
- }]);
1076
+ key: 'getUnboundedDeactivationInfo_',
1077
+ value: function getUnboundedDeactivationInfo_(activationStartTime) {
1078
+ var msElapsed = Date.now() - activationStartTime;
1079
+ var _MDCRippleFoundation$5 = MDCRippleFoundation.numbers,
1080
+ FG_TRANSFORM_DELAY_MS = _MDCRippleFoundation$5.FG_TRANSFORM_DELAY_MS,
1081
+ OPACITY_DURATION_DIVISOR = _MDCRippleFoundation$5.OPACITY_DURATION_DIVISOR,
1082
+ ACTIVE_OPACITY_DURATION_MS = _MDCRippleFoundation$5.ACTIVE_OPACITY_DURATION_MS,
1083
+ UNBOUNDED_TRANSFORM_DURATION_MS = _MDCRippleFoundation$5.UNBOUNDED_TRANSFORM_DURATION_MS,
1084
+ MIN_OPACITY_DURATION_MS = _MDCRippleFoundation$5.MIN_OPACITY_DURATION_MS;
929
1085
 
930
- return MDCCheckboxFoundation;
931
- }(_base.MDCFoundation);
932
1086
 
933
- exports.default = MDCCheckboxFoundation;
1087
+ var approxCurScale = 0;
1088
+ if (msElapsed > FG_TRANSFORM_DELAY_MS) {
1089
+ var percentComplete = Math.min((msElapsed - FG_TRANSFORM_DELAY_MS) / this.xfDuration_, 1);
1090
+ approxCurScale = percentComplete * this.fgScale_;
1091
+ }
934
1092
 
1093
+ var transformDuration = UNBOUNDED_TRANSFORM_DURATION_MS;
1094
+ var approxOpacity = Math.min(msElapsed / ACTIVE_OPACITY_DURATION_MS, 1);
1095
+ var opacityDuration = Math.max(MIN_OPACITY_DURATION_MS, 1000 * approxOpacity / OPACITY_DURATION_DIVISOR);
935
1096
 
936
- function validDescriptor(inputPropDesc) {
937
- return inputPropDesc && typeof inputPropDesc.set === 'function';
938
- }
1097
+ return { transformDuration: transformDuration, opacityDuration: opacityDuration, approxCurScale: approxCurScale };
1098
+ }
1099
+ }, {
1100
+ key: 'animateBoundedDeactivation_',
1101
+ value: function animateBoundedDeactivation_(e, isPointerEvent) {
1102
+ var startPoint = void 0;
1103
+ if (isPointerEvent) {
1104
+ startPoint = (0, _util.getNormalizedEventCoords)(e, this.adapter_.getWindowPageOffset(), this.adapter_.computeBoundingRect());
1105
+ } else {
1106
+ startPoint = {
1107
+ x: this.frame_.width / 2,
1108
+ y: this.frame_.height / 2
1109
+ };
1110
+ }
1111
+
1112
+ startPoint = {
1113
+ x: startPoint.x - this.initialSize_ / 2,
1114
+ y: startPoint.y - this.initialSize_ / 2
1115
+ };
1116
+
1117
+ var endPoint = {
1118
+ x: this.frame_.width / 2 - this.initialSize_ / 2,
1119
+ y: this.frame_.height / 2 - this.initialSize_ / 2
1120
+ };
1121
+
1122
+ var _MDCRippleFoundation$6 = MDCRippleFoundation.strings,
1123
+ VAR_FG_TRANSLATE_START = _MDCRippleFoundation$6.VAR_FG_TRANSLATE_START,
1124
+ VAR_FG_TRANSLATE_END = _MDCRippleFoundation$6.VAR_FG_TRANSLATE_END;
1125
+ var _MDCRippleFoundation$7 = MDCRippleFoundation.cssClasses,
1126
+ BG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$7.BG_BOUNDED_ACTIVE_FILL,
1127
+ FG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$7.FG_BOUNDED_ACTIVE_FILL;
1128
+
1129
+ this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_START, startPoint.x + 'px, ' + startPoint.y + 'px');
1130
+ this.adapter_.updateCssVariable(VAR_FG_TRANSLATE_END, endPoint.x + 'px, ' + endPoint.y + 'px');
1131
+ this.cancelBgBounded_ = (0, _util.animateWithClass)(this.adapter_, BG_BOUNDED_ACTIVE_FILL, (0, _animation.getCorrectEventName)(window, 'transitionend'));
1132
+ this.cancelFgBounded_ = (0, _util.animateWithClass)(this.adapter_, FG_BOUNDED_ACTIVE_FILL, (0, _animation.getCorrectEventName)(window, 'animationend'));
1133
+ }
1134
+ }, {
1135
+ key: 'destroy',
1136
+ value: function destroy() {
1137
+ var _this8 = this;
1138
+
1139
+ if (!this.isSupported_) {
1140
+ return;
1141
+ }
1142
+ this.removeEventListeners_();
1143
+
1144
+ var _MDCRippleFoundation$8 = MDCRippleFoundation.cssClasses,
1145
+ ROOT = _MDCRippleFoundation$8.ROOT,
1146
+ UNBOUNDED = _MDCRippleFoundation$8.UNBOUNDED;
1147
+
1148
+ requestAnimationFrame(function () {
1149
+ _this8.adapter_.removeClass(ROOT);
1150
+ _this8.adapter_.removeClass(UNBOUNDED);
1151
+ _this8.removeCssVars_();
1152
+ });
1153
+ }
1154
+ }, {
1155
+ key: 'removeEventListeners_',
1156
+ value: function removeEventListeners_() {
1157
+ var _this9 = this;
1158
+
1159
+ this.listenerInfos_.forEach(function (info) {
1160
+ Object.keys(info).forEach(function (k) {
1161
+ _this9.adapter_.deregisterInteractionHandler(info[k], _this9.listeners_[k]);
1162
+ });
1163
+ });
1164
+ this.adapter_.deregisterResizeHandler(this.resizeHandler_);
1165
+ }
1166
+ }, {
1167
+ key: 'removeCssVars_',
1168
+ value: function removeCssVars_() {
1169
+ var _this10 = this;
1170
+
1171
+ var strings = MDCRippleFoundation.strings;
1172
+
1173
+ Object.keys(strings).forEach(function (k) {
1174
+ if (k.indexOf('VAR_') === 0) {
1175
+ _this10.adapter_.updateCssVariable(strings[k], null);
1176
+ }
1177
+ });
1178
+ }
1179
+ }, {
1180
+ key: 'layout',
1181
+ value: function layout() {
1182
+ var _this11 = this;
1183
+
1184
+ if (this.layoutFrame_) {
1185
+ cancelAnimationFrame(this.layoutFrame_);
1186
+ }
1187
+ this.layoutFrame_ = requestAnimationFrame(function () {
1188
+ _this11.layoutInternal_();
1189
+ _this11.layoutFrame_ = 0;
1190
+ });
1191
+ }
1192
+ }, {
1193
+ key: 'layoutInternal_',
1194
+ value: function layoutInternal_() {
1195
+ this.frame_ = this.adapter_.computeBoundingRect();
1196
+
1197
+ var maxDim = Math.max(this.frame_.height, this.frame_.width);
1198
+ var surfaceDiameter = Math.sqrt(Math.pow(this.frame_.width, 2) + Math.pow(this.frame_.height, 2));
1199
+
1200
+ // 60% of the largest dimension of the surface
1201
+ this.initialSize_ = maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE;
1202
+
1203
+ // Diameter of the surface + 10px
1204
+ this.maxRadius_ = surfaceDiameter + MDCRippleFoundation.numbers.PADDING;
1205
+ this.fgScale_ = this.maxRadius_ / this.initialSize_;
1206
+ this.xfDuration_ = 1000 * Math.sqrt(this.maxRadius_ / 1024);
1207
+ this.updateLayoutCssVars_();
1208
+ }
1209
+ }, {
1210
+ key: 'updateLayoutCssVars_',
1211
+ value: function updateLayoutCssVars_() {
1212
+ var _MDCRippleFoundation$9 = MDCRippleFoundation.strings,
1213
+ VAR_SURFACE_WIDTH = _MDCRippleFoundation$9.VAR_SURFACE_WIDTH,
1214
+ VAR_SURFACE_HEIGHT = _MDCRippleFoundation$9.VAR_SURFACE_HEIGHT,
1215
+ VAR_FG_SIZE = _MDCRippleFoundation$9.VAR_FG_SIZE,
1216
+ VAR_FG_UNBOUNDED_TRANSFORM_DURATION = _MDCRippleFoundation$9.VAR_FG_UNBOUNDED_TRANSFORM_DURATION,
1217
+ VAR_LEFT = _MDCRippleFoundation$9.VAR_LEFT,
1218
+ VAR_TOP = _MDCRippleFoundation$9.VAR_TOP,
1219
+ VAR_FG_SCALE = _MDCRippleFoundation$9.VAR_FG_SCALE;
1220
+
1221
+
1222
+ this.adapter_.updateCssVariable(VAR_SURFACE_WIDTH, this.frame_.width + 'px');
1223
+ this.adapter_.updateCssVariable(VAR_SURFACE_HEIGHT, this.frame_.height + 'px');
1224
+ this.adapter_.updateCssVariable(VAR_FG_SIZE, this.initialSize_ + 'px');
1225
+ this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_TRANSFORM_DURATION, this.xfDuration_ + 'ms');
1226
+ this.adapter_.updateCssVariable(VAR_FG_SCALE, this.fgScale_);
1227
+
1228
+ if (this.adapter_.isUnbounded()) {
1229
+ this.unboundedCoords_ = {
1230
+ left: Math.round(this.frame_.width / 2 - this.initialSize_ / 2),
1231
+ top: Math.round(this.frame_.height / 2 - this.initialSize_ / 2)
1232
+ };
1233
+
1234
+ this.adapter_.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + 'px');
1235
+ this.adapter_.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + 'px');
1236
+ }
1237
+ }
1238
+ }]);
1239
+
1240
+ return MDCRippleFoundation;
1241
+ }(_base.MDCFoundation);
1242
+
1243
+ exports.default = MDCRippleFoundation;
939
1244
 
940
1245
  /***/ },
941
1246
  /* 7 */
@@ -946,6 +1251,8 @@ return /******/ (function(modules) { // webpackBootstrap
946
1251
  Object.defineProperty(exports, "__esModule", {
947
1252
  value: true
948
1253
  });
1254
+ exports.getCorrectEventName = getCorrectEventName;
1255
+ exports.getCorrectPropertyName = getCorrectPropertyName;
949
1256
  /**
950
1257
  * Copyright 2016 Google Inc. All Rights Reserved.
951
1258
  *
@@ -962,367 +1269,260 @@ return /******/ (function(modules) { // webpackBootstrap
962
1269
  * limitations under the License.
963
1270
  */
964
1271
 
965
- var ROOT = 'mdc-checkbox';
966
- var ANIM = ROOT + '--anim';
967
-
968
- var cssClasses = exports.cssClasses = {
969
- ROOT: ROOT,
970
- CHECKED: ROOT + '--checked',
971
- INDETERMINATE: ROOT + '--indeterminate',
972
- ANIM_UNCHECKED_CHECKED: ANIM + '-unchecked-checked',
973
- ANIM_UNCHECKED_INDETERMINATE: ANIM + '-unchecked-indeterminate',
974
- ANIM_CHECKED_UNCHECKED: ANIM + '-checked-unchecked',
975
- ANIM_CHECKED_INDETERMINATE: ANIM + '-checked-indeterminate',
976
- ANIM_INDETERMINATE_CHECKED: ANIM + '-indeterminate-checked',
977
- ANIM_INDETERMINATE_UNCHECKED: ANIM + '-indeterminate-unchecked'
978
- };
979
-
980
- var strings = exports.strings = {
981
- NATIVE_CONTROL_SELECTOR: '.' + ROOT + '__native-control',
982
- TRANSITION_STATE_INIT: 'init',
983
- TRANSITION_STATE_CHECKED: 'checked',
984
- TRANSITION_STATE_UNCHECKED: 'unchecked',
985
- TRANSITION_STATE_INDETERMINATE: 'indeterminate'
1272
+ var eventTypeMap = {
1273
+ animationstart: {
1274
+ noPrefix: 'animationstart',
1275
+ webkitPrefix: 'webkitAnimationStart'
1276
+ },
1277
+ animationend: {
1278
+ noPrefix: 'animationend',
1279
+ webkitPrefix: 'webkitAnimationEnd'
1280
+ },
1281
+ animationiteration: {
1282
+ noPrefix: 'animationiteration',
1283
+ webkitPrefix: 'webkitAnimationIteration'
1284
+ },
1285
+ transitionend: {
1286
+ noPrefix: 'transitionend',
1287
+ webkitPrefix: 'webkitTransitionEnd'
1288
+ }
986
1289
  };
987
1290
 
988
- var numbers = exports.numbers = {
989
- ANIM_END_LATCH_MS: 100
1291
+ var cssPropertyMap = {
1292
+ animation: {
1293
+ noPrefix: 'animation',
1294
+ webkitPrefix: '-webkit-animation'
1295
+ },
1296
+ transform: {
1297
+ noPrefix: 'transform',
1298
+ webkitPrefix: '-webkit-transform'
1299
+ },
1300
+ transition: {
1301
+ noPrefix: 'transition',
1302
+ webkitPrefix: '-webkit-transition'
1303
+ }
990
1304
  };
991
1305
 
992
- /***/ },
993
- /* 8 */
994
- /***/ function(module, exports, __webpack_require__) {
995
-
996
- 'use strict';
997
-
998
- Object.defineProperty(exports, "__esModule", {
999
- value: true
1000
- });
1001
- exports.MDCIconToggle = exports.MDCIconToggleFoundation = undefined;
1002
-
1003
- 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; };
1004
-
1005
- 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); } };
1006
-
1007
- 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; }; }();
1008
-
1009
- var _base = __webpack_require__(1);
1010
-
1011
- var _ripple = __webpack_require__(9);
1012
-
1013
- var _foundation = __webpack_require__(13);
1014
-
1015
- var _foundation2 = _interopRequireDefault(_foundation);
1016
-
1017
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1018
-
1019
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1020
-
1021
- 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; }
1022
-
1023
- 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; } /**
1024
- * Copyright 2016 Google Inc. All Rights Reserved.
1025
- *
1026
- * Licensed under the Apache License, Version 2.0 (the "License");
1027
- * you may not use this file except in compliance with the License.
1028
- * You may obtain a copy of the License at
1029
- *
1030
- * http://www.apache.org/licenses/LICENSE-2.0
1031
- *
1032
- * Unless required by applicable law or agreed to in writing, software
1033
- * distributed under the License is distributed on an "AS IS" BASIS,
1034
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1035
- * See the License for the specific language governing permissions and
1036
- * limitations under the License.
1037
- */
1038
-
1039
- exports.MDCIconToggleFoundation = _foundation2.default;
1040
-
1041
- var MDCIconToggle = exports.MDCIconToggle = function (_MDCComponent) {
1042
- _inherits(MDCIconToggle, _MDCComponent);
1043
-
1044
- _createClass(MDCIconToggle, null, [{
1045
- key: 'attachTo',
1046
- value: function attachTo(root) {
1047
- return new MDCIconToggle(root);
1048
- }
1049
- }]);
1050
-
1051
- function MDCIconToggle() {
1052
- var _ref;
1053
-
1054
- _classCallCheck(this, MDCIconToggle);
1055
-
1056
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
1057
- args[_key] = arguments[_key];
1058
- }
1306
+ function hasProperShape(windowObj) {
1307
+ return windowObj.document !== undefined && typeof windowObj.document.createElement === 'function';
1308
+ }
1059
1309
 
1060
- var _this = _possibleConstructorReturn(this, (_ref = MDCIconToggle.__proto__ || Object.getPrototypeOf(MDCIconToggle)).call.apply(_ref, [this].concat(args)));
1310
+ function eventFoundInMaps(eventType) {
1311
+ return eventType in eventTypeMap || eventType in cssPropertyMap;
1312
+ }
1061
1313
 
1062
- _this.ripple_ = _this.initRipple_();
1063
- return _this;
1314
+ // If 'animation' or 'transition' exist as style property, webkit prefix isn't necessary. Since we are unable to
1315
+ // see the event types on the element, we must rely on the corresponding style properties.
1316
+ function getJavaScriptEventName(eventType, map, el) {
1317
+ switch (eventType) {
1318
+ case 'animationstart':
1319
+ case 'animationend':
1320
+ case 'animationiteration':
1321
+ return 'animation' in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
1322
+ case 'transitionend':
1323
+ return 'transition' in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
1324
+ default:
1325
+ return map[eventType].noPrefix;
1064
1326
  }
1327
+ }
1065
1328
 
1066
- _createClass(MDCIconToggle, [{
1067
- key: 'initRipple_',
1068
- value: function initRipple_() {
1069
- var _this2 = this;
1070
-
1071
- var adapter = _extends(_ripple.MDCRipple.createAdapter(this), {
1072
- isUnbounded: function isUnbounded() {
1073
- return true;
1074
- },
1075
- isSurfaceActive: function isSurfaceActive() {
1076
- return _this2.foundation_.isKeyboardActivated();
1077
- },
1078
- computeBoundingRect: function computeBoundingRect() {
1079
- var dim = 48;
1329
+ // Helper function to determine browser prefix for CSS3 animation events
1330
+ // and property names
1331
+ //
1332
+ // Parameters:
1333
+ // windowObject: Object -- Contains Document with a `createElement()` method
1334
+ // eventType: string -- The type of animation
1335
+ //
1336
+ // returns the value of the event as a string, prefixed if necessary.
1337
+ // If proper arguments are not supplied, this function will return
1338
+ // the property or event type without webkit prefix.
1339
+ //
1340
+ function getAnimationName(windowObj, eventType) {
1341
+ if (!hasProperShape(windowObj) || !eventFoundInMaps(eventType)) {
1342
+ return eventType;
1343
+ }
1080
1344
 
1081
- var _root_$getBoundingCli = _this2.root_.getBoundingClientRect(),
1082
- left = _root_$getBoundingCli.left,
1083
- top = _root_$getBoundingCli.top;
1345
+ var map = eventType in eventTypeMap ? eventTypeMap : cssPropertyMap;
1346
+ var el = windowObj.document.createElement('div');
1347
+ var eventName = '';
1084
1348
 
1085
- return {
1086
- left: left,
1087
- top: top,
1088
- width: dim,
1089
- height: dim,
1090
- right: left + dim,
1091
- bottom: left + dim
1092
- };
1093
- }
1094
- });
1095
- var foundation = new _ripple.MDCRippleFoundation(adapter);
1096
- return new _ripple.MDCRipple(this.root_, foundation);
1097
- }
1098
- }, {
1099
- key: 'destroy',
1100
- value: function destroy() {
1101
- this.ripple_.destroy();
1102
- _get(MDCIconToggle.prototype.__proto__ || Object.getPrototypeOf(MDCIconToggle.prototype), 'destroy', this).call(this);
1103
- }
1104
- }, {
1105
- key: 'getDefaultFoundation',
1106
- value: function getDefaultFoundation() {
1107
- var _this3 = this;
1349
+ if (map === eventTypeMap) {
1350
+ eventName = getJavaScriptEventName(eventType, map, el);
1351
+ } else {
1352
+ eventName = map[eventType].noPrefix in el.style ? map[eventType].noPrefix : map[eventType].webkitPrefix;
1353
+ }
1108
1354
 
1109
- return new _foundation2.default({
1110
- addClass: function addClass(className) {
1111
- return _this3.iconEl_.classList.add(className);
1112
- },
1113
- removeClass: function removeClass(className) {
1114
- return _this3.iconEl_.classList.remove(className);
1115
- },
1116
- registerInteractionHandler: function registerInteractionHandler(type, handler) {
1117
- return _this3.root_.addEventListener(type, handler);
1118
- },
1119
- deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) {
1120
- return _this3.root_.removeEventListener(type, handler);
1121
- },
1122
- setText: function setText(text) {
1123
- _this3.iconEl_.textContent = text;
1124
- },
1125
- getTabIndex: function getTabIndex() {
1126
- return (/* number */_this3.root_.tabIndex
1127
- );
1128
- },
1129
- setTabIndex: function setTabIndex(tabIndex) {
1130
- _this3.root_.tabIndex = tabIndex;
1131
- },
1132
- getAttr: function getAttr(name, value) {
1133
- return _this3.root_.getAttribute(name, value);
1134
- },
1135
- setAttr: function setAttr(name, value) {
1136
- return _this3.root_.setAttribute(name, value);
1137
- },
1138
- rmAttr: function rmAttr(name, value) {
1139
- return _this3.root_.removeAttribute(name, value);
1140
- },
1141
- notifyChange: function notifyChange(evtData) {
1142
- return _this3.emit('MDCIconToggle:change', evtData);
1143
- }
1144
- });
1145
- }
1146
- }, {
1147
- key: 'initialSyncWithDOM',
1148
- value: function initialSyncWithDOM() {
1149
- this.on = this.root_.getAttribute(_foundation2.default.strings.ARIA_PRESSED) === 'true';
1150
- this.disabled = this.root_.getAttribute(_foundation2.default.strings.ARIA_DISABLED) === 'true';
1151
- }
1152
- }, {
1153
- key: 'refreshToggleData',
1154
- value: function refreshToggleData() {
1155
- this.foundation_.refreshToggleData();
1156
- }
1157
- }, {
1158
- key: 'iconEl_',
1159
- get: function get() {
1160
- var sel = this.root_.dataset.iconInnerSelector;
1355
+ return eventName;
1356
+ }
1161
1357
 
1162
- return sel ? this.root_.querySelector(sel) : this.root_;
1163
- }
1164
- }, {
1165
- key: 'on',
1166
- get: function get() {
1167
- return this.foundation_.isOn();
1168
- },
1169
- set: function set(isOn) {
1170
- this.foundation_.toggle(isOn);
1171
- }
1172
- }, {
1173
- key: 'disabled',
1174
- get: function get() {
1175
- return this.foundation_.isDisabled();
1176
- },
1177
- set: function set(isDisabled) {
1178
- this.foundation_.setDisabled(isDisabled);
1179
- }
1180
- }]);
1358
+ // Public functions to access getAnimationName() for JavaScript events or CSS
1359
+ // property names.
1360
+ //
1361
+ // Parameters:
1362
+ // windowObject: Object -- Contains Document with a `createElement()` method
1363
+ // eventType: string -- The type of animation
1364
+ //
1365
+ // returns the value of the event as a string, prefixed if necessary.
1366
+ // If proper arguments are not supplied, this function will return
1367
+ // the property or event type without webkit prefix.
1368
+ //
1369
+ function getCorrectEventName(windowObj, eventType) {
1370
+ return getAnimationName(windowObj, eventType);
1371
+ }
1181
1372
 
1182
- return MDCIconToggle;
1183
- }(_base.MDCComponent);
1373
+ function getCorrectPropertyName(windowObj, eventType) {
1374
+ return getAnimationName(windowObj, eventType);
1375
+ }
1184
1376
 
1185
1377
  /***/ },
1186
- /* 9 */
1187
- /***/ function(module, exports, __webpack_require__) {
1378
+ /* 8 */
1379
+ /***/ function(module, exports) {
1188
1380
 
1189
1381
  'use strict';
1190
1382
 
1191
1383
  Object.defineProperty(exports, "__esModule", {
1192
1384
  value: true
1193
1385
  });
1194
- exports.MDCRipple = exports.MDCRippleFoundation = undefined;
1386
+ /**
1387
+ * Copyright 2016 Google Inc. All Rights Reserved.
1388
+ *
1389
+ * Licensed under the Apache License, Version 2.0 (the "License");
1390
+ * you may not use this file except in compliance with the License.
1391
+ * You may obtain a copy of the License at
1392
+ *
1393
+ * http://www.apache.org/licenses/LICENSE-2.0
1394
+ *
1395
+ * Unless required by applicable law or agreed to in writing, software
1396
+ * distributed under the License is distributed on an "AS IS" BASIS,
1397
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398
+ * See the License for the specific language governing permissions and
1399
+ * limitations under the License.
1400
+ */
1195
1401
 
1196
- 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; }; }();
1402
+ var ROOT = exports.ROOT = 'mdc-ripple';
1403
+ var UPGRADED = exports.UPGRADED = ROOT + '-upgraded';
1197
1404
 
1198
- var _base = __webpack_require__(1);
1405
+ var cssClasses = exports.cssClasses = {
1406
+ // Ripple is a special case where the "root" component is really a "mixin" of sorts,
1407
+ // given that it's an 'upgrade' to an existing component. That being said it is the root
1408
+ // CSS class that all other CSS classes derive from.
1409
+ ROOT: UPGRADED,
1410
+ UNBOUNDED: UPGRADED + '--unbounded',
1411
+ BG_ACTIVE: UPGRADED + '--background-active',
1412
+ BG_BOUNDED_ACTIVE_FILL: UPGRADED + '--background-bounded-active-fill',
1413
+ FG_BOUNDED_ACTIVE_FILL: UPGRADED + '--foreground-bounded-active-fill',
1414
+ FG_UNBOUNDED_ACTIVATION: UPGRADED + '--foreground-unbounded-activation',
1415
+ FG_UNBOUNDED_DEACTIVATION: UPGRADED + '--foreground-unbounded-deactivation'
1416
+ };
1199
1417
 
1200
- var _foundation = __webpack_require__(10);
1418
+ var strings = exports.strings = {
1419
+ VAR_SURFACE_WIDTH: '--' + ROOT + '-surface-width',
1420
+ VAR_SURFACE_HEIGHT: '--' + ROOT + '-surface-height',
1421
+ VAR_FG_SIZE: '--' + ROOT + '-fg-size',
1422
+ VAR_FG_UNBOUNDED_OPACITY_DURATION: '--' + ROOT + '-fg-unbounded-opacity-duration',
1423
+ VAR_FG_UNBOUNDED_TRANSFORM_DURATION: '--' + ROOT + '-fg-unbounded-transform-duration',
1424
+ VAR_LEFT: '--' + ROOT + '-left',
1425
+ VAR_TOP: '--' + ROOT + '-top',
1426
+ VAR_TRANSLATE_END: '--' + ROOT + '-translate-end',
1427
+ VAR_FG_APPROX_XF: '--' + ROOT + '-fg-approx-xf',
1428
+ VAR_FG_SCALE: '--' + ROOT + '-fg-scale',
1429
+ VAR_FG_TRANSLATE_START: '--' + ROOT + '-fg-translate-start',
1430
+ VAR_FG_TRANSLATE_END: '--' + ROOT + '-fg-translate-end'
1431
+ };
1201
1432
 
1202
- var _foundation2 = _interopRequireDefault(_foundation);
1433
+ var numbers = exports.numbers = {
1434
+ FG_TRANSFORM_DELAY_MS: 80,
1435
+ OPACITY_DURATION_DIVISOR: 3,
1436
+ ACTIVE_OPACITY_DURATION_MS: 110,
1437
+ MIN_OPACITY_DURATION_MS: 200,
1438
+ UNBOUNDED_TRANSFORM_DURATION_MS: 200,
1439
+ PADDING: 10,
1440
+ INITIAL_ORIGIN_SCALE: 0.6
1441
+ };
1203
1442
 
1204
- var _util = __webpack_require__(12);
1443
+ /***/ },
1444
+ /* 9 */
1445
+ /***/ function(module, exports) {
1205
1446
 
1206
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1447
+ 'use strict';
1207
1448
 
1208
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1449
+ Object.defineProperty(exports, "__esModule", {
1450
+ value: true
1451
+ });
1452
+ exports.supportsCssVariables = supportsCssVariables;
1453
+ exports.getMatchesProperty = getMatchesProperty;
1454
+ exports.animateWithClass = animateWithClass;
1455
+ exports.getNormalizedEventCoords = getNormalizedEventCoords;
1456
+ /**
1457
+ * Copyright 2016 Google Inc. All Rights Reserved.
1458
+ *
1459
+ * Licensed under the Apache License, Version 2.0 (the "License");
1460
+ * you may not use this file except in compliance with the License.
1461
+ * You may obtain a copy of the License at
1462
+ *
1463
+ * http://www.apache.org/licenses/LICENSE-2.0
1464
+ *
1465
+ * Unless required by applicable law or agreed to in writing, software
1466
+ * distributed under the License is distributed on an "AS IS" BASIS,
1467
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1468
+ * See the License for the specific language governing permissions and
1469
+ * limitations under the License.
1470
+ */
1209
1471
 
1210
- 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; }
1472
+ function supportsCssVariables(windowObj) {
1473
+ var supportsFunctionPresent = windowObj.CSS && typeof windowObj.CSS.supports === 'function';
1474
+ if (!supportsFunctionPresent) {
1475
+ return;
1476
+ }
1211
1477
 
1212
- 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; } /**
1213
- * Copyright 2016 Google Inc. All Rights Reserved.
1214
- *
1215
- * Licensed under the Apache License, Version 2.0 (the "License");
1216
- * you may not use this file except in compliance with the License.
1217
- * You may obtain a copy of the License at
1218
- *
1219
- * http://www.apache.org/licenses/LICENSE-2.0
1220
- *
1221
- * Unless required by applicable law or agreed to in writing, software
1222
- * distributed under the License is distributed on an "AS IS" BASIS,
1223
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1224
- * See the License for the specific language governing permissions and
1225
- * limitations under the License.
1226
- */
1478
+ var explicitlySupportsCssVars = windowObj.CSS.supports('--css-vars', 'yes');
1479
+ // See: https://bugs.webkit.org/show_bug.cgi?id=154669
1480
+ // See: README section on Safari
1481
+ var weAreFeatureDetectingSafari10plus = windowObj.CSS.supports('(--css-vars: yes)') && windowObj.CSS.supports('color', '#00000000');
1482
+ return explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus;
1483
+ }
1227
1484
 
1228
- var MATCHES = (0, _util.getMatchesProperty)(HTMLElement.prototype);
1485
+ function getMatchesProperty(HTMLElementPrototype) {
1486
+ return ['webkitMatchesSelector', 'msMatchesSelector', 'matches'].filter(function (p) {
1487
+ return p in HTMLElementPrototype;
1488
+ }).pop();
1489
+ }
1229
1490
 
1230
- exports.MDCRippleFoundation = _foundation2.default;
1491
+ function animateWithClass(rippleAdapter, cls, endEvent) {
1492
+ var cancelled = false;
1493
+ var cancel = function cancel() {
1494
+ if (cancelled) {
1495
+ return;
1496
+ }
1497
+ cancelled = true;
1498
+ rippleAdapter.removeClass(cls);
1499
+ rippleAdapter.deregisterInteractionHandler(endEvent, cancel);
1500
+ };
1501
+ rippleAdapter.registerInteractionHandler(endEvent, cancel);
1502
+ rippleAdapter.addClass(cls);
1503
+ return cancel;
1504
+ }
1231
1505
 
1232
- var MDCRipple = exports.MDCRipple = function (_MDCComponent) {
1233
- _inherits(MDCRipple, _MDCComponent);
1506
+ function getNormalizedEventCoords(ev, pageOffset, clientRect) {
1507
+ var x = pageOffset.x,
1508
+ y = pageOffset.y;
1234
1509
 
1235
- function MDCRipple() {
1236
- _classCallCheck(this, MDCRipple);
1510
+ var documentX = x + clientRect.left;
1511
+ var documentY = y + clientRect.top;
1237
1512
 
1238
- return _possibleConstructorReturn(this, (MDCRipple.__proto__ || Object.getPrototypeOf(MDCRipple)).apply(this, arguments));
1513
+ var normalizedX = void 0;
1514
+ var normalizedY = void 0;
1515
+ // Determine touch point relative to the ripple container.
1516
+ if (ev.type === 'touchend') {
1517
+ normalizedX = ev.changedTouches[0].pageX - documentX;
1518
+ normalizedY = ev.changedTouches[0].pageY - documentY;
1519
+ } else {
1520
+ normalizedX = ev.pageX - documentX;
1521
+ normalizedY = ev.pageY - documentY;
1239
1522
  }
1240
1523
 
1241
- _createClass(MDCRipple, [{
1242
- key: 'getDefaultFoundation',
1243
- value: function getDefaultFoundation() {
1244
- return new _foundation2.default(MDCRipple.createAdapter(this));
1245
- }
1246
- }, {
1247
- key: 'initialSyncWithDOM',
1248
- value: function initialSyncWithDOM() {
1249
- this.unbounded = 'mdcRippleIsUnbounded' in this.root_.dataset;
1250
- }
1251
- }, {
1252
- key: 'unbounded',
1253
- get: function get() {
1254
- return this.unbounded_;
1255
- },
1256
- set: function set(unbounded) {
1257
- var UNBOUNDED = _foundation2.default.cssClasses.UNBOUNDED;
1258
-
1259
- this.unbounded_ = Boolean(unbounded);
1260
- if (this.unbounded_) {
1261
- this.root_.classList.add(UNBOUNDED);
1262
- } else {
1263
- this.root_.classList.remove(UNBOUNDED);
1264
- }
1265
- }
1266
- }], [{
1267
- key: 'attachTo',
1268
- value: function attachTo(root) {
1269
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1270
- _ref$isUnbounded = _ref.isUnbounded,
1271
- isUnbounded = _ref$isUnbounded === undefined ? undefined : _ref$isUnbounded;
1272
-
1273
- var ripple = new MDCRipple(root);
1274
- // Only override unbounded behavior if option is explicitly specified
1275
- if (isUnbounded !== undefined) {
1276
- ripple.unbounded = isUnbounded;
1277
- }
1278
- return ripple;
1279
- }
1280
- }, {
1281
- key: 'createAdapter',
1282
- value: function createAdapter(instance) {
1283
- return {
1284
- browserSupportsCssVars: function browserSupportsCssVars() {
1285
- return (0, _util.supportsCssVariables)(window);
1286
- },
1287
- isUnbounded: function isUnbounded() {
1288
- return instance.unbounded;
1289
- },
1290
- isSurfaceActive: function isSurfaceActive() {
1291
- return instance.root_[MATCHES](':active');
1292
- },
1293
- addClass: function addClass(className) {
1294
- return instance.root_.classList.add(className);
1295
- },
1296
- removeClass: function removeClass(className) {
1297
- return instance.root_.classList.remove(className);
1298
- },
1299
- registerInteractionHandler: function registerInteractionHandler(evtType, handler) {
1300
- return instance.root_.addEventListener(evtType, handler);
1301
- },
1302
- deregisterInteractionHandler: function deregisterInteractionHandler(evtType, handler) {
1303
- return instance.root_.removeEventListener(evtType, handler);
1304
- },
1305
- registerResizeHandler: function registerResizeHandler(handler) {
1306
- return window.addEventListener('resize', handler);
1307
- },
1308
- deregisterResizeHandler: function deregisterResizeHandler(handler) {
1309
- return window.removeEventListener('resize', handler);
1310
- },
1311
- updateCssVariable: function updateCssVariable(varName, value) {
1312
- return instance.root_.style.setProperty(varName, value);
1313
- },
1314
- computeBoundingRect: function computeBoundingRect() {
1315
- return instance.root_.getBoundingClientRect();
1316
- },
1317
- getWindowPageOffset: function getWindowPageOffset() {
1318
- return { x: window.pageXOffset, y: window.pageYOffset };
1319
- }
1320
- };
1321
- }
1322
- }]);
1323
-
1324
- return MDCRipple;
1325
- }(_base.MDCComponent);
1524
+ return { x: normalizedX, y: normalizedY };
1525
+ }
1326
1526
 
1327
1527
  /***/ },
1328
1528
  /* 10 */
@@ -1340,12 +1540,8 @@ return /******/ (function(modules) { // webpackBootstrap
1340
1540
 
1341
1541
  var _base = __webpack_require__(1);
1342
1542
 
1343
- var _animation = __webpack_require__(5);
1344
-
1345
1543
  var _constants = __webpack_require__(11);
1346
1544
 
1347
- var _util = __webpack_require__(12);
1348
-
1349
1545
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1350
1546
 
1351
1547
  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; }
@@ -1366,29 +1562,12 @@ return /******/ (function(modules) { // webpackBootstrap
1366
1562
  * limitations under the License.
1367
1563
  */
1368
1564
 
1369
- var DEACTIVATION_ACTIVATION_PAIRS = {
1370
- mouseup: 'mousedown',
1371
- pointerup: 'pointerdown',
1372
- touchend: 'touchstart',
1373
- keyup: 'keydown',
1374
- blur: 'focus'
1375
- };
1376
-
1377
- var MDCRippleFoundation = function (_MDCFoundation) {
1378
- _inherits(MDCRippleFoundation, _MDCFoundation);
1379
-
1380
- _createClass(MDCRippleFoundation, [{
1381
- key: 'isSupported_',
1565
+ var CB_PROTO_PROPS = ['checked', 'indeterminate'];
1382
1566
 
1567
+ var MDCCheckboxFoundation = function (_MDCFoundation) {
1568
+ _inherits(MDCCheckboxFoundation, _MDCFoundation);
1383
1569
 
1384
- // We compute this property so that we are not querying information about the client
1385
- // until the point in time where the foundation requests it. This prevents scenarios where
1386
- // client-side feature-detection may happen too early, such as when components are rendered on the server
1387
- // and then initialized at mount time on the client.
1388
- get: function get() {
1389
- return this.adapter_.browserSupportsCssVars();
1390
- }
1391
- }], [{
1570
+ _createClass(MDCCheckboxFoundation, null, [{
1392
1571
  key: 'cssClasses',
1393
1572
  get: function get() {
1394
1573
  return _constants.cssClasses;
@@ -1407,490 +1586,217 @@ return /******/ (function(modules) { // webpackBootstrap
1407
1586
  key: 'defaultAdapter',
1408
1587
  get: function get() {
1409
1588
  return {
1410
- browserSupportsCssVars: function browserSupportsCssVars() /* boolean - cached */{},
1411
- isUnbounded: function isUnbounded() /* boolean */{},
1412
- isSurfaceActive: function isSurfaceActive() /* boolean */{},
1413
1589
  addClass: function addClass() /* className: string */{},
1414
1590
  removeClass: function removeClass() /* className: string */{},
1415
- registerInteractionHandler: function registerInteractionHandler() /* evtType: string, handler: EventListener */{},
1416
- deregisterInteractionHandler: function deregisterInteractionHandler() /* evtType: string, handler: EventListener */{},
1417
- registerResizeHandler: function registerResizeHandler() /* handler: EventListener */{},
1418
- deregisterResizeHandler: function deregisterResizeHandler() /* handler: EventListener */{},
1419
- updateCssVariable: function updateCssVariable() /* varName: string, value: string */{},
1420
- computeBoundingRect: function computeBoundingRect() /* ClientRect */{},
1421
- getWindowPageOffset: function getWindowPageOffset() /* {x: number, y: number} */{}
1591
+ registerAnimationEndHandler: function registerAnimationEndHandler() /* handler: EventListener */{},
1592
+ deregisterAnimationEndHandler: function deregisterAnimationEndHandler() /* handler: EventListener */{},
1593
+ registerChangeHandler: function registerChangeHandler() /* handler: EventListener */{},
1594
+ deregisterChangeHandler: function deregisterChangeHandler() /* handler: EventListener */{},
1595
+ getNativeControl: function getNativeControl() /* HTMLInputElement */{},
1596
+ forceLayout: function forceLayout() {},
1597
+ isAttachedToDOM: function isAttachedToDOM() /* boolean */{}
1422
1598
  };
1423
1599
  }
1424
1600
  }]);
1425
1601
 
1426
- function MDCRippleFoundation(adapter) {
1427
- _classCallCheck(this, MDCRippleFoundation);
1602
+ function MDCCheckboxFoundation(adapter) {
1603
+ _classCallCheck(this, MDCCheckboxFoundation);
1428
1604
 
1429
- var _this = _possibleConstructorReturn(this, (MDCRippleFoundation.__proto__ || Object.getPrototypeOf(MDCRippleFoundation)).call(this, _extends(MDCRippleFoundation.defaultAdapter, adapter)));
1605
+ var _this = _possibleConstructorReturn(this, (MDCCheckboxFoundation.__proto__ || Object.getPrototypeOf(MDCCheckboxFoundation)).call(this, _extends(MDCCheckboxFoundation.defaultAdapter, adapter)));
1430
1606
 
1431
- _this.layoutFrame_ = 0;
1432
- _this.frame_ = { width: 0, height: 0 };
1433
- _this.activationState_ = _this.defaultActivationState_();
1434
- _this.xfDuration_ = 0;
1435
- _this.maxRadius = 0;
1436
- _this.listenerInfos_ = [{ activate: 'touchstart', deactivate: 'touchend' }, { activate: 'pointerdown', deactivate: 'pointerup' }, { activate: 'mousedown', deactivate: 'mouseup' }, { activate: 'keydown', deactivate: 'keyup' }, { focus: 'focus', blur: 'blur' }];
1437
- _this.listeners_ = {
1438
- activate: function activate(e) {
1439
- return _this.activate_(e);
1440
- },
1441
- deactivate: function deactivate(e) {
1442
- return _this.deactivate_(e);
1443
- },
1444
- focus: function focus() {
1445
- return requestAnimationFrame(function () {
1446
- return _this.adapter_.addClass(MDCRippleFoundation.cssClasses.BG_ACTIVE);
1447
- });
1448
- },
1449
- blur: function blur() {
1450
- return requestAnimationFrame(function () {
1451
- return _this.adapter_.removeClass(MDCRippleFoundation.cssClasses.BG_ACTIVE);
1452
- });
1453
- }
1454
- };
1455
- _this.unboundedOpacityFadeTimer_ = 0;
1456
- _this.resizeHandler_ = function () {
1457
- return _this.layout();
1607
+ _this.currentCheckState_ = _constants.strings.TRANSITION_STATE_INIT;
1608
+ _this.currentAnimationClass_ = '';
1609
+ _this.animEndLatchTimer_ = 0;
1610
+ _this.animEndHandler_ = function () {
1611
+ clearTimeout(_this.animEndLatchTimer_);
1612
+ _this.animEndLatchTimer_ = setTimeout(function () {
1613
+ _this.adapter_.removeClass(_this.currentAnimationClass_);
1614
+ _this.adapter_.deregisterAnimationEndHandler(_this.animEndHandler_);
1615
+ }, _constants.numbers.ANIM_END_LATCH_MS);
1458
1616
  };
1459
- _this.cancelBgBounded_ = function () {};
1460
- _this.cancelFgBounded_ = function () {};
1461
- _this.cancelFgUnbounded_ = function () {};
1462
- _this.unboundedCoords_ = {
1463
- left: 0,
1464
- top: 0
1617
+ _this.changeHandler_ = function () {
1618
+ return _this.transitionCheckState_();
1465
1619
  };
1466
1620
  return _this;
1467
1621
  }
1468
1622
 
1469
- _createClass(MDCRippleFoundation, [{
1470
- key: 'defaultActivationState_',
1471
- value: function defaultActivationState_() {
1472
- return {
1473
- isActivated: false,
1474
- wasActivatedByPointer: false,
1475
- wasElementMadeActive: false,
1476
- activationStartTime: 0,
1477
- activationEvent: null
1478
- };
1479
- }
1480
- }, {
1623
+ _createClass(MDCCheckboxFoundation, [{
1481
1624
  key: 'init',
1482
1625
  value: function init() {
1483
- var _this2 = this;
1484
-
1485
- if (!this.isSupported_) {
1486
- return;
1487
- }
1488
- this.addEventListeners_();
1489
-
1490
- var _MDCRippleFoundation$ = MDCRippleFoundation.cssClasses,
1491
- ROOT = _MDCRippleFoundation$.ROOT,
1492
- UNBOUNDED = _MDCRippleFoundation$.UNBOUNDED;
1493
-
1494
- requestAnimationFrame(function () {
1495
- _this2.adapter_.addClass(ROOT);
1496
- if (_this2.adapter_.isUnbounded()) {
1497
- _this2.adapter_.addClass(UNBOUNDED);
1498
- }
1499
- _this2.layoutInternal_();
1500
- });
1501
- }
1502
- }, {
1503
- key: 'addEventListeners_',
1504
- value: function addEventListeners_() {
1505
- var _this3 = this;
1506
-
1507
- this.listenerInfos_.forEach(function (info) {
1508
- Object.keys(info).forEach(function (k) {
1509
- _this3.adapter_.registerInteractionHandler(info[k], _this3.listeners_[k]);
1510
- });
1511
- });
1512
- this.adapter_.registerResizeHandler(this.resizeHandler_);
1513
- }
1514
- }, {
1515
- key: 'activate_',
1516
- value: function activate_(e) {
1517
- var _this4 = this;
1518
-
1519
- var activationState = this.activationState_;
1520
-
1521
- if (activationState.isActivated) {
1522
- return;
1523
- }
1524
-
1525
- activationState.isActivated = true;
1526
- activationState.activationEvent = e;
1527
- activationState.wasActivatedByPointer = e.type === 'mousedown' || e.type === 'touchstart' || e.type === 'pointerdown';
1528
-
1529
- activationState.activationStartTime = Date.now();
1530
- requestAnimationFrame(function () {
1531
- // This needs to be wrapped in an rAF call b/c web browsers
1532
- // report active states inconsistently when they're called within
1533
- // event handling code:
1534
- // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971
1535
- // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741
1536
- activationState.wasElementMadeActive = e.type === 'keydown' ? _this4.adapter_.isSurfaceActive() : true;
1537
- if (activationState.wasElementMadeActive) {
1538
- _this4.animateActivation_();
1539
- } else {
1540
- // Reset activation state immediately if element was not made active.
1541
- _this4.activationState_ = _this4.defaultActivationState_();
1542
- }
1543
- });
1544
- }
1545
- }, {
1546
- key: 'animateActivation_',
1547
- value: function animateActivation_() {
1548
- var _this5 = this;
1549
-
1550
- var _MDCRippleFoundation$2 = MDCRippleFoundation.cssClasses,
1551
- BG_ACTIVE = _MDCRippleFoundation$2.BG_ACTIVE,
1552
- BG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$2.BG_BOUNDED_ACTIVE_FILL,
1553
- FG_UNBOUNDED_DEACTIVATION = _MDCRippleFoundation$2.FG_UNBOUNDED_DEACTIVATION,
1554
- FG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$2.FG_BOUNDED_ACTIVE_FILL;
1555
-
1556
- // If ripple is currently deactivating, cancel those animations.
1557
-
1558
- [BG_BOUNDED_ACTIVE_FILL, FG_UNBOUNDED_DEACTIVATION, FG_BOUNDED_ACTIVE_FILL].forEach(function (c) {
1559
- return _this5.adapter_.removeClass(c);
1560
- });
1561
- this.cancelBgBounded_();
1562
- this.cancelFgBounded_();
1563
- this.cancelFgUnbounded_();
1564
- if (this.unboundedOpacityFadeTimer_) {
1565
- clearTimeout(this.unboundedOpacityFadeTimer_);
1566
- this.unboundedOpacityFadeTimer_ = 0;
1567
- }
1568
-
1569
- this.adapter_.addClass(BG_ACTIVE);
1570
- if (this.adapter_.isUnbounded()) {
1571
- this.animateUnboundedActivation_();
1572
- }
1626
+ this.adapter_.registerChangeHandler(this.changeHandler_);
1627
+ this.installPropertyChangeHooks_();
1573
1628
  }
1574
1629
  }, {
1575
- key: 'animateUnboundedActivation_',
1576
- value: function animateUnboundedActivation_() {
1577
- var FG_UNBOUNDED_ACTIVATION = MDCRippleFoundation.cssClasses.FG_UNBOUNDED_ACTIVATION;
1578
-
1579
- var startPoint = void 0;
1580
- if (this.activationState_.wasActivatedByPointer) {
1581
- startPoint = (0, _util.getNormalizedEventCoords)(this.activationState_.activationEvent, this.adapter_.getWindowPageOffset(), this.adapter_.computeBoundingRect());
1582
- } else {
1583
- startPoint = {
1584
- left: this.frame_.width / 2,
1585
- top: this.frame_.height / 2
1586
- };
1587
- }
1588
- var _startPoint = startPoint,
1589
- left = _startPoint.left,
1590
- top = _startPoint.top;
1591
- var _MDCRippleFoundation$3 = MDCRippleFoundation.strings,
1592
- VAR_XF_ORIGIN_X = _MDCRippleFoundation$3.VAR_XF_ORIGIN_X,
1593
- VAR_XF_ORIGIN_Y = _MDCRippleFoundation$3.VAR_XF_ORIGIN_Y;
1594
-
1595
- this.adapter_.updateCssVariable(VAR_XF_ORIGIN_X, left - this.unboundedCoords_.left + 'px');
1596
- this.adapter_.updateCssVariable(VAR_XF_ORIGIN_Y, top - this.unboundedCoords_.top + 'px');
1597
- this.adapter_.addClass(FG_UNBOUNDED_ACTIVATION);
1630
+ key: 'destroy',
1631
+ value: function destroy() {
1632
+ this.adapter_.deregisterChangeHandler(this.changeHandler_);
1633
+ this.uninstallPropertyChangeHooks_();
1598
1634
  }
1599
1635
  }, {
1600
- key: 'deactivate_',
1601
- value: function deactivate_(e) {
1602
- var _this6 = this;
1603
-
1604
- var activationState = this.activationState_;
1605
- // This can happen in scenarios such as when you have a keyup event that blurs the element.
1606
-
1607
- if (!activationState.isActivated) {
1608
- return;
1609
- }
1610
- var actualActivationType = DEACTIVATION_ACTIVATION_PAIRS[e.type];
1611
- var expectedActivationType = activationState.activationEvent.type;
1612
- // NOTE: Pointer events are tricky - https://patrickhlauke.github.io/touch/tests/results/
1613
- // Essentially, what we need to do here is decouple the deactivation UX from the actual
1614
- // deactivation state itself. This way, touch/pointer events in sequence do not trample one
1615
- // another.
1616
- var needsDeactivationUX = actualActivationType === expectedActivationType;
1617
- var needsActualDeactivation = needsDeactivationUX;
1618
- if (activationState.wasActivatedByPointer) {
1619
- needsActualDeactivation = e.type === 'mouseup';
1620
- }
1621
-
1622
- var state = _extends({}, this.activationState_);
1623
- if (needsDeactivationUX) {
1624
- requestAnimationFrame(function () {
1625
- return _this6.animateDeactivation_(e, state);
1626
- });
1627
- }
1628
- if (needsActualDeactivation) {
1629
- this.activationState_ = this.defaultActivationState_();
1630
- }
1636
+ key: 'isChecked',
1637
+ value: function isChecked() {
1638
+ return this.getNativeControl_().checked;
1631
1639
  }
1632
1640
  }, {
1633
- key: 'animateDeactivation_',
1634
- value: function animateDeactivation_(e, _ref) {
1635
- var wasActivatedByPointer = _ref.wasActivatedByPointer,
1636
- wasElementMadeActive = _ref.wasElementMadeActive,
1637
- activationStartTime = _ref.activationStartTime;
1638
- var BG_ACTIVE = MDCRippleFoundation.cssClasses.BG_ACTIVE;
1639
-
1640
- if (wasActivatedByPointer || wasElementMadeActive) {
1641
- this.adapter_.removeClass(BG_ACTIVE);
1642
- var isPointerEvent = e.type === 'touchend' || e.type === 'pointerup' || e.type === 'mouseup';
1643
- if (this.adapter_.isUnbounded()) {
1644
- this.animateUnboundedDeactivation_(this.getUnboundedDeactivationInfo_(activationStartTime));
1645
- } else {
1646
- this.animateBoundedDeactivation_(e, isPointerEvent);
1647
- }
1648
- }
1641
+ key: 'setChecked',
1642
+ value: function setChecked(checked) {
1643
+ this.getNativeControl_().checked = checked;
1649
1644
  }
1650
1645
  }, {
1651
- key: 'animateUnboundedDeactivation_',
1652
- value: function animateUnboundedDeactivation_(_ref2) {
1653
- var _this7 = this;
1654
-
1655
- var opacityDuration = _ref2.opacityDuration,
1656
- transformDuration = _ref2.transformDuration,
1657
- approxCurScale = _ref2.approxCurScale;
1658
- var _MDCRippleFoundation$4 = MDCRippleFoundation.cssClasses,
1659
- FG_UNBOUNDED_ACTIVATION = _MDCRippleFoundation$4.FG_UNBOUNDED_ACTIVATION,
1660
- FG_UNBOUNDED_DEACTIVATION = _MDCRippleFoundation$4.FG_UNBOUNDED_DEACTIVATION;
1661
- var _MDCRippleFoundation$5 = MDCRippleFoundation.strings,
1662
- VAR_FG_UNBOUNDED_OPACITY_DURATION = _MDCRippleFoundation$5.VAR_FG_UNBOUNDED_OPACITY_DURATION,
1663
- VAR_FG_UNBOUNDED_TRANSFORM_DURATION = _MDCRippleFoundation$5.VAR_FG_UNBOUNDED_TRANSFORM_DURATION,
1664
- VAR_FG_APPROX_XF = _MDCRippleFoundation$5.VAR_FG_APPROX_XF;
1665
-
1666
- this.adapter_.updateCssVariable(VAR_FG_APPROX_XF, 'scale(' + approxCurScale + ')');
1667
- this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_OPACITY_DURATION, opacityDuration + 'ms');
1668
- this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_TRANSFORM_DURATION, transformDuration + 'ms');
1669
- this.adapter_.addClass(FG_UNBOUNDED_DEACTIVATION);
1670
- this.adapter_.removeClass(FG_UNBOUNDED_ACTIVATION);
1671
- // We use setTimeout here since we know how long the fade will take.
1672
- this.unboundedOpacityFadeTimer_ = setTimeout(function () {
1673
- _this7.adapter_.removeClass(FG_UNBOUNDED_DEACTIVATION);
1674
- }, opacityDuration);
1646
+ key: 'isIndeterminate',
1647
+ value: function isIndeterminate() {
1648
+ return this.getNativeControl_().indeterminate;
1675
1649
  }
1676
1650
  }, {
1677
- key: 'getUnboundedDeactivationInfo_',
1678
- value: function getUnboundedDeactivationInfo_(activationStartTime) {
1679
- var msElapsed = Date.now() - activationStartTime;
1680
- var _MDCRippleFoundation$6 = MDCRippleFoundation.numbers,
1681
- FG_TRANSFORM_DELAY_MS = _MDCRippleFoundation$6.FG_TRANSFORM_DELAY_MS,
1682
- OPACITY_DURATION_DIVISOR = _MDCRippleFoundation$6.OPACITY_DURATION_DIVISOR,
1683
- ACTIVE_OPACITY_DURATION_MS = _MDCRippleFoundation$6.ACTIVE_OPACITY_DURATION_MS,
1684
- UNBOUNDED_TRANSFORM_DURATION_MS = _MDCRippleFoundation$6.UNBOUNDED_TRANSFORM_DURATION_MS,
1685
- MIN_OPACITY_DURATION_MS = _MDCRippleFoundation$6.MIN_OPACITY_DURATION_MS;
1686
-
1687
-
1688
- var approxCurScale = 0;
1689
- if (msElapsed > FG_TRANSFORM_DELAY_MS) {
1690
- approxCurScale = Math.min((msElapsed - FG_TRANSFORM_DELAY_MS) / this.xfDuration_, 1);
1691
- }
1692
-
1693
- var transformDuration = UNBOUNDED_TRANSFORM_DURATION_MS;
1694
- var approxOpacity = Math.min(msElapsed / ACTIVE_OPACITY_DURATION_MS, 1);
1695
- var opacityDuration = Math.max(MIN_OPACITY_DURATION_MS, 1000 * approxOpacity / OPACITY_DURATION_DIVISOR);
1696
-
1697
- return { transformDuration: transformDuration, opacityDuration: opacityDuration, approxCurScale: approxCurScale };
1651
+ key: 'setIndeterminate',
1652
+ value: function setIndeterminate(indeterminate) {
1653
+ this.getNativeControl_().indeterminate = indeterminate;
1698
1654
  }
1699
1655
  }, {
1700
- key: 'animateBoundedDeactivation_',
1701
- value: function animateBoundedDeactivation_(e, isPointerEvent) {
1702
- var startPoint = void 0;
1703
- if (isPointerEvent) {
1704
- startPoint = (0, _util.getNormalizedEventCoords)(e, this.adapter_.getWindowPageOffset(), this.adapter_.computeBoundingRect());
1705
- } else {
1706
- startPoint = {
1707
- left: this.frame_.width / 2,
1708
- top: this.frame_.height / 2
1709
- };
1710
- }
1711
- var _startPoint2 = startPoint,
1712
- left = _startPoint2.left,
1713
- top = _startPoint2.top;
1714
- var _MDCRippleFoundation$7 = MDCRippleFoundation.strings,
1715
- VAR_LEFT = _MDCRippleFoundation$7.VAR_LEFT,
1716
- VAR_TOP = _MDCRippleFoundation$7.VAR_TOP;
1717
- var _MDCRippleFoundation$8 = MDCRippleFoundation.cssClasses,
1718
- BG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$8.BG_BOUNDED_ACTIVE_FILL,
1719
- FG_BOUNDED_ACTIVE_FILL = _MDCRippleFoundation$8.FG_BOUNDED_ACTIVE_FILL;
1720
-
1721
- this.adapter_.updateCssVariable(VAR_LEFT, left + 'px');
1722
- this.adapter_.updateCssVariable(VAR_TOP, top + 'px');
1723
- this.cancelBgBounded_ = (0, _util.animateWithClass)(this.adapter_, BG_BOUNDED_ACTIVE_FILL, (0, _animation.getCorrectEventName)(window, 'transitionend'));
1724
- this.cancelFgBounded_ = (0, _util.animateWithClass)(this.adapter_, FG_BOUNDED_ACTIVE_FILL, (0, _animation.getCorrectEventName)(window, 'animationend'));
1656
+ key: 'isDisabled',
1657
+ value: function isDisabled() {
1658
+ return this.getNativeControl_().disabled;
1725
1659
  }
1726
1660
  }, {
1727
- key: 'destroy',
1728
- value: function destroy() {
1729
- var _this8 = this;
1730
-
1731
- if (!this.isSupported_) {
1732
- return;
1733
- }
1734
- this.removeEventListeners_();
1735
-
1736
- var _MDCRippleFoundation$9 = MDCRippleFoundation.cssClasses,
1737
- ROOT = _MDCRippleFoundation$9.ROOT,
1738
- UNBOUNDED = _MDCRippleFoundation$9.UNBOUNDED;
1739
-
1740
- requestAnimationFrame(function () {
1741
- _this8.adapter_.removeClass(ROOT);
1742
- _this8.adapter_.removeClass(UNBOUNDED);
1743
- _this8.removeCssVars_();
1744
- });
1661
+ key: 'setDisabled',
1662
+ value: function setDisabled(disabled) {
1663
+ this.getNativeControl_().disabled = disabled;
1745
1664
  }
1746
1665
  }, {
1747
- key: 'removeEventListeners_',
1748
- value: function removeEventListeners_() {
1749
- var _this9 = this;
1666
+ key: 'installPropertyChangeHooks_',
1667
+ value: function installPropertyChangeHooks_() {
1668
+ var _this2 = this;
1750
1669
 
1751
- this.listenerInfos_.forEach(function (info) {
1752
- Object.keys(info).forEach(function (k) {
1753
- _this9.adapter_.deregisterInteractionHandler(info[k], _this9.listeners_[k]);
1754
- });
1670
+ var nativeCb = this.getNativeControl_();
1671
+ var cbProto = Object.getPrototypeOf(nativeCb);
1672
+
1673
+ CB_PROTO_PROPS.forEach(function (controlState) {
1674
+ var desc = Object.getOwnPropertyDescriptor(cbProto, controlState);
1675
+ // We have to check for this descriptor, since some browsers (Safari) don't support its return.
1676
+ // See: https://bugs.webkit.org/show_bug.cgi?id=49739
1677
+ if (validDescriptor(desc)) {
1678
+ Object.defineProperty(nativeCb, controlState, {
1679
+ get: desc.get,
1680
+ set: function set(state) {
1681
+ desc.set.call(nativeCb, state);
1682
+ _this2.transitionCheckState_();
1683
+ },
1684
+ configurable: desc.configurable,
1685
+ enumerable: desc.enumerable
1686
+ });
1687
+ }
1755
1688
  });
1756
- this.adapter_.deregisterResizeHandler(this.resizeHandler_);
1757
1689
  }
1758
1690
  }, {
1759
- key: 'removeCssVars_',
1760
- value: function removeCssVars_() {
1761
- var _this10 = this;
1762
-
1763
- var strings = MDCRippleFoundation.strings;
1691
+ key: 'uninstallPropertyChangeHooks_',
1692
+ value: function uninstallPropertyChangeHooks_() {
1693
+ var nativeCb = this.getNativeControl_();
1694
+ var cbProto = Object.getPrototypeOf(nativeCb);
1764
1695
 
1765
- Object.keys(strings).forEach(function (k) {
1766
- if (k.indexOf('VAR_') === 0) {
1767
- _this10.adapter_.updateCssVariable(strings[k], null);
1696
+ CB_PROTO_PROPS.forEach(function (controlState) {
1697
+ var desc = Object.getOwnPropertyDescriptor(cbProto, controlState);
1698
+ if (validDescriptor(desc)) {
1699
+ Object.defineProperty(nativeCb, controlState, desc);
1768
1700
  }
1769
1701
  });
1770
1702
  }
1771
1703
  }, {
1772
- key: 'layout',
1773
- value: function layout() {
1774
- var _this11 = this;
1704
+ key: 'transitionCheckState_',
1705
+ value: function transitionCheckState_() {
1706
+ var nativeCb = this.adapter_.getNativeControl();
1707
+ if (!nativeCb) {
1708
+ return;
1709
+ }
1710
+ var oldState = this.currentCheckState_;
1711
+ var newState = this.determineCheckState_(nativeCb);
1712
+ if (oldState === newState) {
1713
+ return;
1714
+ }
1775
1715
 
1776
- if (this.layoutFrame_) {
1777
- cancelAnimationFrame(this.layoutFrame_);
1716
+ // Check to ensure that there isn't a previously existing animation class, in case for example
1717
+ // the user interacted with the checkbox before the animation was finished.
1718
+ if (this.currentAnimationClass_.length > 0) {
1719
+ clearTimeout(this.animEndLatchTimer_);
1720
+ this.adapter_.forceLayout();
1721
+ this.adapter_.removeClass(this.currentAnimationClass_);
1722
+ }
1723
+
1724
+ this.currentAnimationClass_ = this.getTransitionAnimationClass_(oldState, newState);
1725
+ this.currentCheckState_ = newState;
1726
+
1727
+ // Check for parentNode so that animations are only run when the element is attached
1728
+ // to the DOM.
1729
+ if (this.adapter_.isAttachedToDOM() && this.currentAnimationClass_.length > 0) {
1730
+ this.adapter_.addClass(this.currentAnimationClass_);
1731
+ this.adapter_.registerAnimationEndHandler(this.animEndHandler_);
1778
1732
  }
1779
- this.layoutFrame_ = requestAnimationFrame(function () {
1780
- _this11.layoutInternal_();
1781
- _this11.layoutFrame_ = 0;
1782
- });
1783
1733
  }
1784
1734
  }, {
1785
- key: 'layoutInternal_',
1786
- value: function layoutInternal_() {
1787
- this.frame_ = this.adapter_.computeBoundingRect();
1735
+ key: 'determineCheckState_',
1736
+ value: function determineCheckState_(nativeCb) {
1737
+ var TRANSITION_STATE_INDETERMINATE = _constants.strings.TRANSITION_STATE_INDETERMINATE,
1738
+ TRANSITION_STATE_CHECKED = _constants.strings.TRANSITION_STATE_CHECKED,
1739
+ TRANSITION_STATE_UNCHECKED = _constants.strings.TRANSITION_STATE_UNCHECKED;
1788
1740
 
1789
- var maxDim = Math.max(this.frame_.height, this.frame_.width);
1790
1741
 
1791
- // Sqrt(2) * square length == diameter
1792
- this.maxRadius_ = Math.sqrt(2) * maxDim / 2;
1793
- this.xfDuration_ = 1000 * Math.sqrt(this.maxRadius_ / 1024);
1794
- this.updateLayoutCssVars_();
1742
+ if (nativeCb.indeterminate) {
1743
+ return TRANSITION_STATE_INDETERMINATE;
1744
+ }
1745
+ return nativeCb.checked ? TRANSITION_STATE_CHECKED : TRANSITION_STATE_UNCHECKED;
1795
1746
  }
1796
1747
  }, {
1797
- key: 'updateLayoutCssVars_',
1798
- value: function updateLayoutCssVars_() {
1799
- var fgSize = this.maxRadius_ * 2;
1800
- var _MDCRippleFoundation$10 = MDCRippleFoundation.strings,
1801
- VAR_SURFACE_WIDTH = _MDCRippleFoundation$10.VAR_SURFACE_WIDTH,
1802
- VAR_SURFACE_HEIGHT = _MDCRippleFoundation$10.VAR_SURFACE_HEIGHT,
1803
- VAR_FG_SIZE = _MDCRippleFoundation$10.VAR_FG_SIZE,
1804
- VAR_FG_UNBOUNDED_TRANSFORM_DURATION = _MDCRippleFoundation$10.VAR_FG_UNBOUNDED_TRANSFORM_DURATION,
1805
- VAR_LEFT = _MDCRippleFoundation$10.VAR_LEFT,
1806
- VAR_TOP = _MDCRippleFoundation$10.VAR_TOP;
1807
-
1748
+ key: 'getTransitionAnimationClass_',
1749
+ value: function getTransitionAnimationClass_(oldState, newState) {
1750
+ var TRANSITION_STATE_INIT = _constants.strings.TRANSITION_STATE_INIT,
1751
+ TRANSITION_STATE_CHECKED = _constants.strings.TRANSITION_STATE_CHECKED,
1752
+ TRANSITION_STATE_UNCHECKED = _constants.strings.TRANSITION_STATE_UNCHECKED;
1753
+ var _MDCCheckboxFoundatio = MDCCheckboxFoundation.cssClasses,
1754
+ ANIM_UNCHECKED_CHECKED = _MDCCheckboxFoundatio.ANIM_UNCHECKED_CHECKED,
1755
+ ANIM_UNCHECKED_INDETERMINATE = _MDCCheckboxFoundatio.ANIM_UNCHECKED_INDETERMINATE,
1756
+ ANIM_CHECKED_UNCHECKED = _MDCCheckboxFoundatio.ANIM_CHECKED_UNCHECKED,
1757
+ ANIM_CHECKED_INDETERMINATE = _MDCCheckboxFoundatio.ANIM_CHECKED_INDETERMINATE,
1758
+ ANIM_INDETERMINATE_CHECKED = _MDCCheckboxFoundatio.ANIM_INDETERMINATE_CHECKED,
1759
+ ANIM_INDETERMINATE_UNCHECKED = _MDCCheckboxFoundatio.ANIM_INDETERMINATE_UNCHECKED;
1808
1760
 
1809
- this.adapter_.updateCssVariable(VAR_SURFACE_WIDTH, this.frame_.width + 'px');
1810
- this.adapter_.updateCssVariable(VAR_SURFACE_HEIGHT, this.frame_.height + 'px');
1811
- this.adapter_.updateCssVariable(VAR_FG_SIZE, fgSize + 'px');
1812
- this.adapter_.updateCssVariable(VAR_FG_UNBOUNDED_TRANSFORM_DURATION, this.xfDuration_ + 'ms');
1813
1761
 
1814
- if (this.adapter_.isUnbounded()) {
1815
- this.unboundedCoords_ = {
1816
- left: Math.round(-(fgSize / 2) + this.frame_.width / 2),
1817
- top: Math.round(-(fgSize / 2) + this.frame_.height / 2)
1818
- };
1819
- this.adapter_.updateCssVariable(VAR_LEFT, this.unboundedCoords_.left + 'px');
1820
- this.adapter_.updateCssVariable(VAR_TOP, this.unboundedCoords_.top + 'px');
1762
+ switch (oldState) {
1763
+ case TRANSITION_STATE_INIT:
1764
+ if (newState === TRANSITION_STATE_UNCHECKED) {
1765
+ return '';
1766
+ }
1767
+ // fallthrough
1768
+ case TRANSITION_STATE_UNCHECKED:
1769
+ return newState === TRANSITION_STATE_CHECKED ? ANIM_UNCHECKED_CHECKED : ANIM_UNCHECKED_INDETERMINATE;
1770
+ case TRANSITION_STATE_CHECKED:
1771
+ return newState === TRANSITION_STATE_UNCHECKED ? ANIM_CHECKED_UNCHECKED : ANIM_CHECKED_INDETERMINATE;
1772
+ // TRANSITION_STATE_INDETERMINATE
1773
+ default:
1774
+ return newState === TRANSITION_STATE_CHECKED ? ANIM_INDETERMINATE_CHECKED : ANIM_INDETERMINATE_UNCHECKED;
1821
1775
  }
1822
1776
  }
1777
+ }, {
1778
+ key: 'getNativeControl_',
1779
+ value: function getNativeControl_() {
1780
+ return this.adapter_.getNativeControl() || {
1781
+ checked: false,
1782
+ indeterminate: false,
1783
+ disabled: false
1784
+ };
1785
+ }
1823
1786
  }]);
1824
1787
 
1825
- return MDCRippleFoundation;
1788
+ return MDCCheckboxFoundation;
1826
1789
  }(_base.MDCFoundation);
1827
1790
 
1828
- exports.default = MDCRippleFoundation;
1829
-
1830
- /***/ },
1831
- /* 11 */
1832
- /***/ function(module, exports) {
1833
-
1834
- 'use strict';
1835
-
1836
- Object.defineProperty(exports, "__esModule", {
1837
- value: true
1838
- });
1839
- /**
1840
- * Copyright 2016 Google Inc. All Rights Reserved.
1841
- *
1842
- * Licensed under the Apache License, Version 2.0 (the "License");
1843
- * you may not use this file except in compliance with the License.
1844
- * You may obtain a copy of the License at
1845
- *
1846
- * http://www.apache.org/licenses/LICENSE-2.0
1847
- *
1848
- * Unless required by applicable law or agreed to in writing, software
1849
- * distributed under the License is distributed on an "AS IS" BASIS,
1850
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1851
- * See the License for the specific language governing permissions and
1852
- * limitations under the License.
1853
- */
1854
-
1855
- var ROOT = exports.ROOT = 'mdc-ripple';
1856
- var UPGRADED = exports.UPGRADED = ROOT + '-upgraded';
1857
-
1858
- var cssClasses = exports.cssClasses = {
1859
- // Ripple is a special case where the "root" component is really a "mixin" of sorts,
1860
- // given that it's an 'upgrade' to an existing component. That being said it is the root
1861
- // CSS class that all other CSS classes derive from.
1862
- ROOT: UPGRADED,
1863
- UNBOUNDED: UPGRADED + '--unbounded',
1864
- BG_ACTIVE: UPGRADED + '--background-active',
1865
- BG_BOUNDED_ACTIVE_FILL: UPGRADED + '--background-bounded-active-fill',
1866
- FG_BOUNDED_ACTIVE_FILL: UPGRADED + '--foreground-bounded-active-fill',
1867
- FG_UNBOUNDED_ACTIVATION: UPGRADED + '--foreground-unbounded-activation',
1868
- FG_UNBOUNDED_DEACTIVATION: UPGRADED + '--foreground-unbounded-deactivation'
1869
- };
1870
-
1871
- var strings = exports.strings = {
1872
- VAR_SURFACE_WIDTH: '--' + ROOT + '-surface-width',
1873
- VAR_SURFACE_HEIGHT: '--' + ROOT + '-surface-height',
1874
- VAR_FG_SIZE: '--' + ROOT + '-fg-size',
1875
- VAR_FG_UNBOUNDED_OPACITY_DURATION: '--' + ROOT + '-fg-unbounded-opacity-duration',
1876
- VAR_FG_UNBOUNDED_TRANSFORM_DURATION: '--' + ROOT + '-fg-unbounded-transform-duration',
1877
- VAR_LEFT: '--' + ROOT + '-left',
1878
- VAR_TOP: '--' + ROOT + '-top',
1879
- VAR_XF_ORIGIN_X: '--' + ROOT + '-xfo-x',
1880
- VAR_XF_ORIGIN_Y: '--' + ROOT + '-xfo-y',
1881
- VAR_FG_APPROX_XF: '--' + ROOT + '-fg-approx-xf'
1882
- };
1883
-
1884
- var numbers = exports.numbers = {
1885
- FG_TRANSFORM_DELAY_MS: 80,
1886
- OPACITY_DURATION_DIVISOR: 3,
1887
- ACTIVE_OPACITY_DURATION_MS: 110,
1888
- MIN_OPACITY_DURATION_MS: 200,
1889
- UNBOUNDED_TRANSFORM_DURATION_MS: 200
1890
- };
1891
-
1791
+ exports.default = MDCCheckboxFoundation;
1792
+
1793
+
1794
+ function validDescriptor(inputPropDesc) {
1795
+ return inputPropDesc && typeof inputPropDesc.set === 'function';
1796
+ }
1797
+
1892
1798
  /***/ },
1893
- /* 12 */
1799
+ /* 11 */
1894
1800
  /***/ function(module, exports) {
1895
1801
 
1896
1802
  'use strict';
@@ -1898,10 +1804,6 @@ return /******/ (function(modules) { // webpackBootstrap
1898
1804
  Object.defineProperty(exports, "__esModule", {
1899
1805
  value: true
1900
1806
  });
1901
- exports.supportsCssVariables = supportsCssVariables;
1902
- exports.getMatchesProperty = getMatchesProperty;
1903
- exports.animateWithClass = animateWithClass;
1904
- exports.getNormalizedEventCoords = getNormalizedEventCoords;
1905
1807
  /**
1906
1808
  * Copyright 2016 Google Inc. All Rights Reserved.
1907
1809
  *
@@ -1918,60 +1820,225 @@ return /******/ (function(modules) { // webpackBootstrap
1918
1820
  * limitations under the License.
1919
1821
  */
1920
1822
 
1921
- function supportsCssVariables(windowObj) {
1922
- var supportsFunctionPresent = windowObj.CSS && typeof windowObj.CSS.supports === 'function';
1923
- if (!supportsFunctionPresent) {
1924
- return;
1925
- }
1823
+ var ROOT = 'mdc-checkbox';
1824
+ var ANIM = ROOT + '--anim';
1926
1825
 
1927
- var explicitlySupportsCssVars = windowObj.CSS.supports('--css-vars', 'yes');
1928
- // See: https://bugs.webkit.org/show_bug.cgi?id=154669
1929
- // See: README section on Safari
1930
- var weAreFeatureDetectingSafari10plus = windowObj.CSS.supports('(--css-vars: yes)') && windowObj.CSS.supports('color', '#00000000');
1931
- return explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus;
1932
- }
1826
+ var cssClasses = exports.cssClasses = {
1827
+ ROOT: ROOT,
1828
+ CHECKED: ROOT + '--checked',
1829
+ INDETERMINATE: ROOT + '--indeterminate',
1830
+ ANIM_UNCHECKED_CHECKED: ANIM + '-unchecked-checked',
1831
+ ANIM_UNCHECKED_INDETERMINATE: ANIM + '-unchecked-indeterminate',
1832
+ ANIM_CHECKED_UNCHECKED: ANIM + '-checked-unchecked',
1833
+ ANIM_CHECKED_INDETERMINATE: ANIM + '-checked-indeterminate',
1834
+ ANIM_INDETERMINATE_CHECKED: ANIM + '-indeterminate-checked',
1835
+ ANIM_INDETERMINATE_UNCHECKED: ANIM + '-indeterminate-unchecked'
1836
+ };
1933
1837
 
1934
- function getMatchesProperty(HTMLElementPrototype) {
1935
- return ['webkitMatchesSelector', 'msMatchesSelector', 'matches'].filter(function (p) {
1936
- return p in HTMLElementPrototype;
1937
- }).pop();
1938
- }
1838
+ var strings = exports.strings = {
1839
+ NATIVE_CONTROL_SELECTOR: '.' + ROOT + '__native-control',
1840
+ TRANSITION_STATE_INIT: 'init',
1841
+ TRANSITION_STATE_CHECKED: 'checked',
1842
+ TRANSITION_STATE_UNCHECKED: 'unchecked',
1843
+ TRANSITION_STATE_INDETERMINATE: 'indeterminate'
1844
+ };
1939
1845
 
1940
- function animateWithClass(rippleAdapter, cls, endEvent) {
1941
- var cancelled = false;
1942
- var cancel = function cancel() {
1943
- if (cancelled) {
1944
- return;
1846
+ var numbers = exports.numbers = {
1847
+ ANIM_END_LATCH_MS: 100
1848
+ };
1849
+
1850
+ /***/ },
1851
+ /* 12 */
1852
+ /***/ function(module, exports, __webpack_require__) {
1853
+
1854
+ 'use strict';
1855
+
1856
+ Object.defineProperty(exports, "__esModule", {
1857
+ value: true
1858
+ });
1859
+ exports.MDCIconToggle = exports.MDCIconToggleFoundation = undefined;
1860
+
1861
+ 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; };
1862
+
1863
+ 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); } };
1864
+
1865
+ 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; }; }();
1866
+
1867
+ var _base = __webpack_require__(1);
1868
+
1869
+ var _ripple = __webpack_require__(5);
1870
+
1871
+ var _foundation = __webpack_require__(13);
1872
+
1873
+ var _foundation2 = _interopRequireDefault(_foundation);
1874
+
1875
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1876
+
1877
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1878
+
1879
+ 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; }
1880
+
1881
+ 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; } /**
1882
+ * Copyright 2016 Google Inc. All Rights Reserved.
1883
+ *
1884
+ * Licensed under the Apache License, Version 2.0 (the "License");
1885
+ * you may not use this file except in compliance with the License.
1886
+ * You may obtain a copy of the License at
1887
+ *
1888
+ * http://www.apache.org/licenses/LICENSE-2.0
1889
+ *
1890
+ * Unless required by applicable law or agreed to in writing, software
1891
+ * distributed under the License is distributed on an "AS IS" BASIS,
1892
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1893
+ * See the License for the specific language governing permissions and
1894
+ * limitations under the License.
1895
+ */
1896
+
1897
+ exports.MDCIconToggleFoundation = _foundation2.default;
1898
+
1899
+ var MDCIconToggle = exports.MDCIconToggle = function (_MDCComponent) {
1900
+ _inherits(MDCIconToggle, _MDCComponent);
1901
+
1902
+ _createClass(MDCIconToggle, null, [{
1903
+ key: 'attachTo',
1904
+ value: function attachTo(root) {
1905
+ return new MDCIconToggle(root);
1945
1906
  }
1946
- cancelled = true;
1947
- rippleAdapter.removeClass(cls);
1948
- rippleAdapter.deregisterInteractionHandler(endEvent, cancel);
1949
- };
1950
- rippleAdapter.registerInteractionHandler(endEvent, cancel);
1951
- rippleAdapter.addClass(cls);
1952
- return cancel;
1953
- }
1907
+ }]);
1954
1908
 
1955
- function getNormalizedEventCoords(ev, pageOffset, clientRect) {
1956
- var x = pageOffset.x,
1957
- y = pageOffset.y;
1909
+ function MDCIconToggle() {
1910
+ var _ref;
1911
+
1912
+ _classCallCheck(this, MDCIconToggle);
1958
1913
 
1959
- var documentLeft = x + clientRect.left;
1960
- var documentTop = y + clientRect.top;
1914
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
1915
+ args[_key] = arguments[_key];
1916
+ }
1961
1917
 
1962
- var normalizedLeft = void 0;
1963
- var normalizedTop = void 0;
1964
- // Determine touch point relative to the ripple container.
1965
- if (ev.type === 'touchend') {
1966
- normalizedLeft = ev.changedTouches[0].pageX - documentLeft;
1967
- normalizedTop = ev.changedTouches[0].pageY - documentTop;
1968
- } else {
1969
- normalizedLeft = ev.pageX - documentLeft;
1970
- normalizedTop = ev.pageY - documentTop;
1918
+ var _this = _possibleConstructorReturn(this, (_ref = MDCIconToggle.__proto__ || Object.getPrototypeOf(MDCIconToggle)).call.apply(_ref, [this].concat(args)));
1919
+
1920
+ _this.ripple_ = _this.initRipple_();
1921
+ return _this;
1971
1922
  }
1972
1923
 
1973
- return { left: normalizedLeft, top: normalizedTop };
1974
- }
1924
+ _createClass(MDCIconToggle, [{
1925
+ key: 'initRipple_',
1926
+ value: function initRipple_() {
1927
+ var _this2 = this;
1928
+
1929
+ var adapter = _extends(_ripple.MDCRipple.createAdapter(this), {
1930
+ isUnbounded: function isUnbounded() {
1931
+ return true;
1932
+ },
1933
+ isSurfaceActive: function isSurfaceActive() {
1934
+ return _this2.foundation_.isKeyboardActivated();
1935
+ },
1936
+ computeBoundingRect: function computeBoundingRect() {
1937
+ var dim = 48;
1938
+
1939
+ var _root_$getBoundingCli = _this2.root_.getBoundingClientRect(),
1940
+ left = _root_$getBoundingCli.left,
1941
+ top = _root_$getBoundingCli.top;
1942
+
1943
+ return {
1944
+ left: left,
1945
+ top: top,
1946
+ width: dim,
1947
+ height: dim,
1948
+ right: left + dim,
1949
+ bottom: left + dim
1950
+ };
1951
+ }
1952
+ });
1953
+ var foundation = new _ripple.MDCRippleFoundation(adapter);
1954
+ return new _ripple.MDCRipple(this.root_, foundation);
1955
+ }
1956
+ }, {
1957
+ key: 'destroy',
1958
+ value: function destroy() {
1959
+ this.ripple_.destroy();
1960
+ _get(MDCIconToggle.prototype.__proto__ || Object.getPrototypeOf(MDCIconToggle.prototype), 'destroy', this).call(this);
1961
+ }
1962
+ }, {
1963
+ key: 'getDefaultFoundation',
1964
+ value: function getDefaultFoundation() {
1965
+ var _this3 = this;
1966
+
1967
+ return new _foundation2.default({
1968
+ addClass: function addClass(className) {
1969
+ return _this3.iconEl_.classList.add(className);
1970
+ },
1971
+ removeClass: function removeClass(className) {
1972
+ return _this3.iconEl_.classList.remove(className);
1973
+ },
1974
+ registerInteractionHandler: function registerInteractionHandler(type, handler) {
1975
+ return _this3.root_.addEventListener(type, handler);
1976
+ },
1977
+ deregisterInteractionHandler: function deregisterInteractionHandler(type, handler) {
1978
+ return _this3.root_.removeEventListener(type, handler);
1979
+ },
1980
+ setText: function setText(text) {
1981
+ _this3.iconEl_.textContent = text;
1982
+ },
1983
+ getTabIndex: function getTabIndex() {
1984
+ return (/* number */_this3.root_.tabIndex
1985
+ );
1986
+ },
1987
+ setTabIndex: function setTabIndex(tabIndex) {
1988
+ _this3.root_.tabIndex = tabIndex;
1989
+ },
1990
+ getAttr: function getAttr(name, value) {
1991
+ return _this3.root_.getAttribute(name, value);
1992
+ },
1993
+ setAttr: function setAttr(name, value) {
1994
+ return _this3.root_.setAttribute(name, value);
1995
+ },
1996
+ rmAttr: function rmAttr(name) {
1997
+ return _this3.root_.removeAttribute(name);
1998
+ },
1999
+ notifyChange: function notifyChange(evtData) {
2000
+ return _this3.emit('MDCIconToggle:change', evtData);
2001
+ }
2002
+ });
2003
+ }
2004
+ }, {
2005
+ key: 'initialSyncWithDOM',
2006
+ value: function initialSyncWithDOM() {
2007
+ this.on = this.root_.getAttribute(_foundation2.default.strings.ARIA_PRESSED) === 'true';
2008
+ this.disabled = this.root_.getAttribute(_foundation2.default.strings.ARIA_DISABLED) === 'true';
2009
+ }
2010
+ }, {
2011
+ key: 'refreshToggleData',
2012
+ value: function refreshToggleData() {
2013
+ this.foundation_.refreshToggleData();
2014
+ }
2015
+ }, {
2016
+ key: 'iconEl_',
2017
+ get: function get() {
2018
+ var sel = this.root_.dataset.iconInnerSelector;
2019
+
2020
+ return sel ? this.root_.querySelector(sel) : this.root_;
2021
+ }
2022
+ }, {
2023
+ key: 'on',
2024
+ get: function get() {
2025
+ return this.foundation_.isOn();
2026
+ },
2027
+ set: function set(isOn) {
2028
+ this.foundation_.toggle(isOn);
2029
+ }
2030
+ }, {
2031
+ key: 'disabled',
2032
+ get: function get() {
2033
+ return this.foundation_.isDisabled();
2034
+ },
2035
+ set: function set(isDisabled) {
2036
+ this.foundation_.setDisabled(isDisabled);
2037
+ }
2038
+ }]);
2039
+
2040
+ return MDCIconToggle;
2041
+ }(_base.MDCComponent);
1975
2042
 
1976
2043
  /***/ },
1977
2044
  /* 13 */
@@ -2236,7 +2303,7 @@ return /******/ (function(modules) { // webpackBootstrap
2236
2303
 
2237
2304
  var _base = __webpack_require__(1);
2238
2305
 
2239
- var _ripple = __webpack_require__(9);
2306
+ var _ripple = __webpack_require__(5);
2240
2307
 
2241
2308
  var _foundation = __webpack_require__(15);
2242
2309
 
@@ -3454,7 +3521,7 @@ return /******/ (function(modules) { // webpackBootstrap
3454
3521
  registerInputKeydownHandler: function registerInputKeydownHandler() /* handler: EventListener */{},
3455
3522
  deregisterInputKeydownHandler: function deregisterInputKeydownHandler() /* handler: EventListener */{},
3456
3523
  setHelptextAttr: function setHelptextAttr() /* name: string, value: string */{},
3457
- removeHelptextAttr: function removeHelptextAttr() /* name: string, value: string */{},
3524
+ removeHelptextAttr: function removeHelptextAttr() /* name: string */{},
3458
3525
  getNativeInput: function getNativeInput() {
3459
3526
  return (/* HTMLInputElement */{}
3460
3527
  );
@@ -3636,7 +3703,7 @@ return /******/ (function(modules) { // webpackBootstrap
3636
3703
 
3637
3704
  var _foundation2 = _interopRequireDefault(_foundation);
3638
3705
 
3639
- var _animation = __webpack_require__(5);
3706
+ var _animation = __webpack_require__(7);
3640
3707
 
3641
3708
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3642
3709