| OLD | NEW |
| 1 <!DOCTYPE html><html><head><!-- | 1 <!DOCTYPE html><html><head><!-- |
| 2 @license | 2 @license |
| 3 Copyright (c) 2016 The Polymer Project Authors. All rights reserved. | 3 Copyright (c) 2016 The Polymer Project Authors. All rights reserved. |
| 4 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt | 4 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt |
| 5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | 5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
| 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt | 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt |
| 7 Code distributed by Google as part of the polymer project is also | 7 Code distributed by Google as part of the polymer project is also |
| 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt | 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt |
| 9 --><!-- | 9 --><!-- |
| 10 @license | 10 @license |
| (...skipping 11609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11620 } | 11620 } |
| 11621 | 11621 |
| 11622 .fixed-left { | 11622 .fixed-left { |
| 11623 top: 0; | 11623 top: 0; |
| 11624 bottom: 0; | 11624 bottom: 0; |
| 11625 left: 0; | 11625 left: 0; |
| 11626 } | 11626 } |
| 11627 </style> | 11627 </style> |
| 11628 </template> | 11628 </template> |
| 11629 </dom-module> | 11629 </dom-module> |
| 11630 |
| 11631 |
| 11632 <script> |
| 11633 |
| 11634 (function() { |
| 11635 |
| 11636 // monostate data |
| 11637 var metaDatas = {}; |
| 11638 var metaArrays = {}; |
| 11639 var singleton = null; |
| 11640 |
| 11641 Polymer.IronMeta = Polymer({ |
| 11642 |
| 11643 is: 'iron-meta', |
| 11644 |
| 11645 properties: { |
| 11646 |
| 11647 /** |
| 11648 * The type of meta-data. All meta-data of the same type is stored |
| 11649 * together. |
| 11650 */ |
| 11651 type: { |
| 11652 type: String, |
| 11653 value: 'default', |
| 11654 observer: '_typeChanged' |
| 11655 }, |
| 11656 |
| 11657 /** |
| 11658 * The key used to store `value` under the `type` namespace. |
| 11659 */ |
| 11660 key: { |
| 11661 type: String, |
| 11662 observer: '_keyChanged' |
| 11663 }, |
| 11664 |
| 11665 /** |
| 11666 * The meta-data to store or retrieve. |
| 11667 */ |
| 11668 value: { |
| 11669 type: Object, |
| 11670 notify: true, |
| 11671 observer: '_valueChanged' |
| 11672 }, |
| 11673 |
| 11674 /** |
| 11675 * If true, `value` is set to the iron-meta instance itself. |
| 11676 */ |
| 11677 self: { |
| 11678 type: Boolean, |
| 11679 observer: '_selfChanged' |
| 11680 }, |
| 11681 |
| 11682 /** |
| 11683 * Array of all meta-data values for the given type. |
| 11684 */ |
| 11685 list: { |
| 11686 type: Array, |
| 11687 notify: true |
| 11688 } |
| 11689 |
| 11690 }, |
| 11691 |
| 11692 hostAttributes: { |
| 11693 hidden: true |
| 11694 }, |
| 11695 |
| 11696 /** |
| 11697 * Only runs if someone invokes the factory/constructor directly |
| 11698 * e.g. `new Polymer.IronMeta()` |
| 11699 * |
| 11700 * @param {{type: (string|undefined), key: (string|undefined), value}=} co
nfig |
| 11701 */ |
| 11702 factoryImpl: function(config) { |
| 11703 if (config) { |
| 11704 for (var n in config) { |
| 11705 switch(n) { |
| 11706 case 'type': |
| 11707 case 'key': |
| 11708 case 'value': |
| 11709 this[n] = config[n]; |
| 11710 break; |
| 11711 } |
| 11712 } |
| 11713 } |
| 11714 }, |
| 11715 |
| 11716 created: function() { |
| 11717 // TODO(sjmiles): good for debugging? |
| 11718 this._metaDatas = metaDatas; |
| 11719 this._metaArrays = metaArrays; |
| 11720 }, |
| 11721 |
| 11722 _keyChanged: function(key, old) { |
| 11723 this._resetRegistration(old); |
| 11724 }, |
| 11725 |
| 11726 _valueChanged: function(value) { |
| 11727 this._resetRegistration(this.key); |
| 11728 }, |
| 11729 |
| 11730 _selfChanged: function(self) { |
| 11731 if (self) { |
| 11732 this.value = this; |
| 11733 } |
| 11734 }, |
| 11735 |
| 11736 _typeChanged: function(type) { |
| 11737 this._unregisterKey(this.key); |
| 11738 if (!metaDatas[type]) { |
| 11739 metaDatas[type] = {}; |
| 11740 } |
| 11741 this._metaData = metaDatas[type]; |
| 11742 if (!metaArrays[type]) { |
| 11743 metaArrays[type] = []; |
| 11744 } |
| 11745 this.list = metaArrays[type]; |
| 11746 this._registerKeyValue(this.key, this.value); |
| 11747 }, |
| 11748 |
| 11749 /** |
| 11750 * Retrieves meta data value by key. |
| 11751 * |
| 11752 * @method byKey |
| 11753 * @param {string} key The key of the meta-data to be returned. |
| 11754 * @return {*} |
| 11755 */ |
| 11756 byKey: function(key) { |
| 11757 return this._metaData && this._metaData[key]; |
| 11758 }, |
| 11759 |
| 11760 _resetRegistration: function(oldKey) { |
| 11761 this._unregisterKey(oldKey); |
| 11762 this._registerKeyValue(this.key, this.value); |
| 11763 }, |
| 11764 |
| 11765 _unregisterKey: function(key) { |
| 11766 this._unregister(key, this._metaData, this.list); |
| 11767 }, |
| 11768 |
| 11769 _registerKeyValue: function(key, value) { |
| 11770 this._register(key, value, this._metaData, this.list); |
| 11771 }, |
| 11772 |
| 11773 _register: function(key, value, data, list) { |
| 11774 if (key && data && value !== undefined) { |
| 11775 data[key] = value; |
| 11776 list.push(value); |
| 11777 } |
| 11778 }, |
| 11779 |
| 11780 _unregister: function(key, data, list) { |
| 11781 if (key && data) { |
| 11782 if (key in data) { |
| 11783 var value = data[key]; |
| 11784 delete data[key]; |
| 11785 this.arrayDelete(list, value); |
| 11786 } |
| 11787 } |
| 11788 } |
| 11789 |
| 11790 }); |
| 11791 |
| 11792 Polymer.IronMeta.getIronMeta = function getIronMeta() { |
| 11793 if (singleton === null) { |
| 11794 singleton = new Polymer.IronMeta(); |
| 11795 } |
| 11796 return singleton; |
| 11797 }; |
| 11798 |
| 11799 /** |
| 11800 `iron-meta-query` can be used to access infomation stored in `iron-meta`. |
| 11801 |
| 11802 Examples: |
| 11803 |
| 11804 If I create an instance like this: |
| 11805 |
| 11806 <iron-meta key="info" value="foo/bar"></iron-meta> |
| 11807 |
| 11808 Note that value="foo/bar" is the metadata I've defined. I could define more |
| 11809 attributes or use child nodes to define additional metadata. |
| 11810 |
| 11811 Now I can access that element (and it's metadata) from any `iron-meta-query`
instance: |
| 11812 |
| 11813 var value = new Polymer.IronMetaQuery({key: 'info'}).value; |
| 11814 |
| 11815 @group Polymer Iron Elements |
| 11816 @element iron-meta-query |
| 11817 */ |
| 11818 Polymer.IronMetaQuery = Polymer({ |
| 11819 |
| 11820 is: 'iron-meta-query', |
| 11821 |
| 11822 properties: { |
| 11823 |
| 11824 /** |
| 11825 * The type of meta-data. All meta-data of the same type is stored |
| 11826 * together. |
| 11827 */ |
| 11828 type: { |
| 11829 type: String, |
| 11830 value: 'default', |
| 11831 observer: '_typeChanged' |
| 11832 }, |
| 11833 |
| 11834 /** |
| 11835 * Specifies a key to use for retrieving `value` from the `type` |
| 11836 * namespace. |
| 11837 */ |
| 11838 key: { |
| 11839 type: String, |
| 11840 observer: '_keyChanged' |
| 11841 }, |
| 11842 |
| 11843 /** |
| 11844 * The meta-data to store or retrieve. |
| 11845 */ |
| 11846 value: { |
| 11847 type: Object, |
| 11848 notify: true, |
| 11849 readOnly: true |
| 11850 }, |
| 11851 |
| 11852 /** |
| 11853 * Array of all meta-data values for the given type. |
| 11854 */ |
| 11855 list: { |
| 11856 type: Array, |
| 11857 notify: true |
| 11858 } |
| 11859 |
| 11860 }, |
| 11861 |
| 11862 /** |
| 11863 * Actually a factory method, not a true constructor. Only runs if |
| 11864 * someone invokes it directly (via `new Polymer.IronMeta()`); |
| 11865 * |
| 11866 * @param {{type: (string|undefined), key: (string|undefined)}=} config |
| 11867 */ |
| 11868 factoryImpl: function(config) { |
| 11869 if (config) { |
| 11870 for (var n in config) { |
| 11871 switch(n) { |
| 11872 case 'type': |
| 11873 case 'key': |
| 11874 this[n] = config[n]; |
| 11875 break; |
| 11876 } |
| 11877 } |
| 11878 } |
| 11879 }, |
| 11880 |
| 11881 created: function() { |
| 11882 // TODO(sjmiles): good for debugging? |
| 11883 this._metaDatas = metaDatas; |
| 11884 this._metaArrays = metaArrays; |
| 11885 }, |
| 11886 |
| 11887 _keyChanged: function(key) { |
| 11888 this._setValue(this._metaData && this._metaData[key]); |
| 11889 }, |
| 11890 |
| 11891 _typeChanged: function(type) { |
| 11892 this._metaData = metaDatas[type]; |
| 11893 this.list = metaArrays[type]; |
| 11894 if (this.key) { |
| 11895 this._keyChanged(this.key); |
| 11896 } |
| 11897 }, |
| 11898 |
| 11899 /** |
| 11900 * Retrieves meta data value by key. |
| 11901 * @param {string} key The key of the meta-data to be returned. |
| 11902 * @return {*} |
| 11903 */ |
| 11904 byKey: function(key) { |
| 11905 return this._metaData && this._metaData[key]; |
| 11906 } |
| 11907 |
| 11908 }); |
| 11909 |
| 11910 })(); |
| 11911 </script> |
| 11912 |
| 11913 |
| 11914 <dom-module id="iron-icon" assetpath="/res/imp/bower_components/iron-icon/"> |
| 11915 <template> |
| 11916 <style> |
| 11917 :host { |
| 11918 @apply(--layout-inline); |
| 11919 @apply(--layout-center-center); |
| 11920 position: relative; |
| 11921 |
| 11922 vertical-align: middle; |
| 11923 |
| 11924 fill: var(--iron-icon-fill-color, currentcolor); |
| 11925 stroke: var(--iron-icon-stroke-color, none); |
| 11926 |
| 11927 width: var(--iron-icon-width, 24px); |
| 11928 height: var(--iron-icon-height, 24px); |
| 11929 } |
| 11930 </style> |
| 11931 </template> |
| 11932 |
| 11933 <script> |
| 11934 |
| 11935 Polymer({ |
| 11936 |
| 11937 is: 'iron-icon', |
| 11938 |
| 11939 properties: { |
| 11940 |
| 11941 /** |
| 11942 * The name of the icon to use. The name should be of the form: |
| 11943 * `iconset_name:icon_name`. |
| 11944 */ |
| 11945 icon: { |
| 11946 type: String, |
| 11947 observer: '_iconChanged' |
| 11948 }, |
| 11949 |
| 11950 /** |
| 11951 * The name of the theme to used, if one is specified by the |
| 11952 * iconset. |
| 11953 */ |
| 11954 theme: { |
| 11955 type: String, |
| 11956 observer: '_updateIcon' |
| 11957 }, |
| 11958 |
| 11959 /** |
| 11960 * If using iron-icon without an iconset, you can set the src to be |
| 11961 * the URL of an individual icon image file. Note that this will take |
| 11962 * precedence over a given icon attribute. |
| 11963 */ |
| 11964 src: { |
| 11965 type: String, |
| 11966 observer: '_srcChanged' |
| 11967 }, |
| 11968 |
| 11969 /** |
| 11970 * @type {!Polymer.IronMeta} |
| 11971 */ |
| 11972 _meta: { |
| 11973 value: Polymer.Base.create('iron-meta', {type: 'iconset'}), |
| 11974 observer: '_updateIcon' |
| 11975 } |
| 11976 |
| 11977 }, |
| 11978 |
| 11979 _DEFAULT_ICONSET: 'icons', |
| 11980 |
| 11981 _iconChanged: function(icon) { |
| 11982 var parts = (icon || '').split(':'); |
| 11983 this._iconName = parts.pop(); |
| 11984 this._iconsetName = parts.pop() || this._DEFAULT_ICONSET; |
| 11985 this._updateIcon(); |
| 11986 }, |
| 11987 |
| 11988 _srcChanged: function(src) { |
| 11989 this._updateIcon(); |
| 11990 }, |
| 11991 |
| 11992 _usesIconset: function() { |
| 11993 return this.icon || !this.src; |
| 11994 }, |
| 11995 |
| 11996 /** @suppress {visibility} */ |
| 11997 _updateIcon: function() { |
| 11998 if (this._usesIconset()) { |
| 11999 if (this._img && this._img.parentNode) { |
| 12000 Polymer.dom(this.root).removeChild(this._img); |
| 12001 } |
| 12002 if (this._iconName === "") { |
| 12003 if (this._iconset) { |
| 12004 this._iconset.removeIcon(this); |
| 12005 } |
| 12006 } else if (this._iconsetName && this._meta) { |
| 12007 this._iconset = /** @type {?Polymer.Iconset} */ ( |
| 12008 this._meta.byKey(this._iconsetName)); |
| 12009 if (this._iconset) { |
| 12010 this._iconset.applyIcon(this, this._iconName, this.theme); |
| 12011 this.unlisten(window, 'iron-iconset-added', '_updateIcon'); |
| 12012 } else { |
| 12013 this.listen(window, 'iron-iconset-added', '_updateIcon'); |
| 12014 } |
| 12015 } |
| 12016 } else { |
| 12017 if (this._iconset) { |
| 12018 this._iconset.removeIcon(this); |
| 12019 } |
| 12020 if (!this._img) { |
| 12021 this._img = document.createElement('img'); |
| 12022 this._img.style.width = '100%'; |
| 12023 this._img.style.height = '100%'; |
| 12024 this._img.draggable = false; |
| 12025 } |
| 12026 this._img.src = this.src; |
| 12027 Polymer.dom(this.root).appendChild(this._img); |
| 12028 } |
| 12029 } |
| 12030 |
| 12031 }); |
| 12032 |
| 12033 </script> |
| 12034 |
| 12035 </dom-module> |
| 12036 <script> |
| 12037 /** |
| 12038 * The `iron-iconset-svg` element allows users to define their own icon sets |
| 12039 * that contain svg icons. The svg icon elements should be children of the |
| 12040 * `iron-iconset-svg` element. Multiple icons should be given distinct id's. |
| 12041 * |
| 12042 * Using svg elements to create icons has a few advantages over traditional |
| 12043 * bitmap graphics like jpg or png. Icons that use svg are vector based so |
| 12044 * they are resolution independent and should look good on any device. They |
| 12045 * are stylable via css. Icons can be themed, colorized, and even animated. |
| 12046 * |
| 12047 * Example: |
| 12048 * |
| 12049 * <iron-iconset-svg name="my-svg-icons" size="24"> |
| 12050 * <svg> |
| 12051 * <defs> |
| 12052 * <g id="shape"> |
| 12053 * <rect x="12" y="0" width="12" height="24" /> |
| 12054 * <circle cx="12" cy="12" r="12" /> |
| 12055 * </g> |
| 12056 * </defs> |
| 12057 * </svg> |
| 12058 * </iron-iconset-svg> |
| 12059 * |
| 12060 * This will automatically register the icon set "my-svg-icons" to the iconset |
| 12061 * database. To use these icons from within another element, make a |
| 12062 * `iron-iconset` element and call the `byId` method |
| 12063 * to retrieve a given iconset. To apply a particular icon inside an |
| 12064 * element use the `applyIcon` method. For example: |
| 12065 * |
| 12066 * iconset.applyIcon(iconNode, 'car'); |
| 12067 * |
| 12068 * @element iron-iconset-svg |
| 12069 * @demo demo/index.html |
| 12070 * @implements {Polymer.Iconset} |
| 12071 */ |
| 12072 Polymer({ |
| 12073 is: 'iron-iconset-svg', |
| 12074 |
| 12075 properties: { |
| 12076 |
| 12077 /** |
| 12078 * The name of the iconset. |
| 12079 */ |
| 12080 name: { |
| 12081 type: String, |
| 12082 observer: '_nameChanged' |
| 12083 }, |
| 12084 |
| 12085 /** |
| 12086 * The size of an individual icon. Note that icons must be square. |
| 12087 */ |
| 12088 size: { |
| 12089 type: Number, |
| 12090 value: 24 |
| 12091 } |
| 12092 |
| 12093 }, |
| 12094 |
| 12095 attached: function() { |
| 12096 this.style.display = 'none'; |
| 12097 }, |
| 12098 |
| 12099 /** |
| 12100 * Construct an array of all icon names in this iconset. |
| 12101 * |
| 12102 * @return {!Array} Array of icon names. |
| 12103 */ |
| 12104 getIconNames: function() { |
| 12105 this._icons = this._createIconMap(); |
| 12106 return Object.keys(this._icons).map(function(n) { |
| 12107 return this.name + ':' + n; |
| 12108 }, this); |
| 12109 }, |
| 12110 |
| 12111 /** |
| 12112 * Applies an icon to the given element. |
| 12113 * |
| 12114 * An svg icon is prepended to the element's shadowRoot if it exists, |
| 12115 * otherwise to the element itself. |
| 12116 * |
| 12117 * @method applyIcon |
| 12118 * @param {Element} element Element to which the icon is applied. |
| 12119 * @param {string} iconName Name of the icon to apply. |
| 12120 * @return {?Element} The svg element which renders the icon. |
| 12121 */ |
| 12122 applyIcon: function(element, iconName) { |
| 12123 // insert svg element into shadow root, if it exists |
| 12124 element = element.root || element; |
| 12125 // Remove old svg element |
| 12126 this.removeIcon(element); |
| 12127 // install new svg element |
| 12128 var svg = this._cloneIcon(iconName); |
| 12129 if (svg) { |
| 12130 var pde = Polymer.dom(element); |
| 12131 pde.insertBefore(svg, pde.childNodes[0]); |
| 12132 return element._svgIcon = svg; |
| 12133 } |
| 12134 return null; |
| 12135 }, |
| 12136 |
| 12137 /** |
| 12138 * Remove an icon from the given element by undoing the changes effected |
| 12139 * by `applyIcon`. |
| 12140 * |
| 12141 * @param {Element} element The element from which the icon is removed. |
| 12142 */ |
| 12143 removeIcon: function(element) { |
| 12144 // Remove old svg element |
| 12145 if (element._svgIcon) { |
| 12146 Polymer.dom(element).removeChild(element._svgIcon); |
| 12147 element._svgIcon = null; |
| 12148 } |
| 12149 }, |
| 12150 |
| 12151 /** |
| 12152 * |
| 12153 * When name is changed, register iconset metadata |
| 12154 * |
| 12155 */ |
| 12156 _nameChanged: function() { |
| 12157 new Polymer.IronMeta({type: 'iconset', key: this.name, value: this}); |
| 12158 this.async(function() { |
| 12159 this.fire('iron-iconset-added', this, {node: window}); |
| 12160 }); |
| 12161 }, |
| 12162 |
| 12163 /** |
| 12164 * Create a map of child SVG elements by id. |
| 12165 * |
| 12166 * @return {!Object} Map of id's to SVG elements. |
| 12167 */ |
| 12168 _createIconMap: function() { |
| 12169 // Objects chained to Object.prototype (`{}`) have members. Specifically, |
| 12170 // on FF there is a `watch` method that confuses the icon map, so we |
| 12171 // need to use a null-based object here. |
| 12172 var icons = Object.create(null); |
| 12173 Polymer.dom(this).querySelectorAll('[id]') |
| 12174 .forEach(function(icon) { |
| 12175 icons[icon.id] = icon; |
| 12176 }); |
| 12177 return icons; |
| 12178 }, |
| 12179 |
| 12180 /** |
| 12181 * Produce installable clone of the SVG element matching `id` in this |
| 12182 * iconset, or `undefined` if there is no matching element. |
| 12183 * |
| 12184 * @return {Element} Returns an installable clone of the SVG element |
| 12185 * matching `id`. |
| 12186 */ |
| 12187 _cloneIcon: function(id) { |
| 12188 // create the icon map on-demand, since the iconset itself has no discrete |
| 12189 // signal to know when it's children are fully parsed |
| 12190 this._icons = this._icons || this._createIconMap(); |
| 12191 return this._prepareSvgClone(this._icons[id], this.size); |
| 12192 }, |
| 12193 |
| 12194 /** |
| 12195 * @param {Element} sourceSvg |
| 12196 * @param {number} size |
| 12197 * @return {Element} |
| 12198 */ |
| 12199 _prepareSvgClone: function(sourceSvg, size) { |
| 12200 if (sourceSvg) { |
| 12201 var content = sourceSvg.cloneNode(true), |
| 12202 svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'), |
| 12203 viewBox = content.getAttribute('viewBox') || '0 0 ' + size + ' ' + s
ize; |
| 12204 svg.setAttribute('viewBox', viewBox); |
| 12205 svg.setAttribute('preserveAspectRatio', 'xMidYMid meet'); |
| 12206 // TODO(dfreedm): `pointer-events: none` works around https://crbug.com/
370136 |
| 12207 // TODO(sjmiles): inline style may not be ideal, but avoids requiring a
shadow-root |
| 12208 svg.style.cssText = 'pointer-events: none; display: block; width: 100%;
height: 100%;'; |
| 12209 svg.appendChild(content).removeAttribute('id'); |
| 12210 return svg; |
| 12211 } |
| 12212 return null; |
| 12213 } |
| 12214 |
| 12215 }); |
| 12216 </script> |
| 12217 <iron-iconset-svg name="icons" size="24"> |
| 12218 <svg><defs> |
| 12219 <g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 1
9.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08-
.16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.0
7.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03-
.15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56-
.05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2
.52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-.
68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8
c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18.
85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48-
.08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11
.1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.2
3c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8.
55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.0
9 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-.
4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.1
3-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.7
2 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3
.27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"></path></g> |
| 12220 <g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z
m9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"></path></g> |
| 12221 <g id="accessible"><circle cx="12" cy="4" r="2"></circle><path d="M19 13v-2c-1.5
4.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.0
1H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v-
5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2
-2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.7
6 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"></path></g> |
| 12222 <g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm
14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"></path></g> |
| 12223 <g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2
-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm
-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67
1.5-1.5 1.5z"></path></g> |
| 12224 <g id="account-box"><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9
-2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34
3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"></path></g> |
| 12225 <g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 1
0-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14
.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.
94-3.5 3.22-6 3.22z"></path></g> |
| 12226 <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g> |
| 12227 <g id="add-alert"><path d="M10.01 21.01c0 1.1.89 1.99 1.99 1.99s1.99-.89 1.99-1.
99h-3.98zm8.87-4.19V11c0-3.25-2.25-5.97-5.29-6.69v-.72C13.59 2.71 12.88 2 12 2s-
1.59.71-1.59 1.59v.72C7.37 5.03 5.12 7.75 5.12 11v5.82L3 18.94V20h18v-1.06l-2.12
-2.12zM16 13.01h-3v3h-2v-3H8V11h3V8h2v3h3v2.01z"></path></g> |
| 12228 <g id="add-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.
9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g> |
| 12229 <g id="add-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10
S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g> |
| 12230 <g id="add-circle-outline"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48
2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8
s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g> |
| 12231 <g id="add-shopping-cart"><path d="M11 9h2V6h3V4h-3V1h-2v3H8v2h3v3zm-4 9c-1.1 0-
1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.9
9 2 2-.9 2-2-.9-2-2-2zm-9.83-3.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3
.86-7.01L19.42 4h-.01l-1.1 2-2.76 5H8.53l-.13-.27L6.16 6l-.95-2-.94-2H1v2h2l3.6
7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.13 0-.25-.11-.25
-.25z"></path></g> |
| 12232 <g id="alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L
6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12
4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.
13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"></path></g> |
| 12233 <g id="alarm-add"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5.
72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97
0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-
7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"></path></g> |
| 12234 <g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1
.52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C1
0.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1
.65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97
4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55
16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9
.86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"></path></g> |
| 12235 <g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.
39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97
0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7
7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"></path><
/g> |
| 12236 <g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4-
4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73
-7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7
0 2.13 5.57 0 7.7z"></path></g> |
| 12237 <g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67
1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v
10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4.
33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7
c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l
-1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2-
.71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4.
84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"></path></g> |
| 12238 <g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.
9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"></path></g> |
| 12239 <g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4z
m6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"></p
ath></g> |
| 12240 <g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0
-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9
2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81
-1h12l.94 1H5.12z"></path></g> |
| 12241 <g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 1
3H20v-2z"></path></g> |
| 12242 <g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59
L4 12l8 8 8-8z"></path></g> |
| 12243 <g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"></path></g> |
| 12244 <g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"></path></g> |
| 12245 <g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"></path></g> |
| 12246 <g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12
20l8-8z"></path></g> |
| 12247 <g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l
-8-8-8 8z"></path></g> |
| 12248 <g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1.
1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99
h18v14.02z"></path></g> |
| 12249 <g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-
.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"></path></
g> |
| 12250 <g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82
2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.
55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4
H7V7h10v2z"></path></g> |
| 12251 <g id="assignment-ind"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-
2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7
0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3
-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"></path>
</g> |
| 12252 <g id="assignment-late"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84
-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-
6 15h-2v-2h2v2zm0-4h-2V8h2v6zm-1-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1
1z"></path></g> |
| 12253 <g id="assignment-return"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.
84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z
m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm4 12h-4v3l-5-5 5-5v3h4v4z"
></path></g> |
| 12254 <g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.
4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-
2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5
z"></path></g> |
| 12255 <g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2
.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2
-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10
14.17l6.59-6.59L18 9l-8 8z"></path></g> |
| 12256 <g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.
79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18
c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46
18 2 15.54 2 12.5z"></path></g> |
| 12257 <g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1
.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c
.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.4
6-3.03-1.24-4.26z"></path></g> |
| 12258 <g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.
9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.4
1 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z
"></path></g> |
| 12259 <g id="backup"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.3
5 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05
-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g> |
| 12260 <g id="block"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5
2 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4
13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0
4.42-3.58 8-8 8z"></path></g> |
| 12261 <g id="book"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2
V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g> |
| 12262 <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2
-2-2z"></path></g> |
| 12263 <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1
.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g> |
| 12264 <g id="bug-report"><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.
59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62
1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.0
4.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.
09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v
2z"></path></g> |
| 12265 <g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9
6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1
.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g> |
| 12266 <g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1
.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6
6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l
4 4 4-4H6z"></path></g> |
| 12267 <g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h1
6c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5
-5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2.
75 1.25z"></path></g> |
| 12268 <g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.
53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 1
0.59 15.59 7 17 8.41 13.41 12 17 15.59z"></path></g> |
| 12269 <g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3
-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c
0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2
-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c
.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7
10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g> |
| 12270 <g id="card-membership"><path d="M20 2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h4v
5l4-2 4 2v-5h4c1.11 0 2-.89 2-2V4c0-1.11-.89-2-2-2zm0 13H4v-2h16v2zm0-5H4V4h16v6
z"></path></g> |
| 12271 <g id="card-travel"><path d="M20 6h-3V4c0-1.11-.89-2-2-2H9c-1.11 0-2 .89-2 2v2H4
c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zM9
4h6v2H9V4zm11 15H4v-2h16v2zm0-5H4V8h3v2h2V8h6v2h2V8h3v6z"></path></g> |
| 12272 <g id="change-history"><path d="M12 7.77L18.39 18H5.61L12 7.77M12 4L2 20h20L12 4
z"></path></g> |
| 12273 <g id="check"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path
></g> |
| 12274 <g id="check-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0
2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z">
</path></g> |
| 12275 <g id="check-box-outline-blank"><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v1
4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g> |
| 12276 <g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-
10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></g> |
| 12277 <g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></p
ath></g> |
| 12278 <g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"><
/path></g> |
| 12279 <g id="chrome-reader-mode"><path d="M13 12h7v1.5h-7zm0-2.5h7V11h-7zm0 5h7V16h-7z
M21 4H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 1
5h-9V6h9v13z"></path></g> |
| 12280 <g id="class"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-
2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g> |
| 12281 <g id="clear"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59
6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g> |
| 12282 <g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59
6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g> |
| 12283 <g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35
8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-
4.78-4.65-4.96z"></path></g> |
| 12284 <g id="cloud-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-
10S17.52 2 12 2zm4.5 14H8c-1.66 0-3-1.34-3-3s1.34-3 3-3l.14.01C8.58 8.28 10.13 7
12 7c2.21 0 4 1.79 4 4h.5c1.38 0 2.5 1.12 2.5 2.5S17.88 16 16.5 16z"></path></g
> |
| 12285 <g id="cloud-done"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64
5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-
2.05-4.78-4.65-4.96zM10 17l-3.5-3.5 1.41-1.41L10 14.17 15.18 9l1.41 1.41L10 17z"
></path></g> |
| 12286 <g id="cloud-download"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6
5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2
.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"></path></g> |
| 12287 <g id="cloud-off"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-
4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0
3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.6
4-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6
h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1
.73z"></path></g> |
| 12288 <g id="cloud-queue"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.6
4 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64
-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h.71C7.37 7.69 9.48 6
12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3s-1.34 3-3 3z"></path></g> |
| 12289 <g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.
64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.6
4-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g> |
| 12290 <g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4
.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path></g> |
| 12291 <g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H2
2V8h-7.01V5L11 9l3.99 4z"></path></g> |
| 12292 <g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-
2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"><
/path></g> |
| 12293 <g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4
S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59
14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7
7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0
-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.
22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"></path></g> |
| 12294 <g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.8
2 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c
.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"></path>
</g> |
| 12295 <g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24-
.15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1.
79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.6
5 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1
.12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.7
7-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.3
6.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.5
9-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.4
8 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8
8-8 8 3.59 8 8-3.59 8-8 8z"></path></g> |
| 12296 <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.
04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.
75 1.83-1.83z"></path></g> |
| 12297 <g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0
1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9
h2v3h3v2z"></path></g> |
| 12298 <g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2
h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path>
</g> |
| 12299 <g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6
h8V3h-8z"></path></g> |
| 12300 <g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1
V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c
0-1.1-.9-2-2-2zm0 16H5V9h14v11z"></path></g> |
| 12301 <g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-
1-1h-5l-1 1H5v2h14V4z"></path></g> |
| 12302 <g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2
H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"></p
ath></g> |
| 12303 <g id="dns"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1
-1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c-
.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1
0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g> |
| 12304 <g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"></path
></g> |
| 12305 <g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L1
1.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41
L1.83 12 .41 13.41z"></path></g> |
| 12306 <g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.4
8-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8
18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"></pat
h></g> |
| 12307 <g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.4
1-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.9
8 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z">
</path></g> |
| 12308 <g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65
2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26
4.84L12 13z"></path></g> |
| 12309 <g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"></path></g> |
| 12310 <g id="error"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5
2 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"></path></g> |
| 12311 <g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2
12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58
-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g> |
| 12312 <g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L
3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"
></path></g> |
| 12313 <g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm1
5 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"></path></g> |
| 12314 <g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2
h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g> |
| 12315 <g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></p
ath></g> |
| 12316 <g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></pat
h></g> |
| 12317 <g id="explore"><path d="M12 10.9c-.61 0-1.1.49-1.1 1.1s.49 1.1 1.1 1.1c.61 0 1.
1-.49 1.1-1.1s-.49-1.1-1.1-1.1zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10
-10S17.52 2 12 2zm2.19 12.19L6 18l3.81-8.19L18 6l-3.81 8.19z"></path></g> |
| 12318 <g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 1
0.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.2
1 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.2
1 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"
></path></g> |
| 12319 <g id="face"><path d="M9 11.75c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25-
.56 1.25-1.25-.56-1.25-1.25-1.25zm6 0c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.2
5 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-.29.02-.58.05-.86 2.36-1.05
4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c.78 0 1.53-.09 2.25-.26.21.71.
33 1.47.33 2.26 0 4.41-3.59 8-8 8z"></path></g> |
| 12320 <g id="favorite"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.
42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22
8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"></path></g> |
| 12321 <g id="favorite-border"><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.2
4 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6
15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24
4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96
5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"></path></g> |
| 12322 <g id="feedback"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-
2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"></path></g> |
| 12323 <g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path
></g> |
| 12324 <g id="file-upload"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"></path></g> |
| 12325 <g id="filter-list"><path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"></p
ath></g> |
| 12326 <g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1
.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5
-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1
.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"></path></g> |
| 12327 <g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.0
5C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.
64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3
.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L
20 21.49 21.49 20l-4.85-4.86z"></path></g> |
| 12328 <g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3
12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.8
2 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.
44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75
-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-
.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36
.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-
.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s
5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.
57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2
.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.
38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54
.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1
.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-
1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0
1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44
1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64
-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.7
9 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-
1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87
4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"></path><
/g> |
| 12329 <g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"></path></g> |
| 12330 <g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8.
21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28
L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"></path></g> |
| 12331 <g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1
.84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3
.16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z"><
/path></g> |
| 12332 <g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2
V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2
2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2
2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"></path></g> |
| 12333 <g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2
2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z
"></path></g> |
| 12334 <g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0
2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g> |
| 12335 <g id="folder-open"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2
2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"></path></g> |
| 12336 <g id="folder-shared"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9
2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-
2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z"></path></g> |
| 12337 <g id="font-download"><path d="M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v1
6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.1
2 3H5.96l5.11-13h1.86l5.11 13h-2.09z"></path></g> |
| 12338 <g id="forward"><path d="M12 8V4l8 8-8 8v-4H4V8z"></path></g> |
| 12339 <g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-
5h-2v3zM14 5v2h3v3h2V5h-5z"></path></g> |
| 12340 <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h
3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g> |
| 12341 <g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2.
828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2.
828-5.657-5.657z"></path></g> |
| 12342 <g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52
-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-
.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-
3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H
21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06
2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.8
5-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25
c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2
2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"></path></g> |
| 12343 <g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g> |
| 12344 <g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6
0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-
2v-1z"></path></g> |
| 12345 <g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19
8.63 2 9.24l5.46 4.73L5.82 21z"></path></g> |
| 12346 <g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10
S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5
-1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2
.5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.
5 2.5-1.12 2.5-2.5 2.5z"></path></g> |
| 12347 <g id="help"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52
2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.
45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2
.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"></path></g> |
| 12348 <g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10
10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-
3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-
2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></g> |
| 12349 <g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59
9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47
2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-
8 8 3.59 8 8-3.59 8-8 8z"></path></g> |
| 12350 <g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8
7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19
.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2
.08V8H12z"></path></g> |
| 12351 <g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"></path></g> |
| 12352 <g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.
99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4
h8v3.5l-4 4z"></path></g> |
| 12353 <g id="hourglass-full"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.9
9h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6z"></path></g> |
| 12354 <g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10
v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0
1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"></path></g> |
| 12355 <g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2
2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9
-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.
1 3.1v2z"></path></g> |
| 12356 <g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1
1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2
.89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm
-8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z"
></path></g> |
| 12357 <g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H
19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V
5H19v10z"></path></g> |
| 12358 <g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2
2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"></path></g> |
| 12359 <g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52
2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"></path></g> |
| 12360 <g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10
10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-
3.59 8-8 8zM11 9h2V7h-2v2z"></path></g> |
| 12361 <g id="input"><path d="M21 3.01H3c-1.1 0-2 .9-2 2V9h2V4.99h18v14.03H3V15H1v4.01c
0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98v-14c0-1.11-.9-2-2-2zM11 16l4-4-4-4v3H1
v2h10v3z"></path></g> |
| 12362 <g id="invert-colors"><path d="M17.66 7.93L12 2.27 6.34 7.93c-3.12 3.12-3.12 8.1
9 0 11.31C7.9 20.8 9.95 21.58 12 21.58c2.05 0 4.1-.78 5.66-2.34 3.12-3.12 3.12-8
.19 0-11.31zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59s.62-3
.11 1.76-4.24L12 5.1v14.49z"></path></g> |
| 12363 <g id="label"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9
3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"></p
ath></g> |
| 12364 <g id="label-outline"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.
01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.
16zM16 17H5V7h11l3.55 5L16 17z"></path></g> |
| 12365 <g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2
2 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63
3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.
76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-
.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.
37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8
.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96z
M14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16
2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.4
9 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64
.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g> |
| 12366 <g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1
.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></pa
th></g> |
| 12367 <g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1
zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45
1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.
3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15
4.1z"></path></g> |
| 12368 <g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3
20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v-
2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"></path></g> |
| 12369 <g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v
4h18V4H3z"></path></g> |
| 12370 <g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2
.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0
3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></pat
h></g> |
| 12371 <g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm
0 4h14v-2H7v2zM7 7v2h14V7H7z"></path></g> |
| 12372 <g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2
2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-
2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1
3.1v2z"></path></g> |
| 12373 <g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-
9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39
3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2
zm0 12H6V10h12v10z"></path></g> |
| 12374 <g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z
m6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1
.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v
2H8.9V6zM18 20H6V10h12v10z"></path></g> |
| 12375 <g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9
-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7
c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67
4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 1
4.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1
.08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"></path></g> |
| 12376 <g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2
-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g> |
| 12377 <g id="markunread"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1
.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g> |
| 12378 <g id="markunread-mailbox"><path d="M20 6H10v6H8V4h6V0H6v6H4c-1.1 0-2 .9-2 2v12c
0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"></path></g> |
| 12379 <g id="menu"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></g> |
| 12380 <g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12
0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.
9 2-2-.9-2-2-2z"></path></g> |
| 12381 <g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2
c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2
-2-.9-2-2-2z"></path></g> |
| 12382 <g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5
s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8
2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c
-1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.3
4-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></g> |
| 12383 <g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2
1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3
H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"></path></g> |
| 12384 <g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3
14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V
9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"></path></g> |
| 12385 <g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18
c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z">
</path></g> |
| 12386 <g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17
.5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z
"></path></g> |
| 12387 <g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4
.11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56
17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18
14H6z"></path></g> |
| 12388 <g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2
H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z">
</path></g> |
| 12389 <g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2
h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"
></path></g> |
| 12390 <g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm
14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"></path></g> |
| 12391 <g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1.
12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9
2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13
.99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1.
42z"></path></g> |
| 12392 <g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1
.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31
2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5
S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.
5 1.5-1.5s1.5.67 1.5 1.5z"></path></g> |
| 12393 <g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c
1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path></g> |
| 12394 <g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c
0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0
2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2
s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"></path></g> |
| 12395 <g id="perm-contact-calendar"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2
2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.66 0 3 1.34 3 3s-
1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"></pa
th></g> |
| 12396 <g id="perm-data-setting"><path d="M18.99 11.5c.34 0 .67.03 1 .07L20 0 0 20h11.5
6c-.04-.33-.07-.66-.07-1 0-4.14 3.36-7.5 7.5-7.5zm3.71 7.99c.02-.16.04-.32.04-.4
9 0-.17-.01-.33-.04-.49l1.06-.83c.09-.08.12-.21.06-.32l-1-1.73c-.06-.11-.19-.15-
.31-.11l-1.24.5c-.26-.2-.54-.37-.85-.49l-.19-1.32c-.01-.12-.12-.21-.24-.21h-2c-.
12 0-.23.09-.25.21l-.19 1.32c-.3.13-.59.29-.85.49l-1.24-.5c-.11-.04-.24 0-.31.11
l-1 1.73c-.06.11-.04.24.06.32l1.06.83c-.02.16-.03.32-.03.49 0 .17.01.33.03.49l-1
.06.83c-.09.08-.12.21-.06.32l1 1.73c.06.11.19.15.31.11l1.24-.5c.26.2.54.37.85.49
l.19 1.32c.02.12.12.21.25.21h2c.12 0 .23-.09.25-.21l.19-1.32c.3-.13.59-.29.84-.4
9l1.25.5c.11.04.24 0 .31-.11l1-1.73c.06-.11.03-.24-.06-.32l-1.07-.83zm-3.71 1.01
c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path>
</g> |
| 12397 <g id="perm-device-information"><path d="M13 7h-2v2h2V7zm0 4h-2v6h2v-6zm4-9.99L7
1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17
19H7V5h10v14z"></path></g> |
| 12398 <g id="perm-identity"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.
9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2
.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-
8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"></path></g> |
| 12399 <g id="perm-media"><path d="M2 6H0v5h.01L0 20c0 1.1.9 2 2 2h18v-2H2V6zm20-2h-8l-
2-2H6c-1.1 0-1.99.9-1.99 2L4 16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2
zM7 15l4.5-6 3.5 4.51 2.5-3.01L21 15H7z"></path></g> |
| 12400 <g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.0
3-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.0
1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 1
7 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"></path></g> |
| 12401 <g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.8
5 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"></path></g> |
| 12402 <g id="pets"><circle cx="4.5" cy="9.5" r="2.5"></circle><circle cx="9" cy="5.5"
r="2.5"></circle><circle cx="15" cy="5.5" r="2.5"></circle><circle cx="19.5" cy=
"9.5" r="2.5"></circle><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.5
4-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79
.05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1.
31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h
.18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4.
8z"></path></g> |
| 12403 <g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1
.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03
z"></path></g> |
| 12404 <g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1
3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h1
8v14.05z"></path></g> |
| 12405 <g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3.
31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"></path></g> |
| 12406 <g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.6
3L19.5 12 15 20h4l4.5-8z"></path></g> |
| 12407 <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99
7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17
5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6
.83z"></path></g> |
| 12408 <g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2
-2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z"><
/path></g> |
| 12409 <g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3
-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6
v4h12V3z"></path></g> |
| 12410 <g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52
22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8
8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g> |
| 12411 <g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.4
5-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"><
/path></g> |
| 12412 <g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24
5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2
zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g> |
| 12413 <g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-
8 8z"></path></g> |
| 12414 <g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5
-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2
l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v
20z"></path></g> |
| 12415 <g id="record-voice-over"><circle cx="9" cy="9" r="4"></circle><path d="M9 15c-2
.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.7
1 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77
7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"></path></g> |
| 12416 <g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0
-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.0
7.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-
1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1
.45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8
.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g> |
| 12417 <g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.9
6 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6
3.6z"></path></g> |
| 12418 <g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.9
9 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6
-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"></path></g> |
| 12419 <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g> |
| 12420 <g id="remove-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10
-10S17.52 2 12 2zm5 11H7v-2h10v2z"></path></g> |
| 12421 <g id="remove-circle-outline"><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4
.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.
59 8 8-3.59 8-8 8z"></path></g> |
| 12422 <g id="reorder"><path d="M3 15h18v-2H3v2zm0 4h18v-2H3v2zm0-8h18V9H3v2zm0-6v2h18V
5H3z"></path></g> |
| 12423 <g id="reply"><path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"
></path></g> |
| 12424 <g id="reply-all"><path d="M7 8V5l-7 7 7 7v-3l-4-4 4-4zm6 1V5l-7 7 7 7v-4.1c5 0
8.5 1.6 11 5.1-1-5-4-10-11-11z"></path></g> |
| 12425 <g id="report"><path d="M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15.
73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0
.72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z"></path></g> |
| 12426 <g id="report-problem"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v
4z"></path></g> |
| 12427 <g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8
7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19
.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2
.08V8H12z"></path></g> |
| 12428 <g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.8
7-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1
.12 2.5-2.5 2.5z"></path></g> |
| 12429 <g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm
0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h-
2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c
1.65 0 3 1.35 3 3v5h2V8z"></path></g> |
| 12430 <g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9
-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05
-.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29
-.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l-
3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"></path></g> |
| 12431 <g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2
-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h1
0v4z"></path></g> |
| 12432 <g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2
2 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.
58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g> |
| 12433 <g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.
91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.7
9l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.
5 11.99 14 9.5 14z"></path></g> |
| 12434 <g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2
zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-
2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v
2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm
2-8h6v6H9V9z"></path></g> |
| 12435 <g id="send"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path></g> |
| 12436 <g id="settings"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.
11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.
08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2
.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49
.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.1
2.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42
.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.4
9 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3
.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"></path></g> |
| 12437 <g id="settings-applications"><path d="M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-
.9-2-2-2zm7-7H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.8
9-2-2-2zm-1.75 9c0 .23-.02.46-.05.68l1.48 1.16c.13.11.17.3.08.45l-1.4 2.42c-.09.
15-.27.21-.43.15l-1.74-.7c-.36.28-.76.51-1.18.69l-.26 1.85c-.03.17-.18.3-.35.3h-
2.8c-.17 0-.32-.13-.35-.29l-.26-1.85c-.43-.18-.82-.41-1.18-.69l-1.74.7c-.16.06-.
34 0-.43-.15l-1.4-2.42c-.09-.15-.05-.34.08-.45l1.48-1.16c-.03-.23-.05-.46-.05-.6
9 0-.23.02-.46.05-.68l-1.48-1.16c-.13-.11-.17-.3-.08-.45l1.4-2.42c.09-.15.27-.21
.43-.15l1.74.7c.36-.28.76-.51 1.18-.69l.26-1.85c.03-.17.18-.3.35-.3h2.8c.17 0 .3
2.13.35.29l.26 1.85c.43.18.82.41 1.18.69l1.74-.7c.16-.06.34 0 .43.15l1.4 2.42c.0
9.15.05.34-.08.45l-1.48 1.16c.03.23.05.46.05.69z"></path></g> |
| 12438 <g id="settings-backup-restore"><path d="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2
2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.1
3 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4.
03 9-9s-4.03-9-9-9z"></path></g> |
| 12439 <g id="settings-bluetooth"><path d="M11 24h2v-2h-2v2zm-4 0h2v-2H7v2zm8 0h2v-2h-2
v2zm2.71-18.29L12 0h-1v7.59L6.41 3 5 4.41 10.59 10 5 15.59 6.41 17 11 12.41V20h1
l5.71-5.71-4.3-4.29 4.3-4.29zM13 3.83l1.88 1.88L13 7.59V3.83zm1.88 10.46L13 16.1
7v-3.76l1.88 1.88z"></path></g> |
| 12440 <g id="settings-brightness"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02zM8 16h2.5l1.5 1.5 1.5-
1.5H16v-2.5l1.5-1.5-1.5-1.5V8h-2.5L12 6.5 10.5 8H8v2.5L6.5 12 8 13.5V16zm4-7c1.6
6 0 3 1.34 3 3s-1.34 3-3 3V9z"></path></g> |
| 12441 <g id="settings-cell"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM16
.01L8 0C6.9 0 6 .9 6 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-1.99-2-1.99z
M16 16H8V4h8v12z"></path></g> |
| 12442 <g id="settings-ethernet"><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.2
8L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1
.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"></path></g> |
| 12443 <g id="settings-input-antenna"><path d="M12 5c-3.87 0-7 3.13-7 7h2c0-2.76 2.24-5
5-5s5 2.24 5 5h2c0-3.87-3.13-7-7-7zm1 9.29c.88-.39 1.5-1.26 1.5-2.29 0-1.38-1.1
2-2.5-2.5-2.5S9.5 10.62 9.5 12c0 1.02.62 1.9 1.5 2.29v3.3L7.59 21 9 22.41l3-3 3
3L16.41 21 13 17.59v-3.3zM12 1C5.93 1 1 5.93 1 12h2c0-4.97 4.03-9 9-9s9 4.03 9 9
h2c0-6.07-4.93-11-11-11z"></path></g> |
| 12444 <g id="settings-input-component"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h
6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0
c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1
-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4
14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g> |
| 12445 <g id="settings-input-composite"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h
6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0
c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1
-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4
14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g> |
| 12446 <g id="settings-input-hdmi"><path d="M18 7V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v3H
5v6l3 6v3h8v-3l3-6V7h-1zM8 4h8v3h-2V5h-1v2h-2V5h-1v2H8V4z"></path></g> |
| 12447 <g id="settings-input-svideo"><path d="M8 11.5c0-.83-.67-1.5-1.5-1.5S5 10.67 5 1
1.5 5.67 13 6.5 13 8 12.33 8 11.5zm7-5c0-.83-.67-1.5-1.5-1.5h-3C9.67 5 9 5.67 9
6.5S9.67 8 10.5 8h3c.83 0 1.5-.67 1.5-1.5zM8.5 15c-.83 0-1.5.67-1.5 1.5S7.67 18
8.5 18s1.5-.67 1.5-1.5S9.33 15 8.5 15zM12 1C5.93 1 1 5.93 1 12s4.93 11 11 11 11-
4.93 11-11S18.07 1 12 1zm0 20c-4.96 0-9-4.04-9-9s4.04-9 9-9 9 4.04 9 9-4.04 9-9
9zm5.5-11c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z
m-2 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></
path></g> |
| 12448 <g id="settings-overscan"><path d="M12.01 5.5L10 8h4l-1.99-2.5zM18 10v4l2.5-1.99
L18 10zM6 10l-2.5 2.01L6 14v-4zm8 6h-4l2.01 2.5L14 16zm7-13H3c-1.1 0-2 .9-2 2v14
c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"></p
ath></g> |
| 12449 <g id="settings-phone"><path d="M13 9h-2v2h2V9zm4 0h-2v2h2V9zm3 6.5c-1.25 0-2.45
-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2
-2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1
.45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 9v2h2V9h-2
z"></path></g> |
| 12450 <g id="settings-power"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm2-22h-2v10h2V2zm3
.56 2.44l-1.45 1.45C16.84 6.94 18 8.83 18 11c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-2.1
7 1.16-4.06 2.88-5.12L7.44 4.44C5.36 5.88 4 8.28 4 11c0 4.42 3.58 8 8 8s8-3.58 8
-8c0-2.72-1.36-5.12-3.44-6.56zM15 24h2v-2h-2v2z"></path></g> |
| 12451 <g id="settings-remote"><path d="M15 9H9c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h6c.5
5 0 1-.45 1-1V10c0-.55-.45-1-1-1zm-3 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2
2zM7.05 6.05l1.41 1.41C9.37 6.56 10.62 6 12 6s2.63.56 3.54 1.46l1.41-1.41C15.68
4.78 13.93 4 12 4s-3.68.78-4.95 2.05zM12 0C8.96 0 6.21 1.23 4.22 3.22l1.41 1.41C
7.26 3.01 9.51 2 12 2s4.74 1.01 6.36 2.64l1.41-1.41C17.79 1.23 15.04 0 12 0z"></
path></g> |
| 12452 <g id="settings-voice"><path d="M7 24h2v-2H7v2zm5-11c1.66 0 2.99-1.34 2.99-3L15
4c0-1.66-1.34-3-3-3S9 2.34 9 4v6c0 1.66 1.34 3 3 3zm-1 11h2v-2h-2v2zm4 0h2v-2h-2
v2zm4-14h-1.7c0 3-2.54 5.1-5.3 5.1S6.7 13 6.7 10H5c0 3.41 2.72 6.23 6 6.72V20h2v
-3.28c3.28-.49 6-3.31 6-6.72z"></path></g> |
| 12453 <g id="shop"><path d="M16 6V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H2v13c0 1.1
1.89 2 2 2h16c1.11 0 2-.89 2-2V6h-6zm-6-2h4v2h-4V4zM9 18V9l7.5 4L9 18z"></path><
/g> |
| 12454 <g id="shop-two"><path d="M3 9H1v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2H3V9zm15-
4V3c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H5v11c0 1.11.89 2 2 2h14c1.11 0 2-.89
2-2V5h-5zm-6-2h4v2h-4V3zm0 12V8l5.5 3-5.5 4z"></path></g> |
| 12455 <g id="shopping-basket"><path d="M17.21 9l-4.38-6.56c-.19-.28-.51-.42-.83-.42-.3
2 0-.64.14-.83.43L6.79 9H2c-.55 0-1 .45-1 1 0 .09.01.18.04.27l2.54 9.27c.23.84 1
1.46 1.92 1.46h13c.92 0 1.69-.62 1.93-1.46l2.54-9.27L23 10c0-.55-.45-1-1-1h-4.7
9zM9 9l3-4.4L15 9H9zm3 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g
> |
| 12456 <g id="shopping-cart"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.
9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.
42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49
c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2
s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"></path></g> |
| 12457 <g id="sort"><path d="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z"></path></g> |
| 12458 <g id="speaker-notes"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-
.9 2-2V4c0-1.1-.9-2-2-2zM8 14H6v-2h2v2zm0-3H6V9h2v2zm0-3H6V6h2v2zm7 6h-5v-2h5v2z
m3-3h-8V9h8v2zm0-3h-8V6h8v2z"></path></g> |
| 12459 <g id="spellcheck"><path d="M12.45 16h2.09L9.43 3H7.57L2.46 16h2.09l1.12-3h5.64l
1.14 3zm-6.02-5L8.5 5.48 10.57 11H6.43zm15.16.59l-8.09 8.09L9.83 16l-1.41 1.41 5
.09 5.09L23 13l-1.41-1.41z"></path></g> |
| 12460 <g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19
8.63 2 9.24l5.46 4.73L5.82 21z"></path></g> |
| 12461 <g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L
5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.8
8 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"></path></g> |
| 12462 <g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.
82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2
.88 1 4.28L12 15.4z"></path></g> |
| 12463 <g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 1
7.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.4
2L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"></path></g> |
| 12464 <g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h
1zm-9 4H6v-4h6v4z"></path></g> |
| 12465 <g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l
3.59 3.58L11 21l-6-6 6-6z"></path></g> |
| 12466 <g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v1
0h9.17l-3.59-3.58L13 9l6 6z"></path></g> |
| 12467 <g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h1
6V5H4z"></path></g> |
| 12468 <g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 1
6.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.6
6 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c
0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.
37-3.47C10.5 13.1 9.66 13 9 13z"></path></g> |
| 12469 <g id="swap-horiz"><path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v
3H10v2h7.01v3L21 9z"></path></g> |
| 12470 <g id="swap-vert"><path d="M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3
V14h2V6.99h3L9 3z"></path></g> |
| 12471 <g id="swap-vertical-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-
4.48 10-10S17.52 2 12 2zM6.5 9L10 5.5 13.5 9H11v4H9V9H6.5zm11 6L14 18.5 10.5 15H
13v-4h2v4h2.5z"></path></g> |
| 12472 <g id="system-update-alt"><path d="M12 16.5l4-4h-3v-9h-2v9H8l4 4zm9-13h-6v1.99h6
v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1
.1-.9-2-2-2z"></path></g> |
| 12473 <g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V
5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"></path></g> |
| 12474 <g id="tab-unselected"><path d="M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9-
2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1-
.9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2
-.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"></path></g> |
| 12475 <g id="text-format"><path d="M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L
6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z"></path></g> |
| 12476 <g id="theaters"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8
17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h
2v2z"></path></g> |
| 12477 <g id="thumb-down"><path d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.
14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44
1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z"
></path></g> |
| 12478 <g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03
-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2
2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23
10z"></path></g> |
| 12479 <g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31
-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.7
5c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0
-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.
18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.6
7-1.5-1.5-1.5z"></path></g> |
| 12480 <g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c
.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.
05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-
2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-
2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55
-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"></path></g> |
| 12481 <g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2
zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"></path></g> |
| 12482 <g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.
1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"></pa
th></g> |
| 12483 <g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z
m0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83
4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.6
5z"></path></g> |
| 12484 <g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.7
4c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3.
74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10
6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8
4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.0
2-.14.02-.2 0-.62-.38-1.16-.91-1.38z"></path></g> |
| 12485 <g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0
4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0
3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10
.9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98
-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48
10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"></path></g> |
| 12486 <g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.
71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9
.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04
zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.
24z"></path></g> |
| 12487 <g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6
4-4 6.3 6.29L22 12v6z"></path></g> |
| 12488 <g id="trending-flat"><path d="M22 12l-4-4v3H3v2h15v3z"></path></g> |
| 12489 <g id="trending-up"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4
4 6.3-6.29L22 12V6z"></path></g> |
| 12490 <g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-
2-2-2z"></path></g> |
| 12491 <g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1
-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g> |
| 12492 <g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47
0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2-
.9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l
.82-1h12l.93 1H5.12z"></path></g> |
| 12493 <g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.
16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.
5 8z"></path></g> |
| 12494 <g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12
14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"></p
ath></g> |
| 12495 <g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12
5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"></path></g
> |
| 12496 <g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.7
3 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h
2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-1
2.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V
8h1.5z"></path></g> |
| 12497 <g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.
45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g> |
| 12498 <g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0
1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0
1-.45 1-1V4c0-.55-.45-1-1-1z"></path></g> |
| 12499 <g id="view-array"><path d="M4 18h3V5H4v13zM18 5v13h3V5h-3zM8 18h9V5H8v13z"></pa
th></g> |
| 12500 <g id="view-carousel"><path d="M7 19h10V4H7v15zm-5-2h4V6H2v11zM18 6v11h4V6h-4z">
</path></g> |
| 12501 <g id="view-column"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z"><
/path></g> |
| 12502 <g id="view-day"><path d="M2 21h19v-3H2v3zM20 8H3c-.55 0-1 .45-1 1v6c0 .55.45 1
1 1h17c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zM2 3v3h19V3H2z"></path></g> |
| 12503 <g id="view-headline"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6
v2h16V5H4z"></path></g> |
| 12504 <g id="view-list"><path d="M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H
9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z"></path></g> |
| 12505 <g id="view-module"><path d="M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v-
6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z"></path></g> |
| 12506 <g id="view-quilt"><path d="M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10
5v6h11V5H10z"></path></g> |
| 12507 <g id="view-stream"><path d="M4 18h17v-6H4v6zM4 5v6h17V5H4z"></path></g> |
| 12508 <g id="view-week"><path d="M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1z"></path></g> |
| 12509 <g id="visibility"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s
9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5
2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"><
/path></g> |
| 12510 <g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l
2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98
.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02
1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.
27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .4
4-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-
2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"></path></g> |
| 12511 <g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></p
ath></g> |
| 12512 <g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17
.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"></path></g> |
| 12513 <g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v
5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15
c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"></path
></g> |
| 12514 <g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11
0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-
6 0h-4V4h4v2z"></path></g> |
| 12515 <g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61
1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.5
3 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.7
1 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l
-4.99-5z"></path></g> |
| 12516 <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5
.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.
79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9
.5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"></path></g> |
| 12517 <g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16
5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v
.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14
9.5 11.99 14 9.5 14zM7 9h5v1H7z"></path></g> |
| 12518 </defs></svg> |
| 12519 </iron-iconset-svg> |
| 12520 <script> |
| 12521 (function() { |
| 12522 'use strict'; |
| 12523 |
| 12524 /** |
| 12525 * Chrome uses an older version of DOM Level 3 Keyboard Events |
| 12526 * |
| 12527 * Most keys are labeled as text, but some are Unicode codepoints. |
| 12528 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712
21/keyset.html#KeySet-Set |
| 12529 */ |
| 12530 var KEY_IDENTIFIER = { |
| 12531 'U+0008': 'backspace', |
| 12532 'U+0009': 'tab', |
| 12533 'U+001B': 'esc', |
| 12534 'U+0020': 'space', |
| 12535 'U+007F': 'del' |
| 12536 }; |
| 12537 |
| 12538 /** |
| 12539 * Special table for KeyboardEvent.keyCode. |
| 12540 * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even bett
er |
| 12541 * than that. |
| 12542 * |
| 12543 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve
nt.keyCode#Value_of_keyCode |
| 12544 */ |
| 12545 var KEY_CODE = { |
| 12546 8: 'backspace', |
| 12547 9: 'tab', |
| 12548 13: 'enter', |
| 12549 27: 'esc', |
| 12550 33: 'pageup', |
| 12551 34: 'pagedown', |
| 12552 35: 'end', |
| 12553 36: 'home', |
| 12554 32: 'space', |
| 12555 37: 'left', |
| 12556 38: 'up', |
| 12557 39: 'right', |
| 12558 40: 'down', |
| 12559 46: 'del', |
| 12560 106: '*' |
| 12561 }; |
| 12562 |
| 12563 /** |
| 12564 * MODIFIER_KEYS maps the short name for modifier keys used in a key |
| 12565 * combo string to the property name that references those same keys |
| 12566 * in a KeyboardEvent instance. |
| 12567 */ |
| 12568 var MODIFIER_KEYS = { |
| 12569 'shift': 'shiftKey', |
| 12570 'ctrl': 'ctrlKey', |
| 12571 'alt': 'altKey', |
| 12572 'meta': 'metaKey' |
| 12573 }; |
| 12574 |
| 12575 /** |
| 12576 * KeyboardEvent.key is mostly represented by printable character made by |
| 12577 * the keyboard, with unprintable keys labeled nicely. |
| 12578 * |
| 12579 * However, on OS X, Alt+char can make a Unicode character that follows an |
| 12580 * Apple-specific mapping. In this case, we fall back to .keyCode. |
| 12581 */ |
| 12582 var KEY_CHAR = /[a-z0-9*]/; |
| 12583 |
| 12584 /** |
| 12585 * Matches a keyIdentifier string. |
| 12586 */ |
| 12587 var IDENT_CHAR = /U\+/; |
| 12588 |
| 12589 /** |
| 12590 * Matches arrow keys in Gecko 27.0+ |
| 12591 */ |
| 12592 var ARROW_KEY = /^arrow/; |
| 12593 |
| 12594 /** |
| 12595 * Matches space keys everywhere (notably including IE10's exceptional name |
| 12596 * `spacebar`). |
| 12597 */ |
| 12598 var SPACE_KEY = /^space(bar)?/; |
| 12599 |
| 12600 /** |
| 12601 * Matches ESC key. |
| 12602 * |
| 12603 * Value from: http://w3c.github.io/uievents-key/#key-Escape |
| 12604 */ |
| 12605 var ESC_KEY = /^escape$/; |
| 12606 |
| 12607 /** |
| 12608 * Transforms the key. |
| 12609 * @param {string} key The KeyBoardEvent.key |
| 12610 * @param {Boolean} [noSpecialChars] Limits the transformation to |
| 12611 * alpha-numeric characters. |
| 12612 */ |
| 12613 function transformKey(key, noSpecialChars) { |
| 12614 var validKey = ''; |
| 12615 if (key) { |
| 12616 var lKey = key.toLowerCase(); |
| 12617 if (lKey === ' ' || SPACE_KEY.test(lKey)) { |
| 12618 validKey = 'space'; |
| 12619 } else if (ESC_KEY.test(lKey)) { |
| 12620 validKey = 'esc'; |
| 12621 } else if (lKey.length == 1) { |
| 12622 if (!noSpecialChars || KEY_CHAR.test(lKey)) { |
| 12623 validKey = lKey; |
| 12624 } |
| 12625 } else if (ARROW_KEY.test(lKey)) { |
| 12626 validKey = lKey.replace('arrow', ''); |
| 12627 } else if (lKey == 'multiply') { |
| 12628 // numpad '*' can map to Multiply on IE/Windows |
| 12629 validKey = '*'; |
| 12630 } else { |
| 12631 validKey = lKey; |
| 12632 } |
| 12633 } |
| 12634 return validKey; |
| 12635 } |
| 12636 |
| 12637 function transformKeyIdentifier(keyIdent) { |
| 12638 var validKey = ''; |
| 12639 if (keyIdent) { |
| 12640 if (keyIdent in KEY_IDENTIFIER) { |
| 12641 validKey = KEY_IDENTIFIER[keyIdent]; |
| 12642 } else if (IDENT_CHAR.test(keyIdent)) { |
| 12643 keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16); |
| 12644 validKey = String.fromCharCode(keyIdent).toLowerCase(); |
| 12645 } else { |
| 12646 validKey = keyIdent.toLowerCase(); |
| 12647 } |
| 12648 } |
| 12649 return validKey; |
| 12650 } |
| 12651 |
| 12652 function transformKeyCode(keyCode) { |
| 12653 var validKey = ''; |
| 12654 if (Number(keyCode)) { |
| 12655 if (keyCode >= 65 && keyCode <= 90) { |
| 12656 // ascii a-z |
| 12657 // lowercase is 32 offset from uppercase |
| 12658 validKey = String.fromCharCode(32 + keyCode); |
| 12659 } else if (keyCode >= 112 && keyCode <= 123) { |
| 12660 // function keys f1-f12 |
| 12661 validKey = 'f' + (keyCode - 112); |
| 12662 } else if (keyCode >= 48 && keyCode <= 57) { |
| 12663 // top 0-9 keys |
| 12664 validKey = String(keyCode - 48); |
| 12665 } else if (keyCode >= 96 && keyCode <= 105) { |
| 12666 // num pad 0-9 |
| 12667 validKey = String(keyCode - 96); |
| 12668 } else { |
| 12669 validKey = KEY_CODE[keyCode]; |
| 12670 } |
| 12671 } |
| 12672 return validKey; |
| 12673 } |
| 12674 |
| 12675 /** |
| 12676 * Calculates the normalized key for a KeyboardEvent. |
| 12677 * @param {KeyboardEvent} keyEvent |
| 12678 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key |
| 12679 * transformation to alpha-numeric chars. This is useful with key |
| 12680 * combinations like shift + 2, which on FF for MacOS produces |
| 12681 * keyEvent.key = @ |
| 12682 * To get 2 returned, set noSpecialChars = true |
| 12683 * To get @ returned, set noSpecialChars = false |
| 12684 */ |
| 12685 function normalizedKeyForEvent(keyEvent, noSpecialChars) { |
| 12686 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to |
| 12687 // .detail.key to support artificial keyboard events. |
| 12688 return transformKey(keyEvent.key, noSpecialChars) || |
| 12689 transformKeyIdentifier(keyEvent.keyIdentifier) || |
| 12690 transformKeyCode(keyEvent.keyCode) || |
| 12691 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no
SpecialChars) || ''; |
| 12692 } |
| 12693 |
| 12694 function keyComboMatchesEvent(keyCombo, event) { |
| 12695 // For combos with modifiers we support only alpha-numeric keys |
| 12696 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); |
| 12697 return keyEvent === keyCombo.key && |
| 12698 (!keyCombo.hasModifiers || ( |
| 12699 !!event.shiftKey === !!keyCombo.shiftKey && |
| 12700 !!event.ctrlKey === !!keyCombo.ctrlKey && |
| 12701 !!event.altKey === !!keyCombo.altKey && |
| 12702 !!event.metaKey === !!keyCombo.metaKey) |
| 12703 ); |
| 12704 } |
| 12705 |
| 12706 function parseKeyComboString(keyComboString) { |
| 12707 if (keyComboString.length === 1) { |
| 12708 return { |
| 12709 combo: keyComboString, |
| 12710 key: keyComboString, |
| 12711 event: 'keydown' |
| 12712 }; |
| 12713 } |
| 12714 return keyComboString.split('+').reduce(function(parsedKeyCombo, keyComboP
art) { |
| 12715 var eventParts = keyComboPart.split(':'); |
| 12716 var keyName = eventParts[0]; |
| 12717 var event = eventParts[1]; |
| 12718 |
| 12719 if (keyName in MODIFIER_KEYS) { |
| 12720 parsedKeyCombo[MODIFIER_KEYS[keyName]] = true; |
| 12721 parsedKeyCombo.hasModifiers = true; |
| 12722 } else { |
| 12723 parsedKeyCombo.key = keyName; |
| 12724 parsedKeyCombo.event = event || 'keydown'; |
| 12725 } |
| 12726 |
| 12727 return parsedKeyCombo; |
| 12728 }, { |
| 12729 combo: keyComboString.split(':').shift() |
| 12730 }); |
| 12731 } |
| 12732 |
| 12733 function parseEventString(eventString) { |
| 12734 return eventString.trim().split(' ').map(function(keyComboString) { |
| 12735 return parseKeyComboString(keyComboString); |
| 12736 }); |
| 12737 } |
| 12738 |
| 12739 /** |
| 12740 * `Polymer.IronA11yKeysBehavior` provides a normalized interface for proces
sing |
| 12741 * keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3
.org/TR/wai-aria-practices/#kbd_general_binding). |
| 12742 * The element takes care of browser differences with respect to Keyboard ev
ents |
| 12743 * and uses an expressive syntax to filter key presses. |
| 12744 * |
| 12745 * Use the `keyBindings` prototype property to express what combination of k
eys |
| 12746 * will trigger the callback. A key binding has the format |
| 12747 * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or |
| 12748 * `"KEY:EVENT": "callback"` are valid as well). Some examples: |
| 12749 * |
| 12750 * keyBindings: { |
| 12751 * 'space': '_onKeydown', // same as 'space:keydown' |
| 12752 * 'shift+tab': '_onKeydown', |
| 12753 * 'enter:keypress': '_onKeypress', |
| 12754 * 'esc:keyup': '_onKeyup' |
| 12755 * } |
| 12756 * |
| 12757 * The callback will receive with an event containing the following informat
ion in `event.detail`: |
| 12758 * |
| 12759 * _onKeydown: function(event) { |
| 12760 * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab" |
| 12761 * console.log(event.detail.key); // KEY only, e.g. "tab" |
| 12762 * console.log(event.detail.event); // EVENT, e.g. "keydown" |
| 12763 * console.log(event.detail.keyboardEvent); // the original KeyboardE
vent |
| 12764 * } |
| 12765 * |
| 12766 * Use the `keyEventTarget` attribute to set up event handlers on a specific |
| 12767 * node. |
| 12768 * |
| 12769 * See the [demo source code](https://github.com/PolymerElements/iron-a11y-k
eys-behavior/blob/master/demo/x-key-aware.html) |
| 12770 * for an example. |
| 12771 * |
| 12772 * @demo demo/index.html |
| 12773 * @polymerBehavior |
| 12774 */ |
| 12775 Polymer.IronA11yKeysBehavior = { |
| 12776 properties: { |
| 12777 /** |
| 12778 * The EventTarget that will be firing relevant KeyboardEvents. Set it t
o |
| 12779 * `null` to disable the listeners. |
| 12780 * @type {?EventTarget} |
| 12781 */ |
| 12782 keyEventTarget: { |
| 12783 type: Object, |
| 12784 value: function() { |
| 12785 return this; |
| 12786 } |
| 12787 }, |
| 12788 |
| 12789 /** |
| 12790 * If true, this property will cause the implementing element to |
| 12791 * automatically stop propagation on any handled KeyboardEvents. |
| 12792 */ |
| 12793 stopKeyboardEventPropagation: { |
| 12794 type: Boolean, |
| 12795 value: false |
| 12796 }, |
| 12797 |
| 12798 _boundKeyHandlers: { |
| 12799 type: Array, |
| 12800 value: function() { |
| 12801 return []; |
| 12802 } |
| 12803 }, |
| 12804 |
| 12805 // We use this due to a limitation in IE10 where instances will have |
| 12806 // own properties of everything on the "prototype". |
| 12807 _imperativeKeyBindings: { |
| 12808 type: Object, |
| 12809 value: function() { |
| 12810 return {}; |
| 12811 } |
| 12812 } |
| 12813 }, |
| 12814 |
| 12815 observers: [ |
| 12816 '_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)' |
| 12817 ], |
| 12818 |
| 12819 |
| 12820 /** |
| 12821 * To be used to express what combination of keys will trigger the relati
ve |
| 12822 * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}` |
| 12823 * @type {Object} |
| 12824 */ |
| 12825 keyBindings: {}, |
| 12826 |
| 12827 registered: function() { |
| 12828 this._prepKeyBindings(); |
| 12829 }, |
| 12830 |
| 12831 attached: function() { |
| 12832 this._listenKeyEventListeners(); |
| 12833 }, |
| 12834 |
| 12835 detached: function() { |
| 12836 this._unlistenKeyEventListeners(); |
| 12837 }, |
| 12838 |
| 12839 /** |
| 12840 * Can be used to imperatively add a key binding to the implementing |
| 12841 * element. This is the imperative equivalent of declaring a keybinding |
| 12842 * in the `keyBindings` prototype property. |
| 12843 */ |
| 12844 addOwnKeyBinding: function(eventString, handlerName) { |
| 12845 this._imperativeKeyBindings[eventString] = handlerName; |
| 12846 this._prepKeyBindings(); |
| 12847 this._resetKeyEventListeners(); |
| 12848 }, |
| 12849 |
| 12850 /** |
| 12851 * When called, will remove all imperatively-added key bindings. |
| 12852 */ |
| 12853 removeOwnKeyBindings: function() { |
| 12854 this._imperativeKeyBindings = {}; |
| 12855 this._prepKeyBindings(); |
| 12856 this._resetKeyEventListeners(); |
| 12857 }, |
| 12858 |
| 12859 /** |
| 12860 * Returns true if a keyboard event matches `eventString`. |
| 12861 * |
| 12862 * @param {KeyboardEvent} event |
| 12863 * @param {string} eventString |
| 12864 * @return {boolean} |
| 12865 */ |
| 12866 keyboardEventMatchesKeys: function(event, eventString) { |
| 12867 var keyCombos = parseEventString(eventString); |
| 12868 for (var i = 0; i < keyCombos.length; ++i) { |
| 12869 if (keyComboMatchesEvent(keyCombos[i], event)) { |
| 12870 return true; |
| 12871 } |
| 12872 } |
| 12873 return false; |
| 12874 }, |
| 12875 |
| 12876 _collectKeyBindings: function() { |
| 12877 var keyBindings = this.behaviors.map(function(behavior) { |
| 12878 return behavior.keyBindings; |
| 12879 }); |
| 12880 |
| 12881 if (keyBindings.indexOf(this.keyBindings) === -1) { |
| 12882 keyBindings.push(this.keyBindings); |
| 12883 } |
| 12884 |
| 12885 return keyBindings; |
| 12886 }, |
| 12887 |
| 12888 _prepKeyBindings: function() { |
| 12889 this._keyBindings = {}; |
| 12890 |
| 12891 this._collectKeyBindings().forEach(function(keyBindings) { |
| 12892 for (var eventString in keyBindings) { |
| 12893 this._addKeyBinding(eventString, keyBindings[eventString]); |
| 12894 } |
| 12895 }, this); |
| 12896 |
| 12897 for (var eventString in this._imperativeKeyBindings) { |
| 12898 this._addKeyBinding(eventString, this._imperativeKeyBindings[eventStri
ng]); |
| 12899 } |
| 12900 |
| 12901 // Give precedence to combos with modifiers to be checked first. |
| 12902 for (var eventName in this._keyBindings) { |
| 12903 this._keyBindings[eventName].sort(function (kb1, kb2) { |
| 12904 var b1 = kb1[0].hasModifiers; |
| 12905 var b2 = kb2[0].hasModifiers; |
| 12906 return (b1 === b2) ? 0 : b1 ? -1 : 1; |
| 12907 }) |
| 12908 } |
| 12909 }, |
| 12910 |
| 12911 _addKeyBinding: function(eventString, handlerName) { |
| 12912 parseEventString(eventString).forEach(function(keyCombo) { |
| 12913 this._keyBindings[keyCombo.event] = |
| 12914 this._keyBindings[keyCombo.event] || []; |
| 12915 |
| 12916 this._keyBindings[keyCombo.event].push([ |
| 12917 keyCombo, |
| 12918 handlerName |
| 12919 ]); |
| 12920 }, this); |
| 12921 }, |
| 12922 |
| 12923 _resetKeyEventListeners: function() { |
| 12924 this._unlistenKeyEventListeners(); |
| 12925 |
| 12926 if (this.isAttached) { |
| 12927 this._listenKeyEventListeners(); |
| 12928 } |
| 12929 }, |
| 12930 |
| 12931 _listenKeyEventListeners: function() { |
| 12932 if (!this.keyEventTarget) { |
| 12933 return; |
| 12934 } |
| 12935 Object.keys(this._keyBindings).forEach(function(eventName) { |
| 12936 var keyBindings = this._keyBindings[eventName]; |
| 12937 var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings); |
| 12938 |
| 12939 this._boundKeyHandlers.push([this.keyEventTarget, eventName, boundKeyH
andler]); |
| 12940 |
| 12941 this.keyEventTarget.addEventListener(eventName, boundKeyHandler); |
| 12942 }, this); |
| 12943 }, |
| 12944 |
| 12945 _unlistenKeyEventListeners: function() { |
| 12946 var keyHandlerTuple; |
| 12947 var keyEventTarget; |
| 12948 var eventName; |
| 12949 var boundKeyHandler; |
| 12950 |
| 12951 while (this._boundKeyHandlers.length) { |
| 12952 // My kingdom for block-scope binding and destructuring assignment.. |
| 12953 keyHandlerTuple = this._boundKeyHandlers.pop(); |
| 12954 keyEventTarget = keyHandlerTuple[0]; |
| 12955 eventName = keyHandlerTuple[1]; |
| 12956 boundKeyHandler = keyHandlerTuple[2]; |
| 12957 |
| 12958 keyEventTarget.removeEventListener(eventName, boundKeyHandler); |
| 12959 } |
| 12960 }, |
| 12961 |
| 12962 _onKeyBindingEvent: function(keyBindings, event) { |
| 12963 if (this.stopKeyboardEventPropagation) { |
| 12964 event.stopPropagation(); |
| 12965 } |
| 12966 |
| 12967 // if event has been already prevented, don't do anything |
| 12968 if (event.defaultPrevented) { |
| 12969 return; |
| 12970 } |
| 12971 |
| 12972 for (var i = 0; i < keyBindings.length; i++) { |
| 12973 var keyCombo = keyBindings[i][0]; |
| 12974 var handlerName = keyBindings[i][1]; |
| 12975 if (keyComboMatchesEvent(keyCombo, event)) { |
| 12976 this._triggerKeyHandler(keyCombo, handlerName, event); |
| 12977 // exit the loop if eventDefault was prevented |
| 12978 if (event.defaultPrevented) { |
| 12979 return; |
| 12980 } |
| 12981 } |
| 12982 } |
| 12983 }, |
| 12984 |
| 12985 _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) { |
| 12986 var detail = Object.create(keyCombo); |
| 12987 detail.keyboardEvent = keyboardEvent; |
| 12988 var event = new CustomEvent(keyCombo.event, { |
| 12989 detail: detail, |
| 12990 cancelable: true |
| 12991 }); |
| 12992 this[handlerName].call(this, event); |
| 12993 if (event.defaultPrevented) { |
| 12994 keyboardEvent.preventDefault(); |
| 12995 } |
| 12996 } |
| 12997 }; |
| 12998 })(); |
| 12999 </script> |
| 13000 <script> |
| 13001 |
| 13002 /** |
| 13003 * @demo demo/index.html |
| 13004 * @polymerBehavior |
| 13005 */ |
| 13006 Polymer.IronControlState = { |
| 13007 |
| 13008 properties: { |
| 13009 |
| 13010 /** |
| 13011 * If true, the element currently has focus. |
| 13012 */ |
| 13013 focused: { |
| 13014 type: Boolean, |
| 13015 value: false, |
| 13016 notify: true, |
| 13017 readOnly: true, |
| 13018 reflectToAttribute: true |
| 13019 }, |
| 13020 |
| 13021 /** |
| 13022 * If true, the user cannot interact with this element. |
| 13023 */ |
| 13024 disabled: { |
| 13025 type: Boolean, |
| 13026 value: false, |
| 13027 notify: true, |
| 13028 observer: '_disabledChanged', |
| 13029 reflectToAttribute: true |
| 13030 }, |
| 13031 |
| 13032 _oldTabIndex: { |
| 13033 type: Number |
| 13034 }, |
| 13035 |
| 13036 _boundFocusBlurHandler: { |
| 13037 type: Function, |
| 13038 value: function() { |
| 13039 return this._focusBlurHandler.bind(this); |
| 13040 } |
| 13041 } |
| 13042 |
| 13043 }, |
| 13044 |
| 13045 observers: [ |
| 13046 '_changedControlState(focused, disabled)' |
| 13047 ], |
| 13048 |
| 13049 ready: function() { |
| 13050 this.addEventListener('focus', this._boundFocusBlurHandler, true); |
| 13051 this.addEventListener('blur', this._boundFocusBlurHandler, true); |
| 13052 }, |
| 13053 |
| 13054 _focusBlurHandler: function(event) { |
| 13055 // NOTE(cdata): if we are in ShadowDOM land, `event.target` will |
| 13056 // eventually become `this` due to retargeting; if we are not in |
| 13057 // ShadowDOM land, `event.target` will eventually become `this` due |
| 13058 // to the second conditional which fires a synthetic event (that is also |
| 13059 // handled). In either case, we can disregard `event.path`. |
| 13060 |
| 13061 if (event.target === this) { |
| 13062 this._setFocused(event.type === 'focus'); |
| 13063 } else if (!this.shadowRoot) { |
| 13064 var target = /** @type {Node} */(Polymer.dom(event).localTarget); |
| 13065 if (!this.isLightDescendant(target)) { |
| 13066 this.fire(event.type, {sourceEvent: event}, { |
| 13067 node: this, |
| 13068 bubbles: event.bubbles, |
| 13069 cancelable: event.cancelable |
| 13070 }); |
| 13071 } |
| 13072 } |
| 13073 }, |
| 13074 |
| 13075 _disabledChanged: function(disabled, old) { |
| 13076 this.setAttribute('aria-disabled', disabled ? 'true' : 'false'); |
| 13077 this.style.pointerEvents = disabled ? 'none' : ''; |
| 13078 if (disabled) { |
| 13079 this._oldTabIndex = this.tabIndex; |
| 13080 this._setFocused(false); |
| 13081 this.tabIndex = -1; |
| 13082 this.blur(); |
| 13083 } else if (this._oldTabIndex !== undefined) { |
| 13084 this.tabIndex = this._oldTabIndex; |
| 13085 } |
| 13086 }, |
| 13087 |
| 13088 _changedControlState: function() { |
| 13089 // _controlStateChanged is abstract, follow-on behaviors may implement it |
| 13090 if (this._controlStateChanged) { |
| 13091 this._controlStateChanged(); |
| 13092 } |
| 13093 } |
| 13094 |
| 13095 }; |
| 13096 |
| 13097 </script> |
| 13098 <script> |
| 13099 |
| 13100 /** |
| 13101 * @demo demo/index.html |
| 13102 * @polymerBehavior Polymer.IronButtonState |
| 13103 */ |
| 13104 Polymer.IronButtonStateImpl = { |
| 13105 |
| 13106 properties: { |
| 13107 |
| 13108 /** |
| 13109 * If true, the user is currently holding down the button. |
| 13110 */ |
| 13111 pressed: { |
| 13112 type: Boolean, |
| 13113 readOnly: true, |
| 13114 value: false, |
| 13115 reflectToAttribute: true, |
| 13116 observer: '_pressedChanged' |
| 13117 }, |
| 13118 |
| 13119 /** |
| 13120 * If true, the button toggles the active state with each tap or press |
| 13121 * of the spacebar. |
| 13122 */ |
| 13123 toggles: { |
| 13124 type: Boolean, |
| 13125 value: false, |
| 13126 reflectToAttribute: true |
| 13127 }, |
| 13128 |
| 13129 /** |
| 13130 * If true, the button is a toggle and is currently in the active state. |
| 13131 */ |
| 13132 active: { |
| 13133 type: Boolean, |
| 13134 value: false, |
| 13135 notify: true, |
| 13136 reflectToAttribute: true |
| 13137 }, |
| 13138 |
| 13139 /** |
| 13140 * True if the element is currently being pressed by a "pointer," which |
| 13141 * is loosely defined as mouse or touch input (but specifically excluding |
| 13142 * keyboard input). |
| 13143 */ |
| 13144 pointerDown: { |
| 13145 type: Boolean, |
| 13146 readOnly: true, |
| 13147 value: false |
| 13148 }, |
| 13149 |
| 13150 /** |
| 13151 * True if the input device that caused the element to receive focus |
| 13152 * was a keyboard. |
| 13153 */ |
| 13154 receivedFocusFromKeyboard: { |
| 13155 type: Boolean, |
| 13156 readOnly: true |
| 13157 }, |
| 13158 |
| 13159 /** |
| 13160 * The aria attribute to be set if the button is a toggle and in the |
| 13161 * active state. |
| 13162 */ |
| 13163 ariaActiveAttribute: { |
| 13164 type: String, |
| 13165 value: 'aria-pressed', |
| 13166 observer: '_ariaActiveAttributeChanged' |
| 13167 } |
| 13168 }, |
| 13169 |
| 13170 listeners: { |
| 13171 down: '_downHandler', |
| 13172 up: '_upHandler', |
| 13173 tap: '_tapHandler' |
| 13174 }, |
| 13175 |
| 13176 observers: [ |
| 13177 '_detectKeyboardFocus(focused)', |
| 13178 '_activeChanged(active, ariaActiveAttribute)' |
| 13179 ], |
| 13180 |
| 13181 keyBindings: { |
| 13182 'enter:keydown': '_asyncClick', |
| 13183 'space:keydown': '_spaceKeyDownHandler', |
| 13184 'space:keyup': '_spaceKeyUpHandler', |
| 13185 }, |
| 13186 |
| 13187 _mouseEventRe: /^mouse/, |
| 13188 |
| 13189 _tapHandler: function() { |
| 13190 if (this.toggles) { |
| 13191 // a tap is needed to toggle the active state |
| 13192 this._userActivate(!this.active); |
| 13193 } else { |
| 13194 this.active = false; |
| 13195 } |
| 13196 }, |
| 13197 |
| 13198 _detectKeyboardFocus: function(focused) { |
| 13199 this._setReceivedFocusFromKeyboard(!this.pointerDown && focused); |
| 13200 }, |
| 13201 |
| 13202 // to emulate native checkbox, (de-)activations from a user interaction fire |
| 13203 // 'change' events |
| 13204 _userActivate: function(active) { |
| 13205 if (this.active !== active) { |
| 13206 this.active = active; |
| 13207 this.fire('change'); |
| 13208 } |
| 13209 }, |
| 13210 |
| 13211 _downHandler: function(event) { |
| 13212 this._setPointerDown(true); |
| 13213 this._setPressed(true); |
| 13214 this._setReceivedFocusFromKeyboard(false); |
| 13215 }, |
| 13216 |
| 13217 _upHandler: function() { |
| 13218 this._setPointerDown(false); |
| 13219 this._setPressed(false); |
| 13220 }, |
| 13221 |
| 13222 /** |
| 13223 * @param {!KeyboardEvent} event . |
| 13224 */ |
| 13225 _spaceKeyDownHandler: function(event) { |
| 13226 var keyboardEvent = event.detail.keyboardEvent; |
| 13227 var target = Polymer.dom(keyboardEvent).localTarget; |
| 13228 |
| 13229 // Ignore the event if this is coming from a focused light child, since th
at |
| 13230 // element will deal with it. |
| 13231 if (this.isLightDescendant(/** @type {Node} */(target))) |
| 13232 return; |
| 13233 |
| 13234 keyboardEvent.preventDefault(); |
| 13235 keyboardEvent.stopImmediatePropagation(); |
| 13236 this._setPressed(true); |
| 13237 }, |
| 13238 |
| 13239 /** |
| 13240 * @param {!KeyboardEvent} event . |
| 13241 */ |
| 13242 _spaceKeyUpHandler: function(event) { |
| 13243 var keyboardEvent = event.detail.keyboardEvent; |
| 13244 var target = Polymer.dom(keyboardEvent).localTarget; |
| 13245 |
| 13246 // Ignore the event if this is coming from a focused light child, since th
at |
| 13247 // element will deal with it. |
| 13248 if (this.isLightDescendant(/** @type {Node} */(target))) |
| 13249 return; |
| 13250 |
| 13251 if (this.pressed) { |
| 13252 this._asyncClick(); |
| 13253 } |
| 13254 this._setPressed(false); |
| 13255 }, |
| 13256 |
| 13257 // trigger click asynchronously, the asynchrony is useful to allow one |
| 13258 // event handler to unwind before triggering another event |
| 13259 _asyncClick: function() { |
| 13260 this.async(function() { |
| 13261 this.click(); |
| 13262 }, 1); |
| 13263 }, |
| 13264 |
| 13265 // any of these changes are considered a change to button state |
| 13266 |
| 13267 _pressedChanged: function(pressed) { |
| 13268 this._changedButtonState(); |
| 13269 }, |
| 13270 |
| 13271 _ariaActiveAttributeChanged: function(value, oldValue) { |
| 13272 if (oldValue && oldValue != value && this.hasAttribute(oldValue)) { |
| 13273 this.removeAttribute(oldValue); |
| 13274 } |
| 13275 }, |
| 13276 |
| 13277 _activeChanged: function(active, ariaActiveAttribute) { |
| 13278 if (this.toggles) { |
| 13279 this.setAttribute(this.ariaActiveAttribute, |
| 13280 active ? 'true' : 'false'); |
| 13281 } else { |
| 13282 this.removeAttribute(this.ariaActiveAttribute); |
| 13283 } |
| 13284 this._changedButtonState(); |
| 13285 }, |
| 13286 |
| 13287 _controlStateChanged: function() { |
| 13288 if (this.disabled) { |
| 13289 this._setPressed(false); |
| 13290 } else { |
| 13291 this._changedButtonState(); |
| 13292 } |
| 13293 }, |
| 13294 |
| 13295 // provide hook for follow-on behaviors to react to button-state |
| 13296 |
| 13297 _changedButtonState: function() { |
| 13298 if (this._buttonStateChanged) { |
| 13299 this._buttonStateChanged(); // abstract |
| 13300 } |
| 13301 } |
| 13302 |
| 13303 }; |
| 13304 |
| 13305 /** @polymerBehavior */ |
| 13306 Polymer.IronButtonState = [ |
| 13307 Polymer.IronA11yKeysBehavior, |
| 13308 Polymer.IronButtonStateImpl |
| 13309 ]; |
| 13310 |
| 13311 </script> |
| 13312 |
| 13313 |
| 13314 <dom-module id="paper-ripple" assetpath="/res/imp/bower_components/paper-ripple/
"> |
| 13315 |
| 13316 <template> |
| 13317 <style> |
| 13318 :host { |
| 13319 display: block; |
| 13320 position: absolute; |
| 13321 border-radius: inherit; |
| 13322 overflow: hidden; |
| 13323 top: 0; |
| 13324 left: 0; |
| 13325 right: 0; |
| 13326 bottom: 0; |
| 13327 |
| 13328 /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers
, |
| 13329 * creating a node (with a position:absolute) in the middle of an event |
| 13330 * handler "interrupts" that event handler (which happens when the |
| 13331 * ripple is created on demand) */ |
| 13332 pointer-events: none; |
| 13333 } |
| 13334 |
| 13335 :host([animating]) { |
| 13336 /* This resolves a rendering issue in Chrome (as of 40) where the |
| 13337 ripple is not properly clipped by its parent (which may have |
| 13338 rounded corners). See: http://jsbin.com/temexa/4 |
| 13339 |
| 13340 Note: We only apply this style conditionally. Otherwise, the browser |
| 13341 will create a new compositing layer for every ripple element on the |
| 13342 page, and that would be bad. */ |
| 13343 -webkit-transform: translate(0, 0); |
| 13344 transform: translate3d(0, 0, 0); |
| 13345 } |
| 13346 |
| 13347 #background, |
| 13348 #waves, |
| 13349 .wave-container, |
| 13350 .wave { |
| 13351 pointer-events: none; |
| 13352 position: absolute; |
| 13353 top: 0; |
| 13354 left: 0; |
| 13355 width: 100%; |
| 13356 height: 100%; |
| 13357 } |
| 13358 |
| 13359 #background, |
| 13360 .wave { |
| 13361 opacity: 0; |
| 13362 } |
| 13363 |
| 13364 #waves, |
| 13365 .wave { |
| 13366 overflow: hidden; |
| 13367 } |
| 13368 |
| 13369 .wave-container, |
| 13370 .wave { |
| 13371 border-radius: 50%; |
| 13372 } |
| 13373 |
| 13374 :host(.circle) #background, |
| 13375 :host(.circle) #waves { |
| 13376 border-radius: 50%; |
| 13377 } |
| 13378 |
| 13379 :host(.circle) .wave-container { |
| 13380 overflow: hidden; |
| 13381 } |
| 13382 </style> |
| 13383 |
| 13384 <div id="background"></div> |
| 13385 <div id="waves"></div> |
| 13386 </template> |
| 13387 </dom-module> |
| 13388 <script> |
| 13389 (function() { |
| 13390 var Utility = { |
| 13391 distance: function(x1, y1, x2, y2) { |
| 13392 var xDelta = (x1 - x2); |
| 13393 var yDelta = (y1 - y2); |
| 13394 |
| 13395 return Math.sqrt(xDelta * xDelta + yDelta * yDelta); |
| 13396 }, |
| 13397 |
| 13398 now: window.performance && window.performance.now ? |
| 13399 window.performance.now.bind(window.performance) : Date.now |
| 13400 }; |
| 13401 |
| 13402 /** |
| 13403 * @param {HTMLElement} element |
| 13404 * @constructor |
| 13405 */ |
| 13406 function ElementMetrics(element) { |
| 13407 this.element = element; |
| 13408 this.width = this.boundingRect.width; |
| 13409 this.height = this.boundingRect.height; |
| 13410 |
| 13411 this.size = Math.max(this.width, this.height); |
| 13412 } |
| 13413 |
| 13414 ElementMetrics.prototype = { |
| 13415 get boundingRect () { |
| 13416 return this.element.getBoundingClientRect(); |
| 13417 }, |
| 13418 |
| 13419 furthestCornerDistanceFrom: function(x, y) { |
| 13420 var topLeft = Utility.distance(x, y, 0, 0); |
| 13421 var topRight = Utility.distance(x, y, this.width, 0); |
| 13422 var bottomLeft = Utility.distance(x, y, 0, this.height); |
| 13423 var bottomRight = Utility.distance(x, y, this.width, this.height); |
| 13424 |
| 13425 return Math.max(topLeft, topRight, bottomLeft, bottomRight); |
| 13426 } |
| 13427 }; |
| 13428 |
| 13429 /** |
| 13430 * @param {HTMLElement} element |
| 13431 * @constructor |
| 13432 */ |
| 13433 function Ripple(element) { |
| 13434 this.element = element; |
| 13435 this.color = window.getComputedStyle(element).color; |
| 13436 |
| 13437 this.wave = document.createElement('div'); |
| 13438 this.waveContainer = document.createElement('div'); |
| 13439 this.wave.style.backgroundColor = this.color; |
| 13440 this.wave.classList.add('wave'); |
| 13441 this.waveContainer.classList.add('wave-container'); |
| 13442 Polymer.dom(this.waveContainer).appendChild(this.wave); |
| 13443 |
| 13444 this.resetInteractionState(); |
| 13445 } |
| 13446 |
| 13447 Ripple.MAX_RADIUS = 300; |
| 13448 |
| 13449 Ripple.prototype = { |
| 13450 get recenters() { |
| 13451 return this.element.recenters; |
| 13452 }, |
| 13453 |
| 13454 get center() { |
| 13455 return this.element.center; |
| 13456 }, |
| 13457 |
| 13458 get mouseDownElapsed() { |
| 13459 var elapsed; |
| 13460 |
| 13461 if (!this.mouseDownStart) { |
| 13462 return 0; |
| 13463 } |
| 13464 |
| 13465 elapsed = Utility.now() - this.mouseDownStart; |
| 13466 |
| 13467 if (this.mouseUpStart) { |
| 13468 elapsed -= this.mouseUpElapsed; |
| 13469 } |
| 13470 |
| 13471 return elapsed; |
| 13472 }, |
| 13473 |
| 13474 get mouseUpElapsed() { |
| 13475 return this.mouseUpStart ? |
| 13476 Utility.now () - this.mouseUpStart : 0; |
| 13477 }, |
| 13478 |
| 13479 get mouseDownElapsedSeconds() { |
| 13480 return this.mouseDownElapsed / 1000; |
| 13481 }, |
| 13482 |
| 13483 get mouseUpElapsedSeconds() { |
| 13484 return this.mouseUpElapsed / 1000; |
| 13485 }, |
| 13486 |
| 13487 get mouseInteractionSeconds() { |
| 13488 return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds; |
| 13489 }, |
| 13490 |
| 13491 get initialOpacity() { |
| 13492 return this.element.initialOpacity; |
| 13493 }, |
| 13494 |
| 13495 get opacityDecayVelocity() { |
| 13496 return this.element.opacityDecayVelocity; |
| 13497 }, |
| 13498 |
| 13499 get radius() { |
| 13500 var width2 = this.containerMetrics.width * this.containerMetrics.width; |
| 13501 var height2 = this.containerMetrics.height * this.containerMetrics.heigh
t; |
| 13502 var waveRadius = Math.min( |
| 13503 Math.sqrt(width2 + height2), |
| 13504 Ripple.MAX_RADIUS |
| 13505 ) * 1.1 + 5; |
| 13506 |
| 13507 var duration = 1.1 - 0.2 * (waveRadius / Ripple.MAX_RADIUS); |
| 13508 var timeNow = this.mouseInteractionSeconds / duration; |
| 13509 var size = waveRadius * (1 - Math.pow(80, -timeNow)); |
| 13510 |
| 13511 return Math.abs(size); |
| 13512 }, |
| 13513 |
| 13514 get opacity() { |
| 13515 if (!this.mouseUpStart) { |
| 13516 return this.initialOpacity; |
| 13517 } |
| 13518 |
| 13519 return Math.max( |
| 13520 0, |
| 13521 this.initialOpacity - this.mouseUpElapsedSeconds * this.opacityDecayVe
locity |
| 13522 ); |
| 13523 }, |
| 13524 |
| 13525 get outerOpacity() { |
| 13526 // Linear increase in background opacity, capped at the opacity |
| 13527 // of the wavefront (waveOpacity). |
| 13528 var outerOpacity = this.mouseUpElapsedSeconds * 0.3; |
| 13529 var waveOpacity = this.opacity; |
| 13530 |
| 13531 return Math.max( |
| 13532 0, |
| 13533 Math.min(outerOpacity, waveOpacity) |
| 13534 ); |
| 13535 }, |
| 13536 |
| 13537 get isOpacityFullyDecayed() { |
| 13538 return this.opacity < 0.01 && |
| 13539 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS); |
| 13540 }, |
| 13541 |
| 13542 get isRestingAtMaxRadius() { |
| 13543 return this.opacity >= this.initialOpacity && |
| 13544 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS); |
| 13545 }, |
| 13546 |
| 13547 get isAnimationComplete() { |
| 13548 return this.mouseUpStart ? |
| 13549 this.isOpacityFullyDecayed : this.isRestingAtMaxRadius; |
| 13550 }, |
| 13551 |
| 13552 get translationFraction() { |
| 13553 return Math.min( |
| 13554 1, |
| 13555 this.radius / this.containerMetrics.size * 2 / Math.sqrt(2) |
| 13556 ); |
| 13557 }, |
| 13558 |
| 13559 get xNow() { |
| 13560 if (this.xEnd) { |
| 13561 return this.xStart + this.translationFraction * (this.xEnd - this.xSta
rt); |
| 13562 } |
| 13563 |
| 13564 return this.xStart; |
| 13565 }, |
| 13566 |
| 13567 get yNow() { |
| 13568 if (this.yEnd) { |
| 13569 return this.yStart + this.translationFraction * (this.yEnd - this.ySta
rt); |
| 13570 } |
| 13571 |
| 13572 return this.yStart; |
| 13573 }, |
| 13574 |
| 13575 get isMouseDown() { |
| 13576 return this.mouseDownStart && !this.mouseUpStart; |
| 13577 }, |
| 13578 |
| 13579 resetInteractionState: function() { |
| 13580 this.maxRadius = 0; |
| 13581 this.mouseDownStart = 0; |
| 13582 this.mouseUpStart = 0; |
| 13583 |
| 13584 this.xStart = 0; |
| 13585 this.yStart = 0; |
| 13586 this.xEnd = 0; |
| 13587 this.yEnd = 0; |
| 13588 this.slideDistance = 0; |
| 13589 |
| 13590 this.containerMetrics = new ElementMetrics(this.element); |
| 13591 }, |
| 13592 |
| 13593 draw: function() { |
| 13594 var scale; |
| 13595 var translateString; |
| 13596 var dx; |
| 13597 var dy; |
| 13598 |
| 13599 this.wave.style.opacity = this.opacity; |
| 13600 |
| 13601 scale = this.radius / (this.containerMetrics.size / 2); |
| 13602 dx = this.xNow - (this.containerMetrics.width / 2); |
| 13603 dy = this.yNow - (this.containerMetrics.height / 2); |
| 13604 |
| 13605 |
| 13606 // 2d transform for safari because of border-radius and overflow:hidden
clipping bug. |
| 13607 // https://bugs.webkit.org/show_bug.cgi?id=98538 |
| 13608 this.waveContainer.style.webkitTransform = 'translate(' + dx + 'px, ' +
dy + 'px)'; |
| 13609 this.waveContainer.style.transform = 'translate3d(' + dx + 'px, ' + dy +
'px, 0)'; |
| 13610 this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')'; |
| 13611 this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)'; |
| 13612 }, |
| 13613 |
| 13614 /** @param {Event=} event */ |
| 13615 downAction: function(event) { |
| 13616 var xCenter = this.containerMetrics.width / 2; |
| 13617 var yCenter = this.containerMetrics.height / 2; |
| 13618 |
| 13619 this.resetInteractionState(); |
| 13620 this.mouseDownStart = Utility.now(); |
| 13621 |
| 13622 if (this.center) { |
| 13623 this.xStart = xCenter; |
| 13624 this.yStart = yCenter; |
| 13625 this.slideDistance = Utility.distance( |
| 13626 this.xStart, this.yStart, this.xEnd, this.yEnd |
| 13627 ); |
| 13628 } else { |
| 13629 this.xStart = event ? |
| 13630 event.detail.x - this.containerMetrics.boundingRect.left : |
| 13631 this.containerMetrics.width / 2; |
| 13632 this.yStart = event ? |
| 13633 event.detail.y - this.containerMetrics.boundingRect.top : |
| 13634 this.containerMetrics.height / 2; |
| 13635 } |
| 13636 |
| 13637 if (this.recenters) { |
| 13638 this.xEnd = xCenter; |
| 13639 this.yEnd = yCenter; |
| 13640 this.slideDistance = Utility.distance( |
| 13641 this.xStart, this.yStart, this.xEnd, this.yEnd |
| 13642 ); |
| 13643 } |
| 13644 |
| 13645 this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom( |
| 13646 this.xStart, |
| 13647 this.yStart |
| 13648 ); |
| 13649 |
| 13650 this.waveContainer.style.top = |
| 13651 (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px'
; |
| 13652 this.waveContainer.style.left = |
| 13653 (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px'; |
| 13654 |
| 13655 this.waveContainer.style.width = this.containerMetrics.size + 'px'; |
| 13656 this.waveContainer.style.height = this.containerMetrics.size + 'px'; |
| 13657 }, |
| 13658 |
| 13659 /** @param {Event=} event */ |
| 13660 upAction: function(event) { |
| 13661 if (!this.isMouseDown) { |
| 13662 return; |
| 13663 } |
| 13664 |
| 13665 this.mouseUpStart = Utility.now(); |
| 13666 }, |
| 13667 |
| 13668 remove: function() { |
| 13669 Polymer.dom(this.waveContainer.parentNode).removeChild( |
| 13670 this.waveContainer |
| 13671 ); |
| 13672 } |
| 13673 }; |
| 13674 |
| 13675 Polymer({ |
| 13676 is: 'paper-ripple', |
| 13677 |
| 13678 behaviors: [ |
| 13679 Polymer.IronA11yKeysBehavior |
| 13680 ], |
| 13681 |
| 13682 properties: { |
| 13683 /** |
| 13684 * The initial opacity set on the wave. |
| 13685 * |
| 13686 * @attribute initialOpacity |
| 13687 * @type number |
| 13688 * @default 0.25 |
| 13689 */ |
| 13690 initialOpacity: { |
| 13691 type: Number, |
| 13692 value: 0.25 |
| 13693 }, |
| 13694 |
| 13695 /** |
| 13696 * How fast (opacity per second) the wave fades out. |
| 13697 * |
| 13698 * @attribute opacityDecayVelocity |
| 13699 * @type number |
| 13700 * @default 0.8 |
| 13701 */ |
| 13702 opacityDecayVelocity: { |
| 13703 type: Number, |
| 13704 value: 0.8 |
| 13705 }, |
| 13706 |
| 13707 /** |
| 13708 * If true, ripples will exhibit a gravitational pull towards |
| 13709 * the center of their container as they fade away. |
| 13710 * |
| 13711 * @attribute recenters |
| 13712 * @type boolean |
| 13713 * @default false |
| 13714 */ |
| 13715 recenters: { |
| 13716 type: Boolean, |
| 13717 value: false |
| 13718 }, |
| 13719 |
| 13720 /** |
| 13721 * If true, ripples will center inside its container |
| 13722 * |
| 13723 * @attribute recenters |
| 13724 * @type boolean |
| 13725 * @default false |
| 13726 */ |
| 13727 center: { |
| 13728 type: Boolean, |
| 13729 value: false |
| 13730 }, |
| 13731 |
| 13732 /** |
| 13733 * A list of the visual ripples. |
| 13734 * |
| 13735 * @attribute ripples |
| 13736 * @type Array |
| 13737 * @default [] |
| 13738 */ |
| 13739 ripples: { |
| 13740 type: Array, |
| 13741 value: function() { |
| 13742 return []; |
| 13743 } |
| 13744 }, |
| 13745 |
| 13746 /** |
| 13747 * True when there are visible ripples animating within the |
| 13748 * element. |
| 13749 */ |
| 13750 animating: { |
| 13751 type: Boolean, |
| 13752 readOnly: true, |
| 13753 reflectToAttribute: true, |
| 13754 value: false |
| 13755 }, |
| 13756 |
| 13757 /** |
| 13758 * If true, the ripple will remain in the "down" state until `holdDown` |
| 13759 * is set to false again. |
| 13760 */ |
| 13761 holdDown: { |
| 13762 type: Boolean, |
| 13763 value: false, |
| 13764 observer: '_holdDownChanged' |
| 13765 }, |
| 13766 |
| 13767 /** |
| 13768 * If true, the ripple will not generate a ripple effect |
| 13769 * via pointer interaction. |
| 13770 * Calling ripple's imperative api like `simulatedRipple` will |
| 13771 * still generate the ripple effect. |
| 13772 */ |
| 13773 noink: { |
| 13774 type: Boolean, |
| 13775 value: false |
| 13776 }, |
| 13777 |
| 13778 _animating: { |
| 13779 type: Boolean |
| 13780 }, |
| 13781 |
| 13782 _boundAnimate: { |
| 13783 type: Function, |
| 13784 value: function() { |
| 13785 return this.animate.bind(this); |
| 13786 } |
| 13787 } |
| 13788 }, |
| 13789 |
| 13790 get target () { |
| 13791 return this.keyEventTarget; |
| 13792 }, |
| 13793 |
| 13794 keyBindings: { |
| 13795 'enter:keydown': '_onEnterKeydown', |
| 13796 'space:keydown': '_onSpaceKeydown', |
| 13797 'space:keyup': '_onSpaceKeyup' |
| 13798 }, |
| 13799 |
| 13800 attached: function() { |
| 13801 // Set up a11yKeysBehavior to listen to key events on the target, |
| 13802 // so that space and enter activate the ripple even if the target doesn'
t |
| 13803 // handle key events. The key handlers deal with `noink` themselves. |
| 13804 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE |
| 13805 this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host; |
| 13806 } else { |
| 13807 this.keyEventTarget = this.parentNode; |
| 13808 } |
| 13809 var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget); |
| 13810 this.listen(keyEventTarget, 'up', 'uiUpAction'); |
| 13811 this.listen(keyEventTarget, 'down', 'uiDownAction'); |
| 13812 }, |
| 13813 |
| 13814 detached: function() { |
| 13815 this.unlisten(this.keyEventTarget, 'up', 'uiUpAction'); |
| 13816 this.unlisten(this.keyEventTarget, 'down', 'uiDownAction'); |
| 13817 this.keyEventTarget = null; |
| 13818 }, |
| 13819 |
| 13820 get shouldKeepAnimating () { |
| 13821 for (var index = 0; index < this.ripples.length; ++index) { |
| 13822 if (!this.ripples[index].isAnimationComplete) { |
| 13823 return true; |
| 13824 } |
| 13825 } |
| 13826 |
| 13827 return false; |
| 13828 }, |
| 13829 |
| 13830 simulatedRipple: function() { |
| 13831 this.downAction(null); |
| 13832 |
| 13833 // Please see polymer/polymer#1305 |
| 13834 this.async(function() { |
| 13835 this.upAction(); |
| 13836 }, 1); |
| 13837 }, |
| 13838 |
| 13839 /** |
| 13840 * Provokes a ripple down effect via a UI event, |
| 13841 * respecting the `noink` property. |
| 13842 * @param {Event=} event |
| 13843 */ |
| 13844 uiDownAction: function(event) { |
| 13845 if (!this.noink) { |
| 13846 this.downAction(event); |
| 13847 } |
| 13848 }, |
| 13849 |
| 13850 /** |
| 13851 * Provokes a ripple down effect via a UI event, |
| 13852 * *not* respecting the `noink` property. |
| 13853 * @param {Event=} event |
| 13854 */ |
| 13855 downAction: function(event) { |
| 13856 if (this.holdDown && this.ripples.length > 0) { |
| 13857 return; |
| 13858 } |
| 13859 |
| 13860 var ripple = this.addRipple(); |
| 13861 |
| 13862 ripple.downAction(event); |
| 13863 |
| 13864 if (!this._animating) { |
| 13865 this._animating = true; |
| 13866 this.animate(); |
| 13867 } |
| 13868 }, |
| 13869 |
| 13870 /** |
| 13871 * Provokes a ripple up effect via a UI event, |
| 13872 * respecting the `noink` property. |
| 13873 * @param {Event=} event |
| 13874 */ |
| 13875 uiUpAction: function(event) { |
| 13876 if (!this.noink) { |
| 13877 this.upAction(event); |
| 13878 } |
| 13879 }, |
| 13880 |
| 13881 /** |
| 13882 * Provokes a ripple up effect via a UI event, |
| 13883 * *not* respecting the `noink` property. |
| 13884 * @param {Event=} event |
| 13885 */ |
| 13886 upAction: function(event) { |
| 13887 if (this.holdDown) { |
| 13888 return; |
| 13889 } |
| 13890 |
| 13891 this.ripples.forEach(function(ripple) { |
| 13892 ripple.upAction(event); |
| 13893 }); |
| 13894 |
| 13895 this._animating = true; |
| 13896 this.animate(); |
| 13897 }, |
| 13898 |
| 13899 onAnimationComplete: function() { |
| 13900 this._animating = false; |
| 13901 this.$.background.style.backgroundColor = null; |
| 13902 this.fire('transitionend'); |
| 13903 }, |
| 13904 |
| 13905 addRipple: function() { |
| 13906 var ripple = new Ripple(this); |
| 13907 |
| 13908 Polymer.dom(this.$.waves).appendChild(ripple.waveContainer); |
| 13909 this.$.background.style.backgroundColor = ripple.color; |
| 13910 this.ripples.push(ripple); |
| 13911 |
| 13912 this._setAnimating(true); |
| 13913 |
| 13914 return ripple; |
| 13915 }, |
| 13916 |
| 13917 removeRipple: function(ripple) { |
| 13918 var rippleIndex = this.ripples.indexOf(ripple); |
| 13919 |
| 13920 if (rippleIndex < 0) { |
| 13921 return; |
| 13922 } |
| 13923 |
| 13924 this.ripples.splice(rippleIndex, 1); |
| 13925 |
| 13926 ripple.remove(); |
| 13927 |
| 13928 if (!this.ripples.length) { |
| 13929 this._setAnimating(false); |
| 13930 } |
| 13931 }, |
| 13932 |
| 13933 animate: function() { |
| 13934 if (!this._animating) { |
| 13935 return; |
| 13936 } |
| 13937 var index; |
| 13938 var ripple; |
| 13939 |
| 13940 for (index = 0; index < this.ripples.length; ++index) { |
| 13941 ripple = this.ripples[index]; |
| 13942 |
| 13943 ripple.draw(); |
| 13944 |
| 13945 this.$.background.style.opacity = ripple.outerOpacity; |
| 13946 |
| 13947 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { |
| 13948 this.removeRipple(ripple); |
| 13949 } |
| 13950 } |
| 13951 |
| 13952 if (!this.shouldKeepAnimating && this.ripples.length === 0) { |
| 13953 this.onAnimationComplete(); |
| 13954 } else { |
| 13955 window.requestAnimationFrame(this._boundAnimate); |
| 13956 } |
| 13957 }, |
| 13958 |
| 13959 _onEnterKeydown: function() { |
| 13960 this.uiDownAction(); |
| 13961 this.async(this.uiUpAction, 1); |
| 13962 }, |
| 13963 |
| 13964 _onSpaceKeydown: function() { |
| 13965 this.uiDownAction(); |
| 13966 }, |
| 13967 |
| 13968 _onSpaceKeyup: function() { |
| 13969 this.uiUpAction(); |
| 13970 }, |
| 13971 |
| 13972 // note: holdDown does not respect noink since it can be a focus based |
| 13973 // effect. |
| 13974 _holdDownChanged: function(newVal, oldVal) { |
| 13975 if (oldVal === undefined) { |
| 13976 return; |
| 13977 } |
| 13978 if (newVal) { |
| 13979 this.downAction(); |
| 13980 } else { |
| 13981 this.upAction(); |
| 13982 } |
| 13983 } |
| 13984 |
| 13985 /** |
| 13986 Fired when the animation finishes. |
| 13987 This is useful if you want to wait until |
| 13988 the ripple animation finishes to perform some action. |
| 13989 |
| 13990 @event transitionend |
| 13991 @param {{node: Object}} detail Contains the animated node. |
| 13992 */ |
| 13993 }); |
| 13994 })(); |
| 13995 </script> |
| 13996 <script> |
| 13997 /** |
| 13998 * `Polymer.PaperRippleBehavior` dynamically implements a ripple |
| 13999 * when the element has focus via pointer or keyboard. |
| 14000 * |
| 14001 * NOTE: This behavior is intended to be used in conjunction with and after |
| 14002 * `Polymer.IronButtonState` and `Polymer.IronControlState`. |
| 14003 * |
| 14004 * @polymerBehavior Polymer.PaperRippleBehavior |
| 14005 */ |
| 14006 Polymer.PaperRippleBehavior = { |
| 14007 properties: { |
| 14008 /** |
| 14009 * If true, the element will not produce a ripple effect when interacted |
| 14010 * with via the pointer. |
| 14011 */ |
| 14012 noink: { |
| 14013 type: Boolean, |
| 14014 observer: '_noinkChanged' |
| 14015 }, |
| 14016 |
| 14017 /** |
| 14018 * @type {Element|undefined} |
| 14019 */ |
| 14020 _rippleContainer: { |
| 14021 type: Object, |
| 14022 } |
| 14023 }, |
| 14024 |
| 14025 /** |
| 14026 * Ensures a `<paper-ripple>` element is available when the element is |
| 14027 * focused. |
| 14028 */ |
| 14029 _buttonStateChanged: function() { |
| 14030 if (this.focused) { |
| 14031 this.ensureRipple(); |
| 14032 } |
| 14033 }, |
| 14034 |
| 14035 /** |
| 14036 * In addition to the functionality provided in `IronButtonState`, ensures |
| 14037 * a ripple effect is created when the element is in a `pressed` state. |
| 14038 */ |
| 14039 _downHandler: function(event) { |
| 14040 Polymer.IronButtonStateImpl._downHandler.call(this, event); |
| 14041 if (this.pressed) { |
| 14042 this.ensureRipple(event); |
| 14043 } |
| 14044 }, |
| 14045 |
| 14046 /** |
| 14047 * Ensures this element contains a ripple effect. For startup efficiency |
| 14048 * the ripple effect is dynamically on demand when needed. |
| 14049 * @param {!Event=} optTriggeringEvent (optional) event that triggered the |
| 14050 * ripple. |
| 14051 */ |
| 14052 ensureRipple: function(optTriggeringEvent) { |
| 14053 if (!this.hasRipple()) { |
| 14054 this._ripple = this._createRipple(); |
| 14055 this._ripple.noink = this.noink; |
| 14056 var rippleContainer = this._rippleContainer || this.root; |
| 14057 if (rippleContainer) { |
| 14058 Polymer.dom(rippleContainer).appendChild(this._ripple); |
| 14059 } |
| 14060 if (optTriggeringEvent) { |
| 14061 // Check if the event happened inside of the ripple container |
| 14062 // Fall back to host instead of the root because distributed text |
| 14063 // nodes are not valid event targets |
| 14064 var domContainer = Polymer.dom(this._rippleContainer || this); |
| 14065 var target = Polymer.dom(optTriggeringEvent).rootTarget; |
| 14066 if (domContainer.deepContains( /** @type {Node} */(target))) { |
| 14067 this._ripple.uiDownAction(optTriggeringEvent); |
| 14068 } |
| 14069 } |
| 14070 } |
| 14071 }, |
| 14072 |
| 14073 /** |
| 14074 * Returns the `<paper-ripple>` element used by this element to create |
| 14075 * ripple effects. The element's ripple is created on demand, when |
| 14076 * necessary, and calling this method will force the |
| 14077 * ripple to be created. |
| 14078 */ |
| 14079 getRipple: function() { |
| 14080 this.ensureRipple(); |
| 14081 return this._ripple; |
| 14082 }, |
| 14083 |
| 14084 /** |
| 14085 * Returns true if this element currently contains a ripple effect. |
| 14086 * @return {boolean} |
| 14087 */ |
| 14088 hasRipple: function() { |
| 14089 return Boolean(this._ripple); |
| 14090 }, |
| 14091 |
| 14092 /** |
| 14093 * Create the element's ripple effect via creating a `<paper-ripple>`. |
| 14094 * Override this method to customize the ripple element. |
| 14095 * @return {!PaperRippleElement} Returns a `<paper-ripple>` element. |
| 14096 */ |
| 14097 _createRipple: function() { |
| 14098 return /** @type {!PaperRippleElement} */ ( |
| 14099 document.createElement('paper-ripple')); |
| 14100 }, |
| 14101 |
| 14102 _noinkChanged: function(noink) { |
| 14103 if (this.hasRipple()) { |
| 14104 this._ripple.noink = noink; |
| 14105 } |
| 14106 } |
| 14107 }; |
| 14108 </script> |
| 14109 <script> |
| 14110 /** @polymerBehavior Polymer.PaperButtonBehavior */ |
| 14111 Polymer.PaperButtonBehaviorImpl = { |
| 14112 properties: { |
| 14113 /** |
| 14114 * The z-depth of this element, from 0-5. Setting to 0 will remove the |
| 14115 * shadow, and each increasing number greater than 0 will be "deeper" |
| 14116 * than the last. |
| 14117 * |
| 14118 * @attribute elevation |
| 14119 * @type number |
| 14120 * @default 1 |
| 14121 */ |
| 14122 elevation: { |
| 14123 type: Number, |
| 14124 reflectToAttribute: true, |
| 14125 readOnly: true |
| 14126 } |
| 14127 }, |
| 14128 |
| 14129 observers: [ |
| 14130 '_calculateElevation(focused, disabled, active, pressed, receivedFocusFrom
Keyboard)', |
| 14131 '_computeKeyboardClass(receivedFocusFromKeyboard)' |
| 14132 ], |
| 14133 |
| 14134 hostAttributes: { |
| 14135 role: 'button', |
| 14136 tabindex: '0', |
| 14137 animated: true |
| 14138 }, |
| 14139 |
| 14140 _calculateElevation: function() { |
| 14141 var e = 1; |
| 14142 if (this.disabled) { |
| 14143 e = 0; |
| 14144 } else if (this.active || this.pressed) { |
| 14145 e = 4; |
| 14146 } else if (this.receivedFocusFromKeyboard) { |
| 14147 e = 3; |
| 14148 } |
| 14149 this._setElevation(e); |
| 14150 }, |
| 14151 |
| 14152 _computeKeyboardClass: function(receivedFocusFromKeyboard) { |
| 14153 this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); |
| 14154 }, |
| 14155 |
| 14156 /** |
| 14157 * In addition to `IronButtonState` behavior, when space key goes down, |
| 14158 * create a ripple down effect. |
| 14159 * |
| 14160 * @param {!KeyboardEvent} event . |
| 14161 */ |
| 14162 _spaceKeyDownHandler: function(event) { |
| 14163 Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); |
| 14164 // Ensure that there is at most one ripple when the space key is held down
. |
| 14165 if (this.hasRipple() && this.getRipple().ripples.length < 1) { |
| 14166 this._ripple.uiDownAction(); |
| 14167 } |
| 14168 }, |
| 14169 |
| 14170 /** |
| 14171 * In addition to `IronButtonState` behavior, when space key goes up, |
| 14172 * create a ripple up effect. |
| 14173 * |
| 14174 * @param {!KeyboardEvent} event . |
| 14175 */ |
| 14176 _spaceKeyUpHandler: function(event) { |
| 14177 Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event); |
| 14178 if (this.hasRipple()) { |
| 14179 this._ripple.uiUpAction(); |
| 14180 } |
| 14181 } |
| 14182 }; |
| 14183 |
| 14184 /** @polymerBehavior */ |
| 14185 Polymer.PaperButtonBehavior = [ |
| 14186 Polymer.IronButtonState, |
| 14187 Polymer.IronControlState, |
| 14188 Polymer.PaperRippleBehavior, |
| 14189 Polymer.PaperButtonBehaviorImpl |
| 14190 ]; |
| 14191 </script> |
| 14192 <style is="custom-style"> |
| 14193 |
| 14194 :root { |
| 14195 |
| 14196 --shadow-transition: { |
| 14197 transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); |
| 14198 }; |
| 14199 |
| 14200 --shadow-none: { |
| 14201 box-shadow: none; |
| 14202 }; |
| 14203 |
| 14204 /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */ |
| 14205 |
| 14206 --shadow-elevation-2dp: { |
| 14207 box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), |
| 14208 0 1px 5px 0 rgba(0, 0, 0, 0.12), |
| 14209 0 3px 1px -2px rgba(0, 0, 0, 0.2); |
| 14210 }; |
| 14211 |
| 14212 --shadow-elevation-3dp: { |
| 14213 box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), |
| 14214 0 1px 8px 0 rgba(0, 0, 0, 0.12), |
| 14215 0 3px 3px -2px rgba(0, 0, 0, 0.4); |
| 14216 }; |
| 14217 |
| 14218 --shadow-elevation-4dp: { |
| 14219 box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), |
| 14220 0 1px 10px 0 rgba(0, 0, 0, 0.12), |
| 14221 0 2px 4px -1px rgba(0, 0, 0, 0.4); |
| 14222 }; |
| 14223 |
| 14224 --shadow-elevation-6dp: { |
| 14225 box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), |
| 14226 0 1px 18px 0 rgba(0, 0, 0, 0.12), |
| 14227 0 3px 5px -1px rgba(0, 0, 0, 0.4); |
| 14228 }; |
| 14229 |
| 14230 --shadow-elevation-8dp: { |
| 14231 box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), |
| 14232 0 3px 14px 2px rgba(0, 0, 0, 0.12), |
| 14233 0 5px 5px -3px rgba(0, 0, 0, 0.4); |
| 14234 }; |
| 14235 |
| 14236 --shadow-elevation-12dp: { |
| 14237 box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14), |
| 14238 0 4px 22px 3px rgba(0, 0, 0, 0.12), |
| 14239 0 6px 7px -4px rgba(0, 0, 0, 0.4); |
| 14240 }; |
| 14241 |
| 14242 --shadow-elevation-16dp: { |
| 14243 box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), |
| 14244 0 6px 30px 5px rgba(0, 0, 0, 0.12), |
| 14245 0 8px 10px -5px rgba(0, 0, 0, 0.4); |
| 14246 }; |
| 14247 |
| 14248 } |
| 14249 |
| 14250 </style> |
| 14251 <dom-module id="paper-material-shared-styles" assetpath="/res/imp/bower_componen
ts/paper-material/"> |
| 14252 <template> |
| 14253 <style> |
| 14254 :host { |
| 14255 display: block; |
| 14256 position: relative; |
| 14257 } |
| 14258 |
| 14259 :host([elevation="1"]) { |
| 14260 @apply(--shadow-elevation-2dp); |
| 14261 } |
| 14262 |
| 14263 :host([elevation="2"]) { |
| 14264 @apply(--shadow-elevation-4dp); |
| 14265 } |
| 14266 |
| 14267 :host([elevation="3"]) { |
| 14268 @apply(--shadow-elevation-6dp); |
| 14269 } |
| 14270 |
| 14271 :host([elevation="4"]) { |
| 14272 @apply(--shadow-elevation-8dp); |
| 14273 } |
| 14274 |
| 14275 :host([elevation="5"]) { |
| 14276 @apply(--shadow-elevation-16dp); |
| 14277 } |
| 14278 </style> |
| 14279 </template> |
| 14280 </dom-module> |
| 11630 <style is="custom-style"> | 14281 <style is="custom-style"> |
| 11631 | 14282 |
| 11632 :root { | 14283 :root { |
| 11633 | 14284 |
| 11634 /* Material Design color palette for Google products */ | 14285 /* Material Design color palette for Google products */ |
| 11635 | 14286 |
| 11636 --google-red-100: #f4c7c3; | 14287 --google-red-100: #f4c7c3; |
| 11637 --google-red-300: #e67c73; | 14288 --google-red-300: #e67c73; |
| 11638 --google-red-500: #db4437; | 14289 --google-red-500: #db4437; |
| 11639 --google-red-700: #c53929; | 14290 --google-red-700: #c53929; |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11941 | 14592 |
| 11942 /* opacity for light text on a dark background */ | 14593 /* opacity for light text on a dark background */ |
| 11943 --light-divider-opacity: 0.12; | 14594 --light-divider-opacity: 0.12; |
| 11944 --light-disabled-opacity: 0.3; /* or hint text or icon */ | 14595 --light-disabled-opacity: 0.3; /* or hint text or icon */ |
| 11945 --light-secondary-opacity: 0.7; | 14596 --light-secondary-opacity: 0.7; |
| 11946 --light-primary-opacity: 1.0; | 14597 --light-primary-opacity: 1.0; |
| 11947 | 14598 |
| 11948 } | 14599 } |
| 11949 | 14600 |
| 11950 </style> | 14601 </style> |
| 14602 |
| 14603 |
| 14604 <style is="custom-style"> |
| 14605 |
| 14606 :root { |
| 14607 /* |
| 14608 * You can use these generic variables in your elements for easy theming. |
| 14609 * For example, if all your elements use `--primary-text-color` as its main |
| 14610 * color, then switching from a light to a dark theme is just a matter of |
| 14611 * changing the value of `--primary-text-color` in your application. |
| 14612 */ |
| 14613 --primary-text-color: var(--light-theme-text-color); |
| 14614 --primary-background-color: var(--light-theme-background-color); |
| 14615 --secondary-text-color: var(--light-theme-secondary-color); |
| 14616 --disabled-text-color: var(--light-theme-disabled-color); |
| 14617 --divider-color: var(--light-theme-divider-color); |
| 14618 --error-color: var(--paper-deep-orange-a700); |
| 14619 |
| 14620 /* |
| 14621 * Primary and accent colors. Also see color.html for more colors. |
| 14622 */ |
| 14623 --primary-color: var(--paper-indigo-500); |
| 14624 --light-primary-color: var(--paper-indigo-100); |
| 14625 --dark-primary-color: var(--paper-indigo-700); |
| 14626 |
| 14627 --accent-color: var(--paper-pink-a200); |
| 14628 --light-accent-color: var(--paper-pink-a100); |
| 14629 --dark-accent-color: var(--paper-pink-a400); |
| 14630 |
| 14631 |
| 14632 /* |
| 14633 * Material Design Light background theme |
| 14634 */ |
| 14635 --light-theme-background-color: #ffffff; |
| 14636 --light-theme-base-color: #000000; |
| 14637 --light-theme-text-color: var(--paper-grey-900); |
| 14638 --light-theme-secondary-color: #737373; /* for secondary text and icons */ |
| 14639 --light-theme-disabled-color: #9b9b9b; /* disabled/hint text */ |
| 14640 --light-theme-divider-color: #dbdbdb; |
| 14641 |
| 14642 /* |
| 14643 * Material Design Dark background theme |
| 14644 */ |
| 14645 --dark-theme-background-color: var(--paper-grey-900); |
| 14646 --dark-theme-base-color: #ffffff; |
| 14647 --dark-theme-text-color: #ffffff; |
| 14648 --dark-theme-secondary-color: #bcbcbc; /* for secondary text and icons */ |
| 14649 --dark-theme-disabled-color: #646464; /* disabled/hint text */ |
| 14650 --dark-theme-divider-color: #3c3c3c; |
| 14651 |
| 14652 /* |
| 14653 * Deprecated values because of their confusing names. |
| 14654 */ |
| 14655 --text-primary-color: var(--dark-theme-text-color); |
| 14656 --default-primary-color: var(--primary-color); |
| 14657 |
| 14658 } |
| 14659 |
| 14660 </style> |
| 14661 |
| 14662 |
| 14663 <dom-module id="paper-fab" assetpath="/res/imp/bower_components/paper-fab/"> |
| 14664 <template strip-whitespace=""> |
| 14665 <style include="paper-material-shared-styles"> |
| 14666 :host { |
| 14667 @apply(--layout-vertical); |
| 14668 @apply(--layout-center-center); |
| 14669 |
| 14670 background: var(--paper-fab-background, --accent-color); |
| 14671 border-radius: 50%; |
| 14672 box-sizing: border-box; |
| 14673 color: var(--text-primary-color); |
| 14674 cursor: pointer; |
| 14675 height: 56px; |
| 14676 min-width: 0; |
| 14677 outline: none; |
| 14678 padding: 16px; |
| 14679 position: relative; |
| 14680 -moz-user-select: none; |
| 14681 -ms-user-select: none; |
| 14682 -webkit-user-select: none; |
| 14683 user-select: none; |
| 14684 width: 56px; |
| 14685 z-index: 0; |
| 14686 |
| 14687 /* NOTE: Both values are needed, since some phones require the value `tr
ansparent`. */ |
| 14688 -webkit-tap-highlight-color: rgba(0,0,0,0); |
| 14689 -webkit-tap-highlight-color: transparent; |
| 14690 |
| 14691 @apply(--paper-fab); |
| 14692 } |
| 14693 |
| 14694 [hidden] { |
| 14695 display: none !important; |
| 14696 } |
| 14697 |
| 14698 :host([mini]) { |
| 14699 width: 40px; |
| 14700 height: 40px; |
| 14701 padding: 8px; |
| 14702 |
| 14703 @apply(--paper-fab-mini); |
| 14704 } |
| 14705 |
| 14706 :host([disabled]) { |
| 14707 color: var(--paper-fab-disabled-text, --paper-grey-500); |
| 14708 background: var(--paper-fab-disabled-background, --paper-grey-300); |
| 14709 |
| 14710 @apply(--paper-fab-disabled); |
| 14711 } |
| 14712 |
| 14713 iron-icon { |
| 14714 @apply(--paper-fab-iron-icon); |
| 14715 } |
| 14716 |
| 14717 span { |
| 14718 width: 100%; |
| 14719 white-space: nowrap; |
| 14720 overflow: hidden; |
| 14721 text-overflow: ellipsis; |
| 14722 text-align: center; |
| 14723 } |
| 14724 |
| 14725 :host(.keyboard-focus) { |
| 14726 background: var(--paper-fab-keyboard-focus-background, --paper-pink-900)
; |
| 14727 } |
| 14728 </style> |
| 14729 |
| 14730 <iron-icon id="icon" hidden$="{{!_computeIsIconFab(icon, src)}}" src="[[src]
]" icon="[[icon]]"></iron-icon> |
| 14731 <span hidden$="{{_computeIsIconFab(icon, src)}}">{{label}}</span> |
| 14732 </template> |
| 14733 |
| 14734 <script> |
| 14735 Polymer({ |
| 14736 is: 'paper-fab', |
| 14737 |
| 14738 behaviors: [ |
| 14739 Polymer.PaperButtonBehavior |
| 14740 ], |
| 14741 |
| 14742 properties: { |
| 14743 /** |
| 14744 * The URL of an image for the icon. If the src property is specified, |
| 14745 * the icon property should not be. |
| 14746 */ |
| 14747 src: { |
| 14748 type: String, |
| 14749 value: '' |
| 14750 }, |
| 14751 |
| 14752 /** |
| 14753 * Specifies the icon name or index in the set of icons available in |
| 14754 * the icon's icon set. If the icon property is specified, |
| 14755 * the src property should not be. |
| 14756 */ |
| 14757 icon: { |
| 14758 type: String, |
| 14759 value: '' |
| 14760 }, |
| 14761 |
| 14762 /** |
| 14763 * Set this to true to style this is a "mini" FAB. |
| 14764 */ |
| 14765 mini: { |
| 14766 type: Boolean, |
| 14767 value: false, |
| 14768 reflectToAttribute: true |
| 14769 }, |
| 14770 |
| 14771 /** |
| 14772 * The label displayed in the badge. The label is centered, and ideally |
| 14773 * should have very few characters. |
| 14774 */ |
| 14775 label: { |
| 14776 type: String, |
| 14777 observer: '_labelChanged' |
| 14778 } |
| 14779 }, |
| 14780 |
| 14781 _labelChanged: function() { |
| 14782 this.setAttribute('aria-label', this.label); |
| 14783 }, |
| 14784 |
| 14785 _computeIsIconFab: function(icon, src) { |
| 14786 return (icon.length > 0) || (src.length > 0); |
| 14787 } |
| 14788 }); |
| 14789 </script> |
| 14790 </dom-module> |
| 11951 <script> | 14791 <script> |
| 11952 | 14792 |
| 11953 /** @polymerBehavior */ | 14793 /** @polymerBehavior */ |
| 11954 Polymer.PaperSpinnerBehavior = { | 14794 Polymer.PaperSpinnerBehavior = { |
| 11955 | 14795 |
| 11956 listeners: { | 14796 listeners: { |
| 11957 'animationend': '__reset', | 14797 'animationend': '__reset', |
| 11958 'webkitAnimationEnd': '__reset' | 14798 'webkitAnimationEnd': '__reset' |
| 11959 }, | 14799 }, |
| 11960 | 14800 |
| (...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13447 border-radius: 5px; | 16287 border-radius: 5px; |
| 13448 } | 16288 } |
| 13449 a { | 16289 a { |
| 13450 color: white; | 16290 color: white; |
| 13451 } | 16291 } |
| 13452 .center { | 16292 .center { |
| 13453 vertical-align: middle; | 16293 vertical-align: middle; |
| 13454 } | 16294 } |
| 13455 </style> | 16295 </style> |
| 13456 | 16296 |
| 13457 <google-signin-aware id="aware" client-id="[[clientId]]" scopes="email" on-g
oogle-signin-aware-success="_onSignin" on-google-signin-aware-signed-out="_onSig
nout"> | 16297 <google-signin-aware id="aware" client-id="[[client_id]]" scopes="email" on-
google-signin-aware-success="_onSignin" on-google-signin-aware-signed-out="_onSi
gnout"> |
| 13458 </google-signin-aware> | 16298 </google-signin-aware> |
| 13459 | 16299 |
| 13460 <template is="dom-if" if="[[!signedIn]]"> | 16300 <template is="dom-if" if="[[!signed_in]]"> |
| 13461 <div id="signinContainer"> | 16301 <div id="signinContainer"> |
| 13462 <a on-tap="signIn" href="#">Sign in</a> | 16302 <a on-tap="signIn" href="#">Sign in</a> |
| 13463 </div> | 16303 </div> |
| 13464 </template> | 16304 </template> |
| 13465 | 16305 |
| 13466 <template is="dom-if" if="[[signedIn]]"> | 16306 <template is="dom-if" if="[[signed_in]]"> |
| 13467 <img class="center" id="avatar" src="[[profile.imageUrl]]" width="30" heig
ht="30"> | 16307 <img class="center" id="avatar" src="[[profile.imageUrl]]" width="30" heig
ht="30"> |
| 13468 <span class="center">[[profile.email]]</span> | 16308 <span class="center">[[profile.email]]</span> |
| 13469 <span class="center">|</span> | 16309 <span class="center">|</span> |
| 13470 <a class="center" on-tap="signOut" href="#">Sign out</a> | 16310 <a class="center" on-tap="signOut" href="#">Sign out</a> |
| 13471 </template> | 16311 </template> |
| 13472 </template> | 16312 </template> |
| 13473 <script> | 16313 <script> |
| 13474 'use strict'; | 16314 'use strict'; |
| 13475 Polymer({ | 16315 Polymer({ |
| 13476 is: 'auth-signin', | 16316 is: 'auth-signin', |
| 13477 properties: { | 16317 properties: { |
| 13478 authHeaders: { | 16318 auth_headers: { |
| 13479 type: Object, | 16319 type: Object, |
| 13480 computed: "_makeHeader(authResponse)", | 16320 computed: "_makeHeader(auth_response)", |
| 13481 notify: true, | 16321 notify: true, |
| 13482 }, | 16322 }, |
| 13483 authResponse: { | 16323 auth_response: { |
| 13484 type: Object, | 16324 type: Object, |
| 13485 notify: true, | 16325 notify: true, |
| 13486 }, | 16326 }, |
| 13487 clientId: { | 16327 client_id: { |
| 13488 type: String, | 16328 type: String, |
| 13489 }, | 16329 }, |
| 13490 profile: { | 16330 profile: { |
| 13491 type: Object, | 16331 type: Object, |
| 13492 readOnly: true | 16332 readOnly: true |
| 13493 }, | 16333 }, |
| 13494 signedIn: { | 16334 signed_in: { |
| 13495 type: Boolean, | 16335 type: Boolean, |
| 13496 readOnly: true, | 16336 readOnly: true, |
| 13497 value: false, | 16337 value: false, |
| 13498 notify: true, | 16338 notify: true, |
| 13499 } | 16339 } |
| 13500 }, | 16340 }, |
| 13501 | 16341 |
| 13502 _onSignin: function(e) { | 16342 _onSignin: function(e) { |
| 13503 this._setSignedIn(true); | 16343 this._setSigned_in(true); |
| 13504 var user = gapi.auth2.getAuthInstance().currentUser.get(); | 16344 var user = gapi.auth2.getAuthInstance().currentUser.get(); |
| 13505 var profile = user.getBasicProfile(); | 16345 var profile = user.getBasicProfile(); |
| 13506 this._setProfile({ | 16346 this._setProfile({ |
| 13507 email: profile.getEmail(), | 16347 email: profile.getEmail(), |
| 13508 imageUrl: profile.getImageUrl() | 16348 imageUrl: profile.getImageUrl() |
| 13509 }); | 16349 }); |
| 13510 this.set("authResponse", user.getAuthResponse()); | 16350 this.set("auth_response", user.getAuthResponse()); |
| 13511 this._setSignedIn(true); | 16351 this._setSigned_in(true); |
| 13512 this.fire("auth-signin"); | 16352 this.fire("auth-signin"); |
| 13513 }, | 16353 }, |
| 13514 | 16354 |
| 13515 _onSignout: function(e) { | 16355 _onSignout: function(e) { |
| 13516 this._setSignedIn(false); | 16356 this._setSigned_in(false); |
| 13517 this._setProfile(null); | 16357 this._setProfile(null); |
| 13518 }, | 16358 }, |
| 13519 | 16359 |
| 13520 _makeHeader: function(authResponse) { | 16360 _makeHeader: function(auth_response) { |
| 13521 if (!authResponse) { | 16361 if (!auth_response) { |
| 13522 return {}; | 16362 return {}; |
| 13523 } | 16363 } |
| 13524 return { | 16364 return { |
| 13525 "authorization": authResponse.token_type + " " + authResponse.access_t
oken | 16365 "authorization": auth_response.token_type + " " + auth_response.access
_token |
| 13526 }; | 16366 }; |
| 13527 }, | 16367 }, |
| 13528 | 16368 |
| 13529 signIn: function() { | 16369 signIn: function() { |
| 13530 this.$.aware.signIn(); | 16370 this.$.aware.signIn(); |
| 13531 }, | 16371 }, |
| 13532 | 16372 |
| 13533 signOut: function() { | 16373 signOut: function() { |
| 13534 this.$.aware.signOut(); | 16374 this.$.aware.signOut(); |
| 13535 } | 16375 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 13561 margin-left:15px; | 16401 margin-left:15px; |
| 13562 } | 16402 } |
| 13563 .main-content { | 16403 .main-content { |
| 13564 padding: 3px; | 16404 padding: 3px; |
| 13565 } | 16405 } |
| 13566 | 16406 |
| 13567 .main-content a { | 16407 .main-content a { |
| 13568 color: #1F78B4; | 16408 color: #1F78B4; |
| 13569 } | 16409 } |
| 13570 | 16410 |
| 16411 paper-fab { |
| 16412 position: fixed; |
| 16413 bottom: 5px; |
| 16414 right: 5px; |
| 16415 background-color: #1F78B4; |
| 16416 } |
| 16417 |
| 13571 paper-spinner-lite { | 16418 paper-spinner-lite { |
| 13572 --paper-spinner-color: var(--google-yellow-500); | 16419 --paper-spinner-color: var(--google-yellow-500); |
| 13573 } | 16420 } |
| 13574 </style> | 16421 </style> |
| 13575 <app-header-layout> | 16422 <app-header-layout> |
| 13576 <app-header fixed=""> | 16423 <app-header fixed=""> |
| 13577 <app-toolbar> | 16424 <app-toolbar> |
| 13578 <div class="title left">[[name]]</div> | 16425 <div class="title left">[[name]]</div> |
| 13579 <paper-spinner-lite class="left" active="[[_or(busy,_busy)]]"></paper-
spinner-lite> | 16426 <paper-spinner-lite class="left" active="[[_or(busy,_busy)]]"></paper-
spinner-lite> |
| 13580 | 16427 |
| 13581 <a class="left" href="/newui/">Home</a> | 16428 <a class="left" href="/newui/">Home</a> |
| 13582 <a class="left" href="/newui/botlist">Bot List</a> | 16429 <a class="left" href="/newui/botlist">Bot List</a> |
| 13583 <a class="left" href="/newui/tasklist">Task List</a> | 16430 <a class="left" href="/newui/tasklist">Task List</a> |
| 13584 <div class="flex"></div> | 16431 <div class="flex"></div> |
| 13585 <auth-signin class="right" client-id="[[client_id]]" auth-headers="{{a
uth_headers}}" signed-in="{{signed_in}}"> | 16432 <auth-signin class="right" client_id="[[client_id]]" auth_headers="{{a
uth_headers}}" signed_in="{{signed_in}}"> |
| 13586 </auth-signin> | 16433 </auth-signin> |
| 13587 </app-toolbar> | 16434 </app-toolbar> |
| 13588 </app-header> | 16435 </app-header> |
| 13589 <div class="main-content"> | 16436 <div class="main-content"> |
| 13590 <content></content> | 16437 <content></content> |
| 13591 </div> | 16438 </div> |
| 16439 <a target="_blank" href="https://bugs.chromium.org/p/chromium/issues/ent
ry?components=Infra%3EPlatform%3ESwarming&owner=kjlubick@chromium.org&st
atus=Assigned"> |
| 16440 <paper-fab mini="" icon="icons:bug-report"></paper-fab> |
| 16441 </a> |
| 13592 </app-header-layout> | 16442 </app-header-layout> |
| 13593 | 16443 |
| 13594 </template> | 16444 </template> |
| 13595 <script> | 16445 <script> |
| 13596 Polymer({ | 16446 Polymer({ |
| 13597 is: 'swarming-app', | 16447 is: 'swarming-app', |
| 13598 | 16448 |
| 13599 behaviors: [ | 16449 behaviors: [ |
| 13600 SwarmingBehaviors.CommonBehavior, | 16450 SwarmingBehaviors.CommonBehavior, |
| 13601 ], | 16451 ], |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14014 pool: function(bot) { | 16864 pool: function(bot) { |
| 14015 var pool = this._attribute(bot, "pool"); | 16865 var pool = this._attribute(bot, "pool"); |
| 14016 return pool.join(" | "); | 16866 return pool.join(" | "); |
| 14017 }, | 16867 }, |
| 14018 }; | 16868 }; |
| 14019 }, | 16869 }, |
| 14020 | 16870 |
| 14021 | 16871 |
| 14022 }]; | 16872 }]; |
| 14023 })(); | 16873 })(); |
| 14024 </script> | 16874 </script><dom-module id="sort-toggle" assetpath="/res/imp/common/"> |
| 14025 | |
| 14026 <script> | |
| 14027 | |
| 14028 (function() { | |
| 14029 | |
| 14030 // monostate data | |
| 14031 var metaDatas = {}; | |
| 14032 var metaArrays = {}; | |
| 14033 var singleton = null; | |
| 14034 | |
| 14035 Polymer.IronMeta = Polymer({ | |
| 14036 | |
| 14037 is: 'iron-meta', | |
| 14038 | |
| 14039 properties: { | |
| 14040 | |
| 14041 /** | |
| 14042 * The type of meta-data. All meta-data of the same type is stored | |
| 14043 * together. | |
| 14044 */ | |
| 14045 type: { | |
| 14046 type: String, | |
| 14047 value: 'default', | |
| 14048 observer: '_typeChanged' | |
| 14049 }, | |
| 14050 | |
| 14051 /** | |
| 14052 * The key used to store `value` under the `type` namespace. | |
| 14053 */ | |
| 14054 key: { | |
| 14055 type: String, | |
| 14056 observer: '_keyChanged' | |
| 14057 }, | |
| 14058 | |
| 14059 /** | |
| 14060 * The meta-data to store or retrieve. | |
| 14061 */ | |
| 14062 value: { | |
| 14063 type: Object, | |
| 14064 notify: true, | |
| 14065 observer: '_valueChanged' | |
| 14066 }, | |
| 14067 | |
| 14068 /** | |
| 14069 * If true, `value` is set to the iron-meta instance itself. | |
| 14070 */ | |
| 14071 self: { | |
| 14072 type: Boolean, | |
| 14073 observer: '_selfChanged' | |
| 14074 }, | |
| 14075 | |
| 14076 /** | |
| 14077 * Array of all meta-data values for the given type. | |
| 14078 */ | |
| 14079 list: { | |
| 14080 type: Array, | |
| 14081 notify: true | |
| 14082 } | |
| 14083 | |
| 14084 }, | |
| 14085 | |
| 14086 hostAttributes: { | |
| 14087 hidden: true | |
| 14088 }, | |
| 14089 | |
| 14090 /** | |
| 14091 * Only runs if someone invokes the factory/constructor directly | |
| 14092 * e.g. `new Polymer.IronMeta()` | |
| 14093 * | |
| 14094 * @param {{type: (string|undefined), key: (string|undefined), value}=} co
nfig | |
| 14095 */ | |
| 14096 factoryImpl: function(config) { | |
| 14097 if (config) { | |
| 14098 for (var n in config) { | |
| 14099 switch(n) { | |
| 14100 case 'type': | |
| 14101 case 'key': | |
| 14102 case 'value': | |
| 14103 this[n] = config[n]; | |
| 14104 break; | |
| 14105 } | |
| 14106 } | |
| 14107 } | |
| 14108 }, | |
| 14109 | |
| 14110 created: function() { | |
| 14111 // TODO(sjmiles): good for debugging? | |
| 14112 this._metaDatas = metaDatas; | |
| 14113 this._metaArrays = metaArrays; | |
| 14114 }, | |
| 14115 | |
| 14116 _keyChanged: function(key, old) { | |
| 14117 this._resetRegistration(old); | |
| 14118 }, | |
| 14119 | |
| 14120 _valueChanged: function(value) { | |
| 14121 this._resetRegistration(this.key); | |
| 14122 }, | |
| 14123 | |
| 14124 _selfChanged: function(self) { | |
| 14125 if (self) { | |
| 14126 this.value = this; | |
| 14127 } | |
| 14128 }, | |
| 14129 | |
| 14130 _typeChanged: function(type) { | |
| 14131 this._unregisterKey(this.key); | |
| 14132 if (!metaDatas[type]) { | |
| 14133 metaDatas[type] = {}; | |
| 14134 } | |
| 14135 this._metaData = metaDatas[type]; | |
| 14136 if (!metaArrays[type]) { | |
| 14137 metaArrays[type] = []; | |
| 14138 } | |
| 14139 this.list = metaArrays[type]; | |
| 14140 this._registerKeyValue(this.key, this.value); | |
| 14141 }, | |
| 14142 | |
| 14143 /** | |
| 14144 * Retrieves meta data value by key. | |
| 14145 * | |
| 14146 * @method byKey | |
| 14147 * @param {string} key The key of the meta-data to be returned. | |
| 14148 * @return {*} | |
| 14149 */ | |
| 14150 byKey: function(key) { | |
| 14151 return this._metaData && this._metaData[key]; | |
| 14152 }, | |
| 14153 | |
| 14154 _resetRegistration: function(oldKey) { | |
| 14155 this._unregisterKey(oldKey); | |
| 14156 this._registerKeyValue(this.key, this.value); | |
| 14157 }, | |
| 14158 | |
| 14159 _unregisterKey: function(key) { | |
| 14160 this._unregister(key, this._metaData, this.list); | |
| 14161 }, | |
| 14162 | |
| 14163 _registerKeyValue: function(key, value) { | |
| 14164 this._register(key, value, this._metaData, this.list); | |
| 14165 }, | |
| 14166 | |
| 14167 _register: function(key, value, data, list) { | |
| 14168 if (key && data && value !== undefined) { | |
| 14169 data[key] = value; | |
| 14170 list.push(value); | |
| 14171 } | |
| 14172 }, | |
| 14173 | |
| 14174 _unregister: function(key, data, list) { | |
| 14175 if (key && data) { | |
| 14176 if (key in data) { | |
| 14177 var value = data[key]; | |
| 14178 delete data[key]; | |
| 14179 this.arrayDelete(list, value); | |
| 14180 } | |
| 14181 } | |
| 14182 } | |
| 14183 | |
| 14184 }); | |
| 14185 | |
| 14186 Polymer.IronMeta.getIronMeta = function getIronMeta() { | |
| 14187 if (singleton === null) { | |
| 14188 singleton = new Polymer.IronMeta(); | |
| 14189 } | |
| 14190 return singleton; | |
| 14191 }; | |
| 14192 | |
| 14193 /** | |
| 14194 `iron-meta-query` can be used to access infomation stored in `iron-meta`. | |
| 14195 | |
| 14196 Examples: | |
| 14197 | |
| 14198 If I create an instance like this: | |
| 14199 | |
| 14200 <iron-meta key="info" value="foo/bar"></iron-meta> | |
| 14201 | |
| 14202 Note that value="foo/bar" is the metadata I've defined. I could define more | |
| 14203 attributes or use child nodes to define additional metadata. | |
| 14204 | |
| 14205 Now I can access that element (and it's metadata) from any `iron-meta-query`
instance: | |
| 14206 | |
| 14207 var value = new Polymer.IronMetaQuery({key: 'info'}).value; | |
| 14208 | |
| 14209 @group Polymer Iron Elements | |
| 14210 @element iron-meta-query | |
| 14211 */ | |
| 14212 Polymer.IronMetaQuery = Polymer({ | |
| 14213 | |
| 14214 is: 'iron-meta-query', | |
| 14215 | |
| 14216 properties: { | |
| 14217 | |
| 14218 /** | |
| 14219 * The type of meta-data. All meta-data of the same type is stored | |
| 14220 * together. | |
| 14221 */ | |
| 14222 type: { | |
| 14223 type: String, | |
| 14224 value: 'default', | |
| 14225 observer: '_typeChanged' | |
| 14226 }, | |
| 14227 | |
| 14228 /** | |
| 14229 * Specifies a key to use for retrieving `value` from the `type` | |
| 14230 * namespace. | |
| 14231 */ | |
| 14232 key: { | |
| 14233 type: String, | |
| 14234 observer: '_keyChanged' | |
| 14235 }, | |
| 14236 | |
| 14237 /** | |
| 14238 * The meta-data to store or retrieve. | |
| 14239 */ | |
| 14240 value: { | |
| 14241 type: Object, | |
| 14242 notify: true, | |
| 14243 readOnly: true | |
| 14244 }, | |
| 14245 | |
| 14246 /** | |
| 14247 * Array of all meta-data values for the given type. | |
| 14248 */ | |
| 14249 list: { | |
| 14250 type: Array, | |
| 14251 notify: true | |
| 14252 } | |
| 14253 | |
| 14254 }, | |
| 14255 | |
| 14256 /** | |
| 14257 * Actually a factory method, not a true constructor. Only runs if | |
| 14258 * someone invokes it directly (via `new Polymer.IronMeta()`); | |
| 14259 * | |
| 14260 * @param {{type: (string|undefined), key: (string|undefined)}=} config | |
| 14261 */ | |
| 14262 factoryImpl: function(config) { | |
| 14263 if (config) { | |
| 14264 for (var n in config) { | |
| 14265 switch(n) { | |
| 14266 case 'type': | |
| 14267 case 'key': | |
| 14268 this[n] = config[n]; | |
| 14269 break; | |
| 14270 } | |
| 14271 } | |
| 14272 } | |
| 14273 }, | |
| 14274 | |
| 14275 created: function() { | |
| 14276 // TODO(sjmiles): good for debugging? | |
| 14277 this._metaDatas = metaDatas; | |
| 14278 this._metaArrays = metaArrays; | |
| 14279 }, | |
| 14280 | |
| 14281 _keyChanged: function(key) { | |
| 14282 this._setValue(this._metaData && this._metaData[key]); | |
| 14283 }, | |
| 14284 | |
| 14285 _typeChanged: function(type) { | |
| 14286 this._metaData = metaDatas[type]; | |
| 14287 this.list = metaArrays[type]; | |
| 14288 if (this.key) { | |
| 14289 this._keyChanged(this.key); | |
| 14290 } | |
| 14291 }, | |
| 14292 | |
| 14293 /** | |
| 14294 * Retrieves meta data value by key. | |
| 14295 * @param {string} key The key of the meta-data to be returned. | |
| 14296 * @return {*} | |
| 14297 */ | |
| 14298 byKey: function(key) { | |
| 14299 return this._metaData && this._metaData[key]; | |
| 14300 } | |
| 14301 | |
| 14302 }); | |
| 14303 | |
| 14304 })(); | |
| 14305 </script> | |
| 14306 | |
| 14307 | |
| 14308 <dom-module id="iron-icon" assetpath="/res/imp/bower_components/iron-icon/"> | |
| 14309 <template> | 16875 <template> |
| 14310 <style> | 16876 <style> |
| 14311 :host { | 16877 :host { |
| 14312 @apply(--layout-inline); | |
| 14313 @apply(--layout-center-center); | |
| 14314 position: relative; | |
| 14315 | |
| 14316 vertical-align: middle; | |
| 14317 | |
| 14318 fill: var(--iron-icon-fill-color, currentcolor); | |
| 14319 stroke: var(--iron-icon-stroke-color, none); | |
| 14320 | |
| 14321 width: var(--iron-icon-width, 24px); | |
| 14322 height: var(--iron-icon-height, 24px); | |
| 14323 } | |
| 14324 </style> | |
| 14325 </template> | |
| 14326 | |
| 14327 <script> | |
| 14328 | |
| 14329 Polymer({ | |
| 14330 | |
| 14331 is: 'iron-icon', | |
| 14332 | |
| 14333 properties: { | |
| 14334 | |
| 14335 /** | |
| 14336 * The name of the icon to use. The name should be of the form: | |
| 14337 * `iconset_name:icon_name`. | |
| 14338 */ | |
| 14339 icon: { | |
| 14340 type: String, | |
| 14341 observer: '_iconChanged' | |
| 14342 }, | |
| 14343 | |
| 14344 /** | |
| 14345 * The name of the theme to used, if one is specified by the | |
| 14346 * iconset. | |
| 14347 */ | |
| 14348 theme: { | |
| 14349 type: String, | |
| 14350 observer: '_updateIcon' | |
| 14351 }, | |
| 14352 | |
| 14353 /** | |
| 14354 * If using iron-icon without an iconset, you can set the src to be | |
| 14355 * the URL of an individual icon image file. Note that this will take | |
| 14356 * precedence over a given icon attribute. | |
| 14357 */ | |
| 14358 src: { | |
| 14359 type: String, | |
| 14360 observer: '_srcChanged' | |
| 14361 }, | |
| 14362 | |
| 14363 /** | |
| 14364 * @type {!Polymer.IronMeta} | |
| 14365 */ | |
| 14366 _meta: { | |
| 14367 value: Polymer.Base.create('iron-meta', {type: 'iconset'}), | |
| 14368 observer: '_updateIcon' | |
| 14369 } | |
| 14370 | |
| 14371 }, | |
| 14372 | |
| 14373 _DEFAULT_ICONSET: 'icons', | |
| 14374 | |
| 14375 _iconChanged: function(icon) { | |
| 14376 var parts = (icon || '').split(':'); | |
| 14377 this._iconName = parts.pop(); | |
| 14378 this._iconsetName = parts.pop() || this._DEFAULT_ICONSET; | |
| 14379 this._updateIcon(); | |
| 14380 }, | |
| 14381 | |
| 14382 _srcChanged: function(src) { | |
| 14383 this._updateIcon(); | |
| 14384 }, | |
| 14385 | |
| 14386 _usesIconset: function() { | |
| 14387 return this.icon || !this.src; | |
| 14388 }, | |
| 14389 | |
| 14390 /** @suppress {visibility} */ | |
| 14391 _updateIcon: function() { | |
| 14392 if (this._usesIconset()) { | |
| 14393 if (this._img && this._img.parentNode) { | |
| 14394 Polymer.dom(this.root).removeChild(this._img); | |
| 14395 } | |
| 14396 if (this._iconName === "") { | |
| 14397 if (this._iconset) { | |
| 14398 this._iconset.removeIcon(this); | |
| 14399 } | |
| 14400 } else if (this._iconsetName && this._meta) { | |
| 14401 this._iconset = /** @type {?Polymer.Iconset} */ ( | |
| 14402 this._meta.byKey(this._iconsetName)); | |
| 14403 if (this._iconset) { | |
| 14404 this._iconset.applyIcon(this, this._iconName, this.theme); | |
| 14405 this.unlisten(window, 'iron-iconset-added', '_updateIcon'); | |
| 14406 } else { | |
| 14407 this.listen(window, 'iron-iconset-added', '_updateIcon'); | |
| 14408 } | |
| 14409 } | |
| 14410 } else { | |
| 14411 if (this._iconset) { | |
| 14412 this._iconset.removeIcon(this); | |
| 14413 } | |
| 14414 if (!this._img) { | |
| 14415 this._img = document.createElement('img'); | |
| 14416 this._img.style.width = '100%'; | |
| 14417 this._img.style.height = '100%'; | |
| 14418 this._img.draggable = false; | |
| 14419 } | |
| 14420 this._img.src = this.src; | |
| 14421 Polymer.dom(this.root).appendChild(this._img); | |
| 14422 } | |
| 14423 } | |
| 14424 | |
| 14425 }); | |
| 14426 | |
| 14427 </script> | |
| 14428 | |
| 14429 </dom-module> | |
| 14430 <script> | |
| 14431 /** | |
| 14432 * The `iron-iconset-svg` element allows users to define their own icon sets | |
| 14433 * that contain svg icons. The svg icon elements should be children of the | |
| 14434 * `iron-iconset-svg` element. Multiple icons should be given distinct id's. | |
| 14435 * | |
| 14436 * Using svg elements to create icons has a few advantages over traditional | |
| 14437 * bitmap graphics like jpg or png. Icons that use svg are vector based so | |
| 14438 * they are resolution independent and should look good on any device. They | |
| 14439 * are stylable via css. Icons can be themed, colorized, and even animated. | |
| 14440 * | |
| 14441 * Example: | |
| 14442 * | |
| 14443 * <iron-iconset-svg name="my-svg-icons" size="24"> | |
| 14444 * <svg> | |
| 14445 * <defs> | |
| 14446 * <g id="shape"> | |
| 14447 * <rect x="12" y="0" width="12" height="24" /> | |
| 14448 * <circle cx="12" cy="12" r="12" /> | |
| 14449 * </g> | |
| 14450 * </defs> | |
| 14451 * </svg> | |
| 14452 * </iron-iconset-svg> | |
| 14453 * | |
| 14454 * This will automatically register the icon set "my-svg-icons" to the iconset | |
| 14455 * database. To use these icons from within another element, make a | |
| 14456 * `iron-iconset` element and call the `byId` method | |
| 14457 * to retrieve a given iconset. To apply a particular icon inside an | |
| 14458 * element use the `applyIcon` method. For example: | |
| 14459 * | |
| 14460 * iconset.applyIcon(iconNode, 'car'); | |
| 14461 * | |
| 14462 * @element iron-iconset-svg | |
| 14463 * @demo demo/index.html | |
| 14464 * @implements {Polymer.Iconset} | |
| 14465 */ | |
| 14466 Polymer({ | |
| 14467 is: 'iron-iconset-svg', | |
| 14468 | |
| 14469 properties: { | |
| 14470 | |
| 14471 /** | |
| 14472 * The name of the iconset. | |
| 14473 */ | |
| 14474 name: { | |
| 14475 type: String, | |
| 14476 observer: '_nameChanged' | |
| 14477 }, | |
| 14478 | |
| 14479 /** | |
| 14480 * The size of an individual icon. Note that icons must be square. | |
| 14481 */ | |
| 14482 size: { | |
| 14483 type: Number, | |
| 14484 value: 24 | |
| 14485 } | |
| 14486 | |
| 14487 }, | |
| 14488 | |
| 14489 attached: function() { | |
| 14490 this.style.display = 'none'; | |
| 14491 }, | |
| 14492 | |
| 14493 /** | |
| 14494 * Construct an array of all icon names in this iconset. | |
| 14495 * | |
| 14496 * @return {!Array} Array of icon names. | |
| 14497 */ | |
| 14498 getIconNames: function() { | |
| 14499 this._icons = this._createIconMap(); | |
| 14500 return Object.keys(this._icons).map(function(n) { | |
| 14501 return this.name + ':' + n; | |
| 14502 }, this); | |
| 14503 }, | |
| 14504 | |
| 14505 /** | |
| 14506 * Applies an icon to the given element. | |
| 14507 * | |
| 14508 * An svg icon is prepended to the element's shadowRoot if it exists, | |
| 14509 * otherwise to the element itself. | |
| 14510 * | |
| 14511 * @method applyIcon | |
| 14512 * @param {Element} element Element to which the icon is applied. | |
| 14513 * @param {string} iconName Name of the icon to apply. | |
| 14514 * @return {?Element} The svg element which renders the icon. | |
| 14515 */ | |
| 14516 applyIcon: function(element, iconName) { | |
| 14517 // insert svg element into shadow root, if it exists | |
| 14518 element = element.root || element; | |
| 14519 // Remove old svg element | |
| 14520 this.removeIcon(element); | |
| 14521 // install new svg element | |
| 14522 var svg = this._cloneIcon(iconName); | |
| 14523 if (svg) { | |
| 14524 var pde = Polymer.dom(element); | |
| 14525 pde.insertBefore(svg, pde.childNodes[0]); | |
| 14526 return element._svgIcon = svg; | |
| 14527 } | |
| 14528 return null; | |
| 14529 }, | |
| 14530 | |
| 14531 /** | |
| 14532 * Remove an icon from the given element by undoing the changes effected | |
| 14533 * by `applyIcon`. | |
| 14534 * | |
| 14535 * @param {Element} element The element from which the icon is removed. | |
| 14536 */ | |
| 14537 removeIcon: function(element) { | |
| 14538 // Remove old svg element | |
| 14539 if (element._svgIcon) { | |
| 14540 Polymer.dom(element).removeChild(element._svgIcon); | |
| 14541 element._svgIcon = null; | |
| 14542 } | |
| 14543 }, | |
| 14544 | |
| 14545 /** | |
| 14546 * | |
| 14547 * When name is changed, register iconset metadata | |
| 14548 * | |
| 14549 */ | |
| 14550 _nameChanged: function() { | |
| 14551 new Polymer.IronMeta({type: 'iconset', key: this.name, value: this}); | |
| 14552 this.async(function() { | |
| 14553 this.fire('iron-iconset-added', this, {node: window}); | |
| 14554 }); | |
| 14555 }, | |
| 14556 | |
| 14557 /** | |
| 14558 * Create a map of child SVG elements by id. | |
| 14559 * | |
| 14560 * @return {!Object} Map of id's to SVG elements. | |
| 14561 */ | |
| 14562 _createIconMap: function() { | |
| 14563 // Objects chained to Object.prototype (`{}`) have members. Specifically, | |
| 14564 // on FF there is a `watch` method that confuses the icon map, so we | |
| 14565 // need to use a null-based object here. | |
| 14566 var icons = Object.create(null); | |
| 14567 Polymer.dom(this).querySelectorAll('[id]') | |
| 14568 .forEach(function(icon) { | |
| 14569 icons[icon.id] = icon; | |
| 14570 }); | |
| 14571 return icons; | |
| 14572 }, | |
| 14573 | |
| 14574 /** | |
| 14575 * Produce installable clone of the SVG element matching `id` in this | |
| 14576 * iconset, or `undefined` if there is no matching element. | |
| 14577 * | |
| 14578 * @return {Element} Returns an installable clone of the SVG element | |
| 14579 * matching `id`. | |
| 14580 */ | |
| 14581 _cloneIcon: function(id) { | |
| 14582 // create the icon map on-demand, since the iconset itself has no discrete | |
| 14583 // signal to know when it's children are fully parsed | |
| 14584 this._icons = this._icons || this._createIconMap(); | |
| 14585 return this._prepareSvgClone(this._icons[id], this.size); | |
| 14586 }, | |
| 14587 | |
| 14588 /** | |
| 14589 * @param {Element} sourceSvg | |
| 14590 * @param {number} size | |
| 14591 * @return {Element} | |
| 14592 */ | |
| 14593 _prepareSvgClone: function(sourceSvg, size) { | |
| 14594 if (sourceSvg) { | |
| 14595 var content = sourceSvg.cloneNode(true), | |
| 14596 svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'), | |
| 14597 viewBox = content.getAttribute('viewBox') || '0 0 ' + size + ' ' + s
ize; | |
| 14598 svg.setAttribute('viewBox', viewBox); | |
| 14599 svg.setAttribute('preserveAspectRatio', 'xMidYMid meet'); | |
| 14600 // TODO(dfreedm): `pointer-events: none` works around https://crbug.com/
370136 | |
| 14601 // TODO(sjmiles): inline style may not be ideal, but avoids requiring a
shadow-root | |
| 14602 svg.style.cssText = 'pointer-events: none; display: block; width: 100%;
height: 100%;'; | |
| 14603 svg.appendChild(content).removeAttribute('id'); | |
| 14604 return svg; | |
| 14605 } | |
| 14606 return null; | |
| 14607 } | |
| 14608 | |
| 14609 }); | |
| 14610 </script> | |
| 14611 <iron-iconset-svg name="icons" size="24"> | |
| 14612 <svg><defs> | |
| 14613 <g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 1
9.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08-
.16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.0
7.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03-
.15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56-
.05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2
.52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-.
68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8
c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18.
85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48-
.08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11
.1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.2
3c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8.
55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.0
9 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-.
4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.1
3-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.7
2 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3
.27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"></path></g> | |
| 14614 <g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z
m9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"></path></g> | |
| 14615 <g id="accessible"><circle cx="12" cy="4" r="2"></circle><path d="M19 13v-2c-1.5
4.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.0
1H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v-
5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2
-2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.7
6 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"></path></g> | |
| 14616 <g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm
14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"></path></g> | |
| 14617 <g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2
-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm
-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67
1.5-1.5 1.5z"></path></g> | |
| 14618 <g id="account-box"><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9
-2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34
3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"></path></g> | |
| 14619 <g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 1
0-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14
.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.
94-3.5 3.22-6 3.22z"></path></g> | |
| 14620 <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g> | |
| 14621 <g id="add-alert"><path d="M10.01 21.01c0 1.1.89 1.99 1.99 1.99s1.99-.89 1.99-1.
99h-3.98zm8.87-4.19V11c0-3.25-2.25-5.97-5.29-6.69v-.72C13.59 2.71 12.88 2 12 2s-
1.59.71-1.59 1.59v.72C7.37 5.03 5.12 7.75 5.12 11v5.82L3 18.94V20h18v-1.06l-2.12
-2.12zM16 13.01h-3v3h-2v-3H8V11h3V8h2v3h3v2.01z"></path></g> | |
| 14622 <g id="add-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.
9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g> | |
| 14623 <g id="add-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10
S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"></path></g> | |
| 14624 <g id="add-circle-outline"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48
2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8
s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"></path></g> | |
| 14625 <g id="add-shopping-cart"><path d="M11 9h2V6h3V4h-3V1h-2v3H8v2h3v3zm-4 9c-1.1 0-
1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.9
9 2 2-.9 2-2-.9-2-2-2zm-9.83-3.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3
.86-7.01L19.42 4h-.01l-1.1 2-2.76 5H8.53l-.13-.27L6.16 6l-.95-2-.94-2H1v2h2l3.6
7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.13 0-.25-.11-.25
-.25z"></path></g> | |
| 14626 <g id="alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L
6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12
4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.
13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"></path></g> | |
| 14627 <g id="alarm-add"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5.
72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97
0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-
7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"></path></g> | |
| 14628 <g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1
.52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C1
0.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1
.65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97
4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55
16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9
.86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"></path></g> | |
| 14629 <g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.
39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97
0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7
7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"></path><
/g> | |
| 14630 <g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4-
4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73
-7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7
0 2.13 5.57 0 7.7z"></path></g> | |
| 14631 <g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67
1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v
10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4.
33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7
c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l
-1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2-
.71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4.
84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"></path></g> | |
| 14632 <g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.
9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"></path></g> | |
| 14633 <g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4z
m6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"></p
ath></g> | |
| 14634 <g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0
-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9
2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81
-1h12l.94 1H5.12z"></path></g> | |
| 14635 <g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 1
3H20v-2z"></path></g> | |
| 14636 <g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59
L4 12l8 8 8-8z"></path></g> | |
| 14637 <g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"></path></g> | |
| 14638 <g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"></path></g> | |
| 14639 <g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"></path></g> | |
| 14640 <g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12
20l8-8z"></path></g> | |
| 14641 <g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l
-8-8-8 8z"></path></g> | |
| 14642 <g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1.
1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99
h18v14.02z"></path></g> | |
| 14643 <g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-
.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"></path></
g> | |
| 14644 <g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82
2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.
55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4
H7V7h10v2z"></path></g> | |
| 14645 <g id="assignment-ind"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-
2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7
0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3
-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"></path>
</g> | |
| 14646 <g id="assignment-late"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84
-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-
6 15h-2v-2h2v2zm0-4h-2V8h2v6zm-1-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1
1z"></path></g> | |
| 14647 <g id="assignment-return"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.
84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z
m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm4 12h-4v3l-5-5 5-5v3h4v4z"
></path></g> | |
| 14648 <g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.
4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-
2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5
z"></path></g> | |
| 14649 <g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2
.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2
-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10
14.17l6.59-6.59L18 9l-8 8z"></path></g> | |
| 14650 <g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.
79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18
c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46
18 2 15.54 2 12.5z"></path></g> | |
| 14651 <g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1
.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c
.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.4
6-3.03-1.24-4.26z"></path></g> | |
| 14652 <g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.
9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.4
1 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z
"></path></g> | |
| 14653 <g id="backup"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.3
5 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05
-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g> | |
| 14654 <g id="block"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5
2 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4
13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0
4.42-3.58 8-8 8z"></path></g> | |
| 14655 <g id="book"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2
V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g> | |
| 14656 <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2
-2-2z"></path></g> | |
| 14657 <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1
.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g> | |
| 14658 <g id="bug-report"><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.
59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62
1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.0
4.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.
09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v
2z"></path></g> | |
| 14659 <g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9
6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1
.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g> | |
| 14660 <g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1
.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6
6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l
4 4 4-4H6z"></path></g> | |
| 14661 <g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h1
6c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5
-5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2.
75 1.25z"></path></g> | |
| 14662 <g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.
53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 1
0.59 15.59 7 17 8.41 13.41 12 17 15.59z"></path></g> | |
| 14663 <g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3
-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c
0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2
-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c
.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7
10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g> | |
| 14664 <g id="card-membership"><path d="M20 2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h4v
5l4-2 4 2v-5h4c1.11 0 2-.89 2-2V4c0-1.11-.89-2-2-2zm0 13H4v-2h16v2zm0-5H4V4h16v6
z"></path></g> | |
| 14665 <g id="card-travel"><path d="M20 6h-3V4c0-1.11-.89-2-2-2H9c-1.11 0-2 .89-2 2v2H4
c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zM9
4h6v2H9V4zm11 15H4v-2h16v2zm0-5H4V8h3v2h2V8h6v2h2V8h3v6z"></path></g> | |
| 14666 <g id="change-history"><path d="M12 7.77L18.39 18H5.61L12 7.77M12 4L2 20h20L12 4
z"></path></g> | |
| 14667 <g id="check"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path
></g> | |
| 14668 <g id="check-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0
2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z">
</path></g> | |
| 14669 <g id="check-box-outline-blank"><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v1
4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g> | |
| 14670 <g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-
10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></g> | |
| 14671 <g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></p
ath></g> | |
| 14672 <g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"><
/path></g> | |
| 14673 <g id="chrome-reader-mode"><path d="M13 12h7v1.5h-7zm0-2.5h7V11h-7zm0 5h7V16h-7z
M21 4H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 1
5h-9V6h9v13z"></path></g> | |
| 14674 <g id="class"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-
2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"></path></g> | |
| 14675 <g id="clear"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59
6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g> | |
| 14676 <g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59
6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></g> | |
| 14677 <g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35
8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-
4.78-4.65-4.96z"></path></g> | |
| 14678 <g id="cloud-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-
10S17.52 2 12 2zm4.5 14H8c-1.66 0-3-1.34-3-3s1.34-3 3-3l.14.01C8.58 8.28 10.13 7
12 7c2.21 0 4 1.79 4 4h.5c1.38 0 2.5 1.12 2.5 2.5S17.88 16 16.5 16z"></path></g
> | |
| 14679 <g id="cloud-done"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64
5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-
2.05-4.78-4.65-4.96zM10 17l-3.5-3.5 1.41-1.41L10 14.17 15.18 9l1.41 1.41L10 17z"
></path></g> | |
| 14680 <g id="cloud-download"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6
5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2
.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"></path></g> | |
| 14681 <g id="cloud-off"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-
4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0
3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.6
4-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6
h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1
.73z"></path></g> | |
| 14682 <g id="cloud-queue"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.6
4 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64
-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h.71C7.37 7.69 9.48 6
12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3s-1.34 3-3 3z"></path></g> | |
| 14683 <g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.
64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.6
4-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></g> | |
| 14684 <g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4
.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path></g> | |
| 14685 <g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H2
2V8h-7.01V5L11 9l3.99 4z"></path></g> | |
| 14686 <g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-
2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"><
/path></g> | |
| 14687 <g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4
S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59
14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7
7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0
-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.
22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"></path></g> | |
| 14688 <g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.8
2 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c
.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"></path>
</g> | |
| 14689 <g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24-
.15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1.
79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.6
5 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1
.12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.7
7-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.3
6.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.5
9-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.4
8 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8
8-8 8 3.59 8 8-3.59 8-8 8z"></path></g> | |
| 14690 <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.
04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.
75 1.83-1.83z"></path></g> | |
| 14691 <g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0
1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9
h2v3h3v2z"></path></g> | |
| 14692 <g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2
h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path>
</g> | |
| 14693 <g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6
h8V3h-8z"></path></g> | |
| 14694 <g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1
V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c
0-1.1-.9-2-2-2zm0 16H5V9h14v11z"></path></g> | |
| 14695 <g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-
1-1h-5l-1 1H5v2h14V4z"></path></g> | |
| 14696 <g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2
H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"></p
ath></g> | |
| 14697 <g id="dns"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1
-1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c-
.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1
0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g> | |
| 14698 <g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"></path
></g> | |
| 14699 <g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L1
1.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41
L1.83 12 .41 13.41z"></path></g> | |
| 14700 <g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.4
8-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8
18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"></pat
h></g> | |
| 14701 <g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.4
1-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.9
8 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z">
</path></g> | |
| 14702 <g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65
2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26
4.84L12 13z"></path></g> | |
| 14703 <g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"></path></g> | |
| 14704 <g id="error"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.5
2 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"></path></g> | |
| 14705 <g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2
12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58
-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g> | |
| 14706 <g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L
3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"
></path></g> | |
| 14707 <g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm1
5 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"></path></g> | |
| 14708 <g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2
h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g> | |
| 14709 <g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></p
ath></g> | |
| 14710 <g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></pat
h></g> | |
| 14711 <g id="explore"><path d="M12 10.9c-.61 0-1.1.49-1.1 1.1s.49 1.1 1.1 1.1c.61 0 1.
1-.49 1.1-1.1s-.49-1.1-1.1-1.1zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10
-10S17.52 2 12 2zm2.19 12.19L6 18l3.81-8.19L18 6l-3.81 8.19z"></path></g> | |
| 14712 <g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 1
0.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.2
1 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.2
1 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"
></path></g> | |
| 14713 <g id="face"><path d="M9 11.75c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25-
.56 1.25-1.25-.56-1.25-1.25-1.25zm6 0c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.2
5 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-.29.02-.58.05-.86 2.36-1.05
4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c.78 0 1.53-.09 2.25-.26.21.71.
33 1.47.33 2.26 0 4.41-3.59 8-8 8z"></path></g> | |
| 14714 <g id="favorite"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.
42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22
8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"></path></g> | |
| 14715 <g id="favorite-border"><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.2
4 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6
15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24
4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96
5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"></path></g> | |
| 14716 <g id="feedback"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-
2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"></path></g> | |
| 14717 <g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path
></g> | |
| 14718 <g id="file-upload"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"></path></g> | |
| 14719 <g id="filter-list"><path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"></p
ath></g> | |
| 14720 <g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1
.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5
-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1
.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"></path></g> | |
| 14721 <g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.0
5C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.
64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3
.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L
20 21.49 21.49 20l-4.85-4.86z"></path></g> | |
| 14722 <g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3
12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.8
2 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.
44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75
-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-
.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36
.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-
.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s
5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.
57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2
.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.
38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54
.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1
.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-
1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0
1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44
1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64
-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.7
9 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-
1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87
4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"></path><
/g> | |
| 14723 <g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"></path></g> | |
| 14724 <g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8.
21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28
L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"></path></g> | |
| 14725 <g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1
.84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3
.16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z"><
/path></g> | |
| 14726 <g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2
V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2
2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2
2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"></path></g> | |
| 14727 <g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2
2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z
"></path></g> | |
| 14728 <g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0
2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g> | |
| 14729 <g id="folder-open"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2
2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"></path></g> | |
| 14730 <g id="folder-shared"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9
2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-
2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z"></path></g> | |
| 14731 <g id="font-download"><path d="M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v1
6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.1
2 3H5.96l5.11-13h1.86l5.11 13h-2.09z"></path></g> | |
| 14732 <g id="forward"><path d="M12 8V4l8 8-8 8v-4H4V8z"></path></g> | |
| 14733 <g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-
5h-2v3zM14 5v2h3v3h2V5h-5z"></path></g> | |
| 14734 <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h
3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g> | |
| 14735 <g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2.
828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2.
828-5.657-5.657z"></path></g> | |
| 14736 <g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52
-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-
.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-
3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H
21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06
2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.8
5-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25
c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2
2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"></path></g> | |
| 14737 <g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g> | |
| 14738 <g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6
0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-
2v-1z"></path></g> | |
| 14739 <g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19
8.63 2 9.24l5.46 4.73L5.82 21z"></path></g> | |
| 14740 <g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10
S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5
-1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2
.5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.
5 2.5-1.12 2.5-2.5 2.5z"></path></g> | |
| 14741 <g id="help"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52
2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.
45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2
.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"></path></g> | |
| 14742 <g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10
10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-
3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-
2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></g> | |
| 14743 <g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59
9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47
2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-
8 8 3.59 8 8-3.59 8-8 8z"></path></g> | |
| 14744 <g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8
7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19
.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2
.08V8H12z"></path></g> | |
| 14745 <g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"></path></g> | |
| 14746 <g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.
99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4
h8v3.5l-4 4z"></path></g> | |
| 14747 <g id="hourglass-full"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.9
9h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6z"></path></g> | |
| 14748 <g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10
v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0
1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"></path></g> | |
| 14749 <g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2
2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9
-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.
1 3.1v2z"></path></g> | |
| 14750 <g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1
1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2
.89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm
-8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z"
></path></g> | |
| 14751 <g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H
19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V
5H19v10z"></path></g> | |
| 14752 <g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2
2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"></path></g> | |
| 14753 <g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52
2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"></path></g> | |
| 14754 <g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10
10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-
3.59 8-8 8zM11 9h2V7h-2v2z"></path></g> | |
| 14755 <g id="input"><path d="M21 3.01H3c-1.1 0-2 .9-2 2V9h2V4.99h18v14.03H3V15H1v4.01c
0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98v-14c0-1.11-.9-2-2-2zM11 16l4-4-4-4v3H1
v2h10v3z"></path></g> | |
| 14756 <g id="invert-colors"><path d="M17.66 7.93L12 2.27 6.34 7.93c-3.12 3.12-3.12 8.1
9 0 11.31C7.9 20.8 9.95 21.58 12 21.58c2.05 0 4.1-.78 5.66-2.34 3.12-3.12 3.12-8
.19 0-11.31zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59s.62-3
.11 1.76-4.24L12 5.1v14.49z"></path></g> | |
| 14757 <g id="label"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9
3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"></p
ath></g> | |
| 14758 <g id="label-outline"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.
01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.
16zM16 17H5V7h11l3.55 5L16 17z"></path></g> | |
| 14759 <g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2
2 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63
3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.
76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-
.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.
37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8
.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96z
M14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16
2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.4
9 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64
.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g> | |
| 14760 <g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1
.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></pa
th></g> | |
| 14761 <g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1
zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45
1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.
3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15
4.1z"></path></g> | |
| 14762 <g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3
20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v-
2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"></path></g> | |
| 14763 <g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v
4h18V4H3z"></path></g> | |
| 14764 <g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2
.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0
3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></pat
h></g> | |
| 14765 <g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm
0 4h14v-2H7v2zM7 7v2h14V7H7z"></path></g> | |
| 14766 <g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2
2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-
2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1
3.1v2z"></path></g> | |
| 14767 <g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-
9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39
3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2
zm0 12H6V10h12v10z"></path></g> | |
| 14768 <g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z
m6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1
.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v
2H8.9V6zM18 20H6V10h12v10z"></path></g> | |
| 14769 <g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9
-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7
c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67
4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 1
4.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1
.08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"></path></g> | |
| 14770 <g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2
-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g> | |
| 14771 <g id="markunread"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1
.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"></path></g> | |
| 14772 <g id="markunread-mailbox"><path d="M20 6H10v6H8V4h6V0H6v6H4c-1.1 0-2 .9-2 2v12c
0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"></path></g> | |
| 14773 <g id="menu"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"></path></g> | |
| 14774 <g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12
0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.
9 2-2-.9-2-2-2z"></path></g> | |
| 14775 <g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2
c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2
-2-.9-2-2-2z"></path></g> | |
| 14776 <g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5
s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8
2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c
-1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.3
4-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></g> | |
| 14777 <g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2
1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3
H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"></path></g> | |
| 14778 <g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3
14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V
9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"></path></g> | |
| 14779 <g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18
c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z">
</path></g> | |
| 14780 <g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17
.5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z
"></path></g> | |
| 14781 <g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4
.11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56
17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18
14H6z"></path></g> | |
| 14782 <g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2
H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z">
</path></g> | |
| 14783 <g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2
h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"
></path></g> | |
| 14784 <g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm
14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"></path></g> | |
| 14785 <g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1.
12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9
2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13
.99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1.
42z"></path></g> | |
| 14786 <g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1
.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31
2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5
S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.
5 1.5-1.5s1.5.67 1.5 1.5z"></path></g> | |
| 14787 <g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c
1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"></path></g> | |
| 14788 <g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c
0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0
2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2
s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"></path></g> | |
| 14789 <g id="perm-contact-calendar"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2
2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.66 0 3 1.34 3 3s-
1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"></pa
th></g> | |
| 14790 <g id="perm-data-setting"><path d="M18.99 11.5c.34 0 .67.03 1 .07L20 0 0 20h11.5
6c-.04-.33-.07-.66-.07-1 0-4.14 3.36-7.5 7.5-7.5zm3.71 7.99c.02-.16.04-.32.04-.4
9 0-.17-.01-.33-.04-.49l1.06-.83c.09-.08.12-.21.06-.32l-1-1.73c-.06-.11-.19-.15-
.31-.11l-1.24.5c-.26-.2-.54-.37-.85-.49l-.19-1.32c-.01-.12-.12-.21-.24-.21h-2c-.
12 0-.23.09-.25.21l-.19 1.32c-.3.13-.59.29-.85.49l-1.24-.5c-.11-.04-.24 0-.31.11
l-1 1.73c-.06.11-.04.24.06.32l1.06.83c-.02.16-.03.32-.03.49 0 .17.01.33.03.49l-1
.06.83c-.09.08-.12.21-.06.32l1 1.73c.06.11.19.15.31.11l1.24-.5c.26.2.54.37.85.49
l.19 1.32c.02.12.12.21.25.21h2c.12 0 .23-.09.25-.21l.19-1.32c.3-.13.59-.29.84-.4
9l1.25.5c.11.04.24 0 .31-.11l1-1.73c.06-.11.03-.24-.06-.32l-1.07-.83zm-3.71 1.01
c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path>
</g> | |
| 14791 <g id="perm-device-information"><path d="M13 7h-2v2h2V7zm0 4h-2v6h2v-6zm4-9.99L7
1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17
19H7V5h10v14z"></path></g> | |
| 14792 <g id="perm-identity"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.
9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2
.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-
8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"></path></g> | |
| 14793 <g id="perm-media"><path d="M2 6H0v5h.01L0 20c0 1.1.9 2 2 2h18v-2H2V6zm20-2h-8l-
2-2H6c-1.1 0-1.99.9-1.99 2L4 16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2
zM7 15l4.5-6 3.5 4.51 2.5-3.01L21 15H7z"></path></g> | |
| 14794 <g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.0
3-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.0
1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 1
7 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"></path></g> | |
| 14795 <g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.8
5 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"></path></g> | |
| 14796 <g id="pets"><circle cx="4.5" cy="9.5" r="2.5"></circle><circle cx="9" cy="5.5"
r="2.5"></circle><circle cx="15" cy="5.5" r="2.5"></circle><circle cx="19.5" cy=
"9.5" r="2.5"></circle><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.5
4-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79
.05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1.
31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h
.18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4.
8z"></path></g> | |
| 14797 <g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1
.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03
z"></path></g> | |
| 14798 <g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1
3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h1
8v14.05z"></path></g> | |
| 14799 <g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3.
31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"></path></g> | |
| 14800 <g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.6
3L19.5 12 15 20h4l4.5-8z"></path></g> | |
| 14801 <g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99
7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17
5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6
.83z"></path></g> | |
| 14802 <g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2
-2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z"><
/path></g> | |
| 14803 <g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3
-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6
v4h12V3z"></path></g> | |
| 14804 <g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52
22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8
8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g> | |
| 14805 <g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.4
5-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"><
/path></g> | |
| 14806 <g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24
5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2
zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></g> | |
| 14807 <g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 1
0-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-
8 8z"></path></g> | |
| 14808 <g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5
-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2
l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v
20z"></path></g> | |
| 14809 <g id="record-voice-over"><circle cx="9" cy="9" r="4"></circle><path d="M9 15c-2
.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.7
1 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77
7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"></path></g> | |
| 14810 <g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0
-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.0
7.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-
1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1
.45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8
.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"></path></g> | |
| 14811 <g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.9
6 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6
3.6z"></path></g> | |
| 14812 <g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.9
9 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6
-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"></path></g> | |
| 14813 <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g> | |
| 14814 <g id="remove-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10
-10S17.52 2 12 2zm5 11H7v-2h10v2z"></path></g> | |
| 14815 <g id="remove-circle-outline"><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4
.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.
59 8 8-3.59 8-8 8z"></path></g> | |
| 14816 <g id="reorder"><path d="M3 15h18v-2H3v2zm0 4h18v-2H3v2zm0-8h18V9H3v2zm0-6v2h18V
5H3z"></path></g> | |
| 14817 <g id="reply"><path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"
></path></g> | |
| 14818 <g id="reply-all"><path d="M7 8V5l-7 7 7 7v-3l-4-4 4-4zm6 1V5l-7 7 7 7v-4.1c5 0
8.5 1.6 11 5.1-1-5-4-10-11-11z"></path></g> | |
| 14819 <g id="report"><path d="M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15.
73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0
.72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z"></path></g> | |
| 14820 <g id="report-problem"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v
4z"></path></g> | |
| 14821 <g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.8
7 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19
.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2
.08V8H12z"></path></g> | |
| 14822 <g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.8
7-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1
.12 2.5-2.5 2.5z"></path></g> | |
| 14823 <g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm
0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h-
2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c
1.65 0 3 1.35 3 3v5h2V8z"></path></g> | |
| 14824 <g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9
-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05
-.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29
-.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l-
3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"></path></g> | |
| 14825 <g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2
-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h1
0v4z"></path></g> | |
| 14826 <g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 2
2 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.
58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g> | |
| 14827 <g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.
91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.7
9l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.
5 11.99 14 9.5 14z"></path></g> | |
| 14828 <g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2
zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-
2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v
2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm
2-8h6v6H9V9z"></path></g> | |
| 14829 <g id="send"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path></g> | |
| 14830 <g id="settings"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.
11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.
08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2
.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49
.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.1
2.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42
.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.4
9 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3
.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"></path></g> | |
| 14831 <g id="settings-applications"><path d="M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-
.9-2-2-2zm7-7H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.8
9-2-2-2zm-1.75 9c0 .23-.02.46-.05.68l1.48 1.16c.13.11.17.3.08.45l-1.4 2.42c-.09.
15-.27.21-.43.15l-1.74-.7c-.36.28-.76.51-1.18.69l-.26 1.85c-.03.17-.18.3-.35.3h-
2.8c-.17 0-.32-.13-.35-.29l-.26-1.85c-.43-.18-.82-.41-1.18-.69l-1.74.7c-.16.06-.
34 0-.43-.15l-1.4-2.42c-.09-.15-.05-.34.08-.45l1.48-1.16c-.03-.23-.05-.46-.05-.6
9 0-.23.02-.46.05-.68l-1.48-1.16c-.13-.11-.17-.3-.08-.45l1.4-2.42c.09-.15.27-.21
.43-.15l1.74.7c.36-.28.76-.51 1.18-.69l.26-1.85c.03-.17.18-.3.35-.3h2.8c.17 0 .3
2.13.35.29l.26 1.85c.43.18.82.41 1.18.69l1.74-.7c.16-.06.34 0 .43.15l1.4 2.42c.0
9.15.05.34-.08.45l-1.48 1.16c.03.23.05.46.05.69z"></path></g> | |
| 14832 <g id="settings-backup-restore"><path d="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2
2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.1
3 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4.
03 9-9s-4.03-9-9-9z"></path></g> | |
| 14833 <g id="settings-bluetooth"><path d="M11 24h2v-2h-2v2zm-4 0h2v-2H7v2zm8 0h2v-2h-2
v2zm2.71-18.29L12 0h-1v7.59L6.41 3 5 4.41 10.59 10 5 15.59 6.41 17 11 12.41V20h1
l5.71-5.71-4.3-4.29 4.3-4.29zM13 3.83l1.88 1.88L13 7.59V3.83zm1.88 10.46L13 16.1
7v-3.76l1.88 1.88z"></path></g> | |
| 14834 <g id="settings-brightness"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18
c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02zM8 16h2.5l1.5 1.5 1.5-
1.5H16v-2.5l1.5-1.5-1.5-1.5V8h-2.5L12 6.5 10.5 8H8v2.5L6.5 12 8 13.5V16zm4-7c1.6
6 0 3 1.34 3 3s-1.34 3-3 3V9z"></path></g> | |
| 14835 <g id="settings-cell"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM16
.01L8 0C6.9 0 6 .9 6 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-1.99-2-1.99z
M16 16H8V4h8v12z"></path></g> | |
| 14836 <g id="settings-ethernet"><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.2
8L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1
.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"></path></g> | |
| 14837 <g id="settings-input-antenna"><path d="M12 5c-3.87 0-7 3.13-7 7h2c0-2.76 2.24-5
5-5s5 2.24 5 5h2c0-3.87-3.13-7-7-7zm1 9.29c.88-.39 1.5-1.26 1.5-2.29 0-1.38-1.1
2-2.5-2.5-2.5S9.5 10.62 9.5 12c0 1.02.62 1.9 1.5 2.29v3.3L7.59 21 9 22.41l3-3 3
3L16.41 21 13 17.59v-3.3zM12 1C5.93 1 1 5.93 1 12h2c0-4.97 4.03-9 9-9s9 4.03 9 9
h2c0-6.07-4.93-11-11-11z"></path></g> | |
| 14838 <g id="settings-input-component"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h
6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0
c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1
-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4
14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g> | |
| 14839 <g id="settings-input-composite"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h
6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0
c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1
-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4
14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"></path></g> | |
| 14840 <g id="settings-input-hdmi"><path d="M18 7V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v3H
5v6l3 6v3h8v-3l3-6V7h-1zM8 4h8v3h-2V5h-1v2h-2V5h-1v2H8V4z"></path></g> | |
| 14841 <g id="settings-input-svideo"><path d="M8 11.5c0-.83-.67-1.5-1.5-1.5S5 10.67 5 1
1.5 5.67 13 6.5 13 8 12.33 8 11.5zm7-5c0-.83-.67-1.5-1.5-1.5h-3C9.67 5 9 5.67 9
6.5S9.67 8 10.5 8h3c.83 0 1.5-.67 1.5-1.5zM8.5 15c-.83 0-1.5.67-1.5 1.5S7.67 18
8.5 18s1.5-.67 1.5-1.5S9.33 15 8.5 15zM12 1C5.93 1 1 5.93 1 12s4.93 11 11 11 11-
4.93 11-11S18.07 1 12 1zm0 20c-4.96 0-9-4.04-9-9s4.04-9 9-9 9 4.04 9 9-4.04 9-9
9zm5.5-11c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z
m-2 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></
path></g> | |
| 14842 <g id="settings-overscan"><path d="M12.01 5.5L10 8h4l-1.99-2.5zM18 10v4l2.5-1.99
L18 10zM6 10l-2.5 2.01L6 14v-4zm8 6h-4l2.01 2.5L14 16zm7-13H3c-1.1 0-2 .9-2 2v14
c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"></p
ath></g> | |
| 14843 <g id="settings-phone"><path d="M13 9h-2v2h2V9zm4 0h-2v2h2V9zm3 6.5c-1.25 0-2.45
-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2
-2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1
.45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 9v2h2V9h-2
z"></path></g> | |
| 14844 <g id="settings-power"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm2-22h-2v10h2V2zm3
.56 2.44l-1.45 1.45C16.84 6.94 18 8.83 18 11c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-2.1
7 1.16-4.06 2.88-5.12L7.44 4.44C5.36 5.88 4 8.28 4 11c0 4.42 3.58 8 8 8s8-3.58 8
-8c0-2.72-1.36-5.12-3.44-6.56zM15 24h2v-2h-2v2z"></path></g> | |
| 14845 <g id="settings-remote"><path d="M15 9H9c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h6c.5
5 0 1-.45 1-1V10c0-.55-.45-1-1-1zm-3 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2
2zM7.05 6.05l1.41 1.41C9.37 6.56 10.62 6 12 6s2.63.56 3.54 1.46l1.41-1.41C15.68
4.78 13.93 4 12 4s-3.68.78-4.95 2.05zM12 0C8.96 0 6.21 1.23 4.22 3.22l1.41 1.41C
7.26 3.01 9.51 2 12 2s4.74 1.01 6.36 2.64l1.41-1.41C17.79 1.23 15.04 0 12 0z"></
path></g> | |
| 14846 <g id="settings-voice"><path d="M7 24h2v-2H7v2zm5-11c1.66 0 2.99-1.34 2.99-3L15
4c0-1.66-1.34-3-3-3S9 2.34 9 4v6c0 1.66 1.34 3 3 3zm-1 11h2v-2h-2v2zm4 0h2v-2h-2
v2zm4-14h-1.7c0 3-2.54 5.1-5.3 5.1S6.7 13 6.7 10H5c0 3.41 2.72 6.23 6 6.72V20h2v
-3.28c3.28-.49 6-3.31 6-6.72z"></path></g> | |
| 14847 <g id="shop"><path d="M16 6V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H2v13c0 1.1
1.89 2 2 2h16c1.11 0 2-.89 2-2V6h-6zm-6-2h4v2h-4V4zM9 18V9l7.5 4L9 18z"></path><
/g> | |
| 14848 <g id="shop-two"><path d="M3 9H1v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2H3V9zm15-
4V3c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H5v11c0 1.11.89 2 2 2h14c1.11 0 2-.89
2-2V5h-5zm-6-2h4v2h-4V3zm0 12V8l5.5 3-5.5 4z"></path></g> | |
| 14849 <g id="shopping-basket"><path d="M17.21 9l-4.38-6.56c-.19-.28-.51-.42-.83-.42-.3
2 0-.64.14-.83.43L6.79 9H2c-.55 0-1 .45-1 1 0 .09.01.18.04.27l2.54 9.27c.23.84 1
1.46 1.92 1.46h13c.92 0 1.69-.62 1.93-1.46l2.54-9.27L23 10c0-.55-.45-1-1-1h-4.7
9zM9 9l3-4.4L15 9H9zm3 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"></path></g
> | |
| 14850 <g id="shopping-cart"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.
9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.
42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49
c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2
s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"></path></g> | |
| 14851 <g id="sort"><path d="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z"></path></g> | |
| 14852 <g id="speaker-notes"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-
.9 2-2V4c0-1.1-.9-2-2-2zM8 14H6v-2h2v2zm0-3H6V9h2v2zm0-3H6V6h2v2zm7 6h-5v-2h5v2z
m3-3h-8V9h8v2zm0-3h-8V6h8v2z"></path></g> | |
| 14853 <g id="spellcheck"><path d="M12.45 16h2.09L9.43 3H7.57L2.46 16h2.09l1.12-3h5.64l
1.14 3zm-6.02-5L8.5 5.48 10.57 11H6.43zm15.16.59l-8.09 8.09L9.83 16l-1.41 1.41 5
.09 5.09L23 13l-1.41-1.41z"></path></g> | |
| 14854 <g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19
8.63 2 9.24l5.46 4.73L5.82 21z"></path></g> | |
| 14855 <g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L
5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.8
8 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"></path></g> | |
| 14856 <g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.
82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2
.88 1 4.28L12 15.4z"></path></g> | |
| 14857 <g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 1
7.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.4
2L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"></path></g> | |
| 14858 <g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h
1zm-9 4H6v-4h6v4z"></path></g> | |
| 14859 <g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l
3.59 3.58L11 21l-6-6 6-6z"></path></g> | |
| 14860 <g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v1
0h9.17l-3.59-3.58L13 9l6 6z"></path></g> | |
| 14861 <g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h1
6V5H4z"></path></g> | |
| 14862 <g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 1
6.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.6
6 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c
0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.
37-3.47C10.5 13.1 9.66 13 9 13z"></path></g> | |
| 14863 <g id="swap-horiz"><path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v
3H10v2h7.01v3L21 9z"></path></g> | |
| 14864 <g id="swap-vert"><path d="M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3
V14h2V6.99h3L9 3z"></path></g> | |
| 14865 <g id="swap-vertical-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-
4.48 10-10S17.52 2 12 2zM6.5 9L10 5.5 13.5 9H11v4H9V9H6.5zm11 6L14 18.5 10.5 15H
13v-4h2v4h2.5z"></path></g> | |
| 14866 <g id="system-update-alt"><path d="M12 16.5l4-4h-3v-9h-2v9H8l4 4zm9-13h-6v1.99h6
v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1
.1-.9-2-2-2z"></path></g> | |
| 14867 <g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V
5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"></path></g> | |
| 14868 <g id="tab-unselected"><path d="M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9-
2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1-
.9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2
-.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"></path></g> | |
| 14869 <g id="text-format"><path d="M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L
6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z"></path></g> | |
| 14870 <g id="theaters"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8
17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h
2v2z"></path></g> | |
| 14871 <g id="thumb-down"><path d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.
14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44
1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z"
></path></g> | |
| 14872 <g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03
-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2
2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23
10z"></path></g> | |
| 14873 <g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31
-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.7
5c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0
-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.
18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.6
7-1.5-1.5-1.5z"></path></g> | |
| 14874 <g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c
.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.
05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-
2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-
2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55
-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"></path></g> | |
| 14875 <g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2
zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"></path></g> | |
| 14876 <g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.
1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"></pa
th></g> | |
| 14877 <g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z
m0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83
4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.6
5z"></path></g> | |
| 14878 <g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.7
4c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3.
74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10
6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8
4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.0
2-.14.02-.2 0-.62-.38-1.16-.91-1.38z"></path></g> | |
| 14879 <g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0
4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0
3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10
.9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98
-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48
10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"></path></g> | |
| 14880 <g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.
71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9
.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04
zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.
24z"></path></g> | |
| 14881 <g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6
4-4 6.3 6.29L22 12v6z"></path></g> | |
| 14882 <g id="trending-flat"><path d="M22 12l-4-4v3H3v2h15v3z"></path></g> | |
| 14883 <g id="trending-up"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4
4 6.3-6.29L22 12V6z"></path></g> | |
| 14884 <g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-
2-2-2z"></path></g> | |
| 14885 <g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1
-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g> | |
| 14886 <g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47
0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2-
.9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l
.82-1h12l.93 1H5.12z"></path></g> | |
| 14887 <g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.
16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.
5 8z"></path></g> | |
| 14888 <g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12
14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"></p
ath></g> | |
| 14889 <g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12
5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"></path></g
> | |
| 14890 <g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.7
3 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h
2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-1
2.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V
8h1.5z"></path></g> | |
| 14891 <g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.
45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"></path></g> | |
| 14892 <g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0
1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0
1-.45 1-1V4c0-.55-.45-1-1-1z"></path></g> | |
| 14893 <g id="view-array"><path d="M4 18h3V5H4v13zM18 5v13h3V5h-3zM8 18h9V5H8v13z"></pa
th></g> | |
| 14894 <g id="view-carousel"><path d="M7 19h10V4H7v15zm-5-2h4V6H2v11zM18 6v11h4V6h-4z">
</path></g> | |
| 14895 <g id="view-column"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z"><
/path></g> | |
| 14896 <g id="view-day"><path d="M2 21h19v-3H2v3zM20 8H3c-.55 0-1 .45-1 1v6c0 .55.45 1
1 1h17c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zM2 3v3h19V3H2z"></path></g> | |
| 14897 <g id="view-headline"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6
v2h16V5H4z"></path></g> | |
| 14898 <g id="view-list"><path d="M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H
9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z"></path></g> | |
| 14899 <g id="view-module"><path d="M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v-
6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z"></path></g> | |
| 14900 <g id="view-quilt"><path d="M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10
5v6h11V5H10z"></path></g> | |
| 14901 <g id="view-stream"><path d="M4 18h17v-6H4v6zM4 5v6h17V5H4z"></path></g> | |
| 14902 <g id="view-week"><path d="M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.
45 1-1V6c0-.55-.45-1-1-1z"></path></g> | |
| 14903 <g id="visibility"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s
9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5
2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"><
/path></g> | |
| 14904 <g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l
2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98
.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02
1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.
27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .4
4-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-
2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"></path></g> | |
| 14905 <g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></p
ath></g> | |
| 14906 <g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17
.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"></path></g> | |
| 14907 <g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v
5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15
c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"></path
></g> | |
| 14908 <g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11
0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-
6 0h-4V4h4v2z"></path></g> | |
| 14909 <g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61
1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.5
3 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.7
1 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l
-4.99-5z"></path></g> | |
| 14910 <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5
.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.
79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9
.5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"></path></g> | |
| 14911 <g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16
5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v
.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14
9.5 11.99 14 9.5 14zM7 9h5v1H7z"></path></g> | |
| 14912 </defs></svg> | |
| 14913 </iron-iconset-svg> | |
| 14914 <dom-module id="sort-toggle" assetpath="/res/imp/common/"> | |
| 14915 <template> | |
| 14916 <style> | |
| 14917 :host { | |
| 14918 display: inline-block; | 16878 display: inline-block; |
| 14919 position: relative; | 16879 position: relative; |
| 14920 min-width: 20px; | 16880 min-width: 20px; |
| 14921 min-height: 16px; | 16881 min-height: 16px; |
| 14922 vertical-align: middle; | 16882 vertical-align: middle; |
| 14923 } | 16883 } |
| 14924 iron-icon { | 16884 iron-icon { |
| 14925 position: absolute; | 16885 position: absolute; |
| 14926 left: 0; | 16886 left: 0; |
| 14927 cursor: pointer; | 16887 cursor: pointer; |
| (...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15649 if (position.croppedArea === 0 && alignOk) { | 17609 if (position.croppedArea === 0 && alignOk) { |
| 15650 break; | 17610 break; |
| 15651 } | 17611 } |
| 15652 } | 17612 } |
| 15653 | 17613 |
| 15654 return position; | 17614 return position; |
| 15655 } | 17615 } |
| 15656 | 17616 |
| 15657 }; | 17617 }; |
| 15658 </script> | 17618 </script> |
| 15659 <script> | |
| 15660 (function() { | |
| 15661 'use strict'; | |
| 15662 | |
| 15663 /** | |
| 15664 * Chrome uses an older version of DOM Level 3 Keyboard Events | |
| 15665 * | |
| 15666 * Most keys are labeled as text, but some are Unicode codepoints. | |
| 15667 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712
21/keyset.html#KeySet-Set | |
| 15668 */ | |
| 15669 var KEY_IDENTIFIER = { | |
| 15670 'U+0008': 'backspace', | |
| 15671 'U+0009': 'tab', | |
| 15672 'U+001B': 'esc', | |
| 15673 'U+0020': 'space', | |
| 15674 'U+007F': 'del' | |
| 15675 }; | |
| 15676 | |
| 15677 /** | |
| 15678 * Special table for KeyboardEvent.keyCode. | |
| 15679 * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even bett
er | |
| 15680 * than that. | |
| 15681 * | |
| 15682 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve
nt.keyCode#Value_of_keyCode | |
| 15683 */ | |
| 15684 var KEY_CODE = { | |
| 15685 8: 'backspace', | |
| 15686 9: 'tab', | |
| 15687 13: 'enter', | |
| 15688 27: 'esc', | |
| 15689 33: 'pageup', | |
| 15690 34: 'pagedown', | |
| 15691 35: 'end', | |
| 15692 36: 'home', | |
| 15693 32: 'space', | |
| 15694 37: 'left', | |
| 15695 38: 'up', | |
| 15696 39: 'right', | |
| 15697 40: 'down', | |
| 15698 46: 'del', | |
| 15699 106: '*' | |
| 15700 }; | |
| 15701 | |
| 15702 /** | |
| 15703 * MODIFIER_KEYS maps the short name for modifier keys used in a key | |
| 15704 * combo string to the property name that references those same keys | |
| 15705 * in a KeyboardEvent instance. | |
| 15706 */ | |
| 15707 var MODIFIER_KEYS = { | |
| 15708 'shift': 'shiftKey', | |
| 15709 'ctrl': 'ctrlKey', | |
| 15710 'alt': 'altKey', | |
| 15711 'meta': 'metaKey' | |
| 15712 }; | |
| 15713 | |
| 15714 /** | |
| 15715 * KeyboardEvent.key is mostly represented by printable character made by | |
| 15716 * the keyboard, with unprintable keys labeled nicely. | |
| 15717 * | |
| 15718 * However, on OS X, Alt+char can make a Unicode character that follows an | |
| 15719 * Apple-specific mapping. In this case, we fall back to .keyCode. | |
| 15720 */ | |
| 15721 var KEY_CHAR = /[a-z0-9*]/; | |
| 15722 | |
| 15723 /** | |
| 15724 * Matches a keyIdentifier string. | |
| 15725 */ | |
| 15726 var IDENT_CHAR = /U\+/; | |
| 15727 | |
| 15728 /** | |
| 15729 * Matches arrow keys in Gecko 27.0+ | |
| 15730 */ | |
| 15731 var ARROW_KEY = /^arrow/; | |
| 15732 | |
| 15733 /** | |
| 15734 * Matches space keys everywhere (notably including IE10's exceptional name | |
| 15735 * `spacebar`). | |
| 15736 */ | |
| 15737 var SPACE_KEY = /^space(bar)?/; | |
| 15738 | |
| 15739 /** | |
| 15740 * Matches ESC key. | |
| 15741 * | |
| 15742 * Value from: http://w3c.github.io/uievents-key/#key-Escape | |
| 15743 */ | |
| 15744 var ESC_KEY = /^escape$/; | |
| 15745 | |
| 15746 /** | |
| 15747 * Transforms the key. | |
| 15748 * @param {string} key The KeyBoardEvent.key | |
| 15749 * @param {Boolean} [noSpecialChars] Limits the transformation to | |
| 15750 * alpha-numeric characters. | |
| 15751 */ | |
| 15752 function transformKey(key, noSpecialChars) { | |
| 15753 var validKey = ''; | |
| 15754 if (key) { | |
| 15755 var lKey = key.toLowerCase(); | |
| 15756 if (lKey === ' ' || SPACE_KEY.test(lKey)) { | |
| 15757 validKey = 'space'; | |
| 15758 } else if (ESC_KEY.test(lKey)) { | |
| 15759 validKey = 'esc'; | |
| 15760 } else if (lKey.length == 1) { | |
| 15761 if (!noSpecialChars || KEY_CHAR.test(lKey)) { | |
| 15762 validKey = lKey; | |
| 15763 } | |
| 15764 } else if (ARROW_KEY.test(lKey)) { | |
| 15765 validKey = lKey.replace('arrow', ''); | |
| 15766 } else if (lKey == 'multiply') { | |
| 15767 // numpad '*' can map to Multiply on IE/Windows | |
| 15768 validKey = '*'; | |
| 15769 } else { | |
| 15770 validKey = lKey; | |
| 15771 } | |
| 15772 } | |
| 15773 return validKey; | |
| 15774 } | |
| 15775 | |
| 15776 function transformKeyIdentifier(keyIdent) { | |
| 15777 var validKey = ''; | |
| 15778 if (keyIdent) { | |
| 15779 if (keyIdent in KEY_IDENTIFIER) { | |
| 15780 validKey = KEY_IDENTIFIER[keyIdent]; | |
| 15781 } else if (IDENT_CHAR.test(keyIdent)) { | |
| 15782 keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16); | |
| 15783 validKey = String.fromCharCode(keyIdent).toLowerCase(); | |
| 15784 } else { | |
| 15785 validKey = keyIdent.toLowerCase(); | |
| 15786 } | |
| 15787 } | |
| 15788 return validKey; | |
| 15789 } | |
| 15790 | |
| 15791 function transformKeyCode(keyCode) { | |
| 15792 var validKey = ''; | |
| 15793 if (Number(keyCode)) { | |
| 15794 if (keyCode >= 65 && keyCode <= 90) { | |
| 15795 // ascii a-z | |
| 15796 // lowercase is 32 offset from uppercase | |
| 15797 validKey = String.fromCharCode(32 + keyCode); | |
| 15798 } else if (keyCode >= 112 && keyCode <= 123) { | |
| 15799 // function keys f1-f12 | |
| 15800 validKey = 'f' + (keyCode - 112); | |
| 15801 } else if (keyCode >= 48 && keyCode <= 57) { | |
| 15802 // top 0-9 keys | |
| 15803 validKey = String(keyCode - 48); | |
| 15804 } else if (keyCode >= 96 && keyCode <= 105) { | |
| 15805 // num pad 0-9 | |
| 15806 validKey = String(keyCode - 96); | |
| 15807 } else { | |
| 15808 validKey = KEY_CODE[keyCode]; | |
| 15809 } | |
| 15810 } | |
| 15811 return validKey; | |
| 15812 } | |
| 15813 | |
| 15814 /** | |
| 15815 * Calculates the normalized key for a KeyboardEvent. | |
| 15816 * @param {KeyboardEvent} keyEvent | |
| 15817 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key | |
| 15818 * transformation to alpha-numeric chars. This is useful with key | |
| 15819 * combinations like shift + 2, which on FF for MacOS produces | |
| 15820 * keyEvent.key = @ | |
| 15821 * To get 2 returned, set noSpecialChars = true | |
| 15822 * To get @ returned, set noSpecialChars = false | |
| 15823 */ | |
| 15824 function normalizedKeyForEvent(keyEvent, noSpecialChars) { | |
| 15825 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to | |
| 15826 // .detail.key to support artificial keyboard events. | |
| 15827 return transformKey(keyEvent.key, noSpecialChars) || | |
| 15828 transformKeyIdentifier(keyEvent.keyIdentifier) || | |
| 15829 transformKeyCode(keyEvent.keyCode) || | |
| 15830 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no
SpecialChars) || ''; | |
| 15831 } | |
| 15832 | |
| 15833 function keyComboMatchesEvent(keyCombo, event) { | |
| 15834 // For combos with modifiers we support only alpha-numeric keys | |
| 15835 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); | |
| 15836 return keyEvent === keyCombo.key && | |
| 15837 (!keyCombo.hasModifiers || ( | |
| 15838 !!event.shiftKey === !!keyCombo.shiftKey && | |
| 15839 !!event.ctrlKey === !!keyCombo.ctrlKey && | |
| 15840 !!event.altKey === !!keyCombo.altKey && | |
| 15841 !!event.metaKey === !!keyCombo.metaKey) | |
| 15842 ); | |
| 15843 } | |
| 15844 | |
| 15845 function parseKeyComboString(keyComboString) { | |
| 15846 if (keyComboString.length === 1) { | |
| 15847 return { | |
| 15848 combo: keyComboString, | |
| 15849 key: keyComboString, | |
| 15850 event: 'keydown' | |
| 15851 }; | |
| 15852 } | |
| 15853 return keyComboString.split('+').reduce(function(parsedKeyCombo, keyComboP
art) { | |
| 15854 var eventParts = keyComboPart.split(':'); | |
| 15855 var keyName = eventParts[0]; | |
| 15856 var event = eventParts[1]; | |
| 15857 | |
| 15858 if (keyName in MODIFIER_KEYS) { | |
| 15859 parsedKeyCombo[MODIFIER_KEYS[keyName]] = true; | |
| 15860 parsedKeyCombo.hasModifiers = true; | |
| 15861 } else { | |
| 15862 parsedKeyCombo.key = keyName; | |
| 15863 parsedKeyCombo.event = event || 'keydown'; | |
| 15864 } | |
| 15865 | |
| 15866 return parsedKeyCombo; | |
| 15867 }, { | |
| 15868 combo: keyComboString.split(':').shift() | |
| 15869 }); | |
| 15870 } | |
| 15871 | |
| 15872 function parseEventString(eventString) { | |
| 15873 return eventString.trim().split(' ').map(function(keyComboString) { | |
| 15874 return parseKeyComboString(keyComboString); | |
| 15875 }); | |
| 15876 } | |
| 15877 | |
| 15878 /** | |
| 15879 * `Polymer.IronA11yKeysBehavior` provides a normalized interface for proces
sing | |
| 15880 * keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3
.org/TR/wai-aria-practices/#kbd_general_binding). | |
| 15881 * The element takes care of browser differences with respect to Keyboard ev
ents | |
| 15882 * and uses an expressive syntax to filter key presses. | |
| 15883 * | |
| 15884 * Use the `keyBindings` prototype property to express what combination of k
eys | |
| 15885 * will trigger the callback. A key binding has the format | |
| 15886 * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or | |
| 15887 * `"KEY:EVENT": "callback"` are valid as well). Some examples: | |
| 15888 * | |
| 15889 * keyBindings: { | |
| 15890 * 'space': '_onKeydown', // same as 'space:keydown' | |
| 15891 * 'shift+tab': '_onKeydown', | |
| 15892 * 'enter:keypress': '_onKeypress', | |
| 15893 * 'esc:keyup': '_onKeyup' | |
| 15894 * } | |
| 15895 * | |
| 15896 * The callback will receive with an event containing the following informat
ion in `event.detail`: | |
| 15897 * | |
| 15898 * _onKeydown: function(event) { | |
| 15899 * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab" | |
| 15900 * console.log(event.detail.key); // KEY only, e.g. "tab" | |
| 15901 * console.log(event.detail.event); // EVENT, e.g. "keydown" | |
| 15902 * console.log(event.detail.keyboardEvent); // the original KeyboardE
vent | |
| 15903 * } | |
| 15904 * | |
| 15905 * Use the `keyEventTarget` attribute to set up event handlers on a specific | |
| 15906 * node. | |
| 15907 * | |
| 15908 * See the [demo source code](https://github.com/PolymerElements/iron-a11y-k
eys-behavior/blob/master/demo/x-key-aware.html) | |
| 15909 * for an example. | |
| 15910 * | |
| 15911 * @demo demo/index.html | |
| 15912 * @polymerBehavior | |
| 15913 */ | |
| 15914 Polymer.IronA11yKeysBehavior = { | |
| 15915 properties: { | |
| 15916 /** | |
| 15917 * The EventTarget that will be firing relevant KeyboardEvents. Set it t
o | |
| 15918 * `null` to disable the listeners. | |
| 15919 * @type {?EventTarget} | |
| 15920 */ | |
| 15921 keyEventTarget: { | |
| 15922 type: Object, | |
| 15923 value: function() { | |
| 15924 return this; | |
| 15925 } | |
| 15926 }, | |
| 15927 | |
| 15928 /** | |
| 15929 * If true, this property will cause the implementing element to | |
| 15930 * automatically stop propagation on any handled KeyboardEvents. | |
| 15931 */ | |
| 15932 stopKeyboardEventPropagation: { | |
| 15933 type: Boolean, | |
| 15934 value: false | |
| 15935 }, | |
| 15936 | |
| 15937 _boundKeyHandlers: { | |
| 15938 type: Array, | |
| 15939 value: function() { | |
| 15940 return []; | |
| 15941 } | |
| 15942 }, | |
| 15943 | |
| 15944 // We use this due to a limitation in IE10 where instances will have | |
| 15945 // own properties of everything on the "prototype". | |
| 15946 _imperativeKeyBindings: { | |
| 15947 type: Object, | |
| 15948 value: function() { | |
| 15949 return {}; | |
| 15950 } | |
| 15951 } | |
| 15952 }, | |
| 15953 | |
| 15954 observers: [ | |
| 15955 '_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)' | |
| 15956 ], | |
| 15957 | |
| 15958 | |
| 15959 /** | |
| 15960 * To be used to express what combination of keys will trigger the relati
ve | |
| 15961 * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}` | |
| 15962 * @type {Object} | |
| 15963 */ | |
| 15964 keyBindings: {}, | |
| 15965 | |
| 15966 registered: function() { | |
| 15967 this._prepKeyBindings(); | |
| 15968 }, | |
| 15969 | |
| 15970 attached: function() { | |
| 15971 this._listenKeyEventListeners(); | |
| 15972 }, | |
| 15973 | |
| 15974 detached: function() { | |
| 15975 this._unlistenKeyEventListeners(); | |
| 15976 }, | |
| 15977 | |
| 15978 /** | |
| 15979 * Can be used to imperatively add a key binding to the implementing | |
| 15980 * element. This is the imperative equivalent of declaring a keybinding | |
| 15981 * in the `keyBindings` prototype property. | |
| 15982 */ | |
| 15983 addOwnKeyBinding: function(eventString, handlerName) { | |
| 15984 this._imperativeKeyBindings[eventString] = handlerName; | |
| 15985 this._prepKeyBindings(); | |
| 15986 this._resetKeyEventListeners(); | |
| 15987 }, | |
| 15988 | |
| 15989 /** | |
| 15990 * When called, will remove all imperatively-added key bindings. | |
| 15991 */ | |
| 15992 removeOwnKeyBindings: function() { | |
| 15993 this._imperativeKeyBindings = {}; | |
| 15994 this._prepKeyBindings(); | |
| 15995 this._resetKeyEventListeners(); | |
| 15996 }, | |
| 15997 | |
| 15998 /** | |
| 15999 * Returns true if a keyboard event matches `eventString`. | |
| 16000 * | |
| 16001 * @param {KeyboardEvent} event | |
| 16002 * @param {string} eventString | |
| 16003 * @return {boolean} | |
| 16004 */ | |
| 16005 keyboardEventMatchesKeys: function(event, eventString) { | |
| 16006 var keyCombos = parseEventString(eventString); | |
| 16007 for (var i = 0; i < keyCombos.length; ++i) { | |
| 16008 if (keyComboMatchesEvent(keyCombos[i], event)) { | |
| 16009 return true; | |
| 16010 } | |
| 16011 } | |
| 16012 return false; | |
| 16013 }, | |
| 16014 | |
| 16015 _collectKeyBindings: function() { | |
| 16016 var keyBindings = this.behaviors.map(function(behavior) { | |
| 16017 return behavior.keyBindings; | |
| 16018 }); | |
| 16019 | |
| 16020 if (keyBindings.indexOf(this.keyBindings) === -1) { | |
| 16021 keyBindings.push(this.keyBindings); | |
| 16022 } | |
| 16023 | |
| 16024 return keyBindings; | |
| 16025 }, | |
| 16026 | |
| 16027 _prepKeyBindings: function() { | |
| 16028 this._keyBindings = {}; | |
| 16029 | |
| 16030 this._collectKeyBindings().forEach(function(keyBindings) { | |
| 16031 for (var eventString in keyBindings) { | |
| 16032 this._addKeyBinding(eventString, keyBindings[eventString]); | |
| 16033 } | |
| 16034 }, this); | |
| 16035 | |
| 16036 for (var eventString in this._imperativeKeyBindings) { | |
| 16037 this._addKeyBinding(eventString, this._imperativeKeyBindings[eventStri
ng]); | |
| 16038 } | |
| 16039 | |
| 16040 // Give precedence to combos with modifiers to be checked first. | |
| 16041 for (var eventName in this._keyBindings) { | |
| 16042 this._keyBindings[eventName].sort(function (kb1, kb2) { | |
| 16043 var b1 = kb1[0].hasModifiers; | |
| 16044 var b2 = kb2[0].hasModifiers; | |
| 16045 return (b1 === b2) ? 0 : b1 ? -1 : 1; | |
| 16046 }) | |
| 16047 } | |
| 16048 }, | |
| 16049 | |
| 16050 _addKeyBinding: function(eventString, handlerName) { | |
| 16051 parseEventString(eventString).forEach(function(keyCombo) { | |
| 16052 this._keyBindings[keyCombo.event] = | |
| 16053 this._keyBindings[keyCombo.event] || []; | |
| 16054 | |
| 16055 this._keyBindings[keyCombo.event].push([ | |
| 16056 keyCombo, | |
| 16057 handlerName | |
| 16058 ]); | |
| 16059 }, this); | |
| 16060 }, | |
| 16061 | |
| 16062 _resetKeyEventListeners: function() { | |
| 16063 this._unlistenKeyEventListeners(); | |
| 16064 | |
| 16065 if (this.isAttached) { | |
| 16066 this._listenKeyEventListeners(); | |
| 16067 } | |
| 16068 }, | |
| 16069 | |
| 16070 _listenKeyEventListeners: function() { | |
| 16071 if (!this.keyEventTarget) { | |
| 16072 return; | |
| 16073 } | |
| 16074 Object.keys(this._keyBindings).forEach(function(eventName) { | |
| 16075 var keyBindings = this._keyBindings[eventName]; | |
| 16076 var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings); | |
| 16077 | |
| 16078 this._boundKeyHandlers.push([this.keyEventTarget, eventName, boundKeyH
andler]); | |
| 16079 | |
| 16080 this.keyEventTarget.addEventListener(eventName, boundKeyHandler); | |
| 16081 }, this); | |
| 16082 }, | |
| 16083 | |
| 16084 _unlistenKeyEventListeners: function() { | |
| 16085 var keyHandlerTuple; | |
| 16086 var keyEventTarget; | |
| 16087 var eventName; | |
| 16088 var boundKeyHandler; | |
| 16089 | |
| 16090 while (this._boundKeyHandlers.length) { | |
| 16091 // My kingdom for block-scope binding and destructuring assignment.. | |
| 16092 keyHandlerTuple = this._boundKeyHandlers.pop(); | |
| 16093 keyEventTarget = keyHandlerTuple[0]; | |
| 16094 eventName = keyHandlerTuple[1]; | |
| 16095 boundKeyHandler = keyHandlerTuple[2]; | |
| 16096 | |
| 16097 keyEventTarget.removeEventListener(eventName, boundKeyHandler); | |
| 16098 } | |
| 16099 }, | |
| 16100 | |
| 16101 _onKeyBindingEvent: function(keyBindings, event) { | |
| 16102 if (this.stopKeyboardEventPropagation) { | |
| 16103 event.stopPropagation(); | |
| 16104 } | |
| 16105 | |
| 16106 // if event has been already prevented, don't do anything | |
| 16107 if (event.defaultPrevented) { | |
| 16108 return; | |
| 16109 } | |
| 16110 | |
| 16111 for (var i = 0; i < keyBindings.length; i++) { | |
| 16112 var keyCombo = keyBindings[i][0]; | |
| 16113 var handlerName = keyBindings[i][1]; | |
| 16114 if (keyComboMatchesEvent(keyCombo, event)) { | |
| 16115 this._triggerKeyHandler(keyCombo, handlerName, event); | |
| 16116 // exit the loop if eventDefault was prevented | |
| 16117 if (event.defaultPrevented) { | |
| 16118 return; | |
| 16119 } | |
| 16120 } | |
| 16121 } | |
| 16122 }, | |
| 16123 | |
| 16124 _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) { | |
| 16125 var detail = Object.create(keyCombo); | |
| 16126 detail.keyboardEvent = keyboardEvent; | |
| 16127 var event = new CustomEvent(keyCombo.event, { | |
| 16128 detail: detail, | |
| 16129 cancelable: true | |
| 16130 }); | |
| 16131 this[handlerName].call(this, event); | |
| 16132 if (event.defaultPrevented) { | |
| 16133 keyboardEvent.preventDefault(); | |
| 16134 } | |
| 16135 } | |
| 16136 }; | |
| 16137 })(); | |
| 16138 </script> | |
| 16139 | 17619 |
| 16140 | 17620 |
| 16141 <dom-module id="iron-overlay-backdrop" assetpath="/res/imp/bower_components/iron
-overlay-behavior/"> | 17621 <dom-module id="iron-overlay-backdrop" assetpath="/res/imp/bower_components/iron
-overlay-behavior/"> |
| 16142 | 17622 |
| 16143 <template> | 17623 <template> |
| 16144 <style> | 17624 <style> |
| 16145 :host { | 17625 :host { |
| 16146 position: fixed; | 17626 position: fixed; |
| 16147 top: 0; | 17627 top: 0; |
| 16148 left: 0; | 17628 left: 0; |
| (...skipping 2213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18362 | 19842 |
| 18363 is: 'iron-selector', | 19843 is: 'iron-selector', |
| 18364 | 19844 |
| 18365 behaviors: [ | 19845 behaviors: [ |
| 18366 Polymer.IronMultiSelectableBehavior | 19846 Polymer.IronMultiSelectableBehavior |
| 18367 ] | 19847 ] |
| 18368 | 19848 |
| 18369 }); | 19849 }); |
| 18370 | 19850 |
| 18371 </script> | 19851 </script> |
| 18372 | |
| 18373 | |
| 18374 <style is="custom-style"> | |
| 18375 | |
| 18376 :root { | |
| 18377 /* | |
| 18378 * You can use these generic variables in your elements for easy theming. | |
| 18379 * For example, if all your elements use `--primary-text-color` as its main | |
| 18380 * color, then switching from a light to a dark theme is just a matter of | |
| 18381 * changing the value of `--primary-text-color` in your application. | |
| 18382 */ | |
| 18383 --primary-text-color: var(--light-theme-text-color); | |
| 18384 --primary-background-color: var(--light-theme-background-color); | |
| 18385 --secondary-text-color: var(--light-theme-secondary-color); | |
| 18386 --disabled-text-color: var(--light-theme-disabled-color); | |
| 18387 --divider-color: var(--light-theme-divider-color); | |
| 18388 --error-color: var(--paper-deep-orange-a700); | |
| 18389 | |
| 18390 /* | |
| 18391 * Primary and accent colors. Also see color.html for more colors. | |
| 18392 */ | |
| 18393 --primary-color: var(--paper-indigo-500); | |
| 18394 --light-primary-color: var(--paper-indigo-100); | |
| 18395 --dark-primary-color: var(--paper-indigo-700); | |
| 18396 | |
| 18397 --accent-color: var(--paper-pink-a200); | |
| 18398 --light-accent-color: var(--paper-pink-a100); | |
| 18399 --dark-accent-color: var(--paper-pink-a400); | |
| 18400 | |
| 18401 | |
| 18402 /* | |
| 18403 * Material Design Light background theme | |
| 18404 */ | |
| 18405 --light-theme-background-color: #ffffff; | |
| 18406 --light-theme-base-color: #000000; | |
| 18407 --light-theme-text-color: var(--paper-grey-900); | |
| 18408 --light-theme-secondary-color: #737373; /* for secondary text and icons */ | |
| 18409 --light-theme-disabled-color: #9b9b9b; /* disabled/hint text */ | |
| 18410 --light-theme-divider-color: #dbdbdb; | |
| 18411 | |
| 18412 /* | |
| 18413 * Material Design Dark background theme | |
| 18414 */ | |
| 18415 --dark-theme-background-color: var(--paper-grey-900); | |
| 18416 --dark-theme-base-color: #ffffff; | |
| 18417 --dark-theme-text-color: #ffffff; | |
| 18418 --dark-theme-secondary-color: #bcbcbc; /* for secondary text and icons */ | |
| 18419 --dark-theme-disabled-color: #646464; /* disabled/hint text */ | |
| 18420 --dark-theme-divider-color: #3c3c3c; | |
| 18421 | |
| 18422 /* | |
| 18423 * Deprecated values because of their confusing names. | |
| 18424 */ | |
| 18425 --text-primary-color: var(--dark-theme-text-color); | |
| 18426 --default-primary-color: var(--primary-color); | |
| 18427 | |
| 18428 } | |
| 18429 | |
| 18430 </style> | |
| 18431 <script> | 19852 <script> |
| 18432 /** | 19853 /** |
| 18433 * Singleton IronMeta instance. | 19854 * Singleton IronMeta instance. |
| 18434 */ | 19855 */ |
| 18435 Polymer.IronValidatableBehaviorMeta = null; | 19856 Polymer.IronValidatableBehaviorMeta = null; |
| 18436 | 19857 |
| 18437 /** | 19858 /** |
| 18438 * `Use Polymer.IronValidatableBehavior` to implement an element that validate
s user input. | 19859 * `Use Polymer.IronValidatableBehavior` to implement an element that validate
s user input. |
| 18439 * Use the related `Polymer.IronValidatorBehavior` to add custom validation lo
gic to an iron-input. | 19860 * Use the related `Polymer.IronValidatorBehavior` to add custom validation lo
gic to an iron-input. |
| 18440 * | 19861 * |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18738 | 20159 |
| 18739 /** @polymerBehavior Polymer.IronCheckedElementBehavior */ | 20160 /** @polymerBehavior Polymer.IronCheckedElementBehavior */ |
| 18740 Polymer.IronCheckedElementBehavior = [ | 20161 Polymer.IronCheckedElementBehavior = [ |
| 18741 Polymer.IronFormElementBehavior, | 20162 Polymer.IronFormElementBehavior, |
| 18742 Polymer.IronValidatableBehavior, | 20163 Polymer.IronValidatableBehavior, |
| 18743 Polymer.IronCheckedElementBehaviorImpl | 20164 Polymer.IronCheckedElementBehaviorImpl |
| 18744 ]; | 20165 ]; |
| 18745 | 20166 |
| 18746 </script> | 20167 </script> |
| 18747 <script> | 20168 <script> |
| 18748 | |
| 18749 /** | |
| 18750 * @demo demo/index.html | |
| 18751 * @polymerBehavior | |
| 18752 */ | |
| 18753 Polymer.IronControlState = { | |
| 18754 | |
| 18755 properties: { | |
| 18756 | |
| 18757 /** | |
| 18758 * If true, the element currently has focus. | |
| 18759 */ | |
| 18760 focused: { | |
| 18761 type: Boolean, | |
| 18762 value: false, | |
| 18763 notify: true, | |
| 18764 readOnly: true, | |
| 18765 reflectToAttribute: true | |
| 18766 }, | |
| 18767 | |
| 18768 /** | |
| 18769 * If true, the user cannot interact with this element. | |
| 18770 */ | |
| 18771 disabled: { | |
| 18772 type: Boolean, | |
| 18773 value: false, | |
| 18774 notify: true, | |
| 18775 observer: '_disabledChanged', | |
| 18776 reflectToAttribute: true | |
| 18777 }, | |
| 18778 | |
| 18779 _oldTabIndex: { | |
| 18780 type: Number | |
| 18781 }, | |
| 18782 | |
| 18783 _boundFocusBlurHandler: { | |
| 18784 type: Function, | |
| 18785 value: function() { | |
| 18786 return this._focusBlurHandler.bind(this); | |
| 18787 } | |
| 18788 } | |
| 18789 | |
| 18790 }, | |
| 18791 | |
| 18792 observers: [ | |
| 18793 '_changedControlState(focused, disabled)' | |
| 18794 ], | |
| 18795 | |
| 18796 ready: function() { | |
| 18797 this.addEventListener('focus', this._boundFocusBlurHandler, true); | |
| 18798 this.addEventListener('blur', this._boundFocusBlurHandler, true); | |
| 18799 }, | |
| 18800 | |
| 18801 _focusBlurHandler: function(event) { | |
| 18802 // NOTE(cdata): if we are in ShadowDOM land, `event.target` will | |
| 18803 // eventually become `this` due to retargeting; if we are not in | |
| 18804 // ShadowDOM land, `event.target` will eventually become `this` due | |
| 18805 // to the second conditional which fires a synthetic event (that is also | |
| 18806 // handled). In either case, we can disregard `event.path`. | |
| 18807 | |
| 18808 if (event.target === this) { | |
| 18809 this._setFocused(event.type === 'focus'); | |
| 18810 } else if (!this.shadowRoot) { | |
| 18811 var target = /** @type {Node} */(Polymer.dom(event).localTarget); | |
| 18812 if (!this.isLightDescendant(target)) { | |
| 18813 this.fire(event.type, {sourceEvent: event}, { | |
| 18814 node: this, | |
| 18815 bubbles: event.bubbles, | |
| 18816 cancelable: event.cancelable | |
| 18817 }); | |
| 18818 } | |
| 18819 } | |
| 18820 }, | |
| 18821 | |
| 18822 _disabledChanged: function(disabled, old) { | |
| 18823 this.setAttribute('aria-disabled', disabled ? 'true' : 'false'); | |
| 18824 this.style.pointerEvents = disabled ? 'none' : ''; | |
| 18825 if (disabled) { | |
| 18826 this._oldTabIndex = this.tabIndex; | |
| 18827 this._setFocused(false); | |
| 18828 this.tabIndex = -1; | |
| 18829 this.blur(); | |
| 18830 } else if (this._oldTabIndex !== undefined) { | |
| 18831 this.tabIndex = this._oldTabIndex; | |
| 18832 } | |
| 18833 }, | |
| 18834 | |
| 18835 _changedControlState: function() { | |
| 18836 // _controlStateChanged is abstract, follow-on behaviors may implement it | |
| 18837 if (this._controlStateChanged) { | |
| 18838 this._controlStateChanged(); | |
| 18839 } | |
| 18840 } | |
| 18841 | |
| 18842 }; | |
| 18843 | |
| 18844 </script> | |
| 18845 <script> | |
| 18846 | |
| 18847 /** | |
| 18848 * @demo demo/index.html | |
| 18849 * @polymerBehavior Polymer.IronButtonState | |
| 18850 */ | |
| 18851 Polymer.IronButtonStateImpl = { | |
| 18852 | |
| 18853 properties: { | |
| 18854 | |
| 18855 /** | |
| 18856 * If true, the user is currently holding down the button. | |
| 18857 */ | |
| 18858 pressed: { | |
| 18859 type: Boolean, | |
| 18860 readOnly: true, | |
| 18861 value: false, | |
| 18862 reflectToAttribute: true, | |
| 18863 observer: '_pressedChanged' | |
| 18864 }, | |
| 18865 | |
| 18866 /** | |
| 18867 * If true, the button toggles the active state with each tap or press | |
| 18868 * of the spacebar. | |
| 18869 */ | |
| 18870 toggles: { | |
| 18871 type: Boolean, | |
| 18872 value: false, | |
| 18873 reflectToAttribute: true | |
| 18874 }, | |
| 18875 | |
| 18876 /** | |
| 18877 * If true, the button is a toggle and is currently in the active state. | |
| 18878 */ | |
| 18879 active: { | |
| 18880 type: Boolean, | |
| 18881 value: false, | |
| 18882 notify: true, | |
| 18883 reflectToAttribute: true | |
| 18884 }, | |
| 18885 | |
| 18886 /** | |
| 18887 * True if the element is currently being pressed by a "pointer," which | |
| 18888 * is loosely defined as mouse or touch input (but specifically excluding | |
| 18889 * keyboard input). | |
| 18890 */ | |
| 18891 pointerDown: { | |
| 18892 type: Boolean, | |
| 18893 readOnly: true, | |
| 18894 value: false | |
| 18895 }, | |
| 18896 | |
| 18897 /** | |
| 18898 * True if the input device that caused the element to receive focus | |
| 18899 * was a keyboard. | |
| 18900 */ | |
| 18901 receivedFocusFromKeyboard: { | |
| 18902 type: Boolean, | |
| 18903 readOnly: true | |
| 18904 }, | |
| 18905 | |
| 18906 /** | |
| 18907 * The aria attribute to be set if the button is a toggle and in the | |
| 18908 * active state. | |
| 18909 */ | |
| 18910 ariaActiveAttribute: { | |
| 18911 type: String, | |
| 18912 value: 'aria-pressed', | |
| 18913 observer: '_ariaActiveAttributeChanged' | |
| 18914 } | |
| 18915 }, | |
| 18916 | |
| 18917 listeners: { | |
| 18918 down: '_downHandler', | |
| 18919 up: '_upHandler', | |
| 18920 tap: '_tapHandler' | |
| 18921 }, | |
| 18922 | |
| 18923 observers: [ | |
| 18924 '_detectKeyboardFocus(focused)', | |
| 18925 '_activeChanged(active, ariaActiveAttribute)' | |
| 18926 ], | |
| 18927 | |
| 18928 keyBindings: { | |
| 18929 'enter:keydown': '_asyncClick', | |
| 18930 'space:keydown': '_spaceKeyDownHandler', | |
| 18931 'space:keyup': '_spaceKeyUpHandler', | |
| 18932 }, | |
| 18933 | |
| 18934 _mouseEventRe: /^mouse/, | |
| 18935 | |
| 18936 _tapHandler: function() { | |
| 18937 if (this.toggles) { | |
| 18938 // a tap is needed to toggle the active state | |
| 18939 this._userActivate(!this.active); | |
| 18940 } else { | |
| 18941 this.active = false; | |
| 18942 } | |
| 18943 }, | |
| 18944 | |
| 18945 _detectKeyboardFocus: function(focused) { | |
| 18946 this._setReceivedFocusFromKeyboard(!this.pointerDown && focused); | |
| 18947 }, | |
| 18948 | |
| 18949 // to emulate native checkbox, (de-)activations from a user interaction fire | |
| 18950 // 'change' events | |
| 18951 _userActivate: function(active) { | |
| 18952 if (this.active !== active) { | |
| 18953 this.active = active; | |
| 18954 this.fire('change'); | |
| 18955 } | |
| 18956 }, | |
| 18957 | |
| 18958 _downHandler: function(event) { | |
| 18959 this._setPointerDown(true); | |
| 18960 this._setPressed(true); | |
| 18961 this._setReceivedFocusFromKeyboard(false); | |
| 18962 }, | |
| 18963 | |
| 18964 _upHandler: function() { | |
| 18965 this._setPointerDown(false); | |
| 18966 this._setPressed(false); | |
| 18967 }, | |
| 18968 | |
| 18969 /** | |
| 18970 * @param {!KeyboardEvent} event . | |
| 18971 */ | |
| 18972 _spaceKeyDownHandler: function(event) { | |
| 18973 var keyboardEvent = event.detail.keyboardEvent; | |
| 18974 var target = Polymer.dom(keyboardEvent).localTarget; | |
| 18975 | |
| 18976 // Ignore the event if this is coming from a focused light child, since th
at | |
| 18977 // element will deal with it. | |
| 18978 if (this.isLightDescendant(/** @type {Node} */(target))) | |
| 18979 return; | |
| 18980 | |
| 18981 keyboardEvent.preventDefault(); | |
| 18982 keyboardEvent.stopImmediatePropagation(); | |
| 18983 this._setPressed(true); | |
| 18984 }, | |
| 18985 | |
| 18986 /** | |
| 18987 * @param {!KeyboardEvent} event . | |
| 18988 */ | |
| 18989 _spaceKeyUpHandler: function(event) { | |
| 18990 var keyboardEvent = event.detail.keyboardEvent; | |
| 18991 var target = Polymer.dom(keyboardEvent).localTarget; | |
| 18992 | |
| 18993 // Ignore the event if this is coming from a focused light child, since th
at | |
| 18994 // element will deal with it. | |
| 18995 if (this.isLightDescendant(/** @type {Node} */(target))) | |
| 18996 return; | |
| 18997 | |
| 18998 if (this.pressed) { | |
| 18999 this._asyncClick(); | |
| 19000 } | |
| 19001 this._setPressed(false); | |
| 19002 }, | |
| 19003 | |
| 19004 // trigger click asynchronously, the asynchrony is useful to allow one | |
| 19005 // event handler to unwind before triggering another event | |
| 19006 _asyncClick: function() { | |
| 19007 this.async(function() { | |
| 19008 this.click(); | |
| 19009 }, 1); | |
| 19010 }, | |
| 19011 | |
| 19012 // any of these changes are considered a change to button state | |
| 19013 | |
| 19014 _pressedChanged: function(pressed) { | |
| 19015 this._changedButtonState(); | |
| 19016 }, | |
| 19017 | |
| 19018 _ariaActiveAttributeChanged: function(value, oldValue) { | |
| 19019 if (oldValue && oldValue != value && this.hasAttribute(oldValue)) { | |
| 19020 this.removeAttribute(oldValue); | |
| 19021 } | |
| 19022 }, | |
| 19023 | |
| 19024 _activeChanged: function(active, ariaActiveAttribute) { | |
| 19025 if (this.toggles) { | |
| 19026 this.setAttribute(this.ariaActiveAttribute, | |
| 19027 active ? 'true' : 'false'); | |
| 19028 } else { | |
| 19029 this.removeAttribute(this.ariaActiveAttribute); | |
| 19030 } | |
| 19031 this._changedButtonState(); | |
| 19032 }, | |
| 19033 | |
| 19034 _controlStateChanged: function() { | |
| 19035 if (this.disabled) { | |
| 19036 this._setPressed(false); | |
| 19037 } else { | |
| 19038 this._changedButtonState(); | |
| 19039 } | |
| 19040 }, | |
| 19041 | |
| 19042 // provide hook for follow-on behaviors to react to button-state | |
| 19043 | |
| 19044 _changedButtonState: function() { | |
| 19045 if (this._buttonStateChanged) { | |
| 19046 this._buttonStateChanged(); // abstract | |
| 19047 } | |
| 19048 } | |
| 19049 | |
| 19050 }; | |
| 19051 | |
| 19052 /** @polymerBehavior */ | |
| 19053 Polymer.IronButtonState = [ | |
| 19054 Polymer.IronA11yKeysBehavior, | |
| 19055 Polymer.IronButtonStateImpl | |
| 19056 ]; | |
| 19057 | |
| 19058 </script> | |
| 19059 | |
| 19060 | |
| 19061 <dom-module id="paper-ripple" assetpath="/res/imp/bower_components/paper-ripple/
"> | |
| 19062 | |
| 19063 <template> | |
| 19064 <style> | |
| 19065 :host { | |
| 19066 display: block; | |
| 19067 position: absolute; | |
| 19068 border-radius: inherit; | |
| 19069 overflow: hidden; | |
| 19070 top: 0; | |
| 19071 left: 0; | |
| 19072 right: 0; | |
| 19073 bottom: 0; | |
| 19074 | |
| 19075 /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers
, | |
| 19076 * creating a node (with a position:absolute) in the middle of an event | |
| 19077 * handler "interrupts" that event handler (which happens when the | |
| 19078 * ripple is created on demand) */ | |
| 19079 pointer-events: none; | |
| 19080 } | |
| 19081 | |
| 19082 :host([animating]) { | |
| 19083 /* This resolves a rendering issue in Chrome (as of 40) where the | |
| 19084 ripple is not properly clipped by its parent (which may have | |
| 19085 rounded corners). See: http://jsbin.com/temexa/4 | |
| 19086 | |
| 19087 Note: We only apply this style conditionally. Otherwise, the browser | |
| 19088 will create a new compositing layer for every ripple element on the | |
| 19089 page, and that would be bad. */ | |
| 19090 -webkit-transform: translate(0, 0); | |
| 19091 transform: translate3d(0, 0, 0); | |
| 19092 } | |
| 19093 | |
| 19094 #background, | |
| 19095 #waves, | |
| 19096 .wave-container, | |
| 19097 .wave { | |
| 19098 pointer-events: none; | |
| 19099 position: absolute; | |
| 19100 top: 0; | |
| 19101 left: 0; | |
| 19102 width: 100%; | |
| 19103 height: 100%; | |
| 19104 } | |
| 19105 | |
| 19106 #background, | |
| 19107 .wave { | |
| 19108 opacity: 0; | |
| 19109 } | |
| 19110 | |
| 19111 #waves, | |
| 19112 .wave { | |
| 19113 overflow: hidden; | |
| 19114 } | |
| 19115 | |
| 19116 .wave-container, | |
| 19117 .wave { | |
| 19118 border-radius: 50%; | |
| 19119 } | |
| 19120 | |
| 19121 :host(.circle) #background, | |
| 19122 :host(.circle) #waves { | |
| 19123 border-radius: 50%; | |
| 19124 } | |
| 19125 | |
| 19126 :host(.circle) .wave-container { | |
| 19127 overflow: hidden; | |
| 19128 } | |
| 19129 </style> | |
| 19130 | |
| 19131 <div id="background"></div> | |
| 19132 <div id="waves"></div> | |
| 19133 </template> | |
| 19134 </dom-module> | |
| 19135 <script> | |
| 19136 (function() { | |
| 19137 var Utility = { | |
| 19138 distance: function(x1, y1, x2, y2) { | |
| 19139 var xDelta = (x1 - x2); | |
| 19140 var yDelta = (y1 - y2); | |
| 19141 | |
| 19142 return Math.sqrt(xDelta * xDelta + yDelta * yDelta); | |
| 19143 }, | |
| 19144 | |
| 19145 now: window.performance && window.performance.now ? | |
| 19146 window.performance.now.bind(window.performance) : Date.now | |
| 19147 }; | |
| 19148 | |
| 19149 /** | |
| 19150 * @param {HTMLElement} element | |
| 19151 * @constructor | |
| 19152 */ | |
| 19153 function ElementMetrics(element) { | |
| 19154 this.element = element; | |
| 19155 this.width = this.boundingRect.width; | |
| 19156 this.height = this.boundingRect.height; | |
| 19157 | |
| 19158 this.size = Math.max(this.width, this.height); | |
| 19159 } | |
| 19160 | |
| 19161 ElementMetrics.prototype = { | |
| 19162 get boundingRect () { | |
| 19163 return this.element.getBoundingClientRect(); | |
| 19164 }, | |
| 19165 | |
| 19166 furthestCornerDistanceFrom: function(x, y) { | |
| 19167 var topLeft = Utility.distance(x, y, 0, 0); | |
| 19168 var topRight = Utility.distance(x, y, this.width, 0); | |
| 19169 var bottomLeft = Utility.distance(x, y, 0, this.height); | |
| 19170 var bottomRight = Utility.distance(x, y, this.width, this.height); | |
| 19171 | |
| 19172 return Math.max(topLeft, topRight, bottomLeft, bottomRight); | |
| 19173 } | |
| 19174 }; | |
| 19175 | |
| 19176 /** | |
| 19177 * @param {HTMLElement} element | |
| 19178 * @constructor | |
| 19179 */ | |
| 19180 function Ripple(element) { | |
| 19181 this.element = element; | |
| 19182 this.color = window.getComputedStyle(element).color; | |
| 19183 | |
| 19184 this.wave = document.createElement('div'); | |
| 19185 this.waveContainer = document.createElement('div'); | |
| 19186 this.wave.style.backgroundColor = this.color; | |
| 19187 this.wave.classList.add('wave'); | |
| 19188 this.waveContainer.classList.add('wave-container'); | |
| 19189 Polymer.dom(this.waveContainer).appendChild(this.wave); | |
| 19190 | |
| 19191 this.resetInteractionState(); | |
| 19192 } | |
| 19193 | |
| 19194 Ripple.MAX_RADIUS = 300; | |
| 19195 | |
| 19196 Ripple.prototype = { | |
| 19197 get recenters() { | |
| 19198 return this.element.recenters; | |
| 19199 }, | |
| 19200 | |
| 19201 get center() { | |
| 19202 return this.element.center; | |
| 19203 }, | |
| 19204 | |
| 19205 get mouseDownElapsed() { | |
| 19206 var elapsed; | |
| 19207 | |
| 19208 if (!this.mouseDownStart) { | |
| 19209 return 0; | |
| 19210 } | |
| 19211 | |
| 19212 elapsed = Utility.now() - this.mouseDownStart; | |
| 19213 | |
| 19214 if (this.mouseUpStart) { | |
| 19215 elapsed -= this.mouseUpElapsed; | |
| 19216 } | |
| 19217 | |
| 19218 return elapsed; | |
| 19219 }, | |
| 19220 | |
| 19221 get mouseUpElapsed() { | |
| 19222 return this.mouseUpStart ? | |
| 19223 Utility.now () - this.mouseUpStart : 0; | |
| 19224 }, | |
| 19225 | |
| 19226 get mouseDownElapsedSeconds() { | |
| 19227 return this.mouseDownElapsed / 1000; | |
| 19228 }, | |
| 19229 | |
| 19230 get mouseUpElapsedSeconds() { | |
| 19231 return this.mouseUpElapsed / 1000; | |
| 19232 }, | |
| 19233 | |
| 19234 get mouseInteractionSeconds() { | |
| 19235 return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds; | |
| 19236 }, | |
| 19237 | |
| 19238 get initialOpacity() { | |
| 19239 return this.element.initialOpacity; | |
| 19240 }, | |
| 19241 | |
| 19242 get opacityDecayVelocity() { | |
| 19243 return this.element.opacityDecayVelocity; | |
| 19244 }, | |
| 19245 | |
| 19246 get radius() { | |
| 19247 var width2 = this.containerMetrics.width * this.containerMetrics.width; | |
| 19248 var height2 = this.containerMetrics.height * this.containerMetrics.heigh
t; | |
| 19249 var waveRadius = Math.min( | |
| 19250 Math.sqrt(width2 + height2), | |
| 19251 Ripple.MAX_RADIUS | |
| 19252 ) * 1.1 + 5; | |
| 19253 | |
| 19254 var duration = 1.1 - 0.2 * (waveRadius / Ripple.MAX_RADIUS); | |
| 19255 var timeNow = this.mouseInteractionSeconds / duration; | |
| 19256 var size = waveRadius * (1 - Math.pow(80, -timeNow)); | |
| 19257 | |
| 19258 return Math.abs(size); | |
| 19259 }, | |
| 19260 | |
| 19261 get opacity() { | |
| 19262 if (!this.mouseUpStart) { | |
| 19263 return this.initialOpacity; | |
| 19264 } | |
| 19265 | |
| 19266 return Math.max( | |
| 19267 0, | |
| 19268 this.initialOpacity - this.mouseUpElapsedSeconds * this.opacityDecayVe
locity | |
| 19269 ); | |
| 19270 }, | |
| 19271 | |
| 19272 get outerOpacity() { | |
| 19273 // Linear increase in background opacity, capped at the opacity | |
| 19274 // of the wavefront (waveOpacity). | |
| 19275 var outerOpacity = this.mouseUpElapsedSeconds * 0.3; | |
| 19276 var waveOpacity = this.opacity; | |
| 19277 | |
| 19278 return Math.max( | |
| 19279 0, | |
| 19280 Math.min(outerOpacity, waveOpacity) | |
| 19281 ); | |
| 19282 }, | |
| 19283 | |
| 19284 get isOpacityFullyDecayed() { | |
| 19285 return this.opacity < 0.01 && | |
| 19286 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS); | |
| 19287 }, | |
| 19288 | |
| 19289 get isRestingAtMaxRadius() { | |
| 19290 return this.opacity >= this.initialOpacity && | |
| 19291 this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS); | |
| 19292 }, | |
| 19293 | |
| 19294 get isAnimationComplete() { | |
| 19295 return this.mouseUpStart ? | |
| 19296 this.isOpacityFullyDecayed : this.isRestingAtMaxRadius; | |
| 19297 }, | |
| 19298 | |
| 19299 get translationFraction() { | |
| 19300 return Math.min( | |
| 19301 1, | |
| 19302 this.radius / this.containerMetrics.size * 2 / Math.sqrt(2) | |
| 19303 ); | |
| 19304 }, | |
| 19305 | |
| 19306 get xNow() { | |
| 19307 if (this.xEnd) { | |
| 19308 return this.xStart + this.translationFraction * (this.xEnd - this.xSta
rt); | |
| 19309 } | |
| 19310 | |
| 19311 return this.xStart; | |
| 19312 }, | |
| 19313 | |
| 19314 get yNow() { | |
| 19315 if (this.yEnd) { | |
| 19316 return this.yStart + this.translationFraction * (this.yEnd - this.ySta
rt); | |
| 19317 } | |
| 19318 | |
| 19319 return this.yStart; | |
| 19320 }, | |
| 19321 | |
| 19322 get isMouseDown() { | |
| 19323 return this.mouseDownStart && !this.mouseUpStart; | |
| 19324 }, | |
| 19325 | |
| 19326 resetInteractionState: function() { | |
| 19327 this.maxRadius = 0; | |
| 19328 this.mouseDownStart = 0; | |
| 19329 this.mouseUpStart = 0; | |
| 19330 | |
| 19331 this.xStart = 0; | |
| 19332 this.yStart = 0; | |
| 19333 this.xEnd = 0; | |
| 19334 this.yEnd = 0; | |
| 19335 this.slideDistance = 0; | |
| 19336 | |
| 19337 this.containerMetrics = new ElementMetrics(this.element); | |
| 19338 }, | |
| 19339 | |
| 19340 draw: function() { | |
| 19341 var scale; | |
| 19342 var translateString; | |
| 19343 var dx; | |
| 19344 var dy; | |
| 19345 | |
| 19346 this.wave.style.opacity = this.opacity; | |
| 19347 | |
| 19348 scale = this.radius / (this.containerMetrics.size / 2); | |
| 19349 dx = this.xNow - (this.containerMetrics.width / 2); | |
| 19350 dy = this.yNow - (this.containerMetrics.height / 2); | |
| 19351 | |
| 19352 | |
| 19353 // 2d transform for safari because of border-radius and overflow:hidden
clipping bug. | |
| 19354 // https://bugs.webkit.org/show_bug.cgi?id=98538 | |
| 19355 this.waveContainer.style.webkitTransform = 'translate(' + dx + 'px, ' +
dy + 'px)'; | |
| 19356 this.waveContainer.style.transform = 'translate3d(' + dx + 'px, ' + dy +
'px, 0)'; | |
| 19357 this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')'; | |
| 19358 this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)'; | |
| 19359 }, | |
| 19360 | |
| 19361 /** @param {Event=} event */ | |
| 19362 downAction: function(event) { | |
| 19363 var xCenter = this.containerMetrics.width / 2; | |
| 19364 var yCenter = this.containerMetrics.height / 2; | |
| 19365 | |
| 19366 this.resetInteractionState(); | |
| 19367 this.mouseDownStart = Utility.now(); | |
| 19368 | |
| 19369 if (this.center) { | |
| 19370 this.xStart = xCenter; | |
| 19371 this.yStart = yCenter; | |
| 19372 this.slideDistance = Utility.distance( | |
| 19373 this.xStart, this.yStart, this.xEnd, this.yEnd | |
| 19374 ); | |
| 19375 } else { | |
| 19376 this.xStart = event ? | |
| 19377 event.detail.x - this.containerMetrics.boundingRect.left : | |
| 19378 this.containerMetrics.width / 2; | |
| 19379 this.yStart = event ? | |
| 19380 event.detail.y - this.containerMetrics.boundingRect.top : | |
| 19381 this.containerMetrics.height / 2; | |
| 19382 } | |
| 19383 | |
| 19384 if (this.recenters) { | |
| 19385 this.xEnd = xCenter; | |
| 19386 this.yEnd = yCenter; | |
| 19387 this.slideDistance = Utility.distance( | |
| 19388 this.xStart, this.yStart, this.xEnd, this.yEnd | |
| 19389 ); | |
| 19390 } | |
| 19391 | |
| 19392 this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom( | |
| 19393 this.xStart, | |
| 19394 this.yStart | |
| 19395 ); | |
| 19396 | |
| 19397 this.waveContainer.style.top = | |
| 19398 (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px'
; | |
| 19399 this.waveContainer.style.left = | |
| 19400 (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px'; | |
| 19401 | |
| 19402 this.waveContainer.style.width = this.containerMetrics.size + 'px'; | |
| 19403 this.waveContainer.style.height = this.containerMetrics.size + 'px'; | |
| 19404 }, | |
| 19405 | |
| 19406 /** @param {Event=} event */ | |
| 19407 upAction: function(event) { | |
| 19408 if (!this.isMouseDown) { | |
| 19409 return; | |
| 19410 } | |
| 19411 | |
| 19412 this.mouseUpStart = Utility.now(); | |
| 19413 }, | |
| 19414 | |
| 19415 remove: function() { | |
| 19416 Polymer.dom(this.waveContainer.parentNode).removeChild( | |
| 19417 this.waveContainer | |
| 19418 ); | |
| 19419 } | |
| 19420 }; | |
| 19421 | |
| 19422 Polymer({ | |
| 19423 is: 'paper-ripple', | |
| 19424 | |
| 19425 behaviors: [ | |
| 19426 Polymer.IronA11yKeysBehavior | |
| 19427 ], | |
| 19428 | |
| 19429 properties: { | |
| 19430 /** | |
| 19431 * The initial opacity set on the wave. | |
| 19432 * | |
| 19433 * @attribute initialOpacity | |
| 19434 * @type number | |
| 19435 * @default 0.25 | |
| 19436 */ | |
| 19437 initialOpacity: { | |
| 19438 type: Number, | |
| 19439 value: 0.25 | |
| 19440 }, | |
| 19441 | |
| 19442 /** | |
| 19443 * How fast (opacity per second) the wave fades out. | |
| 19444 * | |
| 19445 * @attribute opacityDecayVelocity | |
| 19446 * @type number | |
| 19447 * @default 0.8 | |
| 19448 */ | |
| 19449 opacityDecayVelocity: { | |
| 19450 type: Number, | |
| 19451 value: 0.8 | |
| 19452 }, | |
| 19453 | |
| 19454 /** | |
| 19455 * If true, ripples will exhibit a gravitational pull towards | |
| 19456 * the center of their container as they fade away. | |
| 19457 * | |
| 19458 * @attribute recenters | |
| 19459 * @type boolean | |
| 19460 * @default false | |
| 19461 */ | |
| 19462 recenters: { | |
| 19463 type: Boolean, | |
| 19464 value: false | |
| 19465 }, | |
| 19466 | |
| 19467 /** | |
| 19468 * If true, ripples will center inside its container | |
| 19469 * | |
| 19470 * @attribute recenters | |
| 19471 * @type boolean | |
| 19472 * @default false | |
| 19473 */ | |
| 19474 center: { | |
| 19475 type: Boolean, | |
| 19476 value: false | |
| 19477 }, | |
| 19478 | |
| 19479 /** | |
| 19480 * A list of the visual ripples. | |
| 19481 * | |
| 19482 * @attribute ripples | |
| 19483 * @type Array | |
| 19484 * @default [] | |
| 19485 */ | |
| 19486 ripples: { | |
| 19487 type: Array, | |
| 19488 value: function() { | |
| 19489 return []; | |
| 19490 } | |
| 19491 }, | |
| 19492 | |
| 19493 /** | |
| 19494 * True when there are visible ripples animating within the | |
| 19495 * element. | |
| 19496 */ | |
| 19497 animating: { | |
| 19498 type: Boolean, | |
| 19499 readOnly: true, | |
| 19500 reflectToAttribute: true, | |
| 19501 value: false | |
| 19502 }, | |
| 19503 | |
| 19504 /** | |
| 19505 * If true, the ripple will remain in the "down" state until `holdDown` | |
| 19506 * is set to false again. | |
| 19507 */ | |
| 19508 holdDown: { | |
| 19509 type: Boolean, | |
| 19510 value: false, | |
| 19511 observer: '_holdDownChanged' | |
| 19512 }, | |
| 19513 | |
| 19514 /** | |
| 19515 * If true, the ripple will not generate a ripple effect | |
| 19516 * via pointer interaction. | |
| 19517 * Calling ripple's imperative api like `simulatedRipple` will | |
| 19518 * still generate the ripple effect. | |
| 19519 */ | |
| 19520 noink: { | |
| 19521 type: Boolean, | |
| 19522 value: false | |
| 19523 }, | |
| 19524 | |
| 19525 _animating: { | |
| 19526 type: Boolean | |
| 19527 }, | |
| 19528 | |
| 19529 _boundAnimate: { | |
| 19530 type: Function, | |
| 19531 value: function() { | |
| 19532 return this.animate.bind(this); | |
| 19533 } | |
| 19534 } | |
| 19535 }, | |
| 19536 | |
| 19537 get target () { | |
| 19538 return this.keyEventTarget; | |
| 19539 }, | |
| 19540 | |
| 19541 keyBindings: { | |
| 19542 'enter:keydown': '_onEnterKeydown', | |
| 19543 'space:keydown': '_onSpaceKeydown', | |
| 19544 'space:keyup': '_onSpaceKeyup' | |
| 19545 }, | |
| 19546 | |
| 19547 attached: function() { | |
| 19548 // Set up a11yKeysBehavior to listen to key events on the target, | |
| 19549 // so that space and enter activate the ripple even if the target doesn'
t | |
| 19550 // handle key events. The key handlers deal with `noink` themselves. | |
| 19551 if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE | |
| 19552 this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host; | |
| 19553 } else { | |
| 19554 this.keyEventTarget = this.parentNode; | |
| 19555 } | |
| 19556 var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget); | |
| 19557 this.listen(keyEventTarget, 'up', 'uiUpAction'); | |
| 19558 this.listen(keyEventTarget, 'down', 'uiDownAction'); | |
| 19559 }, | |
| 19560 | |
| 19561 detached: function() { | |
| 19562 this.unlisten(this.keyEventTarget, 'up', 'uiUpAction'); | |
| 19563 this.unlisten(this.keyEventTarget, 'down', 'uiDownAction'); | |
| 19564 this.keyEventTarget = null; | |
| 19565 }, | |
| 19566 | |
| 19567 get shouldKeepAnimating () { | |
| 19568 for (var index = 0; index < this.ripples.length; ++index) { | |
| 19569 if (!this.ripples[index].isAnimationComplete) { | |
| 19570 return true; | |
| 19571 } | |
| 19572 } | |
| 19573 | |
| 19574 return false; | |
| 19575 }, | |
| 19576 | |
| 19577 simulatedRipple: function() { | |
| 19578 this.downAction(null); | |
| 19579 | |
| 19580 // Please see polymer/polymer#1305 | |
| 19581 this.async(function() { | |
| 19582 this.upAction(); | |
| 19583 }, 1); | |
| 19584 }, | |
| 19585 | |
| 19586 /** | |
| 19587 * Provokes a ripple down effect via a UI event, | |
| 19588 * respecting the `noink` property. | |
| 19589 * @param {Event=} event | |
| 19590 */ | |
| 19591 uiDownAction: function(event) { | |
| 19592 if (!this.noink) { | |
| 19593 this.downAction(event); | |
| 19594 } | |
| 19595 }, | |
| 19596 | |
| 19597 /** | |
| 19598 * Provokes a ripple down effect via a UI event, | |
| 19599 * *not* respecting the `noink` property. | |
| 19600 * @param {Event=} event | |
| 19601 */ | |
| 19602 downAction: function(event) { | |
| 19603 if (this.holdDown && this.ripples.length > 0) { | |
| 19604 return; | |
| 19605 } | |
| 19606 | |
| 19607 var ripple = this.addRipple(); | |
| 19608 | |
| 19609 ripple.downAction(event); | |
| 19610 | |
| 19611 if (!this._animating) { | |
| 19612 this._animating = true; | |
| 19613 this.animate(); | |
| 19614 } | |
| 19615 }, | |
| 19616 | |
| 19617 /** | |
| 19618 * Provokes a ripple up effect via a UI event, | |
| 19619 * respecting the `noink` property. | |
| 19620 * @param {Event=} event | |
| 19621 */ | |
| 19622 uiUpAction: function(event) { | |
| 19623 if (!this.noink) { | |
| 19624 this.upAction(event); | |
| 19625 } | |
| 19626 }, | |
| 19627 | |
| 19628 /** | |
| 19629 * Provokes a ripple up effect via a UI event, | |
| 19630 * *not* respecting the `noink` property. | |
| 19631 * @param {Event=} event | |
| 19632 */ | |
| 19633 upAction: function(event) { | |
| 19634 if (this.holdDown) { | |
| 19635 return; | |
| 19636 } | |
| 19637 | |
| 19638 this.ripples.forEach(function(ripple) { | |
| 19639 ripple.upAction(event); | |
| 19640 }); | |
| 19641 | |
| 19642 this._animating = true; | |
| 19643 this.animate(); | |
| 19644 }, | |
| 19645 | |
| 19646 onAnimationComplete: function() { | |
| 19647 this._animating = false; | |
| 19648 this.$.background.style.backgroundColor = null; | |
| 19649 this.fire('transitionend'); | |
| 19650 }, | |
| 19651 | |
| 19652 addRipple: function() { | |
| 19653 var ripple = new Ripple(this); | |
| 19654 | |
| 19655 Polymer.dom(this.$.waves).appendChild(ripple.waveContainer); | |
| 19656 this.$.background.style.backgroundColor = ripple.color; | |
| 19657 this.ripples.push(ripple); | |
| 19658 | |
| 19659 this._setAnimating(true); | |
| 19660 | |
| 19661 return ripple; | |
| 19662 }, | |
| 19663 | |
| 19664 removeRipple: function(ripple) { | |
| 19665 var rippleIndex = this.ripples.indexOf(ripple); | |
| 19666 | |
| 19667 if (rippleIndex < 0) { | |
| 19668 return; | |
| 19669 } | |
| 19670 | |
| 19671 this.ripples.splice(rippleIndex, 1); | |
| 19672 | |
| 19673 ripple.remove(); | |
| 19674 | |
| 19675 if (!this.ripples.length) { | |
| 19676 this._setAnimating(false); | |
| 19677 } | |
| 19678 }, | |
| 19679 | |
| 19680 animate: function() { | |
| 19681 if (!this._animating) { | |
| 19682 return; | |
| 19683 } | |
| 19684 var index; | |
| 19685 var ripple; | |
| 19686 | |
| 19687 for (index = 0; index < this.ripples.length; ++index) { | |
| 19688 ripple = this.ripples[index]; | |
| 19689 | |
| 19690 ripple.draw(); | |
| 19691 | |
| 19692 this.$.background.style.opacity = ripple.outerOpacity; | |
| 19693 | |
| 19694 if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) { | |
| 19695 this.removeRipple(ripple); | |
| 19696 } | |
| 19697 } | |
| 19698 | |
| 19699 if (!this.shouldKeepAnimating && this.ripples.length === 0) { | |
| 19700 this.onAnimationComplete(); | |
| 19701 } else { | |
| 19702 window.requestAnimationFrame(this._boundAnimate); | |
| 19703 } | |
| 19704 }, | |
| 19705 | |
| 19706 _onEnterKeydown: function() { | |
| 19707 this.uiDownAction(); | |
| 19708 this.async(this.uiUpAction, 1); | |
| 19709 }, | |
| 19710 | |
| 19711 _onSpaceKeydown: function() { | |
| 19712 this.uiDownAction(); | |
| 19713 }, | |
| 19714 | |
| 19715 _onSpaceKeyup: function() { | |
| 19716 this.uiUpAction(); | |
| 19717 }, | |
| 19718 | |
| 19719 // note: holdDown does not respect noink since it can be a focus based | |
| 19720 // effect. | |
| 19721 _holdDownChanged: function(newVal, oldVal) { | |
| 19722 if (oldVal === undefined) { | |
| 19723 return; | |
| 19724 } | |
| 19725 if (newVal) { | |
| 19726 this.downAction(); | |
| 19727 } else { | |
| 19728 this.upAction(); | |
| 19729 } | |
| 19730 } | |
| 19731 | |
| 19732 /** | |
| 19733 Fired when the animation finishes. | |
| 19734 This is useful if you want to wait until | |
| 19735 the ripple animation finishes to perform some action. | |
| 19736 | |
| 19737 @event transitionend | |
| 19738 @param {{node: Object}} detail Contains the animated node. | |
| 19739 */ | |
| 19740 }); | |
| 19741 })(); | |
| 19742 </script> | |
| 19743 <script> | |
| 19744 /** | |
| 19745 * `Polymer.PaperRippleBehavior` dynamically implements a ripple | |
| 19746 * when the element has focus via pointer or keyboard. | |
| 19747 * | |
| 19748 * NOTE: This behavior is intended to be used in conjunction with and after | |
| 19749 * `Polymer.IronButtonState` and `Polymer.IronControlState`. | |
| 19750 * | |
| 19751 * @polymerBehavior Polymer.PaperRippleBehavior | |
| 19752 */ | |
| 19753 Polymer.PaperRippleBehavior = { | |
| 19754 properties: { | |
| 19755 /** | |
| 19756 * If true, the element will not produce a ripple effect when interacted | |
| 19757 * with via the pointer. | |
| 19758 */ | |
| 19759 noink: { | |
| 19760 type: Boolean, | |
| 19761 observer: '_noinkChanged' | |
| 19762 }, | |
| 19763 | |
| 19764 /** | |
| 19765 * @type {Element|undefined} | |
| 19766 */ | |
| 19767 _rippleContainer: { | |
| 19768 type: Object, | |
| 19769 } | |
| 19770 }, | |
| 19771 | |
| 19772 /** | |
| 19773 * Ensures a `<paper-ripple>` element is available when the element is | |
| 19774 * focused. | |
| 19775 */ | |
| 19776 _buttonStateChanged: function() { | |
| 19777 if (this.focused) { | |
| 19778 this.ensureRipple(); | |
| 19779 } | |
| 19780 }, | |
| 19781 | |
| 19782 /** | |
| 19783 * In addition to the functionality provided in `IronButtonState`, ensures | |
| 19784 * a ripple effect is created when the element is in a `pressed` state. | |
| 19785 */ | |
| 19786 _downHandler: function(event) { | |
| 19787 Polymer.IronButtonStateImpl._downHandler.call(this, event); | |
| 19788 if (this.pressed) { | |
| 19789 this.ensureRipple(event); | |
| 19790 } | |
| 19791 }, | |
| 19792 | |
| 19793 /** | |
| 19794 * Ensures this element contains a ripple effect. For startup efficiency | |
| 19795 * the ripple effect is dynamically on demand when needed. | |
| 19796 * @param {!Event=} optTriggeringEvent (optional) event that triggered the | |
| 19797 * ripple. | |
| 19798 */ | |
| 19799 ensureRipple: function(optTriggeringEvent) { | |
| 19800 if (!this.hasRipple()) { | |
| 19801 this._ripple = this._createRipple(); | |
| 19802 this._ripple.noink = this.noink; | |
| 19803 var rippleContainer = this._rippleContainer || this.root; | |
| 19804 if (rippleContainer) { | |
| 19805 Polymer.dom(rippleContainer).appendChild(this._ripple); | |
| 19806 } | |
| 19807 if (optTriggeringEvent) { | |
| 19808 // Check if the event happened inside of the ripple container | |
| 19809 // Fall back to host instead of the root because distributed text | |
| 19810 // nodes are not valid event targets | |
| 19811 var domContainer = Polymer.dom(this._rippleContainer || this); | |
| 19812 var target = Polymer.dom(optTriggeringEvent).rootTarget; | |
| 19813 if (domContainer.deepContains( /** @type {Node} */(target))) { | |
| 19814 this._ripple.uiDownAction(optTriggeringEvent); | |
| 19815 } | |
| 19816 } | |
| 19817 } | |
| 19818 }, | |
| 19819 | |
| 19820 /** | |
| 19821 * Returns the `<paper-ripple>` element used by this element to create | |
| 19822 * ripple effects. The element's ripple is created on demand, when | |
| 19823 * necessary, and calling this method will force the | |
| 19824 * ripple to be created. | |
| 19825 */ | |
| 19826 getRipple: function() { | |
| 19827 this.ensureRipple(); | |
| 19828 return this._ripple; | |
| 19829 }, | |
| 19830 | |
| 19831 /** | |
| 19832 * Returns true if this element currently contains a ripple effect. | |
| 19833 * @return {boolean} | |
| 19834 */ | |
| 19835 hasRipple: function() { | |
| 19836 return Boolean(this._ripple); | |
| 19837 }, | |
| 19838 | |
| 19839 /** | |
| 19840 * Create the element's ripple effect via creating a `<paper-ripple>`. | |
| 19841 * Override this method to customize the ripple element. | |
| 19842 * @return {!PaperRippleElement} Returns a `<paper-ripple>` element. | |
| 19843 */ | |
| 19844 _createRipple: function() { | |
| 19845 return /** @type {!PaperRippleElement} */ ( | |
| 19846 document.createElement('paper-ripple')); | |
| 19847 }, | |
| 19848 | |
| 19849 _noinkChanged: function(noink) { | |
| 19850 if (this.hasRipple()) { | |
| 19851 this._ripple.noink = noink; | |
| 19852 } | |
| 19853 } | |
| 19854 }; | |
| 19855 </script> | |
| 19856 <script> | |
| 19857 /** | 20169 /** |
| 19858 * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has k
eyboard focus. | 20170 * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has k
eyboard focus. |
| 19859 * | 20171 * |
| 19860 * @polymerBehavior Polymer.PaperInkyFocusBehavior | 20172 * @polymerBehavior Polymer.PaperInkyFocusBehavior |
| 19861 */ | 20173 */ |
| 19862 Polymer.PaperInkyFocusBehaviorImpl = { | 20174 Polymer.PaperInkyFocusBehaviorImpl = { |
| 19863 observers: [ | 20175 observers: [ |
| 19864 '_focusedChanged(receivedFocusFromKeyboard)' | 20176 '_focusedChanged(receivedFocusFromKeyboard)' |
| 19865 ], | 20177 ], |
| 19866 | 20178 |
| (...skipping 3556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 23423 _taskLink: function(data) { | 23735 _taskLink: function(data) { |
| 23424 if (data && data.task_id) { | 23736 if (data && data.task_id) { |
| 23425 return "/user/task/" + data.task_id; | 23737 return "/user/task/" + data.task_id; |
| 23426 } | 23738 } |
| 23427 return undefined; | 23739 return undefined; |
| 23428 } | 23740 } |
| 23429 | 23741 |
| 23430 }); | 23742 }); |
| 23431 })(); | 23743 })(); |
| 23432 </script> | 23744 </script> |
| 23433 </dom-module><script> | |
| 23434 /** @polymerBehavior Polymer.PaperButtonBehavior */ | |
| 23435 Polymer.PaperButtonBehaviorImpl = { | |
| 23436 properties: { | |
| 23437 /** | |
| 23438 * The z-depth of this element, from 0-5. Setting to 0 will remove the | |
| 23439 * shadow, and each increasing number greater than 0 will be "deeper" | |
| 23440 * than the last. | |
| 23441 * | |
| 23442 * @attribute elevation | |
| 23443 * @type number | |
| 23444 * @default 1 | |
| 23445 */ | |
| 23446 elevation: { | |
| 23447 type: Number, | |
| 23448 reflectToAttribute: true, | |
| 23449 readOnly: true | |
| 23450 } | |
| 23451 }, | |
| 23452 | |
| 23453 observers: [ | |
| 23454 '_calculateElevation(focused, disabled, active, pressed, receivedFocusFrom
Keyboard)', | |
| 23455 '_computeKeyboardClass(receivedFocusFromKeyboard)' | |
| 23456 ], | |
| 23457 | |
| 23458 hostAttributes: { | |
| 23459 role: 'button', | |
| 23460 tabindex: '0', | |
| 23461 animated: true | |
| 23462 }, | |
| 23463 | |
| 23464 _calculateElevation: function() { | |
| 23465 var e = 1; | |
| 23466 if (this.disabled) { | |
| 23467 e = 0; | |
| 23468 } else if (this.active || this.pressed) { | |
| 23469 e = 4; | |
| 23470 } else if (this.receivedFocusFromKeyboard) { | |
| 23471 e = 3; | |
| 23472 } | |
| 23473 this._setElevation(e); | |
| 23474 }, | |
| 23475 | |
| 23476 _computeKeyboardClass: function(receivedFocusFromKeyboard) { | |
| 23477 this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); | |
| 23478 }, | |
| 23479 | |
| 23480 /** | |
| 23481 * In addition to `IronButtonState` behavior, when space key goes down, | |
| 23482 * create a ripple down effect. | |
| 23483 * | |
| 23484 * @param {!KeyboardEvent} event . | |
| 23485 */ | |
| 23486 _spaceKeyDownHandler: function(event) { | |
| 23487 Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); | |
| 23488 // Ensure that there is at most one ripple when the space key is held down
. | |
| 23489 if (this.hasRipple() && this.getRipple().ripples.length < 1) { | |
| 23490 this._ripple.uiDownAction(); | |
| 23491 } | |
| 23492 }, | |
| 23493 | |
| 23494 /** | |
| 23495 * In addition to `IronButtonState` behavior, when space key goes up, | |
| 23496 * create a ripple up effect. | |
| 23497 * | |
| 23498 * @param {!KeyboardEvent} event . | |
| 23499 */ | |
| 23500 _spaceKeyUpHandler: function(event) { | |
| 23501 Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event); | |
| 23502 if (this.hasRipple()) { | |
| 23503 this._ripple.uiUpAction(); | |
| 23504 } | |
| 23505 } | |
| 23506 }; | |
| 23507 | |
| 23508 /** @polymerBehavior */ | |
| 23509 Polymer.PaperButtonBehavior = [ | |
| 23510 Polymer.IronButtonState, | |
| 23511 Polymer.IronControlState, | |
| 23512 Polymer.PaperRippleBehavior, | |
| 23513 Polymer.PaperButtonBehaviorImpl | |
| 23514 ]; | |
| 23515 </script> | |
| 23516 <style is="custom-style"> | |
| 23517 | |
| 23518 :root { | |
| 23519 | |
| 23520 --shadow-transition: { | |
| 23521 transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); | |
| 23522 }; | |
| 23523 | |
| 23524 --shadow-none: { | |
| 23525 box-shadow: none; | |
| 23526 }; | |
| 23527 | |
| 23528 /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */ | |
| 23529 | |
| 23530 --shadow-elevation-2dp: { | |
| 23531 box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), | |
| 23532 0 1px 5px 0 rgba(0, 0, 0, 0.12), | |
| 23533 0 3px 1px -2px rgba(0, 0, 0, 0.2); | |
| 23534 }; | |
| 23535 | |
| 23536 --shadow-elevation-3dp: { | |
| 23537 box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), | |
| 23538 0 1px 8px 0 rgba(0, 0, 0, 0.12), | |
| 23539 0 3px 3px -2px rgba(0, 0, 0, 0.4); | |
| 23540 }; | |
| 23541 | |
| 23542 --shadow-elevation-4dp: { | |
| 23543 box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), | |
| 23544 0 1px 10px 0 rgba(0, 0, 0, 0.12), | |
| 23545 0 2px 4px -1px rgba(0, 0, 0, 0.4); | |
| 23546 }; | |
| 23547 | |
| 23548 --shadow-elevation-6dp: { | |
| 23549 box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), | |
| 23550 0 1px 18px 0 rgba(0, 0, 0, 0.12), | |
| 23551 0 3px 5px -1px rgba(0, 0, 0, 0.4); | |
| 23552 }; | |
| 23553 | |
| 23554 --shadow-elevation-8dp: { | |
| 23555 box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), | |
| 23556 0 3px 14px 2px rgba(0, 0, 0, 0.12), | |
| 23557 0 5px 5px -3px rgba(0, 0, 0, 0.4); | |
| 23558 }; | |
| 23559 | |
| 23560 --shadow-elevation-12dp: { | |
| 23561 box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14), | |
| 23562 0 4px 22px 3px rgba(0, 0, 0, 0.12), | |
| 23563 0 6px 7px -4px rgba(0, 0, 0, 0.4); | |
| 23564 }; | |
| 23565 | |
| 23566 --shadow-elevation-16dp: { | |
| 23567 box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), | |
| 23568 0 6px 30px 5px rgba(0, 0, 0, 0.12), | |
| 23569 0 8px 10px -5px rgba(0, 0, 0, 0.4); | |
| 23570 }; | |
| 23571 | |
| 23572 } | |
| 23573 | |
| 23574 </style> | |
| 23575 <dom-module id="paper-material-shared-styles" assetpath="/res/imp/bower_componen
ts/paper-material/"> | |
| 23576 <template> | |
| 23577 <style> | |
| 23578 :host { | |
| 23579 display: block; | |
| 23580 position: relative; | |
| 23581 } | |
| 23582 | |
| 23583 :host([elevation="1"]) { | |
| 23584 @apply(--shadow-elevation-2dp); | |
| 23585 } | |
| 23586 | |
| 23587 :host([elevation="2"]) { | |
| 23588 @apply(--shadow-elevation-4dp); | |
| 23589 } | |
| 23590 | |
| 23591 :host([elevation="3"]) { | |
| 23592 @apply(--shadow-elevation-6dp); | |
| 23593 } | |
| 23594 | |
| 23595 :host([elevation="4"]) { | |
| 23596 @apply(--shadow-elevation-8dp); | |
| 23597 } | |
| 23598 | |
| 23599 :host([elevation="5"]) { | |
| 23600 @apply(--shadow-elevation-16dp); | |
| 23601 } | |
| 23602 </style> | |
| 23603 </template> | |
| 23604 </dom-module> | 23745 </dom-module> |
| 23605 | 23746 |
| 23606 | |
| 23607 <dom-module id="paper-material" assetpath="/res/imp/bower_components/paper-mater
ial/"> | 23747 <dom-module id="paper-material" assetpath="/res/imp/bower_components/paper-mater
ial/"> |
| 23608 <template> | 23748 <template> |
| 23609 <style include="paper-material-shared-styles"></style> | 23749 <style include="paper-material-shared-styles"></style> |
| 23610 <style> | 23750 <style> |
| 23611 :host([animated]) { | 23751 :host([animated]) { |
| 23612 @apply(--shadow-transition); | 23752 @apply(--shadow-transition); |
| 23613 } | 23753 } |
| 23614 </style> | 23754 </style> |
| 23615 | 23755 |
| 23616 <content></content> | 23756 <content></content> |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 24372 if (state === "RUNNING" || state === "PENDING") { | 24512 if (state === "RUNNING" || state === "PENDING") { |
| 24373 return "pending"; | 24513 return "pending"; |
| 24374 } | 24514 } |
| 24375 return ""; | 24515 return ""; |
| 24376 } | 24516 } |
| 24377 | 24517 |
| 24378 }); | 24518 }); |
| 24379 })(); | 24519 })(); |
| 24380 </script> | 24520 </script> |
| 24381 </dom-module></div></body></html> | 24521 </dom-module></div></body></html> |
| OLD | NEW |