1diff --git a/components-chromium/font-roboto/roboto.js b/components-chromium/font-roboto/roboto.js 2index 02aebd81b0df..342d26d6f797 100644 3--- a/components-chromium/font-roboto/roboto.js 4+++ b/components-chromium/font-roboto/roboto.js 5@@ -17,7 +17,6 @@ if (!window.polymerSkipLoadingFontRoboto) { 6 link.rel = 'stylesheet'; 7 link.type = 'text/css'; 8 link.crossOrigin = 'anonymous'; 9- link.href = 10- 'https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic'; 11+ link.href = 'chrome://resources/css/roboto.css'; 12 document.head.appendChild(link); 13 } 14--- a/components-chromium/iron-a11y-announcer/iron-a11y-announcer.js 15+++ b/components-chromium/iron-a11y-announcer/iron-a11y-announcer.js 16@@ -46,7 +46,7 @@ Note: announcements are only audible if you have a screen reader enabled. 17 @group Iron Elements 18 @demo demo/index.html 19 */ 20-export const IronA11yAnnouncer = Polymer({ 21+export var IronA11yAnnouncer = Polymer({ 22 _template: html` 23 <style> 24 :host { 25--- a/components-chromium/iron-iconset-svg/iron-iconset-svg.js 26+++ b/components-chromium/iron-iconset-svg/iron-iconset-svg.js 27@@ -134,6 +134,18 @@ Polymer({ 28 return null; 29 }, 30 31+ /** 32+ * Produce installable clone of the SVG element matching `id` in this 33+ * iconset, or `undefined` if there is no matching element. 34+ * @param {string} iconName Name of the icon to apply. 35+ * @param {boolean} targetIsRTL Whether the target element is RTL. 36+ * @return {Element} Returns an installable clone of the SVG element 37+ * matching `id`. 38+ */ 39+ createIcon: function(iconName, targetIsRTL) { 40+ return this._cloneIcon(iconName, this.rtlMirroring && targetIsRTL); 41+ }, 42+ 43 /** 44 * Remove an icon from the given element by undoing the changes effected 45 * by `applyIcon`. 46diff --git a/components-chromium/polymer/lib/legacy/legacy-element-mixin.js b/components-chromium/polymer/lib/legacy/legacy-element-mixin.js 47index 21fa65c0208d..bd591b6dd341 100644 48--- a/components-chromium/polymer/lib/legacy/legacy-element-mixin.js 49+++ b/components-chromium/polymer/lib/legacy/legacy-element-mixin.js 50@@ -10,7 +10,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN 51 import '../../../shadycss/entrypoints/apply-shim.js'; 52 import { ElementMixin } from '../mixins/element-mixin.js'; 53 import { GestureEventListeners } from '../mixins/gesture-event-listeners.js'; 54-import { DirMixin } from '../mixins/dir-mixin.js'; 55 import { dedupingMixin } from '../utils/mixin.js'; 56 import '../utils/render-status.js'; 57 import '../utils/unresolved.js'; 58@@ -42,11 +41,10 @@ export const LegacyElementMixin = dedupingMixin((base) => { 59 * @constructor 60 * @implements {Polymer_ElementMixin} 61 * @implements {Polymer_GestureEventListeners} 62- * @implements {Polymer_DirMixin} 63 * @extends {HTMLElement} 64 * @private 65 */ 66- const legacyElementBase = DirMixin(GestureEventListeners(ElementMixin(base))); 67+ const legacyElementBase = GestureEventListeners(ElementMixin(base)); 68 69 /** 70 * Map of simple names to touch action names 71--- a/components-chromium/polymer/lib/mixins/template-stamp.js 72+++ b/components-chromium/polymer/lib/mixins/template-stamp.js 73@@ -204,9 +204,7 @@ export const TemplateStamp = dedupingMixin( 74 if (!template._templateInfo) { 75 let templateInfo = template._templateInfo = {}; 76 templateInfo.nodeInfoList = []; 77- templateInfo.stripWhiteSpace = 78- (outerTemplateInfo && outerTemplateInfo.stripWhiteSpace) || 79- template.hasAttribute('strip-whitespace'); 80+ templateInfo.stripWhiteSpace = true; 81 this._parseTemplateContent(template, templateInfo, {parent: null}); 82 } 83 return template._templateInfo; 84diff --git a/components-chromium/iron-list/iron-list.js b/components-chromium/iron-list/iron-list.js 85index 43c59653a39b..26652936735c 100644 86--- a/components-chromium/iron-list/iron-list.js 87+++ b/components-chromium/iron-list/iron-list.js 88@@ -376,7 +376,15 @@ 89 * there's some offset between the scrolling element and the list. For 90 * example: a header is placed above the list. 91 */ 92- scrollOffset: {type: Number, value: 0} 93+ scrollOffset: {type: Number, value: 0}, 94+ 95+ /** 96+ * If set to true, focus on an element will be preserved after rerender. 97+ */ 98+ preserveFocus: { 99+ type: Boolean, 100+ value: false 101+ } 102 }, 103 104 observers: [ 105@@ -1067,10 +1075,52 @@ 106 }, 107 108 /** 109+ * Finds and returns the focused element (both within self and children's 110+ * Shadow DOM). 111+ * @return {?HTMLElement} 112+ */ 113+ _getFocusedElement: function() { 114+ function doSearch(node, query) { 115+ let result = null; 116+ let type = node.nodeType; 117+ if (type == Node.ELEMENT_NODE || type == Node.DOCUMENT_FRAGMENT_NODE) 118+ result = node.querySelector(query); 119+ if (result) 120+ return result; 121+ 122+ let child = node.firstChild; 123+ while (child !== null && result === null) { 124+ result = doSearch(child, query); 125+ child = child.nextSibling; 126+ } 127+ if (result) 128+ return result; 129+ 130+ const shadowRoot = node.shadowRoot; 131+ return shadowRoot ? doSearch(shadowRoot, query) : null; 132+ } 133+ 134+ // Find out if any of the items are focused first, and only search 135+ // recursively in the item that contains focus, to avoid a slow 136+ // search of the entire list. 137+ const focusWithin = doSearch(this, ':focus-within'); 138+ return focusWithin ? doSearch(focusWithin, ':focus') : null; 139+ }, 140+ 141+ /** 142 * Called when the items have changed. That is, reassignments 143 * to `items`, splices or updates to a single item. 144 */ 145 _itemsChanged: function(change) { 146+ var rendering = /^items(\.splices){0,1}$/.test(change.path); 147+ var lastFocusedIndex, focusedElement; 148+ if (rendering && this.preserveFocus) { 149+ lastFocusedIndex = this._focusedVirtualIndex; 150+ focusedElement = this._getFocusedElement(); 151+ } 152+ 153+ var preservingFocus = rendering && this.preserveFocus && focusedElement; 154+ 155 if (change.path === 'items') { 156 this._virtualStart = 0; 157 this._physicalTop = 0; 158@@ -1082,7 +1132,7 @@ 159 this._physicalItems = this._physicalItems || []; 160 this._physicalSizes = this._physicalSizes || []; 161 this._physicalStart = 0; 162- if (this._scrollTop > this._scrollOffset) { 163+ if (this._scrollTop > this._scrollOffset && !preservingFocus) { 164 this._resetScrollPosition(0); 165 } 166 this._removeFocusedItem(); 167@@ -1114,6 +1164,17 @@ 168 } else if (change.path !== 'items.length') { 169 this._forwardItemPath(change.path, change.value); 170 } 171+ 172+ // If the list was in focus when updated, preserve the focus on item. 173+ if (preservingFocus) { 174+ flush(); 175+ focusedElement.blur(); // paper- elements breaks when focused twice. 176+ this._focusPhysicalItem( 177+ Math.min(this.items.length - 1, lastFocusedIndex)); 178+ if (!this._isIndexVisible(this._focusedVirtualIndex)) { 179+ this.scrollToIndex(this._focusedVirtualIndex); 180+ } 181+ } 182 }, 183 184 _forwardItemPath: function(path, value) { 185diff --git a/components-chromium/iron-overlay-behavior/iron-overlay-manager.js b/components-chromium/iron-overlay-behavior/iron-overlay-manager.js 186index 99768f419688..7dd55b8077b7 100644 187--- a/components-chromium/iron-overlay-behavior/iron-overlay-manager.js 188+++ b/components-chromium/iron-overlay-behavior/iron-overlay-manager.js 189@@ -13,7 +13,7 @@ import './iron-overlay-backdrop.js'; 190 191 import {IronA11yKeysBehavior} from '../iron-a11y-keys-behavior/iron-a11y-keys-behavior.js'; 192 import {dom} from '../polymer/lib/legacy/polymer.dom.js'; 193-import * as gestures from '../polymer/lib/utils/gestures.js'; 194+import {gestures} from '../polymer/lib/utils/gestures.js'; 195 196 /** 197 * @struct 198diff --git a/components-chromium/paper-tooltip/paper-tooltip.js b/components-chromium/paper-tooltip/paper-tooltip.js 199index 853eee199025..303d1bbdfc78 100644 200--- a/components-chromium/paper-tooltip/paper-tooltip.js 201+++ b/components-chromium/paper-tooltip/paper-tooltip.js 202@@ -311,12 +311,16 @@ Polymer({ 203 204 /** 205 * Returns the target element that this tooltip is anchored to. It is 206- * either the element given by the `for` attribute, or the immediate parent 207- * of the tooltip. 208+ * either the element given by the `for` attribute, the element manually 209+ * specified through the `target` attribute, or the immediate parent of 210+ * the tooltip. 211 * 212 * @type {Node} 213 */ 214 get target() { 215+ if (this._manualTarget) 216+ return this._manualTarget; 217+ 218 var parentNode = dom(this).parentNode; 219 // If the parentNode is a document fragment, then we need to use the host. 220 var ownerRoot = dom(this).getOwnerRoot(); 221@@ -331,6 +335,15 @@ Polymer({ 222 return target; 223 }, 224 225+ /** 226+ * Sets the target element that this tooltip will be anchored to. 227+ * @param {Node} target 228+ */ 229+ set target(target) { 230+ this._manualTarget = target; 231+ this._findTarget(); 232+ }, 233+ 234 /** 235 * @return {void} 236 */ 237diff --git a/components-chromium/paper-styles/color.js b/components-chromium/paper-styles/color.js 238index 6af2fa359336..c56a6737e1d8 100644 239--- a/components-chromium/paper-styles/color.js 240+++ b/components-chromium/paper-styles/color.js 241@@ -81,81 +81,6 @@ const template = html` 242 --paper-red-a400: #ff1744; 243 --paper-red-a700: #d50000; 244 245- --paper-pink-50: #fce4ec; 246- --paper-pink-100: #f8bbd0; 247- --paper-pink-200: #f48fb1; 248- --paper-pink-300: #f06292; 249- --paper-pink-400: #ec407a; 250- --paper-pink-500: #e91e63; 251- --paper-pink-600: #d81b60; 252- --paper-pink-700: #c2185b; 253- --paper-pink-800: #ad1457; 254- --paper-pink-900: #880e4f; 255- --paper-pink-a100: #ff80ab; 256- --paper-pink-a200: #ff4081; 257- --paper-pink-a400: #f50057; 258- --paper-pink-a700: #c51162; 259- 260- --paper-purple-50: #f3e5f5; 261- --paper-purple-100: #e1bee7; 262- --paper-purple-200: #ce93d8; 263- --paper-purple-300: #ba68c8; 264- --paper-purple-400: #ab47bc; 265- --paper-purple-500: #9c27b0; 266- --paper-purple-600: #8e24aa; 267- --paper-purple-700: #7b1fa2; 268- --paper-purple-800: #6a1b9a; 269- --paper-purple-900: #4a148c; 270- --paper-purple-a100: #ea80fc; 271- --paper-purple-a200: #e040fb; 272- --paper-purple-a400: #d500f9; 273- --paper-purple-a700: #aa00ff; 274- 275- --paper-deep-purple-50: #ede7f6; 276- --paper-deep-purple-100: #d1c4e9; 277- --paper-deep-purple-200: #b39ddb; 278- --paper-deep-purple-300: #9575cd; 279- --paper-deep-purple-400: #7e57c2; 280- --paper-deep-purple-500: #673ab7; 281- --paper-deep-purple-600: #5e35b1; 282- --paper-deep-purple-700: #512da8; 283- --paper-deep-purple-800: #4527a0; 284- --paper-deep-purple-900: #311b92; 285- --paper-deep-purple-a100: #b388ff; 286- --paper-deep-purple-a200: #7c4dff; 287- --paper-deep-purple-a400: #651fff; 288- --paper-deep-purple-a700: #6200ea; 289- 290- --paper-indigo-50: #e8eaf6; 291- --paper-indigo-100: #c5cae9; 292- --paper-indigo-200: #9fa8da; 293- --paper-indigo-300: #7986cb; 294- --paper-indigo-400: #5c6bc0; 295- --paper-indigo-500: #3f51b5; 296- --paper-indigo-600: #3949ab; 297- --paper-indigo-700: #303f9f; 298- --paper-indigo-800: #283593; 299- --paper-indigo-900: #1a237e; 300- --paper-indigo-a100: #8c9eff; 301- --paper-indigo-a200: #536dfe; 302- --paper-indigo-a400: #3d5afe; 303- --paper-indigo-a700: #304ffe; 304- 305- --paper-blue-50: #e3f2fd; 306- --paper-blue-100: #bbdefb; 307- --paper-blue-200: #90caf9; 308- --paper-blue-300: #64b5f6; 309- --paper-blue-400: #42a5f5; 310- --paper-blue-500: #2196f3; 311- --paper-blue-600: #1e88e5; 312- --paper-blue-700: #1976d2; 313- --paper-blue-800: #1565c0; 314- --paper-blue-900: #0d47a1; 315- --paper-blue-a100: #82b1ff; 316- --paper-blue-a200: #448aff; 317- --paper-blue-a400: #2979ff; 318- --paper-blue-a700: #2962ff; 319- 320 --paper-light-blue-50: #e1f5fe; 321 --paper-light-blue-100: #b3e5fc; 322 --paper-light-blue-200: #81d4fa; 323@@ -171,81 +96,6 @@ const template = html` 324 --paper-light-blue-a400: #00b0ff; 325 --paper-light-blue-a700: #0091ea; 326 327- --paper-cyan-50: #e0f7fa; 328- --paper-cyan-100: #b2ebf2; 329- --paper-cyan-200: #80deea; 330- --paper-cyan-300: #4dd0e1; 331- --paper-cyan-400: #26c6da; 332- --paper-cyan-500: #00bcd4; 333- --paper-cyan-600: #00acc1; 334- --paper-cyan-700: #0097a7; 335- --paper-cyan-800: #00838f; 336- --paper-cyan-900: #006064; 337- --paper-cyan-a100: #84ffff; 338- --paper-cyan-a200: #18ffff; 339- --paper-cyan-a400: #00e5ff; 340- --paper-cyan-a700: #00b8d4; 341- 342- --paper-teal-50: #e0f2f1; 343- --paper-teal-100: #b2dfdb; 344- --paper-teal-200: #80cbc4; 345- --paper-teal-300: #4db6ac; 346- --paper-teal-400: #26a69a; 347- --paper-teal-500: #009688; 348- --paper-teal-600: #00897b; 349- --paper-teal-700: #00796b; 350- --paper-teal-800: #00695c; 351- --paper-teal-900: #004d40; 352- --paper-teal-a100: #a7ffeb; 353- --paper-teal-a200: #64ffda; 354- --paper-teal-a400: #1de9b6; 355- --paper-teal-a700: #00bfa5; 356- 357- --paper-green-50: #e8f5e9; 358- --paper-green-100: #c8e6c9; 359- --paper-green-200: #a5d6a7; 360- --paper-green-300: #81c784; 361- --paper-green-400: #66bb6a; 362- --paper-green-500: #4caf50; 363- --paper-green-600: #43a047; 364- --paper-green-700: #388e3c; 365- --paper-green-800: #2e7d32; 366- --paper-green-900: #1b5e20; 367- --paper-green-a100: #b9f6ca; 368- --paper-green-a200: #69f0ae; 369- --paper-green-a400: #00e676; 370- --paper-green-a700: #00c853; 371- 372- --paper-light-green-50: #f1f8e9; 373- --paper-light-green-100: #dcedc8; 374- --paper-light-green-200: #c5e1a5; 375- --paper-light-green-300: #aed581; 376- --paper-light-green-400: #9ccc65; 377- --paper-light-green-500: #8bc34a; 378- --paper-light-green-600: #7cb342; 379- --paper-light-green-700: #689f38; 380- --paper-light-green-800: #558b2f; 381- --paper-light-green-900: #33691e; 382- --paper-light-green-a100: #ccff90; 383- --paper-light-green-a200: #b2ff59; 384- --paper-light-green-a400: #76ff03; 385- --paper-light-green-a700: #64dd17; 386- 387- --paper-lime-50: #f9fbe7; 388- --paper-lime-100: #f0f4c3; 389- --paper-lime-200: #e6ee9c; 390- --paper-lime-300: #dce775; 391- --paper-lime-400: #d4e157; 392- --paper-lime-500: #cddc39; 393- --paper-lime-600: #c0ca33; 394- --paper-lime-700: #afb42b; 395- --paper-lime-800: #9e9d24; 396- --paper-lime-900: #827717; 397- --paper-lime-a100: #f4ff81; 398- --paper-lime-a200: #eeff41; 399- --paper-lime-a400: #c6ff00; 400- --paper-lime-a700: #aeea00; 401- 402 --paper-yellow-50: #fffde7; 403 --paper-yellow-100: #fff9c4; 404 --paper-yellow-200: #fff59d; 405@@ -261,21 +111,6 @@ const template = html` 406 --paper-yellow-a400: #ffea00; 407 --paper-yellow-a700: #ffd600; 408 409- --paper-amber-50: #fff8e1; 410- --paper-amber-100: #ffecb3; 411- --paper-amber-200: #ffe082; 412- --paper-amber-300: #ffd54f; 413- --paper-amber-400: #ffca28; 414- --paper-amber-500: #ffc107; 415- --paper-amber-600: #ffb300; 416- --paper-amber-700: #ffa000; 417- --paper-amber-800: #ff8f00; 418- --paper-amber-900: #ff6f00; 419- --paper-amber-a100: #ffe57f; 420- --paper-amber-a200: #ffd740; 421- --paper-amber-a400: #ffc400; 422- --paper-amber-a700: #ffab00; 423- 424 --paper-orange-50: #fff3e0; 425 --paper-orange-100: #ffe0b2; 426 --paper-orange-200: #ffcc80; 427@@ -291,32 +126,6 @@ const template = html` 428 --paper-orange-a400: #ff9100; 429 --paper-orange-a700: #ff6500; 430 431- --paper-deep-orange-50: #fbe9e7; 432- --paper-deep-orange-100: #ffccbc; 433- --paper-deep-orange-200: #ffab91; 434- --paper-deep-orange-300: #ff8a65; 435- --paper-deep-orange-400: #ff7043; 436- --paper-deep-orange-500: #ff5722; 437- --paper-deep-orange-600: #f4511e; 438- --paper-deep-orange-700: #e64a19; 439- --paper-deep-orange-800: #d84315; 440- --paper-deep-orange-900: #bf360c; 441- --paper-deep-orange-a100: #ff9e80; 442- --paper-deep-orange-a200: #ff6e40; 443- --paper-deep-orange-a400: #ff3d00; 444- --paper-deep-orange-a700: #dd2c00; 445- 446- --paper-brown-50: #efebe9; 447- --paper-brown-100: #d7ccc8; 448- --paper-brown-200: #bcaaa4; 449- --paper-brown-300: #a1887f; 450- --paper-brown-400: #8d6e63; 451- --paper-brown-500: #795548; 452- --paper-brown-600: #6d4c41; 453- --paper-brown-700: #5d4037; 454- --paper-brown-800: #4e342e; 455- --paper-brown-900: #3e2723; 456- 457 --paper-grey-50: #fafafa; 458 --paper-grey-100: #f5f5f5; 459 --paper-grey-200: #eeeeee; 460