\n this.$.content.parentNode.replaceChild(this._originalContentPart, this.$.content);\n this.$.content = this._originalContentPart;\n this._originalContentPart = undefined;\n }\n\n this._observer.connect();\n\n this._contentNodes = undefined;\n this.content = undefined;\n }\n\n /**\n * @param {!HTMLTemplateElement} template\n * @param {object} instanceProps\n * @protected\n */\n _stampOverlayTemplate(template, instanceProps) {\n this._removeOldContent();\n\n if (!template._Templatizer) {\n template._Templatizer = templatize(template, this, {\n instanceProps: instanceProps,\n forwardHostProp: function(prop, value) {\n if (this._instance) {\n this._instance.forwardHostProp(prop, value);\n }\n }\n });\n }\n\n this._instance = new template._Templatizer({});\n this._contentNodes = Array.from(this._instance.root.childNodes);\n\n const templateRoot = template._templateRoot || (template._templateRoot = template.getRootNode());\n const _isScoped = templateRoot !== document;\n\n if (_isScoped) {\n const isShady = window.ShadyCSS && !window.ShadyCSS.nativeShadow;\n\n if (!this.$.content.shadowRoot) {\n this.$.content.attachShadow({mode: 'open'});\n }\n\n let scopeCssText = Array.from(templateRoot.querySelectorAll('style'))\n .reduce((result, style) => result + style.textContent, '');\n\n if (isShady) {\n // NOTE(platosha): ShadyCSS removes \n\n
[[_getTitle(month, i18n.monthNames)]]
\n
\n
\n
\n
\n
\n [[item.weekDayShort]]
\n \n
\n
\n
\n
\n
\n
\n [[_getDate(item)]]
\n \n
\n
\n
\n`;\n }\n\n static get is() {\n return 'vaadin-month-calendar';\n }\n\n static get properties() {\n return {\n /**\n * A `Date` object defining the month to be displayed. Only year and\n * month properties are actually used.\n */\n month: {\n type: Date,\n value: new Date()\n },\n\n /**\n * A `Date` object for the currently selected date.\n */\n selectedDate: {\n type: Date,\n notify: true\n },\n\n /**\n * A `Date` object for the currently focused date.\n */\n focusedDate: Date,\n\n showWeekNumbers: {\n type: Boolean,\n value: false\n },\n\n i18n: {\n type: Object\n },\n\n /**\n * Flag stating whether taps on the component should be ignored.\n */\n ignoreTaps: Boolean,\n\n _notTapping: Boolean,\n\n /**\n * The earliest date that can be selected. All earlier dates will be disabled.\n */\n minDate: {\n type: Date,\n value: null\n },\n\n /**\n * The latest date that can be selected. All later dates will be disabled.\n */\n maxDate: {\n type: Date,\n value: null\n },\n\n _days: {\n type: Array,\n computed: '_getDays(month, i18n.firstDayOfWeek, minDate, maxDate)'\n },\n\n disabled: {\n type: Boolean,\n reflectToAttribute: true,\n computed: '_isDisabled(month, minDate, maxDate)'\n }\n };\n }\n\n static get observers() {\n return [\n '_showWeekNumbersChanged(showWeekNumbers, i18n.firstDayOfWeek)'\n ];\n }\n\n _dateEquals(date1, date2) {\n return DatePickerHelper._dateEquals(date1, date2);\n }\n\n _dateAllowed(date, min, max) {\n return DatePickerHelper._dateAllowed(date, min, max);\n }\n\n /* Returns true if all the dates in the month are out of the allowed range */\n _isDisabled(month, minDate, maxDate) {\n // First day of the month\n var firstDate = new Date(0, 0);\n firstDate.setFullYear(month.getFullYear());\n firstDate.setMonth(month.getMonth());\n firstDate.setDate(1);\n\n // Last day of the month\n var lastDate = new Date(0, 0);\n lastDate.setFullYear(month.getFullYear());\n lastDate.setMonth(month.getMonth() + 1);\n lastDate.setDate(0);\n\n if ((minDate && maxDate)\n && minDate.getMonth() === maxDate.getMonth()\n && minDate.getMonth() === month.getMonth()\n && maxDate.getDate() - minDate.getDate() >= 0) {\n return false;\n }\n\n return !this._dateAllowed(firstDate, minDate, maxDate)\n && !this._dateAllowed(lastDate, minDate, maxDate);\n }\n\n _getTitle(month, monthNames) {\n if (month === undefined || monthNames === undefined) {\n return;\n }\n return this.i18n.formatTitle(monthNames[month.getMonth()], month.getFullYear());\n }\n\n _onMonthGridTouchStart() {\n this._notTapping = false;\n setTimeout(() => this._notTapping = true, 300);\n }\n\n _dateAdd(date, delta) {\n date.setDate(date.getDate() + delta);\n }\n\n _applyFirstDayOfWeek(weekDayNames, firstDayOfWeek) {\n if (weekDayNames === undefined || firstDayOfWeek === undefined) {\n return;\n }\n\n return weekDayNames.slice(firstDayOfWeek).concat(weekDayNames.slice(0, firstDayOfWeek));\n }\n\n _getWeekDayNames(weekDayNames, weekDayNamesShort, showWeekNumbers, firstDayOfWeek) {\n if (weekDayNames === undefined || weekDayNamesShort === undefined ||\n showWeekNumbers === undefined || firstDayOfWeek === undefined) {\n return;\n }\n weekDayNames = this._applyFirstDayOfWeek(weekDayNames, firstDayOfWeek);\n weekDayNamesShort = this._applyFirstDayOfWeek(weekDayNamesShort, firstDayOfWeek);\n weekDayNames = weekDayNames.map((day, index) => {\n return {\n weekDay: day,\n weekDayShort: weekDayNamesShort[index]\n };\n });\n\n return weekDayNames;\n }\n\n _getDate(date) {\n return date ? date.getDate() : '';\n }\n\n _showWeekNumbersChanged(showWeekNumbers, firstDayOfWeek) {\n if (showWeekNumbers && firstDayOfWeek === 1) {\n this.setAttribute('week-numbers', '');\n } else {\n this.removeAttribute('week-numbers');\n }\n }\n\n _showWeekSeparator(showWeekNumbers, firstDayOfWeek) {\n // Currently only supported for locales that start the week on Monday.\n return showWeekNumbers && firstDayOfWeek === 1;\n }\n\n _isToday(date) {\n return this._dateEquals(new Date(), date);\n }\n\n _getDays(month, firstDayOfWeek) {\n if (month === undefined || firstDayOfWeek === undefined) {\n return;\n }\n // First day of the month (at midnight).\n var date = new Date(0, 0);\n date.setFullYear(month.getFullYear());\n date.setMonth(month.getMonth());\n date.setDate(1);\n\n // Rewind to first day of the week.\n while (date.getDay() !== firstDayOfWeek) {\n this._dateAdd(date, -1);\n }\n\n var days = [];\n var startMonth = date.getMonth();\n var targetMonth = month.getMonth();\n while (date.getMonth() === targetMonth || date.getMonth() === startMonth) {\n days.push(date.getMonth() === targetMonth ? new Date(date.getTime()) : null);\n\n // Advance to next day.\n this._dateAdd(date, 1);\n }\n return days;\n }\n\n _getWeekNumber(date, days) {\n if (date === undefined || days === undefined) {\n return;\n }\n\n if (!date) {\n // Get the first non-null date from the days array.\n date = days.reduce((acc, d) => {\n return !acc && d ? d : acc;\n });\n }\n\n return DatePickerHelper._getISOWeekNumber(date);\n }\n\n _getWeekNumbers(dates) {\n return dates\n .map(date => this._getWeekNumber(date, dates))\n .filter((week, index, arr) => arr.indexOf(week) === index);\n }\n\n _handleTap(e) {\n if (!this.ignoreTaps && !this._notTapping && e.target.date && !e.target.hasAttribute('disabled')) {\n this.selectedDate = e.target.date;\n this.dispatchEvent(new CustomEvent('date-tap', {bubbles: true, composed: true}));\n }\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n _getRole(date) {\n return date ? 'button' : 'presentation';\n }\n\n _getAriaLabel(date) {\n if (!date) {\n return '';\n }\n\n var ariaLabel = this._getDate(date) + ' ' +\n this.i18n.monthNames[date.getMonth()] + ' ' +\n date.getFullYear() + ', ' +\n this.i18n.weekdays[date.getDay()];\n\n if (this._isToday(date)) {\n ariaLabel += ', ' + this.i18n.today;\n }\n\n return ariaLabel;\n }\n\n _getAriaDisabled(date, min, max) {\n if (date === undefined || min === undefined || max === undefined) {\n return;\n }\n return this._dateAllowed(date, min, max) ? 'false' : 'true';\n }\n}\n\ncustomElements.define(MonthCalendarElement.is, MonthCalendarElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { timeOut } from '@polymer/polymer/lib/utils/async.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nimport { flush } from '@polymer/polymer/lib/utils/flush.js';\nimport { templatize } from '@polymer/polymer/lib/utils/templatize.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { afterNextRender } from '@polymer/polymer/lib/utils/render-status.js';\n/**\n * @memberof Vaadin\n * @private\n */\nclass InfiniteScrollerElement extends PolymerElement {\n static get template() {\n return html`\n \n\n
\n`;\n }\n\n static get is() {\n return 'vaadin-infinite-scroller';\n }\n\n static get properties() {\n return {\n\n /**\n * Count of individual items in each buffer.\n * The scroller has 2 buffers altogether so bufferSize of 20\n * will result in 40 buffered DOM items in total.\n * Changing after initialization not supported.\n */\n bufferSize: {\n type: Number,\n value: 20\n },\n\n /**\n * The amount of initial scroll top. Needed in order for the\n * user to be able to scroll backwards.\n */\n _initialScroll: {\n value: 500000\n },\n\n /**\n * The index/position mapped at _initialScroll point.\n */\n _initialIndex: {\n value: 0\n },\n\n _buffers: Array,\n\n _preventScrollEvent: Boolean,\n\n _mayHaveMomentum: Boolean,\n\n _initialized: Boolean,\n\n active: {\n type: Boolean,\n observer: '_activated'\n }\n };\n }\n\n ready() {\n super.ready();\n\n this._buffers = Array.prototype.slice.call(this.root.querySelectorAll('.buffer'));\n\n this.$.fullHeight.style.height = this._initialScroll * 2 + 'px';\n\n var tpl = this.querySelector('template');\n this._TemplateClass = templatize(tpl, this, {\n forwardHostProp: function(prop, value) {\n if (prop !== 'index') {\n this._buffers.forEach(buffer => {\n [].forEach.call(buffer.children, insertionPoint => {\n insertionPoint._itemWrapper.instance[prop] = value;\n });\n });\n }\n }\n });\n\n // Firefox interprets elements with overflow:auto as focusable\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1069739\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if (isFirefox) {\n this.$.scroller.tabIndex = -1;\n }\n }\n\n _activated(active) {\n if (active && !this._initialized) {\n this._createPool();\n this._initialized = true;\n }\n }\n\n _finishInit() {\n if (!this._initDone) {\n // Once the first set of items start fading in, stamp the rest\n this._buffers.forEach(buffer => {\n [].forEach.call(buffer.children,\n insertionPoint => this._ensureStampedInstance(insertionPoint._itemWrapper));\n }, this);\n\n if (!this._buffers[0].translateY) {\n this._reset();\n }\n\n this._initDone = true;\n }\n }\n\n _translateBuffer(up) {\n var index = up ? 1 : 0;\n this._buffers[index].translateY = this._buffers[(index ? 0 : 1)].translateY + this._bufferHeight * (index ? -1 : 1);\n this._buffers[index].style.transform = 'translate3d(0, ' + this._buffers[index].translateY + 'px, 0)';\n this._buffers[index].updated = false;\n this._buffers.reverse();\n }\n\n _scroll() {\n if (this._scrollDisabled) {\n return;\n }\n\n var scrollTop = this.$.scroller.scrollTop;\n if (scrollTop < this._bufferHeight || scrollTop > this._initialScroll * 2 - this._bufferHeight) {\n // Scrolled near the end/beginning of the scrollable area -> reset.\n this._initialIndex = ~~this.position;\n this._reset();\n }\n\n // Check if we scrolled enough to translate the buffer positions.\n var bufferOffset = this.root.querySelector('.buffer').offsetTop;\n var upperThresholdReached = scrollTop > this._buffers[1].translateY + this.itemHeight + bufferOffset;\n var lowerThresholdReached = scrollTop < this._buffers[0].translateY + this.itemHeight + bufferOffset;\n\n if (upperThresholdReached || lowerThresholdReached) {\n this._translateBuffer(lowerThresholdReached);\n this._updateClones();\n }\n\n if (!this._preventScrollEvent) {\n this.dispatchEvent(new CustomEvent('custom-scroll', {bubbles: false, composed: true}));\n this._mayHaveMomentum = true;\n }\n this._preventScrollEvent = false;\n\n this._debouncerScrollFinish = Debouncer.debounce(this._debouncerScrollFinish,\n timeOut.after(200), () => {\n var scrollerRect = this.$.scroller.getBoundingClientRect();\n if (!this._isVisible(this._buffers[0], scrollerRect) && !this._isVisible(this._buffers[1], scrollerRect)) {\n this.position = this.position;\n }\n });\n }\n\n /**\n * Current scroller position as index. Can be a fractional number.\n *\n * @type {Number}\n */\n set position(index) {\n this._preventScrollEvent = true;\n if (index > this._firstIndex && index < this._firstIndex + this.bufferSize * 2) {\n this.$.scroller.scrollTop = this.itemHeight * (index - this._firstIndex) + this._buffers[0].translateY;\n } else {\n this._initialIndex = ~~index;\n this._reset();\n this._scrollDisabled = true;\n this.$.scroller.scrollTop += index % 1 * this.itemHeight;\n this._scrollDisabled = false;\n }\n\n if (this._mayHaveMomentum) {\n // Stop the possible iOS Safari momentum with -webkit-overflow-scrolling: auto;\n this.$.scroller.classList.add('notouchscroll');\n this._mayHaveMomentum = false;\n\n setTimeout(() => {\n // Restore -webkit-overflow-scrolling: touch; after a small delay.\n this.$.scroller.classList.remove('notouchscroll');\n }, 10);\n }\n\n }\n\n /**\n * @private\n */\n get position() {\n return (this.$.scroller.scrollTop - this._buffers[0].translateY) / this.itemHeight + this._firstIndex;\n }\n\n get itemHeight() {\n if (!this._itemHeightVal) {\n if (!(window.ShadyCSS && window.ShadyCSS.nativeCss)) {\n this.updateStyles();\n }\n\n const itemHeight = window.ShadyCSS\n ? window.ShadyCSS.getComputedStyleValue(this, '--vaadin-infinite-scroller-item-height')\n : getComputedStyle(this).getPropertyValue('--vaadin-infinite-scroller-item-height');\n // Use background-position temp inline style for unit conversion\n const tmpStyleProp = 'background-position';\n this.$.fullHeight.style.setProperty(tmpStyleProp, itemHeight);\n const itemHeightPx = getComputedStyle(this.$.fullHeight).getPropertyValue(tmpStyleProp);\n this.$.fullHeight.style.removeProperty(tmpStyleProp);\n this._itemHeightVal = parseFloat(itemHeightPx);\n }\n\n return this._itemHeightVal;\n }\n\n get _bufferHeight() {\n return this.itemHeight * this.bufferSize;\n }\n\n _reset() {\n this._scrollDisabled = true;\n this.$.scroller.scrollTop = this._initialScroll;\n this._buffers[0].translateY = this._initialScroll - this._bufferHeight;\n this._buffers[1].translateY = this._initialScroll;\n this._buffers.forEach(buffer => {\n buffer.style.transform = 'translate3d(0, ' + buffer.translateY + 'px, 0)';\n });\n this._buffers[0].updated = this._buffers[1].updated = false;\n this._updateClones(true);\n\n this._debouncerUpdateClones = Debouncer.debounce(\n this._debouncerUpdateClones,\n timeOut.after(200), () => {\n this._buffers[0].updated = this._buffers[1].updated = false;\n this._updateClones();\n });\n\n this._scrollDisabled = false;\n }\n\n _createPool() {\n var container = this.getBoundingClientRect();\n this._buffers.forEach(buffer => {\n for (var i = 0; i < this.bufferSize; i++) {\n const itemWrapper = document.createElement('div');\n itemWrapper.style.height = this.itemHeight + 'px';\n itemWrapper.instance = {};\n\n const contentId = InfiniteScrollerElement._contentIndex = InfiniteScrollerElement._contentIndex + 1 || 0;\n const slotName = 'vaadin-infinite-scroller-item-content-' + contentId;\n\n const insertionPoint = document.createElement('slot');\n insertionPoint.setAttribute('name', slotName);\n insertionPoint._itemWrapper = itemWrapper;\n buffer.appendChild(insertionPoint);\n\n itemWrapper.setAttribute('slot', slotName);\n this.appendChild(itemWrapper);\n\n // This is needed by IE\n flush();\n\n setTimeout(() => {\n // Only stamp the visible instances first\n if (this._isVisible(itemWrapper, container)) {\n this._ensureStampedInstance(itemWrapper);\n }\n }, 1); // Wait for first reset\n }\n }, this);\n\n setTimeout(() => {\n afterNextRender(this, this._finishInit.bind(this));\n }, 1);\n }\n\n _ensureStampedInstance(itemWrapper) {\n if (itemWrapper.firstElementChild) {\n return;\n }\n\n var tmpInstance = itemWrapper.instance;\n\n itemWrapper.instance = new this._TemplateClass({});\n itemWrapper.appendChild(itemWrapper.instance.root);\n\n Object.keys(tmpInstance).forEach(prop => {\n itemWrapper.instance.set(prop, tmpInstance[prop]);\n });\n }\n\n _updateClones(viewPortOnly) {\n this._firstIndex = ~~((this._buffers[0].translateY - this._initialScroll) / this.itemHeight) + this._initialIndex;\n\n var scrollerRect = viewPortOnly ? this.$.scroller.getBoundingClientRect() : undefined;\n this._buffers.forEach((buffer, bufferIndex) => {\n if (!buffer.updated) {\n var firstIndex = this._firstIndex + this.bufferSize * bufferIndex;\n\n [].forEach.call(buffer.children, (insertionPoint, index) => {\n const itemWrapper = insertionPoint._itemWrapper;\n if (!viewPortOnly || this._isVisible(itemWrapper, scrollerRect)) {\n itemWrapper.instance.index = firstIndex + index;\n }\n });\n buffer.updated = true;\n }\n }, this);\n }\n\n _isVisible(element, container) {\n var rect = element.getBoundingClientRect();\n return rect.bottom > container.top && rect.top < container.bottom;\n }\n}\n\ncustomElements.define(InfiniteScrollerElement.is, InfiniteScrollerElement);\n","import '@polymer/polymer/lib/elements/custom-style.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `
\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\nimport '@polymer/iron-media-query/iron-media-query.js';\nimport { IronA11yKeysBehavior } from '@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';\nimport { IronA11yAnnouncer } from '@polymer/iron-a11y-announcer/iron-a11y-announcer.js';\nimport '@vaadin/vaadin-button/src/vaadin-button.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport './vaadin-month-calendar.js';\nimport './vaadin-infinite-scroller.js';\nimport { DatePickerHelper } from './vaadin-date-picker-helper.js';\nimport './vaadin-date-picker-styles.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { addListener, setTouchAction } from '@polymer/polymer/lib/utils/gestures.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nimport { timeOut } from '@polymer/polymer/lib/utils/async.js';\n/**\n * @memberof Vaadin\n * @private\n */\nclass DatePickerOverlayContentElement extends\n ThemableMixin(\n ThemePropertyMixin(\n GestureEventListeners(PolymerElement))) {\n static get template() {\n return html`\n \n\n
\n [[i18n.calendar]]\n
\n\n
\n
[[_formatDisplayed(selectedDate, i18n.formatDate, label)]]
\n
\n
\n\n
\n [[_yearAfterXMonths(_visibleMonthIndex)]]\n
\n
\n\n
\n\n
\n \n [[i18n.today]]\n \n \n [[i18n.cancel]]\n \n
\n\n
\n`;\n }\n\n static get is() {\n return 'vaadin-date-picker-overlay-content';\n }\n\n static get properties() {\n return {\n /**\n * The value for this element.\n */\n selectedDate: {\n type: Date,\n notify: true\n },\n\n /**\n * Date value which is focused using keyboard.\n */\n focusedDate: {\n type: Date,\n notify: true,\n observer: '_focusedDateChanged'\n },\n\n _focusedMonthDate: Number,\n\n /**\n * Date which should be visible when there is no value selected.\n */\n initialPosition: {\n type: Date,\n observer: '_initialPositionChanged'\n },\n\n _originDate: {\n value: new Date()\n },\n\n _visibleMonthIndex: Number,\n\n _desktopMode: Boolean,\n\n _translateX: {\n observer: '_translateXChanged'\n },\n\n _yearScrollerWidth: {\n value: 50\n },\n\n i18n: {\n type: Object\n },\n\n showWeekNumbers: {\n type: Boolean\n },\n\n _ignoreTaps: Boolean,\n\n _notTapping: Boolean,\n\n /**\n * The earliest date that can be selected. All earlier dates will be disabled.\n */\n minDate: Date,\n\n /**\n * The latest date that can be selected. All later dates will be disabled.\n */\n maxDate: Date,\n\n _focused: Boolean,\n\n /**\n * Input label\n */\n label: String\n };\n }\n\n ready() {\n super.ready();\n this.setAttribute('tabindex', 0);\n this.addEventListener('keydown', this._onKeydown.bind(this));\n addListener(this, 'tap', this._stopPropagation);\n this.addEventListener('focus', this._onOverlayFocus.bind(this));\n this.addEventListener('blur', this._onOverlayBlur.bind(this));\n }\n\n /**\n * Fired when the scroller reaches the target scrolling position.\n * @event scroll-animation-finished\n * @param {Number} detail.position new position\n * @param {Number} detail.oldPosition old position\n */\n\n connectedCallback() {\n super.connectedCallback();\n this._closeYearScroller();\n this._toggleAnimateClass(true);\n setTouchAction(this.$.scrollers, 'pan-y');\n IronA11yAnnouncer.requestAvailability();\n }\n\n announceFocusedDate() {\n var focusedDate = this._currentlyFocusedDate();\n var announce = [];\n if (DatePickerHelper._dateEquals(focusedDate, new Date())) {\n announce.push(this.i18n.today);\n }\n announce = announce.concat([\n this.i18n.weekdays[focusedDate.getDay()],\n focusedDate.getDate(),\n this.i18n.monthNames[focusedDate.getMonth()],\n focusedDate.getFullYear()\n ]);\n if (this.showWeekNumbers && this.i18n.firstDayOfWeek === 1) {\n announce.push(this.i18n.week);\n announce.push(DatePickerHelper._getISOWeekNumber(focusedDate));\n }\n this.dispatchEvent(new CustomEvent('iron-announce', {\n bubbles: true,\n composed: true,\n detail: {\n text: announce.join(' ')\n }\n }));\n return;\n }\n\n /**\n * Focuses the cancel button\n */\n focusCancel() {\n this.$.cancelButton.focus();\n }\n\n /**\n * Scrolls the list to the given Date.\n */\n scrollToDate(date, animate) {\n this._scrollToPosition(this._differenceInMonths(date, this._originDate), animate);\n }\n\n _focusedDateChanged(focusedDate) {\n this.revealDate(focusedDate);\n }\n\n _isCurrentYear(yearsFromNow) {\n return yearsFromNow === 0;\n }\n\n _isSelectedYear(yearsFromNow, selectedDate) {\n if (selectedDate) {\n return selectedDate.getFullYear() === this._originDate.getFullYear() + yearsFromNow;\n }\n }\n\n /**\n * Scrolls the month and year scrollers enough to reveal the given date.\n */\n revealDate(date) {\n if (date) {\n var diff = this._differenceInMonths(date, this._originDate);\n var scrolledAboveViewport = this.$.monthScroller.position > diff;\n\n var visibleItems = this.$.monthScroller.clientHeight / this.$.monthScroller.itemHeight;\n var scrolledBelowViewport = this.$.monthScroller.position + visibleItems - 1 < diff;\n\n if (scrolledAboveViewport) {\n this._scrollToPosition(diff, true);\n } else if (scrolledBelowViewport) {\n this._scrollToPosition(diff - visibleItems + 1, true);\n }\n }\n }\n\n _onOverlayFocus() {\n this._focused = true;\n }\n\n _onOverlayBlur() {\n this._focused = false;\n }\n\n _initialPositionChanged(initialPosition) {\n this.scrollToDate(initialPosition);\n }\n\n _repositionYearScroller() {\n this._visibleMonthIndex = Math.floor(this.$.monthScroller.position);\n this.$.yearScroller.position = (this.$.monthScroller.position + this._originDate.getMonth()) / 12;\n }\n\n _repositionMonthScroller() {\n this.$.monthScroller.position = this.$.yearScroller.position * 12 - this._originDate.getMonth();\n this._visibleMonthIndex = Math.floor(this.$.monthScroller.position);\n }\n\n _onMonthScroll() {\n this._repositionYearScroller();\n this._doIgnoreTaps();\n }\n\n _onYearScroll() {\n this._repositionMonthScroller();\n this._doIgnoreTaps();\n }\n\n _onYearScrollTouchStart() {\n this._notTapping = false;\n setTimeout(() => this._notTapping = true, 300);\n\n this._repositionMonthScroller();\n }\n\n _onMonthScrollTouchStart() {\n this._repositionYearScroller();\n }\n\n _doIgnoreTaps() {\n this._ignoreTaps = true;\n this._debouncer = Debouncer.debounce(this._debouncer,\n timeOut.after(300), () => this._ignoreTaps = false);\n }\n\n _formatDisplayed(date, formatDate, label) {\n if (date) {\n return formatDate(DatePickerHelper._extractDateParts(date));\n } else {\n return label;\n }\n }\n\n _onTodayTap() {\n var today = new Date();\n\n if (Math.abs(this.$.monthScroller.position - this._differenceInMonths(today, this._originDate)) < 0.001) {\n // Select today only if the month scroller is positioned approximately\n // at the beginning of the current month\n this.selectedDate = today;\n this._close();\n } else {\n this._scrollToCurrentMonth();\n }\n }\n\n _scrollToCurrentMonth() {\n if (this.focusedDate) {\n this.focusedDate = new Date();\n }\n\n this.scrollToDate(new Date(), true);\n }\n\n _showClear(selectedDate) {\n return !!selectedDate;\n }\n\n _onYearTap(e) {\n if (!this._ignoreTaps && !this._notTapping) {\n var scrollDelta = e.detail.y - (this.$.yearScroller.getBoundingClientRect().top + this.$.yearScroller.clientHeight / 2);\n var yearDelta = scrollDelta / this.$.yearScroller.itemHeight;\n this._scrollToPosition(this.$.monthScroller.position + yearDelta * 12, true);\n }\n }\n\n _scrollToPosition(targetPosition, animate) {\n if (this._targetPosition !== undefined) {\n this._targetPosition = targetPosition;\n return;\n }\n\n if (!animate) {\n this.$.monthScroller.position = targetPosition;\n this._targetPosition = undefined;\n this._repositionYearScroller();\n return;\n }\n\n this._targetPosition = targetPosition;\n\n // http://gizma.com/easing/\n var easingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t + b;\n }\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n };\n\n var duration = animate ? 300 : 0;\n var start = 0;\n var initialPosition = this.$.monthScroller.position;\n\n var smoothScroll = timestamp => {\n start = start || timestamp;\n var currentTime = timestamp - start;\n\n if (currentTime < duration) {\n var currentPos = easingFunction(currentTime, initialPosition, this._targetPosition - initialPosition, duration);\n this.$.monthScroller.position = currentPos;\n window.requestAnimationFrame(smoothScroll);\n } else {\n this.dispatchEvent(new CustomEvent('scroll-animation-finished', {\n bubbles: true,\n composed: true,\n detail: {\n position: this._targetPosition,\n oldPosition: initialPosition\n }\n }));\n\n this.$.monthScroller.position = this._targetPosition;\n this._targetPosition = undefined;\n }\n\n setTimeout(this._repositionYearScroller.bind(this), 1);\n };\n\n // Start the animation.\n window.requestAnimationFrame(smoothScroll);\n }\n\n _limit(value, range) {\n return Math.min(range.max, Math.max(range.min, value));\n }\n\n _handleTrack(e) {\n // Check if horizontal movement threshold (dx) not exceeded or\n // scrolling fast vertically (ddy).\n if (Math.abs(e.detail.dx) < 10 || Math.abs(e.detail.ddy) > 10) {\n return;\n }\n\n // If we're flinging quickly -> start animating already.\n if (Math.abs(e.detail.ddx) > this._yearScrollerWidth / 3) {\n this._toggleAnimateClass(true);\n }\n\n var newTranslateX = this._translateX + e.detail.ddx;\n this._translateX = this._limit(newTranslateX, {\n min: 0,\n max: this._yearScrollerWidth\n });\n }\n\n _track(e) {\n if (this._desktopMode) {\n // No need to track for swipe gestures on desktop.\n return;\n }\n\n switch (e.detail.state) {\n case 'start':\n this._toggleAnimateClass(false);\n break;\n\n case 'track':\n this._handleTrack(e);\n break;\n\n case 'end':\n this._toggleAnimateClass(true);\n if (this._translateX >= this._yearScrollerWidth / 2) {\n this._closeYearScroller();\n } else {\n this._openYearScroller();\n }\n break;\n }\n }\n\n _toggleAnimateClass(enable) {\n if (enable) {\n this.classList.add('animate');\n } else {\n this.classList.remove('animate');\n }\n }\n\n _toggleYearScroller() {\n this._isYearScrollerVisible() ? this._closeYearScroller() : this._openYearScroller();\n }\n\n _openYearScroller() {\n this._translateX = 0;\n this.setAttribute('years-visible', '');\n }\n\n _closeYearScroller() {\n this.removeAttribute('years-visible');\n this._translateX = this._yearScrollerWidth;\n }\n\n _isYearScrollerVisible() {\n return this._translateX < this._yearScrollerWidth / 2;\n }\n\n _translateXChanged(x) {\n if (!this._desktopMode) {\n this.$.monthScroller.style.transform = 'translateX(' + (x - this._yearScrollerWidth) + 'px)';\n this.$.yearScroller.style.transform = 'translateX(' + x + 'px)';\n }\n }\n\n _yearAfterXYears(index) {\n var result = new Date(this._originDate);\n result.setFullYear(parseInt(index) + this._originDate.getFullYear());\n return result.getFullYear();\n }\n\n _yearAfterXMonths(months) {\n return this._dateAfterXMonths(months).getFullYear();\n }\n\n _dateAfterXMonths(months) {\n var result = new Date(this._originDate);\n result.setDate(1);\n result.setMonth(parseInt(months) + this._originDate.getMonth());\n return result;\n }\n\n _differenceInMonths(date1, date2) {\n var months = (date1.getFullYear() - date2.getFullYear()) * 12;\n return months - date2.getMonth() + date1.getMonth();\n }\n\n _differenceInYears(date1, date2) {\n return this._differenceInMonths(date1, date2) / 12;\n }\n\n _clear() {\n this.selectedDate = '';\n }\n\n _close() {\n const overlayContent = this.getRootNode().host;\n const overlay = overlayContent ? overlayContent.getRootNode().host : null;\n if (overlay) {\n overlay.opened = false;\n }\n\n this.dispatchEvent(new CustomEvent('close', {bubbles: true, composed: true}));\n }\n\n _cancel() {\n this.focusedDate = this.selectedDate;\n this._close();\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n /**\n * Keyboard Navigation\n */\n _eventKey(e) {\n var keys = ['down', 'up', 'right', 'left', 'enter', 'space', 'home', 'end', 'pageup', 'pagedown', 'tab', 'esc'];\n\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i];\n if (IronA11yKeysBehavior.keyboardEventMatchesKeys(e, k)) {\n return k;\n }\n }\n }\n\n _onKeydown(e) {\n var focus = this._currentlyFocusedDate();\n\n // Cannot use (today/cancel).focused flag because vaadin-text-field removes it\n // previously in the keydown event.\n const isToday = e.composedPath().indexOf(this.$.todayButton) >= 0;\n const isCancel = e.composedPath().indexOf(this.$.cancelButton) >= 0;\n const isScroller = !isToday && !isCancel;\n\n var eventKey = this._eventKey(e);\n if (eventKey === 'tab') {\n // We handle tabs here and don't want to bubble up.\n e.stopPropagation();\n\n const isFullscreen = this.hasAttribute('fullscreen');\n const isShift = e.shiftKey;\n\n if (isFullscreen) {\n e.preventDefault();\n } else if (isShift && isScroller || !isShift && isCancel) {\n // Return focus back to the input field\n e.preventDefault();\n this.dispatchEvent(new CustomEvent('focus-input', {bubbles: true, composed: true}));\n } else if (isShift && isToday) {\n // Browser returns focus back to the scrollable area. We need to set\n // the focused flag, and move the scroll to focused date.\n this._focused = true;\n setTimeout(() => this.revealDate(this.focusedDate), 1);\n } else {\n // Browser moves the focus out of the scroller, hence focused flag must\n // set to false.\n this._focused = false;\n }\n } else if (eventKey) {\n e.preventDefault();\n e.stopPropagation();\n switch (eventKey) {\n case 'down':\n this._moveFocusByDays(7);\n this.focus();\n break;\n case 'up':\n this._moveFocusByDays(-7);\n this.focus();\n break;\n case 'right':\n if (isScroller) {\n this._moveFocusByDays(1);\n }\n break;\n case 'left':\n if (isScroller) {\n this._moveFocusByDays(-1);\n }\n break;\n case 'enter':\n if (isScroller || isCancel) {\n this._close();\n } else if (isToday) {\n this._onTodayTap();\n }\n break;\n case 'space':\n if (isCancel) {\n this._close();\n } else if (isToday) {\n this._onTodayTap();\n } else {\n var focusedDate = this.focusedDate;\n if (DatePickerHelper._dateEquals(focusedDate, this.selectedDate)) {\n this.selectedDate = '';\n this.focusedDate = focusedDate;\n } else {\n this.selectedDate = focusedDate;\n }\n }\n break;\n case 'home':\n this._moveFocusInsideMonth(focus, 'minDate');\n break;\n case 'end':\n this._moveFocusInsideMonth(focus, 'maxDate');\n break;\n case 'pagedown':\n this._moveFocusByMonths(e.shiftKey ? 12 : 1);\n break;\n case 'pageup':\n this._moveFocusByMonths(e.shiftKey ? -12 : -1);\n break;\n case 'esc':\n this._cancel();\n break;\n }\n }\n }\n\n _currentlyFocusedDate() {\n return this.focusedDate || this.selectedDate || this.initialPosition || new Date();\n }\n\n _focusDate(dateToFocus) {\n this.focusedDate = dateToFocus;\n this._focusedMonthDate = dateToFocus.getDate();\n }\n\n _focusClosestDate(focus) {\n this._focusDate(DatePickerHelper._getClosestDate(focus, [this.minDate, this.maxDate]));\n }\n\n _moveFocusByDays(days) {\n var focus = this._currentlyFocusedDate();\n var dateToFocus = new Date(0, 0);\n dateToFocus.setFullYear(focus.getFullYear());\n dateToFocus.setMonth(focus.getMonth());\n dateToFocus.setDate(focus.getDate() + days);\n\n if (this._dateAllowed(dateToFocus, this.minDate, this.maxDate)) {\n this._focusDate(dateToFocus);\n } else {\n if (this._dateAllowed(focus, this.minDate, this.maxDate)) {\n // Move to min or max date\n if (days > 0) { // down or right\n this._focusDate(this.maxDate);\n } else { // up or left\n this._focusDate(this.minDate);\n }\n } else {\n // Move to closest allowed date\n this._focusClosestDate(focus);\n }\n }\n }\n\n _moveFocusByMonths(months) {\n var focus = this._currentlyFocusedDate();\n var dateToFocus = new Date(0, 0);\n dateToFocus.setFullYear(focus.getFullYear());\n dateToFocus.setMonth(focus.getMonth() + months);\n\n var targetMonth = dateToFocus.getMonth();\n\n dateToFocus.setDate(this._focusedMonthDate || (this._focusedMonthDate = focus.getDate()));\n if (dateToFocus.getMonth() !== targetMonth) {\n dateToFocus.setDate(0);\n }\n\n if (this._dateAllowed(dateToFocus, this.minDate, this.maxDate)) {\n this.focusedDate = dateToFocus;\n } else {\n if (this._dateAllowed(focus, this.minDate, this.maxDate)) {\n // Move to min or max date\n if (months > 0) { // pagedown\n this._focusDate(this.maxDate);\n } else { // pageup\n this._focusDate(this.minDate);\n }\n } else {\n // Move to closest allowed date\n this._focusClosestDate(focus);\n }\n }\n }\n\n _moveFocusInsideMonth(focusedDate, property) {\n var dateToFocus = new Date(0, 0);\n dateToFocus.setFullYear(focusedDate.getFullYear());\n\n if (property === 'minDate') {\n dateToFocus.setMonth(focusedDate.getMonth());\n dateToFocus.setDate(1);\n } else {\n dateToFocus.setMonth(focusedDate.getMonth() + 1);\n dateToFocus.setDate(0);\n }\n\n if (this._dateAllowed(dateToFocus, this.minDate, this.maxDate)) {\n this._focusDate(dateToFocus);\n } else {\n if (this._dateAllowed(focusedDate, this.minDate, this.maxDate)) {\n // Move to minDate or maxDate\n this._focusDate(this[property]);\n } else {\n // Move to closest allowed date\n this._focusClosestDate(focusedDate);\n }\n }\n }\n\n _dateAllowed(date, min, max) {\n return (!min || date >= min) && (!max || date <= max);\n }\n\n _isTodayAllowed(min, max) {\n var today = new Date();\n var todayMidnight = new Date(0, 0);\n todayMidnight.setFullYear(today.getFullYear());\n todayMidnight.setMonth(today.getMonth());\n todayMidnight.setDate(today.getDate());\n return this._dateAllowed(todayMidnight, min, max);\n }\n\n _stopPropagation(e) {\n e.stopPropagation();\n }\n}\n\ncustomElements.define(DatePickerOverlayContentElement.is, DatePickerOverlayContentElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { IronA11yKeysBehavior } from '@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';\n\nimport { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';\nimport { DatePickerHelper } from './vaadin-date-picker-helper.js';\nimport { addListener } from '@polymer/polymer/lib/utils/gestures.js';\nimport { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';\n\n/**\n * @polymerMixin\n */\nexport const DatePickerMixin = subclass => class VaadinDatePickerMixin extends mixinBehaviors(\n [IronResizableBehavior], subclass\n) {\n\n static get properties() {\n return {\n /**\n * The current selected date.\n */\n _selectedDate: {\n type: Date\n },\n\n _focusedDate: Date,\n\n /**\n * The value for this element.\n *\n * Supported date formats:\n * - ISO 8601 `\"YYYY-MM-DD\"` (default)\n * - 6-digit extended ISO 8601 `\"+YYYYYY-MM-DD\"`, `\"-YYYYYY-MM-DD\"`\n *\n * @type {String}\n */\n value: {\n type: String,\n observer: '_valueChanged',\n notify: true,\n value: ''\n },\n\n /**\n * Set to true to mark the input as required.\n */\n required: {\n type: Boolean,\n value: false\n },\n\n /**\n * The name of this element.\n */\n name: {\n type: String\n },\n\n /**\n * Date which should be visible when there is no value selected.\n *\n * The same date formats as for the `value` property are supported.\n */\n initialPosition: String,\n\n /**\n * The label for this element.\n */\n label: String,\n\n /**\n * Set true to open the date selector overlay.\n */\n opened: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n observer: '_openedChanged'\n },\n\n /**\n * Set true to display ISO-8601 week numbers in the calendar. Notice that\n * displaying week numbers is only supported when `i18n.firstDayOfWeek`\n * is 1 (Monday).\n */\n showWeekNumbers: {\n type: Boolean\n },\n\n _fullscreen: {\n value: false,\n observer: '_fullscreenChanged'\n },\n\n _fullscreenMediaQuery: {\n value: '(max-width: 420px), (max-height: 420px)'\n },\n\n // An array of ancestor elements whose -webkit-overflow-scrolling is forced from value\n // 'touch' to value 'auto' in order to prevent them from clipping the dropdown. iOS only.\n _touchPrevented: Array,\n\n /**\n * The object used to localize this component.\n * To change the default localization, replace the entire\n * _i18n_ object or just the property you want to modify.\n *\n * The object has the following JSON structure and default values:\n\n {\n // An array with the full names of months starting\n // with January.\n monthNames: [\n 'January', 'February', 'March', 'April', 'May',\n 'June', 'July', 'August', 'September',\n 'October', 'November', 'December'\n ],\n\n // An array of weekday names starting with Sunday. Used\n // in screen reader announcements.\n weekdays: [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday',\n 'Thursday', 'Friday', 'Saturday'\n ],\n\n // An array of short weekday names starting with Sunday.\n // Displayed in the calendar.\n weekdaysShort: [\n 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'\n ],\n\n // An integer indicating the first day of the week\n // (0 = Sunday, 1 = Monday, etc.).\n firstDayOfWeek: 0,\n\n // Used in screen reader announcements along with week\n // numbers, if they are displayed.\n week: 'Week',\n\n // Translation of the Calendar icon button title.\n calendar: 'Calendar',\n\n // Translation of the Clear icon button title.\n clear: 'Clear',\n\n // Translation of the Today shortcut button text.\n today: 'Today',\n\n // Translation of the Cancel button text.\n cancel: 'Cancel',\n\n // A function to format given `Object` as\n // date string. Object is in the format `{ day: ..., month: ..., year: ... }`\n // Note: The argument month is 0-based. This means that January = 0 and December = 11.\n formatDate: d => {\n // returns a string representation of the given\n // object in 'MM/DD/YYYY' -format\n },\n\n // A function to parse the given text to an `Object` in the format `{ day: ..., month: ..., year: ... }`.\n // Must properly parse (at least) text formatted by `formatDate`.\n // Setting the property to null will disable keyboard input feature.\n // Note: The argument month is 0-based. This means that January = 0 and December = 11.\n parseDate: text => {\n // Parses a string in 'MM/DD/YY', 'MM/DD' or 'DD' -format to\n // an `Object` in the format `{ day: ..., month: ..., year: ... }`.\n }\n\n // A function to format given `monthName` and\n // `fullYear` integer as calendar title string.\n formatTitle: (monthName, fullYear) => {\n return monthName + ' ' + fullYear;\n }\n }\n\n *\n * @default {English/US}\n */\n i18n: {\n type: Object,\n value: () => {\n return {\n monthNames: [\n 'January', 'February', 'March', 'April', 'May',\n 'June', 'July', 'August', 'September', 'October', 'November', 'December'\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n firstDayOfWeek: 0,\n week: 'Week',\n calendar: 'Calendar',\n clear: 'Clear',\n today: 'Today',\n cancel: 'Cancel',\n formatDate: d => {\n const yearStr = String(d.year).replace(/\\d+/, y => '0000'.substr(y.length) + y);\n return [d.month + 1, d.day, yearStr].join('/');\n },\n parseDate: text => {\n const parts = text.split('/');\n const today = new Date();\n let date, month = today.getMonth(), year = today.getFullYear();\n\n if (parts.length === 3) {\n year = parseInt(parts[2]);\n if (parts[2].length < 3 && year >= 0) {\n year += year < 50 ? 2000 : 1900;\n }\n month = parseInt(parts[0]) - 1;\n date = parseInt(parts[1]);\n } else if (parts.length === 2) {\n month = parseInt(parts[0]) - 1;\n date = parseInt(parts[1]);\n } else if (parts.length === 1) {\n date = parseInt(parts[0]);\n }\n\n if (date !== undefined) {\n return {day: date, month, year};\n }\n },\n formatTitle: (monthName, fullYear) => {\n return monthName + ' ' + fullYear;\n }\n };\n }\n },\n\n /**\n * The earliest date that can be selected. All earlier dates will be disabled.\n *\n * Supported date formats:\n * - ISO 8601 `\"YYYY-MM-DD\"` (default)\n * - 6-digit extended ISO 8601 `\"+YYYYYY-MM-DD\"`, `\"-YYYYYY-MM-DD\"`\n *\n * @type {String}\n */\n min: {\n type: String,\n observer: '_minChanged'\n },\n\n /**\n * The latest date that can be selected. All later dates will be disabled.\n *\n * Supported date formats:\n * - ISO 8601 `\"YYYY-MM-DD\"` (default)\n * - 6-digit extended ISO 8601 `\"+YYYYYY-MM-DD\"`, `\"-YYYYYY-MM-DD\"`\n *\n * @type {String}\n */\n max: {\n type: String,\n observer: '_maxChanged'\n },\n\n /**\n * The earliest date that can be selected. All earlier dates will be disabled.\n */\n _minDate: {\n type: Date,\n // null does not work here because minimizer passes undefined to overlay (#351)\n value: ''\n },\n\n /**\n * The latest date that can be selected. All later dates will be disabled.\n */\n _maxDate: {\n type: Date,\n value: ''\n },\n\n _noInput: {\n type: Boolean,\n computed: '_isNoInput(_fullscreen, _ios, i18n, i18n.*)'\n },\n\n _ios: {\n type: Boolean,\n value: navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\\d+)/)\n },\n\n _webkitOverflowScroll: {\n type: Boolean,\n value: document.createElement('div').style.webkitOverflowScrolling === ''\n },\n\n _ignoreAnnounce: {\n value: true\n },\n\n _focusOverlayOnOpen: Boolean,\n\n _overlayInitialized: Boolean\n };\n }\n\n static get observers() {\n return [\n '_updateHasValue(value)',\n '_validateInput(_selectedDate, _minDate, _maxDate)',\n '_selectedDateChanged(_selectedDate, i18n.formatDate)',\n '_focusedDateChanged(_focusedDate, i18n.formatDate)',\n '_announceFocusedDate(_focusedDate, opened, _ignoreAnnounce)'\n ];\n }\n\n ready() {\n super.ready();\n this._boundOnScroll = this._onScroll.bind(this);\n this._boundFocus = this._focus.bind(this);\n this._boundUpdateAlignmentAndPosition = this._updateAlignmentAndPosition.bind(this);\n\n addListener(this, 'tap', e => {\n // FIXME(platosha): use preventDefault in the text field clear button,\n // then the following composedPath check could be simplified down\n // to `if (!e.defaultPrevented)`.\n // https://github.com/vaadin/vaadin-text-field/issues/352\n const inputIndex = e.composedPath().indexOf(this._inputElement);\n if (\n e.composedPath().slice(0, inputIndex)\n .filter(el => el.getAttribute && el.getAttribute('part') === 'clear-button')\n .length === 0\n ) {\n this.open();\n }\n });\n\n this.addEventListener('touchend', this._preventDefault.bind(this));\n this.addEventListener('keydown', this._onKeydown.bind(this));\n this.addEventListener('input', this._onUserInput.bind(this));\n this.addEventListener('focus', e => this._noInput && e.target.blur());\n }\n\n _initOverlay() {\n this.$.overlay.removeAttribute('disable-upgrade');\n this._overlayInitialized = true;\n\n this.$.overlay.addEventListener('opened-changed', e => this.opened = e.detail.value);\n\n this._overlayContent.addEventListener('close', this._close.bind(this));\n this._overlayContent.addEventListener('focus-input', this._focusAndSelect.bind(this));\n this.$.overlay.addEventListener('vaadin-overlay-escape-press', this._boundFocus);\n\n // Keep focus attribute in focusElement for styling\n this._overlayContent.addEventListener('focus', () => this.focusElement._setFocused(true));\n\n this.$.overlay.addEventListener('vaadin-overlay-close', this._onVaadinOverlayClose.bind(this));\n }\n\n /**\n * @protected\n */\n disconnectedCallback() {\n super.disconnectedCallback();\n\n if (this._overlayInitialized) {\n this.$.overlay.removeEventListener('vaadin-overlay-escape-press', this._boundFocus);\n }\n\n this.opened = false;\n }\n\n /**\n * Opens the dropdown.\n */\n open() {\n if (!this.disabled && !this.readonly) {\n this.opened = true;\n }\n }\n\n _close(e) {\n if (e) {\n e.stopPropagation();\n }\n this._focus();\n this.close();\n }\n\n /**\n * Closes the dropdown.\n */\n close() {\n if (this._overlayInitialized) {\n this.$.overlay.close();\n }\n }\n\n get _inputElement() {\n return this._input();\n }\n\n get _nativeInput() {\n if (this._inputElement) {\n // vaadin-text-field's input is focusElement\n // iron-input's input is inputElement\n return this._inputElement.focusElement ? this._inputElement.focusElement :\n this._inputElement.inputElement ? this._inputElement.inputElement :\n window.unwrap ? window.unwrap(this._inputElement) : this._inputElement;\n }\n }\n\n _parseDate(str) {\n // Parsing with RegExp to ensure correct format\n var parts = /^([-+]\\d{1}|\\d{2,4}|[-+]\\d{6})-(\\d{1,2})-(\\d{1,2})$/.exec(str);\n if (!parts) {\n return;\n }\n\n var date = new Date(0, 0); // Wrong date (1900-01-01), but with midnight in local time\n date.setFullYear(parseInt(parts[1], 10));\n date.setMonth(parseInt(parts[2], 10) - 1);\n date.setDate(parseInt(parts[3], 10));\n return date;\n }\n\n _isNoInput(fullscreen, ios, i18n) {\n return !this._inputElement || fullscreen || ios || !i18n.parseDate;\n }\n\n _formatISO(date) {\n if (!(date instanceof Date)) {\n return '';\n }\n\n const pad = (num, fmt = '00') => (fmt + num).substr((fmt + num).length - fmt.length);\n\n let yearSign = '';\n let yearFmt = '0000';\n let yearAbs = date.getFullYear();\n if (yearAbs < 0) {\n yearAbs = -yearAbs;\n yearSign = '-';\n yearFmt = '000000';\n } else if (date.getFullYear() >= 10000) {\n yearSign = '+';\n yearFmt = '000000';\n }\n\n const year = yearSign + pad(yearAbs, yearFmt);\n const month = pad(date.getMonth() + 1);\n const day = pad(date.getDate());\n return [year, month, day].join('-');\n }\n\n _openedChanged(opened) {\n if (opened && !this._overlayInitialized) {\n this._initOverlay();\n }\n if (this._overlayInitialized) {\n this.$.overlay.opened = opened;\n }\n if (opened) {\n this._updateAlignmentAndPosition();\n }\n }\n\n _selectedDateChanged(selectedDate, formatDate) {\n if (selectedDate === undefined || formatDate === undefined) {\n return;\n }\n if (this.__userInputOccurred) {\n this.__dispatchChange = true;\n }\n const inputValue = selectedDate && formatDate(DatePickerHelper._extractDateParts(selectedDate));\n const value = this._formatISO(selectedDate);\n if (value !== this.value) {\n this.validate(inputValue);\n this.value = value;\n }\n this.__userInputOccurred = false;\n this.__dispatchChange = false;\n this._focusedDate = selectedDate;\n this._inputValue = selectedDate ? inputValue : '';\n }\n\n _focusedDateChanged(focusedDate, formatDate) {\n if (focusedDate === undefined || formatDate === undefined) {\n return;\n }\n this.__userInputOccurred = true;\n if (!this._ignoreFocusedDateChange && !this._noInput) {\n this._inputValue = focusedDate ? formatDate(DatePickerHelper._extractDateParts(focusedDate)) : '';\n }\n }\n\n _updateHasValue(value) {\n if (value) {\n this.setAttribute('has-value', '');\n } else {\n this.removeAttribute('has-value');\n }\n }\n\n\n __getOverlayTheme(theme, overlayInitialized) {\n if (overlayInitialized) {\n return theme;\n }\n }\n\n _handleDateChange(property, value, oldValue) {\n if (!value) {\n this[property] = '';\n return;\n }\n\n var date = this._parseDate(value);\n if (!date) {\n this.value = oldValue;\n return;\n }\n if (!DatePickerHelper._dateEquals(this[property], date)) {\n this[property] = date;\n }\n }\n\n _valueChanged(value, oldValue) {\n if (this.__dispatchChange) {\n this.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n }\n this._handleDateChange('_selectedDate', value, oldValue);\n }\n\n _minChanged(value, oldValue) {\n this._handleDateChange('_minDate', value, oldValue);\n }\n\n _maxChanged(value, oldValue) {\n this._handleDateChange('_maxDate', value, oldValue);\n }\n\n _updateAlignmentAndPosition() {\n if (!this._overlayInitialized) {\n return;\n }\n if (!this._fullscreen) {\n const inputRect = this._inputElement.getBoundingClientRect();\n\n const bottomAlign = inputRect.top > window.innerHeight / 2;\n const rightAlign = inputRect.left + this.clientWidth / 2 > window.innerWidth / 2;\n\n if (rightAlign) {\n const viewportWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);\n this.$.overlay.setAttribute('right-aligned', '');\n this.$.overlay.style.removeProperty('left');\n this.$.overlay.style.right = (viewportWidth - inputRect.right) + 'px';\n } else {\n this.$.overlay.removeAttribute('right-aligned');\n this.$.overlay.style.removeProperty('right');\n this.$.overlay.style.left = inputRect.left + 'px';\n }\n\n if (bottomAlign) {\n const viewportHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);\n this.$.overlay.setAttribute('bottom-aligned', '');\n this.$.overlay.style.removeProperty('top');\n this.$.overlay.style.bottom = (viewportHeight - inputRect.top) + 'px';\n } else {\n this.$.overlay.removeAttribute('bottom-aligned');\n this.$.overlay.style.removeProperty('bottom');\n this.$.overlay.style.top = inputRect.bottom + 'px';\n }\n }\n\n this.$.overlay.setAttribute('dir',\n getComputedStyle(this._inputElement).getPropertyValue('direction')\n );\n this._overlayContent._repositionYearScroller();\n }\n\n _fullscreenChanged() {\n if (this._overlayInitialized && this.$.overlay.opened) {\n this._updateAlignmentAndPosition();\n }\n }\n\n _onOverlayOpened() {\n this._openedWithFocusRing = this.hasAttribute('focus-ring') || (this.focusElement && this.focusElement.hasAttribute('focus-ring'));\n\n var parsedInitialPosition = this._parseDate(this.initialPosition);\n\n var initialPosition = this._selectedDate || this._overlayContent.initialPosition ||\n parsedInitialPosition || new Date();\n\n if (parsedInitialPosition ||\n DatePickerHelper._dateAllowed(initialPosition, this._minDate, this._maxDate)) {\n this._overlayContent.initialPosition = initialPosition;\n } else {\n this._overlayContent.initialPosition =\n DatePickerHelper._getClosestDate(initialPosition, [this._minDate, this._maxDate]);\n }\n\n this._overlayContent.scrollToDate(this._overlayContent.focusedDate || this._overlayContent.initialPosition);\n // Have a default focused date\n this._ignoreFocusedDateChange = true;\n this._overlayContent.focusedDate = this._overlayContent.focusedDate || this._overlayContent.initialPosition;\n this._ignoreFocusedDateChange = false;\n\n window.addEventListener('scroll', this._boundOnScroll, true);\n this.addEventListener('iron-resize', this._boundUpdateAlignmentAndPosition);\n\n if (this._webkitOverflowScroll) {\n this._touchPrevented = this._preventWebkitOverflowScrollingTouch(this.parentElement);\n }\n\n if (this._focusOverlayOnOpen) {\n this._overlayContent.focus();\n this._focusOverlayOnOpen = false;\n } else {\n this._focus();\n }\n\n if (this._noInput && this.focusElement) {\n this.focusElement.blur();\n }\n\n this.updateStyles();\n\n this._ignoreAnnounce = false;\n }\n\n // A hack needed for iOS to prevent dropdown from being clipped in an\n // ancestor container with -webkit-overflow-scrolling: touch;\n _preventWebkitOverflowScrollingTouch(element) {\n var result = [];\n while (element) {\n if (window.getComputedStyle(element).webkitOverflowScrolling === 'touch') {\n var oldInlineValue = element.style.webkitOverflowScrolling;\n element.style.webkitOverflowScrolling = 'auto';\n result.push({\n element: element,\n oldInlineValue: oldInlineValue\n });\n }\n element = element.parentElement;\n }\n return result;\n }\n\n _onOverlayClosed() {\n this._ignoreAnnounce = true;\n\n window.removeEventListener('scroll', this._boundOnScroll, true);\n this.removeEventListener('iron-resize', this._boundUpdateAlignmentAndPosition);\n\n if (this._touchPrevented) {\n this._touchPrevented.forEach(prevented =>\n prevented.element.style.webkitOverflowScrolling = prevented.oldInlineValue);\n this._touchPrevented = [];\n }\n\n this.updateStyles();\n\n // Select the parsed input or focused date\n this._ignoreFocusedDateChange = true;\n if (this.i18n.parseDate) {\n var inputValue = this._inputValue || '';\n const dateObject = this.i18n.parseDate(inputValue);\n const parsedDate = dateObject &&\n this._parseDate(`${dateObject.year}-${dateObject.month + 1}-${dateObject.day}`);\n\n if (this._isValidDate(parsedDate)) {\n this._selectedDate = parsedDate;\n } else {\n this._selectedDate = null;\n this._inputValue = inputValue;\n }\n } else if (this._focusedDate) {\n this._selectedDate = this._focusedDate;\n }\n this._ignoreFocusedDateChange = false;\n\n if (this._nativeInput && this._nativeInput.selectionStart) {\n this._nativeInput.selectionStart = this._nativeInput.selectionEnd;\n }\n this.validate();\n }\n\n /**\n * Returns true if `value` is valid, and sets the `invalid` flag appropriately.\n *\n * @param {string} value Value to validate. Optional, defaults to user's input value.\n * @return {boolean} True if the value is valid and sets the `invalid` flag appropriately\n */\n validate(value) {\n // reset invalid state on the underlying text field\n this.invalid = false;\n value = value !== undefined ? value : this._inputValue;\n return !(this.invalid = !this.checkValidity(value));\n }\n\n /**\n * Returns true if the current input value satisfies all constraints (if any)\n *\n * Override the `checkValidity` method for custom validations.\n *\n * @param {string} value Value to validate. Optional, defaults to the selected date.\n * @return {boolean} True if the value is valid\n */\n checkValidity(value) {\n var inputValid = !value ||\n (this._selectedDate && value === this.i18n.formatDate(DatePickerHelper._extractDateParts(this._selectedDate)));\n var minMaxValid = !this._selectedDate ||\n DatePickerHelper._dateAllowed(this._selectedDate, this._minDate, this._maxDate);\n\n var inputValidity = true;\n if (this._inputElement) {\n if (this._inputElement.checkValidity) {\n // vaadin native input elements have the checkValidity method\n inputValidity = this._inputElement.checkValidity(value);\n } else if (this._inputElement.validate) {\n // iron-form-elements have the validate API\n inputValidity = this._inputElement.validate(value);\n }\n }\n\n return inputValid && minMaxValid && inputValidity;\n }\n\n _onScroll(e) {\n if (e.target === window || !this._overlayContent.contains(e.target)) {\n this._updateAlignmentAndPosition();\n }\n }\n\n _focus() {\n if (this._noInput) {\n this._overlayInitialized && this._overlayContent.focus();\n } else {\n this._inputElement.focus();\n }\n }\n\n _focusAndSelect() {\n this._focus();\n this._setSelectionRange(0, this._inputValue.length);\n }\n\n _setSelectionRange(a, b) {\n if (this._nativeInput && this._nativeInput.setSelectionRange) {\n this._nativeInput.setSelectionRange(a, b);\n }\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n /**\n * Keyboard Navigation\n */\n _eventKey(e) {\n var keys = ['down', 'up', 'enter', 'esc', 'tab'];\n\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i];\n if (IronA11yKeysBehavior.keyboardEventMatchesKeys(e, k)) {\n return k;\n }\n }\n }\n\n _isValidDate(d) {\n return d && !isNaN(d.getTime());\n }\n\n _onKeydown(e) {\n if (this._noInput) {\n // The input element cannot be readonly as it would conflict with\n // the required attribute. Both are not allowed on an input element.\n // Therefore we prevent default on most keydown events.\n var allowedKeys = [\n 9 // tab\n ];\n if (allowedKeys.indexOf(e.keyCode) === -1) {\n e.preventDefault();\n }\n }\n\n switch (this._eventKey(e)) {\n case 'down':\n case 'up':\n // prevent scrolling the page with arrows\n e.preventDefault();\n\n if (this.opened) {\n this._overlayContent.focus();\n this._overlayContent._onKeydown(e);\n } else {\n this._focusOverlayOnOpen = true;\n this.open();\n }\n\n break;\n case 'enter': {\n const dateObject = this.i18n.parseDate(this._inputValue);\n const parsedDate = dateObject &&\n this._parseDate(dateObject.year + '-' + (dateObject.month + 1) + '-' + dateObject.day);\n\n if (this._overlayInitialized && this._overlayContent.focusedDate && this._isValidDate(parsedDate)) {\n this._selectedDate = this._overlayContent.focusedDate;\n }\n this.close();\n break;\n }\n case 'esc':\n this._focusedDate = this._selectedDate;\n this._close();\n break;\n case 'tab':\n if (this.opened) {\n e.preventDefault();\n // Clear the selection range (remains visible on IE)\n this._setSelectionRange(0, 0);\n if (e.shiftKey) {\n this._overlayContent.focusCancel();\n } else {\n this._overlayContent.focus();\n this._overlayContent.revealDate(this._focusedDate);\n }\n\n }\n break;\n }\n }\n\n _validateInput(date, min, max) {\n if (date && (min || max)) {\n this.invalid = !DatePickerHelper._dateAllowed(date, min, max);\n }\n }\n\n _onUserInput(e) {\n if (!this.opened && this._inputElement.value) {\n this.open();\n }\n this._userInputValueChanged();\n }\n\n _userInputValueChanged(value) {\n if (this.opened && this._inputValue) {\n const dateObject = this.i18n.parseDate && this.i18n.parseDate(this._inputValue);\n const parsedDate = dateObject &&\n this._parseDate(`${dateObject.year}-${dateObject.month + 1}-${dateObject.day}`);\n\n if (this._isValidDate(parsedDate)) {\n this._ignoreFocusedDateChange = true;\n if (!DatePickerHelper._dateEquals(parsedDate, this._focusedDate)) {\n this._focusedDate = parsedDate;\n }\n this._ignoreFocusedDateChange = false;\n }\n }\n }\n\n _announceFocusedDate(_focusedDate, opened, _ignoreAnnounce) {\n if (opened && !_ignoreAnnounce) {\n this._overlayContent.announceFocusedDate();\n }\n }\n\n get _overlayContent() {\n return this.$.overlay.content.querySelector('#overlay-content');\n }\n\n /**\n * Fired when the user commits a value change.\n *\n * @event change\n */\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\nimport '@polymer/iron-media-query/iron-media-query.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport { ControlStateMixin } from '@vaadin/vaadin-control-state-mixin/vaadin-control-state-mixin.js';\nimport './vaadin-date-picker-overlay.js';\nimport './vaadin-date-picker-overlay-content.js';\nimport { DatePickerMixin } from './vaadin-date-picker-mixin.js';\nimport '@vaadin/vaadin-text-field/src/vaadin-text-field.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { afterNextRender } from '@polymer/polymer/lib/utils/render-status.js';\n/**\n *\n * `
` is a date selection field which includes a scrollable\n * month calendar view.\n * ```html\n * \n * ```\n * ```js\n * datePicker.value = '2016-03-02';\n * ```\n * When the selected `value` is changed, a `value-changed` event is triggered.\n *\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description | Theme for Element\n * ----------------|----------------|----------------\n * `text-field` | Input element | vaadin-date-picker\n * `clear-button` | Clear button | vaadin-date-picker\n * `toggle-button` | Toggle button | vaadin-date-picker\n * `overlay-content` | The overlay element | vaadin-date-picker\n * `overlay-header` | Fullscreen mode header | vaadin-date-picker-overlay-content\n * `label` | Fullscreen mode value/label | vaadin-date-picker-overlay-content\n * `clear-button` | Fullscreen mode clear button | vaadin-date-picker-overlay-content\n * `toggle-button` | Fullscreen mode toggle button | vaadin-date-picker-overlay-content\n * `years-toggle-button` | Fullscreen mode years scroller toggle | vaadin-date-picker-overlay-content\n * `months` | Months scroller | vaadin-date-picker-overlay-content\n * `years` | Years scroller | vaadin-date-picker-overlay-content\n * `toolbar` | Footer bar with buttons | vaadin-date-picker-overlay-content\n * `today-button` | Today button | vaadin-date-picker-overlay-content\n * `cancel-button` | Cancel button | vaadin-date-picker-overlay-content\n * `month` | Month calendar | vaadin-date-picker-overlay-content\n * `year-number` | Year number | vaadin-date-picker-overlay-content\n * `year-separator` | Year separator | vaadin-date-picker-overlay-content\n * `month-header` | Month title | vaadin-month-calendar\n * `weekdays` | Weekday container | vaadin-month-calendar\n * `weekday` | Weekday element | vaadin-month-calendar\n * `week-numbers` | Week numbers container | vaadin-month-calendar\n * `week-number` | Week number element | vaadin-month-calendar\n * `date` | Date element | vaadin-month-calendar\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `invalid` | Set when the element is invalid | :host\n * `opened` | Set when the date selector overlay is opened | :host\n * `readonly` | Set when the element is readonly | :host\n * `disabled` | Set when the element is disabled | :host\n * `today` | Set on the date corresponding to the current day | date\n * `focused` | Set on the focused date | date\n * `disabled` | Set on the date out of the allowed range | date\n * `selected` | Set on the selected date | date\n *\n * If you want to replace the default input field with a custom implementation, you should use the\n * [``](#vaadin-date-picker-light) element.\n *\n * In addition to `` itself, the following internal\n * components are themable:\n *\n * - ``\n * - ``\n * - ``\n * - ``\n *\n * Note: the `theme` attribute value set on `` is\n * propagated to the internal themable components listed above.\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ControlStateMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.ThemePropertyMixin\n * @mixes Vaadin.DatePickerMixin\n * @mixes Polymer.GestureEventListeners\n * @demo demo/index.html\n */\nclass DatePickerElement extends\n ElementMixin(\n ControlStateMixin(\n ThemableMixin(\n ThemePropertyMixin(\n DatePickerMixin(\n GestureEventListeners(PolymerElement)))))) {\n static get template() {\n return html`\n \n\n\n \n \n \n \n\n \n \n \n \n \n \n\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-date-picker';\n }\n\n static get version() {\n return '4.0.2';\n }\n\n static get properties() {\n return {\n /**\n * Set to true to display the clear icon which clears the input.\n */\n clearButtonVisible: {\n type: Boolean,\n value: false\n },\n\n /**\n * Set to true to disable this element.\n */\n disabled: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * The error message to display when the input is invalid.\n */\n errorMessage: String,\n\n /**\n * A placeholder string in addition to the label. If this is set, the label will always float.\n */\n placeholder: String,\n\n /**\n * Set to true to make this element read-only.\n */\n readonly: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * This property is set to true when the control value invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n _userInputValue: String\n };\n }\n\n static get observers() {\n return [\n '_userInputValueChanged(_userInputValue)',\n '_setClearButtonLabel(i18n.clear)'\n ];\n }\n\n ready() {\n super.ready();\n\n // In order to have synchronized invalid property, we need to use the same validate logic.\n afterNextRender(this, () => this._inputElement.validate = () => {});\n\n // FIXME(platosha): dispatch `input` event on\n // clear button\n // https://github.com/vaadin/vaadin-text-field/issues/347\n this._inputElement.addEventListener('change', () => {\n if (this._inputElement.value === '') {\n this.__dispatchChange = true;\n this.value = '';\n this.__dispatchChange = false;\n }\n });\n }\n\n _onVaadinOverlayClose(e) {\n if (this._openedWithFocusRing && this.hasAttribute('focused')) {\n this.focusElement.setAttribute('focus-ring', '');\n } else if (!this.hasAttribute('focused')) {\n this.focusElement.blur();\n }\n if (e.detail.sourceEvent && e.detail.sourceEvent.composedPath().indexOf(this) !== -1) {\n e.preventDefault();\n }\n }\n\n _toggle(e) {\n e.stopPropagation();\n this[(this._overlayInitialized && this.$.overlay.opened) ? 'close' : 'open']();\n }\n\n _input() {\n return this.$.input;\n }\n\n set _inputValue(value) {\n this._inputElement.value = value;\n }\n\n get _inputValue() {\n return this._inputElement.value;\n }\n\n _getAriaExpanded(opened) {\n return Boolean(opened).toString();\n }\n\n /**\n * Focussable element used by vaadin-control-state-mixin\n */\n get focusElement() {\n return this._input() || this;\n }\n\n _setClearButtonLabel(i18nClear) {\n // FIXME(platosha): expose i18n API in \n // https://github.com/vaadin/vaadin-text-field/issues/348\n this._inputElement.shadowRoot.querySelector('[part=\"clear-button\"]')\n .setAttribute('aria-label', i18nClear);\n }\n}\n\ncustomElements.define(DatePickerElement.is, DatePickerElement);\n\nexport { DatePickerElement };\n","import '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { DirMixin } from '@vaadin/vaadin-element-mixin/vaadin-dir-mixin.js';\nimport { ItemMixin } from './vaadin-item-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a Web Component providing layout for items in tabs and menus.\n *\n * ```\n * \n * Item content\n * \n * ```\n *\n * ### Selectable\n *\n * `` has the `selected` property and the corresponding state attribute.\n * Currently, the component sets the `selected` to false, when `disabled` property is set to true.\n * But other than that, the `` does not switch selection by itself.\n * In general, it is the wrapper component, like ``, which should update\n * the `selected` property on the items, e. g. on mousedown or when Enter / Spacebar is pressed.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---|---\n * `content` | The element that wraps the slot\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -----------|-------------|------------\n * `disabled` | Set to a disabled item | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `selected` | Set when the item is selected | :host\n * `active` | Set when mousedown or enter/spacebar pressed | :host\n *\n * @extends PolymerElement\n * @mixes ItemMixin\n * @mixes ThemableMixin\n * @mixes DirMixin\n */\nclass ItemElement extends ItemMixin(ThemableMixin(DirMixin(PolymerElement))) {\n static get template() {\n return html`\n \n \n \n
\n`;\n }\n\n static get is() {\n return 'vaadin-item';\n }\n\n static get version() {\n return '2.3.0';\n }\n\n constructor() {\n super();\n\n /**\n * Submittable string value. The default value is the trimmed text content of the element.\n * @type {string}\n */\n this.value;\n }\n}\n\ncustomElements.define(ItemElement.is, ItemElement);\n\nexport { ItemElement };\n","import '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2019 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { ListMixin } from './vaadin-list-mixin.js';\n\n/**\n * A mixin for `nav` elements, facilitating multiple selection of childNodes.\n *\n * @polymerMixin\n * @mixes ListMixin\n */\nexport const MultiSelectListMixin = superClass => class VaadinMultiSelectListMixin extends ListMixin(superClass) {\n static get properties() {\n return {\n /**\n * Specifies that multiple options can be selected at once.\n */\n multiple: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n observer: '_multipleChanged'\n },\n\n /**\n * Array of indexes of the items selected in the items array\n * Note: Not updated when used in single selection mode.\n * @type {string[] | null | undefined}\n */\n selectedValues: {\n type: Array,\n notify: true,\n value: function() {\n return [];\n }\n }\n };\n }\n\n static get observers() {\n return [\n `_enhanceMultipleItems(items, multiple, selected, selectedValues, selectedValues.*)`\n ];\n }\n\n /** @protected */\n ready() {\n // Should be attached before click listener in list-mixin\n this.addEventListener('click', e => this._onMultipleClick(e));\n\n super.ready();\n }\n\n /** @private */\n _enhanceMultipleItems(items, multiple, selected, selectedValues) {\n if (!items || !multiple) {\n return;\n }\n\n if (selectedValues) {\n const selectedItems = selectedValues.map(selectedId => items[selectedId]);\n items.forEach(item => item.selected = selectedItems.indexOf(item) !== -1);\n }\n\n this._scrollToLastSelectedItem();\n }\n\n /** @private */\n _scrollToLastSelectedItem() {\n const lastSelectedItem = this.selectedValues.slice(-1)[0];\n if (lastSelectedItem && !lastSelectedItem.disabled) {\n this._scrollToItem(lastSelectedItem);\n }\n }\n\n /**\n * @param {!MouseEvent} event\n * @protected\n */\n _onMultipleClick(event) {\n const item = this._filterItems(event.composedPath())[0];\n const idx = item && !item.disabled ? this.items.indexOf(item) : -1;\n if (idx < 0 || !this.multiple) {\n return;\n }\n\n event.preventDefault();\n if (this.selectedValues.indexOf(idx) !== -1) {\n this.selectedValues = this.selectedValues.filter(v => v !== idx);\n } else {\n this.selectedValues = this.selectedValues.concat(idx);\n }\n }\n\n /** @private */\n _multipleChanged(value, oldValue) {\n // Changing from multiple to single selection, clear selection.\n if (!value && oldValue) {\n this.selectedValues = [];\n this.items.forEach(item => item.selected = false);\n }\n\n // Changing from single to multiple selection, add selected to selectedValues.\n if (value && !oldValue && this.selected !== undefined) {\n this.push('selectedValues', this.selected);\n this.selected = undefined;\n }\n }\n\n /**\n * Fired when the selection is changed.\n * Not fired in single selection mode.\n *\n * @event selected-values-changed\n * @param {Object} detail\n * @param {Object} detail.value the array of indexes of the items selected in the items array.\n */\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { MultiSelectListMixin } from '@vaadin/vaadin-list-mixin/vaadin-multi-select-list-mixin.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a Web Component for creating menus.\n *\n * ```\n * \n * Item 1\n * Item 2\n * Item 3\n * Item 4\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ------------------|------------------------\n * `items` | The items container\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @extends PolymerElement\n * @mixes MultiSelectListMixin\n * @mixes ThemableMixin\n * @mixes ElementMixin\n * @demo demo/index.html\n */\nclass ListBoxElement extends ElementMixin(MultiSelectListMixin(ThemableMixin(PolymerElement))) {\n static get template() {\n return html`\n \n \n \n
\n`;\n }\n\n static get is() {\n return 'vaadin-list-box';\n }\n\n static get version() {\n return '1.4.0';\n }\n\n static get properties() {\n return {\n // We don't need to define this property since super default is vertical,\n // but we don't want it to be modified, or be shown in the API docs.\n /** @private */\n orientation: {\n readOnly: true\n }\n };\n }\n\n constructor() {\n super();\n\n /**\n * @type {Element | null}\n * @protected\n */\n this.focused;\n }\n\n ready() {\n super.ready();\n this.setAttribute('role', 'list');\n\n setTimeout(this._checkImport.bind(this), 2000);\n }\n\n /**\n * @return {!HTMLElement}\n * @protected\n */\n get _scrollerElement() {\n return this.shadowRoot.querySelector('[part=\"items\"]');\n }\n\n /** @private */\n _checkImport() {\n var item = this.querySelector('vaadin-item');\n if (item && !(item instanceof PolymerElement)) {\n console.warn(`Make sure you have imported the vaadin-item element.`);\n }\n }\n}\n\ncustomElements.define(ListBoxElement.is, ListBoxElement);\n\nexport { ListBoxElement };\n","import '../color.js';\nimport '../typography.js';\nimport '../shadow.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '../color.js';\nimport './overlay.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = ``;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '@vaadin/vaadin-item/theme/material/vaadin-item.js';\nimport '@vaadin/vaadin-list-box/theme/material/vaadin-list-box.js';\nimport '@vaadin/vaadin-text-field/theme/material/vaadin-text-field.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/mixins/menu-overlay.js';\nimport '@vaadin/vaadin-material-styles/mixins/field-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n\n \n \n \n\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/lib/elements/dom-module.js';\n\nimport { OverlayElement } from '@vaadin/vaadin-overlay/src/vaadin-overlay.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n * The overlay element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @extends Vaadin.OverlayElement\n */\nclass SelectOverlayElement extends OverlayElement {\n static get is() {\n return 'vaadin-select-overlay';\n }\n}\ncustomElements.define(SelectOverlayElement.is, SelectOverlayElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { TextFieldElement } from '@vaadin/vaadin-text-field/src/vaadin-text-field.js';\n\nlet memoizedTemplate;\n/**\n * The text-field element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-text-field/blob/master/src/vaadin-text-field.html)\n * for `` parts and available slots (prefix, suffix etc.)\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @extends Vaadin.TextFieldElement\n */\nclass SelectTextFieldElement extends TextFieldElement {\n static get is() {\n return 'vaadin-select-text-field';\n }\n\n static get template() {\n // Check if text-field is using slotted input\n if (super.template.content.querySelector('slot[name=\"input\"]')) {\n return super.template;\n }\n\n if (!memoizedTemplate) {\n // Clone the superclass template\n memoizedTemplate = super.template.cloneNode(true);\n\n // Create a slot for the value element\n const slot = document.createElement('slot');\n slot.setAttribute('name', 'value');\n\n // Insert the slot before the text-field\n const input = memoizedTemplate.content.querySelector('input');\n\n input.parentElement.replaceChild(slot, input);\n slot.appendChild(input);\n }\n return memoizedTemplate;\n }\n\n get focusElement() {\n return this.shadowRoot.querySelector('[part=input-field]');\n }\n\n get inputElement() {\n return this.shadowRoot.querySelector('input');\n }\n}\n\ncustomElements.define(SelectTextFieldElement.is, SelectTextFieldElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport { ControlStateMixin } from '@vaadin/vaadin-control-state-mixin/vaadin-control-state-mixin.js';\nimport { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';\nimport '@polymer/iron-media-query/iron-media-query.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport './vaadin-select-overlay.js';\nimport './vaadin-select-text-field.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n *\n * `` is a Web Component for selecting values from a list of items. The content of the\n * the select can be populated in two ways: imperatively by using renderer callback function and\n * declaratively by using Polymer's Templates.\n *\n * ### Rendering\n *\n * By default, the select uses the content provided by using the renderer callback function.\n *\n * The renderer function provides `root`, `select` arguments.\n * Generate DOM content, append it to the `root` element and control the state\n * of the host element by accessing `select`.\n *\n * ```html\n * \n * ```\n * ```js\n * const select = document.querySelector('#select');\n * select.renderer = function(root, select) {\n * const listBox = document.createElement('vaadin-list-box');\n * // append 3 elements\n * ['Jose', 'Manolo', 'Pedro'].forEach(function(name) {\n * const item = document.createElement('vaadin-item');\n * item.textContent = name;\n * listBox.appendChild(item);\n * });\n *\n * // update the content\n * root.appendChild(listBox);\n * };\n * ```\n *\n * Renderer is called on initialization of new select and on its opening.\n * DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * ### Polymer Templates\n *\n * Alternatively, the content can be provided with Polymer's Template.\n * Select finds the first child template and uses that in case renderer callback function\n * is not provided. You can also set a custom template using the `template` property.\n *\n * ```\n * \n * \n * \n * Foo\n * Bar\n * Baz\n * \n * \n * \n * ```\n *\n * Hint: By setting the `label` property of inner vaadin-items you will\n * be able to change the visual representation of the selected value in the input part.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `toggle-button` | The toggle button\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `opened` | Set when the select is open | :host\n * `invalid` | Set when the element is invalid | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `readonly` | Set when the select is read only | :host\n *\n * `` element sets these custom CSS properties:\n *\n * Property name | Description | Theme for element\n * --- | --- | ---\n * `--vaadin-select-text-field-width` | Width of the select text field | `vaadin-select-overlay`\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * In addition to `` itself, the following internal\n * components are themable:\n *\n * - ``\n * - ``\n *\n * Note: the `theme` attribute value set on `` is\n * propagated to the internal themable components listed above.\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ControlStateMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.ThemePropertyMixin\n * @demo demo/index.html\n */\nclass SelectElement extends\n ElementMixin(\n ControlStateMixin(\n ThemableMixin(\n ThemePropertyMixin(\n mixinBehaviors(IronResizableBehavior, PolymerElement))))) {\n static get template() {\n return html`\n \n\n \n \n \n \n \n \n\n \n`;\n }\n\n static get is() {\n return 'vaadin-select';\n }\n\n static get version() {\n return '2.1.5';\n }\n\n static get properties() {\n return {\n /**\n * Set when the select is open\n */\n opened: {\n type: Boolean,\n value: false,\n notify: true,\n reflectToAttribute: true,\n observer: '_openedChanged'\n },\n\n /**\n * Custom function for rendering the content of the ``.\n * Receives two arguments:\n *\n * - `root` The `` internal container\n * DOM element. Append your content to it.\n * - `select` The reference to the `` element.\n */\n renderer: Function,\n\n /**\n * The error message to display when the select value is invalid\n */\n errorMessage: {\n type: String,\n value: ''\n },\n\n /**\n * String used for the label element.\n */\n label: {\n type: String\n },\n\n /**\n * It stores the the `value` property of the selected item, providing the\n * value for iron-form.\n * When there’s an item selected, it's the value of that item, otherwise\n * it's an empty string.\n * On change or initialization, the component finds the item which matches the\n * value and displays it.\n * If no value is provided to the component, it selects the first item without\n * value or empty value.\n * Hint: If you do not want to select any item by default, you can either set all\n * the values of inner vaadin-items, or set the vaadin-select value to\n * an inexistent value in the items list.\n */\n value: {\n type: String,\n value: '',\n notify: true,\n observer: '_valueChanged'\n },\n\n /**\n * The current required state of the select. True if required.\n */\n required: {\n type: Boolean,\n reflectToAttribute: true,\n observer: '_requiredChanged'\n },\n\n /**\n * Set to true if the value is invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n /**\n * The name of this element.\n */\n name: {\n type: String,\n reflectToAttribute: true\n },\n\n /**\n * A hint to the user of what can be entered in the control.\n * The placeholder will be displayed in the case that there\n * is no item selected, or the selected item has an empty\n * string label, or the selected item has no label and it's\n * DOM content is empty.\n */\n placeholder: {\n type: String\n },\n\n /**\n * When present, it specifies that the element is read-only.\n */\n readonly: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n _phone: Boolean,\n\n _phoneMediaQuery: {\n value: '(max-width: 420px), (max-height: 420px)'\n },\n\n _overlayElement: Object,\n\n _inputElement: Object,\n\n _toggleElement: Object,\n\n _items: Object,\n\n _contentTemplate: Object,\n\n _oldTemplate: Object,\n\n _oldRenderer: Object\n };\n }\n\n static get observers() {\n return [\n '_updateSelectedItem(value, _items)',\n '_updateAriaExpanded(opened, _toggleElement, _inputElement)',\n '_templateOrRendererChanged(_contentTemplate, renderer, _overlayElement)'\n ];\n }\n\n /** @private */\n constructor() {\n super();\n this._boundSetPosition = this._setPosition.bind(this);\n }\n\n /** @private */\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('iron-resize', this._boundSetPosition);\n }\n\n ready() {\n super.ready();\n\n this._overlayElement = this.shadowRoot.querySelector('vaadin-select-overlay');\n this._valueElement = this.shadowRoot.querySelector('[part=\"value\"]');\n this._toggleElement = this.shadowRoot.querySelector('[part=\"toggle-button\"]');\n this._nativeInput = this.focusElement.shadowRoot.querySelector('input');\n this._nativeInput.setAttribute('aria-hidden', true);\n this._nativeInput.setAttribute('tabindex', -1);\n this._nativeInput.style.pointerEvents = 'none';\n\n this.focusElement.addEventListener('click', e => this.opened = !this.readonly);\n this.focusElement.addEventListener('keydown', e => this._onKeyDown(e));\n\n this._observer = new FlattenedNodesObserver(this, info => this._setTemplateFromNodes(info.addedNodes));\n this._observer.flush();\n }\n\n _setTemplateFromNodes(nodes) {\n const template = Array.from(nodes).filter(node => node.localName && node.localName === 'template')[0] || this._contentTemplate;\n this._overlayElement.template = this._contentTemplate = template;\n this._setForwardHostProps();\n }\n\n _setForwardHostProps() {\n if (this._overlayElement.content) {\n const origForwardHostProp = this._overlayElement._instance && this._overlayElement._instance.forwardHostProp;\n\n if (this._overlayElement._instance) {\n this._overlayElement._instance.forwardHostProp = (...args) => {\n origForwardHostProp.apply(this._overlayElement._instance, args);\n setTimeout(() => {\n this._updateValueSlot();\n });\n };\n\n this._assignMenuElement();\n }\n }\n }\n\n /**\n * Manually invoke existing renderer.\n */\n render() {\n this._overlayElement.render();\n if (this._menuElement && this._menuElement.items) {\n this._updateSelectedItem(this.value, this._menuElement.items);\n }\n }\n\n _removeNewRendererOrTemplate(template, oldTemplate, renderer, oldRenderer) {\n if (template !== oldTemplate) {\n this._contentTemplate = undefined;\n } else if (renderer !== oldRenderer) {\n this.renderer = undefined;\n }\n }\n\n _templateOrRendererChanged(template, renderer, overlay) {\n if (!overlay) {\n return;\n }\n\n if (template && renderer) {\n this._removeNewRendererOrTemplate(template, this._oldTemplate, renderer, this._oldRenderer);\n throw new Error('You should only use either a renderer or a template for select content');\n }\n\n this._oldTemplate = template;\n this._oldRenderer = renderer;\n\n if (renderer) {\n overlay.setProperties({owner: this, renderer: renderer});\n this.render();\n\n if (overlay.content.firstChild) {\n this._assignMenuElement();\n }\n }\n }\n\n _assignMenuElement() {\n this._menuElement = Array.from(this._overlayElement.content.children).filter(element => element.localName !== 'style')[0];\n\n if (this._menuElement) {\n this._menuElement.addEventListener('items-changed', e => {\n this._items = this._menuElement.items;\n this._items.forEach(item => item.setAttribute('role', 'option'));\n });\n this._menuElement.addEventListener('selected-changed', e => this._updateValueSlot());\n this._menuElement.addEventListener('keydown', e => this._onKeyDownInside(e));\n this._menuElement.addEventListener('click', e => {\n this.__userInteraction = true;\n this.opened = false;\n }, true);\n\n this._menuElement.setAttribute('role', 'listbox');\n }\n }\n\n /** @protected */\n get focusElement() {\n return this._inputElement ||\n (this._inputElement = this.shadowRoot.querySelector('vaadin-select-text-field'));\n }\n\n /** @private */\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('iron-resize', this._boundSetPosition);\n // Making sure the select is closed and removed from DOM after detaching the select.\n this.opened = false;\n }\n\n /** @private */\n notifyResize() {\n super.notifyResize();\n if (this.positionTarget && this.opened) {\n this._setPosition();\n // Schedule another position update (to cover virtual keyboard opening for example)\n requestAnimationFrame(this._setPosition.bind(this));\n }\n }\n\n _requiredChanged(required) {\n this.setAttribute('aria-required', required);\n }\n\n _valueChanged(value, oldValue) {\n if (value === '') {\n this.focusElement.removeAttribute('has-value');\n } else {\n this.focusElement.setAttribute('has-value', '');\n }\n\n // Skip validation for the initial empty string value\n if (value === '' && oldValue === undefined) {\n return;\n }\n this.validate();\n }\n\n _onKeyDown(e) {\n if (!this.readonly && !this.opened) {\n if (/^(Enter|SpaceBar|\\s|ArrowDown|Down|ArrowUp|Up)$/.test(e.key)) {\n e.preventDefault();\n this.opened = true;\n\n } else if (/[a-zA-Z0-9]/.test(e.key) && e.key.length === 1) {\n const selected = this._menuElement.selected;\n const currentIdx = selected !== undefined ? selected : -1;\n const newIdx = this._menuElement._searchKey(currentIdx, e.key);\n if (newIdx >= 0) {\n this.__userInteraction = true;\n this._updateSelectedItem(this._items[newIdx].value, this._items);\n }\n }\n }\n }\n\n _onKeyDownInside(e) {\n if (/^(Tab)$/.test(e.key)) {\n this.opened = false;\n }\n }\n\n _openedChanged(opened, wasOpened) {\n if (opened) {\n if (\n !this._overlayElement ||\n !this._menuElement ||\n !this._toggleElement ||\n !this.focusElement ||\n this.disabled ||\n this.readonly\n ) {\n this.opened = false;\n return;\n }\n\n this._openedWithFocusRing = this.hasAttribute('focus-ring') || this.focusElement.hasAttribute('focus-ring');\n this._menuElement.focus();\n this._setPosition();\n window.addEventListener('scroll', this._boundSetPosition, true);\n } else if (wasOpened) {\n if (this._phone) {\n this._setFocused(false);\n } else {\n this.focusElement.focus();\n if (this._openedWithFocusRing) {\n this.focusElement.setAttribute('focus-ring', '');\n }\n }\n this.validate();\n window.removeEventListener('scroll', this._boundSetPosition, true);\n }\n }\n\n _hasContent(selected) {\n if (!selected) {\n return false;\n }\n return Boolean(\n selected.hasAttribute('label') ?\n selected.getAttribute('label') :\n selected.textContent.trim() || selected.children.length\n );\n }\n\n _attachSelectedItem(selected) {\n if (!selected) {\n return;\n }\n let labelItem;\n if (selected.hasAttribute('label')) {\n labelItem = document.createElement('vaadin-item');\n labelItem.textContent = selected.getAttribute('label');\n } else {\n labelItem = selected.cloneNode(true);\n }\n\n // store reference to the original item\n labelItem._sourceItem = selected;\n\n labelItem.removeAttribute('tabindex');\n\n this._valueElement.appendChild(labelItem);\n\n labelItem.selected = true;\n }\n\n _updateAriaExpanded(opened, toggleElement, inputElement) {\n toggleElement && toggleElement.setAttribute('aria-expanded', opened);\n if (inputElement && inputElement.focusElement) {\n inputElement.focusElement.setAttribute('aria-expanded', opened);\n }\n }\n\n _updateValueSlot() {\n this.opened = false;\n this._valueElement.innerHTML = '';\n\n const selected = this._items[this._menuElement.selected];\n\n const hasContent = this._hasContent(selected);\n\n // Check if text-field is using slotted input\n const slotName = this._inputElement.shadowRoot.querySelector('slot[name=\"input\"]') ? 'input' : 'value';\n\n // Toggle visibility of _valueElement vs fallback input with placeholder\n this._valueElement.slot = hasContent ? slotName : '';\n\n // Ensure the slot distribution to apply correct style scope for cloned item\n if (hasContent && window.ShadyDOM) {\n window.ShadyDOM.flush();\n }\n\n this._attachSelectedItem(selected);\n\n if (!this._valueChanging && selected) {\n this._selectedChanging = true;\n this.value = selected.value || '';\n if (this.__userInteraction) {\n this.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n this.__userInteraction = false;\n }\n delete this._selectedChanging;\n }\n }\n\n _updateSelectedItem(value, items) {\n if (items) {\n this._menuElement.selected = items.reduce((prev, item, idx) => {\n return prev === undefined && item.value === value ? idx : prev;\n }, undefined);\n if (!this._selectedChanging) {\n this._valueChanging = true;\n this._updateValueSlot();\n delete this._valueChanging;\n }\n }\n }\n\n /** @override */\n _setFocused(focused) {\n // Keep `focused` state when opening the overlay for styling purpose.\n super._setFocused(this.opened || focused);\n this.focusElement._setFocused(this.hasAttribute('focused'));\n !this.hasAttribute('focused') && this.validate();\n }\n\n _setPosition() {\n const inputRect = this._inputElement.shadowRoot.querySelector('[part~=\"input-field\"]').getBoundingClientRect();\n const viewportHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);\n const bottomAlign = inputRect.top > (viewportHeight - inputRect.height) / 2;\n\n this._overlayElement.style.left = inputRect.left + 'px';\n if (bottomAlign) {\n this._overlayElement.setAttribute('bottom-aligned', '');\n this._overlayElement.style.removeProperty('top');\n this._overlayElement.style.bottom = (viewportHeight - inputRect.bottom) + 'px';\n } else {\n this._overlayElement.removeAttribute('bottom-aligned');\n this._overlayElement.style.removeProperty('bottom');\n this._overlayElement.style.top = inputRect.top + 'px';\n }\n\n this._overlayElement.updateStyles({'--vaadin-select-text-field-width': inputRect.width + 'px'});\n }\n\n /**\n * Returns true if `value` is valid, and sets the `invalid` flag appropriately.\n *\n * @return {boolean} True if the value is valid and sets the `invalid` flag appropriately\n */\n validate() {\n return !(this.invalid = !(this.disabled || !this.required || this.value));\n }\n\n /**\n * Fired when the user commits a value change.\n *\n * @event change\n */\n}\n\ncustomElements.define(SelectElement.is, SelectElement);\n\nexport { SelectElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n/**\n\nThis is a fork of for 's internal purposes only!\nTo update:\n1. Get the most recent code from https://github.com/PolymerElements/iron-list/\n2. Remove the to avoid collisions with actual \n3. Change \"Polymer({\" to \"window.PolymerIronList = Polymer.Class({\" to expose the class\n3.1. Add @namespace\n4. Optional: Remove all properties and functions not needed by \n5. Profit!\n\n*/\n/*\n FIXME(polymer-modulizer): the above comments were extracted\n from HTML and may be out of place here. Review them and\n then delete this comment!\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';\nimport { IronScrollTargetBehavior } from '@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js';\nimport { animationFrame, idlePeriod, microTask } from '@polymer/polymer/lib/utils/async.js';\nimport { Class } from '@polymer/polymer/lib/legacy/class.js';\nimport { flush, enqueueDebouncer } from '@polymer/polymer/lib/utils/flush.js';\nimport { flush as flush$0 } from '@polymer/polymer/lib/legacy/polymer.dom.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nvar IOS = navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\\d+)/);\nvar IOS_TOUCH_SCROLLING = IOS && IOS[1] >= 8;\nvar DEFAULT_PHYSICAL_COUNT = 3;\nvar ANIMATION_FRAME = animationFrame;\nvar IDLE_TIME = idlePeriod;\nvar MICRO_TASK = microTask;\n\nexport const PolymerIronList = Class({\n\n behaviors: [\n IronResizableBehavior,\n IronScrollTargetBehavior\n ],\n\n /**\n * The ratio of hidden tiles that should remain in the scroll direction.\n * Recommended value ~0.5, so it will distribute tiles evenly in both directions.\n */\n _ratio: 0.5,\n\n /**\n * The padding-top value for the list.\n */\n _scrollerPaddingTop: 0,\n\n /**\n * This value is the same as `scrollTop`.\n */\n _scrollPosition: 0,\n\n /**\n * The sum of the heights of all the tiles in the DOM.\n */\n _physicalSize: 0,\n\n /**\n * The average `offsetHeight` of the tiles observed till now.\n */\n _physicalAverage: 0,\n\n /**\n * The number of tiles which `offsetHeight` > 0 observed until now.\n */\n _physicalAverageCount: 0,\n\n /**\n * The Y position of the item rendered in the `_physicalStart`\n * tile relative to the scrolling list.\n */\n _physicalTop: 0,\n\n /**\n * The number of items in the list.\n */\n _virtualCount: 0,\n\n /**\n * The estimated scroll height based on `_physicalAverage`\n */\n _estScrollHeight: 0,\n\n /**\n * The scroll height of the dom node\n */\n _scrollHeight: 0,\n\n /**\n * The height of the list. This is referred as the viewport in the context of list.\n */\n _viewportHeight: 0,\n\n /**\n * The width of the list. This is referred as the viewport in the context of list.\n */\n _viewportWidth: 0,\n\n /**\n * An array of DOM nodes that are currently in the tree\n * @type {?Array}\n */\n _physicalItems: null,\n\n /**\n * An array of heights for each item in `_physicalItems`\n * @type {?Array}\n */\n _physicalSizes: null,\n\n /**\n * A cached value for the first visible index.\n * See `firstVisibleIndex`\n * @type {?number}\n */\n _firstVisibleIndexVal: null,\n\n /**\n * A Polymer collection for the items.\n * @type {?Polymer.Collection}\n */\n _collection: null,\n\n /**\n * A cached value for the last visible index.\n * See `lastVisibleIndex`\n * @type {?number}\n */\n _lastVisibleIndexVal: null,\n\n /**\n * The max number of pages to render. One page is equivalent to the height of the list.\n */\n _maxPages: 2,\n\n /**\n * The virtual index of the focused item.\n */\n _focusedVirtualIndex: -1,\n\n /**\n * The maximum items per row\n */\n _itemsPerRow: 1,\n\n /**\n * The height of the row in grid layout.\n */\n _rowHeight: 0,\n\n /**\n * The cost of stamping a template in ms.\n */\n _templateCost: 0,\n\n /**\n * The bottom of the physical content.\n */\n get _physicalBottom() {\n return this._physicalTop + this._physicalSize;\n },\n\n /**\n * The bottom of the scroll.\n */\n get _scrollBottom() {\n return this._scrollPosition + this._viewportHeight;\n },\n\n /**\n * The n-th item rendered in the last physical item.\n */\n get _virtualEnd() {\n return this._virtualStart + this._physicalCount - 1;\n },\n\n /**\n * The height of the physical content that isn't on the screen.\n */\n get _hiddenContentSize() {\n var size = this.grid ? this._physicalRows * this._rowHeight : this._physicalSize;\n return size - this._viewportHeight;\n },\n\n /**\n * The maximum scroll top value.\n */\n get _maxScrollTop() {\n return this._estScrollHeight - this._viewportHeight + this._scrollOffset;\n },\n\n /**\n * The largest n-th value for an item such that it can be rendered in `_physicalStart`.\n */\n get _maxVirtualStart() {\n var virtualCount = this._convertIndexToCompleteRow(this._virtualCount);\n return Math.max(0, virtualCount - this._physicalCount);\n },\n\n set _virtualStart(val) {\n val = this._clamp(val, 0, this._maxVirtualStart);\n if (this.grid) {\n val = val - (val % this._itemsPerRow);\n }\n this._virtualStartVal = val;\n },\n\n get _virtualStart() {\n return this._virtualStartVal || 0;\n },\n\n /**\n * The k-th tile that is at the top of the scrolling list.\n */\n set _physicalStart(val) {\n val = val % this._physicalCount;\n if (val < 0) {\n val = this._physicalCount + val;\n }\n if (this.grid) {\n val = val - (val % this._itemsPerRow);\n }\n this._physicalStartVal = val;\n },\n\n get _physicalStart() {\n return this._physicalStartVal || 0;\n },\n\n /**\n * The k-th tile that is at the bottom of the scrolling list.\n */\n get _physicalEnd() {\n return (this._physicalStart + this._physicalCount - 1) % this._physicalCount;\n },\n\n set _physicalCount(val) {\n this._physicalCountVal = val;\n },\n\n get _physicalCount() {\n return this._physicalCountVal || 0;\n },\n\n /**\n * An optimal physical size such that we will have enough physical items\n * to fill up the viewport and recycle when the user scrolls.\n *\n * This default value assumes that we will at least have the equivalent\n * to a viewport of physical items above and below the user's viewport.\n */\n get _optPhysicalSize() {\n return this._viewportHeight === 0 ? Infinity : this._viewportHeight * this._maxPages;\n },\n\n /**\n * True if the current list is visible.\n */\n get _isVisible() {\n return Boolean(this.offsetWidth || this.offsetHeight);\n },\n\n /**\n * Gets the index of the first visible item in the viewport.\n *\n * @type {number}\n */\n get firstVisibleIndex() {\n var idx = this._firstVisibleIndexVal;\n if (idx == null) {\n var physicalOffset = this._physicalTop + this._scrollOffset;\n\n idx = this._iterateItems(function(pidx, vidx) {\n physicalOffset += this._getPhysicalSizeIncrement(pidx);\n\n if (physicalOffset > this._scrollPosition) {\n return this.grid ? vidx - (vidx % this._itemsPerRow) : vidx;\n }\n // Handle a partially rendered final row in grid mode\n if (this.grid && this._virtualCount - 1 === vidx) {\n return vidx - (vidx % this._itemsPerRow);\n }\n }) || 0;\n this._firstVisibleIndexVal = idx;\n }\n return idx;\n },\n\n /**\n * Gets the index of the last visible item in the viewport.\n *\n * @type {number}\n */\n get lastVisibleIndex() {\n var idx = this._lastVisibleIndexVal;\n if (idx == null) {\n if (this.grid) {\n idx = Math.min(this._virtualCount, this.firstVisibleIndex + this._estRowsInView * this._itemsPerRow - 1);\n } else {\n var physicalOffset = this._physicalTop + this._scrollOffset;\n this._iterateItems(function(pidx, vidx) {\n if (physicalOffset < this._scrollBottom) {\n idx = vidx;\n }\n physicalOffset += this._getPhysicalSizeIncrement(pidx);\n });\n }\n this._lastVisibleIndexVal = idx;\n }\n return idx;\n },\n\n get _scrollOffset() {\n return this._scrollerPaddingTop;\n },\n\n attached: function() {\n this._debounce('_render', this._render, ANIMATION_FRAME);\n // `iron-resize` is fired when the list is attached if the event is added\n // before attached causing unnecessary work.\n this.listen(this, 'iron-resize', '_resizeHandler');\n },\n\n detached: function() {\n this.unlisten(this, 'iron-resize', '_resizeHandler');\n },\n\n /**\n * Invoke this method if you dynamically update the viewport's\n * size or CSS padding.\n *\n * @method updateViewportBoundaries\n */\n updateViewportBoundaries: function() {\n var styles = window.getComputedStyle(this);\n this._scrollerPaddingTop = this.scrollTarget === this ? 0 : parseInt(styles['padding-top'], 10);\n this._isRTL = Boolean(styles.direction === 'rtl');\n this._viewportWidth = this.$.items.offsetWidth;\n this._viewportHeight = this._scrollTargetHeight;\n this.grid && this._updateGridMetrics();\n },\n\n /**\n * Recycles the physical items when needed.\n */\n _scrollHandler: function() {\n var scrollTop = Math.max(0, Math.min(this._maxScrollTop, this._scrollTop));\n var delta = scrollTop - this._scrollPosition;\n var isScrollingDown = delta >= 0;\n // Track the current scroll position.\n this._scrollPosition = scrollTop;\n // Clear indexes for first and last visible indexes.\n this._firstVisibleIndexVal = null;\n this._lastVisibleIndexVal = null;\n // Random access.\n if (Math.abs(delta) > this._physicalSize && this._physicalSize > 0) {\n delta = delta - this._scrollOffset;\n var idxAdjustment = Math.round(delta / this._physicalAverage) * this._itemsPerRow;\n this._virtualStart = this._virtualStart + idxAdjustment;\n this._physicalStart = this._physicalStart + idxAdjustment;\n // Estimate new physical offset.\n this._physicalTop = Math.floor(this._virtualStart / this._itemsPerRow) * this._physicalAverage;\n this._update();\n } else if (this._physicalCount > 0) {\n var reusables = this._getReusables(isScrollingDown);\n if (isScrollingDown) {\n this._physicalTop = reusables.physicalTop;\n this._virtualStart = this._virtualStart + reusables.indexes.length;\n this._physicalStart = this._physicalStart + reusables.indexes.length;\n } else {\n this._virtualStart = this._virtualStart - reusables.indexes.length;\n this._physicalStart = this._physicalStart - reusables.indexes.length;\n }\n this._update(reusables.indexes, isScrollingDown ? null : reusables.indexes);\n this._debounce('_increasePoolIfNeeded', this._increasePoolIfNeeded.bind(this, 0), MICRO_TASK);\n }\n },\n\n /**\n * Returns an object that contains the indexes of the physical items\n * that might be reused and the physicalTop.\n *\n * @param {boolean} fromTop If the potential reusable items are above the scrolling region.\n */\n _getReusables: function(fromTop) {\n var ith, offsetContent, physicalItemHeight;\n var idxs = [];\n var protectedOffsetContent = this._hiddenContentSize * this._ratio;\n var virtualStart = this._virtualStart;\n var virtualEnd = this._virtualEnd;\n var physicalCount = this._physicalCount;\n var top = this._physicalTop + this._scrollOffset;\n var bottom = this._physicalBottom + this._scrollOffset;\n var scrollTop = this._scrollTop;\n var scrollBottom = this._scrollBottom;\n\n if (fromTop) {\n ith = this._physicalStart;\n offsetContent = scrollTop - top;\n } else {\n ith = this._physicalEnd;\n offsetContent = bottom - scrollBottom;\n }\n // eslint-disable-next-line no-constant-condition\n while (true) {\n physicalItemHeight = this._getPhysicalSizeIncrement(ith);\n offsetContent = offsetContent - physicalItemHeight;\n if (idxs.length >= physicalCount || offsetContent <= protectedOffsetContent) {\n break;\n }\n if (fromTop) {\n // Check that index is within the valid range.\n if (virtualEnd + idxs.length + 1 >= this._virtualCount) {\n break;\n }\n // Check that the index is not visible.\n if (top + physicalItemHeight >= scrollTop - this._scrollOffset) {\n break;\n }\n idxs.push(ith);\n top = top + physicalItemHeight;\n ith = (ith + 1) % physicalCount;\n } else {\n // Check that index is within the valid range.\n if (virtualStart - idxs.length <= 0) {\n break;\n }\n // Check that the index is not visible.\n if (top + this._physicalSize - physicalItemHeight <= scrollBottom) {\n break;\n }\n idxs.push(ith);\n top = top - physicalItemHeight;\n ith = (ith === 0) ? physicalCount - 1 : ith - 1;\n }\n }\n return {indexes: idxs, physicalTop: top - this._scrollOffset};\n },\n\n /**\n * Update the list of items, starting from the `_virtualStart` item.\n * @param {!Array=} itemSet\n * @param {!Array=} movingUp\n */\n _update: function(itemSet, movingUp) {\n if ((itemSet && itemSet.length === 0) || this._physicalCount === 0) {\n return;\n }\n this._manageFocus();\n this._assignModels(itemSet);\n this._updateMetrics(itemSet);\n // Adjust offset after measuring.\n if (movingUp) {\n while (movingUp.length) {\n var idx = movingUp.pop();\n this._physicalTop -= this._getPhysicalSizeIncrement(idx);\n }\n }\n this._positionItems();\n this._updateScrollerSize();\n },\n\n _isClientFull: function() {\n return this._scrollBottom != 0 && this._physicalBottom - 1 >= this._scrollBottom &&\n this._physicalTop <= this._scrollPosition;\n },\n\n /**\n * Increases the pool size.\n */\n _increasePoolIfNeeded: function(count) {\n var nextPhysicalCount = this._clamp(this._physicalCount + count,\n DEFAULT_PHYSICAL_COUNT, this._virtualCount - this._virtualStart);\n nextPhysicalCount = this._convertIndexToCompleteRow(nextPhysicalCount);\n var delta = nextPhysicalCount - this._physicalCount;\n var nextIncrease = Math.round(this._physicalCount * 0.5);\n\n if (delta < 0) {\n return;\n }\n if (delta > 0) {\n var ts = window.performance.now();\n // Concat arrays in place.\n [].push.apply(this._physicalItems, this._createPool(delta));\n // Push 0s into physicalSizes. Can't use Array.fill because IE11 doesn't support it.\n for (var i = 0; i < delta; i++) {\n this._physicalSizes.push(0);\n }\n this._physicalCount = this._physicalCount + delta;\n // Update the physical start if it needs to preserve the model of the focused item.\n // In this situation, the focused item is currently rendered and its model would\n // have changed after increasing the pool if the physical start remained unchanged.\n if (this._physicalStart > this._physicalEnd &&\n this._isIndexRendered(this._focusedVirtualIndex) &&\n this._getPhysicalIndex(this._focusedVirtualIndex) < this._physicalEnd) {\n this._physicalStart = this._physicalStart + delta;\n }\n this._update();\n this._templateCost = (window.performance.now() - ts) / delta;\n nextIncrease = Math.round(this._physicalCount * 0.5);\n }\n // The upper bounds is not fixed when dealing with a grid that doesn't\n // fill it's last row with the exact number of items per row.\n if (this._virtualEnd >= this._virtualCount - 1 || nextIncrease === 0) {\n // Do nothing.\n } else if (!this._isClientFull()) {\n this._debounce(\n '_increasePoolIfNeeded',\n this._increasePoolIfNeeded.bind(\n this,\n nextIncrease\n ), MICRO_TASK);\n } else if (this._physicalSize < this._optPhysicalSize) {\n // Yield and increase the pool during idle time until the physical size is optimal.\n this._debounce(\n '_increasePoolIfNeeded',\n this._increasePoolIfNeeded.bind(\n this,\n this._clamp(Math.round(50 / this._templateCost), 1, nextIncrease)\n ), IDLE_TIME);\n }\n },\n\n /**\n * Renders the a new list.\n */\n _render: function() {\n if (!this.isAttached || !this._isVisible) {\n return;\n }\n if (this._physicalCount !== 0) {\n var reusables = this._getReusables(true);\n this._physicalTop = reusables.physicalTop;\n this._virtualStart = this._virtualStart + reusables.indexes.length;\n this._physicalStart = this._physicalStart + reusables.indexes.length;\n this._update(reusables.indexes);\n this._update();\n this._increasePoolIfNeeded(0);\n } else if (this._virtualCount > 0) {\n // Initial render\n this.updateViewportBoundaries();\n this._increasePoolIfNeeded(DEFAULT_PHYSICAL_COUNT);\n }\n },\n\n /**\n * Called when the items have changed. That is, reassignments\n * to `items`, splices or updates to a single item.\n */\n _itemsChanged: function(change) {\n if (change.path === 'items') {\n this._virtualStart = 0;\n this._physicalTop = 0;\n this._virtualCount = this.items ? this.items.length : 0;\n this._collection = this.items && undefined ?\n undefined.get(this.items) : null;\n this._physicalIndexForKey = {};\n this._firstVisibleIndexVal = null;\n this._lastVisibleIndexVal = null;\n this._physicalCount = this._physicalCount || 0;\n this._physicalItems = this._physicalItems || [];\n this._physicalSizes = this._physicalSizes || [];\n this._physicalStart = 0;\n if (this._scrollTop > this._scrollOffset) {\n this._resetScrollPosition(0);\n }\n this._removeFocusedItem();\n this._debounce('_render', this._render, ANIMATION_FRAME);\n }\n },\n\n /**\n * Executes a provided function per every physical index in `itemSet`\n * `itemSet` default value is equivalent to the entire set of physical indexes.\n *\n * @param {!function(number, number)} fn\n * @param {!Array=} itemSet\n */\n _iterateItems: function(fn, itemSet) {\n var pidx, vidx, rtn, i;\n\n if (arguments.length === 2 && itemSet) {\n for (i = 0; i < itemSet.length; i++) {\n pidx = itemSet[i];\n vidx = this._computeVidx(pidx);\n if ((rtn = fn.call(this, pidx, vidx)) != null) {\n return rtn;\n }\n }\n } else {\n pidx = this._physicalStart;\n vidx = this._virtualStart;\n for (; pidx < this._physicalCount; pidx++, vidx++) {\n if ((rtn = fn.call(this, pidx, vidx)) != null) {\n return rtn;\n }\n }\n for (pidx = 0; pidx < this._physicalStart; pidx++, vidx++) {\n if ((rtn = fn.call(this, pidx, vidx)) != null) {\n return rtn;\n }\n }\n }\n },\n\n /**\n * Returns the virtual index for a given physical index\n *\n * @param {number} pidx Physical index\n * @return {number}\n */\n _computeVidx: function(pidx) {\n if (pidx >= this._physicalStart) {\n return this._virtualStart + (pidx - this._physicalStart);\n }\n return this._virtualStart + (this._physicalCount - this._physicalStart) + pidx;\n },\n\n /**\n * Updates the height for a given set of items.\n *\n * @param {!Array=} itemSet\n */\n _updateMetrics: function(itemSet) {\n // Make sure we distributed all the physical items\n // so we can measure them.\n flush ? flush() : flush$0();\n\n var newPhysicalSize = 0;\n var oldPhysicalSize = 0;\n var prevAvgCount = this._physicalAverageCount;\n var prevPhysicalAvg = this._physicalAverage;\n\n this._iterateItems(function(pidx, vidx) {\n oldPhysicalSize += this._physicalSizes[pidx];\n this._physicalSizes[pidx] = this._physicalItems[pidx].offsetHeight;\n newPhysicalSize += this._physicalSizes[pidx];\n this._physicalAverageCount += this._physicalSizes[pidx] ? 1 : 0;\n }, itemSet);\n\n if (this.grid) {\n this._updateGridMetrics();\n this._physicalSize = Math.ceil(this._physicalCount / this._itemsPerRow) * this._rowHeight;\n } else {\n oldPhysicalSize = (this._itemsPerRow === 1) ?\n oldPhysicalSize :\n Math.ceil(this._physicalCount / this._itemsPerRow) * this._rowHeight;\n this._physicalSize = this._physicalSize + newPhysicalSize - oldPhysicalSize;\n this._itemsPerRow = 1;\n }\n // Update the average if it measured something.\n if (this._physicalAverageCount !== prevAvgCount) {\n this._physicalAverage = Math.round(\n ((prevPhysicalAvg * prevAvgCount) + newPhysicalSize) /\n this._physicalAverageCount);\n }\n },\n\n /**\n * Updates the position of the physical items.\n */\n _positionItems: function() {\n this._adjustScrollPosition();\n\n var y = this._physicalTop;\n\n this._iterateItems(function(pidx, vidx) {\n this.translate3d(0, y + 'px', 0, this._physicalItems[pidx]);\n y += this._physicalSizes[pidx];\n });\n },\n\n _getPhysicalSizeIncrement: function(pidx) {\n if (!this.grid) {\n return this._physicalSizes[pidx];\n }\n if (this._computeVidx(pidx) % this._itemsPerRow !== this._itemsPerRow - 1) {\n return 0;\n }\n return this._rowHeight;\n },\n\n /**\n * Adjusts the scroll position when it was overestimated.\n */\n _adjustScrollPosition: function() {\n var deltaHeight = this._virtualStart === 0 ? this._physicalTop : Math.min(this._scrollPosition + this._physicalTop, 0);\n // Note: the delta can be positive or negative.\n if (deltaHeight !== 0) {\n this._physicalTop = this._physicalTop - deltaHeight;\n var scrollTop = this._scrollTop;\n // juking scroll position during interial scrolling on iOS is no bueno\n if (!IOS_TOUCH_SCROLLING && scrollTop > 0) {\n this._resetScrollPosition(scrollTop - deltaHeight);\n }\n }\n },\n\n /**\n * Sets the position of the scroll.\n */\n _resetScrollPosition: function(pos) {\n if (this.scrollTarget && pos >= 0) {\n this._scrollTop = pos;\n this._scrollPosition = this._scrollTop;\n }\n },\n\n /**\n * Sets the scroll height, that's the height of the content,\n *\n * @param {boolean=} forceUpdate If true, updates the height no matter what.\n */\n _updateScrollerSize: function(forceUpdate) {\n if (this.grid) {\n this._estScrollHeight = this._virtualRowCount * this._rowHeight;\n } else {\n this._estScrollHeight = (this._physicalBottom +\n Math.max(this._virtualCount - this._physicalCount - this._virtualStart, 0) * this._physicalAverage);\n }\n forceUpdate = forceUpdate || this._scrollHeight === 0;\n forceUpdate = forceUpdate || this._scrollPosition >= this._estScrollHeight - this._physicalSize;\n forceUpdate = forceUpdate || this.grid && this.$.items.style.height < this._estScrollHeight;\n // Amortize height adjustment, so it won't trigger large repaints too often.\n if (forceUpdate || Math.abs(this._estScrollHeight - this._scrollHeight) >= this._viewportHeight) {\n this.$.items.style.height = this._estScrollHeight + 'px';\n this._scrollHeight = this._estScrollHeight;\n }\n },\n\n /**\n * Scroll to a specific index in the virtual list regardless\n * of the physical items in the DOM tree.\n *\n * @method scrollToIndex\n * @param {number} idx The index of the item\n */\n scrollToIndex: function(idx) {\n if (typeof idx !== 'number' || idx < 0 || idx > this.items.length - 1) {\n return;\n }\n flush ? flush() : flush$0();\n // Items should have been rendered prior scrolling to an index.\n if (this._physicalCount === 0) {\n return;\n }\n idx = this._clamp(idx, 0, this._virtualCount - 1);\n // Update the virtual start only when needed.\n if (!this._isIndexRendered(idx) || idx >= this._maxVirtualStart) {\n this._virtualStart = this.grid ? (idx - this._itemsPerRow * 2) : (idx - 1);\n }\n this._manageFocus();\n this._assignModels();\n this._updateMetrics();\n // Estimate new physical offset.\n this._physicalTop = Math.floor(this._virtualStart / this._itemsPerRow) * this._physicalAverage;\n\n var currentTopItem = this._physicalStart;\n var currentVirtualItem = this._virtualStart;\n var targetOffsetTop = 0;\n var hiddenContentSize = this._hiddenContentSize;\n // scroll to the item as much as we can.\n while (currentVirtualItem < idx && targetOffsetTop <= hiddenContentSize) {\n targetOffsetTop = targetOffsetTop + this._getPhysicalSizeIncrement(currentTopItem);\n currentTopItem = (currentTopItem + 1) % this._physicalCount;\n currentVirtualItem++;\n }\n this._updateScrollerSize(true);\n this._positionItems();\n this._resetScrollPosition(this._physicalTop + this._scrollOffset + targetOffsetTop);\n this._increasePoolIfNeeded(0);\n // clear cached visible index.\n this._firstVisibleIndexVal = null;\n this._lastVisibleIndexVal = null;\n },\n\n /**\n * Reset the physical average and the average count.\n */\n _resetAverage: function() {\n this._physicalAverage = 0;\n this._physicalAverageCount = 0;\n },\n\n /**\n * A handler for the `iron-resize` event triggered by `IronResizableBehavior`\n * when the element is resized.\n */\n _resizeHandler: function() {\n this._debounce('_render', function() {\n // clear cached visible index.\n this._firstVisibleIndexVal = null;\n this._lastVisibleIndexVal = null;\n // Skip the resize event on touch devices when the address bar slides up.\n this.updateViewportBoundaries();\n if (this._isVisible) {\n // Reinstall the scroll event listener.\n this.toggleScrollListener(true);\n this._resetAverage();\n this._render();\n } else {\n // Uninstall the scroll event listener.\n this.toggleScrollListener(false);\n }\n }, ANIMATION_FRAME);\n },\n\n /**\n * Converts a random index to the index of the item that completes it's row.\n * Allows for better order and fill computation when grid == true.\n */\n _convertIndexToCompleteRow: function(idx) {\n // when grid == false _itemPerRow can be unset.\n this._itemsPerRow = this._itemsPerRow || 1;\n return this.grid ? Math.ceil(idx / this._itemsPerRow) * this._itemsPerRow : idx;\n },\n\n _isIndexRendered: function(idx) {\n return idx >= this._virtualStart && idx <= this._virtualEnd;\n },\n\n _getPhysicalIndex: function(vidx) {\n return (this._physicalStart + (vidx - this._virtualStart)) % this._physicalCount;\n },\n\n _clamp: function(v, min, max) {\n return Math.min(max, Math.max(min, v));\n },\n\n _debounce: function(name, cb, asyncModule) {\n this._debouncers = this._debouncers || {};\n this._debouncers[name] = Debouncer.debounce(\n this._debouncers[name],\n asyncModule,\n cb.bind(this));\n enqueueDebouncer(this._debouncers[name]);\n }\n\n});\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { afterNextRender } from '@polymer/polymer/lib/utils/render-status.js';\n\nimport { animationFrame } from '@polymer/polymer/lib/utils/async.js';\nimport { flush } from '@polymer/polymer/lib/utils/flush.js';\nimport { PolymerIronList } from './iron-list.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\n/**\n * This Element is used internally by vaadin-grid.\n *\n * @private\n */\nclass GridScrollerElement extends PolymerIronList {\n\n static get is() {\n return 'vaadin-grid-scroller';\n }\n\n static get properties() {\n return {\n size: {\n type: Number,\n notify: true\n },\n _vidxOffset: {\n value: 0\n }\n };\n }\n\n static get observers() {\n return [\n '_effectiveSizeChanged(_effectiveSize)'\n ];\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._scrollHandler();\n }\n\n /**\n * @protected\n */\n _updateScrollerItem(item, index) {}\n /**\n * @protected\n */\n _afterScroll() {}\n /**\n * @protected\n */\n _getRowTarget() {}\n /**\n * @protected\n */\n _createScrollerRows() {}\n /**\n * @protected\n */\n _canPopulate() {}\n\n /**\n * @private\n */\n scrollToIndex(index) {\n this._warnPrivateAPIAccess('scrollToIndex');\n\n if (index > 0) {\n this._pendingScrollToIndex = null;\n }\n if (!parseInt(this.$.items.style.borderTopWidth) && index > 0) {\n // Schedule another scroll to be invoked once init is complete\n this._pendingScrollToIndex = index;\n }\n\n this._scrollingToIndex = true;\n index = Math.min(Math.max(index, 0), this._effectiveSize - 1);\n this.$.table.scrollTop = index / this._effectiveSize * (this.$.table.scrollHeight - this.$.table.offsetHeight);\n this._scrollHandler();\n\n if (this._accessIronListAPI(() => this._maxScrollTop) && this._virtualCount < this._effectiveSize) {\n this._adjustVirtualIndexOffset(1000000);\n }\n\n this._accessIronListAPI(() => super.scrollToIndex(index - this._vidxOffset));\n this._scrollHandler();\n\n // Ensure scroll position\n const row = Array.from(this.$.items.children).filter(child => child.index === index)[0];\n if (row) {\n const headerOffset = row.getBoundingClientRect().top - this.$.header.getBoundingClientRect().bottom;\n if (Math.abs(headerOffset) > 1) {\n this.$.table.scrollTop += headerOffset;\n this._scrollHandler();\n }\n }\n\n this._scrollingToIndex = false;\n }\n\n _effectiveSizeChanged(size) {\n let fvi; // first visible (adjusted) index\n let fviOffset = 0;\n this._iterateItems((pidx, vidx) => {\n if (vidx === this._firstVisibleIndex) {\n const row = this._physicalItems[pidx];\n fvi = row.index;\n fviOffset = row.getBoundingClientRect().top;\n }\n });\n\n if (this.items && size < this.items.length) {\n // Size was reduced, scroll to 0 first\n this._scrollTop = 0;\n }\n if (!Array.isArray(this.items)) {\n // Edge/IE seems to have the lowest maximum\n const maxVirtualItems = this._edge || this._ie ? 30000 : 100000;\n this.items = {length: Math.min(size, maxVirtualItems)};\n }\n\n this._accessIronListAPI(() => super._itemsChanged({path: 'items'}));\n\n this._virtualCount = Math.min(this.items.length, size) || 0;\n\n if (this._scrollTop === 0) {\n this._accessIronListAPI(() => this._scrollToIndex(Math.min(size - 1, fvi)));\n this._iterateItems((pidx, vidx) => {\n const row = this._physicalItems[pidx];\n if (row.index === fvi) {\n this.$.table.scrollTop += Math.round(row.getBoundingClientRect().top - fviOffset);\n }\n // Restore keyboard focus to the right cell\n if (row.index === this._focusedItemIndex && this._itemsFocusable && this.$.items.contains(this.shadowRoot.activeElement)) {\n const cellIndex = Array.from(this._itemsFocusable.parentElement.children).indexOf(this._itemsFocusable);\n row.children[cellIndex].focus();\n }\n });\n }\n this._assignModels();\n requestAnimationFrame(() => this._update());\n }\n\n _positionItems() {\n this._adjustScrollPosition();\n\n let rePosition;\n if (isNaN(this._physicalTop)) {\n rePosition = true;\n this._physicalTop = 0;\n }\n\n let y = this._physicalTop;\n this._iterateItems((pidx, vidx) => {\n this._physicalItems[pidx].style.transform = `translateY(${y}px)`;\n y += this._physicalSizes[pidx];\n });\n\n if (rePosition) {\n this._scrollToIndex(0);\n }\n }\n\n _increasePoolIfNeeded(count) {\n if ((count === 0 && this._scrollingToIndex) || !this._canPopulate() || !this._effectiveSize) {\n return;\n }\n\n if (!this._initialPoolCreated) {\n this._initialPoolCreated = true;\n super._increasePoolIfNeeded(25);\n } else if (this._optPhysicalSize !== Infinity) {\n this._debounceIncreasePool = Debouncer.debounce(\n this._debounceIncreasePool,\n animationFrame,\n () => {\n this._updateMetrics();\n const remainingPhysicalSize = this._optPhysicalSize - this._physicalSize;\n let estimatedMissingRowCount = Math.ceil(remainingPhysicalSize / this._physicalAverage);\n\n if (this._physicalCount + estimatedMissingRowCount > this._effectiveSize) {\n // Do not increase the physical item count above the this._effectiveSize\n estimatedMissingRowCount = Math.max(0, this._effectiveSize - this._physicalCount);\n }\n\n if (this._physicalSize && estimatedMissingRowCount > 0) {\n super._increasePoolIfNeeded(estimatedMissingRowCount);\n // Ensure the rows are in order after increasing pool\n this.__reorderChildNodes();\n }\n });\n }\n }\n\n __reorderChildNodes() {\n const childNodes = Array.from(this.$.items.childNodes);\n const rowsInOrder = !!childNodes.reduce((inOrder, current, currentIndex, array) => {\n if (currentIndex === 0 || array[currentIndex - 1].index === current.index - 1) {\n return inOrder;\n }\n }, true);\n\n if (!rowsInOrder) {\n childNodes.sort((row1, row2) => {\n return row1.index - row2.index;\n }).forEach(row => this.$.items.appendChild(row));\n }\n }\n\n _createPool(size) {\n const fragment = document.createDocumentFragment();\n const physicalItems = this._createScrollerRows(size);\n\n physicalItems.forEach(inst => fragment.appendChild(inst));\n this._getRowTarget().appendChild(fragment);\n\n // Weird hack needed to get Safari to actually distribute slots\n const content = this.querySelector('[slot]');\n if (content) {\n const slot = content.getAttribute('slot');\n content.setAttribute('slot', 'foo-bar');\n content.setAttribute('slot', slot);\n }\n\n this._updateHeaderFooterMetrics();\n\n afterNextRender(this, () => this.notifyResize());\n return physicalItems;\n }\n\n /**\n * Assigns the data models to a given set of items.\n * @param {!Array=} itemSet\n */\n _assignModels(itemSet) {\n this._iterateItems((pidx, vidx) => {\n const el = this._physicalItems[pidx];\n this._toggleAttribute('hidden', vidx >= this._effectiveSize, el);\n this._updateScrollerItem(el, vidx + (this._vidxOffset || 0));\n }, itemSet);\n }\n\n _scrollHandler() {\n const delta = this.$.table.scrollTop - this._scrollPosition;\n this._accessIronListAPI(super._scrollHandler);\n const oldOffset = this._vidxOffset;\n if (this._accessIronListAPI(() => this._maxScrollTop) && this._virtualCount < this._effectiveSize) {\n this._adjustVirtualIndexOffset(delta);\n }\n if (this._vidxOffset !== oldOffset) {\n this._update();\n }\n this._afterScroll();\n }\n\n _adjustVirtualIndexOffset(delta) {\n if (Math.abs(delta) > 10000) {\n if (this._noScale) {\n this._noScale = false;\n return;\n }\n const scale = this.$.table.scrollTop / (this.$.table.scrollHeight - this.$.table.offsetHeight);\n const offset = scale * this._effectiveSize;\n this._vidxOffset = Math.round(offset - scale * this._virtualCount);\n } else {\n // Make sure user can always swipe/wheel scroll to the start and end\n const oldOffset = this._vidxOffset || 0;\n const threshold = 1000;\n const maxShift = 100;\n // At start\n if (this._scrollTop === 0) {\n this._vidxOffset = 0;\n if (oldOffset !== this._vidxOffset) {\n super.scrollToIndex(0);\n }\n } else if (this.firstVisibleIndex < threshold && this._vidxOffset > 0) {\n this._vidxOffset -= Math.min(this._vidxOffset, maxShift);\n if (oldOffset !== this._vidxOffset) {\n super.scrollToIndex(this.firstVisibleIndex + (oldOffset - this._vidxOffset));\n }\n this._noScale = true;\n }\n // At end\n const maxOffset = this._effectiveSize - this._virtualCount;\n if (this._scrollTop >= this._maxScrollTop && this._maxScrollTop > 0) {\n this._vidxOffset = maxOffset;\n if (oldOffset !== this._vidxOffset) {\n super.scrollToIndex(this._virtualCount);\n }\n } else if (this.firstVisibleIndex > this._virtualCount - threshold && this._vidxOffset < maxOffset) {\n this._vidxOffset += Math.min(maxOffset - this._vidxOffset, maxShift);\n if (oldOffset !== this._vidxOffset) {\n super.scrollToIndex(this.firstVisibleIndex - (this._vidxOffset - oldOffset));\n }\n this._noScale = true;\n }\n }\n }\n\n _accessIronListAPI(cb) {\n this._warnPrivateAPIAccessAsyncEnabled = false;\n const returnValue = cb.apply(this);\n this._debouncerWarnPrivateAPIAccess = Debouncer.debounce(\n this._debouncerWarnPrivateAPIAccess,\n animationFrame,\n () => this._warnPrivateAPIAccessAsyncEnabled = true\n );\n return returnValue;\n }\n\n /* Allow iron-list to access its APIs from debounced callbacks without warns */\n _debounceRender(cb, asyncModule) {\n super._debounceRender(() => this._accessIronListAPI(cb), asyncModule);\n }\n\n /* Warn when iron-list APIs are being accessed directly */\n _warnPrivateAPIAccess(apiName) {\n if (this._warnPrivateAPIAccessAsyncEnabled) {\n console.warn(`Accessing private API (${apiName})!`);\n }\n }\n\n _render() {\n this._accessIronListAPI(super._render);\n }\n\n _createFocusBackfillItem() { /* Ignore */ }\n _multiSelectionChanged() { /* Ignore */ }\n clearSelection() { /* Ignore */ }\n _itemsChanged() { /* Ignore */ }\n _manageFocus() { /* Ignore */ }\n _removeFocusedItem() { /* Ignore */ }\n\n get _firstVisibleIndex() {\n return this._accessIronListAPI(() => super.firstVisibleIndex);\n }\n get _lastVisibleIndex() {\n return this._accessIronListAPI(() => super.lastVisibleIndex);\n }\n _scrollToIndex(index) {\n this._accessIronListAPI(() => this.scrollToIndex(index));\n }\n get firstVisibleIndex() {\n this._warnPrivateAPIAccess('firstVisibleIndex'); return super.firstVisibleIndex;\n }\n set firstVisibleIndex(value) {\n this._warnPrivateAPIAccess('firstVisibleIndex'); super.firstVisibleIndex = value;\n }\n get lastVisibleIndex() {\n this._warnPrivateAPIAccess('lastVisibleIndex'); return super.lastVisibleIndex;\n }\n set lastVisibleIndex(value) {\n this._warnPrivateAPIAccess('lastVisibleIndex'); super.lastVisibleIndex = value;\n }\n updateViewportBoundaries() {\n this._warnPrivateAPIAccess('updateViewportBoundaries'); super.updateViewportBoundaries.apply(this, arguments);\n }\n _resizeHandler() {\n super._resizeHandler();\n flush();\n }\n}\n\ncustomElements.define(GridScrollerElement.is, GridScrollerElement);\n\nexport { GridScrollerElement as ScrollerElement };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const A11yMixin = superClass => class A11yMixin extends superClass {\n static get observers() {\n return [\n '_a11yUpdateGridSize(size, _columnTree, _columnTree.*)'\n ];\n }\n\n _a11yGetHeaderRowCount(_columnTree) {\n return _columnTree.filter(level => level.some(col => col._headerTemplate || col.headerRenderer || col.path || col.header)).length;\n }\n\n _a11yGetFooterRowCount(_columnTree) {\n return _columnTree.filter(level => level.some(col => col._headerTemplate || col.headerRenderer)).length;\n }\n\n _a11yUpdateGridSize(size, _columnTree) {\n if (size === undefined || _columnTree === undefined) {\n return;\n }\n\n const bodyColumns = _columnTree[_columnTree.length - 1];\n this.$.table.setAttribute(\n 'aria-rowcount',\n size + this._a11yGetHeaderRowCount(_columnTree) + this._a11yGetFooterRowCount(_columnTree)\n );\n this.$.table.setAttribute('aria-colcount', bodyColumns && bodyColumns.length || 0);\n\n this._a11yUpdateHeaderRows();\n this._a11yUpdateFooterRows();\n }\n\n _a11yUpdateHeaderRows() {\n Array.from(this.$.header.children).forEach((headerRow, index) =>\n headerRow.setAttribute('aria-rowindex', index + 1)\n );\n }\n\n _a11yUpdateFooterRows() {\n Array.from(this.$.footer.children).forEach((footerRow, index) =>\n footerRow.setAttribute(\n 'aria-rowindex',\n this._a11yGetHeaderRowCount(this._columnTree) + this.size + index + 1\n )\n );\n }\n\n _a11yUpdateRowRowindex(row, index) {\n row.setAttribute('aria-rowindex', index + this._a11yGetHeaderRowCount(this._columnTree) + 1);\n }\n\n _a11yUpdateRowSelected(row, selected) {\n // Jaws reads selection only for rows, NVDA only for cells\n row.setAttribute('aria-selected', Boolean(selected));\n Array.from(row.children).forEach(cell =>\n cell.setAttribute('aria-selected', Boolean(selected))\n );\n }\n\n _a11yUpdateRowLevel(row, level) {\n row.setAttribute('aria-level', level + 1);\n }\n\n _a11yUpdateRowDetailsOpened(row, detailsOpened) {\n Array.from(row.children).forEach(cell => {\n if (typeof detailsOpened === 'boolean') {\n cell.setAttribute('aria-expanded', detailsOpened);\n } else {\n if (cell.hasAttribute('aria-expanded')) {\n cell.removeAttribute('aria-expanded');\n }\n }\n });\n }\n\n _a11ySetRowDetailsCell(row, detailsCell) {\n Array.from(row.children).forEach(cell => {\n if (cell !== detailsCell) {\n cell.setAttribute('aria-controls', detailsCell.id);\n }\n });\n }\n\n _a11yUpdateCellColspan(cell, colspan) {\n cell.setAttribute('aria-colspan', Number(colspan));\n }\n\n _a11yUpdateSorters() {\n Array.from(this.querySelectorAll('vaadin-grid-sorter')).forEach(sorter => {\n let cellContent = sorter.parentNode;\n while (cellContent && cellContent.localName !== 'vaadin-grid-cell-content') {\n cellContent = cellContent.parentNode;\n }\n if (cellContent && cellContent.assignedSlot) {\n const cell = cellContent.assignedSlot.parentNode;\n cell.setAttribute('aria-sort', {\n 'asc': 'ascending',\n 'desc': 'descending'\n }[String(sorter.direction)] || 'none');\n }\n });\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const ActiveItemMixin = superClass => class ActiveItemMixin extends superClass {\n\n static get properties() {\n return {\n /**\n * The item user has last interacted with. Turns to `null` after user deactivates\n * the item by re-interacting with the currently active item.\n */\n activeItem: {\n type: Object,\n notify: true,\n value: null\n }\n };\n }\n\n ready() {\n super.ready();\n\n this.$.scroller.addEventListener('click', this._onClick.bind(this));\n this.addEventListener('cell-activate', this._activateItem.bind(this));\n }\n\n _activateItem(e) {\n const model = e.detail.model;\n const clickedItem = model ? model.item : null;\n\n if (clickedItem) {\n this.activeItem = !this._itemsEqual(this.activeItem, clickedItem) ? clickedItem : null;\n }\n }\n\n // we need to listen to click instead of tap because on mobile safari, the\n // document.activeElement has not been updated (focus has not been shifted)\n // yet at the point when tap event is being executed.\n _onClick(e) {\n if (e.defaultPrevented) {\n // Something has handled this click already, e. g., \n return;\n }\n\n const path = e.composedPath();\n const cell = path[path.indexOf(this.$.table) - 3];\n if (!cell || cell.getAttribute('part').indexOf('details-cell') > -1) {\n return;\n }\n const cellContent = cell._content;\n\n const activeElement = this.getRootNode().activeElement;\n const cellContentHasFocus = cellContent.contains(activeElement) &&\n // MSIE bug: flex children receive focus. Make type & attributes check.\n (!this._ie || this._isFocusable(activeElement));\n if (!cellContentHasFocus && !this._isFocusable(e.target)) {\n this.dispatchEvent(new CustomEvent('cell-activate', {detail: {\n model: this.__getRowModel(cell.parentElement)\n }}));\n }\n }\n\n _isFocusable(target) {\n if (!target.parentNode) {\n return false;\n }\n const focusables = Array.from(target.parentNode\n .querySelectorAll('[tabindex], button, input, select, textarea, object, iframe, label, a[href], area[href]'))\n .filter(element => element.getAttribute('part') !== 'cell body-cell');\n\n const isFocusableElement = focusables.indexOf(target) !== -1;\n return !target.disabled && isFocusableElement;\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { Base } from '@polymer/polymer/polymer-legacy.js';\n\n/**\n * @polymerMixin\n */\nexport const ArrayDataProviderMixin = superClass => class ArrayDataProviderMixin extends superClass {\n\n static get properties() {\n\n return {\n /**\n * An array containing the items which will be stamped to the column template\n * instances.\n */\n items: Array\n\n };\n }\n\n static get observers() {\n return [\n '_itemsChanged(items, items.*, isAttached)'\n ];\n }\n\n _itemsChanged(items, splices, isAttached) {\n if (!isAttached) {\n return;\n }\n if (!Array.isArray(items)) {\n if (items === undefined || items === null) {\n this.size = 0;\n }\n if (this.dataProvider === this._arrayDataProvider) {\n this.dataProvider = undefined;\n }\n return;\n }\n\n this.size = items.length;\n this.dataProvider = this.dataProvider || this._arrayDataProvider;\n this.clearCache();\n this._ensureFirstPageLoaded();\n }\n\n _arrayDataProvider(opts, cb) {\n let items = (Array.isArray(this.items) ? this.items : []).slice(0);\n\n if (this._filters && this._checkPaths(this._filters, 'filtering', items)) {\n items = this._filter(items);\n }\n\n this.size = items.length;\n\n if (opts.sortOrders.length && this._checkPaths(this._sorters, 'sorting', items)) {\n items = items.sort(this._multiSort.bind(this));\n }\n\n const start = opts.page * opts.pageSize;\n const end = start + opts.pageSize;\n const slice = items.slice(start, end);\n cb(slice, items.length);\n }\n\n /**\n * Check array of filters/sorters for paths validity, console.warn invalid items\n * @param {Array} arrayToCheck The array of filters/sorters to check\n * @param {string} action The name of action to include in warning (filtering, sorting)\n * @param {Array} items\n */\n _checkPaths(arrayToCheck, action, items) {\n if (!items.length) {\n return false;\n }\n\n let result = true;\n\n for (var i in arrayToCheck) {\n const path = arrayToCheck[i].path;\n\n // skip simple paths\n if (!path || path.indexOf('.') === -1) {\n continue;\n }\n\n const parentProperty = path.replace(/\\.[^\\.]*$/, ''); // a.b.c -> a.b\n if (Base.get(parentProperty, items[0]) === undefined) {\n console.warn(`Path \"${path}\" used for ${action} does not exist in all of the items, ${action} is disabled.`);\n result = false;\n }\n }\n\n return result;\n }\n\n _multiSort(a, b) {\n return this._sorters.map(sort => {\n if (sort.direction === 'asc') {\n return this._compare(Base.get(sort.path, a), Base.get(sort.path, b));\n } else if (sort.direction === 'desc') {\n return this._compare(Base.get(sort.path, b), Base.get(sort.path, a));\n }\n return 0;\n }).reduce((p, n) => {\n return p ? p : n;\n }, 0);\n }\n\n _normalizeEmptyValue(value) {\n if ([undefined, null].indexOf(value) >= 0) {\n return '';\n } else if (isNaN(value)) {\n return value.toString();\n } else {\n return value;\n }\n }\n\n _compare(a, b) {\n a = this._normalizeEmptyValue(a);\n b = this._normalizeEmptyValue(b);\n\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n }\n\n _filter(items) {\n return items.filter((item, index) => {\n return this._filters.filter(filter => {\n const value = this._normalizeEmptyValue(Base.get(filter.path, item));\n const filterValueLowercase = this._normalizeEmptyValue(filter.value).toString().toLowerCase();\n return value.toString().toLowerCase().indexOf(filterValueLowercase) === -1;\n }).length === 0;\n });\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\n\nimport { addListener } from '@polymer/polymer/lib/utils/gestures.js';\n\n/**\n * @polymerMixin\n */\nexport const ColumnResizingMixin = superClass => class ColumnResizingMixin extends GestureEventListeners(superClass) {\n\n ready() {\n super.ready();\n const scroller = this.$.scroller;\n addListener(scroller, 'track', this._onHeaderTrack.bind(this));\n\n // Disallow scrolling while resizing\n scroller.addEventListener('touchmove', e => scroller.hasAttribute('column-resizing') && e.preventDefault());\n\n // Disable contextmenu on any resize separator.\n scroller.addEventListener('contextmenu', e => e.target.getAttribute('part') == 'resize-handle' && e.preventDefault());\n\n // Disable native cell focus when resizing\n scroller.addEventListener('mousedown', e => e.target.getAttribute('part') === 'resize-handle' && e.preventDefault());\n }\n\n _onHeaderTrack(e) {\n const handle = e.target;\n if (handle.getAttribute('part') === 'resize-handle') {\n const cell = handle.parentElement;\n let column = cell._column;\n\n this._toggleAttribute('column-resizing', true, this.$.scroller);\n\n // Get the target column to resize\n while (column.localName === 'vaadin-grid-column-group') {\n column = Array.prototype.slice.call(column._childColumns, 0)\n .sort(function(a, b) {\n return a._order - b._order;\n })\n .filter(function(column) {\n return !column.hidden;\n }).pop();\n }\n\n const columnRowCells = Array.from(this.$.header.querySelectorAll('[part~=\"row\"]:last-child [part~=\"cell\"]'));\n var targetCell = columnRowCells.filter(cell => cell._column === column)[0];\n // Resize the target column\n if (targetCell.offsetWidth) {\n var style = window.getComputedStyle(targetCell);\n var minWidth = 10 + parseInt(style.paddingLeft) + parseInt(style.paddingRight) + parseInt(style.borderLeftWidth)\n + parseInt(style.borderRightWidth) + parseInt(style.marginLeft) + parseInt(style.marginRight);\n column.width = Math.max(minWidth, targetCell.offsetWidth + e.detail.x - targetCell.getBoundingClientRect().right) + 'px';\n column.flexGrow = 0;\n }\n // Fix width and flex-grow for all preceding columns\n columnRowCells\n .sort(\n function(a, b) {\n return a._column._order - b._column._order;\n })\n .forEach(function(cell, index, array) {\n if (index < array.indexOf(targetCell)) {\n cell._column.width = cell.offsetWidth + 'px';\n cell._column.flexGrow = 0;\n }\n });\n\n if (e.detail.state === 'end') {\n this._toggleAttribute('column-resizing', false, this.$.scroller);\n }\n\n // Notify resize\n this._resizeHandler();\n }\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\n\nimport { timeOut } from '@polymer/polymer/lib/utils/async.js';\n\nexport const ItemCache = class ItemCache {\n\n constructor(grid, parentCache, parentItem) {\n this.grid = grid;\n this.parentCache = parentCache;\n this.parentItem = parentItem;\n this.itemCaches = {};\n this.items = {};\n this.effectiveSize = 0;\n this.size = 0;\n this.pendingRequests = {};\n }\n\n isLoading() {\n return Object.keys(this.pendingRequests).length || Object.keys(this.itemCaches).filter(index => {\n return this.itemCaches[index].isLoading();\n })[0];\n }\n\n getItemForIndex(index) {\n const {cache, scaledIndex} = this.getCacheAndIndex(index);\n return cache.items[scaledIndex];\n }\n\n updateSize() {\n this.effectiveSize = (!this.parentItem || this.grid._isExpanded(this.parentItem)) ?\n this.size + Object.keys(this.itemCaches).reduce((prev, curr) => {\n const subCache = this.itemCaches[curr];\n subCache.updateSize();\n return prev + subCache.effectiveSize;\n }, 0) :\n 0;\n }\n\n ensureSubCacheForScaledIndex(scaledIndex) {\n if (!this.itemCaches[scaledIndex]) {\n const subCache = new ItemCache(this.grid, this, this.items[scaledIndex]);\n this.itemCaches[scaledIndex] = subCache;\n this.grid._loadPage(0, subCache);\n }\n }\n\n getCacheAndIndex(index) {\n let thisLevelIndex = index;\n const keys = Object.keys(this.itemCaches);\n for (var i = 0; i < keys.length; i++) {\n const expandedIndex = Number(keys[i]);\n const subCache = this.itemCaches[expandedIndex];\n if (thisLevelIndex <= expandedIndex) {\n return {cache: this, scaledIndex: thisLevelIndex};\n } else if (thisLevelIndex <= expandedIndex + subCache.effectiveSize) {\n return subCache.getCacheAndIndex(thisLevelIndex - expandedIndex - 1);\n }\n thisLevelIndex -= subCache.effectiveSize;\n }\n return {cache: this, scaledIndex: thisLevelIndex};\n }\n\n};\n\n/**\n * @polymerMixin\n */\nexport const DataProviderMixin = superClass => class DataProviderMixin extends superClass {\n\n static get properties() {\n return {\n\n /**\n * Number of items fetched at a time from the dataprovider.\n */\n pageSize: {\n type: Number,\n value: 50,\n observer: '_pageSizeChanged'\n },\n\n /**\n * Function that provides items lazily. Receives arguments `params`, `callback`\n *\n * `params.page` Requested page index\n *\n * `params.pageSize` Current page size\n *\n * `params.filters` Currently applied filters\n *\n * `params.sortOrders` Currently applied sorting orders\n *\n * `params.parentItem` When tree is used, and sublevel items\n * are requested, reference to parent item of the requested sublevel.\n * Otherwise `undefined`.\n *\n * `callback(items, size)` Callback function with arguments:\n * - `items` Current page of items\n * - `size` Total number of items. When tree sublevel items\n * are requested, total number of items in the requested sublevel.\n * Optional when tree is not used, required for tree.\n */\n dataProvider: {\n type: Object,\n notify: true,\n observer: '_dataProviderChanged'\n },\n\n /**\n * `true` while data is being requested from the data provider.\n */\n loading: {\n type: Boolean,\n notify: true,\n readOnly: true,\n reflectToAttribute: true\n },\n\n _cache: {\n type: Object,\n value: function() {\n const cache = new ItemCache(this);\n return cache;\n }\n },\n\n /**\n * Path to an item sub-property that identifies the item.\n */\n itemIdPath: {\n type: String,\n value: null\n },\n\n /**\n * An array that contains the expanded items.\n */\n expandedItems: {\n type: Object,\n notify: true,\n value: () => []\n }\n\n };\n }\n\n static get observers() {\n return [\n '_sizeChanged(size)',\n '_expandedItemsChanged(expandedItems.*)'\n ];\n }\n\n _sizeChanged(size) {\n const delta = size - this._cache.size;\n this._cache.size += delta;\n this._cache.effectiveSize += delta;\n this._effectiveSize = this._cache.effectiveSize;\n }\n\n _updateRowItem(item, el) {\n el.children.forEach(cell => {\n cell._instance && (cell._instance.item = item);\n });\n }\n\n _getItem(index, el) {\n if (index >= this._effectiveSize) {\n return;\n }\n\n el.index = index;\n const {cache, scaledIndex} = this._cache.getCacheAndIndex(index);\n const item = cache.items[scaledIndex];\n if (item) {\n this._toggleAttribute('loading', false, el);\n this._updateItem(el, item);\n if (this._isExpanded(item)) {\n cache.ensureSubCacheForScaledIndex(scaledIndex);\n }\n } else {\n this._toggleAttribute('loading', true, el);\n this._loadPage(this._getPageForIndex(scaledIndex), cache);\n }\n\n }\n\n _pagesForPhysicalItems() {\n // TODO: potentially heavy operation to run first visible index,\n // reconsider if performance issues occur on data binding / scrolling.\n // TODO: _vidxOffset shouldn't be read from here.\n const firstVisiblePage = this._getPageForIndex(this._firstVisibleIndex + this._vidxOffset);\n\n return [firstVisiblePage].concat(\n this._physicalItems\n .filter(row => row.index)\n .items(row => this._getPageForIndex(row.index))\n ).reduce((prev, curr) => {\n if (prev.indexOf(curr) === -1) {\n prev.push(curr);\n }\n\n return prev;\n }, []);\n }\n\n _expandedInstanceChangedCallback(inst, value) {\n if (inst.item === undefined) {\n return;\n }\n if (value) {\n this.expandItem(inst.item);\n } else {\n this.collapseItem(inst.item);\n }\n }\n\n /**\n * Returns a value that identifies the item. Uses `itemIdPath` if available.\n * Can be customized by overriding.\n */\n getItemId(item) {\n return this.itemIdPath ? this.get(this.itemIdPath, item) : item;\n }\n\n _isExpanded(item) {\n return this.expandedItems && this._getItemIndexInArray(item, this.expandedItems) > -1;\n }\n\n _expandedItemsChanged(e) {\n this._cache.updateSize();\n this._effectiveSize = this._cache.effectiveSize;\n this._assignModels();\n }\n\n /**\n * Expands the given item tree.\n */\n expandItem(item) {\n if (!this._isExpanded(item)) {\n this.push('expandedItems', item);\n }\n }\n\n /**\n * Collapses the given item tree.\n */\n collapseItem(item) {\n if (this._isExpanded(item)) {\n this.splice('expandedItems', this._getItemIndexInArray(item, this.expandedItems), 1);\n }\n }\n\n _getIndexLevel(index) {\n let {cache} = this._cache.getCacheAndIndex(index);\n let level = 0;\n while (cache.parentCache) {\n cache = cache.parentCache;\n level++;\n }\n return level;\n }\n\n _canPopulate() {\n return this._hasData && this._columnTree;\n }\n\n _loadPage(page, cache) {\n // make sure same page isn't requested multiple times.\n if (!cache.pendingRequests[page] && this.dataProvider) {\n this._setLoading(true);\n cache.pendingRequests[page] = true;\n const params = {\n page,\n pageSize: this.pageSize,\n sortOrders: this._mapSorters(),\n filters: this._mapFilters(),\n parentItem: cache.parentItem\n };\n\n this.dataProvider(params, (items, size) => {\n if (size !== undefined) {\n cache.size = size;\n } else {\n if (params.parentItem) {\n cache.size = items.length;\n }\n }\n\n // Populate the cache with new items\n items.forEach((item, itemsIndex) => {\n const itemIndex = page * this.pageSize + itemsIndex;\n cache.items[itemIndex] = item;\n if (this._isExpanded(item)) {\n // Force synchronous data request for expanded item sub-cache\n cache.ensureSubCacheForScaledIndex(itemIndex);\n }\n });\n\n this._hasData = true;\n\n delete cache.pendingRequests[page];\n\n if (!this._cache.isLoading()) {\n // All active requests have finished, update the effective size and rows\n this._setLoading(false);\n this._cache.updateSize();\n this._effectiveSize = this._cache.effectiveSize;\n\n Array.from(this.$.items.children)\n .filter(row => !row.hidden)\n .forEach(row => {\n const cachedItem = this._cache.getItemForIndex(row.index);\n if (cachedItem) {\n this._toggleAttribute('loading', false, row);\n this._updateItem(row, cachedItem);\n }\n });\n\n this._increasePoolIfNeeded(0);\n }\n\n this.__setInitialColumnWidths();\n });\n }\n }\n\n _getPageForIndex(index) {\n return Math.floor(index / this.pageSize);\n }\n\n /**\n * Clears the cached pages and reloads data from dataprovider when needed.\n */\n clearCache() {\n this._cache = new ItemCache(this);\n Array.from(this.$.items.children).forEach(row => {\n Array.from(row.children).forEach(cell => {\n // Force data system to pick up subproperty changes\n cell._instance && cell._instance._setPendingProperty('item', {}, false);\n });\n });\n this._cache.size = this.size || 0;\n this._cache.updateSize();\n this._hasData = false;\n this._assignModels();\n\n if (!this._effectiveSize) {\n this._loadPage(0, this._cache);\n }\n }\n\n _flushItemsDebouncer() {\n if (this._debouncerLoad) {\n this._debouncerLoad.flush();\n }\n }\n\n _pageSizeChanged(pageSize, oldPageSize) {\n if (oldPageSize !== undefined && pageSize !== oldPageSize) {\n this.clearCache();\n }\n }\n\n _checkSize() {\n if (this.size === undefined && this._effectiveSize === 0) {\n console.warn(\n 'The needs the total number of items' +\n ' in order to display rows. Set the total number of items' +\n ' to the `size` property, or provide the total number of items' +\n ' in the second argument of the `dataProvider`’s `callback` call.'\n );\n }\n }\n\n _dataProviderChanged(dataProvider, oldDataProvider) {\n if (oldDataProvider !== undefined) {\n this.clearCache();\n }\n\n if (dataProvider && this.items && this.items.length) {\n // Fixes possibly invalid cached lastVisibleIndex value in \n this._scrollToIndex(this._firstVisibleIndex);\n }\n\n this._ensureFirstPageLoaded();\n\n this._debouncerCheckSize = Debouncer.debounce(\n this._debouncerCheckSize,\n timeOut.after(2000),\n this._checkSize.bind(this));\n\n this._scrollHandler();\n }\n\n _ensureFirstPageLoaded() {\n if (!this._hasData) {\n // load data before adding rows to make sure they have content when\n // rendered for the first time.\n this._loadPage(0, this._cache, () => {\n const hadData = this._hasData;\n this._hasData = true;\n if (!hadData) {\n this.notifyResize();\n }\n });\n }\n }\n\n _itemsEqual(item1, item2) {\n return this.getItemId(item1) === this.getItemId(item2);\n }\n\n _getItemIndexInArray(item, array) {\n let result = -1;\n array.forEach((i, idx) => {\n if (this._itemsEqual(i, item)) {\n result = idx;\n }\n });\n return result;\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\n\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nimport { timeOut } from '@polymer/polymer/lib/utils/async.js';\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\n/**\n * @polymerMixin\n */\nexport const DynamicColumnsMixin = superClass => class DynamicColumnsMixin extends superClass {\n\n ready() {\n super.ready();\n this._addNodeObserver();\n }\n\n _hasColumnGroups(columns) {\n for (let i = 0; i < columns.length; i++) {\n if (columns[i].localName === 'vaadin-grid-column-group') {\n return true;\n }\n }\n\n return false;\n }\n\n _getChildColumns(el) {\n return FlattenedNodesObserver.getFlattenedNodes(el).filter(this._isColumnElement);\n }\n\n _flattenColumnGroups(columns) {\n return columns.map(col => {\n if (col.localName === 'vaadin-grid-column-group') {\n return this._getChildColumns(col);\n } else {\n return [col];\n }\n }).reduce((prev, curr) => {\n return prev.concat(curr);\n }, []);\n }\n\n _getColumnTree() {\n var rootColumns = FlattenedNodesObserver.getFlattenedNodes(this).filter(this._isColumnElement);\n var _columnTree = [];\n\n for (var c = rootColumns; ;) {\n _columnTree.push(c);\n if (!this._hasColumnGroups(c)) {\n break;\n }\n c = this._flattenColumnGroups(c);\n }\n\n return _columnTree;\n }\n\n _updateColumnTree() {\n var columnTree = this._getColumnTree();\n if (!this._arrayEquals(columnTree, this._columnTree)) {\n this._columnTree = columnTree;\n }\n }\n\n _addNodeObserver() {\n this._observer = new FlattenedNodesObserver(this, info => {\n\n const rowDetailsTemplate = info.addedNodes.filter(n => n.localName === 'template' && n.classList.contains('row-details'))[0];\n if (rowDetailsTemplate && this._rowDetailsTemplate !== rowDetailsTemplate) {\n this._rowDetailsTemplate = rowDetailsTemplate;\n }\n\n if (info.addedNodes.filter(this._isColumnElement).length > 0 ||\n info.removedNodes.filter(this._isColumnElement).length > 0) {\n this._updateColumnTree();\n }\n\n this._debouncerCheckImports = Debouncer.debounce(\n this._debouncerCheckImports,\n timeOut.after(2000),\n this._checkImports.bind(this));\n\n this._ensureFirstPageLoaded();\n });\n }\n\n _arrayEquals(arr1, arr2) {\n if (!arr1 || !arr2 || arr1.length != arr2.length) {\n return false;\n }\n\n for (var i = 0, l = arr1.length; i < l; i++) {\n // Check if we have nested arrays\n if (arr1[i] instanceof Array && arr2[i] instanceof Array) {\n // recurse into the nested arrays\n if (!this._arrayEquals(arr1[i], arr2[i])) {\n return false;\n }\n } else if (arr1[i] != arr2[i]) {\n return false;\n }\n }\n return true;\n }\n\n _checkImports() {\n [\n 'vaadin-grid-column-group',\n 'vaadin-grid-filter',\n 'vaadin-grid-filter-column',\n 'vaadin-grid-tree-toggle',\n 'vaadin-grid-selection-column',\n 'vaadin-grid-sort-column',\n 'vaadin-grid-sorter'\n ].forEach(elementName => {\n var element = this.querySelector(elementName);\n if (element && !(element instanceof PolymerElement)) {\n console.warn(`Make sure you have imported the required module for <${elementName}> element.`);\n }\n });\n }\n\n _updateFirstAndLastColumn() {\n Array.from(this.shadowRoot.querySelectorAll('tr')).forEach(row => this._updateFirstAndLastColumnForRow(row));\n }\n\n _updateFirstAndLastColumnForRow(row) {\n Array.from(row.querySelectorAll('[part~=\"cell\"]:not([part~=\"details-cell\"])'))\n .sort((a, b) => {\n return a._column._order - b._column._order;\n }).forEach((cell, cellIndex, children) => {\n this._toggleAttribute('first-column', cellIndex === 0, cell);\n this._toggleAttribute('last-column', cellIndex === children.length - 1, cell);\n });\n }\n\n _isColumnElement(node) {\n return node.nodeType === Node.ELEMENT_NODE && /\\bcolumn\\b/.test(node.localName);\n }\n};\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const EventContextMixin = superClass => class EventContextMixin extends superClass {\n\n /**\n * Returns an object with context information about the event target:\n * - `item`: the data object corresponding to the targeted row (not specified when targeting header or footer)\n * - `column`: the column element corresponding to the targeted cell (not specified when targeting row details)\n * - `section`: whether the event targeted the body, header, footer or details of the grid\n *\n * These additional properties are included when `item` is specified:\n * - `index`: the index of the item\n * - `selected`: the selected state of the item\n * - `detailsOpened`: whether the row details are open for the item\n * - `expanded`: the expanded state of the tree toggle\n * - `level`: the tree hierarchy level\n *\n * The returned object is populated only when a grid cell, header, footer or row details is found in `event.composedPath()`.\n * This means mostly mouse and keyboard events. If such a grid part is not found in the path, an empty object is returned.\n * This may be the case eg. if the event is fired on the `` element and not any deeper in the DOM, or if\n * the event targets the empty part of the grid body.\n */\n getEventContext(event) {\n\n const context = {};\n\n const path = event.composedPath();\n const cell = path[path.indexOf(this.$.table) - 3];\n\n if (!cell) {\n return context;\n }\n\n context.section = ['body', 'header', 'footer', 'details']\n .filter(section => cell.getAttribute('part').indexOf(section) > -1)[0];\n\n if (cell._column) {\n context.column = cell._column;\n }\n\n if (context.section === 'body' || context.section === 'details') {\n Object.assign(context, this.__getRowModel(cell.parentElement));\n }\n\n return context;\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const FilterMixin = superClass => class FilterMixin extends superClass {\n\n static get properties() {\n return {\n _filters: {\n type: Array,\n value: function() {\n return [];\n }\n }\n };\n }\n\n ready() {\n super.ready();\n this.addEventListener('filter-changed', this._filterChanged.bind(this));\n }\n\n _filterChanged(e) {\n if (this._filters.indexOf(e.target) === -1) {\n this._filters.push(e.target);\n }\n\n e.stopPropagation();\n\n if (this.dataProvider) {\n this.clearCache();\n }\n }\n\n _mapFilters() {\n return this._filters.map(filter => {\n return {\n path: filter.path,\n value: filter.value\n };\n });\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { templatize } from '@polymer/polymer/lib/utils/templatize.js';\n/**\n * `vaadin-grid-templatizer` is a helper element for the `vaadin-grid` that is preparing and\n * stamping instances of cells and columns templates\n *\n * @memberof Vaadin\n * @private\n */\nclass GridTemplatizer extends (class extends PolymerElement {}) {\n static get is() {\n return 'vaadin-grid-templatizer';\n }\n\n static get properties() {\n return {\n dataHost: Object,\n\n template: Object,\n\n _templateInstances: {\n type: Array,\n value: function() {\n return [];\n }\n },\n\n _parentPathValues: {\n value: function() {\n return {};\n }\n },\n\n _grid: Object\n };\n }\n\n static get observers() {\n return [\n '_templateInstancesChanged(_templateInstances.*, _parentPathValues.*)'\n ];\n }\n\n constructor() {\n super();\n\n this._instanceProps = {\n detailsOpened: true,\n index: true,\n item: true,\n selected: true,\n expanded: true,\n level: true\n };\n }\n\n createInstance() {\n this._ensureTemplatized();\n const instance = new this._TemplateClass({});\n this.addInstance(instance);\n\n return instance;\n }\n\n addInstance(instance) {\n if (this._templateInstances.indexOf(instance) === -1) {\n this._templateInstances.push(instance);\n requestAnimationFrame(() => this.notifyPath('_templateInstances.*', this._templateInstances));\n }\n }\n\n removeInstance(instance) {\n const index = this._templateInstances.indexOf(instance);\n this.splice('_templateInstances', index, 1);\n }\n\n _ensureTemplatized() {\n if (!this._TemplateClass) {\n this._TemplateClass = templatize(this.template, this, {\n instanceProps: this._instanceProps,\n parentModel: true,\n\n forwardHostProp: function(prop, value) {\n this._forwardParentProp(prop, value);\n\n if (this._templateInstances) {\n this._templateInstances.forEach(inst => inst.notifyPath(prop, value));\n }\n },\n\n notifyInstanceProp: function(inst, prop, value) {\n if (prop === 'index' || prop === 'item') {\n // We don’t need a change notification for these.\n return;\n }\n\n const originalProp = `__${prop}__`;\n\n // Notify for only user-action changes, not for scrolling updates. E. g.,\n // if `detailsOpened` is different from `__detailsOpened__`, which was set during render.\n if (inst[originalProp] === value) {\n return;\n }\n inst[originalProp] = value;\n\n const row = Array.from(this._grid.$.items.children).filter(row => this._grid._itemsEqual(row._item, inst.item))[0];\n if (row) {\n Array.from(row.children).forEach(cell => {\n if (cell._instance) {\n cell._instance[originalProp] = value;\n cell._instance.notifyPath(prop, value);\n }\n });\n }\n\n const itemPrefix = 'item.';\n if (Array.isArray(this._grid.items) && prop.indexOf(itemPrefix) === 0) {\n const itemsIndex = this._grid.items.indexOf(inst.item);\n const path = prop.slice(itemPrefix.length);\n this._grid.notifyPath(`items.${itemsIndex}.${path}`, value);\n }\n\n const gridCallback = `_${prop}InstanceChangedCallback`;\n if (this._grid && this._grid[gridCallback]) {\n this._grid[gridCallback](inst, value);\n }\n }\n\n });\n }\n }\n\n _forwardParentProp(prop, value) {\n this._parentPathValues[prop] = value;\n this._templateInstances.forEach(inst => inst.notifyPath(prop, value));\n }\n\n _templateInstancesChanged(t, p) {\n let index, count;\n if (t.path === '_templateInstances') {\n // Iterate all instances\n index = 0;\n count = this._templateInstances.length;\n } else if (t.path === '_templateInstances.splices') {\n // Iterate only new instances\n index = t.value.index;\n count = t.value.addedCount;\n } else {\n return;\n }\n Object.keys(this._parentPathValues || {}).forEach(keyName => {\n for (var i = index; i < index + count; i++) {\n this._templateInstances[i].set(keyName, this._parentPathValues[keyName]);\n }\n });\n }\n\n}\n\ncustomElements.define(GridTemplatizer.is, GridTemplatizer);\n\nexport { GridTemplatizer as Templatizer };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { Templatizer } from './vaadin-grid-templatizer.js';\n\nimport { flush } from '@polymer/polymer/lib/utils/flush.js';\n\n/**\n * @polymerMixin\n */\nexport const RowDetailsMixin = superClass => class RowDetailsMixin extends superClass {\n static get properties() {\n return {\n /**\n * An array containing references to items with open row details.\n */\n detailsOpenedItems: {\n type: Array,\n value: function() {\n return [];\n }\n },\n\n _rowDetailsTemplate: Object,\n\n /**\n * Custom function for rendering the content of the row details.\n * Receives three arguments:\n *\n * - `root` The row details content DOM element. Append your content to it.\n * - `grid` The `` element.\n * - `rowData` The object with the properties related with\n * the rendered item, contains:\n * - `rowData.index` The index of the item.\n * - `rowData.item` The item.\n */\n rowDetailsRenderer: Function,\n\n _detailsCells: {\n type: Array,\n }\n };\n }\n\n static get observers() {\n return [\n '_detailsOpenedItemsChanged(detailsOpenedItems.*, _rowDetailsTemplate, rowDetailsRenderer)',\n '_rowDetailsTemplateOrRendererChanged(_rowDetailsTemplate, rowDetailsRenderer)'\n ];\n }\n\n _rowDetailsTemplateOrRendererChanged(rowDetailsTemplate, rowDetailsRenderer) {\n if (rowDetailsTemplate && rowDetailsRenderer) {\n throw new Error('You should only use either a renderer or a template for row details');\n }\n if (rowDetailsTemplate || rowDetailsRenderer) {\n if (rowDetailsTemplate && !rowDetailsTemplate.templatizer) {\n var templatizer = new Templatizer();\n templatizer._grid = this;\n templatizer.dataHost = this.dataHost;\n templatizer.template = rowDetailsTemplate;\n rowDetailsTemplate.templatizer = templatizer;\n }\n\n if (this._columnTree) {\n // Only update the rows if the column tree has already been initialized\n Array.from(this.$.items.children).forEach(row => {\n if (!row.querySelector('[part~=details-cell]')) {\n this._updateRow(row, this._columnTree[this._columnTree.length - 1]);\n this._a11yUpdateRowDetailsOpened(row, false);\n }\n // Clear any old template instances\n delete row.querySelector('[part~=details-cell]')._instance;\n });\n }\n\n if (this.detailsOpenedItems.length) {\n Array.from(this.$.items.children).forEach(this._toggleDetailsCell, this);\n this._update();\n }\n }\n }\n\n _detailsOpenedItemsChanged(changeRecord, rowDetailsTemplate, rowDetailsRenderer) {\n if (changeRecord.path === 'detailsOpenedItems.length' || !changeRecord.value) {\n // Let’s avoid duplicate work of both “.splices” and “.length” updates.\n return;\n }\n Array.from(this.$.items.children).forEach(row => {\n this._toggleDetailsCell(row, row._item);\n this._a11yUpdateRowDetailsOpened(row, this._isDetailsOpened(row._item));\n this._toggleAttribute('details-opened', this._isDetailsOpened(row._item), row);\n });\n }\n\n _configureDetailsCell(cell) {\n cell.setAttribute('part', 'cell details-cell');\n // Freeze the details cell, so that it does not scroll horizontally\n // with the normal cells. This way it looks less weird.\n this._toggleAttribute('frozen', true, cell);\n }\n\n _toggleDetailsCell(row, item) {\n const cell = row.querySelector('[part~=\"details-cell\"]');\n if (!cell) {\n return;\n }\n const detailsHidden = !this._isDetailsOpened(item);\n const hiddenChanged = !!cell.hidden !== detailsHidden;\n\n if (!cell._instance && !cell._renderer || cell.hidden !== detailsHidden) {\n cell.hidden = detailsHidden;\n if (detailsHidden) {\n row.style.removeProperty('padding-bottom');\n } else {\n if (this.rowDetailsRenderer) {\n cell._renderer = this.rowDetailsRenderer;\n cell._renderer.call(this, cell._content, this, {index: row.index, item: item});\n } else if (this._rowDetailsTemplate && !cell._instance) {\n // Stamp the template\n cell._instance = this._rowDetailsTemplate.templatizer.createInstance();\n cell._content.innerHTML = '';\n cell._content.appendChild(cell._instance.root);\n this._updateItem(row, item);\n }\n\n flush();\n row.style.setProperty('padding-bottom', `${cell.offsetHeight}px`);\n\n requestAnimationFrame(() => this.notifyResize());\n }\n }\n if (hiddenChanged) {\n this._updateMetrics();\n this._positionItems();\n }\n }\n\n _updateDetailsCellHeights() {\n Array.from(this.$.items.querySelectorAll('[part~=\"details-cell\"]:not([hidden])')).forEach(cell => {\n cell.parentElement.style.setProperty('padding-bottom', `${cell.offsetHeight}px`);\n });\n }\n\n _isDetailsOpened(item) {\n return this.detailsOpenedItems && this._getItemIndexInArray(item, this.detailsOpenedItems) !== -1;\n }\n\n /**\n * Open the details row of a given item.\n */\n openItemDetails(item) {\n if (!this._isDetailsOpened(item)) {\n this.push('detailsOpenedItems', item);\n }\n }\n\n /**\n * Close the details row of a given item.\n */\n closeItemDetails(item) {\n if (this._isDetailsOpened(item)) {\n this.splice('detailsOpenedItems', this._getItemIndexInArray(item, this.detailsOpenedItems), 1);\n }\n }\n\n _detailsOpenedInstanceChangedCallback(instance, value) {\n if (super._detailsOpenedInstanceChangedCallback) {\n super._detailsOpenedInstanceChangedCallback(instance, value);\n }\n if (value) {\n this.openItemDetails(instance.item);\n } else {\n this.closeItemDetails(instance.item);\n }\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\n\nimport { timeOut, animationFrame, microTask } from '@polymer/polymer/lib/utils/async.js';\n\n/**\n * @polymerMixin\n */\nexport const ScrollMixin = superClass => class ScrollMixin extends superClass {\n\n get _timeouts() {\n return {\n SCROLL_PERIOD: 1000,\n WHEEL_SCROLLING: 200,\n SCROLLING: 100,\n IGNORE_WHEEL: 500\n };\n }\n\n static get properties() {\n return {\n\n // Cached array of frozen cells\n _frozenCells: {\n type: Array,\n value: function() {\n return [];\n },\n },\n\n _scrollbarWidth: {\n type: Number,\n value: function() {\n // Create the measurement node\n var scrollDiv = document.createElement('div');\n scrollDiv.style.width = '100px';\n scrollDiv.style.height = '100px';\n scrollDiv.style.overflow = 'scroll';\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n document.body.appendChild(scrollDiv);\n // Get the scrollbar width\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n // Delete the DIV\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n }\n },\n\n _rowWithFocusedElement: Element,\n\n _deltaYAcc: {\n type: Number,\n value: 0\n }\n\n };\n }\n\n static get observers() {\n return [\n '_scrollHeightUpdated(_estScrollHeight)'\n ];\n }\n\n ready() {\n super.ready();\n this.scrollTarget = this.$.table;\n\n this.addEventListener('wheel', e => {\n this._wheelScrolling = true;\n this._debouncerWheelScrolling = Debouncer.debounce(\n this._debouncerWheelScrolling,\n timeOut.after(this._timeouts.WHEEL_SCROLLING),\n () => this._wheelScrolling = false\n );\n this._onWheel(e);\n });\n\n this.$.table.addEventListener('scroll', e => {\n if (this.$.outerscroller.outerScrolling) {\n e.stopImmediatePropagation();\n }\n }, true);\n\n this.$.items.addEventListener('focusin', (e) => {\n const itemsIndex = e.composedPath().indexOf(this.$.items);\n this._rowWithFocusedElement = e.composedPath()[itemsIndex - 1];\n });\n this.$.items.addEventListener('focusout', () => this._rowWithFocusedElement = undefined);\n }\n\n _onWheel(e) {\n if (e.ctrlKey || this._hasScrolledAncestor(e.target, e.deltaX, e.deltaY)) {\n return;\n }\n\n var table = this.$.table;\n\n var deltaY = e.deltaY;\n if (e.deltaMode === 1) {\n // Mode 1 == scrolling by lines instead of pixels\n deltaY *= this._physicalAverage;\n }\n\n if (this._wheelAnimationFrame) {\n // Skip new wheel events while one is being processed\n this._deltaYAcc += deltaY;\n e.preventDefault();\n return;\n }\n\n deltaY += this._deltaYAcc;\n this._deltaYAcc = 0;\n\n this._wheelAnimationFrame = true;\n this._debouncerWheelAnimationFrame = Debouncer.debounce(\n this._debouncerWheelAnimationFrame,\n animationFrame,\n () => this._wheelAnimationFrame = false\n );\n\n var momentum = Math.abs(e.deltaX) + Math.abs(deltaY);\n\n if (this._canScroll(table, e.deltaX, deltaY)) {\n e.preventDefault();\n table.scrollTop += deltaY;\n table.scrollLeft += e.deltaX;\n this._scrollHandler();\n this._hasResidualMomentum = true;\n\n this._ignoreNewWheel = true;\n this._debouncerIgnoreNewWheel = Debouncer.debounce(\n this._debouncerIgnoreNewWheel,\n timeOut.after(this._timeouts.IGNORE_WHEEL),\n () => this._ignoreNewWheel = false\n );\n } else if (this._hasResidualMomentum && momentum <= this._previousMomentum || this._ignoreNewWheel) {\n e.preventDefault();\n } else if (momentum > this._previousMomentum) {\n this._hasResidualMomentum = false;\n }\n this._previousMomentum = momentum;\n }\n\n /**\n * Determines if the element has an ancestor prior to this\n * cell content that handles the scroll delta\n */\n _hasScrolledAncestor(el, deltaX, deltaY) {\n if (el.localName === 'vaadin-grid-cell-content') {\n return false;\n } else if (this._canScroll(el, deltaX, deltaY)\n && ['auto', 'scroll'].indexOf(getComputedStyle(el).overflow) !== -1) {\n return true;\n } else if (el !== this && el.parentElement) {\n return this._hasScrolledAncestor(el.parentElement, deltaX, deltaY);\n }\n }\n\n /**\n * Determines if the the given scroll deltas can be applied to the element\n * (fully or partially)\n */\n _canScroll(el, deltaX, deltaY) {\n return (deltaY > 0 && el.scrollTop < el.scrollHeight - el.offsetHeight) ||\n (deltaY < 0 && el.scrollTop > 0) ||\n (deltaX > 0 && el.scrollLeft < el.scrollWidth - el.offsetWidth) ||\n (deltaX < 0 && el.scrollLeft > 0);\n }\n\n _scheduleScrolling() {\n if (!this._scrollingFrame) {\n // Defer setting state attributes to avoid Edge hiccups\n this._scrollingFrame = requestAnimationFrame(() => this._toggleAttribute('scrolling', true, this.$.scroller));\n }\n this._debounceScrolling = Debouncer.debounce(\n this._debounceScrolling,\n timeOut.after(this._timeouts.SCROLLING),\n () => {\n cancelAnimationFrame(this._scrollingFrame);\n delete this._scrollingFrame;\n this._toggleAttribute('scrolling', false, this.$.scroller);\n if (!this.$.outerscroller.outerScrolling) {\n this._reorderRows();\n }\n }\n );\n\n if (!this._scrollPeriodFrame) {\n this._scrollPeriodFrame = requestAnimationFrame(() => this._toggleAttribute('scroll-period', true, this.$.scroller));\n }\n this._debounceScrollPeriod = Debouncer.debounce(\n this._debounceScrollPeriod,\n timeOut.after(this._timeouts.SCROLL_PERIOD),\n () => {\n cancelAnimationFrame(this._scrollPeriodFrame);\n delete this._scrollPeriodFrame;\n this._toggleAttribute('scroll-period', false, this.$.scroller);\n }\n );\n }\n\n _afterScroll() {\n this._translateStationaryElements();\n\n if (!this.hasAttribute('reordering')) {\n this._scheduleScrolling();\n }\n\n const os = this.$.outerscroller;\n if (!this._ios && (this._wheelScrolling || os.passthrough)) {\n os.syncOuterScroller();\n }\n\n if (this._ios) {\n // Enable vertical rubberband feedback\n const overScroll = Math.max(-os.scrollTop, 0) ||\n Math.min(0, os.scrollHeight - os.scrollTop - os.offsetHeight);\n this.$.items.style.transform = `translateY(${overScroll}px)`;\n }\n\n this._updateOverflow();\n }\n\n _updateOverflow() {\n // Set overflow styling attributes\n let overflow = '';\n const table = this.$.table;\n if (table.scrollTop < table.scrollHeight - table.clientHeight) {\n overflow += ' bottom';\n }\n\n if (table.scrollTop > 0) {\n overflow += ' top';\n }\n\n if (table.scrollLeft < table.scrollWidth - table.clientWidth) {\n overflow += ' right';\n }\n\n if (table.scrollLeft > 0) {\n overflow += ' left';\n }\n\n this._debounceOverflow = Debouncer.debounce(\n this._debounceOverflow,\n animationFrame,\n () => {\n const value = overflow.trim();\n if (value.length > 0 && this.getAttribute('overflow') !== value) {\n this.setAttribute('overflow', value);\n } else if (value.length == 0 && this.hasAttribute('overflow')) {\n this.removeAttribute('overflow');\n }\n }\n );\n }\n\n // correct order needed for preserving correct tab order between cell contents.\n _reorderRows() {\n const body = this.$.items;\n const items = body.querySelectorAll('tr');\n if (!items.length) {\n return;\n }\n\n const adjustedVirtualStart = this._virtualStart + this._vidxOffset;\n\n // Which row to use as a target?\n const targetRow = this._rowWithFocusedElement || Array.from(items).filter(row => !row.hidden)[0];\n if (!targetRow) {\n // All rows are hidden, don't reorder\n return;\n }\n\n // Where the target row should be?\n const targetPhysicalIndex = targetRow.index - adjustedVirtualStart;\n\n // Reodrer the DOM elements to keep the target row at the target physical index\n const delta = Array.from(items).indexOf(targetRow) - targetPhysicalIndex;\n if (delta > 0) {\n for (let i = 0; i < delta; i++) {\n body.appendChild(items[i]);\n }\n } else if (delta < 0) {\n for (let i = items.length + delta; i < items.length; i++) {\n body.insertBefore(items[i], items[0]);\n }\n }\n }\n\n _frozenCellsChanged() {\n this._debouncerCacheElements = Debouncer.debounce(\n this._debouncerCacheElements,\n microTask,\n () => {\n Array.from(this.root.querySelectorAll('[part~=\"cell\"]')).forEach(function(cell) {\n cell.style.transform = '';\n });\n this._frozenCells = Array.prototype.slice.call(this.$.table.querySelectorAll('[frozen]'));\n this._translateStationaryElements();\n }\n );\n this._updateLastFrozen();\n }\n\n _updateLastFrozen() {\n if (!this._columnTree) {\n return;\n }\n\n const columnsRow = this._columnTree[this._columnTree.length - 1].slice(0);\n columnsRow.sort((a, b) => {\n return a._order - b._order;\n });\n const lastFrozen = columnsRow.reduce((prev, col, index) => {\n col._lastFrozen = false;\n return col.frozen && !col.hidden ? index : prev;\n }, undefined);\n if (lastFrozen !== undefined) {\n columnsRow[lastFrozen]._lastFrozen = true;\n }\n }\n\n _translateStationaryElements() {\n if (this._edge && !this._scrollbarWidth) {\n // Fixed mode (Tablet Edge)\n this.$.items.style.transform =\n this._getTranslate(-this._scrollLeft || 0, -this._scrollTop || 0);\n\n this.$.footer.style.transform = this.$.header.style.transform =\n this._getTranslate(-this._scrollLeft || 0, 0);\n } else {\n this.$.footer.style.transform = this.$.header.style.transform = this._getTranslate(0, this._scrollTop);\n }\n\n var frozenCellTransform = this._getTranslate(this._scrollLeft, 0);\n for (var i = 0; i < this._frozenCells.length; i++) {\n this._frozenCells[i].style.transform = frozenCellTransform;\n }\n }\n\n _getTranslate(x, y) {\n return 'translate(' + x + 'px,' + y + 'px)';\n }\n\n _scrollHeightUpdated(_estScrollHeight) {\n this.$.outersizer.style.top = this.$.fixedsizer.style.top = _estScrollHeight + 'px';\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const SelectionMixin = superClass => class SelectionMixin extends superClass {\n\n static get properties() {\n return {\n /**\n * An array that contains the selected items.\n */\n selectedItems: {\n type: Object,\n notify: true,\n value: () => []\n }\n };\n }\n\n static get observers() {\n return [\n '_selectedItemsChanged(selectedItems.*)'\n ];\n }\n\n _isSelected(item) {\n return this.selectedItems && this._getItemIndexInArray(item, this.selectedItems) > -1;\n }\n\n /**\n * Selects the given item.\n *\n * @method selectItem\n * @param {Object} item The item object\n */\n selectItem(item) {\n if (!this._isSelected(item)) {\n this.push('selectedItems', item);\n }\n }\n\n /**\n * Deselects the given item if it is already selected.\n *\n * @method deselect\n * @param {Object} item The item object\n */\n deselectItem(item) {\n const index = this._getItemIndexInArray(item, this.selectedItems);\n if (index > -1) {\n this.splice('selectedItems', index, 1);\n }\n }\n\n /**\n * Toggles the selected state of the given item.\n *\n * @method toggle\n * @param {Object} item The item object\n */\n _toggleItem(item) {\n const index = this._getItemIndexInArray(item, this.selectedItems);\n if (index === -1) {\n this.selectItem(item);\n } else {\n this.deselectItem(item);\n }\n }\n\n _selectedItemsChanged(e) {\n if (this.$.items.children.length && (e.path === 'selectedItems' || e.path === 'selectedItems.splices')) {\n Array.from(this.$.items.children).forEach(row => {\n this._updateItem(row, row._item);\n });\n }\n }\n\n _selectedInstanceChangedCallback(instance, value) {\n if (super._selectedInstanceChangedCallback) {\n super._selectedInstanceChangedCallback(instance, value);\n }\n if (value) {\n this.selectItem(instance.item);\n } else {\n this.deselectItem(instance.item);\n }\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { microTask } from '@polymer/polymer/lib/utils/async.js';\n\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\n/**\n * @polymerMixin\n */\nexport const SortMixin = superClass => class SortMixin extends superClass {\n static get properties() {\n return {\n /**\n * When `true`, all `` are applied for sorting.\n */\n multiSort: {\n type: Boolean,\n value: false\n },\n\n _sorters: {\n type: Array,\n value: function() {\n return [];\n }\n },\n\n _previousSorters: {\n type: Array,\n value: function() {\n return [];\n }\n }\n };\n }\n\n ready() {\n super.ready();\n this.addEventListener('sorter-changed', this._onSorterChanged);\n\n // With Polymer 2 & shady the 'sorter-changed' listener isn't guaranteed to be registered\n // before child 's upgrade and fire the events. The following\n // makes sure that 'sorter-changed' is fired for all elements\n // after this () is ready (and the listeners are active).\n if (window.ShadyDOM) {\n microTask.run(() => {\n const sorters = this.querySelectorAll('vaadin-grid-sorter');\n Array.from(sorters).forEach((sorter) => {\n // Don't try to fire if the sorter hasn't been upgraded yet\n if (sorter instanceof PolymerElement) {\n sorter.dispatchEvent(new CustomEvent('sorter-changed', {bubbles: true, composed: true}));\n }\n });\n });\n }\n }\n\n _onSorterChanged(e) {\n const sorter = e.target;\n\n this._removeArrayItem(this._sorters, sorter);\n sorter._order = null;\n\n if (this.multiSort) {\n if (sorter.direction) {\n this._sorters.unshift(sorter);\n }\n\n this._sorters.forEach((sorter, index) => sorter._order = this._sorters.length > 1 ? index : null, this);\n } else {\n if (sorter.direction) {\n this._sorters.forEach(sorter => {\n sorter._order = null;\n sorter.direction = null;\n });\n this._sorters = [sorter];\n }\n }\n\n e.stopPropagation();\n\n if (this.dataProvider &&\n // No need to clear cache if sorters didn't change\n JSON.stringify(this._previousSorters) !== JSON.stringify(this._mapSorters())) {\n this.clearCache();\n }\n\n this._a11yUpdateSorters();\n\n this._previousSorters = this._mapSorters();\n }\n\n _mapSorters() {\n return this._sorters.map(sorter => {\n return {\n path: sorter.path,\n direction: sorter.direction\n };\n });\n }\n\n _removeArrayItem(array, item) {\n const index = array.indexOf(item);\n if (index > -1) {\n array.splice(index, 1);\n }\n }\n};\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const StylingMixin = superClass => class StylingMixin extends superClass {\n\n static get properties() {\n return {\n /**\n * A function that allows generating CSS class names for grid cells\n * based on their row and column. The return value should be the generated\n * class name as a string, or multiple class names separated by whitespace\n * characters.\n *\n * Receives two arguments:\n * - `column` The `` element.\n * - `rowData` The object with the properties related with\n * the rendered item, contains:\n * - `rowData.index` The index of the item.\n * - `rowData.item` The item.\n * - `rowData.expanded` Sublevel toggle state.\n * - `rowData.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `rowData.selected` Selected state.\n */\n cellClassNameGenerator: Function\n };\n }\n\n static get observers() {\n return [\n '__cellClassNameGeneratorChanged(cellClassNameGenerator)'\n ];\n }\n\n __cellClassNameGeneratorChanged(cellClassGenerator) {\n this.generateCellClassNames();\n }\n\n /**\n * Runs the `cellClassNameGenerator` for the visible cells.\n * If the generator depends on varying conditions, you need to\n * call this function manually in order to update the styles when\n * the conditions change.\n */\n generateCellClassNames() {\n Array.from(this.$.items.children).filter(row => !row.hidden).forEach(\n row => this._generateCellClassNames(row, this.__getRowModel(row)));\n }\n\n _generateCellClassNames(row, rowData) {\n Array.from(row.children).forEach(cell => {\n if (cell.__generatedClasses) {\n cell.__generatedClasses.forEach(className => cell.classList.remove(className));\n }\n if (this.cellClassNameGenerator) {\n const result = this.cellClassNameGenerator(cell._column, rowData);\n cell.__generatedClasses = result && result.split(' ').filter(className => className.length > 0);\n if (cell.__generatedClasses) {\n cell.__generatedClasses.forEach(className => cell.classList.add(className));\n }\n }\n });\n }\n};\n","/**\n@license\nCopyright (c) 2019 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nconst DropMode = {\n BETWEEN: 'between',\n ON_TOP: 'on-top',\n ON_TOP_OR_BETWEEN: 'on-top-or-between',\n ON_GRID: 'on-grid'\n};\n\nconst DropLocation = {\n ON_TOP: 'on-top',\n ABOVE: 'above',\n BELOW: 'below',\n EMPTY: 'empty'\n};\n\n/**\n * @polymerMixin\n */\nexport const DragAndDropMixin = superClass => class DragAndDropMixin extends superClass {\n\n static get properties() {\n return {\n /**\n * Defines the locations within the Grid row where an element can be dropped.\n *\n * Possible values are:\n * - `between`: The drop event can happen between Grid rows.\n * - `on-top`: The drop event can happen on top of Grid rows.\n * - `on-top-or-between`: The drop event can happen either on top of or between Grid rows.\n * - `on-grid`: The drop event will not happen on any specific row, it will show the drop target outline around the whole grid.\n */\n dropMode: String,\n\n /**\n * Marks the grid's rows to be available for dragging.\n */\n rowsDraggable: Boolean,\n\n /**\n * A function that filters dragging of specific grid rows. The return value should be false\n * if dragging of the row should be disabled.\n *\n * Receives one argument:\n * - `rowData` The object with the properties related with\n * the rendered item, contains:\n * - `rowData.index` The index of the item.\n * - `rowData.item` The item.\n * - `rowData.expanded` Sublevel toggle state.\n * - `rowData.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `rowData.selected` Selected state.\n */\n dragFilter: Function,\n\n /**\n * A function that filters dropping on specific grid rows. The return value should be false\n * if dropping on the row should be disabled.\n *\n * Receives one argument:\n * - `rowData` The object with the properties related with\n * the rendered item, contains:\n * - `rowData.index` The index of the item.\n * - `rowData.item` The item.\n * - `rowData.expanded` Sublevel toggle state.\n * - `rowData.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `rowData.selected` Selected state.\n */\n dropFilter: Function,\n\n __dndAutoScrollThreshold: {\n value: 50\n }\n\n };\n }\n\n static get observers() {\n return [\n '_dragDropAccessChanged(rowsDraggable, dropMode, dragFilter, dropFilter)'\n ];\n }\n\n ready() {\n super.ready();\n this.$.table.addEventListener('dragstart', this._onDragStart.bind(this));\n this.$.table.addEventListener('dragend', this._onDragEnd.bind(this));\n this.$.table.addEventListener('dragover', this._onDragOver.bind(this));\n this.$.table.addEventListener('dragleave', this._onDragLeave.bind(this));\n this.$.table.addEventListener('drop', this._onDrop.bind(this));\n this.$.table.addEventListener('dragenter', e => {\n if (this.dropMode) {\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n }\n\n _onDragStart(e) {\n if (this.rowsDraggable) {\n let row = e.target;\n if (row.localName === 'vaadin-grid-cell-content') {\n // The draggable node is the cell content element on browsers that support native shadow\n row = row.assignedSlot.parentNode.parentNode;\n }\n if (row.parentNode !== this.$.items) {\n return;\n }\n\n e.stopPropagation();\n this._toggleAttribute('dragging-rows', true, this);\n\n if (this._safari) {\n // Safari doesn't get proper drag images from transformed\n // elements so we need to switch to top temporarily\n const transform = row.style.transform;\n row.style.top = /translateY\\((.*)\\)/.exec(transform)[1];\n row.style.transform = 'none';\n requestAnimationFrame(() => {\n row.style.top = '';\n row.style.transform = transform;\n });\n }\n\n const rowRect = row.getBoundingClientRect();\n if (!window.ShadyDOM) {\n if (this._ios) {\n e.dataTransfer.setDragImage(row);\n } else {\n e.dataTransfer.setDragImage(row, e.clientX - rowRect.left, e.clientY - rowRect.top);\n }\n\n }\n\n let rows = [row];\n if (this._isSelected(row._item)) {\n rows = this.__getViewportRows()\n .filter(row => this._isSelected(row._item))\n .filter(row => !this.dragFilter || this.dragFilter(this.__getRowModel(row)));\n }\n\n // Set the default transfer data\n e.dataTransfer.setData('text', this.__formatDefaultTransferData(rows));\n\n row.setAttribute('dragstart', rows.length > 1 ? rows.length : '');\n this.updateStyles({\n '--_grid-drag-start-x': `${e.clientX - rowRect.left + 20}px`,\n '--_grid-drag-start-y': `${e.clientY - rowRect.top + 10}px`\n });\n\n requestAnimationFrame(() => {\n row.removeAttribute('dragstart');\n this.updateStyles({'--_grid-drag-start-x': '', '--_grid-drag-start-y': ''});\n });\n\n const event = new CustomEvent('grid-dragstart', {\n detail: {\n draggedItems: rows.map(row => row._item),\n setDragData: (type, data) => e.dataTransfer.setData(type, data),\n setDraggedItemsCount: count => row.setAttribute('dragstart', count)\n }\n });\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n }\n\n _onDragEnd(e) {\n this._toggleAttribute('dragging-rows', false, this);\n e.stopPropagation();\n const event = new CustomEvent('grid-dragend');\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n\n _onDragLeave(e) {\n e.stopPropagation();\n this._clearDragStyles();\n }\n\n _onDragOver(e) {\n\n if (this.dropMode) {\n this._dropLocation = undefined;\n this._dragOverItem = undefined;\n\n if (this.__dndAutoScroll(e.clientY)) {\n this._clearDragStyles();\n return;\n }\n\n let row = e.composedPath().filter(node => node.localName === 'tr')[0];\n\n if (!this._effectiveSize || this.dropMode === DropMode.ON_GRID) {\n // The grid is empty or \"on-grid\" drop mode was used, always default to \"empty\"\n this._dropLocation = DropLocation.EMPTY;\n } else if (!row || row.parentNode !== this.$.items) {\n // The dragover didn't occur on a body row but the grid has items\n if (row) {\n // The dragover occurred over a header/footer row\n return;\n } else if (this.dropMode === DropMode.BETWEEN || this.dropMode === DropMode.ON_TOP_OR_BETWEEN) {\n // The drop mode allows setting the last row as the drag over item\n row = Array.from(this.$.items.children).filter(row => !row.hidden).pop();\n this._dropLocation = DropLocation.BELOW;\n } else {\n // Drop mode on-top used but the dragover didn't occur over one of the existing rows\n return;\n }\n } else {\n // The dragover occurred on a body row, determine the drop location from coordinates\n const rowRect = row.getBoundingClientRect();\n\n this._dropLocation = DropLocation.ON_TOP;\n\n if (this.dropMode === DropMode.BETWEEN) {\n const dropAbove = e.clientY - rowRect.top < rowRect.bottom - e.clientY;\n this._dropLocation = dropAbove ? DropLocation.ABOVE : DropLocation.BELOW;\n\n } else if (this.dropMode === DropMode.ON_TOP_OR_BETWEEN) {\n if (e.clientY - rowRect.top < rowRect.height / 3) {\n this._dropLocation = DropLocation.ABOVE;\n } else if (e.clientY - rowRect.top > (rowRect.height / 3) * 2) {\n this._dropLocation = DropLocation.BELOW;\n }\n }\n }\n\n if (row && row.hasAttribute('drop-disabled')) {\n this._dropLocation = undefined;\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n if (this._dropLocation === DropLocation.EMPTY) {\n this._toggleAttribute('dragover', true, this);\n } else if (row) {\n this._dragOverItem = row._item;\n if (row.getAttribute('dragover') !== this._dropLocation) {\n row.setAttribute('dragover', this._dropLocation);\n }\n } else {\n this._clearDragStyles();\n }\n }\n }\n\n __dndAutoScroll(clientY) {\n if (this.__dndAutoScrolling) {\n return true;\n }\n\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n const footerTop = this.$.footer.getBoundingClientRect().top;\n const topDiff = headerBottom - clientY + this.__dndAutoScrollThreshold;\n const bottomDiff = clientY - footerTop + this.__dndAutoScrollThreshold;\n let scrollTopDelta = 0;\n\n if (bottomDiff > 0) {\n scrollTopDelta = bottomDiff * 2;\n } else if (topDiff > 0) {\n scrollTopDelta = -topDiff * 2;\n }\n\n if (scrollTopDelta) {\n const scrollTop = this.$.table.scrollTop;\n this.$.table.scrollTop += scrollTopDelta;\n const scrollTopChanged = scrollTop !== this.$.table.scrollTop;\n if (scrollTopChanged) {\n this.__dndAutoScrolling = true;\n // Disallow more auto-scrolls within 20ms\n setTimeout(() => this.__dndAutoScrolling = false, 20);\n this._scrollHandler();\n return true;\n }\n }\n }\n\n __getViewportRows() {\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n const footerTop = this.$.footer.getBoundingClientRect().top;\n return Array.from(this.$.items.children)\n .filter(row => {\n const rowRect = row.getBoundingClientRect();\n return rowRect.bottom > headerBottom && rowRect.top < footerTop;\n });\n }\n\n _clearDragStyles() {\n this.removeAttribute('dragover');\n Array.from(this.$.items.children).forEach(row => row.removeAttribute('dragover'));\n }\n\n _onDrop(e) {\n if (this.dropMode) {\n e.stopPropagation();\n e.preventDefault();\n\n const dragData = e.dataTransfer.types && Array.from(e.dataTransfer.types).map(type => {\n return {\n type,\n data: e.dataTransfer.getData(type)\n };\n });\n\n this._clearDragStyles();\n\n const event = new CustomEvent('grid-drop', {\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n detail: {\n dropTargetItem: this._dragOverItem,\n dropLocation: this._dropLocation,\n dragData\n }\n });\n event.originalEvent = e;\n this.dispatchEvent(event);\n }\n }\n\n __formatDefaultTransferData(rows) {\n return rows\n .map(row => {\n return Array.from(row.children)\n .filter(cell => !cell.hidden && cell.getAttribute('part').indexOf('details-cell') === -1)\n .sort((a, b) => {\n return a._column._order > b._column._order ? 1 : -1;\n })\n .map(cell => cell._content.textContent.trim())\n .filter(content => content)\n .join('\\t');\n })\n .join('\\n');\n }\n\n _dragDropAccessChanged(rowsDraggable, dropMode, dragFilter, dropFilter) {\n this.filterDragAndDrop();\n }\n\n /**\n * Runs the `dragFilter` and `dropFilter` hooks for the visible cells.\n * If the filter depends on varying conditions, you may need to\n * call this function manually in order to update the draggability when\n * the conditions change.\n */\n filterDragAndDrop() {\n Array.from(this.$.items.children).filter(row => !row.hidden).forEach(\n row => {\n this._filterDragAndDrop(row, this.__getRowModel(row));\n }\n );\n }\n\n _filterDragAndDrop(row, rowData) {\n const dragDisabled = !this.rowsDraggable || (this.dragFilter && !this.dragFilter(rowData));\n const dropDisabled = !this.dropMode || (this.dropFilter && !this.dropFilter(rowData));\n\n const draggableElements = window.ShadyDOM\n ? [row]\n : Array.from(row.children).map(cell => cell._content);\n\n draggableElements.forEach(e => {\n if (dragDisabled) {\n e.removeAttribute('draggable');\n } else {\n e.setAttribute('draggable', true);\n }\n });\n\n this._toggleAttribute('drag-disabled', dragDisabled, row);\n this._toggleAttribute('drop-disabled', dropDisabled, row);\n }\n\n /**\n * Fired when starting to drag grid rows.\n *\n * @event grid-dragstart\n * @param {Object} originalEvent The native dragstart event\n * @param {Object} detail\n * @param {Object} detail.draggedItems the items in the visible viewport that are dragged\n * @param {Function} detail.setDraggedItemsCount Overrides the default number shown in the drag image on multi row drag.\n * Parameter is of type number.\n * @param {Function} detail.setDragData Sets dataTransfer data for the drag operation.\n * Note that \"text\" is the only data type supported by all the browsers the grid currently supports (including IE11).\n * The function takes two parameters:\n * - type:string The type of the data\n * - data:string The data\n */\n\n /**\n * Fired when the dragging of the rows ends.\n *\n * @event grid-dragend\n * @param {Object} originalEvent The native dragend event\n */\n\n /**\n * Fired when a drop occurs on top of the grid.\n *\n * @event grid-drop\n * @param {Object} originalEvent The native drop event\n * @param {Object} detail\n * @param {Object} detail.dropTargetItem The item of the grid row on which the drop occurred.\n * @param {string} detail.dropLocation The position at which the drop event took place relative to a row.\n * Depending on the dropMode value, the drop location can be one of the following\n * - `on-top`: when the drop occurred on top of the row\n * - `above`: when the drop occurred above the row\n * - `below`: when the drop occurred below the row\n * - `empty`: when the drop occurred over the grid, not relative to any specific row\n * @param {string} detail.dragData An array of items with the payload as a string representation as the\n * `data` property and the type of the data as `type` property.\n */\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/**\n * @polymerMixin\n */\nexport const KeyboardNavigationMixin = superClass => class KeyboardNavigationMixin extends superClass {\n static get properties() {\n return {\n _headerFocusable: {\n type: Object,\n observer: '_focusableChanged'\n },\n _itemsFocusable: {\n type: Object,\n observer: '_focusableChanged'\n },\n _footerFocusable: {\n type: Object,\n observer: '_focusableChanged'\n },\n _navigatingIsHidden: Boolean,\n _focusedItemIndex: {\n type: Number,\n value: 0\n },\n _focusedColumnOrder: Number\n };\n }\n\n ready() {\n super.ready();\n\n if (this._ios || this._android) {\n // Disable keyboard navigation on mobile devices\n return;\n }\n\n this.addEventListener('keydown', this._onKeyDown);\n this.addEventListener('focusin', this._onFocusIn);\n this.addEventListener('focusout', this._onFocusOut);\n\n // When focus goes from cell to another cell, focusin/focusout events do\n // not escape the grid’s shadowRoot, thus listening inside the shadowRoot.\n this.$.table.addEventListener('focusin', this._onCellFocusIn.bind(this));\n this.$.table.addEventListener('focusout', this._onCellFocusOut.bind(this));\n\n this.addEventListener('mousedown', () => {\n this._toggleAttribute('navigating', false, this);\n this._isMousedown = true;\n });\n this.addEventListener('mouseup', () => this._isMousedown = false);\n }\n\n _focusableChanged(focusable, oldFocusable) {\n if (oldFocusable) {\n oldFocusable.setAttribute('tabindex', '-1');\n }\n if (focusable) {\n focusable.setAttribute('tabindex', '0');\n }\n }\n\n _onKeyDown(e) {\n // Ensure standard key value, unified across browsers\n let key = e.key;\n if (key === 'Up' || key === 'Down' || key === 'Left' || key === 'Right') {\n // MSIE & Edge\n key = 'Arrow' + key;\n }\n if (key === 'Esc') {\n // MSIE & Edge\n key = 'Escape';\n }\n if (key === 'Spacebar') {\n // MSIE\n key = ' ';\n }\n\n let keyGroup;\n switch (key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'PageUp':\n case 'PageDown':\n case 'Home':\n case 'End':\n keyGroup = 'Navigation';\n break;\n case 'Enter':\n case 'Escape':\n case 'F2':\n keyGroup = 'Interaction';\n break;\n case 'Tab':\n keyGroup = 'Tab';\n break;\n case ' ':\n keyGroup = 'Space';\n break;\n }\n\n this._detectInteracting(e);\n if (this.hasAttribute('interacting') && keyGroup !== 'Interaction') {\n // When in the interacting mode, only the “Interaction” keys are handled.\n keyGroup = undefined;\n }\n\n if (keyGroup) {\n this[`_on${keyGroup}KeyDown`](e, key);\n }\n }\n\n _ensureScrolledToIndex(index) {\n const targetRowInDom = Array.from(this.$.items.children).filter(child => child.index === index)[0];\n if (!targetRowInDom) {\n this._scrollToIndex(index);\n }\n }\n\n _onNavigationKeyDown(e, key) {\n e.preventDefault();\n\n function indexOfChildElement(el) {\n return Array.prototype.indexOf.call(el.parentNode.children, el);\n }\n\n const visibleItemsCount = this._lastVisibleIndex - this._firstVisibleIndex - 1;\n\n let dx = 0, dy = 0;\n switch (key) {\n case 'ArrowRight':\n dx = 1;\n break;\n case 'ArrowLeft':\n dx = -1;\n break;\n case 'Home':\n dx = -Infinity;\n e.ctrlKey && (dy = -Infinity);\n break;\n case 'End':\n dx = Infinity;\n e.ctrlKey && (dy = Infinity);\n break;\n case 'ArrowDown':\n dy = 1;\n break;\n case 'ArrowUp':\n dy = -1;\n break;\n case 'PageDown':\n dy = visibleItemsCount;\n break;\n case 'PageUp':\n dy = -visibleItemsCount;\n break;\n }\n\n const activeCell = e.composedPath()[0];\n const columnIndex = indexOfChildElement(activeCell);\n const isRowDetails = this._elementMatches(activeCell, '[part~=\"details-cell\"]');\n\n const activeRow = activeCell.parentNode;\n\n const activeRowGroup = activeRow.parentNode;\n const maxRowIndex = (activeRowGroup === this.$.items ? this._effectiveSize : activeRowGroup.children.length) - 1;\n\n // Body rows have index property, otherwise DOM child index of the row is used.\n const rowIndex = (activeRowGroup === this.$.items) ?\n (this._focusedItemIndex !== undefined ? this._focusedItemIndex : activeRow.index) :\n indexOfChildElement(activeRow);\n\n // Index of the destination row\n let dstRowIndex = Math.max(0, Math.min(rowIndex + dy, maxRowIndex));\n\n // Row details navigation logic\n let dstIsRowDetails = false;\n if (activeRowGroup === this.$.items) {\n const item = activeRow._item;\n const dstItem = this._cache.getItemForIndex(dstRowIndex);\n // Should we navigate to row details?\n if (isRowDetails) {\n dstIsRowDetails = dy === 0;\n } else {\n dstIsRowDetails = dy === 1 && this._isDetailsOpened(item) ||\n dy === -1 && dstRowIndex !== rowIndex && this._isDetailsOpened(dstItem);\n }\n // Should we navigate between details and regular cells of the same row?\n if (dstIsRowDetails !== isRowDetails &&\n (dy === 1 && dstIsRowDetails || dy === -1 && !dstIsRowDetails)) {\n dstRowIndex = rowIndex;\n }\n }\n\n // Header and footer could have hidden rows, e. g., if none of the columns\n // or groups on the given column tree level define template. Skip them\n // in vertical keyboard navigation.\n if (activeRowGroup !== this.$.items) {\n if (dstRowIndex > rowIndex) {\n while (\n dstRowIndex < maxRowIndex &&\n activeRowGroup.children[dstRowIndex].hidden\n ) {\n dstRowIndex++;\n }\n } else if (dstRowIndex < rowIndex) {\n while (\n dstRowIndex > 0 &&\n activeRowGroup.children[dstRowIndex].hidden\n ) {\n dstRowIndex--;\n }\n }\n }\n\n // _focusedColumnOrder is memoized — this is to ensure predictable\n // navigation when entering and leaving detail and column group cells.\n if (this._focusedColumnOrder === undefined) {\n if (isRowDetails) {\n this._focusedColumnOrder = 0;\n } else {\n this._focusedColumnOrder = this._getColumns(activeRowGroup, rowIndex)[columnIndex]._order;\n }\n }\n\n // Find orderedColumnIndex — the index of order closest matching the\n // original _focusedColumnOrder in the sorted array of orders\n // of the visible columns on the destination row.\n const dstColumns = this._getColumns(activeRowGroup, dstRowIndex);\n const dstSortedColumnOrders = dstColumns.filter(c => !c.hidden).map(c => c._order)\n .sort((b, a) => (b - a));\n const maxOrderedColumnIndex = dstSortedColumnOrders.length - 1;\n const orderedColumnIndex = dstSortedColumnOrders.indexOf(\n dstSortedColumnOrders.slice(0).sort((b, a) =>\n Math.abs(b - this._focusedColumnOrder) - Math.abs(a - this._focusedColumnOrder)\n )[0]\n );\n\n // Index of the destination column order\n const dstOrderedColumnIndex = (dy === 0 && isRowDetails) ? orderedColumnIndex :\n Math.max(0, Math.min(orderedColumnIndex + dx, maxOrderedColumnIndex));\n\n if (dstOrderedColumnIndex !== orderedColumnIndex) {\n // Horizontal movement invalidates stored _focusedColumnOrder\n this._focusedColumnOrder = undefined;\n }\n\n // Ensure correct vertical scroll position, destination row is visible\n if (activeRowGroup === this.$.items) {\n this._ensureScrolledToIndex(dstRowIndex);\n }\n\n // This has to be set after scrolling, otherwise it can be removed by\n // `_preventScrollerRotatingCellFocus(item, index)` during scrolling.\n this._toggleAttribute('navigating', true, this);\n\n const columnIndexByOrder = dstColumns.reduce((acc, col, i) => (acc[col._order] = i, acc), {});\n const dstColumnIndex = columnIndexByOrder[dstSortedColumnOrders[dstOrderedColumnIndex]];\n\n // For body rows, use index property to find destination row, otherwise use DOM child index\n const dstRow = activeRowGroup === this.$.items ?\n Array.from(activeRowGroup.children).filter(el => el.index === dstRowIndex)[0] :\n activeRowGroup.children[dstRowIndex];\n if (!dstRow) {\n return;\n }\n\n // Here we go!\n const dstCell = dstIsRowDetails ?\n Array.from(dstRow.children)\n .filter(el => this._elementMatches(el, '[part~=\"details-cell\"]'))[0] :\n dstRow.children[dstColumnIndex];\n this._scrollHorizontallyToCell(dstCell);\n if (activeRowGroup === this.$.items) {\n // When scrolling with repeated keydown, sometimes FocusEvent listeners\n // are too late to update _focusedItemIndex. Ensure next keydown\n // listener invocation gets updated _focusedItemIndex value.\n this._focusedItemIndex = dstRowIndex;\n }\n\n if (activeRowGroup === this.$.items) {\n const dstRect = dstCell.getBoundingClientRect();\n const footerTop = this.$.footer.getBoundingClientRect().top;\n const headerBottom = this.$.header.getBoundingClientRect().bottom;\n if (dstRect.bottom > footerTop) {\n this.$.table.scrollTop += dstRect.bottom - footerTop;\n this._scrollHandler();\n } else if (dstRect.top < headerBottom) {\n this.$.table.scrollTop -= headerBottom - dstRect.top;\n this._scrollHandler();\n }\n }\n\n dstCell.focus();\n }\n\n _parseEventPath(path) {\n const tableIndex = path.indexOf(this.$.table);\n return {\n rowGroup: path[tableIndex - 1],\n row: path[tableIndex - 2],\n cell: path[tableIndex - 3]\n };\n }\n\n _onInteractionKeyDown(e, key) {\n const localTarget = e.composedPath()[0];\n const localTargetIsTextInput = localTarget.localName === 'input' &&\n !/^(button|checkbox|color|file|image|radio|range|reset|submit)$/i.test(localTarget.type);\n\n let wantInteracting;\n switch (key) {\n case 'Enter':\n wantInteracting = this.hasAttribute('interacting') ? !localTargetIsTextInput : true;\n break;\n case 'Escape':\n wantInteracting = false;\n break;\n case 'F2':\n wantInteracting = !this.hasAttribute('interacting');\n break;\n }\n\n const {cell} = this._parseEventPath(e.composedPath());\n\n if (this.hasAttribute('interacting') !== wantInteracting) {\n if (wantInteracting) {\n const focusTarget = cell._content.querySelector('[focus-target]') ||\n cell._content.firstElementChild;\n if (focusTarget) {\n e.preventDefault();\n focusTarget.focus();\n this._toggleAttribute('interacting', true, this);\n this._toggleAttribute('navigating', false, this);\n }\n } else {\n e.preventDefault();\n this._focusedColumnOrder = undefined;\n cell.focus();\n this._toggleAttribute('interacting', false, this);\n this._toggleAttribute('navigating', true, this);\n }\n }\n }\n\n _predictFocusStepTarget(srcElement, step) {\n const tabOrder = [\n this.$.table,\n this._headerFocusable,\n this._itemsFocusable,\n this._footerFocusable,\n this.$.focusexit\n ];\n\n let index = tabOrder.indexOf(srcElement);\n\n index += step;\n while (index >= 0 && index <= tabOrder.length - 1 &&\n (!tabOrder[index] || tabOrder[index].parentNode.hidden)) {\n index += step;\n }\n\n return tabOrder[index];\n }\n\n _onTabKeyDown(e) {\n const focusTarget = this._predictFocusStepTarget(e.composedPath()[0], e.shiftKey ? -1 : 1);\n\n if (focusTarget === this.$.table) {\n // The focus is about to exit the grid to the top.\n this.$.table.focus();\n } else if (focusTarget === this.$.focusexit) {\n // The focus is about to exit the grid to the bottom.\n this.$.focusexit.focus();\n } else if (focusTarget === this._itemsFocusable) {\n let itemsFocusTarget = focusTarget;\n const targetRow = this._itemsFocusable.parentNode;\n this._ensureScrolledToIndex(this._focusedItemIndex);\n if (targetRow.index !== this._focusedItemIndex) {\n // The target row, which is about to be focused next, has been\n // assigned with a new index since last focus, probably because of\n // scrolling. Focus the row for the stored focused item index instead.\n const columnIndex = Array.from(targetRow.children).indexOf(this._itemsFocusable);\n const focusedItemRow = Array.from(this.$.items.children)\n .filter(row => row.index === this._focusedItemIndex)[0];\n if (focusedItemRow) {\n itemsFocusTarget = focusedItemRow.children[columnIndex];\n }\n }\n e.preventDefault();\n itemsFocusTarget.focus();\n } else {\n e.preventDefault();\n focusTarget.focus();\n }\n\n this._toggleAttribute('navigating', true, this);\n }\n\n _onSpaceKeyDown(e) {\n e.preventDefault();\n\n const cell = e.composedPath()[0];\n if (cell._content && cell._content.firstElementChild) {\n const wasNavigating = this.hasAttribute('navigating');\n cell._content.firstElementChild.click();\n this._toggleAttribute('navigating', wasNavigating, this);\n } else {\n this.dispatchEvent(new CustomEvent('cell-activate', {detail: {\n model: this.__getRowModel(cell.parentElement)\n }}));\n }\n }\n\n _onFocusIn(e) {\n if (!this._isMousedown) {\n this._toggleAttribute('navigating', true, this);\n }\n\n const rootTarget = e.composedPath()[0];\n\n if (rootTarget === this.$.table ||\n rootTarget === this.$.focusexit) {\n // The focus enters the top (bottom) of the grid, meaning that user has\n // tabbed (shift-tabbed) into the grid. Move the focus to\n // the first (the last) focusable.\n this._predictFocusStepTarget(\n rootTarget,\n rootTarget === this.$.table ? 1 : -1\n ).focus();\n this._toggleAttribute('interacting', false, this);\n } else {\n this._detectInteracting(e);\n }\n }\n\n _onFocusOut(e) {\n this._toggleAttribute('navigating', false, this);\n this._detectInteracting(e);\n }\n\n _onCellFocusIn(e) {\n this._detectInteracting(e);\n\n if (e.composedPath().indexOf(this.$.table) === 3) {\n const cell = e.composedPath()[0];\n this._activeRowGroup = cell.parentNode.parentNode;\n if (this._activeRowGroup === this.$.header) {\n this._headerFocusable = cell;\n } else if (this._activeRowGroup === this.$.items) {\n this._itemsFocusable = cell;\n } else if (this._activeRowGroup === this.$.footer) {\n this._footerFocusable = cell;\n }\n // Inform cell content of the focus (used in )\n cell._content.dispatchEvent(new CustomEvent('cell-focusin', {bubbles: false}));\n }\n\n this._detectFocusedItemIndex(e);\n }\n\n _onCellFocusOut(e) {\n if (e.composedPath().indexOf(this.$.table) === 3) {\n const cell = e.composedPath()[0];\n // Inform cell content of the focus (used in )\n cell._content.dispatchEvent(new CustomEvent('cell-focusout', {bubbles: false}));\n }\n }\n\n _detectInteracting(e) {\n this._toggleAttribute('interacting',\n e.composedPath().some(el => el.localName === 'vaadin-grid-cell-content'),\n this);\n }\n\n _detectFocusedItemIndex(e) {\n const {rowGroup, row} = this._parseEventPath(e.composedPath());\n if (rowGroup === this.$.items) {\n this._focusedItemIndex = row.index;\n }\n }\n\n _preventScrollerRotatingCellFocus(item, index) {\n if (item.index === this._focusedItemIndex && this.hasAttribute('navigating') && this._activeRowGroup === this.$.items) {\n // Focused item has went, hide navigation mode\n this._navigatingIsHidden = true;\n this._toggleAttribute('navigating', false, this);\n }\n if (index === this._focusedItemIndex && this._navigatingIsHidden) {\n // Focused item is back, restore navigation mode\n this._navigatingIsHidden = false;\n this._toggleAttribute('navigating', true, this);\n }\n }\n\n _getColumns(rowGroup, rowIndex) {\n let columnTreeLevel = this._columnTree.length - 1;\n if (rowGroup === this.$.header) {\n columnTreeLevel = rowIndex;\n } else if (rowGroup === this.$.footer) {\n columnTreeLevel = this._columnTree.length - 1 - rowIndex;\n }\n return this._columnTree[columnTreeLevel];\n }\n\n _resetKeyboardNavigation() {\n if (this.$.header.firstElementChild) {\n this._headerFocusable = Array.from(this.$.header.firstElementChild.children).filter(el => !el.hidden)[0];\n }\n\n if (this.$.items.firstElementChild) {\n const firstVisibleIndexRow = this._iterateItems((pidx, vidx) => {\n if (this._firstVisibleIndex === vidx) {\n return this.$.items.children[pidx];\n }\n });\n if (firstVisibleIndexRow) {\n this._itemsFocusable = Array.from(firstVisibleIndexRow.children).filter(el => !el.hidden)[0];\n }\n }\n\n if (this.$.footer.firstElementChild) {\n this._footerFocusable = Array.from(this.$.footer.firstElementChild.children).filter(el => !el.hidden)[0];\n }\n }\n\n _scrollHorizontallyToCell(dstCell) {\n if (dstCell.hasAttribute('frozen') || this._elementMatches(dstCell, '[part~=\"details-cell\"]')) {\n // These cells are, by design, always visible, no need to scroll.\n return;\n }\n\n const dstCellRect = dstCell.getBoundingClientRect();\n const dstRow = dstCell.parentNode;\n const dstCellIndex = Array.from(dstRow.children).indexOf(dstCell);\n const tableRect = this.$.table.getBoundingClientRect();\n let leftBoundary = tableRect.left, rightBoundary = tableRect.right;\n for (let i = dstCellIndex - 1; i >= 0; i--) {\n const cell = dstRow.children[i];\n if (cell.hasAttribute('hidden') ||\n this._elementMatches(cell, '[part~=\"details-cell\"]')) {\n continue;\n }\n if (cell.hasAttribute('frozen')) {\n leftBoundary = cell.getBoundingClientRect().right;\n break;\n }\n }\n for (let i = dstCellIndex + 1; i < dstRow.children.length; i++) {\n const cell = dstRow.children[i];\n if (cell.hasAttribute('hidden') ||\n this._elementMatches(cell, '[part~=\"details-cell\"]')) {\n continue;\n }\n if (cell.hasAttribute('frozen')) {\n rightBoundary = cell.getBoundingClientRect().left;\n break;\n }\n }\n\n if (dstCellRect.left < leftBoundary) {\n this.$.table.scrollLeft += Math.round(dstCellRect.left - leftBoundary);\n }\n if (dstCellRect.right > rightBoundary) {\n this.$.table.scrollLeft += Math.round(dstCellRect.right - rightBoundary);\n }\n }\n\n _elementMatches(el, query) {\n return el.matches ? el.matches(query) :\n Array.from(el.parentNode.querySelectorAll(query)).indexOf(el) !== -1;\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\n\nimport { addListener } from '@polymer/polymer/lib/utils/gestures.js';\nimport { dom } from '@polymer/polymer/lib/legacy/polymer.dom.js';\nimport { useShadow } from '@polymer/polymer/lib/utils/settings.js';\n\n/**\n * @polymerMixin\n */\nexport const ColumnReorderingMixin = superClass => class ColumnReorderingMixin extends GestureEventListeners(superClass) {\n\n static get properties() {\n return {\n /**\n * Set to true to allow column reordering.\n */\n columnReorderingAllowed: {\n type: Boolean,\n value: false\n },\n\n _orderBaseScope: {\n type: Number,\n value: 10000000\n }\n };\n }\n\n static get observers() {\n return [\n '_updateOrders(_columnTree, _columnTree.*)'\n ];\n }\n\n ready() {\n super.ready();\n addListener(this, 'track', this._onTrackEvent);\n this._reorderGhost = this.shadowRoot.querySelector('[part=\"reorder-ghost\"]');\n\n this.addEventListener('touchstart', this._onTouchStart.bind(this));\n this.addEventListener('touchmove', this._onTouchMove.bind(this));\n this.addEventListener('touchend', this._onTouchEnd.bind(this));\n this.addEventListener('contextmenu', this._onContextMenu.bind(this));\n }\n\n _onContextMenu(e) {\n if (this.hasAttribute('reordering')) {\n e.preventDefault();\n }\n }\n\n _onTouchStart(e) {\n // Touch event, delay activation by 100ms\n this._startTouchReorderTimeout = setTimeout(() => {\n this._onTrackStart({\n detail: {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY\n }\n });\n }, 100);\n }\n\n _onTouchMove(e) {\n if (this._draggedColumn) {\n e.preventDefault();\n }\n clearTimeout(this._startTouchReorderTimeout);\n }\n\n _onTouchEnd() {\n clearTimeout(this._startTouchReorderTimeout);\n this._onTrackEnd();\n }\n\n _onTrackEvent(e) {\n if (e.detail.state === 'start') {\n const path = e.composedPath();\n const headerCell = path[path.indexOf(this.$.header) - 2];\n if (!headerCell || !headerCell._content) {\n // Not a header column\n return;\n }\n\n const activeElement = this.getRootNode().activeElement;\n if (headerCell._content.contains(this.getRootNode().activeElement)\n && (!this._ie || !this._isFocusable(activeElement))) {\n // Something was focused inside the cell\n return;\n }\n\n if (this.$.scroller.hasAttribute('column-resizing')) {\n // Resizing is in progress\n return;\n }\n\n if (!this._touchDevice) {\n // Not a touch device\n this._onTrackStart(e);\n }\n } else if (e.detail.state === 'track') {\n this._onTrack(e);\n } else if (e.detail.state === 'end') {\n this._onTrackEnd(e);\n }\n }\n\n _onTrackStart(e) {\n if (!this.columnReorderingAllowed) {\n return;\n }\n\n // Cancel reordering if there are draggable nodes on the event path\n const path = e.path || dom(e).path;\n if (path && path.filter(node => node.hasAttribute && node.hasAttribute('draggable'))[0]) {\n return;\n }\n\n const headerCell = this._cellFromPoint(e.detail.x, e.detail.y);\n if (!headerCell || headerCell.getAttribute('part').indexOf('header-cell') === -1) {\n return;\n }\n\n this._toggleAttribute('reordering', true, this);\n this._draggedColumn = headerCell._column;\n while (this._draggedColumn.parentElement.childElementCount === 1) {\n // This is the only column in the group, drag the whole group instead\n this._draggedColumn = this._draggedColumn.parentElement;\n }\n this._setSiblingsReorderStatus(this._draggedColumn, 'allowed');\n this._draggedColumn._reorderStatus = 'dragging';\n\n this._updateGhost(headerCell);\n this._reorderGhost.style.visibility = 'visible';\n this._updateGhostPosition(e.detail.x, this._touchDevice ? e.detail.y - 50 : e.detail.y);\n this._autoScroller();\n }\n\n _onTrack(e) {\n if (!this._draggedColumn) {\n // Reordering didn’t start. Skip this event.\n return;\n }\n\n const targetCell = this._cellFromPoint(e.detail.x, e.detail.y);\n if (!targetCell) {\n return;\n }\n\n const targetColumn = this._getTargetColumn(targetCell, this._draggedColumn);\n if (this._isSwapAllowed(this._draggedColumn, targetColumn) &&\n this._isSwappableByPosition(targetColumn, e.detail.x)) {\n this._swapColumnOrders(this._draggedColumn, targetColumn);\n }\n\n this._updateGhostPosition(e.detail.x, this._touchDevice ? e.detail.y - 50 : e.detail.y);\n this._lastDragClientX = e.detail.x;\n }\n\n _onTrackEnd() {\n if (!this._draggedColumn) {\n // Reordering didn’t start. Skip this event.\n return;\n }\n\n this._toggleAttribute('reordering', false, this);\n this._draggedColumn._reorderStatus = '';\n this._setSiblingsReorderStatus(this._draggedColumn, '');\n this._draggedColumn = null;\n this._lastDragClientX = null;\n this._reorderGhost.style.visibility = 'hidden';\n\n this.dispatchEvent(new CustomEvent('column-reorder', {detail: {\n columns: this._getColumnsInOrder()\n }}));\n }\n\n _getColumnsInOrder() {\n return this._columnTree.slice(0).pop()\n .filter(c => !c.hidden)\n .sort((b, a) => (b._order - a._order));\n }\n\n _cellFromPoint(x, y) {\n x = x || 0;\n y = y || 0;\n if (!this._draggedColumn) {\n this._toggleAttribute('no-content-pointer-events', true, this.$.scroller);\n }\n let cell;\n if (useShadow) {\n cell = this.shadowRoot.elementFromPoint(x, y);\n } else {\n cell = document.elementFromPoint(x, y);\n\n // Workaround a FF58 bug\n if (cell.localName === 'vaadin-grid-cell-content') {\n cell = cell.assignedSlot.parentNode;\n }\n\n }\n this._toggleAttribute('no-content-pointer-events', false, this.$.scroller);\n\n // Make sure the element is actually a cell\n if (cell && cell._column) {\n return cell;\n }\n }\n\n _updateGhostPosition(eventClientX, eventClientY) {\n const ghostRect = this._reorderGhost.getBoundingClientRect();\n // // This is where we want to position the ghost\n const targetLeft = eventClientX - ghostRect.width / 2;\n const targetTop = eventClientY - ghostRect.height / 2;\n // Current position\n const _left = parseInt(this._reorderGhost._left || 0);\n const _top = parseInt(this._reorderGhost._top || 0);\n // Reposition the ghost\n this._reorderGhost._left = _left - (ghostRect.left - targetLeft);\n this._reorderGhost._top = _top - (ghostRect.top - targetTop);\n this._reorderGhost.style.transform = `translate(${this._reorderGhost._left}px, ${this._reorderGhost._top}px)`;\n }\n\n _getInnerText(e) {\n if (e.localName) {\n // Custom implementation needed since IE11 doesn't respect the spec in case of hidden elements\n if (getComputedStyle(e).display === 'none') {\n return '';\n } else {\n return Array.from(e.childNodes).map(n => this._getInnerText(n)).join('');\n }\n } else {\n return e.textContent;\n }\n }\n\n _updateGhost(cell) {\n const ghost = this._reorderGhost;\n ghost.textContent = this._getInnerText(cell._content);\n const style = window.getComputedStyle(cell);\n ['boxSizing', 'display', 'width', 'height', 'background', 'alignItems', 'padding', 'border', 'flex-direction', 'overflow']\n .forEach(propertyName => ghost.style[propertyName] = style[propertyName]);\n return ghost;\n }\n\n _updateOrders(columnTree, splices) {\n if (columnTree === undefined || splices === undefined) {\n return;\n }\n\n // Set order numbers to top-level columns\n columnTree[0].forEach((column, index) => column._order = (index + 1) * this._orderBaseScope);\n }\n\n _setSiblingsReorderStatus(column, status) {\n Array.from(column.parentNode.children)\n .filter(child => /column/.test(child.localName) && this._isSwapAllowed(child, column))\n .forEach(sibling => sibling._reorderStatus = status);\n }\n\n _autoScroller() {\n if (this._lastDragClientX) {\n const rightDiff = this._lastDragClientX - this.getBoundingClientRect().right + 50;\n const leftDiff = this.getBoundingClientRect().left - this._lastDragClientX + 50;\n\n if (rightDiff > 0) {\n this.$.table.scrollLeft += rightDiff / 10;\n } else if (leftDiff > 0) {\n this.$.table.scrollLeft -= leftDiff / 10;\n }\n this._scrollHandler();\n }\n\n if (this._draggedColumn) {\n this.async(this._autoScroller, 10);\n }\n }\n\n _isSwapAllowed(column1, column2) {\n if (column1 && column2) {\n const differentColumns = column1 !== column2;\n const sameParent = column1.parentElement === column2.parentElement;\n const sameFrozen = column1.frozen === column2.frozen;\n return differentColumns && sameParent && sameFrozen;\n }\n }\n\n _isSwappableByPosition(targetColumn, clientX) {\n const targetCell =\n Array.from(this.$.header.querySelectorAll('tr:not([hidden]) [part~=\"cell\"]')).filter(cell => targetColumn.contains(cell._column))[0];\n const sourceCellRect = this.$.header.querySelector('tr:not([hidden]) [reorder-status=dragging]').getBoundingClientRect();\n const targetRect = targetCell.getBoundingClientRect();\n if (targetRect.left > sourceCellRect.left) {\n return clientX > targetRect.right - sourceCellRect.width;\n } else {\n return clientX < targetRect.left + sourceCellRect.width;\n }\n }\n\n _swapColumnOrders(column1, column2) {\n const _order = column1._order;\n column1._order = column2._order;\n column2._order = _order;\n this._updateLastFrozen();\n this._updateFirstAndLastColumn();\n }\n\n _getTargetColumn(targetCell, draggedColumn) {\n if (targetCell && draggedColumn) {\n let candidate = targetCell._column;\n while (candidate.parentElement !== draggedColumn.parentElement && candidate !== this) {\n candidate = candidate.parentElement;\n }\n if (candidate.parentElement === draggedColumn.parentElement) {\n return candidate;\n } else {\n return targetCell._column;\n }\n }\n }\n\n};\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { Templatizer } from './vaadin-grid-templatizer.js';\n\n/**\n * @polymerMixin\n */\nexport const ColumnBaseMixin = superClass => class ColumnBaseMixin extends superClass {\n static get properties() {\n return {\n /**\n * When set to true, the column is user-resizable.\n * @default false\n */\n resizable: {\n type: Boolean,\n value: function() {\n if (this.localName === 'vaadin-grid-column-group') {\n return;\n }\n\n const parent = this.parentNode;\n if (parent && parent.localName === 'vaadin-grid-column-group') {\n return parent.resizable || false;\n } else {\n return false;\n }\n }\n },\n\n _headerTemplate: {\n type: Object\n },\n\n _footerTemplate: {\n type: Object\n },\n\n /**\n * When true, the column is frozen. When a column inside of a column group is frozen,\n * all of the sibling columns inside the group will get frozen also.\n */\n frozen: {\n type: Boolean,\n value: false\n },\n\n /**\n * When set to true, the cells for this column are hidden.\n */\n hidden: {\n type: Boolean\n },\n\n /**\n * Text content to display in the header cell of the column.\n */\n header: {\n type: String\n },\n\n /**\n * Aligns the columns cell content horizontally.\n * Supported values: \"start\", \"center\" and \"end\".\n */\n textAlign: {\n type: String\n },\n\n _lastFrozen: {\n type: Boolean,\n value: false\n },\n\n _order: Number,\n\n _reorderStatus: Boolean,\n\n _emptyCells: Array,\n\n _headerCell: Object,\n\n _footerCell: Object,\n\n _grid: Object,\n\n /**\n * Custom function for rendering the header content.\n * Receives two arguments:\n *\n * - `root` The header cell content DOM element. Append your content to it.\n * - `column` The `` element.\n */\n headerRenderer: Function,\n\n /**\n * Custom function for rendering the footer content.\n * Receives two arguments:\n *\n * - `root` The footer cell content DOM element. Append your content to it.\n * - `column` The `` element.\n */\n footerRenderer: Function\n };\n }\n\n static get observers() {\n return [\n '_widthChanged(width, _headerCell, _footerCell, _cells.*)',\n '_frozenChanged(frozen, _headerCell, _footerCell, _cells.*)',\n '_flexGrowChanged(flexGrow, _headerCell, _footerCell, _cells.*)',\n '_pathOrHeaderChanged(path, header, _headerCell, _footerCell, _cells.*, renderer, headerRenderer, _bodyTemplate, _headerTemplate)',\n '_textAlignChanged(textAlign, _cells.*, _headerCell, _footerCell)',\n '_orderChanged(_order, _headerCell, _footerCell, _cells.*)',\n '_lastFrozenChanged(_lastFrozen)',\n '_setBodyTemplateOrRenderer(_bodyTemplate, renderer, _cells, _cells.*)',\n '_setHeaderTemplateOrRenderer(_headerTemplate, headerRenderer, _headerCell)',\n '_setFooterTemplateOrRenderer(_footerTemplate, footerRenderer, _footerCell)',\n '_resizableChanged(resizable, _headerCell)',\n '_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells.*)',\n '_hiddenChanged(hidden, _headerCell, _footerCell, _cells.*)'\n ];\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n\n this._bodyTemplate && (this._bodyTemplate.templatizer._grid = this._grid);\n this._headerTemplate && (this._headerTemplate.templatizer._grid = this._grid);\n this._footerTemplate && (this._footerTemplate.templatizer._grid = this._grid);\n\n this._templateObserver.flush();\n if (!this._bodyTemplate) {\n // The observer might not have triggered if the tag is empty. Run manually.\n this._templateObserver.callback();\n }\n\n requestAnimationFrame(() => {\n this._allCells.forEach(cell => {\n if (!cell._content.parentNode) {\n this._grid && this._grid.appendChild(cell._content);\n }\n });\n });\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n\n requestAnimationFrame(() => {\n if (!this._findHostGrid()) {\n this._allCells.forEach(cell => {\n if (cell._content.parentNode) {\n cell._content.parentNode.removeChild(cell._content);\n }\n });\n }\n });\n\n this._gridValue = undefined;\n }\n\n _findHostGrid() {\n let el = this;\n // Custom elements extending grid must have a specific localName\n while (el && !/^vaadin.*grid(-pro)?$/.test(el.localName)) {\n el = el.assignedSlot ? el.assignedSlot.parentNode : el.parentNode;\n }\n return el || undefined;\n }\n\n get _grid() {\n if (!this._gridValue) {\n this._gridValue = this._findHostGrid();\n }\n return this._gridValue;\n }\n\n get _allCells() {\n return []\n .concat(this._cells || [])\n .concat(this._emptyCells || [])\n .concat(this._headerCell)\n .concat(this._footerCell)\n .filter(cell => cell);\n }\n\n constructor() {\n super();\n\n this._templateObserver = new FlattenedNodesObserver(this, info => {\n this._headerTemplate = this._prepareHeaderTemplate();\n this._footerTemplate = this._prepareFooterTemplate();\n this._bodyTemplate = this._prepareBodyTemplate();\n });\n }\n\n _prepareHeaderTemplate() {\n return this._prepareTemplatizer(this._findTemplate(true) || null, {});\n }\n\n _prepareFooterTemplate() {\n return this._prepareTemplatizer(this._findTemplate(false, true) || null, {});\n }\n\n _prepareBodyTemplate() {\n return this._prepareTemplatizer(this._findTemplate() || null);\n }\n\n _prepareTemplatizer(template, instanceProps) {\n if (template && !template.templatizer) {\n const templatizer = new Templatizer();\n templatizer._grid = this._grid;\n templatizer.dataHost = this.dataHost;\n templatizer._instanceProps = instanceProps || templatizer._instanceProps;\n templatizer.template = template;\n template.templatizer = templatizer;\n }\n\n return template;\n }\n\n _renderHeaderAndFooter() {\n if (this.headerRenderer) {\n this.__runRenderer(this.headerRenderer, this._headerCell);\n }\n if (this.footerRenderer) {\n this.__runRenderer(this.footerRenderer, this._footerCell);\n }\n }\n\n __runRenderer(renderer, cell, rowData) {\n const args = [cell._content, this];\n if (rowData && rowData.item) {\n args.push(rowData);\n }\n renderer.apply(this, args);\n }\n\n __setColumnTemplateOrRenderer(template, renderer, cells) {\n if (template && renderer) {\n throw new Error('You should only use either a renderer or a template');\n }\n\n cells.forEach(cell => {\n const model = this._grid.__getRowModel(cell.parentElement);\n\n if (renderer) {\n cell._renderer = renderer;\n\n if (model.item || renderer === this.headerRenderer || renderer === this.footerRenderer) {\n this.__runRenderer(renderer, cell, model);\n }\n } else if (cell._template !== template) {\n cell._template = template;\n\n cell._content.innerHTML = '';\n template.templatizer._grid = template.templatizer._grid || this._grid;\n const inst = template.templatizer.createInstance();\n cell._content.appendChild(inst.root);\n cell._instance = inst;\n if (model.item) {\n cell._instance.setProperties(model);\n }\n }\n });\n }\n\n _setBodyTemplateOrRenderer(template, renderer, cells, splices) {\n if ((template || renderer) && cells) {\n this.__setColumnTemplateOrRenderer(template, renderer, cells);\n }\n }\n\n _setHeaderTemplateOrRenderer(headerTemplate, headerRenderer, headerCell) {\n if ((headerTemplate || headerRenderer) && headerCell) {\n this.__setColumnTemplateOrRenderer(headerTemplate, headerRenderer, [headerCell]);\n }\n }\n\n _setFooterTemplateOrRenderer(footerTemplate, footerRenderer, footerCell) {\n if ((footerTemplate || footerRenderer) && footerCell) {\n this.__setColumnTemplateOrRenderer(footerTemplate, footerRenderer, [footerCell]);\n this._grid.__updateHeaderFooterRowVisibility(footerCell.parentElement);\n }\n }\n\n _selectFirstTemplate(header = false, footer = false) {\n return FlattenedNodesObserver.getFlattenedNodes(this)\n .filter(node =>\n node.localName === 'template'\n && node.classList.contains('header') === header\n && node.classList.contains('footer') === footer\n )[0];\n }\n\n _findTemplate(header, footer) {\n const template = this._selectFirstTemplate(header, footer);\n if (template) {\n if (this.dataHost) {\n // set dataHost to the context where template has been defined\n template._rootDataHost = this.dataHost._rootDataHost || this.dataHost;\n }\n }\n return template;\n }\n\n _flexGrowChanged(flexGrow, headerCell, footerCell, cells) {\n if (this.parentElement && this.parentElement._columnPropChanged) {\n this.parentElement._columnPropChanged('flexGrow');\n }\n\n this._allCells.forEach(cell => cell.style.flexGrow = flexGrow);\n }\n\n _orderChanged(order, headerCell, footerCell, cells) {\n this._allCells.forEach(cell => cell.style.order = order);\n }\n\n _widthChanged(width, headerCell, footerCell, cells) {\n if (this.parentElement && this.parentElement._columnPropChanged) {\n this.parentElement._columnPropChanged('width');\n }\n\n this._allCells.forEach(cell => cell.style.width = width);\n\n // Force a reflow to workaround browser issues causing double scrollbars to grid\n // https://github.com/vaadin/vaadin-grid/issues/1586\n if (this._grid && this._grid.__forceReflow) {\n this._grid.__forceReflow();\n }\n }\n\n _frozenChanged(frozen, headerCell, footerCell, cells) {\n if (this.parentElement && this.parentElement._columnPropChanged) {\n this.parentElement._columnPropChanged('frozen', frozen);\n }\n\n this._allCells.forEach(cell => this._toggleAttribute('frozen', frozen, cell));\n\n this._grid && this._grid._frozenCellsChanged && this._grid._frozenCellsChanged();\n }\n\n _lastFrozenChanged(lastFrozen) {\n this._allCells.forEach(cell => this._toggleAttribute('last-frozen', lastFrozen, cell));\n\n if (this.parentElement && this.parentElement._columnPropChanged) {\n this.parentElement._lastFrozen = lastFrozen;\n }\n }\n\n _pathOrHeaderChanged(path, header, headerCell, footerCell, cells, renderer, headerRenderer, bodyTemplate, headerTemplate) {\n const hasHeaderText = header !== undefined;\n if (!headerRenderer && !headerTemplate && hasHeaderText && headerCell) {\n this.__setTextContent(headerCell._content, header);\n }\n\n if (path && cells.value) {\n if (!renderer && !bodyTemplate) {\n const pathRenderer = (root, owner, {item}) => this.__setTextContent(root, this.get(path, item));\n this.__setColumnTemplateOrRenderer(undefined, pathRenderer, cells.value);\n }\n\n if (!headerRenderer && !headerTemplate && !hasHeaderText && headerCell && header !== null) {\n this.__setTextContent(headerCell._content, this._generateHeader(path));\n }\n }\n\n if (headerCell) {\n this._grid.__updateHeaderFooterRowVisibility(headerCell.parentElement);\n }\n }\n\n __setTextContent(node, textContent) {\n node.textContent !== textContent && (node.textContent = textContent);\n }\n\n _generateHeader(path) {\n return path\n .substr(path.lastIndexOf('.') + 1)\n .replace(/([A-Z])/g, '-$1').toLowerCase()\n .replace(/-/g, ' ')\n .replace(/^./, match => match.toUpperCase());\n }\n\n _toggleAttribute(name, bool, node) {\n if (node.hasAttribute(name) === !bool) {\n if (bool) {\n node.setAttribute(name, '');\n } else {\n node.removeAttribute(name);\n }\n }\n }\n\n _reorderStatusChanged(reorderStatus, headerCell, footerCell, cells) {\n this._allCells.forEach(cell => cell.setAttribute('reorder-status', reorderStatus));\n }\n\n _resizableChanged(resizable, headerCell) {\n if (resizable === undefined || headerCell === undefined) {\n return;\n }\n\n if (headerCell) {\n [headerCell].concat(this._emptyCells).forEach(cell => {\n if (cell) {\n const existingHandle = cell.querySelector('[part~=\"resize-handle\"]');\n if (existingHandle) {\n cell.removeChild(existingHandle);\n }\n\n if (resizable) {\n const handle = document.createElement('div');\n handle.setAttribute('part', 'resize-handle');\n cell.appendChild(handle);\n }\n }\n });\n }\n }\n\n _textAlignChanged(textAlign, _cells, _headerCell, _footerCell) {\n if (textAlign === undefined) {\n return;\n }\n if (['start', 'end', 'center'].indexOf(textAlign) === -1) {\n console.warn('textAlign can only be set as \"start\", \"end\" or \"center\"');\n return;\n }\n\n let textAlignFallback;\n if (getComputedStyle(this._grid).direction === 'ltr') {\n if (textAlign === 'start') {\n textAlignFallback = 'left';\n } else if (textAlign === 'end') {\n textAlignFallback = 'right';\n }\n } else {\n if (textAlign === 'start') {\n textAlignFallback = 'right';\n } else if (textAlign === 'end') {\n textAlignFallback = 'left';\n }\n }\n\n this._allCells.forEach(cell => {\n cell._content.style.textAlign = textAlign;\n if (getComputedStyle(cell._content).textAlign !== textAlign) {\n cell._content.style.textAlign = textAlignFallback;\n }\n });\n }\n\n _hiddenChanged(hidden, headerCell, footerCell, cells) {\n if (this.parentElement && this.parentElement._columnPropChanged) {\n this.parentElement._columnPropChanged('hidden', hidden);\n }\n\n this._allCells.forEach(cell => this._toggleAttribute('hidden', hidden, cell));\n\n if (!!hidden !== !!this._previousHidden && this._grid) {\n this._grid._updateLastFrozen && this._grid._updateLastFrozen();\n this._grid.notifyResize && this._grid.notifyResize();\n this._grid._resetKeyboardNavigation && this._grid._resetKeyboardNavigation();\n }\n this._previousHidden = hidden;\n }\n\n};\n\n/**\n * A `` is used to configure how a column in ``\n * should look like.\n *\n * See `` documentation and demos for instructions and examples on how\n * to configure the ``.\n * ```\n *\n * @memberof Vaadin\n * @mixes Vaadin.Grid.ColumnBaseMixin\n */\nclass GridColumnElement extends ColumnBaseMixin(PolymerElement) {\n static get is() {\n return 'vaadin-grid-column';\n }\n\n static get properties() {\n return {\n /**\n * Width of the cells for this column.\n */\n width: {\n type: String,\n value: '100px'\n },\n\n /**\n * Flex grow ratio for the cell widths. When set to 0, cell width is fixed.\n */\n flexGrow: {\n type: Number,\n value: 1\n },\n\n /**\n * Custom function for rendering the cell content.\n * Receives three arguments:\n *\n * - `root` The cell content DOM element. Append your content to it.\n * - `column` The `` element.\n * - `rowData` The object with the properties related with\n * the rendered item, contains:\n * - `rowData.index` The index of the item.\n * - `rowData.item` The item.\n * - `rowData.expanded` Sublevel toggle state.\n * - `rowData.level` Level of the tree represented with a horizontal offset of the toggle button.\n * - `rowData.selected` Selected state.\n */\n renderer: Function,\n\n /**\n * Path to an item sub-property whose value gets displayed in the column body cells.\n * The property name is also shown in the column header if an explicit header or renderer isn't defined.\n */\n path: {\n type: String\n },\n\n /**\n * Automatically sets the width of the column based on the column contents when this is set to `true`.\n *\n * For performance reasons the column width is calculated automatically only once when the grid items\n * are rendered for the first time and the calculation only considers the rows which are currently\n * rendered in DOM (a bit more than what is currently visible). If the grid is scrolled, or the cell\n * content changes, the column width might not match the contents anymore.\n *\n * Hidden columns are ignored in the calculation and their widths are not automatically updated when\n * you show a column that was initially hidden.\n *\n * You can manually trigger the auto sizing behavior again by calling `grid.recalculateColumnWidths()`.\n *\n * The column width may still grow larger when `flexGrow` is not 0.\n */\n autoWidth: {\n type: Boolean,\n value: false\n },\n\n _bodyTemplate: {\n type: Object\n },\n\n _cells: Array\n\n };\n }\n\n}\n\ncustomElements.define(GridColumnElement.is, GridColumnElement);\nexport { GridColumnElement };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * This Element is used internally by vaadin-grid.\n *\n * @private\n */\nclass GridOuterScrollerElement extends (class extends PolymerElement {}) {\n static get template() {\n return html`\n \n\n \n`;\n }\n\n static get is() {\n return 'vaadin-grid-outer-scroller';\n }\n\n static get properties() {\n return {\n\n scrollTarget: {\n type: Object\n },\n\n scrollHandler: {\n type: Object\n },\n\n passthrough: {\n type: Boolean,\n reflectToAttribute: true,\n value: true\n },\n\n outerScrolling: Boolean,\n\n noScrollbars: Boolean,\n\n _touchDevice: Boolean\n };\n }\n\n ready() {\n super.ready();\n this.addEventListener('scroll', () => this._syncScrollTarget());\n this.parentElement.addEventListener('mousemove', this._onMouseMove.bind(this));\n\n // for some reason scroll bars are hidden in iOS if this style is\n // added in stylesheets or before attaching.\n this.style.webkitOverflowScrolling = 'touch';\n\n this.addEventListener('mousedown', _ => this.outerScrolling = true);\n this.addEventListener('mouseup', _ => {\n this.outerScrolling = false;\n this.scrollHandler._scrollHandler();\n });\n }\n\n _onMouseMove(e) {\n // Ignore mousemove events on touch devices\n if (!this._touchDevice) {\n if (this.noScrollbars && this.parentElement.hasAttribute('scroll-period')) {\n this.passthrough = e.offsetY <= this.clientHeight - 20 && e.offsetX <= this.clientWidth - 20;\n } else {\n this.passthrough = e.offsetY <= this.clientHeight && e.offsetX <= this.clientWidth;\n }\n }\n }\n\n syncOuterScroller() {\n this.scrollTop = this.scrollTarget.scrollTop;\n this.scrollLeft = this.scrollTarget.scrollLeft;\n }\n\n _syncScrollTarget() {\n requestAnimationFrame(() => {\n this.scrollTarget.scrollTop = this.scrollTop;\n this.scrollTarget.scrollLeft = this.scrollLeft;\n this.scrollHandler._scrollHandler();\n });\n\n }\n}\n\ncustomElements.define(GridOuterScrollerElement.is, GridOuterScrollerElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/lib/elements/dom-module.js';\n\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nconst VaadinGridStyles = document.createElement('dom-module');\n\n// NOTE(web-padawan): https://github.com/vaadin/vaadin-grid/issues/1514\nVaadinGridStyles.appendChild(\n html`\n \n`);\n\nconst safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nconst firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nif (safari || firefox) {\n const scrollingStyles = document.createElement('style');\n scrollingStyles.textContent = `\n [scrolling][safari] #outerscroller,\n [scrolling][firefox] #outerscroller {\n pointer-events: auto;\n }\n\n [ios] #outerscroller {\n pointer-events: auto;\n z-index: -3;\n }\n\n [ios][scrolling] #outerscroller {\n z-index: 0;\n }\n `;\n VaadinGridStyles.querySelector('template').content.appendChild(scrollingStyles);\n}\n\nVaadinGridStyles.register('vaadin-grid-styles');\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ScrollerElement } from './vaadin-grid-scroller.js';\nimport { A11yMixin } from './vaadin-grid-a11y-mixin.js';\nimport { ActiveItemMixin } from './vaadin-grid-active-item-mixin.js';\nimport { ArrayDataProviderMixin } from './vaadin-grid-array-data-provider-mixin.js';\nimport { ColumnResizingMixin } from './vaadin-grid-column-resizing-mixin.js';\nimport { DataProviderMixin } from './vaadin-grid-data-provider-mixin.js';\nimport { DynamicColumnsMixin } from './vaadin-grid-dynamic-columns-mixin.js';\nimport { EventContextMixin } from './vaadin-grid-event-context-mixin.js';\nimport { FilterMixin } from './vaadin-grid-filter-mixin.js';\nimport { RowDetailsMixin } from './vaadin-grid-row-details-mixin.js';\nimport { ScrollMixin } from './vaadin-grid-scroll-mixin.js';\nimport { SelectionMixin } from './vaadin-grid-selection-mixin.js';\nimport { SortMixin } from './vaadin-grid-sort-mixin.js';\nimport { StylingMixin } from './vaadin-grid-styling-mixin.js';\nimport { DragAndDropMixin } from './vaadin-grid-drag-and-drop-mixin.js';\nimport { KeyboardNavigationMixin } from './vaadin-grid-keyboard-navigation-mixin.js';\nimport { ColumnReorderingMixin } from './vaadin-grid-column-reordering-mixin.js';\nimport './vaadin-grid-column.js';\nimport './vaadin-grid-outer-scroller.js';\nimport './vaadin-grid-styles.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { beforeNextRender, afterNextRender } from '@polymer/polymer/lib/utils/render-status.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nimport { timeOut, animationFrame } from '@polymer/polymer/lib/utils/async.js';\n\nconst TOUCH_DEVICE = (() => {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n})();\n\n/**\n *\n * `` is a free, high quality data grid / data table Web Component. The content of the\n * the grid can be populated in two ways: imperatively by using renderer callback function and\n * declaratively by using Polymer's Templates.\n *\n * ### Quick Start\n *\n * Start with an assigning an array to the [`items`](#/elements/vaadin-grid#property-items) property to visualize your data.\n *\n * Use the [``](#/elements/vaadin-grid-column) element to configure the grid columns. Set `path` and `header`\n * shorthand properties for the columns to define what gets rendered in the cells of the column.\n *\n * #### Example:\n * ```html\n * \n * \n * \n * \n * \n * ```\n *\n * For custom content `vaadin-grid-column` element provides you with three types of `renderer` callback functions: `headerRenderer`,\n * `renderer` and `footerRenderer`.\n *\n * Each of those renderer functions provides `root`, `column`, `rowData` arguments when applicable.\n * Generate DOM content, append it to the `root` element and control the state\n * of the host element by accessing `column`. Before generating new content,\n * users are able to check if there is already content in `root` for reusing it.\n *\n * Renderers are called on initialization of new column cells and each time the\n * related row data is updated. DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * #### Example:\n * ```html\n * \n * \n * \n * \n * \n * ```\n * ```js\n * const grid = document.querySelector('vaadin-grid');\n * grid.items = [{'name': 'John', 'surname': 'Lennon', 'role': 'singer'},\n * {'name': 'Ringo', 'surname': 'Starr', 'role': 'drums'}];\n *\n * const columns = grid.querySelectorAll('vaadin-grid-column');\n *\n * columns[0].headerRenderer = function(root) {\n * root.textContent = 'Name';\n * };\n * columns[0].renderer = function(root, column, rowData) {\n * root.textContent = rowData.item.name;\n * };\n *\n * columns[1].headerRenderer = function(root) {\n * root.textContent = 'Surname';\n * };\n * columns[1].renderer = function(root, column, rowData) {\n * root.textContent = rowData.item.surname;\n * };\n *\n * columns[2].headerRenderer = function(root) {\n * root.textContent = 'Role';\n * };\n * columns[2].renderer = function(root, column, rowData) {\n * root.textContent = rowData.item.role;\n * };\n * ```\n *\n * Alternatively, the content can be provided with Polymer's Templates:\n *\n * #### Example:\n * ```html\n * \n * \n * \n * [[item.name]]\n * \n * \n * \n * [[item.surname]]\n * \n * \n * \n * [[item.role]]\n * \n * \n * ```\n *\n * The following helper elements can be used for further customization:\n * - [``](#/elements/vaadin-grid-column-group)\n * - [``](#/elements/vaadin-grid-filter)\n * - [``](#/elements/vaadin-grid-sorter)\n * - [``](#/elements/vaadin-grid-selection-column)\n * - [``](#/elements/vaadin-grid-tree-toggle)\n *\n * __Note that the helper elements must be explicitly imported.__\n * If you want to import everything at once you can use the `all-imports.html` bundle.\n *\n * A column template can be decorated with one the following class names to specify its purpose\n * - `header`: Marks a header template\n * - `footer`: Marks a footer template\n * - `row-details`: Marks a row details template\n *\n * The following built-in template variables can be bound to inside the column templates:\n * - `[[index]]`: Number representing the row index\n * - `[[item]]` and it's sub-properties: Data object (provided by a data provider / items array)\n * - `{{selected}}`: True if the item is selected (can be two-way bound)\n * - `{{detailsOpened}}`: True if the item has row details opened (can be two-way bound)\n * - `{{expanded}}`: True if the item has tree sublevel expanded (can be two-way bound)\n * - `[[level]]`: Number of the tree sublevel of the item, first level-items have 0\n *\n * ### Lazy Loading with Function Data Provider\n *\n * In addition to assigning an array to the items property, you can alternatively\n * provide the `` data through the\n * [`dataProvider`](#/elements/vaadin-grid#property-dataProvider) function property.\n * The `` calls this function lazily, only when it needs more data\n * to be displayed.\n *\n * See the [`dataProvider`](#/elements/vaadin-grid#property-dataProvider) in\n * the API reference below for the detailed data provider arguments description,\n * and the “Assigning Data” page in the demos.\n *\n * __Note that expanding the tree grid's item will trigger a call to the `dataProvider`.__\n *\n * __Also, note that when using function data providers, the total number of items\n * needs to be set manually. The total number of items can be returned\n * in the second argument of the data provider callback:__\n *\n * ```javascript\n * grid.dataProvider = function(params, callback) {\n * var url = 'https://api.example/data' +\n * '?page=' + params.page + // the requested page index\n * '&per_page=' + params.pageSize; // number of items on the page\n * var xhr = new XMLHttpRequest();\n * xhr.onload = function() {\n * var response = JSON.parse(xhr.responseText);\n * callback(\n * response.employees, // requested page of items\n * response.totalSize // total number of items\n * );\n * };\n * xhr.open('GET', url, true);\n * xhr.send();\n * };\n * ```\n *\n * __Alternatively, you can use the `size` property to set the total number of items:__\n *\n * ```javascript\n * grid.size = 200; // The total number of items\n * grid.dataProvider = function(params, callback) {\n * var url = 'https://api.example/data' +\n * '?page=' + params.page + // the requested page index\n * '&per_page=' + params.pageSize; // number of items on the page\n * var xhr = new XMLHttpRequest();\n * xhr.onload = function() {\n * var response = JSON.parse(xhr.responseText);\n * callback(response.employees);\n * };\n * xhr.open('GET', url, true);\n * xhr.send();\n * };\n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `row` | Row in the internal table\n * `cell` | Cell in the internal table\n * `header-cell` | Header cell in the internal table\n * `body-cell` | Body cell in the internal table\n * `footer-cell` | Footer cell in the internal table\n * `details-cell` | Row details cell in the internal table\n * `resize-handle` | Handle for resizing the columns\n * `reorder-ghost` | Ghost element of the header cell being dragged\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `loading` | Set when the grid is loading data from data provider | :host\n * `interacting` | Keyboard navigation in interaction mode | :host\n * `navigating` | Keyboard navigation in navigation mode | :host\n * `overflow` | Set when rows are overflowing the grid viewport. Possible values: `top`, `bottom`, `left`, `right` | :host\n * `reordering` | Set when the grid's columns are being reordered | :host\n * `dragover` | Set when the grid (not a specific row) is dragged over | :host\n * `dragging-rows` : Set when grid rows are dragged | :host\n * `reorder-status` | Reflects the status of a cell while columns are being reordered | cell\n * `frozen` | Frozen cell | cell\n * `last-frozen` | Last frozen cell | cell\n* * `first-column` | First visible cell on a row | cell\n * `last-column` | Last visible cell on a row | cell\n * `selected` | Selected row | row\n * `expanded` | Expanded row | row\n * `details-opened` | Row with details open | row\n * `loading` | Row that is waiting for data from data provider | row\n * `odd` | Odd row | row\n * `first` | The first body row | row\n * `dragstart` | Set for one frame when drag of a row is starting. The value is a number when multiple rows are dragged | row\n * `dragover` | Set when the row is dragged over | row\n * `drag-disabled` | Set to a row that isn't available for dragging | row\n * `drop-disabled` | Set to a row that can't be dropped on top of | row\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.Grid.A11yMixin\n * @mixes Vaadin.Grid.ActiveItemMixin\n * @mixes Vaadin.Grid.ArrayDataProviderMixin\n * @mixes Vaadin.Grid.ColumnResizingMixin\n * @mixes Vaadin.Grid.DataProviderMixin\n * @mixes Vaadin.Grid.DynamicColumnsMixin\n * @mixes Vaadin.Grid.FilterMixin\n * @mixes Vaadin.Grid.RowDetailsMixin\n * @mixes Vaadin.Grid.ScrollMixin\n * @mixes Vaadin.Grid.SelectionMixin\n * @mixes Vaadin.Grid.SortMixin\n * @mixes Vaadin.Grid.KeyboardNavigationMixin\n * @mixes Vaadin.Grid.ColumnReorderingMixin\n * @mixes Vaadin.Grid.EventContextMixin\n * @mixes Vaadin.Grid.StylingMixin\n * @mixes Vaadin.Grid.DragAndDropMixin\n * @demo demo/index.html\n */\nclass GridElement extends\n ElementMixin(\n ThemableMixin(\n DataProviderMixin(\n ArrayDataProviderMixin(\n DynamicColumnsMixin(\n ActiveItemMixin(\n ScrollMixin(\n SelectionMixin(\n SortMixin(\n RowDetailsMixin(\n KeyboardNavigationMixin(\n A11yMixin(\n FilterMixin(\n ColumnReorderingMixin(\n ColumnResizingMixin(\n EventContextMixin(\n DragAndDropMixin(\n StylingMixin(\n ScrollerElement)))))))))))))))))) {\n static get template() {\n return html`\n \n\n \n\n \n \n\n \n`;\n }\n\n static get is() {\n return 'vaadin-grid';\n }\n\n static get version() {\n return '5.4.6';\n }\n\n static get observers() {\n return [\n '_columnTreeChanged(_columnTree, _columnTree.*)'\n ];\n }\n\n static get properties() {\n return {\n\n _this: {\n type: Object,\n value: function() {\n return this;\n }\n },\n\n _safari: {\n type: Boolean,\n value: /^((?!chrome|android).)*safari/i.test(navigator.userAgent)\n },\n\n _ios: {\n type: Boolean,\n value: /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream\n },\n\n _edge: {\n type: Boolean,\n value: typeof CSS !== 'undefined' && CSS.supports('(-ms-ime-align:auto)')\n },\n\n _ie: {\n type: Boolean,\n value: !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/))\n },\n\n _firefox: {\n type: Boolean,\n value: navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n },\n\n _android: {\n type: Boolean,\n value: /android/i.test(navigator.userAgent)\n },\n\n _touchDevice: {\n type: Boolean,\n value: TOUCH_DEVICE\n },\n\n /**\n * If true, the grid's height is defined by the number of its rows.\n */\n heightByRows: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n observer: '_heightByRowsChanged'\n }\n };\n }\n\n constructor() {\n super();\n this.addEventListener('animationend', this._onAnimationEnd);\n }\n\n __hasRowsWithClientHeight() {\n return !!Array.from(this.$.items.children).filter(row => row.clientHeight).length;\n }\n\n __setInitialColumnWidths() {\n if (!this._initialColumnWidthsSet && this.__hasRowsWithClientHeight()) {\n this._initialColumnWidthsSet = true;\n this.recalculateColumnWidths();\n }\n }\n\n /**\n * @param {Array} cols the columns to auto size based on their content width\n */\n _recalculateColumnWidths(cols) {\n // Note: The `cols.forEach()` loops below could be implemented as a single loop but this has been\n // split for performance reasons to batch these similar actions [write/read] together to avoid\n // unnecessary layout trashing.\n\n // [write] Set automatic width for all cells (breaks column alignment)\n cols.forEach(col => {\n col.width = 'auto';\n col._origFlexGrow = col.flexGrow;\n col.flexGrow = 0;\n });\n // [read] Measure max cell width in each column\n cols.forEach(col => {\n col._currentWidth = 0;\n // Note: _allCells only contains cells which are currently rendered in DOM\n col._allCells.forEach(c => {\n const cellWidth = Math.ceil(c.getBoundingClientRect().width);\n col._currentWidth = Math.max(col._currentWidth, cellWidth);\n });\n });\n // [write] Set column widths to fit widest measured content\n cols.forEach(col => {\n col.width = `${col._currentWidth}px`;\n col.flexGrow = col._origFlexGrow;\n col._currentWidth = undefined;\n col._origFlexGrow = undefined;\n });\n }\n\n /**\n * Updates the `width` of all columns which have `autoWidth` set to `true`.\n */\n recalculateColumnWidths() {\n if (!this._columnTree) {\n return; // No columns\n }\n const cols = this._getColumns().filter(col => !col.hidden && col.autoWidth);\n this._recalculateColumnWidths(cols);\n }\n\n _createScrollerRows(count) {\n const rows = [];\n for (var i = 0; i < count; i++) {\n const row = document.createElement('tr');\n row.setAttribute('part', 'row');\n row.setAttribute('role', 'row');\n if (this._columnTree) {\n this._updateRow(row, this._columnTree[this._columnTree.length - 1], 'body', false, true);\n }\n rows.push(row);\n }\n\n if (this._columnTree) {\n this._columnTree[this._columnTree.length - 1].forEach(c => c.notifyPath && c.notifyPath('_cells.*', c._cells));\n }\n\n beforeNextRender(this, () => {\n this._updateFirstAndLastColumn();\n this._resetKeyboardNavigation();\n });\n return rows;\n }\n\n _getRowTarget() {\n return this.$.items;\n }\n\n _createCell(tagName) {\n const contentId = this._contentIndex = this._contentIndex + 1 || 0;\n const slotName = 'vaadin-grid-cell-content-' + contentId;\n\n const cellContent = document.createElement('vaadin-grid-cell-content');\n cellContent.setAttribute('slot', slotName);\n\n const cell = document.createElement(tagName);\n cell.id = slotName.replace('-content-', '-');\n cell.setAttribute('tabindex', '-1');\n cell.setAttribute('role', tagName === 'td' ? 'gridcell' : 'columnheader');\n\n const slot = document.createElement('slot');\n slot.setAttribute('name', slotName);\n\n cell.appendChild(slot);\n\n cell._content = cellContent;\n\n // With native Shadow DOM, mousedown on slotted element does not focus\n // focusable slot wrapper, that is why cells are not focused with\n // mousedown. Workaround: listen for mousedown and focus manually.\n cellContent.addEventListener('mousedown', () => {\n if (window.chrome) {\n // Chrome bug: focusing before mouseup prevents text selection, see http://crbug.com/771903\n const mouseUpListener = () => {\n if (!cellContent.contains(this.getRootNode().activeElement)) {\n cell.focus();\n }\n // If focus is in the cell content — respect it, do not change.\n document.removeEventListener('mouseup', mouseUpListener, true);\n };\n document.addEventListener('mouseup', mouseUpListener, true);\n } else {\n // Focus on mouseup, on the other hand, removes selection on Safari.\n // Watch out sync focus removal issue, only async focus works here.\n setTimeout(() => {\n if (!cellContent.contains(this.getRootNode().activeElement)) {\n cell.focus();\n }\n });\n }\n });\n\n return cell;\n }\n\n _updateRow(row, columns, section, isColumnRow, noNotify) {\n section = section || 'body';\n\n const contentsFragment = document.createDocumentFragment();\n\n Array.from(row.children).forEach(cell => cell._vacant = true);\n row.innerHTML = '';\n if (row.id !== 'outersizer' && row.id !== 'fixedsizer') {\n row.hidden = true;\n }\n columns.forEach((column, index) => {\n let cell;\n\n if (section === 'body') {\n // Body\n column._cells = column._cells || [];\n cell = column._cells.filter(cell => cell._vacant)[0];\n if (!cell) {\n cell = this._createCell('td');\n column._cells.push(cell);\n }\n cell.setAttribute('part', 'cell body-cell');\n row.appendChild(cell);\n\n if (index === columns.length - 1 && (this._rowDetailsTemplate || this.rowDetailsRenderer)) {\n // Add details cell as last cell to body rows\n this._detailsCells = this._detailsCells || [];\n const detailsCell = this._detailsCells.filter(cell => cell._vacant)[0] || this._createCell('td');\n if (this._detailsCells.indexOf(detailsCell) === -1) {\n this._detailsCells.push(detailsCell);\n }\n if (!detailsCell._content.parentElement) {\n contentsFragment.appendChild(detailsCell._content);\n }\n this._configureDetailsCell(detailsCell);\n row.appendChild(detailsCell);\n this._a11ySetRowDetailsCell(row, detailsCell);\n detailsCell._vacant = false;\n }\n\n if (column.notifyPath && !noNotify) {\n column.notifyPath('_cells.*', column._cells);\n }\n } else {\n // Header & footer\n const tagName = section === 'header' ? 'th' : 'td';\n if (isColumnRow || column.localName === 'vaadin-grid-column-group') {\n cell = column[`_${section}Cell`] || this._createCell(tagName);\n cell._column = column;\n row.appendChild(cell);\n column[`_${section}Cell`] = cell;\n } else {\n column._emptyCells = column._emptyCells || [];\n cell = column._emptyCells.filter(cell => cell._vacant)[0] || this._createCell(tagName);\n cell._column = column;\n row.appendChild(cell);\n if (column._emptyCells.indexOf(cell) === -1) {\n column._emptyCells.push(cell);\n }\n }\n cell.setAttribute('part', `cell ${section}-cell`);\n this.__updateHeaderFooterRowVisibility(row);\n }\n\n if (!cell._content.parentElement) {\n contentsFragment.appendChild(cell._content);\n }\n cell._vacant = false;\n cell._column = column;\n });\n\n // Might be empty if only cache was used\n this.appendChild(contentsFragment);\n\n this._frozenCellsChanged();\n this._updateFirstAndLastColumnForRow(row);\n }\n\n __updateHeaderFooterRowVisibility(row) {\n if (!row) {\n return;\n }\n\n const visibleRowCells = Array.from(row.children).filter(cell => {\n const column = cell._column;\n if (column._emptyCells && column._emptyCells.indexOf(cell) > -1) {\n // The cell is an \"empty cell\" -> doesn't block hiding the row\n return false;\n }\n if (row.parentElement === this.$.header) {\n if (column.headerRenderer || column._headerTemplate) {\n // The cell is the header cell of a column that has a header renderer\n // or a header template -> row should be visible\n return true;\n }\n if (column.header === null) {\n // The column header is explicilty set to null -> doesn't block hiding the row\n return false;\n }\n if (column.path || column.header !== undefined) {\n // The column has an explicit non-null header or a path that generates a header\n // -> row should be visible\n return true;\n }\n } else {\n if (column.footerRenderer || column._footerTemplate) {\n // The cell is the footer cell of a column that has a footer renderer\n // or a footer template -> row should be visible\n return true;\n }\n }\n });\n\n if (row.hidden !== !visibleRowCells.length) {\n row.hidden = !visibleRowCells.length;\n this.notifyResize();\n }\n }\n\n _updateScrollerItem(row, index) {\n this._preventScrollerRotatingCellFocus(row, index);\n\n if (!this._columnTree) {\n return;\n }\n\n this._toggleAttribute('first', index === 0, row);\n this._toggleAttribute('odd', index % 2, row);\n this._a11yUpdateRowRowindex(row, index);\n this._getItem(index, row);\n }\n\n _columnTreeChanged(columnTree, splices) {\n Array.from(this.$.items.children).forEach(row => this._updateRow(row, columnTree[columnTree.length - 1]));\n\n while (this.$.header.children.length < columnTree.length) {\n const headerRow = document.createElement('tr');\n headerRow.setAttribute('part', 'row');\n headerRow.setAttribute('role', 'row');\n this.$.header.appendChild(headerRow);\n\n const footerRow = document.createElement('tr');\n footerRow.setAttribute('part', 'row');\n footerRow.setAttribute('role', 'row');\n this.$.footer.appendChild(footerRow);\n }\n while (this.$.header.children.length > columnTree.length) {\n this.$.header.removeChild(this.$.header.firstElementChild);\n this.$.footer.removeChild(this.$.footer.firstElementChild);\n }\n\n Array.from(this.$.header.children)\n .forEach((headerRow, index) => this._updateRow(headerRow, columnTree[index], 'header', index === columnTree.length - 1));\n\n Array.from(this.$.footer.children)\n .forEach((footerRow, index) => this._updateRow(footerRow, columnTree[columnTree.length - 1 - index], 'footer', index === 0));\n\n // Sizer rows\n this._updateRow(this.$.outersizer, columnTree[columnTree.length - 1]);\n this._updateRow(this.$.fixedsizer, columnTree[columnTree.length - 1]);\n\n this._resizeHandler();\n this._frozenCellsChanged();\n this._updateFirstAndLastColumn();\n this._resetKeyboardNavigation();\n this._a11yUpdateHeaderRows();\n this._a11yUpdateFooterRows();\n }\n\n _updateItem(row, item) {\n row._item = item;\n const model = this.__getRowModel(row);\n\n this._toggleAttribute('selected', model.selected, row);\n this._a11yUpdateRowSelected(row, model.selected);\n this._a11yUpdateRowLevel(row, model.level);\n this._toggleAttribute('expanded', model.expanded, row);\n if (this._rowDetailsTemplate || this.rowDetailsRenderer) {\n this._toggleDetailsCell(row, item);\n }\n this._generateCellClassNames(row, model);\n this._filterDragAndDrop(row, model);\n\n Array.from(row.children).forEach(cell => {\n if (cell._renderer) {\n const owner = cell._column || this;\n cell._renderer.call(owner, cell._content, owner, model);\n } else if (cell._instance) {\n cell._instance.__detailsOpened__ = model.detailsOpened;\n cell._instance.__selected__ = model.selected;\n cell._instance.__level__ = model.level;\n cell._instance.__expanded__ = model.expanded;\n cell._instance.setProperties(model);\n }\n });\n\n this._debouncerUpdateHeights = Debouncer.debounce(this._debouncerUpdateHeights,\n timeOut.after(1), () => {\n this._updateMetrics();\n this._positionItems();\n this._updateScrollerSize();\n }\n );\n }\n\n _resizeHandler() {\n this._updateDetailsCellHeights();\n this._accessIronListAPI(super._resizeHandler, true);\n this._updateHeaderFooterMetrics();\n }\n\n _updateHeaderFooterMetrics() {\n const headerHeight = this.$.header.clientHeight + 'px';\n const footerHeight = this.$.footer.clientHeight + 'px';\n [this.$.outersizer, this.$.fixedsizer, this.$.items].forEach(element => {\n element.style.borderTopWidth = headerHeight;\n element.style.borderBottomWidth = footerHeight;\n });\n\n afterNextRender(this.$.header, () => {\n if (this._pendingScrollToIndex) {\n this._scrollToIndex(this._pendingScrollToIndex);\n }\n });\n }\n\n _onAnimationEnd(e) {\n // ShadyCSS applies scoping suffixes to animation names\n if (e.animationName.indexOf('vaadin-grid-appear') === 0) {\n this._render();\n this._updateHeaderFooterMetrics();\n e.stopPropagation();\n this.notifyResize();\n this.__setInitialColumnWidths();\n }\n }\n\n _toggleAttribute(name, bool, node) {\n if (node.hasAttribute(name) === !bool) {\n if (bool) {\n node.setAttribute(name, '');\n } else {\n node.removeAttribute(name);\n }\n }\n }\n\n __getRowModel(row) {\n return {\n index: row.index,\n item: row._item,\n level: this._getIndexLevel(row.index),\n expanded: this._isExpanded(row._item),\n selected: this._isSelected(row._item),\n detailsOpened:\n !!(this._rowDetailsTemplate || this.rowDetailsRenderer) && this._isDetailsOpened(row._item)\n };\n }\n\n /**\n * Manually invoke existing renderers for all the columns\n * (header, footer and body cells) and opened row details.\n */\n render() {\n if (this._columnTree) {\n // header and footer renderers\n this._columnTree.forEach(level => {\n level.forEach(column => column._renderHeaderAndFooter());\n });\n\n // body and row details renderers\n this._update();\n }\n }\n\n /**\n * Updates the computed metrics and positioning of internal grid parts\n * (row/details cell positioning etc). Needs to be invoked whenever the sizing of grid\n * content changes asynchronously to ensure consistent appearance (e.g. when a\n * contained image whose bounds aren't known beforehand finishes loading).\n */\n notifyResize() {\n super.notifyResize();\n }\n\n _heightByRowsChanged(value, oldValue) {\n if (value || oldValue) {\n this.notifyResize();\n }\n }\n\n __forceReflow() {\n this._debouncerForceReflow = Debouncer.debounce(this._debouncerForceReflow,\n animationFrame, () => {\n this.$.scroller.style.overflow = 'hidden';\n setTimeout(() => this.$.scroller.style.overflow = '');\n }\n );\n }\n}\n\n/**\n * Fired when the columns in the grid are reordered.\n *\n * @event column-reorder\n * @param {Object} detail\n * @param {Object} detail.columns the columns in the new order\n */\n\ncustomElements.define(GridElement.is, GridElement);\nexport { GridElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n * `` is a helper element for the `` that provides out-of-the-box UI controls,\n * visual feedback, and handlers for sorting the grid data.\n *\n * #### Example:\n * ```html\n * \n * \n * [[item.name.first]]\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `content` | The slotted content wrapper\n * `indicators` | The internal sorter indicators.\n * `order` | The internal sorter order\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `direction` | Sort direction of a sorter | :host\n *\n * @memberof Vaadin\n */\nclass GridSorterElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n\n \n \n
\n \n [[_getDisplayOrder(_order)]]\n
\n`;\n }\n\n static get is() {\n return 'vaadin-grid-sorter';\n }\n\n static get properties() {\n return {\n /**\n * JS Path of the property in the item used for sorting the data.\n */\n path: String,\n\n /**\n * How to sort the data.\n * Possible values are `asc` to use an ascending algorithm, `desc` to sort the data in\n * descending direction, or `null` for not sorting the data.\n */\n direction: {\n type: String,\n reflectToAttribute: true,\n notify: true,\n value: null\n },\n\n _order: {\n type: Number,\n value: null\n },\n\n _isConnected: {\n type: Boolean,\n value: false\n }\n };\n }\n\n static get observers() {\n return [\n '_pathOrDirectionChanged(path, direction, _isConnected)',\n '_directionOrOrderChanged(direction, _order)'\n ];\n }\n\n ready() {\n super.ready();\n this.addEventListener('click', this._onClick.bind(this));\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n this._isConnected = true;\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n this._isConnected = false;\n }\n\n _pathOrDirectionChanged(path, direction, isConnected) {\n if (path === undefined || direction === undefined || isConnected === undefined) {\n return;\n }\n\n if (isConnected) {\n this.dispatchEvent(new CustomEvent('sorter-changed', {bubbles: true, composed: true}));\n }\n }\n\n _getDisplayOrder(order) {\n return order === null ? '' : order + 1;\n }\n\n _onClick(e) {\n const activeElement = this.getRootNode().activeElement;\n if (this !== activeElement && this.contains(activeElement)) {\n // Some focusable content inside the sorter was clicked, do nothing.\n return;\n }\n\n e.preventDefault();\n if (this.direction === 'asc') {\n this.direction = 'desc';\n } else if (this.direction === 'desc') {\n this.direction = null;\n } else {\n this.direction = 'asc';\n }\n }\n\n _directionOrOrderChanged(direction, order) {\n if (direction === undefined || order === undefined) {\n return;\n }\n\n // Safari has an issue with repainting shadow root element styles when a host attribute changes.\n // Need this workaround (toggle any inline css property on and off) until the issue gets fixed.\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (isSafari && this.root) {\n this.root.querySelectorAll('*').forEach(function(el) {\n el.style['-webkit-backface-visibility'] = 'visible';\n el.style['-webkit-backface-visibility'] = '';\n });\n }\n }\n}\n\ncustomElements.define(GridSorterElement.is, GridSorterElement);\n\nexport { GridSorterElement };\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { GridColumnElement } from './vaadin-grid-column.js';\n\nimport './vaadin-grid-sorter.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a helper element for the ``\n * that provides default header template and functionality for sorting.\n *\n * #### Example:\n * ```html\n * \n * \n *\n * \n * ...\n * ```\n *\n * @memberof Vaadin\n * @extends Vaadin.GridColumnElement\n */\nclass GridSortColumnElement extends GridColumnElement {\n static get template() {\n return html`\n \n`;\n }\n\n static get is() {\n return 'vaadin-grid-sort-column';\n }\n\n static get properties() {\n return {\n /**\n * JS Path of the property in the item used for sorting the data.\n */\n path: String,\n\n /**\n * How to sort the data.\n * Possible values are `asc` to use an ascending algorithm, `desc` to sort the data in\n * descending direction, or `null` for not sorting the data.\n */\n direction: {\n type: String,\n notify: true\n }\n };\n }\n\n _prepareHeaderTemplate() {\n const headerTemplate = this._prepareTemplatizer(this.$.headerTemplate);\n // needed to override the dataHost correctly in case internal template is used.\n headerTemplate.templatizer.dataHost = this;\n return headerTemplate;\n }\n\n _getHeader(header, path) {\n return header || this._generateHeader(path);\n }\n}\n\ncustomElements.define(GridSortColumnElement.is, GridSortColumnElement);\n\nexport { GridSortColumnElement };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport { GridColumnElement } from './vaadin-grid-column.js';\nimport '@vaadin/vaadin-checkbox/src/vaadin-checkbox.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a helper element for the ``\n * that provides default templates and functionality for item selection.\n *\n * #### Example:\n * ```html\n * \n * \n *\n * \n * ...\n * ```\n *\n * By default the selection column displays `` elements in the\n * column cells. The checkboxes in the body rows toggle selection of the corresponding row items.\n *\n * When the grid data is provided as an array of [`items`](#/elements/vaadin-grid#property-items),\n * the column header gets an additional checkbox that can be used for toggling\n * selection for all the items at once.\n *\n * __The default content can also be overridden__\n *\n * @memberof Vaadin\n * @extends Vaadin.GridColumnElement\n */\nclass GridSelectionColumnElement extends GridColumnElement {\n static get template() {\n return html`\n \n \n \n \n`;\n }\n\n static get is() {\n return 'vaadin-grid-selection-column';\n }\n\n static get properties() {\n return {\n /**\n * Width of the cells for this column.\n */\n width: {\n type: String,\n value: '58px'\n },\n\n /**\n * Flex grow ratio for the cell widths. When set to 0, cell width is fixed.\n */\n flexGrow: {\n type: Number,\n value: 0\n },\n\n /**\n * When true, all the items are selected.\n */\n selectAll: {\n type: Boolean,\n value: false,\n notify: true\n },\n\n /**\n * When true, the active gets automatically selected.\n */\n autoSelect: {\n type: Boolean,\n value: false,\n },\n\n _indeterminate: Boolean,\n\n /**\n * The previous state of activeItem. When activeItem turns to `null`,\n * previousActiveItem will have an Object with just unselected activeItem\n */\n _previousActiveItem: Object,\n\n _selectAllHidden: Boolean\n };\n }\n\n static get observers() {\n return [\n '_onSelectAllChanged(selectAll)'\n ];\n }\n\n _pathOrHeaderChanged(path, header, headerCell, footerCell, cells, renderer, headerRenderer, bodyTemplate, headerTemplate) {\n // As a special case, allow overriding the default header / body templates\n if (cells.value && (path !== undefined || renderer !== undefined)) {\n this._bodyTemplate = bodyTemplate = undefined;\n this.__cleanCellsOfTemplateProperties(cells.value);\n }\n if (headerCell && (header !== undefined || headerRenderer !== undefined)) {\n this._headerTemplate = headerTemplate = undefined;\n this.__cleanCellsOfTemplateProperties([headerCell]);\n }\n super._pathOrHeaderChanged(path, header, headerCell, footerCell, cells, renderer, headerRenderer, bodyTemplate, headerTemplate);\n }\n\n __cleanCellsOfTemplateProperties(cells) {\n cells.forEach(cell => {\n cell._content.innerHTML = '';\n delete cell._instance;\n delete cell._template;\n });\n }\n\n _prepareHeaderTemplate() {\n const headerTemplate = this._prepareTemplatizer(this._findTemplate(true) || this.$.defaultHeaderTemplate);\n // needed to override the dataHost correctly in case internal template is used.\n headerTemplate.templatizer.dataHost = headerTemplate === this.$.defaultHeaderTemplate ? this : this.dataHost;\n\n return headerTemplate;\n }\n\n _prepareBodyTemplate() {\n const template = this._prepareTemplatizer(this._findTemplate() || this.$.defaultBodyTemplate);\n // needed to override the dataHost correctly in case internal template is used.\n template.templatizer.dataHost = template === this.$.defaultBodyTemplate ? this : this.dataHost;\n\n return template;\n }\n\n constructor() {\n super();\n\n this._boundOnActiveItemChanged = this._onActiveItemChanged.bind(this);\n this._boundOnDataProviderChanged = this._onDataProviderChanged.bind(this);\n this._boundOnSelectedItemsChanged = this._onSelectedItemsChanged.bind(this);\n }\n\n /** @protected */\n disconnectedCallback() {\n this._grid.removeEventListener('active-item-changed', this._boundOnActiveItemChanged);\n this._grid.removeEventListener('data-provider-changed', this._boundOnDataProviderChanged);\n this._grid.removeEventListener('filter-changed', this._boundOnSelectedItemsChanged);\n this._grid.removeEventListener('selected-items-changed', this._boundOnSelectedItemsChanged);\n\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (isSafari && window.ShadyDOM && this.parentElement) {\n // Detach might have beem caused by order change.\n // Shady on safari doesn't restore isAttached so we'll need to do it manually.\n const parent = this.parentElement;\n const nextSibling = this.nextElementSibling;\n parent.removeChild(this);\n if (nextSibling) {\n parent.insertBefore(this, nextSibling);\n } else {\n parent.appendChild(this);\n }\n }\n\n super.disconnectedCallback();\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n if (this._grid) {\n this._grid.addEventListener('active-item-changed', this._boundOnActiveItemChanged);\n this._grid.addEventListener('data-provider-changed', this._boundOnDataProviderChanged);\n this._grid.addEventListener('filter-changed', this._boundOnSelectedItemsChanged);\n this._grid.addEventListener('selected-items-changed', this._boundOnSelectedItemsChanged);\n }\n }\n\n _onSelectAllChanged(selectAll) {\n if (selectAll === undefined || !this._grid) {\n return;\n }\n\n if (this._selectAllChangeLock) {\n return;\n }\n\n this._grid.selectedItems = selectAll && Array.isArray(this._grid.items) ? this._grid._filter(this._grid.items) : [];\n }\n\n // Return true if array `a` contains all the items in `b`\n // We need this when sorting or to preserve selection after filtering.\n _arrayContains(a, b) {\n for (var i = 0; a && b && b[i] && a.indexOf(b[i]) >= 0; i++); // eslint-disable-line\n return i == b.length;\n }\n\n _onSelectAllCheckedChanged(e) {\n this.selectAll = this._indeterminate || e.target.checked;\n }\n\n // iOS needs indeterminated + checked at the same time\n _isChecked(selectAll, indeterminate) {\n return indeterminate || selectAll;\n }\n\n _onActiveItemChanged(e) {\n const activeItem = e.detail.value;\n if (this.autoSelect) {\n const item = activeItem || this._previousActiveItem;\n if (item) {\n this._grid._toggleItem(item);\n }\n }\n this._previousActiveItem = activeItem;\n }\n\n _onSelectedItemsChanged(e) {\n this._selectAllChangeLock = true;\n if (Array.isArray(this._grid.items)) {\n if (!this._grid.selectedItems.length) {\n this.selectAll = false;\n this._indeterminate = false;\n } else if (this._arrayContains(this._grid.selectedItems, this._grid._filter(this._grid.items))) {\n this.selectAll = true;\n this._indeterminate = false;\n } else {\n this.selectAll = false;\n this._indeterminate = true;\n }\n }\n this._selectAllChangeLock = false;\n }\n\n _onDataProviderChanged(e) {\n this._selectAllHidden = !Array.isArray(this._grid.items);\n }\n}\n\ncustomElements.define(GridSelectionColumnElement.is, GridSelectionColumnElement);\n\nexport { GridSelectionColumnElement };\n","import './vaadin-text-field-styles.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/mixins/field-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { TextFieldElement } from './vaadin-text-field.js';\nimport { DomModule } from '@polymer/polymer/lib/elements/dom-module.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n \n\n \n
\n\n \n
\n \n\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\nlet memoizedTemplate;\n\n/**\n* `` is a Polymer 2 element for number field control in forms.\n*\n* ```html\n* \n* \n* ```\n*\n* @memberof Vaadin\n* @extends Vaadin.TextFieldElement\n* @demo demo/index.html\n*/\nclass NumberFieldElement extends TextFieldElement {\n static get is() {\n return 'vaadin-number-field';\n }\n\n static get version() {\n return '2.4.6';\n }\n\n static get properties() {\n return {\n /**\n * Set to true to display value increase/decrease controls.\n */\n hasControls: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * The minimum value of the field.\n */\n min: {\n type: Number,\n reflectToAttribute: true\n },\n\n /**\n * The maximum value of the field.\n */\n max: {\n type: Number,\n reflectToAttribute: true,\n observer: '_maxChanged'\n },\n\n /**\n * Specifies the allowed number intervals of the field.\n */\n step: {\n type: Number,\n reflectToAttribute: true,\n value: 1\n }\n\n };\n }\n\n static get observers() {\n return [\n '_stepOrMinChanged(step, min)'\n ];\n }\n\n ready() {\n super.ready();\n this.__previousValidInput = this.value || '';\n this.inputElement.type = 'number';\n this.inputElement.addEventListener('keydown', this.__onKeyDown.bind(this));\n this.inputElement.addEventListener('change', this.__onInputChange.bind(this));\n }\n\n _decreaseButtonTouchend(e) {\n // Cancel the following click and focus events\n e.preventDefault();\n this._decreaseValue();\n }\n\n _increaseButtonTouchend(e) {\n // Cancel the following click and focus events\n e.preventDefault();\n this._increaseValue();\n }\n\n static get template() {\n if (!memoizedTemplate) {\n // Clone the superclass template\n memoizedTemplate = super.template.cloneNode(true);\n\n // Retrieve this element's dom-module template\n const thisTemplate = DomModule.import(this.is + '-template', 'template');\n const decreaseButton = thisTemplate.content.querySelector('[part=\"decrease-button\"]');\n const increaseButton = thisTemplate.content.querySelector('[part=\"increase-button\"]');\n const styles = thisTemplate.content.querySelector('style');\n\n // Add the buttons and styles to the text-field template\n const inputField = memoizedTemplate.content.querySelector('[part=\"input-field\"]');\n const prefixSlot = memoizedTemplate.content.querySelector('[name=\"prefix\"]');\n inputField.insertBefore(decreaseButton, prefixSlot);\n inputField.appendChild(increaseButton);\n memoizedTemplate.content.appendChild(styles);\n }\n\n return memoizedTemplate;\n }\n\n _decreaseValue() {\n this._incrementValue(-1);\n }\n\n _increaseValue() {\n this._incrementValue(1);\n }\n\n _incrementValue(incr) {\n if (this.disabled) {\n return;\n }\n\n let value = parseFloat(this.value);\n\n if (!this.value) {\n if (this.min == 0 && incr < 0 ||\n this.max == 0 && incr > 0 ||\n this.max == 0 && this.min == 0) {\n incr = 0;\n value = 0;\n } else if ((this.max == null || this.max >= 0) &&\n (this.min == null || this.min <= 0)) {\n value = 0;\n } else if (this.min > 0) {\n value = this.min;\n if (this.max < 0 && incr < 0) {\n value = this.max;\n }\n incr = 0;\n } else if (this.max < 0) {\n value = this.max;\n if (incr < 0) {\n incr = 0;\n } else {\n // FIXME(yuriy): find a proper solution to make correct step back\n if (this._getIncrement(1, value - this.step) > this.max) {\n value -= 2 * this.step;\n } else {\n value -= this.step;\n }\n }\n }\n } else if (value < this.min) {\n incr = 0;\n value = this.min;\n } else if (value > this.max) {\n incr = 0;\n value = this.max;\n }\n\n const newValue = this._getIncrement(incr, value);\n if (!this.value || incr == 0 || this._incrementIsInsideTheLimits(incr, value)) {\n this._setValue(newValue);\n }\n }\n\n _setValue(value) {\n this.value = this.inputElement.value = parseFloat(value).toFixed(this.__decimals);\n this.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n }\n\n _getIncrement(incr, currentValue) {\n let step = this.step || 1,\n min = this.min || 0;\n\n // To avoid problems with decimal math, multiplying to operate with integers.\n const multiplier = Math.max(this._getMultiplier(currentValue),\n this._getMultiplier(step),\n this._getMultiplier(min));\n\n step *= multiplier;\n currentValue *= multiplier;\n min *= multiplier;\n\n const margin = (currentValue - min) % step;\n\n if (incr > 0) {\n return (currentValue - margin + step) / multiplier;\n } else if (incr < 0) {\n return (currentValue - (margin || step)) / multiplier;\n } else {\n return currentValue / multiplier;\n }\n }\n\n _getMultiplier(number) {\n if (!isNaN(number)) {\n let multiplier = 1;\n // Increase the multiplier until the float point will disappear\n while (Math.floor(number * multiplier) !== number * multiplier) {\n multiplier = multiplier * 10;\n }\n\n return multiplier;\n }\n }\n\n _incrementIsInsideTheLimits(incr, value) {\n if (incr < 0) {\n return this.min == null || this._getIncrement(incr, value) >= this.min;\n } else if (incr > 0) {\n return this.max == null || this._getIncrement(incr, value) <= this.max;\n } else {\n return this._getIncrement(incr, value) <= this.max && this._getIncrement(incr, value) >= this.min;\n }\n }\n\n _allowed(sign) {\n const incr = sign * (this.step || 1);\n const value = parseFloat(this.value);\n return !this.value || (!this.disabled && this._incrementIsInsideTheLimits(incr, value));\n }\n\n _maxChanged() {\n this.inputElement.max = this.max;\n }\n\n _valueChanged(newVal, oldVal) {\n // Validate value to be numeric\n if (newVal && isNaN(parseFloat(newVal).toFixed(this.__decimals))) {\n this.value = '';\n } else if (typeof this.value !== 'string') {\n this.value = String(this.value);\n }\n\n super._valueChanged(this.value, oldVal);\n }\n\n __onKeyDown(e) {\n if (e.keyCode == 38) {\n e.preventDefault();\n this._increaseValue();\n } else if (e.keyCode == 40) {\n e.preventDefault();\n this._decreaseValue();\n }\n }\n\n __onInputChange() {\n this.checkValidity();\n }\n\n _stepOrMinChanged(step, min) {\n this.inputElement.step = step;\n this.inputElement.min = this.min;\n const countDecimalPlaces = number => {\n return number ? String(Math.abs(number)).replace(/^\\d*\\.?(.*)?$/, '$1').length : 0;\n };\n // Compute number of dedimals to display in input based on provided step\n this.__decimals = Math.max(countDecimalPlaces(step), countDecimalPlaces(min));\n }\n\n checkValidity() {\n // text-field mixin does not check against `min` and `max`\n if (this.min !== undefined || this.max !== undefined || this.step) {\n this.invalid = !this.inputElement.checkValidity();\n }\n return super.checkValidity();\n }\n}\n\nwindow.customElements.define(NumberFieldElement.is, NumberFieldElement);\n\nexport { NumberFieldElement };\n","import '@vaadin/vaadin-item/theme/material/vaadin-item.js';\nimport '@vaadin/vaadin-list-box/theme/material/vaadin-list-box.js';\nimport '@vaadin/vaadin-text-field/theme/material/vaadin-text-field.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/mixins/menu-overlay.js';\nimport '@vaadin/vaadin-material-styles/mixins/field-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html``;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/lib/elements/dom-module.js';\n\nimport { OverlayElement } from '@vaadin/vaadin-overlay/src/vaadin-overlay.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = ``;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n * The overlay element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @extends Vaadin.OverlayElement\n */\nclass DropdownMenuOverlayElement extends OverlayElement {\n static get is() {\n return 'vaadin-dropdown-menu-overlay';\n }\n}\ncustomElements.define(DropdownMenuOverlayElement.is, DropdownMenuOverlayElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { TextFieldElement } from '@vaadin/vaadin-text-field/src/vaadin-text-field.js';\n\nlet memoizedTemplate;\n/**\n * The text-field element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-text-field/blob/master/src/vaadin-text-field.html)\n * for `` parts and available slots (prefix, suffix etc.)\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @extends Vaadin.TextFieldElement\n */\nclass DropdownMenuTextFieldElement extends TextFieldElement {\n static get is() {\n return 'vaadin-dropdown-menu-text-field';\n }\n\n static get template() {\n if (!memoizedTemplate) {\n // Clone the superclass template\n memoizedTemplate = super.template.cloneNode(true);\n\n // Create a slot for the value element\n const slot = document.createElement('slot');\n slot.setAttribute('name', 'value');\n\n // Insert the slot before the text-field\n const input = memoizedTemplate.content.querySelector('input');\n\n input.parentElement.replaceChild(slot, input);\n slot.appendChild(input);\n }\n return memoizedTemplate;\n }\n\n get focusElement() {\n return this.shadowRoot.querySelector('[part=input-field]');\n }\n}\n\ncustomElements.define(DropdownMenuTextFieldElement.is, DropdownMenuTextFieldElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport { ControlStateMixin } from '@vaadin/vaadin-control-state-mixin/vaadin-control-state-mixin.js';\nimport { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';\nimport '@polymer/iron-media-query/iron-media-query.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport './vaadin-dropdown-menu-overlay.js';\nimport './vaadin-dropdown-menu-text-field.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n *\n * `` is a Web Component for selecting values from a list of items. The content of the\n * the dropdown menu can be populated in two ways: imperatively by using renderer callback function and\n * declaratively by using Polymer's Templates.\n *\n * ### Rendering\n *\n * By default, the dropdown menu uses the content provided by using the renderer callback function.\n *\n * The renderer function provides `root`, `dropdownMenu` arguments.\n * Generate DOM content, append it to the `root` element and control the state\n * of the host element by accessing `dropdownMenu`.\n *\n * ```html\n * \n * ```\n * ```js\n * const dropdownMenu = document.querySelector('#dropdown-menu');\n * dropdownMenu.renderer = function(root, dropdownMenu) {\n * const listBox = document.createElement('vaadin-list-box');\n * // append 3 elements\n * ['Jose', 'Manolo', 'Pedro'].forEach(function(name) {\n * const item = document.createElement('vaadin-item');\n * item.textContent = name;\n * listBox.appendChild(item);\n * });\n *\n * // update the content\n * root.appendChild(listBox);\n * };\n * ```\n *\n * Renderer is called on initialization of new menu and on the opening of the dropdown menu.\n * DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * ### Polymer Templates\n *\n * Alternatively, the content can be provided with Polymer's Template.\n * Dropdown menu finds the first child template and uses that in case renderer callback function\n * is not provided. You can also set a custom template using the `template` property.\n *\n * ```\n * \n * \n * \n * Foo\n * Bar\n * Baz\n * \n * \n * \n * ```\n *\n * Hint: By setting the `label` property of inner vaadin-items you will\n * be able to change the visual representation of the selected value in the input part.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `toggle-button` | The toggle button\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `opened` | Set when the dropdown menu is open | :host\n * `invalid` | Set when the element is invalid | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `readonly` | Set when the dropdown menu is read only | :host\n *\n * `` element sets these custom CSS properties:\n *\n * Property name | Description | Theme for element\n * --- | --- | ---\n * `--vaadin-dropdown-menu-text-field-width` | Width of the menu text field | `vaadin-dropdown-menu-overlay`\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * In addition to `` itself, the following internal\n * components are themable:\n *\n * - ``\n * - ``\n *\n * Note: the `theme` attribute value set on `` is\n * propagated to the internal themable components listed above.\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ControlStateMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.ThemePropertyMixin\n * @demo demo/index.html\n */\nclass DropdownMenuElement extends\n ElementMixin(\n ControlStateMixin(\n ThemableMixin(\n ThemePropertyMixin(\n mixinBehaviors(IronResizableBehavior, PolymerElement))))) {\n static get template() {\n return html`\n \n\n \n \n \n \n \n \n\n \n`;\n }\n\n static get is() {\n return 'vaadin-dropdown-menu';\n }\n\n static get version() {\n return '1.2.0';\n }\n\n static get properties() {\n return {\n /**\n * Set when the dropdown menu is open\n */\n opened: {\n type: Boolean,\n value: false,\n notify: true,\n reflectToAttribute: true,\n observer: '_openedChanged'\n },\n\n /**\n * Custom function for rendering the content of the ``.\n * Receives two arguments:\n *\n * - `root` The `` internal container\n * DOM element. Append your content to it.\n * - `dropdownMenu` The reference to the `` element.\n */\n renderer: Function,\n\n /**\n * The error message to display when the dropdown menu value is invalid\n */\n errorMessage: {\n type: String,\n value: ''\n },\n\n /**\n * String used for the label element.\n */\n label: {\n type: String\n },\n\n /**\n * It stores the the `value` property of the selected item, providing the\n * value for iron-form.\n * When there’s an item selected, it's the value of that item, otherwise\n * it's an empty string.\n * On change or initialization, the component finds the item which matches the\n * value and displays it.\n * If no value is provided to the component, it selects the first item without\n * value or empty value.\n * Hint: If you do not want to select any item by default, you can either set all\n * the values of inner vaadin-items, or set the vaadin-dropdown-menu value to\n * an inexistent value in the items list.\n */\n value: {\n type: String,\n value: '',\n notify: true,\n observer: '_valueChanged'\n },\n\n /**\n * The current required state of the dropdown menu. True if required.\n */\n required: {\n type: Boolean,\n reflectToAttribute: true,\n observer: '_requiredChanged'\n },\n\n /**\n * Set to true if the value is invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n /**\n * The name of this element.\n */\n name: {\n type: String,\n reflectToAttribute: true\n },\n\n /**\n * A hint to the user of what can be entered in the control.\n * The placeholder will be displayed in the case that there\n * is no item selected, or the selected item has an empty\n * string label, or the selected item has no label and it's\n * DOM content is empty.\n */\n placeholder: {\n type: String\n },\n\n /**\n * When present, it specifies that the element is read-only.\n */\n readonly: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n _phone: Boolean,\n\n _phoneMediaQuery: {\n value: '(max-width: 420px), (max-height: 420px)'\n },\n\n _overlayElement: Object,\n\n _inputElement: Object,\n\n _toggleElement: Object,\n\n _items: Object,\n\n _contentTemplate: Object,\n\n _oldTemplate: Object,\n\n _oldRenderer: Object\n };\n }\n\n static get observers() {\n return [\n '_updateSelectedItem(value, _items)',\n '_updateAriaExpanded(opened, _toggleElement)',\n '_templateOrRendererChanged(_contentTemplate, renderer, _overlayElement)'\n ];\n }\n\n /** @private */\n constructor() {\n super();\n this._boundSetPosition = this._setPosition.bind(this);\n }\n\n /** @private */\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('iron-resize', this._boundSetPosition);\n }\n\n ready() {\n super.ready();\n\n this._overlayElement = this.shadowRoot.querySelector('vaadin-dropdown-menu-overlay');\n this._valueElement = this.shadowRoot.querySelector('[part=\"value\"]');\n this._toggleElement = this.shadowRoot.querySelector('[part=\"toggle-button\"]');\n this._nativeInput = this.focusElement.shadowRoot.querySelector('input');\n this._nativeInput.setAttribute('aria-hidden', true);\n this._nativeInput.setAttribute('tabindex', -1);\n this._nativeInput.style.pointerEvents = 'none';\n\n this.focusElement.addEventListener('click', e => this.opened = !this.readonly);\n this.focusElement.addEventListener('keydown', e => this._onKeyDown(e));\n\n this._observer = new FlattenedNodesObserver(this, info => this._setTemplateFromNodes(info.addedNodes));\n this._observer.flush();\n }\n\n _setTemplateFromNodes(nodes) {\n const template = Array.from(nodes).filter(node => node.localName && node.localName === 'template')[0] || this._contentTemplate;\n this._overlayElement.template = this._contentTemplate = template;\n this._setForwardHostProps();\n }\n\n _setForwardHostProps() {\n if (this._overlayElement.content) {\n const origForwardHostProp = this._overlayElement._instance && this._overlayElement._instance.forwardHostProp;\n\n if (this._overlayElement._instance) {\n this._overlayElement._instance.forwardHostProp = (...args) => {\n origForwardHostProp.apply(this._overlayElement._instance, args);\n setTimeout(() => {\n this._updateValueSlot();\n });\n };\n\n this._assignMenuElement();\n }\n }\n }\n\n /**\n * Manually invoke existing renderer.\n */\n render() {\n this._overlayElement.render();\n }\n\n _removeNewRendererOrTemplate(template, oldTemplate, renderer, oldRenderer) {\n if (template !== oldTemplate) {\n this._contentTemplate = undefined;\n } else if (renderer !== oldRenderer) {\n this.renderer = undefined;\n }\n }\n\n _templateOrRendererChanged(template, renderer, overlay) {\n if (!overlay) {\n return;\n }\n\n if (template && renderer) {\n this._removeNewRendererOrTemplate(template, this._oldTemplate, renderer, this._oldRenderer);\n throw new Error('You should only use either a renderer or a template for dropdown-menu content');\n }\n\n this._oldTemplate = template;\n this._oldRenderer = renderer;\n\n if (renderer) {\n overlay.setProperties({owner: this, renderer: renderer});\n this.render();\n\n if (overlay.content.firstChild) {\n this._assignMenuElement();\n }\n }\n }\n\n _assignMenuElement() {\n this._menuElement = Array.from(this._overlayElement.content.children).filter(element => element.localName !== 'style')[0];\n\n if (this._menuElement) {\n this._menuElement.addEventListener('items-changed', e => {\n this._items = this._menuElement.items;\n });\n this._menuElement.addEventListener('selected-changed', e => this._updateValueSlot());\n this._menuElement.addEventListener('keydown', e => this._onKeyDownInside(e));\n this._menuElement.addEventListener('click', e => this.opened = false);\n }\n }\n\n /** @protected */\n get focusElement() {\n return this._inputElement ||\n (this._inputElement = this.shadowRoot.querySelector('vaadin-dropdown-menu-text-field'));\n }\n\n /** @private */\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('iron-resize', this._boundSetPosition);\n // Making sure the dropdown is closed and removed from DOM after detaching the dropdown.\n this.opened = false;\n }\n\n /** @private */\n notifyResize() {\n super.notifyResize();\n if (this.positionTarget && this.opened) {\n this._setPosition();\n // Schedule another position update (to cover virtual keyboard opening for example)\n requestAnimationFrame(this._setPosition.bind(this));\n }\n }\n\n _requiredChanged(required) {\n this.setAttribute('aria-required', required);\n }\n\n _valueChanged(value, oldValue) {\n if (value === '') {\n this.focusElement.removeAttribute('has-value');\n } else {\n this.focusElement.setAttribute('has-value', '');\n }\n\n // Skip validation for the initial empty string value\n if (value === '' && oldValue === undefined) {\n return;\n }\n this.validate();\n }\n\n _onKeyDown(e) {\n if (!this.readonly && !this.opened && /^(ArrowDown|Down|ArrowUp|Up|Enter|SpaceBar| )$/.test(e.key)) {\n e.preventDefault();\n this.opened = true;\n }\n }\n\n _onKeyDownInside(e) {\n if (/^(Tab)$/.test(e.key)) {\n this.opened = false;\n }\n }\n\n _openedChanged(opened, wasOpened) {\n if (opened) {\n if (\n !this._overlayElement ||\n !this._menuElement ||\n !this._toggleElement ||\n !this.focusElement ||\n this.disabled ||\n this.readonly\n ) {\n this.opened = false;\n return;\n }\n\n this._openedWithFocusRing = this.hasAttribute('focus-ring') || this.focusElement.hasAttribute('focus-ring');\n this._menuElement.focus();\n this._setPosition();\n window.addEventListener('scroll', this._boundSetPosition, true);\n } else if (wasOpened) {\n if (this._phone) {\n this._setFocused(false);\n } else {\n this.focusElement.focus();\n if (this._openedWithFocusRing) {\n this.focusElement.setAttribute('focus-ring', '');\n }\n }\n this.validate();\n window.removeEventListener('scroll', this._boundSetPosition, true);\n }\n }\n\n _hasContent(selected) {\n if (!selected) {\n return false;\n }\n return Boolean(\n selected.hasAttribute('label') ?\n selected.getAttribute('label') :\n selected.textContent.trim() || selected.children.length\n );\n }\n\n _attachSelectedItem(selected) {\n if (!selected) {\n return;\n }\n let labelItem;\n if (selected.hasAttribute('label')) {\n labelItem = document.createElement('vaadin-item');\n labelItem.textContent = selected.getAttribute('label');\n } else {\n labelItem = selected.cloneNode(true);\n }\n\n // store reference to the original item\n labelItem._sourceItem = selected;\n\n labelItem.removeAttribute('tabindex');\n\n this._valueElement.appendChild(labelItem);\n\n labelItem.selected = true;\n }\n\n _updateAriaExpanded(opened, toggleElement) {\n toggleElement && toggleElement.setAttribute('aria-expanded', opened);\n }\n\n _updateValueSlot() {\n this.opened = false;\n this._valueElement.innerHTML = '';\n\n const selected = this._items[this._menuElement.selected];\n\n const hasContent = this._hasContent(selected);\n\n // Toggle visibility of _valueElement vs fallback input with placeholder\n this._valueElement.slot = hasContent ? 'value' : '';\n\n // Ensure the slot distribution to apply correct style scope for cloned item\n if (hasContent && window.ShadyDOM) {\n window.ShadyDOM.flush();\n }\n\n this._attachSelectedItem(selected);\n\n if (!this._valueChanging && selected) {\n this._selectedChanging = true;\n this.value = selected.value || '';\n delete this._selectedChanging;\n }\n }\n\n _updateSelectedItem(value, items) {\n if (items) {\n this._menuElement.selected = items.reduce((prev, item, idx) => {\n return prev === undefined && item.value === value ? idx : prev;\n }, undefined);\n if (!this._selectedChanging) {\n this._valueChanging = true;\n this._updateValueSlot();\n delete this._valueChanging;\n }\n }\n }\n\n /** @override */\n _setFocused(focused) {\n // Keep `focused` state when opening the overlay for styling purpose.\n super._setFocused(this.opened || focused);\n this.focusElement._setFocused(this.hasAttribute('focused'));\n !this.hasAttribute('focused') && this.validate();\n }\n\n _setPosition() {\n const inputRect = this._inputElement.shadowRoot.querySelector('[part~=\"input-field\"]').getBoundingClientRect();\n const viewportHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);\n const bottomAlign = inputRect.top > (viewportHeight - inputRect.height) / 2;\n\n this._overlayElement.style.left = inputRect.left + 'px';\n if (bottomAlign) {\n this._overlayElement.setAttribute('bottom-aligned', '');\n this._overlayElement.style.removeProperty('top');\n this._overlayElement.style.bottom = (viewportHeight - inputRect.bottom) + 'px';\n } else {\n this._overlayElement.removeAttribute('bottom-aligned');\n this._overlayElement.style.removeProperty('bottom');\n this._overlayElement.style.top = inputRect.top + 'px';\n }\n\n this._overlayElement.updateStyles({'--vaadin-dropdown-menu-text-field-width': inputRect.width + 'px'});\n }\n\n /**\n * Returns true if `value` is valid, and sets the `invalid` flag appropriately.\n *\n * @return {boolean} True if the value is valid and sets the `invalid` flag appropriately\n */\n validate() {\n return !(this.invalid = !(this.disabled || !this.required || this.value));\n }\n}\n\ncustomElements.define(DropdownMenuElement.is, DropdownMenuElement);\n\nexport { DropdownMenuElement };\n","import '@vaadin/vaadin-material-styles/mixins/overlay.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport '@vaadin/vaadin-material-styles/shadow.js';\nimport '@vaadin/vaadin-button/theme/material/vaadin-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import './vaadin-date-picker-overlay.js';\nimport './vaadin-date-picker-overlay-content.js';\nimport './vaadin-month-calendar.js';\nimport '@vaadin/vaadin-text-field/theme/material/vaadin-text-field.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/mixins/field-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import './vaadin-text-field-styles.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { TextFieldMixin } from './vaadin-text-field-mixin.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n/**\n * `` is a Web Component for text area control in forms.\n *\n * ```html\n * \n * \n * ```\n *\n * ### Prefixes and suffixes\n *\n * These are child elements of a `` that are displayed\n * inline with the input, before or after.\n * In order for an element to be considered as a prefix, it must have the slot\n * attribute set to `prefix` (and similarly for `suffix`).\n *\n * ```html\n * \n * Details:
\n * The end!
\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `label` | The label element\n * `input-field` | The element that wraps prefix, value and suffix\n * `value` | The text value element inside the `input-field` element\n * `error-message` | The error message element\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `disabled` | Set to a disabled text field | :host\n * `has-value` | Set when the element has a value | :host\n * `has-label` | Set when the element has a label | :host\n * `invalid` | Set when the element is invalid | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `readonly` | Set to a readonly text field | :host\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.TextFieldMixin\n * @mixes Vaadin.ThemableMixin\n * @demo demo/index.html\n */\nclass TextAreaElement extends ElementMixin(TextFieldMixin(ThemableMixin(PolymerElement))) {\n static get template() {\n return html`\n \n\n \n\n
\n\n
\n\n
\n\n
\n \n \n\n
\n
\n\n
\n\n
[[errorMessage]]
\n\n
\n`;\n }\n\n static get is() {\n return 'vaadin-text-area';\n }\n\n static get version() {\n return '2.4.6';\n }\n\n static get observers() {\n return [\n '_textAreaValueChanged(value)'\n ];\n }\n\n ready() {\n super.ready();\n this._updateHeight();\n this.addEventListener('animationend', this._onAnimationEnd);\n }\n\n _onAnimationEnd(e) {\n if (e.animationName.indexOf('vaadin-text-area-appear') === 0) {\n this._updateHeight();\n }\n }\n\n get _slottedTagName() {\n return 'textarea';\n }\n\n _textAreaValueChanged(value) {\n this._updateHeight();\n }\n\n _updateHeight() {\n const inputField = this.root.querySelector('[part=input-field]');\n const scrollTop = inputField.scrollTop;\n const input = this.inputElement;\n\n const inputWidth = getComputedStyle(input).width;\n\n const valueLength = this.value ? this.value.length : 0;\n // Only clear the height when the content shortens to minimize scrollbar flickering.\n if (this._oldValueLength >= valueLength) {\n // Fix the input element width so its scroll height isn't affected by host's disappearing scrollbars\n input.style.maxWidth = inputWidth;\n input.style.height = 'auto';\n // Avoid a jumpy Safari rendering issue\n inputField.style.display = 'block';\n }\n this._oldValueLength = valueLength;\n\n const inputHeight = input.scrollHeight;\n if (inputHeight > input.clientHeight) {\n input.style.height = inputHeight + 'px';\n }\n\n // Restore\n input.style.removeProperty('max-width');\n inputField.style.removeProperty('display');\n inputField.scrollTop = scrollTop;\n\n this._dispatchIronResizeEventIfNeeded('InputHeight', inputHeight);\n }\n\n /**\n * Fired when the text-area height changes.\n *\n * @event iron-resize\n */\n}\n\ncustomElements.define(TextAreaElement.is, TextAreaElement);\n\nexport { TextAreaElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/mixins/required-field.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { CheckboxElement } from './vaadin-checkbox.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a Polymer element for grouping vaadin-checkboxes.\n *\n * ```html\n * \n * English\n * Français\n * Deutsch\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `label` | The label element\n * `group-field` | The element that wraps checkboxes\n * `error-message` | The error message element\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -----------|-------------|------------\n * `disabled` | Set when the checkbox group and its children are disabled. | :host\n * `focused` | Set when the checkbox group contains focus | :host\n * `has-label` | Set when the element has a label | :host\n * `has-value` | Set when the element has a value | :host\n * `required` | Set when the element is required | :host\n * `invalid` | Set when the element is invalid | :host\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @element vaadin-checkbox-group\n * @demo demo/index.html\n */\nclass CheckboxGroupElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n\n \n
\n\n
\n \n
\n\n
[[errorMessage]]
\n\n
\n`;\n }\n\n static get is() {\n return 'vaadin-checkbox-group';\n }\n\n static get properties() {\n return {\n /**\n * The current disabled state of the checkbox group. True if group and all internal checkboxes are disabled.\n */\n disabled: {\n type: Boolean,\n reflectToAttribute: true,\n observer: '_disabledChanged'\n },\n\n /**\n * String used for the label element.\n */\n label: {\n type: String,\n value: '',\n observer: '_labelChanged'\n },\n\n /**\n * Value of the checkbox group.\n * Note: toggling the checkboxes modifies the value by creating new\n * array each time, to override Polymer dirty-checking for arrays.\n * You can still use Polymer array mutation methods to update the value.\n */\n value: {\n type: Array,\n value: () => [],\n notify: true\n },\n\n /**\n * Error to show when the input value is invalid.\n */\n errorMessage: {\n type: String,\n value: ''\n },\n\n /**\n * Specifies that the user must fill in a value.\n */\n required: {\n type: Boolean,\n reflectToAttribute: true\n },\n\n /**\n * This property is set to true when the control value is invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n };\n }\n\n static get observers() {\n return [\n '_updateValue(value, value.splices)'\n ];\n }\n\n ready() {\n super.ready();\n\n this.addEventListener('focusin', () => this._setFocused(this._containsFocus()));\n\n this.addEventListener('focusout', e => {\n // validate when stepping out of the checkbox group\n if (!this._checkboxes.some(checkbox => e.relatedTarget === checkbox || checkbox.shadowRoot.contains(e.relatedTarget))) {\n this.validate();\n this._setFocused(false);\n }\n });\n\n const checkedChangedListener = (e) => {\n this._changeSelectedCheckbox(e.target);\n };\n\n this._observer = new FlattenedNodesObserver(this, info => {\n const addedCheckboxes = this._filterCheckboxes(info.addedNodes);\n\n addedCheckboxes.forEach(checkbox => {\n checkbox.addEventListener('checked-changed', checkedChangedListener);\n if (this.disabled) {\n checkbox.disabled = true;\n }\n if (checkbox.checked) {\n this._addCheckboxToValue(checkbox.value);\n } else if (this.value.indexOf(checkbox.value) > -1) {\n checkbox.checked = true;\n }\n });\n\n this._filterCheckboxes(info.removedNodes).forEach(checkbox => {\n checkbox.removeEventListener('checked-changed', checkedChangedListener);\n if (checkbox.checked) {\n this._removeCheckboxFromValue(checkbox.value);\n }\n });\n\n if (addedCheckboxes.some(checkbox => !checkbox.hasAttribute('value'))) {\n console.warn('Please add value attribute to all checkboxes in checkbox group');\n }\n });\n }\n\n /**\n * Returns true if `value` is valid.\n * `` uses this to check the validity or all its elements.\n *\n * @return {boolean} True if the value is valid.\n */\n validate() {\n this.invalid = this.required && this.value.length === 0;\n return !this.invalid;\n }\n\n get _checkboxes() {\n return this._filterCheckboxes(this.querySelectorAll('*'));\n }\n\n _filterCheckboxes(nodes) {\n return Array.from(nodes)\n .filter(child => child instanceof CheckboxElement);\n }\n\n _disabledChanged(disabled) {\n this.setAttribute('aria-disabled', disabled);\n\n this._checkboxes.forEach(checkbox => checkbox.disabled = disabled);\n }\n\n _addCheckboxToValue(value) {\n if (this.value.indexOf(value) === -1) {\n this.value = this.value.concat(value);\n }\n }\n\n _removeCheckboxFromValue(value) {\n this.value = this.value.filter(v => v !== value);\n }\n\n _changeSelectedCheckbox(checkbox) {\n if (this._updatingValue) {\n return;\n }\n\n if (checkbox.checked) {\n this._addCheckboxToValue(checkbox.value);\n } else {\n this._removeCheckboxFromValue(checkbox.value);\n }\n }\n\n _updateValue(value, splices) {\n // setting initial value to empty array, skip validation\n if (value.length === 0 && this._oldValue === undefined) {\n return;\n }\n\n if (value.length) {\n this.setAttribute('has-value', '');\n } else {\n this.removeAttribute('has-value');\n }\n\n this._oldValue = value;\n // set a flag to avoid updating loop\n this._updatingValue = true;\n // reflect the value array to checkboxes\n this._checkboxes.forEach(checkbox => {\n checkbox.checked = value.indexOf(checkbox.value) > -1;\n });\n this._updatingValue = false;\n\n this.validate();\n }\n\n _labelChanged(label) {\n if (label) {\n this.setAttribute('has-label', '');\n } else {\n this.removeAttribute('has-label');\n }\n }\n\n _getErrorMessageAriaHidden(invalid, errorMessage) {\n return (!errorMessage || !invalid).toString();\n }\n\n _containsFocus() {\n const root = this.getRootNode();\n // Safari 9 needs polyfilled `_activeElement` to return correct node\n const activeElement = root._activeElement !== undefined ? root._activeElement : root.activeElement;\n return this.contains(activeElement);\n }\n\n _setFocused(focused) {\n if (focused) {\n this.setAttribute('focused', '');\n } else {\n this.removeAttribute('focused');\n }\n }\n}\n\ncustomElements.define(CheckboxGroupElement.is, CheckboxGroupElement);\n\nexport { CheckboxGroupElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/mixins/menu-overlay.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport '@vaadin/vaadin-item/theme/material/vaadin-item.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/*\n * Placeholder object class representing items being loaded.\n *\n * @private\n */\nexport const ComboBoxPlaceholder = class ComboBoxPlaceholder {\n toString() {\n return '';\n }\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/lib/utils/async.js';\n\nimport { flush } from '@polymer/polymer/lib/utils/flush.js';\nimport { templatize } from '@polymer/polymer/lib/utils/templatize.js';\nimport { IronA11yAnnouncer } from '@polymer/iron-a11y-announcer/iron-a11y-announcer.js';\nimport { IronA11yKeysBehavior } from '@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\n\n/**\n * @polymerMixin\n */\nexport const ComboBoxMixin = subclass => class VaadinComboBoxMixinElement extends subclass {\n\n static get properties() {\n return {\n /**\n * True if the dropdown is open, false otherwise.\n */\n opened: {\n type: Boolean,\n notify: true,\n value: false,\n reflectToAttribute: true,\n observer: '_openedChanged'\n },\n\n /**\n * Set to true to disable this element.\n */\n disabled: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * When present, it specifies that the element field is read-only.\n */\n readonly: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * Custom function for rendering the content of every item.\n * Receives three arguments:\n *\n * - `root` The `` internal container DOM element.\n * - `comboBox` The reference to the `` element.\n * - `model` The object with the properties related with the rendered\n * item, contains:\n * - `model.index` The index of the rendered item.\n * - `model.item` The item.\n */\n renderer: Function,\n\n /**\n * A full set of items to filter the visible options from.\n * The items can be of either `String` or `Object` type.\n */\n items: {\n type: Array,\n observer: '_itemsChanged'\n },\n\n /**\n * If `true`, the user can input a value that is not present in the items list.\n * `value` property will be set to the input value in this case.\n * Also, when `value` is set programmatically, the input value will be set\n * to reflect that value.\n */\n allowCustomValue: {\n type: Boolean,\n value: false\n },\n\n /**\n * A subset of items, filtered based on the user input. Filtered items\n * can be assigned directly to omit the internal filtering functionality.\n * The items can be of either `String` or `Object` type.\n */\n filteredItems: {\n type: Array\n },\n\n /**\n * The `String` value for the selected item of the combo box. Provides\n * the value for `iron-form`.\n *\n * When there’s no item selected, the value is an empty string.\n *\n * Use `selectedItem` property to get the raw selected item from\n * the `items` array.\n */\n value: {\n type: String,\n observer: '_valueChanged',\n notify: true,\n value: ''\n },\n\n /**\n * Used to detect user value changes and fire `change` events.\n */\n _lastCommittedValue: String,\n\n /*\n * When set to `true`, \"loading\" attribute is added to host and the overlay element.\n */\n loading: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n _focusedIndex: {\n type: Number,\n value: -1\n },\n\n /**\n * Filtering string the user has typed into the input field.\n */\n filter: {\n type: String,\n value: '',\n notify: true\n },\n\n /**\n * The selected item from the `items` array.\n */\n selectedItem: {\n type: Object,\n notify: true\n },\n\n /**\n * Path for label of the item. If `items` is an array of objects, the\n * `itemLabelPath` is used to fetch the displayed string label for each\n * item.\n *\n * The item label is also used for matching items when processing user\n * input, i.e., for filtering and selecting items.\n *\n * When using item templates, the property is still needed because it is used\n * for filtering, and for displaying the selected item value in the input box.\n */\n itemLabelPath: {\n type: String,\n value: 'label',\n observer: '_itemLabelPathChanged'\n },\n\n /**\n * Path for the value of the item. If `items` is an array of objects, the\n * `itemValuePath:` is used to fetch the string value for the selected\n * item.\n *\n * The item value is used in the `value` property of the combo box,\n * to provide the form value.\n */\n itemValuePath: {\n type: String,\n value: 'value'\n },\n\n /**\n * Path for the id of the item. If `items` is an array of objects,\n * the `itemIdPath` is used to compare and identify the same item\n * in `selectedItem` and `filteredItems` (items given by the\n * `dataProvider` callback).\n */\n itemIdPath: String,\n\n /**\n * The name of this element.\n */\n name: {\n type: String\n },\n\n /**\n * Set to true if the value is invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n _toggleElement: Object,\n _clearElement: Object,\n\n _inputElementValue: String,\n\n _closeOnBlurIsPrevented: Boolean,\n\n _previousDocumentPointerEvents: String,\n\n _itemTemplate: Object\n };\n }\n\n static get observers() {\n return [\n '_filterChanged(filter, itemValuePath, itemLabelPath)',\n '_itemsOrPathsChanged(items.*, itemValuePath, itemLabelPath)',\n '_filteredItemsChanged(filteredItems.*, itemValuePath, itemLabelPath)',\n '_templateOrRendererChanged(_itemTemplate, renderer)',\n '_loadingChanged(loading)',\n '_selectedItemChanged(selectedItem, itemLabelPath)',\n '_toggleElementChanged(_toggleElement)'\n ];\n }\n\n ready() {\n super.ready();\n\n this.addEventListener('focusout', e => {\n // Fixes the problem with `focusout` happening when clicking on the scroll bar on Edge\n const dropdown = this.$.overlay.$.dropdown;\n if (dropdown && dropdown.$ && e.relatedTarget === dropdown.$.overlay) {\n e.composedPath()[0].focus();\n return;\n }\n if (!this._closeOnBlurIsPrevented) {\n this.close();\n }\n });\n\n this._lastCommittedValue = this.value;\n IronA11yAnnouncer.requestAvailability();\n\n // 2.0 does not support 'overlay.selection-changed' syntax in listeners\n this.$.overlay.addEventListener('selection-changed', this._overlaySelectedItemChanged.bind(this));\n\n this.addEventListener('vaadin-combo-box-dropdown-closed', this._onClosed.bind(this));\n this.addEventListener('vaadin-combo-box-dropdown-opened', this._onOpened.bind(this));\n this.addEventListener('keydown', this._onKeyDown.bind(this));\n this.addEventListener('click', this._onClick.bind(this));\n\n this.$.overlay.addEventListener('vaadin-overlay-touch-action', this._onOverlayTouchAction.bind(this));\n\n this.addEventListener('touchend', e => {\n if (!this._clearElement || e.composedPath()[0] !== this._clearElement) {\n return;\n }\n\n e.preventDefault();\n this._clear();\n });\n\n this._observer = new FlattenedNodesObserver(this, info => {\n this._setTemplateFromNodes(info.addedNodes);\n });\n }\n\n\n /**\n * Manually invoke existing renderer.\n */\n render() {\n if (this.$.overlay._selector) {\n this.$.overlay._selector.querySelectorAll('vaadin-combo-box-item').forEach(item => item._render());\n }\n }\n\n _setTemplateFromNodes(nodes) {\n this._itemTemplate = nodes.filter(node => node.localName && node.localName === 'template')[0] || this._itemTemplate;\n }\n\n _removeNewRendererOrTemplate(template, oldTemplate, renderer, oldRenderer) {\n if (template !== oldTemplate) {\n this._itemTemplate = undefined;\n } else if (renderer !== oldRenderer) {\n this.renderer = undefined;\n }\n }\n\n _templateOrRendererChanged(template, renderer) {\n if (template && renderer) {\n this._removeNewRendererOrTemplate(template, this._oldTemplate, renderer, this._oldRenderer);\n throw new Error('You should only use either a renderer or a template for combo box items');\n }\n\n this._oldTemplate = template;\n this._oldRenderer = renderer;\n }\n\n /**\n * Opens the dropdown list.\n */\n open() {\n // Prevent _open() being called when input is disabled or read-only\n if (!this.disabled && !this.readonly) {\n this.opened = true;\n }\n }\n\n /**\n * Closes the dropdown list.\n */\n close() {\n this.opened = false;\n }\n\n _openedChanged(value, old) {\n // Prevent _close() being called when opened is set to its default value (false).\n if (old === undefined) {\n return;\n }\n\n if (this.opened) {\n this._openedWithFocusRing = this.hasAttribute('focus-ring') || (this.focusElement && this.focusElement.hasAttribute('focus-ring'));\n // For touch devices, we don't want to popup virtual keyboard on touch devices unless input\n // is explicitly focused by the user.\n if (!this.$.overlay.touchDevice) {\n // Check to see if there is a focused property and if it's already true.\n if (!this.focused) {\n this.focus();\n }\n }\n } else {\n if (this._openedWithFocusRing && this.hasAttribute('focused')) {\n this.focusElement.setAttribute('focus-ring', '');\n }\n this._onClosed();\n }\n }\n\n _onOverlayTouchAction(event) {\n // On touch devices, blur the input on touch start inside the overlay, in order to hide\n // the virtual keyboard. But don't close the overlay on this blur.\n this._closeOnBlurIsPrevented = true;\n this.inputElement.blur();\n this._closeOnBlurIsPrevented = false;\n }\n\n _onClick(e) {\n this._closeOnBlurIsPrevented = true;\n\n const path = e.composedPath();\n if (path.indexOf(this._clearElement) !== -1) {\n this._clear();\n this.focus();\n } else if (path.indexOf(this.inputElement) !== -1) {\n if (path.indexOf(this._toggleElement) > -1 && this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n this._closeOnBlurIsPrevented = false;\n }\n\n /**\n * Keyboard navigation\n */\n\n _onKeyDown(e) {\n if (this._isEventKey(e, 'down')) {\n this._closeOnBlurIsPrevented = true;\n this._onArrowDown();\n this._closeOnBlurIsPrevented = false;\n\n // prevent caret from moving\n e.preventDefault();\n } else if (this._isEventKey(e, 'up')) {\n this._closeOnBlurIsPrevented = true;\n this._onArrowUp();\n this._closeOnBlurIsPrevented = false;\n\n // prevent caret from moving\n e.preventDefault();\n } else if (this._isEventKey(e, 'enter')) {\n this._onEnter(e);\n } else if (this._isEventKey(e, 'esc')) {\n this._onEscape(e);\n }\n }\n\n _isEventKey(e, k) {\n return IronA11yKeysBehavior.keyboardEventMatchesKeys(e, k);\n }\n\n _getItemLabel(item) {\n return this.$.overlay.getItemLabel(item);\n }\n\n _getItemValue(item) {\n let value = item && this.itemValuePath ? this.get(this.itemValuePath, item) : undefined;\n if (value === undefined) {\n value = item ? item.toString() : '';\n }\n return value;\n }\n\n _onArrowDown() {\n if (this.opened) {\n if (this.$.overlay._items) {\n this._focusedIndex = Math.min(this.$.overlay._items.length - 1, this._focusedIndex + 1);\n this._prefillFocusedItemLabel();\n }\n } else {\n this.open();\n }\n }\n\n _onArrowUp() {\n if (this.opened) {\n if (this._focusedIndex > -1) {\n this._focusedIndex = Math.max(0, this._focusedIndex - 1);\n } else {\n if (this.$.overlay._items) {\n this._focusedIndex = this.$.overlay._items.length - 1;\n }\n }\n\n this._prefillFocusedItemLabel();\n } else {\n this.open();\n }\n }\n\n _prefillFocusedItemLabel() {\n if (this._focusedIndex > -1) {\n // Reset the input value asyncronously to prevent partial value changes\n // announce. Makes OSX VoiceOver to announce the complete value instead.\n this._inputElementValue = '';\n // 1ms delay needed for OSX VoiceOver to realise input value was reset\n setTimeout(() => {\n this._inputElementValue = this._getItemLabel(this.$.overlay._focusedItem);\n this._markAllSelectionRange();\n }, 1);\n }\n }\n\n _setSelectionRange(start, end) {\n // vaadin-text-field does not implement setSelectionRange, hence we need the native input\n const input = this._nativeInput || this.inputElement;\n\n // Setting selection range focuses and/or moves the caret in some browsers,\n // and there's no need to modify the selection range if the input isn't focused anyway.\n // This affects Safari. When the overlay is open, and then hiting tab, browser should focus\n // the next focusable element instead of the combo-box itself.\n // Checking the focused property here is enough instead of checking the activeElement.\n if (this.hasAttribute('focused') && input && input.setSelectionRange) {\n try {\n input.setSelectionRange(start, end);\n } catch (ignore) {\n // IE11 randomly fails when running tests in Sauce.\n }\n }\n }\n\n _markAllSelectionRange() {\n if (this._inputElementValue !== undefined) {\n this._setSelectionRange(0, this._inputElementValue.length);\n }\n }\n\n _clearSelectionRange() {\n if (this._inputElementValue !== undefined) {\n const pos = this._inputElementValue ? this._inputElementValue.length : 0;\n this._setSelectionRange(pos, pos);\n }\n }\n\n _onEnter(e) {\n // should close on enter when custom values are allowed, input field is cleared, or when an existing\n // item is focused with keyboard.\n if (this.opened && (this.allowCustomValue || this._inputElementValue === '' || this._focusedIndex > -1)) {\n this.close();\n\n // Do not submit the surrounding form.\n e.preventDefault();\n }\n }\n\n _onEscape(e) {\n if (this.opened) {\n this._stopPropagation(e);\n\n if (this._focusedIndex > -1) {\n this._focusedIndex = -1;\n this._revertInputValue();\n } else {\n this.cancel();\n }\n }\n }\n\n _toggleElementChanged(toggleElement) {\n if (toggleElement) {\n // Don't blur the input on toggle mousedown\n toggleElement.addEventListener('mousedown', e => e.preventDefault());\n }\n }\n\n /**\n * Clears the current value.\n */\n _clear() {\n this.selectedItem = null;\n\n if (this.allowCustomValue) {\n this.value = '';\n }\n\n if (!this.opened) {\n this._detectAndDispatchChange();\n }\n }\n\n /**\n * Reverts back to original value.\n */\n cancel() {\n this._revertInputValueToValue();\n // In the next _detectAndDispatchChange() call, the change detection should not pass\n this._lastCommittedValue = this.value;\n this.close();\n }\n\n _onOpened() {\n // Pre P2 iron-list used a debouncer to render. Now that we synchronously render items,\n // we need to flush the DOM to make sure it doesn't get flushed in the middle of _render call\n // because that will cause problems to say the least.\n flush();\n\n // With iron-list v1.3.9, calling `notifyResize()` no longer renders\n // the items synchronously. It is required to have the items rendered\n // before we update the overlay and the list positions and sizes.\n this.$.overlay.ensureItemsRendered();\n this.$.overlay._selector.toggleScrollListener(true);\n\n // Ensure metrics are up-to-date\n this.$.overlay.updateViewportBoundaries();\n // Force iron-list to create reusable nodes. Otherwise it will only start\n // doing that in scroll listener, which is especially slow in Edge.\n this.$.overlay._selector._increasePoolIfNeeded();\n setTimeout(() => this._resizeDropdown(), 1);\n // Defer scroll position adjustment to prevent freeze in Edge\n window.requestAnimationFrame(() => this.$.overlay.adjustScrollPosition());\n\n\n // _detectAndDispatchChange() should not consider value changes done before opening\n this._lastCommittedValue = this.value;\n }\n\n _onClosed() {\n\n // Happens when the overlay is closed by clicking outside\n if (this.opened) {\n this.close();\n }\n\n if (this.$.overlay._items && this._focusedIndex > -1) {\n const focusedItem = this.$.overlay._items[this._focusedIndex];\n if (this.selectedItem !== focusedItem) {\n this.selectedItem = focusedItem;\n }\n // make sure input field is updated in case value doesn't change (i.e. FOO -> foo)\n this._inputElementValue = this._getItemLabel(this.selectedItem);\n } else if (this._inputElementValue === '' || this._inputElementValue === undefined) {\n this.selectedItem = null;\n\n if (this.allowCustomValue) {\n this.value = '';\n }\n } else {\n if (this.allowCustomValue) {\n const e = new CustomEvent('custom-value-set', {detail: this._inputElementValue, composed: true, cancelable: true, bubbles: true});\n this.dispatchEvent(e);\n if (!e.defaultPrevented) {\n const customValue = this._inputElementValue;\n this._selectItemForValue(customValue);\n this.value = customValue;\n }\n } else {\n this._inputElementValue = this.selectedItem ? this._getItemLabel(this.selectedItem) : '';\n }\n }\n\n this._detectAndDispatchChange();\n\n this._clearSelectionRange();\n\n if (!this.dataProvider) {\n this.filter = '';\n }\n }\n\n /**\n * Filtering and items handling\n */\n _inputValueChanged(e) {\n // Handle only input events from our inputElement.\n if (e.composedPath().indexOf(this.inputElement) !== -1) {\n this._inputElementValue = this.inputElement.value;\n this._filterFromInput();\n }\n }\n\n _filterFromInput(e) {\n if (!this.opened) {\n this.open();\n }\n\n if (this.filter === this._inputElementValue) {\n // Filter and input value might get out of sync, while keyboard navigating for example.\n // Afterwards, input value might be changed to the same value as used in filtering.\n // In situation like these, we need to make sure all the filter changes handlers are run.\n this._filterChanged(this.filter, this.itemValuePath, this.itemLabelPath);\n } else {\n this.filter = this._inputElementValue;\n }\n }\n\n _itemLabelPathChanged(itemLabelPath, oldItemLabelPath) {\n if (typeof itemLabelPath !== 'string') {\n console.error('You should set itemLabelPath to a valid string');\n }\n }\n\n _filterChanged(filter, itemValuePath, itemLabelPath) {\n if (filter === undefined) {\n return;\n }\n if (this.items) {\n this.filteredItems = this._filterItems(this.items, filter);\n } else {\n // With certain use cases (e. g., external filtering), `items` are\n // undefined. Filtering is unnecessary per se, but the filteredItems\n // observer should still be invoked to update focused item.\n this._filteredItemsChanged({path: 'filteredItems', value: this.filteredItems}, itemValuePath, itemLabelPath);\n }\n }\n\n _loadingChanged(loading) {\n if (loading) {\n this._focusedIndex = -1;\n }\n }\n\n _revertInputValue() {\n if (this.filter !== '') {\n this._inputElementValue = this.filter;\n } else {\n this._revertInputValueToValue();\n }\n this._clearSelectionRange();\n }\n\n _revertInputValueToValue() {\n if (this.allowCustomValue && !this.selectedItem) {\n this._inputElementValue = this.value;\n } else {\n this._inputElementValue = this._getItemLabel(this.selectedItem);\n }\n }\n\n _resizeDropdown() {\n this.$.overlay.$.dropdown.notifyResize();\n }\n\n _updateHasValue(hasValue) {\n if (hasValue) {\n this.setAttribute('has-value', '');\n } else {\n this.removeAttribute('has-value');\n }\n }\n\n _selectedItemChanged(selectedItem, itemLabelPath) {\n if (selectedItem === null || selectedItem === undefined) {\n if (this.filteredItems) {\n if (!this.allowCustomValue) {\n this.value = '';\n }\n\n this._updateHasValue(this.value !== '');\n this._inputElementValue = this.value;\n }\n } else {\n const value = this._getItemValue(selectedItem);\n if (this.value !== value) {\n this.value = value;\n }\n\n this._updateHasValue(true);\n this._inputElementValue = this._getItemLabel(selectedItem);\n\n // Could not be defined in 1.x because ready is called after all prop-setters\n if (this.inputElement) {\n this.inputElement.value = this._inputElementValue;\n }\n }\n\n this.$.overlay._selectedItem = selectedItem;\n if (this.filteredItems && this.$.overlay._items) {\n this._focusedIndex = this.filteredItems.indexOf(selectedItem);\n }\n }\n\n _valueChanged(value, oldVal) {\n if (value === '' && oldVal === undefined) { // initializing, no need to do anything (#554)\n return;\n }\n\n if (this._isValidValue(value)) {\n let item;\n if (this._getItemValue(this.selectedItem) !== value) {\n this._selectItemForValue(value);\n } else {\n item = this.selectedItem;\n }\n\n if (!item && this.allowCustomValue) {\n this._inputElementValue = value;\n }\n\n this._updateHasValue(this.value !== '');\n } else {\n this.selectedItem = null;\n }\n // In the next _detectAndDispatchChange() call, the change detection should pass\n this._lastCommittedValue = undefined;\n }\n\n _detectAndDispatchChange() {\n if (this.value !== this._lastCommittedValue) {\n this.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n this._lastCommittedValue = this.value;\n }\n }\n\n _itemsChanged(items, oldItems) {\n this._ensureItemsOrDataProvider(() => {\n this.items = oldItems;\n });\n }\n\n _itemsOrPathsChanged(e, itemValuePath, itemLabelPath) {\n if (e.value === undefined) {\n return;\n }\n if (e.path === 'items' || e.path === 'items.splices') {\n this.filteredItems = this.items ? this.items.slice(0) : this.items;\n\n const valueIndex = this._indexOfValue(this.value, this.items);\n this._focusedIndex = valueIndex;\n\n const item = valueIndex > -1 && this.items[valueIndex];\n if (item) {\n this.selectedItem = item;\n }\n }\n }\n\n _filteredItemsChanged(e, itemValuePath, itemLabelPath) {\n if (e.value === undefined) {\n return;\n }\n if (e.path === 'filteredItems' || e.path === 'filteredItems.splices') {\n this._setOverlayItems(this.filteredItems);\n\n this._focusedIndex = this.opened ?\n this.$.overlay.indexOfLabel(this.filter) :\n this._indexOfValue(this.value, this.filteredItems);\n\n if (this.opened) {\n this._repositionOverlay();\n }\n }\n }\n\n _filterItems(arr, filter) {\n if (!arr) {\n return arr;\n }\n\n return arr.filter(item => {\n filter = filter ? filter.toString().toLowerCase() : '';\n // Check if item contains input value.\n return this._getItemLabel(item).toString().toLowerCase().indexOf(filter) > -1;\n });\n }\n\n _selectItemForValue(value) {\n const valueIndex = this._indexOfValue(value, this.filteredItems);\n const previouslySelectedItem = this.selectedItem;\n\n this.selectedItem = valueIndex >= 0\n ? this.filteredItems[valueIndex]\n : (this.dataProvider && this.selectedItem === undefined)\n ? undefined\n : null;\n\n if (this.selectedItem === null && previouslySelectedItem === null) {\n this._selectedItemChanged(this.selectedItem);\n }\n }\n\n _setOverlayItems(items) {\n this.$.overlay.set('_items', items);\n\n if (this.opened) {\n this._resizeDropdown();\n }\n }\n\n _repositionOverlay() {\n // async needed to reposition correctly after filtering\n // (especially when aligned on top of input)\n setTimeout(() => {\n this._resizeDropdown();\n this.$.overlay.updateViewportBoundaries();\n this.$.overlay.ensureItemsRendered();\n this.$.overlay._selector.notifyResize();\n flush();\n }, 1);\n }\n\n _indexOfValue(value, items) {\n if (items && this._isValidValue(value)) {\n for (let i = 0; i < items.length; i++) {\n if (this._getItemValue(items[i]) === value) {\n return i;\n }\n }\n }\n\n return -1;\n }\n\n /**\n * Checks if the value is supported as an item value in this control.\n *\n * @return {boolean}\n */\n _isValidValue(value) {\n return value !== undefined && value !== null;\n }\n\n _overlaySelectedItemChanged(e) {\n // stop this private event from leaking outside.\n e.stopPropagation();\n\n if (e.detail.item instanceof ComboBoxPlaceholder) {\n // Placeholder items should not be selectable.\n return;\n }\n\n if (this.opened) {\n this.close();\n }\n\n if (this.selectedItem !== e.detail.item) {\n this.selectedItem = e.detail.item;\n }\n }\n\n\n /**\n * Returns true if `value` is valid, and sets the `invalid` flag appropriately.\n *\n * @return {boolean} True if the value is valid and sets the `invalid` flag appropriately\n */\n validate() {\n return !(this.invalid = !this.checkValidity());\n }\n\n /**\n * Returns true if the current input value satisfies all constraints (if any)\n *\n * You can override the `checkValidity` method for custom validations.\n */\n checkValidity() {\n if (this.inputElement.validate) {\n return this.inputElement.validate();\n }\n }\n\n get _instanceProps() {\n return {\n item: true,\n index: true,\n selected: true,\n focused: true\n };\n }\n\n _ensureTemplatized() {\n if (!this._TemplateClass) {\n const tpl = this._itemTemplate || this._getRootTemplate();\n if (tpl) {\n this._TemplateClass = templatize(tpl, this, {\n instanceProps: this._instanceProps,\n forwardHostProp: function(prop, value) {\n const items = this.$.overlay._selector.querySelectorAll('vaadin-combo-box-item');\n Array.prototype.forEach.call(items, item => {\n if (item._itemTemplateInstance) {\n item._itemTemplateInstance.set(prop, value);\n item._itemTemplateInstance.notifyPath(prop, value, true);\n }\n });\n }\n });\n }\n }\n }\n\n _getRootTemplate() {\n return Array.prototype.filter.call(this.children, elem => elem.tagName === 'TEMPLATE')[0];\n }\n\n _preventInputBlur() {\n if (this._toggleElement) {\n this._toggleElement.addEventListener('click', this._preventDefault);\n }\n if (this._clearElement) {\n this._clearElement.addEventListener('click', this._preventDefault);\n }\n }\n\n _restoreInputBlur() {\n if (this._toggleElement) {\n this._toggleElement.removeEventListener('click', this._preventDefault);\n }\n if (this._clearElement) {\n this._clearElement.removeEventListener('click', this._preventDefault);\n }\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n _stopPropagation(e) {\n e.stopPropagation();\n }\n\n /**\n * Fired when the value changes.\n *\n * @event value-changed\n * @param {Object} detail\n * @param {String} detail.value the combobox value\n */\n\n /**\n * Fired when selected item changes.\n *\n * @event selected-item-changed\n * @param {Object} detail\n * @param {Object|String} detail.value the selected item. Type is the same as the type of `items`.\n */\n\n /**\n * Fired when the user sets a custom value.\n * @event custom-value-set\n * @param {String} detail the custom value\n */\n\n /**\n * Fired when value changes.\n * To comply with https://developer.mozilla.org/en-US/docs/Web/Events/change\n * @event change\n */\n};\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\n\n/**\n * @polymerMixin\n */\nexport const ComboBoxDataProviderMixin = superClass => class DataProviderMixin extends superClass {\n\n static get properties() {\n return {\n\n /**\n * Number of items fetched at a time from the dataprovider.\n */\n pageSize: {\n type: Number,\n value: 50,\n observer: '_pageSizeChanged'\n },\n\n /**\n * Total number of items.\n */\n size: {\n type: Number,\n observer: '_sizeChanged'\n },\n\n /**\n * Function that provides items lazily. Receives arguments `params`, `callback`\n *\n * `params.page` Requested page index\n *\n * `params.pageSize` Current page size\n *\n * `params.filter` Currently applied filter\n *\n * `callback(items, size)` Callback function with arguments:\n * - `items` Current page of items\n * - `size` Total number of items.\n */\n dataProvider: {\n type: Object,\n observer: '_dataProviderChanged'\n },\n\n _pendingRequests: {\n value: () => {\n return {};\n }\n },\n\n __placeHolder: {\n value: new ComboBoxPlaceholder()\n }\n\n };\n }\n\n static get observers() {\n return [\n '_dataProviderFilterChanged(filter, dataProvider)',\n '_dataProviderClearFilter(dataProvider, opened, value)',\n '_warnDataProviderValue(dataProvider, value)',\n '_ensureFirstPage(opened)',\n ];\n }\n\n _dataProviderClearFilter(dataProvider, opened, value) {\n // Can't depend on filter in this obsever as we don't want\n // to clear the filter whenever it's set\n if (dataProvider && this.filter) {\n this.size = undefined;\n this._pendingRequests = {};\n this.filter = '';\n this.clearCache();\n }\n }\n\n ready() {\n super.ready();\n this.clearCache();\n this.$.overlay.addEventListener('index-requested', e => {\n const index = e.detail.index;\n if (index !== undefined) {\n const page = this._getPageForIndex(index);\n if (this._shouldLoadPage(page)) {\n this._loadPage(page);\n }\n }\n });\n }\n\n _dataProviderFilterChanged() {\n if (this.dataProvider && this.opened) {\n this.size = undefined;\n this._pendingRequests = {};\n this.clearCache();\n }\n }\n\n _ensureFirstPage(opened) {\n if (opened && this._shouldLoadPage(0)) {\n this._loadPage(0);\n }\n }\n\n _shouldLoadPage(page) {\n if (!this.filteredItems || this._forceNextRequest) {\n this._forceNextRequest = false;\n return true;\n }\n\n const loadedItem = this.filteredItems[page * this.pageSize];\n if (loadedItem !== undefined) {\n return loadedItem instanceof ComboBoxPlaceholder;\n } else {\n return this.size === undefined;\n }\n }\n\n _loadPage(page) {\n // make sure same page isn't requested multiple times.\n if (!this._pendingRequests[page] && this.dataProvider) {\n this.loading = true;\n\n const params = {\n page,\n pageSize: this.pageSize,\n filter: this.filter\n };\n\n const callback = (items, size) => {\n if (this._pendingRequests[page] === callback) {\n if (!this.filteredItems) {\n const filteredItems = [];\n filteredItems.splice(params.page * params.pageSize, items.length, ...items);\n this.filteredItems = filteredItems;\n } else {\n this.splice('filteredItems', params.page * params.pageSize, items.length, ...items);\n }\n // Update selectedItem from filteredItems if value is set\n if (this._isValidValue(this.value) && this._getItemValue(this.selectedItem) !== this.value) {\n this._selectItemForValue(this.value);\n }\n this.size = size;\n\n delete this._pendingRequests[page];\n\n if (Object.keys(this._pendingRequests).length === 0) {\n this.loading = false;\n }\n }\n };\n this._pendingRequests[page] = callback;\n this.dataProvider(params, callback);\n }\n }\n\n _getPageForIndex(index) {\n return Math.floor(index / this.pageSize);\n }\n\n /**\n * Clears the cached pages and reloads data from dataprovider when needed.\n */\n clearCache() {\n if (!this.dataProvider) {\n return;\n }\n this._pendingRequests = {};\n const filteredItems = [];\n for (let i = 0; i < (this.size || 0); i++) {\n filteredItems.push(this.__placeHolder);\n }\n this.filteredItems = filteredItems;\n if (this.opened) {\n this._loadPage(0);\n } else {\n this._forceNextRequest = true;\n }\n }\n\n _sizeChanged(size = 0) {\n const filteredItems = (this.filteredItems || []).slice(0, size);\n for (let i = 0; i < size; i++) {\n filteredItems[i] = filteredItems[i] !== undefined ? filteredItems[i] : this.__placeHolder;\n }\n this.filteredItems = filteredItems;\n }\n\n _pageSizeChanged(pageSize, oldPageSize) {\n if (Math.floor(pageSize) !== pageSize || pageSize === 0) {\n this.pageSize = oldPageSize;\n throw new Error('`pageSize` value must be an integer > 0');\n }\n this.clearCache();\n }\n\n _dataProviderChanged(dataProvider, oldDataProvider) {\n this._ensureItemsOrDataProvider(() => {\n this.dataProvider = oldDataProvider;\n });\n }\n\n _ensureItemsOrDataProvider(restoreOldValueCallback) {\n if (this.items !== undefined && this.dataProvider !== undefined) {\n restoreOldValueCallback();\n throw new Error('Using `items` and `dataProvider` together is not supported');\n }\n }\n\n _warnDataProviderValue(dataProvider, value) {\n if (dataProvider && value !== '' && (this.selectedItem === undefined || this.selectedItem === null)) {\n const valueIndex = this._indexOfValue(value, this.filteredItems);\n if (valueIndex < 0 || !this._getItemLabel(this.filteredItems[valueIndex])) {\n /* eslint-disable no-console */\n console.warn(\n 'Warning: unable to determine the label for the provided `value`. ' +\n 'Nothing to display in the text field. This usually happens when ' +\n 'setting an initial `value` before any items are returned from ' +\n 'the `dataProvider` callback. Consider setting `selectedItem` ' +\n 'instead of `value`'\n );\n /* eslint-enable no-console */\n }\n }\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * The default element used for items in the vaadin-combo-box.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---|---\n * `content` | The element that wraps the item label or template content\n *\n * The following state attributes are exposed for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `selected` | Set when the item is selected | :host\n * `focused` | Set when the item is focused | :host\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @private\n */\nclass ComboBoxItemElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-combo-box-item';\n }\n\n static get properties() {\n return {\n /**\n * The index of the item\n */\n index: Number,\n\n /**\n * The item to render\n * @type {(String|Object)}\n */\n item: Object,\n\n /**\n * The text label corresponding to the item\n */\n label: String,\n\n /**\n * True when item is selected\n */\n selected: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * True when item is focused\n */\n focused: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * The template instance corresponding to the item\n */\n _itemTemplateInstance: Object,\n\n /**\n * Custom function for rendering the content of the `` propagated from the combo box element.\n */\n renderer: Function,\n\n /**\n * Saved instance of a custom renderer function.\n */\n _oldRenderer: Function\n };\n }\n\n static get observers() {\n return [\n '_rendererOrItemChanged(renderer, index, item.*)',\n '_updateLabel(label, _itemTemplateInstance)',\n '_updateTemplateInstanceVariable(\"index\", index, _itemTemplateInstance)',\n '_updateTemplateInstanceVariable(\"item\", item, _itemTemplateInstance)',\n '_updateTemplateInstanceVariable(\"selected\", selected, _itemTemplateInstance)',\n '_updateTemplateInstanceVariable(\"focused\", focused, _itemTemplateInstance)'\n ];\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this._itemTemplateInstance) {\n // 2.0 has __dataHost. Might want to consider assigning combobox reference directly to item.\n const overlay = this.getRootNode().host.getRootNode().host;\n const dropdown = overlay.__dataHost;\n const comboBoxOverlay = dropdown.getRootNode().host;\n this._comboBox = comboBoxOverlay.getRootNode().host;\n this._comboBox._ensureTemplatized();\n if (this._comboBox._TemplateClass) {\n this._itemTemplateInstance = new this._comboBox._TemplateClass({});\n this.$.content.textContent = '';\n this.$.content.appendChild(this._itemTemplateInstance.root);\n }\n }\n }\n\n _render() {\n if (!this.renderer) {\n return;\n }\n\n const model = {\n index: this.index,\n item: this.item\n };\n\n this.renderer(this.$.content, this._comboBox, model);\n }\n\n _rendererOrItemChanged(renderer, index, item) {\n if (item === undefined || index === undefined) {\n return;\n }\n\n if (this._oldRenderer !== renderer) {\n this.$.content.innerHTML = '';\n }\n\n if (renderer) {\n this._oldRenderer = renderer;\n this._render();\n }\n }\n\n _updateLabel(label, _itemTemplateInstance) {\n if (_itemTemplateInstance === undefined && this.$.content && !this.renderer) {\n // Only set label to textContent no template\n this.$.content.textContent = label;\n }\n }\n\n _updateTemplateInstanceVariable(variable, value, _itemTemplateInstance) {\n if (variable === undefined || value === undefined || _itemTemplateInstance === undefined) {\n return;\n }\n _itemTemplateInstance[variable] = value;\n }\n}\n\ncustomElements.define(ComboBoxItemElement.is, ComboBoxItemElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { DisableUpgradeMixin } from '@polymer/polymer/lib/mixins/disable-upgrade-mixin.js';\nimport { OverlayElement } from '@vaadin/vaadin-overlay/src/vaadin-overlay.js';\nimport { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';\n/**\n * The overlay element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @private\n */\nclass ComboBoxOverlayElement extends OverlayElement {\n static get is() {\n return 'vaadin-combo-box-overlay';\n }\n\n ready() {\n super.ready();\n const loader = document.createElement('div');\n loader.setAttribute('part', 'loader');\n const content = this.shadowRoot.querySelector(['[part~=\"content\"]']);\n content.parentNode.insertBefore(loader, content);\n }\n}\n\ncustomElements.define(ComboBoxOverlayElement.is, ComboBoxOverlayElement);\n\n/**\n * Element for internal use only.\n *\n * @memberof Vaadin\n * @private\n */\nclass ComboBoxDropdownElement extends DisableUpgradeMixin(\n mixinBehaviors(IronResizableBehavior, PolymerElement)) {\n static get template() {\n return html`\n \n \n \n \n`;\n }\n\n static get is() {\n return 'vaadin-combo-box-dropdown';\n }\n\n static get properties() {\n return {\n opened: {\n type: Boolean,\n observer: '_openedChanged'\n },\n\n template: {\n type: Object,\n notify: true\n },\n\n /**\n * The element to position/align the dropdown by.\n */\n positionTarget: {\n type: Object\n },\n\n /**\n * If `true`, overlay is aligned above the `positionTarget`\n */\n alignedAbove: {\n type: Boolean,\n value: false\n },\n\n /**\n * Used to propagate the `theme` attribute from the host element.\n */\n theme: String\n };\n }\n\n constructor() {\n super();\n this._boundSetPosition = this._setPosition.bind(this);\n this._boundOutsideClickListener = this._outsideClickListener.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('iron-resize', this._boundSetPosition);\n }\n\n ready() {\n super.ready();\n\n // Preventing the default modal behaviour of the overlay on input clicking\n this.$.overlay.addEventListener('vaadin-overlay-outside-click', e => {\n e.preventDefault();\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('iron-resize', this._boundSetPosition);\n\n // Making sure the overlay is closed and removed from DOM after detaching the dropdown.\n this.opened = false;\n }\n\n notifyResize() {\n super.notifyResize();\n\n if (this.positionTarget && this.opened) {\n this._setPosition();\n // Schedule another position update (to cover virtual keyboard opening for example)\n requestAnimationFrame(this._setPosition.bind(this));\n }\n }\n\n /**\n * Fired after the `vaadin-combo-box-dropdown` opens.\n *\n * @event vaadin-combo-box-dropdown-opened\n */\n /**\n * Fired after the `vaadin-combo-box-dropdown` closes.\n *\n * @event vaadin-combo-box-dropdown-closed\n */\n\n _openedChanged(opened, oldValue) {\n if (!!opened === !!oldValue) {\n return;\n }\n\n if (opened) {\n this.$.overlay.style.position = this._isPositionFixed(this.positionTarget) ? 'fixed' : 'absolute';\n this._setPosition();\n\n window.addEventListener('scroll', this._boundSetPosition, true);\n document.addEventListener('click', this._boundOutsideClickListener, true);\n this.dispatchEvent(new CustomEvent('vaadin-combo-box-dropdown-opened', {bubbles: true, composed: true}));\n } else {\n window.removeEventListener('scroll', this._boundSetPosition, true);\n document.removeEventListener('click', this._boundOutsideClickListener, true);\n this.dispatchEvent(new CustomEvent('vaadin-combo-box-dropdown-closed', {bubbles: true, composed: true}));\n }\n }\n\n\n // We need to listen on 'click' event and capture it and close the overlay before\n // propagating the event to the listener in the button. Otherwise, if the clicked button would call\n // open(), this would happen: https://www.youtube.com/watch?v=Z86V_ICUCD4\n _outsideClickListener(event) {\n const eventPath = event.composedPath();\n if (eventPath.indexOf(this.positionTarget) < 0 && eventPath.indexOf(this.$.overlay) < 0) {\n this.opened = false;\n }\n }\n\n _isPositionFixed(element) {\n const offsetParent = this._getOffsetParent(element);\n\n return window.getComputedStyle(element).position === 'fixed' ||\n (offsetParent && this._isPositionFixed(offsetParent));\n }\n\n _getOffsetParent(element) {\n if (element.assignedSlot) {\n return element.assignedSlot.parentElement;\n } else if (element.parentElement) {\n return element.offsetParent;\n }\n\n const parent = element.parentNode;\n\n if (parent && parent.nodeType === 11 && parent.host) {\n return parent.host; // parent is #shadowRoot\n }\n }\n\n _verticalOffset(overlayRect, targetRect) {\n return this.alignedAbove ? -overlayRect.height : targetRect.height;\n }\n\n _shouldAlignAbove(targetRect) {\n const spaceBelow = (\n window.innerHeight -\n targetRect.bottom -\n Math.min(document.body.scrollTop, 0)\n ) / window.innerHeight;\n\n return spaceBelow < 0.30;\n }\n\n _setPosition(e) {\n if (e && e.target) {\n const target = e.target === document ? document.body : e.target;\n const parent = this.$.overlay.parentElement;\n if (!(target.contains(this.$.overlay) || target.contains(this.positionTarget)) || parent !== document.body) {\n return;\n }\n }\n\n const targetRect = this.positionTarget.getBoundingClientRect();\n this.alignedAbove = this._shouldAlignAbove(targetRect);\n\n const overlayRect = this.$.overlay.getBoundingClientRect();\n this._translateX = targetRect.left - overlayRect.left + (this._translateX || 0);\n this._translateY = targetRect.top - overlayRect.top + (this._translateY || 0) +\n this._verticalOffset(overlayRect, targetRect);\n\n const _devicePixelRatio = window.devicePixelRatio || 1;\n this._translateX = Math.round(this._translateX * _devicePixelRatio) / _devicePixelRatio;\n this._translateY = Math.round(this._translateY * _devicePixelRatio) / _devicePixelRatio;\n this.$.overlay.style.transform = `translate3d(${this._translateX}px, ${this._translateY}px, 0)`;\n\n this.$.overlay.style.width = this.positionTarget.clientWidth + 'px';\n this.$.overlay.style.justifyContent = this.alignedAbove ? 'flex-end' : 'flex-start';\n\n // TODO: fire only when position actually changes changes\n this.dispatchEvent(new CustomEvent('position-changed'));\n }\n}\n\ncustomElements.define(ComboBoxDropdownElement.is, ComboBoxDropdownElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/iron-list/iron-list.js';\nimport './vaadin-combo-box-item.js';\nimport './vaadin-combo-box-dropdown.js';\nimport { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst TOUCH_DEVICE = (() => {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n})();\n\n/**\n * Element for internal use only.\n *\n * @memberof Vaadin\n * @private\n */\nclass ComboBoxDropdownWrapperElement extends (class extends PolymerElement {}) {\n static get template() {\n return html`\n \n \n \n \n \n \n \n \n \n \n
\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-combo-box-dropdown-wrapper';\n }\n\n static get properties() {\n return {\n /**\n * True if the device supports touch events.\n */\n touchDevice: {\n type: Boolean,\n value: TOUCH_DEVICE\n },\n\n opened: Boolean,\n\n /**\n * The element to position/align the dropdown by.\n */\n positionTarget: {\n type: Object\n },\n\n /**\n * Custom function for rendering the content of the `` propagated from the combo box element.\n */\n renderer: Function,\n\n /**\n * `true` when new items are being loaded.\n */\n loading: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n observer: '_setOverlayHeight'\n },\n\n /**\n * Used to propagate the `theme` attribute from the host element.\n */\n theme: String,\n\n _selectedItem: {\n type: Object\n },\n\n _items: {\n type: Object\n },\n\n _focusedIndex: {\n type: Number,\n value: -1,\n observer: '_focusedIndexChanged'\n },\n\n _focusedItem: {\n type: String,\n computed: '_getFocusedItem(_focusedIndex)'\n },\n\n _itemLabelPath: {\n type: String,\n value: 'label'\n },\n\n _itemValuePath: {\n type: String,\n value: 'value'\n },\n\n _selector: Object,\n\n _itemIdPath: String\n };\n }\n\n static get observers() {\n return ['_selectorChanged(_selector)', '_loadingChanged(loading)', '_openedChanged(opened, _items, loading)'];\n }\n\n _fireTouchAction(sourceEvent) {\n this.dispatchEvent(new CustomEvent('vaadin-overlay-touch-action', {\n detail: {sourceEvent: sourceEvent}\n }));\n }\n\n _getItems(opened, items) {\n return opened ? items : [];\n }\n\n _openedChanged(opened, items, loading) {\n if (this.$.dropdown.hasAttribute('disable-upgrade')) {\n if (!opened) {\n return;\n } else {\n this._initDropdown();\n }\n }\n // Do not attach if no items\n // Do not dettach if opened but user types an invalid search\n this.$.dropdown.opened = !!(opened && (loading || this.$.dropdown.opened || items && items.length));\n }\n\n _initDropdown() {\n this.$.dropdown.removeAttribute('disable-upgrade');\n\n this._templateChanged();\n this._loadingChanged(this.loading);\n\n this.$.dropdown.$.overlay.addEventListener('touchend', e => this._fireTouchAction(e));\n this.$.dropdown.$.overlay.addEventListener('touchmove', e => this._fireTouchAction(e));\n\n // Prevent blurring the input when clicking inside the overlay.\n this.$.dropdown.$.overlay.addEventListener('mousedown', e => e.preventDefault());\n\n // IE11: when scrolling with mouse, the focus goes to the scroller.\n // This causes the overlay closing due to defocusing the input field.\n // Prevent focusing the scroller by setting `unselectable=\"on\"`.\n if (/Trident/.test(navigator.userAgent)) {\n this._scroller.setAttribute('unselectable', 'on');\n }\n }\n\n _templateChanged(e) {\n if (this.$.dropdown.hasAttribute('disable-upgrade')) {\n return;\n }\n\n this._selector = this.$.dropdown.$.overlay.content.querySelector('#selector');\n this._scroller = this.$.dropdown.$.overlay.content.querySelector('#scroller');\n }\n\n _loadingChanged(loading) {\n if (this.$.dropdown.hasAttribute('disable-upgrade')) {\n return;\n }\n\n if (loading) {\n this.$.dropdown.$.overlay.setAttribute('loading', '');\n } else {\n this.$.dropdown.$.overlay.removeAttribute('loading');\n }\n }\n\n _selectorChanged(selector) {\n this._patchWheelOverScrolling();\n }\n\n _setOverlayHeight() {\n if (!this.opened || !this.positionTarget || !this._selector) {\n return;\n }\n\n const targetRect = this.positionTarget.getBoundingClientRect();\n\n this._scroller.style.maxHeight = (window.ShadyCSS ?\n window.ShadyCSS.getComputedStyleValue(this, '--vaadin-combo-box-overlay-max-height') :\n getComputedStyle(this).getPropertyValue('--vaadin-combo-box-overlay-max-height')) || '65vh';\n\n const maxHeight = this._maxOverlayHeight(targetRect);\n\n // overlay max height is restrained by the #scroller max height which is set to 65vh in CSS.\n this.$.dropdown.$.overlay.style.maxHeight = maxHeight;\n\n // we need to set height for iron-list to make its `firstVisibleIndex` work correctly.\n this._selector.style.maxHeight = maxHeight;\n\n this.updateViewportBoundaries();\n }\n\n _maxOverlayHeight(targetRect) {\n const margin = 8;\n const minHeight = 116; // Height of two items in combo-box\n const bottom = Math.min(window.innerHeight, document.body.scrollHeight - document.body.scrollTop);\n\n if (this.$.dropdown.alignedAbove) {\n return Math.max(targetRect.top - margin + Math.min(document.body.scrollTop, 0), minHeight) + 'px';\n } else {\n return Math.max(bottom - targetRect.bottom - margin, minHeight) + 'px';\n }\n }\n\n _getFocusedItem(focusedIndex) {\n if (focusedIndex >= 0) {\n return this._items[focusedIndex];\n }\n }\n\n _isItemSelected(item, selectedItem, itemIdPath) {\n if (item instanceof ComboBoxPlaceholder) {\n return false;\n } else if (itemIdPath && item !== undefined && selectedItem !== undefined) {\n return this.get(itemIdPath, item) === this.get(itemIdPath, selectedItem);\n } else {\n return item === selectedItem;\n }\n }\n\n _onItemClick(e) {\n if (e.detail && e.detail.sourceEvent && e.detail.sourceEvent.stopPropagation) {\n this._stopPropagation(e.detail.sourceEvent);\n }\n\n this.dispatchEvent(new CustomEvent('selection-changed', {detail: {item: e.model.item}}));\n }\n\n /**\n * Gets the index of the item with the provided label.\n * @return {Number}\n */\n indexOfLabel(label) {\n if (this._items && label) {\n for (let i = 0; i < this._items.length; i++) {\n if (this.getItemLabel(this._items[i]).toString().toLowerCase() ===\n label.toString().toLowerCase()) {\n return i;\n }\n }\n }\n\n return -1;\n }\n\n /**\n * If dataProvider is used, dispatch a request for the item’s index if\n * the item is a placeholder object.\n *\n * @return {Number}\n */\n __requestItemByIndex(item, index) {\n if ((item instanceof ComboBoxPlaceholder) && index !== undefined) {\n this.dispatchEvent(new CustomEvent('index-requested', {detail: {index}}));\n }\n\n return index;\n }\n\n /**\n * Gets the label string for the item based on the `_itemLabelPath`.\n * @return {String}\n */\n getItemLabel(item, itemLabelPath) {\n itemLabelPath = itemLabelPath || this._itemLabelPath;\n let label = item && itemLabelPath ? this.get(itemLabelPath, item) : undefined;\n if (label === undefined || label === null) {\n label = item ? item.toString() : '';\n }\n return label;\n }\n\n _isItemFocused(focusedIndex, itemIndex) {\n return focusedIndex == itemIndex;\n }\n\n _getAriaSelected(focusedIndex, itemIndex) {\n return this._isItemFocused(focusedIndex, itemIndex).toString();\n }\n\n _getAriaRole(itemIndex) {\n return itemIndex !== undefined ? 'option' : false;\n }\n\n _focusedIndexChanged(index) {\n if (index >= 0) {\n this._scrollIntoView(index);\n }\n }\n\n _scrollIntoView(index) {\n const visibleItemsCount = this._visibleItemsCount();\n if (visibleItemsCount === undefined) {\n // Scroller is not visible. Moving is unnecessary.\n return;\n }\n\n let targetIndex = index;\n\n if (index > this._selector.lastVisibleIndex - 1) {\n // Index is below the bottom, scrolling down. Make the item appear at the bottom.\n targetIndex = index - visibleItemsCount + 1;\n } else if (index > this._selector.firstVisibleIndex) {\n // The item is already visible, scrolling is unnecessary per se. But we need to trigger iron-list to set\n // the correct scrollTop on the scrollTarget. Scrolling to firstVisibleIndex.\n targetIndex = this._selector.firstVisibleIndex;\n }\n this._selector.scrollToIndex(Math.max(0, targetIndex));\n\n // Sometimes the item is partly below the bottom edge, detect and adjust.\n const pidx = this._selector._getPhysicalIndex(index),\n physicalItem = this._selector._physicalItems[pidx];\n if (!physicalItem) {\n return;\n }\n const physicalItemRect = physicalItem.getBoundingClientRect(),\n scrollerRect = this._scroller.getBoundingClientRect(),\n scrollTopAdjust = physicalItemRect.bottom - scrollerRect.bottom + this._viewportTotalPaddingBottom;\n if (scrollTopAdjust > 0) {\n this._scroller.scrollTop += scrollTopAdjust;\n }\n }\n\n ensureItemsRendered() {\n this._selector._render();\n }\n\n adjustScrollPosition() {\n if (this.opened && this._items) {\n this._scrollIntoView(this._focusedIndex);\n }\n }\n\n /**\n * We want to prevent the kinetic scrolling energy from being transferred from the overlay contents over to the parent.\n * Further improvement ideas: after the contents have been scrolled to the top or bottom and scrolling has stopped, it could allow\n * scrolling the parent similarly to touch scrolling.\n */\n _patchWheelOverScrolling() {\n const selector = this._selector;\n selector.addEventListener('wheel', e => {\n const scroller = selector._scroller || selector.scrollTarget;\n const scrolledToTop = scroller.scrollTop === 0;\n const scrolledToBottom = (scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight) <= 1;\n\n if (scrolledToTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (scrolledToBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n });\n }\n\n updateViewportBoundaries() {\n this._cachedViewportTotalPaddingBottom = undefined;\n this._selector.updateViewportBoundaries();\n }\n\n get _viewportTotalPaddingBottom() {\n if (this._cachedViewportTotalPaddingBottom === undefined) {\n const itemsStyle = window.getComputedStyle(this._selector.$.items);\n this._cachedViewportTotalPaddingBottom = [\n itemsStyle.paddingBottom,\n itemsStyle.borderBottomWidth\n ].map(v => {\n return parseInt(v, 10);\n }).reduce((sum, v) => {\n return sum + v;\n });\n }\n\n return this._cachedViewportTotalPaddingBottom;\n }\n\n _visibleItemsCount() {\n if (!this._selector) {\n return;\n }\n\n // Ensure items are rendered\n this._selector.flushDebouncer('_debounceTemplate');\n // Ensure items are positioned\n this._selector.scrollToIndex(this._selector.firstVisibleIndex);\n // Ensure viewport boundaries are up-to-date\n this.updateViewportBoundaries();\n return this._selector.lastVisibleIndex - this._selector.firstVisibleIndex + 1;\n }\n\n _selectItem(item) {\n item = (typeof item === 'number') ? this._items[item] : item;\n if (this._selector.selectedItem !== item) {\n this._selector.selectItem(item);\n }\n }\n\n _preventDefault(e) {\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n\n _stopPropagation(e) {\n e.stopPropagation();\n }\n\n _hidden(itemsChange) {\n return !this.loading && (!this._items || !this._items.length);\n }\n}\n\ncustomElements.define(ComboBoxDropdownWrapperElement.is, ComboBoxDropdownWrapperElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport { ComboBoxMixin } from './vaadin-combo-box-mixin.js';\nimport { ComboBoxDataProviderMixin } from './vaadin-combo-box-data-provider-mixin.js';\nimport './vaadin-combo-box-dropdown-wrapper.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { dashToCamelCase } from '@polymer/polymer/lib/utils/case-map.js';\n/**\n * `` is a customizable version of the `` providing\n * only the dropdown functionality and leaving the input field definition to the user.\n *\n * The element has the same API as ``.\n *\n * To create a custom input field, you need to add a child element which has a two-way\n * data-bindable property representing the input value. The property name is expected\n * to be `value` by default. See the example below for a simplest possible example\n * using a `` element.\n *\n * ```html\n * \n * \n * \n * \n * ```\n *\n * If you are using other custom input fields like ``, you\n * need to define the name of the bindable property with the `attrForValue` attribute.\n *\n * ```html\n * \n * \n * \n * \n * \n * ```\n *\n * In the next example you can see how to create a custom input field based\n * on a `` decorated with a custom `` and\n * two ``s to act as the clear and toggle controls.\n *\n * ```html\n * \n * \n * \n * Clear\n * Toggle\n * \n * \n * ```\n * @memberof Vaadin\n * @mixes Vaadin.ComboBoxDataProviderMixin\n * @mixes Vaadin.ComboBoxMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.ThemePropertyMixin\n */\nclass ComboBoxLightElement extends\n ThemePropertyMixin(\n ThemableMixin(\n ComboBoxDataProviderMixin(\n ComboBoxMixin(PolymerElement)))) {\n static get template() {\n return html`\n \n\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-combo-box-light';\n }\n\n static get properties() {\n return {\n /**\n * Name of the two-way data-bindable property representing the\n * value of the custom input field.\n */\n attrForValue: {\n type: String,\n value: 'value'\n },\n\n inputElement: {\n type: Element,\n readOnly: true\n }\n };\n }\n\n constructor() {\n super();\n this._boundInputValueChanged = this._inputValueChanged.bind(this);\n }\n\n ready() {\n super.ready();\n this._toggleElement = this.querySelector('.toggle-button');\n this._clearElement = this.querySelector('.clear-button');\n }\n\n get focused() {\n return this.getRootNode().activeElement === this.inputElement;\n }\n\n connectedCallback() {\n super.connectedCallback();\n const cssSelector = 'vaadin-text-field,iron-input,paper-input,.paper-input-input,.input';\n this._setInputElement(this.querySelector(cssSelector));\n this._revertInputValue();\n this.inputElement.addEventListener('input', this._boundInputValueChanged);\n this._preventInputBlur();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.inputElement.removeEventListener('input', this._boundInputValueChanged);\n this._restoreInputBlur();\n }\n\n get _propertyForValue() {\n return dashToCamelCase(this.attrForValue);\n }\n\n get _inputElementValue() {\n return this.inputElement && this.inputElement[this._propertyForValue];\n }\n\n set _inputElementValue(value) {\n if (this.inputElement) {\n this.inputElement[this._propertyForValue] = value;\n }\n }\n}\n\ncustomElements.define(ComboBoxLightElement.is, ComboBoxLightElement);\n\nexport { ComboBoxLightElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ControlStateMixin } from '@vaadin/vaadin-control-state-mixin/vaadin-control-state-mixin.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a Web Component for radio buttons.\n *\n * ```html\n * Foo\n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ------------------|----------------\n * `radio` | The radio button element\n * `label` | The label content element\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -----------|-------------|------------\n * `disabled` | Set when the radio button is disabled. | :host\n * `focus-ring` | Set when the radio button is focused using the keyboard. | :host\n * `focused` | Set when the radio button is focused. | :host\n * `checked` | Set when the radio button is checked. | :host\n * `empty` | Set when there is no label provided. | label\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ControlStateMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Polymer.GestureEventListeners\n * @element vaadin-radio-button\n * @demo demo/index.html\n */\nclass RadioButtonElement extends\n ElementMixin(\n ControlStateMixin(\n ThemableMixin(\n GestureEventListeners(PolymerElement)))) {\n static get template() {\n return html`\n \n\n \n`;\n }\n\n static get is() {\n return 'vaadin-radio-button';\n }\n\n static get version() {\n return '1.2.6';\n }\n\n static get properties() {\n return {\n /**\n * True if the radio button is checked.\n */\n checked: {\n type: Boolean,\n value: false,\n notify: true,\n observer: '_checkedChanged',\n reflectToAttribute: true\n },\n\n /**\n * Name of the element.\n */\n name: String,\n\n /**\n * The value for this element.\n */\n value: {\n type: String,\n value: 'on'\n }\n };\n }\n\n get name() {\n return this.checked ? this._storedName : '';\n }\n\n set name(name) {\n this._storedName = name;\n }\n\n /**\n * @protected\n */\n attributeChangedCallback(prop, oldVal, newVal) {\n super.attributeChangedCallback(prop, oldVal, newVal);\n // Needed until Edge has CSS Custom Properties (present in Edge Preview)\n /* istanbul ignore if */\n if (/^(disabled|checked)$/.test(prop)) {\n // iOS 10.3 Safari has an issue with repainting shadow root element styles when a host attribute changes.\n // Need this workaround (toggle any inline css property on and off) until we drop iOS 10.\n const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n /* istanbul ignore if */\n if (isIOS && this.shadowRoot && parseInt(navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/)[1], 10)) {\n const WEBKIT_PROPERTY = '-webkit-backface-visibility';\n this.shadowRoot.querySelectorAll('*').forEach(el => {\n el.style[WEBKIT_PROPERTY] = 'visible';\n el.style[WEBKIT_PROPERTY] = '';\n });\n }\n }\n }\n\n\n ready() {\n super.ready();\n\n this.setAttribute('role', 'radio');\n\n this._addListeners();\n\n const attrName = this.getAttribute('name');\n if (attrName) {\n this.name = attrName;\n }\n\n this.shadowRoot.querySelector('[part~=\"label\"]').querySelector('slot')\n .addEventListener('slotchange', this._updateLabelAttribute.bind(this));\n\n this._updateLabelAttribute();\n }\n\n _updateLabelAttribute() {\n const label = this.shadowRoot.querySelector('[part~=\"label\"]');\n const assignedNodes = label.firstElementChild.assignedNodes();\n if (this._isAssignedNodesEmpty(assignedNodes)) {\n label.setAttribute('empty', '');\n } else {\n label.removeAttribute('empty');\n }\n }\n\n _isAssignedNodesEmpty(nodes) {\n // The assigned nodes considered to be empty if there is no slotted content or only one empty text node\n return nodes.length === 0 ||\n (nodes.length == 1\n && nodes[0].nodeType == Node.TEXT_NODE\n && nodes[0].textContent.trim() === '');\n }\n\n _checkedChanged(checked) {\n this.setAttribute('aria-checked', checked);\n }\n\n _addListeners() {\n this._addEventListenerToNode(this, 'down', (e) => {\n if (!this.disabled) {\n this.setAttribute('active', '');\n }\n });\n\n this._addEventListenerToNode(this, 'up', (e) => {\n this.removeAttribute('active');\n\n if (!this.checked && !this.disabled) {\n // If you change this block, please test manually that radio-button and\n // radio-group still works ok on iOS 12/13 and up as it may cause\n // an issue that is not possible to test programmatically.\n // See: https://github.com/vaadin/vaadin-radio-button/issues/140\n this.click();\n }\n });\n\n this.addEventListener('keydown', e => {\n if (!this.disabled && e.keyCode === 32) {\n e.preventDefault();\n this.setAttribute('active', '');\n }\n });\n\n this.addEventListener('keyup', e => {\n if (!this.disabled && e.keyCode === 32) {\n e.preventDefault();\n this.click();\n this.removeAttribute('active');\n }\n });\n }\n\n /**\n * Toggles the radio button, so that the native `change` event\n * is dispatched. Overrides the standard `HTMLElement.prototype.click`.\n * @protected\n */\n click() {\n // If you change this block, please test manually that radio-button and\n // radio-group still works ok on iOS 12/13 and up as it may cause\n // an issue that is not possible to test programmatically.\n // See: https://github.com/vaadin/vaadin-radio-button/issues/140\n if (!this.disabled) {\n this.shadowRoot.querySelector('input').dispatchEvent(new MouseEvent('click'));\n }\n }\n\n /** @protected */\n get focusElement() {\n return this.shadowRoot.querySelector('input');\n }\n\n _onChange(e) {\n this.checked = e.target.checked;\n // In the Shadow DOM, the `change` event is not leaked into the\n // ancestor tree, so we must do this manually.\n const changeEvent = new CustomEvent('change', {\n detail: {\n sourceEvent: e\n },\n bubbles: e.bubbles,\n cancelable: e.cancelable,\n });\n this.dispatchEvent(changeEvent);\n }\n\n /**\n * Fired when the user toggles the radio button.\n *\n * @event change\n */\n}\n\ncustomElements.define(RadioButtonElement.is, RadioButtonElement);\n\n\nexport { RadioButtonElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport '@vaadin/vaadin-button/theme/material/vaadin-button.js';\nimport '@vaadin/vaadin-progress-bar/theme/material/vaadin-progress-bar.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","import '@polymer/polymer/lib/elements/custom-style.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n\n/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\n/*\n FIXME(polymer-modulizer): the above comments were extracted\n from HTML and may be out of place here. Review them and\n then delete this comment!\n*/\n;\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport '@vaadin/vaadin-progress-bar/src/vaadin-progress-bar.js';\nimport './vaadin-upload-icons.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\n * `` element represents a file in the file list of ``.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---|---\n * `row` | File container\n * `info` | Container for file status icon, file name, status and error messages\n * `done-icon` | File done status icon\n * `warning-icon` | File warning status icon\n * `meta` | Container for file name, status and error messages\n * `name` | File name\n * `error` | Error message, shown when error happens\n * `status` | Status message\n * `commands` | Container for file command icons\n * `start-button` | Start file upload button\n * `retry-button` | Retry file upload button\n * `clear-button` | Clear file button\n * `progress`| Progress bar\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * ---|---|---\n * `error` | An error has happened during uploading | `:host`\n * `indeterminate` | Uploading is in progress, but the progress value is unknown | `:host`\n * `uploading` | Uploading is in progress | `:host`\n * `complete` | Uploading has finished successfully | `:host`\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @demo demo/index.html\n */\nclass UploadFileElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n\n \n
\n
\n
\n\n
\n
[[file.name]]
\n
[[file.status]]
\n
[[file.error]]
\n
\n
\n
\n
\n\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-upload-file';\n }\n\n static get properties() {\n return {\n file: Object\n };\n }\n\n static get observers() {\n return [\n '_fileAborted(file.abort)',\n '_toggleHostAttribute(file.error, \"error\")',\n '_toggleHostAttribute(file.indeterminate, \"indeterminate\")',\n '_toggleHostAttribute(file.uploading, \"uploading\")',\n '_toggleHostAttribute(file.complete, \"complete\")',\n ];\n }\n\n _fileAborted(abort) {\n if (abort) {\n this._remove();\n }\n }\n\n _remove() {\n this.dispatchEvent(\n new CustomEvent('file-remove', {\n detail: {file: this.file},\n bubbles: true,\n composed: true\n })\n );\n }\n\n _formatProgressValue(progress) {\n return progress / 100;\n }\n\n _fireFileEvent(e) {\n e.preventDefault();\n return this.dispatchEvent(\n new CustomEvent(e.target.getAttribute('file-event'), {\n detail: {file: this.file},\n bubbles: true,\n composed: true\n })\n );\n }\n\n _toggleHostAttribute(value, attributeName) {\n const shouldHave = Boolean(value);\n const has = this.hasAttribute(attributeName);\n if (has !== shouldHave) {\n if (shouldHave) {\n this.setAttribute(attributeName, '');\n } else {\n this.removeAttribute(attributeName);\n }\n }\n }\n\n /**\n * Fired when the retry button is pressed. It is listened by `vaadin-upload`\n * which will start a new upload process of this file.\n *\n * @event file-retry\n * @param {Object} detail\n * @param {Object} detail.file file to retry upload of\n */\n\n /**\n * Fired when the start button is pressed. It is listened by `vaadin-upload`\n * which will start a new upload process of this file.\n *\n * @event file-start\n * @param {Object} detail\n * @param {Object} detail.file file to start upload of\n */\n\n /**\n * Fired when abort button is pressed. It is listened by `vaadin-upload` which\n * will abort the upload in progress, but will not remove the file from the list\n * to allow the animation to hide the element to be run.\n *\n * @event file-abort\n * @param {Object} detail\n * @param {Object} detail.file file to abort upload of\n */\n\n /**\n * Fired after the animation to hide the element has finished. It is listened\n * by `vaadin-upload` which will actually remove the file from the upload\n * file list.\n *\n * @event file-remove\n * @param {Object} detail\n * @param {Object} detail.file file to remove from the upload of\n */\n}\n\ncustomElements.define(UploadFileElement.is, UploadFileElement);\n\nexport { UploadFileElement };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { resetMouseCanceller } from '@polymer/polymer/lib/utils/gestures.js';\nimport '@polymer/polymer/lib/elements/dom-repeat.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport '@vaadin/vaadin-button/src/vaadin-button.js';\nimport './vaadin-upload-icons.js';\nimport './vaadin-upload-file.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\n * `` is a Web Component for uploading multiple files with drag and drop support.\n *\n * Example:\n *\n * ```\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---|---\n * `primary-buttons` | Upload container\n * `upload-button` | Upload button\n * `drop-label` | Label for drop indicator\n * `drop-label-icon` | Icon for drop indicator\n * `file-list` | File list container\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * ---|---|---\n * `nodrop` | Set when drag and drop is disabled (e. g., on touch devices) | `:host`\n * `dragover` | A file is being dragged over the element | `:host`\n * `dragover-valid` | A dragged file is valid with `maxFiles` and `accept` criteria | `:host`\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @demo demo/index.html\n */\nclass UploadElement extends ElementMixin(ThemableMixin(PolymerElement)) {\n static get template() {\n return html`\n \n\n \n
\n \n \n [[_i18nPlural(maxFiles, i18n.addFiles, i18n.addFiles.*)]]\n \n \n
\n
\n
\n \n \n
\n [[_i18nPlural(maxFiles, i18n.dropFiles, i18n.dropFiles.*)]]\n \n
\n
\n \n \n \n \n \n
\n \n \n \n`;\n }\n\n static get is() {\n return 'vaadin-upload';\n }\n\n static get version() {\n return '4.2.2';\n }\n\n static get properties() {\n return {\n /**\n * Define whether the element supports dropping files on it for uploading.\n * By default it's enabled in desktop and disabled in touch devices\n * because mobile devices do not support drag events in general. Setting\n * it false means that drop is enabled even in touch-devices, and true\n * disables drop in all devices.\n *\n * @default true in touch-devices, false otherwise.\n */\n nodrop: {\n type: Boolean,\n reflectToAttribute: true,\n value: function() {\n try {\n return !!document.createEvent('TouchEvent');\n } catch (e) {\n return false;\n }\n }\n },\n\n /**\n * The server URL. The default value is an empty string, which means that\n * _window.location_ will be used.\n */\n target: {\n type: String,\n value: ''\n },\n\n /**\n * HTTP Method used to send the files. Only POST and PUT are allowed.\n */\n method: {\n type: String,\n value: 'POST'\n },\n\n /**\n * Key-Value map to send to the server. If you set this property as an\n * attribute, use a valid JSON string, for example:\n * ```\n * \n * ```\n */\n headers: {\n type: Object,\n value: {}\n },\n\n /**\n * Max time in milliseconds for the entire upload process, if exceeded the\n * request will be aborted. Zero means that there is no timeout.\n *\n */\n timeout: {\n type: Number,\n value: 0\n },\n\n _dragover: {\n type: Boolean,\n value: false,\n observer: '_dragoverChanged'\n },\n\n /**\n * The array of files being processed, or already uploaded.\n *\n * Each element is a [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File)\n * object with a number of extra properties to track the upload process:\n * - `uploadTarget`: The target URL used to upload this file.\n * - `elapsed`: Elapsed time since the upload started.\n * - `elapsedStr`: Human-readable elapsed time.\n * - `remaining`: Number of seconds remaining for the upload to finish.\n * - `remainingStr`: Human-readable remaining time for the upload to finish.\n * - `progress`: Percentage of the file already uploaded.\n * - `speed`: Upload speed in kB/s.\n * - `size`: File size in bytes.\n * - `totalStr`: Human-readable total size of the file.\n * - `loaded`: Bytes transferred so far.\n * - `loadedStr`: Human-readable uploaded size at the moment.\n * - `status`: Status of the upload process.\n * - `error`: Error message in case the upload failed.\n * - `abort`: True if the file was canceled by the user.\n * - `complete`: True when the file was transferred to the server.\n * - `uploading`: True while transferring data to the server.\n */\n files: {\n type: Array,\n notify: true,\n value: function() {\n return [];\n }\n },\n\n /**\n * Limit of files to upload, by default it is unlimited. If the value is\n * set to one, native file browser will prevent selecting multiple files.\n */\n maxFiles: {\n type: Number,\n value: Infinity\n },\n\n /**\n * Specifies if the maximum number of files have been uploaded\n */\n maxFilesReached: {\n type: Boolean,\n value: false,\n notify: true,\n readOnly: true,\n computed: '_maxFilesAdded(maxFiles, files.length)'\n },\n\n /**\n * Specifies the types of files that the server accepts.\n * Syntax: a comma-separated list of MIME type patterns (wildcards are\n * allowed) or file extensions.\n * Notice that MIME types are widely supported, while file extensions\n * are only implemented in certain browsers, so avoid using it.\n * Example: accept=\"video/*,image/tiff\" or accept=\".pdf,audio/mp3\"\n */\n accept: {\n type: String,\n value: ''\n },\n\n /**\n * Specifies the maximum file size in bytes allowed to upload.\n * Notice that it is a client-side constraint, which will be checked before\n * sending the request. Obviously you need to do the same validation in\n * the server-side and be sure that they are aligned.\n */\n maxFileSize: {\n type: Number,\n value: Infinity\n },\n\n /**\n * Specifies if the dragover is validated with maxFiles and\n * accept properties.\n */\n _dragoverValid: {\n type: Boolean,\n value: false,\n observer: '_dragoverValidChanged'\n },\n\n /**\n * Specifies the 'name' property at Content-Disposition\n */\n formDataName: {\n type: String,\n value: 'file'\n },\n\n /**\n * Prevents upload(s) from immediately uploading upon adding file(s).\n * When set, you must manually trigger uploads using the `uploadFiles` method\n */\n noAuto: {\n type: Boolean,\n value: false\n },\n\n /**\n * Set the withCredentials flag on the request.\n */\n withCredentials: {\n type: Boolean,\n value: false\n },\n\n /**\n * Pass-through to input's capture attribute. Allows user to trigger device inputs\n * such as camera or microphone immediately.\n */\n capture: String,\n\n /**\n * The object used to localize this component.\n * For changing the default localization, change the entire\n * _i18n_ object or just the property you want to modify.\n *\n * The object has the following JSON structure and default values:\n\n {\n dropFiles: {\n one: 'Drop file here\n many: 'Drop files here\n },\n addFiles: {\n one: 'Select File...',\n many: 'Upload Files...'\n },\n cancel: 'Cancel',\n error: {\n tooManyFiles: 'Too Many Files.',\n fileIsTooBig: 'File is Too Big.',\n incorrectFileType: 'Incorrect File Type.'\n },\n uploading: {\n status: {\n connecting: 'Connecting...',\n stalled: 'Stalled.',\n processing: 'Processing File...',\n held: 'Queued'\n },\n remainingTime: {\n prefix: 'remaining time: ',\n unknown: 'unknown remaining time'\n },\n error: {\n serverUnavailable: 'Server Unavailable',\n unexpectedServerError: 'Unexpected Server Error',\n forbidden: 'Forbidden'\n }\n },\n units: {\n size: ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n },\n formatSize: function(bytes) {\n // returns the size followed by the best suitable unit\n },\n formatTime: function(seconds, [secs, mins, hours]) {\n // returns a 'HH:MM:SS' string\n }\n }\n\n *\n * @default {English}\n */\n i18n: {\n type: Object,\n value: function() {\n return {\n dropFiles: {\n one: 'Drop file here',\n many: 'Drop files here'\n },\n addFiles: {\n one: 'Upload File...',\n many: 'Upload Files...'\n },\n cancel: 'Cancel',\n error: {\n tooManyFiles: 'Too Many Files.',\n fileIsTooBig: 'File is Too Big.',\n incorrectFileType: 'Incorrect File Type.'\n },\n uploading: {\n status: {\n connecting: 'Connecting...',\n stalled: 'Stalled.',\n processing: 'Processing File...',\n held: 'Queued'\n },\n remainingTime: {\n prefix: 'remaining time: ',\n unknown: 'unknown remaining time'\n },\n error: {\n serverUnavailable: 'Server Unavailable',\n unexpectedServerError: 'Unexpected Server Error',\n forbidden: 'Forbidden'\n }\n },\n units: {\n size: ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n }\n };\n }\n }\n };\n }\n\n ready() {\n super.ready();\n this.addEventListener('dragover', this._onDragover.bind(this));\n this.addEventListener('dragleave', this._onDragleave.bind(this));\n this.addEventListener('drop', this._onDrop.bind(this));\n this.addEventListener('file-retry', this._onFileRetry.bind(this));\n this.addEventListener('file-abort', this._onFileAbort.bind(this));\n this.addEventListener('file-remove', this._onFileRemove.bind(this));\n this.addEventListener('file-start', this._onFileStart.bind(this));\n }\n\n _formatSize(bytes) {\n if (typeof this.i18n.formatSize === 'function') {\n return this.i18n.formatSize(bytes);\n }\n\n // https://wiki.ubuntu.com/UnitsPolicy\n const base = this.i18n.units.sizeBase || 1000;\n const unit = ~~(Math.log(bytes) / Math.log(base));\n const dec = Math.max(0, Math.min(3, unit - 1));\n const size = parseFloat((bytes / Math.pow(base, unit)).toFixed(dec));\n return size + ' ' + this.i18n.units.size[unit];\n }\n\n _splitTimeByUnits(time) {\n const unitSizes = [60, 60, 24, Infinity];\n const timeValues = [0];\n\n for (var i = 0; i < unitSizes.length && time > 0; i++) {\n timeValues[i] = time % unitSizes[i];\n time = Math.floor(time / unitSizes[i]);\n }\n\n return timeValues;\n }\n\n _formatTime(seconds, split) {\n if (typeof this.i18n.formatTime === 'function') {\n return this.i18n.formatTime(seconds, split);\n }\n\n // Fill HH:MM:SS with leading zeros\n while (split.length < 3) {\n split.push(0);\n }\n\n return split\n .reverse()\n .map((number) => {\n return (number < 10 ? '0' : '') + number;\n })\n .join(':');\n }\n\n _formatFileProgress(file) {\n return file.totalStr + ': ' +\n file.progress + '% (' +\n (file.loaded > 0 ?\n this.i18n.uploading.remainingTime.prefix + file.remainingStr :\n this.i18n.uploading.remainingTime.unknown) +\n ')';\n }\n\n _maxFilesAdded(maxFiles, numFiles) {\n return maxFiles >= 0 && numFiles >= maxFiles;\n }\n\n _onDragover(event) {\n event.preventDefault();\n if (!this.nodrop && !this._dragover) {\n this._dragoverValid = !this.maxFilesReached;\n this._dragover = true;\n }\n event.dataTransfer.dropEffect = !this._dragoverValid || this.nodrop ? 'none' : 'copy';\n }\n\n _onDragleave(event) {\n event.preventDefault();\n if (this._dragover && !this.nodrop) {\n this._dragover = this._dragoverValid = false;\n }\n }\n\n _onDrop(event) {\n if (!this.nodrop) {\n event.preventDefault();\n this._dragover = this._dragoverValid = false;\n this._addFiles(event.dataTransfer.files);\n }\n }\n\n // Override for tests\n _createXhr() {\n return new XMLHttpRequest();\n }\n\n _configureXhr(xhr) {\n if (typeof this.headers == 'string') {\n try {\n this.headers = JSON.parse(this.headers);\n } catch (e) {\n this.headers = undefined;\n }\n }\n for (var key in this.headers) {\n xhr.setRequestHeader(key, this.headers[key]);\n }\n if (this.timeout) {\n xhr.timeout = this.timeout;\n }\n xhr.withCredentials = this.withCredentials;\n }\n\n _setStatus(file, total, loaded, elapsed) {\n file.elapsed = elapsed;\n file.elapsedStr = this._formatTime(file.elapsed, this._splitTimeByUnits(file.elapsed));\n file.remaining = Math.ceil(elapsed * (total / loaded - 1));\n file.remainingStr = this._formatTime(file.remaining, this._splitTimeByUnits(file.remaining));\n file.speed = ~~(total / elapsed / 1024);\n file.totalStr = this._formatSize(total);\n file.loadedStr = this._formatSize(loaded);\n file.status = this._formatFileProgress(file);\n }\n\n /**\n * Triggers the upload of any files that are not completed\n *\n * @param {Array} [files] - Files being uploaded. Defaults to all outstanding files\n */\n uploadFiles(files) {\n if (files && !Array.isArray(files)) {\n files = [files];\n }\n files = files || this.files;\n files = files.filter(file => (!file.complete));\n Array.prototype.forEach.call(files, this._uploadFile.bind(this));\n }\n\n _uploadFile(file) {\n if (file.uploading) {\n return;\n }\n\n const ini = Date.now();\n const xhr = file.xhr = this._createXhr(file);\n\n let stalledId, last;\n // onprogress is called always after onreadystatechange\n xhr.upload.onprogress = (e) => {\n clearTimeout(stalledId);\n\n last = Date.now();\n const elapsed = (last - ini) / 1000;\n const loaded = e.loaded, total = e.total, progress = ~~(loaded / total * 100);\n file.loaded = loaded;\n file.progress = progress;\n file.indeterminate = loaded <= 0 || loaded >= total;\n\n if (file.error) {\n file.indeterminate = file.status = undefined;\n } else if (!file.abort) {\n if (progress < 100) {\n this._setStatus(file, total, loaded, elapsed);\n stalledId = setTimeout(() => {\n file.status = this.i18n.uploading.status.stalled;\n this._notifyFileChanges(file);\n }, 2000);\n } else {\n file.loadedStr = file.totalStr;\n file.status = this.i18n.uploading.status.processing;\n file.uploading = false;\n }\n }\n\n this._notifyFileChanges(file);\n this.dispatchEvent(new CustomEvent('upload-progress', {detail: {file, xhr}}));\n };\n\n // More reliable than xhr.onload\n xhr.onreadystatechange = () => {\n if (xhr.readyState == 4) {\n clearTimeout(stalledId);\n file.indeterminate = file.uploading = false;\n if (file.abort) {\n this._notifyFileChanges(file);\n return;\n }\n file.status = '';\n // Custom listener can modify the default behavior either\n // preventing default, changing the xhr, or setting the file error\n const evt = this.dispatchEvent(\n new CustomEvent('upload-response', {\n detail: {file, xhr},\n cancelable: true\n })\n );\n\n if (!evt) {\n return;\n }\n if (xhr.status === 0) {\n file.error = this.i18n.uploading.error.serverUnavailable;\n } else if (xhr.status >= 500) {\n file.error = this.i18n.uploading.error.unexpectedServerError;\n } else if (xhr.status >= 400) {\n file.error = this.i18n.uploading.error.forbidden;\n }\n\n file.complete = !file.error;\n this.dispatchEvent(\n new CustomEvent(`upload-${file.error ? 'error' : 'success'}`, {\n detail: {file, xhr}\n })\n );\n this._notifyFileChanges(file);\n }\n };\n\n const formData = new FormData();\n\n file.uploadTarget = file.uploadTarget || this.target || '';\n file.formDataName = this.formDataName;\n\n const evt = this.dispatchEvent(\n new CustomEvent('upload-before', {\n detail: {file, xhr},\n cancelable: true\n })\n );\n if (!evt) {\n return;\n }\n\n formData.append(file.formDataName, file, file.name);\n\n xhr.open(this.method, file.uploadTarget, true);\n this._configureXhr(xhr);\n\n file.status = this.i18n.uploading.status.connecting;\n file.uploading = file.indeterminate = true;\n file.complete = file.abort = file.error = file.held = false;\n\n xhr.upload.onloadstart = () => {\n this.dispatchEvent(\n new CustomEvent('upload-start', {\n detail: {file, xhr}\n })\n );\n this._notifyFileChanges(file);\n };\n\n\n // Custom listener could modify the xhr just before sending it\n // preventing default\n const uploadEvt = this.dispatchEvent(\n new CustomEvent('upload-request', {\n detail: {file, xhr, formData},\n cancelable: true\n })\n );\n if (uploadEvt) {\n xhr.send(formData);\n }\n }\n\n _retryFileUpload(file) {\n const evt = this.dispatchEvent(\n new CustomEvent('upload-retry', {\n detail: {file, xhr: file.xhr},\n cancelable: true\n })\n );\n if (evt) {\n this._uploadFile(file);\n }\n }\n\n _abortFileUpload(file) {\n const evt = this.dispatchEvent(\n new CustomEvent('upload-abort', {\n detail: {file, xhr: file.xhr},\n cancelable: true\n })\n );\n if (evt) {\n file.abort = true;\n if (file.xhr) {\n file.xhr.abort();\n }\n this._notifyFileChanges(file);\n }\n }\n\n _notifyFileChanges(file) {\n var p = 'files.' + this.files.indexOf(file) + '.';\n for (var i in file) {\n if (file.hasOwnProperty(i)) {\n this.notifyPath(p + i, file[i]);\n }\n }\n }\n\n _addFiles(files) {\n Array.prototype.forEach.call(files, this._addFile.bind(this));\n }\n\n /**\n * Add the file for uploading. Called internally for each file after picking files from dialog or dropping files.\n *\n * @param {File} file File being added\n */\n _addFile(file) {\n if (this.maxFilesReached) {\n this.dispatchEvent(\n new CustomEvent('file-reject', {\n detail: {file, error: this.i18n.error.tooManyFiles}\n })\n );\n return;\n }\n if (this.maxFileSize >= 0 && file.size > this.maxFileSize) {\n this.dispatchEvent(\n new CustomEvent('file-reject', {\n detail: {file, error: this.i18n.error.fileIsTooBig}\n })\n );\n return;\n }\n const fileExt = file.name.match(/\\.[^\\.]*$|$/)[0];\n const re = new RegExp('^(' + this.accept.replace(/[, ]+/g, '|').replace(/\\/\\*/g, '/.*') + ')$', 'i');\n if (this.accept && !(re.test(file.type) || re.test(fileExt))) {\n this.dispatchEvent(\n new CustomEvent('file-reject', {\n detail: {file, error: this.i18n.error.incorrectFileType}\n })\n );\n return;\n }\n file.loaded = 0;\n file.held = true;\n file.status = this.i18n.uploading.status.held;\n this.unshift('files', file);\n\n if (!this.noAuto) {\n this._uploadFile(file);\n }\n }\n\n /**\n * Remove file from upload list. Called internally if file upload was canceled.\n * @param {File} file File to remove\n */\n _removeFile(file) {\n if (this.files.indexOf(file) > -1) {\n this.splice('files', this.files.indexOf(file), 1);\n }\n }\n\n _onAddFilesTouchEnd(e) {\n // Cancel the event to avoid the following click event\n e.preventDefault();\n // FIXME(platosha): workaround for Polymer Gestures mouseCanceller\n // cancelling the following synthetic click. See also:\n // https://github.com/Polymer/polymer/issues/5289\n this.__resetMouseCanceller();\n this._onAddFilesClick();\n }\n\n __resetMouseCanceller() {\n resetMouseCanceller();\n }\n\n _onAddFilesClick() {\n if (this.maxFilesReached) {\n return;\n }\n\n this.$.fileInput.value = '';\n this.$.fileInput.click();\n }\n\n _onFileInputChange(event) {\n this._addFiles(event.target.files);\n }\n\n _onFileStart(event) {\n this._uploadFile(event.detail.file);\n }\n\n _onFileRetry(event) {\n this._retryFileUpload(event.detail.file);\n }\n\n _onFileAbort(event) {\n this._abortFileUpload(event.detail.file);\n }\n\n _onFileRemove(event) {\n this._removeFile(event.detail.file);\n }\n\n _dragoverChanged(dragover) {\n dragover ? this.setAttribute('dragover', dragover) : this.removeAttribute('dragover');\n }\n\n _dragoverValidChanged(dragoverValid) {\n dragoverValid ? this.setAttribute('dragover-valid', dragoverValid) : this.removeAttribute('dragover-valid');\n }\n\n _i18nPlural(value, plural) {\n return value == 1 ? plural.one : plural.many;\n }\n\n _isMultiple(maxFiles) {\n return maxFiles != 1;\n }\n\n /**\n * Fired when a file cannot be added to the queue due to a constrain:\n * file-size, file-type or maxFiles\n *\n * @event file-reject\n * @param {Object} detail\n * @param {Object} detail.file the file added\n * @param {Object} detail.error the cause\n */\n\n /**\n * Fired before the XHR is opened. Could be used for changing the request\n * URL. If the default is prevented, then XHR would not be opened.\n *\n * @event upload-before\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n * @param {Object} detail.file.uploadTarget the upload request URL, initialized with the value of vaadin-upload `target` property\n */\n\n /**\n * Fired when the XHR has been opened but not sent yet. Useful for appending\n * data keys to the FormData object, for changing some parameters like\n * headers, etc. If the event is defaultPrevented, `vaadin-upload` will not\n * send the request allowing the user to do something on his own.\n *\n * @event upload-request\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n * @param {Object} detail.formData the FormData object\n */\n\n /**\n * Fired when the XHR is sent.\n *\n * @event upload-start\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n */\n\n /**\n * Fired as many times as the progress is updated.\n *\n * @event upload-progress\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded with loaded info\n */\n\n /**\n * Fired when we have the actual server response, and before the component\n * analyses it. It's useful for developers to make the upload fail depending\n * on the server response. If the event is defaultPrevented the vaadin-upload\n * will return allowing the user to do something on his own like retry the\n * upload, etc. since he has full access to the `xhr` and `file` objects.\n * Otherwise, if the event is not prevented default `vaadin-upload` continues\n * with the normal workflow checking the `xhr.status` and `file.error`\n * which also might be modified by the user to force a customized response.\n *\n * @event upload-response\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n */\n\n /**\n * Fired in case the upload process succeed.\n *\n * @event upload-success\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded with loaded info\n */\n\n /**\n * Fired in case the upload process failed.\n *\n * @event upload-error\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n */\n\n /**\n * Fired when retry upload is requested. If the default is prevented, then\n * retry would not be performed.\n *\n * @event upload-retry\n * @param {Object} detail\n * @param {Object} detail.xhr the previous upload xhr\n * @param {Object} detail.file the file being uploaded\n */\n\n /**\n * Fired when retry abort is requested. If the default is prevented, then the\n * file upload would not be aborted.\n *\n * @event upload-abort\n * @param {Object} detail\n * @param {Object} detail.xhr the xhr\n * @param {Object} detail.file the file being uploaded\n */\n}\n\ncustomElements.define(UploadElement.is, UploadElement);\n\nexport { UploadElement };\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { TextFieldElement } from './vaadin-text-field.js';\n/**\n * `` is a Web Component for email field control in forms.\n *\n * ```html\n * \n * \n * ```\n *\n * ### Styling\n *\n * See vaadin-text-field.html for the styling documentation\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @extends Vaadin.TextFieldElement\n * @demo demo/index.html\n */\nclass EmailFieldElement extends TextFieldElement {\n static get is() {\n return 'vaadin-email-field';\n }\n\n static get version() {\n return '2.4.6';\n }\n\n ready() {\n super.ready();\n this.inputElement.type = 'email';\n this.inputElement.autocapitalize = 'off';\n this.pattern = '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$';\n }\n}\n\ncustomElements.define(EmailFieldElement.is, EmailFieldElement);\n\nexport { EmailFieldElement };\n","import '@vaadin/vaadin-text-field/theme/material/vaadin-text-field.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/mixins/field-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@vaadin/vaadin-text-field/src/vaadin-text-field.js';\nimport { ControlStateMixin } from '@vaadin/vaadin-control-state-mixin/vaadin-control-state-mixin.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport { ComboBoxMixin } from './vaadin-combo-box-mixin.js';\nimport './vaadin-combo-box-dropdown-wrapper.js';\nimport { ComboBoxDataProviderMixin } from './vaadin-combo-box-data-provider-mixin.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a combo box element combining a dropdown list with an\n * input field for filtering the list of items. If you want to replace the default\n * input field with a custom implementation, you should use the\n * [``](#/elements/vaadin-combo-box-light) element.\n *\n * Items in the dropdown list must be provided as a list of `String` values.\n * Defining the items is done using the `items` property, which can be assigned\n * with data-binding, using an attribute or directly with the JavaScript property.\n *\n * ```html\n * \n * \n * ```\n *\n * ```js\n * combobox.items = ['apple', 'orange', 'banana'];\n * ```\n *\n * When the selected `value` is changed, a `value-changed` event is triggered.\n *\n * This element can be used within an `iron-form`.\n *\n * ### Item rendering\n *\n * `` supports using custom renderer callback function for defining the\n * content of ``.\n *\n * The renderer function provides `root`, `comboBox`, `model` arguments when applicable.\n * Generate DOM content by using `model` object properties if needed, append it to the `root`\n * element and control the state of the host element by accessing `comboBox`. Before generating new\n * content, users are able to check if there is already content in `root` for reusing it.\n *\n * ```html\n * \n * ```\n * ```js\n * const comboBox = document.querySelector('#combo-box');\n * comboBox.items = [{'label': 'Hydrogen', 'value': 'H'}];\n * comboBox.renderer = function(root, comboBox, model) {\n * root.innerHTML = model.index + ': ' +\n * model.item.label + ' ' +\n * '' + model.item.value + '';\n * };\n * ```\n *\n * Renderer is called on the opening of the combo-box and each time the related model is updated.\n * DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * ### Item Template\n *\n * Alternatively, the content of the `` can be populated by using\n * custom item template provided in the light DOM:\n *\n * ```html\n * \n * \n * [[index]]: [[item.label]] [[item.value]\n * \n * \n * ```\n *\n * The following properties are available for item template bindings:\n *\n * Property name | Type | Description\n * --------------|------|------------\n * `index`| Number | Index of the item in the `items` array\n * `item` | String or Object | The item reference\n * `selected` | Boolean | True when item is selected\n * `focused` | Boolean | True when item is focused\n *\n * ### Lazy Loading with Function Data Provider\n *\n * In addition to assigning an array to the items property, you can alternatively\n * provide the `` data through the\n * [`dataProvider`](#/elements/vaadin-combo-box#property-dataProvider) function property.\n * The `` calls this function lazily, only when it needs more data\n * to be displayed.\n *\n * See the [`dataProvider`](#/elements/vaadin-combo-box#property-dataProvider) in\n * the API reference below for the detailed data provider arguments description,\n * and the “Lazy Loading“ example on “Basics” page in the demos.\n *\n * __Note that when using function data providers, the total number of items\n * needs to be set manually. The total number of items can be returned\n * in the second argument of the data provider callback:__\n *\n * ```javascript\n * comboBox.dataProvider = function(params, callback) {\n * var url = 'https://api.example/data' +\n * '?page=' + params.page + // the requested page index\n * '&per_page=' + params.pageSize; // number of items on the page\n * var xhr = new XMLHttpRequest();\n * xhr.onload = function() {\n * var response = JSON.parse(xhr.responseText);\n * callback(\n * response.employees, // requested page of items\n * response.totalSize // total number of items\n * );\n * };\n * xhr.open('GET', url, true);\n * xhr.send();\n * };\n * ```\n *\n * ### Styling\n *\n * The following custom properties are available for styling:\n *\n * Custom property | Description | Default\n * ----------------|-------------|-------------\n * `--vaadin-combo-box-overlay-max-height` | Property that determines the max height of overlay | `65vh`\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `text-field` | The text field\n * `clear-button` | The clear button\n * `toggle-button` | The toggle button\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [`` documentation](https://vaadin.com/components/vaadin-text-field/html-api/elements/Vaadin.TextFieldElement)\n * for the text field parts.\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -------------|-------------|------------\n * `opened` | Set when the combo box dropdown is open | :host\n * `disabled` | Set to a disabled combo box | :host\n * `readonly` | Set to a read only combo box | :host\n * `has-value` | Set when the element has a value | :host\n * `invalid` | Set when the element is invalid | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `loading` | Set when new items are expected | :host\n *\n * In addition to `` itself, the following internal\n * components are themable:\n *\n * - ``\n * - ``\n * - ``\n *\n * Note: the `theme` attribute value set on `` is\n * propagated to the internal themable components listed above.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ControlStateMixin\n * @mixes Vaadin.ComboBoxDataProviderMixin\n * @mixes Vaadin.ComboBoxMixin\n * @mixes Vaadin.ThemableMixin\n * @mixes Vaadin.ThemePropertyMixin\n * @demo demo/index.html\n */\nclass ComboBoxElement extends\n ElementMixin(\n ControlStateMixin(\n ThemePropertyMixin(\n ThemableMixin(\n ComboBoxDataProviderMixin(\n ComboBoxMixin(PolymerElement)))))) {\n static get template() {\n return html`\n \n\n \n \n\n \n \n\n \n\n \n \n`;\n }\n\n constructor() {\n super();\n /**\n * @property\n */\n this.theme;\n }\n\n static get is() {\n return 'vaadin-combo-box';\n }\n\n static get version() {\n return '4.2.6';\n }\n\n static get properties() {\n return {\n /**\n * The label for this element.\n */\n label: {\n type: String,\n reflectToAttribute: true\n },\n\n /**\n * Set to true to mark the input as required.\n */\n required: {\n type: Boolean,\n value: false\n },\n\n /**\n * Set to true to disable this input.\n */\n disabled: {\n type: Boolean,\n value: false\n },\n\n /**\n * Set to true to prevent the user from entering invalid input.\n */\n preventInvalidInput: {\n type: Boolean\n },\n\n /**\n * A pattern to validate the `input` with.\n */\n pattern: {\n type: String\n },\n\n /**\n * The error message to display when the input is invalid.\n */\n errorMessage: {\n type: String\n },\n\n autofocus: {\n type: Boolean\n },\n\n /**\n * A placeholder string in addition to the label.\n */\n placeholder: {\n type: String,\n value: ''\n },\n\n readonly: {\n type: Boolean,\n value: false\n }\n };\n }\n\n static get observers() {\n return ['_updateAriaExpanded(opened)'];\n }\n\n attributeChanged(name, type) {\n // Safari has an issue with repainting shadow root element styles when a host attribute changes.\n // Need this workaround (toggle any inline css property on and off) until the issue gets fixed.\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (isSafari && this.root) {\n Array.prototype.forEach.call(this.root.querySelectorAll('*'), el => {\n el.style['-webkit-backface-visibility'] = 'visible';\n el.style['-webkit-backface-visibility'] = '';\n });\n }\n }\n\n ready() {\n super.ready();\n\n this._nativeInput = this.$.input.focusElement;\n this._toggleElement = this.$.toggleButton;\n this._clearElement = this.$.clearButton;\n\n this._nativeInput.setAttribute('role', 'combobox');\n this._nativeInput.setAttribute('aria-autocomplete', 'list');\n this._updateAriaExpanded();\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._preventInputBlur();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._restoreInputBlur();\n }\n\n _getPositionTarget() {\n return this.$.input;\n }\n\n _updateAriaExpanded() {\n if (this._nativeInput) {\n this._nativeInput.setAttribute('aria-expanded', this.opened);\n this._toggleElement.setAttribute('aria-expanded', this.opened);\n }\n }\n\n get inputElement() {\n return this.$.input;\n }\n\n /**\n * Focusable element used by vaadin-control-state-mixin\n */\n get focusElement() {\n // inputElement might not be defined on property changes before ready.\n return this.inputElement || this;\n }\n}\n\ncustomElements.define(ComboBoxElement.is, ComboBoxElement);\n\nexport { ComboBoxElement };\n","import '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/mixins/menu-overlay.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html``;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { register, prevent } from '@polymer/polymer/lib/utils/gestures.js';\n\nregister({\n name: 'vaadin-contextmenu',\n deps: ['touchstart', 'touchmove', 'touchend', 'contextmenu'],\n flow: {\n start: ['touchstart', 'contextmenu'],\n end: ['contextmenu']\n },\n\n emits: ['vaadin-contextmenu'],\n\n info: {\n sourceEvent: null,\n _ios: (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream)\n || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n },\n\n reset: function() {\n this.info.sourceEvent = null;\n this._cancelTimer();\n this.info.touchJob = null;\n this.info.touchStartCoords = null;\n },\n\n _cancelTimer: function() {\n if (this._timerId) {\n clearTimeout(this._timerId);\n delete this._fired;\n }\n },\n\n touchstart: function(e) {\n this.info.sourceEvent = e;\n this.info.touchStartCoords = {\n x: e.changedTouches[0].clientX,\n y: e.changedTouches[0].clientY\n };\n\n // After timeout event is already retargeted to the parent element in case there is one.\n // So we are assigning the target synchronously on event dispatched.\n const t = e.composedPath()[0] || e.target;\n\n this._timerId = setTimeout(() => {\n const ct = e.changedTouches[0];\n if (!e.shiftKey) {\n if (this.info._ios) {\n this._fired = true;\n this.fire(t, ct.clientX, ct.clientY);\n }\n\n // needed to prevent any 'tap' gesture events from firing\n // which could potentially cancel/close the overlay.\n prevent('tap');\n }\n }, 500); // default setting for Android and iOS.\n },\n\n touchmove: function(e) {\n const moveThreshold = 15;\n const touchStartCoords = this.info.touchStartCoords;\n if (Math.abs(touchStartCoords.x - e.changedTouches[0].clientX) > moveThreshold ||\n Math.abs(touchStartCoords.y - e.changedTouches[0].clientY) > moveThreshold) {\n this._cancelTimer();\n }\n },\n\n touchend: function(e) {\n if (this._fired) {\n e.preventDefault();\n }\n this._cancelTimer();\n },\n\n contextmenu: function(e) {\n if (!e.shiftKey) {\n this.info.sourceEvent = e;\n this.fire(e.target, e.clientX, e.clientY);\n prevent('tap');\n }\n },\n\n fire: function(target, x, y) {\n // NOTE(web-padawan): the code below is copied from `Polymer.Gestures._fire`,\n // which is not exported from `gestures.js` module for Polymer 3.\n const sourceEvent = this.info.sourceEvent;\n const ev = new Event('vaadin-contextmenu', {bubbles: true, cancelable: true, composed: true});\n ev.detail = {x, y, sourceEvent};\n target.dispatchEvent(ev);\n // forward `preventDefault` in a clean way\n if (ev.defaultPrevented && sourceEvent && sourceEvent.preventDefault) {\n sourceEvent.preventDefault();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/iron-media-query/iron-media-query.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * Element for internal use only.\n *\n * @memberof Vaadin\n * @private\n */\nclass DeviceDetectorElement extends (class extends PolymerElement {}) {\n static get template() {\n return html`\n \n`;\n }\n\n static get is() {\n return 'vaadin-device-detector';\n }\n\n static get properties() {\n return {\n /**\n * `true`, when running in a phone.\n */\n phone: {\n type: Boolean,\n computed: '_phone(wide, touch)',\n notify: true\n },\n\n /**\n * `true`, when running in a touch device.\n * @default false\n */\n touch: {\n type: Boolean,\n notify: true,\n value: () => this._touch()\n },\n\n /**\n * `true`, when running in a tablet/desktop device.\n */\n wide: {\n type: Boolean,\n notify: true\n }\n };\n }\n\n static _touch() {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (err) {\n return false;\n }\n }\n\n _phone(wide, touch) {\n return !wide && touch;\n }\n}\n\ncustomElements.define(DeviceDetectorElement.is, DeviceDetectorElement);\n","import { ItemElement } from '@vaadin/vaadin-item/src/vaadin-item.js';\nimport { ListBoxElement } from '@vaadin/vaadin-list-box/src/vaadin-list-box.js';\nimport { flush } from '@polymer/polymer/lib/utils/flush.js';\n/**\n * The vaadin-context-menu-item element.\n *\n * @memberof Vaadin\n */\nclass ContextMenuItemElement extends ItemElement {\n static get is() {\n return 'vaadin-context-menu-item';\n }\n}\n\n/**\n * The vaadin-context-menu-list-box element.\n *\n * @memberof Vaadin\n */\nclass ContextMenuListBoxElement extends ListBoxElement {\n static get is() {\n return 'vaadin-context-menu-list-box';\n }\n}\n\ncustomElements.define(ContextMenuItemElement.is, ContextMenuItemElement);\ncustomElements.define(ContextMenuListBoxElement.is, ContextMenuListBoxElement);\n\n/**\n * @polymerMixin\n */\nexport const ItemsMixin = superClass => class ItemsMixin extends superClass {\n\n static get properties() {\n return {\n /**\n * @typedef MenuItem\n * @type {object}\n * @property {string} text - Text to be set as the menu item component's textContent\n * @property {union: string | object} component - The component to represent the item.\n * Either a tagName or an element instance. Defaults to \"vaadin-context-menu-item\".\n * @property {boolean} disabled - If true, the item is disabled and cannot be selected\n * @property {boolean} checked - If true, the item shows a checkmark next to it\n * @property {MenuItem[]} children - Array of child menu items\n */\n\n /**\n * Defines a (hierarchical) menu structure for the component.\n * If a menu item has a non-empty `children` set, a sub-menu with the child items is opened\n * next to the parent menu on mouseover, tap or a right arrow keypress.\n *\n * The items API can't be used together with a renderer or a template!\n *\n * #### Example\n *\n * ```javascript\n * contextMenu.items = [\n * {text: 'Menu Item 1', children:\n * [\n * {text: 'Menu Item 1-1', checked: true},\n * {text: 'Menu Item 1-2'}\n * ]\n * },\n * {component: 'hr'},\n * {text: 'Menu Item 2', children:\n * [\n * {text: 'Menu Item 2-1'},\n * {text: 'Menu Item 2-2', disabled: true}\n * ]\n * },\n * {text: 'Menu Item 3', disabled: true}\n * ];\n * ```\n *\n * @type {MenuItem[]}\n *\n *\n * ### Styling\n *\n * The `` sub-menu elements have the following additional state attributes on top of\n * the built-in `` state attributes (see `` documentation for full listing).\n *\n * Part name | Attribute | Description\n * ----------------|----------------|----------------\n * `:host` | expanded | Expanded parent item\n */\n items: Array\n };\n }\n\n ready() {\n super.ready();\n\n // Overlay's outside click listener doesn't work with modeless\n // overlays (submenus) so we need additional logic for it\n this.__itemsOutsideClickListener = e => {\n if (!e.composedPath().filter(el => el.localName === 'vaadin-context-menu-overlay')[0]) {\n this.dispatchEvent(new CustomEvent('items-outside-click'));\n }\n };\n this.addEventListener('items-outside-click', e => this.items && this.close());\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Firefox leaks click to document on contextmenu even if prevented\n // https://bugzilla.mozilla.org/show_bug.cgi?id=990614\n document.documentElement.addEventListener('click', this.__itemsOutsideClickListener);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.documentElement.removeEventListener('click', this.__itemsOutsideClickListener);\n }\n\n __forwardFocus() {\n const overlay = this.$.overlay;\n const child = overlay.getFirstChild();\n // if parent item is not focused, do not focus submenu\n if (overlay.parentOverlay) {\n const parent = overlay.parentOverlay.querySelector('[expanded]');\n if (parent && parent.hasAttribute('focused') && child) {\n child.focus();\n } else {\n overlay.$.overlay.focus();\n }\n } else if (child) {\n child.focus();\n }\n }\n\n __openSubMenu(subMenu, itemElement) {\n subMenu.items = itemElement._item.children;\n subMenu.listenOn = itemElement;\n\n const itemRect = itemElement.getBoundingClientRect();\n\n const content = subMenu.$.overlay.$.content;\n const style = getComputedStyle(content);\n const parent = this.$.overlay;\n const y = parent.hasAttribute('bottom-aligned') ?\n itemRect.bottom + parseFloat(style.paddingBottom) :\n itemRect.top - parseFloat(style.paddingTop);\n\n // Store the reference to align based on parent overlay coordinates\n subMenu.$.overlay._setParentOverlay(parent);\n\n // Set theme attribute from parent element\n if (parent.theme) {\n subMenu.setAttribute('theme', parent.theme);\n } else {\n subMenu.removeAttribute('theme');\n }\n\n let x;\n content.style.minWidth = '';\n if (document.documentElement.clientWidth - itemRect.right > itemRect.width) {\n // There's room on the right side\n x = itemRect.right;\n } else {\n // Open on the left side\n x = itemRect.left - itemRect.width;\n // Make sure there's no gaps between the menus\n content.style.minWidth = parent.$.content.clientWidth + 'px';\n }\n x = Math.max(x, 0);\n\n itemElement.dispatchEvent(new CustomEvent('opensubmenu', {detail: {\n x, y, children: itemElement._item.children\n }}));\n }\n\n __itemsRenderer(root, menu, context) {\n this.__initMenu(root, menu);\n\n const subMenu = root.querySelector(this.constructor.is);\n subMenu.closeOn = menu.closeOn;\n\n const listBox = root.querySelector('vaadin-context-menu-list-box');\n\n listBox.innerHTML = '';\n\n const items = Array.from(context.detail.children || menu.items);\n\n items.forEach(item => {\n let component;\n if (item.component instanceof HTMLElement) {\n component = item.component;\n } else {\n component = document.createElement(item.component || 'vaadin-context-menu-item');\n }\n\n if (component instanceof ItemElement) {\n component.setAttribute('role', 'menuitem');\n component.classList.add('vaadin-menu-item');\n } else if (component.localName === 'hr') {\n component.setAttribute('role', 'separator');\n }\n this.theme && component.setAttribute('theme', this.theme);\n\n component._item = item;\n\n if (item.text) {\n component.textContent = item.text;\n }\n\n this.__toggleMenuComponentAttribute(component, 'menu-item-checked', item.checked);\n this.__toggleMenuComponentAttribute(component, 'disabled', item.disabled);\n\n component.setAttribute('aria-haspopup', 'false');\n component.classList.remove('vaadin-context-menu-parent-item');\n if (item.children && item.children.length) {\n component.classList.add('vaadin-context-menu-parent-item');\n component.setAttribute('aria-haspopup', 'true');\n component.setAttribute('aria-expanded', 'false');\n component.removeAttribute('expanded');\n }\n\n listBox.appendChild(component);\n });\n }\n\n __toggleMenuComponentAttribute(component, attribute, on) {\n if (on) {\n component.setAttribute(attribute, '');\n component['__has-' + attribute] = true;\n } else if (component['__has-' + attribute]) {\n component.removeAttribute(attribute);\n component['__has-' + attribute] = false;\n }\n }\n\n __initMenu(root, menu) {\n if (!root.firstElementChild) {\n const is = this.constructor.is;\n root.innerHTML = `\n \n <${is} hidden>${is}>\n `;\n flush();\n const listBox = root.querySelector('vaadin-context-menu-list-box');\n this.theme && listBox.setAttribute('theme', this.theme);\n listBox.classList.add('vaadin-menu-list-box');\n requestAnimationFrame(() => listBox.setAttribute('role', 'menu'));\n\n const subMenu = root.querySelector(is);\n subMenu.$.overlay.modeless = true;\n subMenu.openOn = 'opensubmenu';\n\n menu.addEventListener('opened-changed', e => !e.detail.value && subMenu.close());\n subMenu.addEventListener('opened-changed', e => {\n if (!e.detail.value) {\n const expandedItem = listBox.querySelector('[expanded]');\n if (expandedItem) {\n expandedItem.setAttribute('aria-expanded', 'false');\n expandedItem.removeAttribute('expanded');\n }\n }\n });\n\n listBox.addEventListener('selected-changed', e => {\n if (typeof e.detail.value === 'number') {\n const item = e.target.items[e.detail.value]._item;\n if (!item.children) {\n const detail = {value: item};\n menu.dispatchEvent(new CustomEvent('item-selected', {detail}));\n }\n listBox.selected = null;\n }\n });\n\n subMenu.addEventListener('item-selected', e => {\n menu.dispatchEvent(new CustomEvent('item-selected', {detail: e.detail}));\n });\n\n subMenu.addEventListener('close-all-menus', () => {\n menu.dispatchEvent(new CustomEvent('close-all-menus'));\n });\n menu.addEventListener('close-all-menus', menu.close);\n menu.addEventListener('item-selected', menu.close);\n menu.$.overlay.$.backdrop.addEventListener('click', () => menu.close());\n\n menu.$.overlay.addEventListener('keydown', e => {\n if (e.keyCode === 37) {\n menu.close();\n menu.listenOn.focus();\n } else if (e.keyCode === 27) {\n menu.dispatchEvent(new CustomEvent('close-all-menus'));\n }\n });\n\n requestAnimationFrame(() => this.__openListenerActive = true);\n const openSubMenu = (e, itemElement = e.composedPath().filter(e => e.localName === 'vaadin-context-menu-item')[0]) => {\n // Delay enabling the mouseover listener to avoid it from triggering on parent menu open\n if (!this.__openListenerActive) {\n return;\n }\n\n // Don't open sub-menus while the menu is still opening\n if (menu.$.overlay.hasAttribute('opening')) {\n requestAnimationFrame(() => openSubMenu(e, itemElement));\n return;\n }\n\n if (itemElement) {\n if (subMenu.items !== itemElement._item.children) {\n subMenu.close();\n }\n if (!menu.opened) {\n return;\n }\n if (itemElement._item.children && itemElement._item.children.length) {\n itemElement.setAttribute('aria-expanded', 'true');\n itemElement.setAttribute('expanded', '');\n this.__openSubMenu(subMenu, itemElement);\n } else {\n subMenu.listenOn.focus();\n }\n }\n };\n\n menu.$.overlay.addEventListener('mouseover', openSubMenu);\n menu.$.overlay.addEventListener('keydown', e =>\n (e.keyCode === 39 || e.keyCode === 13 || e.keyCode === 32) && openSubMenu(e));\n } else {\n const listBox = root.querySelector('vaadin-context-menu-list-box');\n if (this.theme) {\n listBox.setAttribute('theme', this.theme);\n } else {\n listBox.removeAttribute('theme');\n }\n }\n }\n\n};\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport '@polymer/polymer/lib/elements/dom-module.js';\n\nimport { OverlayElement } from '@vaadin/vaadin-overlay/src/vaadin-overlay.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = ``;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n * The overlay element.\n *\n * ### Styling\n *\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @private\n */\nclass ContextMenuOverlayElement extends OverlayElement {\n static get is() {\n return 'vaadin-context-menu-overlay';\n }\n\n static get properties() {\n return {\n instanceProps: {\n type: Object,\n value: () => {\n return {\n detail: true,\n target: true\n };\n }\n },\n\n /**\n * @protected\n */\n parentOverlay: {\n type: Object,\n readOnly: true\n }\n };\n }\n\n static get observers() {\n return ['_themeChanged(theme)'];\n }\n\n ready() {\n super.ready();\n\n this.addEventListener('keydown', e => {\n if (!e.defaultPrevented && e.composedPath()[0] === this.$.overlay && [38, 40].indexOf(e.keyCode) > -1) {\n const child = this.getFirstChild();\n if (child && Array.isArray(child.items) && child.items.length) {\n e.preventDefault();\n if (e.keyCode === 38) {\n child.items[child.items.length - 1].focus();\n } else {\n child.focus();\n }\n }\n }\n });\n }\n\n getFirstChild() {\n return this.content.querySelector(':not(style):not(slot)');\n }\n\n _themeChanged(theme) {\n this.close();\n }\n\n getBoundaries() {\n // Measure actual overlay and content sizes\n const overlayRect = this.getBoundingClientRect();\n const contentRect = this.$.overlay.getBoundingClientRect();\n\n // Maximum x and y values are imposed by content size and overlay limits.\n let yMax = overlayRect.bottom - contentRect.height;\n\n // Adjust constraints to ensure bottom-aligned applies to sub-menu.\n const parent = this.parentOverlay;\n if (parent && parent.hasAttribute('bottom-aligned')) {\n const parentStyle = getComputedStyle(parent);\n yMax = yMax - parseFloat(parentStyle.bottom) - parseFloat(parentStyle.height);\n }\n\n return {\n xMax: overlayRect.right - contentRect.width,\n yMax,\n left: overlayRect.left,\n top: overlayRect.top,\n width: contentRect.width\n };\n }\n}\n\ncustomElements.define(ContextMenuOverlayElement.is, ContextMenuOverlayElement);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport './vaadin-contextmenu-event.js';\nimport './vaadin-device-detector.js';\nimport { ItemsMixin } from './vaadin-contextmenu-items-mixin.js';\nimport { ElementMixin } from '@vaadin/vaadin-element-mixin/vaadin-element-mixin.js';\nimport { ThemePropertyMixin } from '@vaadin/vaadin-themable-mixin/vaadin-theme-property-mixin.js';\nimport './vaadin-context-menu-overlay.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { gestures, addListener, removeListener } from '@polymer/polymer/lib/utils/gestures.js';\n/**\n *\n * `` is a Web Component for creating context menus. The content of the\n * menu can be populated in three ways: imperatively by using the items API or a renderer callback function and\n * declaratively by using Polymer's Templates.\n *\n * ### Items\n *\n * Items is a higher level convenience API for defining a (hierarchical) menu structure for the component.\n * If a menu item has a non-empty `children` set, a sub-menu with the child items is opened\n * next to the parent menu on mouseover, tap or a right arrow keypress.\n *\n * When an item is selected, `` dispatches an \"item-selected\" event\n * with the selected item as `event.detail.value` property.\n *\n * ```javascript\n * contextMenu.items = [\n * {text: 'Menu Item 1', children:\n * [\n * {text: 'Menu Item 1-1', checked: true},\n * {text: 'Menu Item 1-2'}\n * ]\n * },\n * {component: 'hr'},\n * {text: 'Menu Item 2', children:\n * [\n * {text: 'Menu Item 2-1'},\n * {text: 'Menu Item 2-2', disabled: true}\n * ]\n * },\n * {text: 'Menu Item 3', disabled: true}\n * ];\n *\n * contextMenu.addEventListener('item-selected', e => {\n * const item = e.detail.value;\n * console.log(`${item.text} selected`);\n * });\n * ```\n *\n * **NOTE:** when the `items` array is defined, the renderer or a template cannot be used.\n *\n * ### Rendering\n *\n * The renderer function provides `root`, `contextMenu`, `model` arguments when applicable.\n * Generate DOM content by using `model` object properties if needed, append it to the `root`\n * element and control the state of the host element by accessing `contextMenu`. Before generating\n * new content, the renderer function should check if there is already content in `root` for reusing it.\n *\n * ```html\n * \n * ```\n * ```js\n * const contextMenu = document.querySelector('#contextMenu');\n * contextMenu.renderer = (root, contextMenu, context) => {\n * let listBox = root.firstElementChild;\n * if (!listBox) {\n * listBox = document.createElement('vaadin-list-box');\n * root.appendChild(listBox);\n * }\n *\n * let item = listBox.querySelector('vaadin-item');\n * if (!item) {\n * item = document.createElement('vaadin-item');\n * listBox.appendChild(item);\n * }\n * item.textContent = 'Content of the selector: ' + context.target.textContent;\n * };\n * ```\n *\n * You can access the menu context inside the renderer using\n * `context.target` and `context.detail`.\n *\n * Renderer is called on the opening of the context-menu and each time the related context is updated.\n * DOM generated during the renderer call can be reused\n * in the next renderer call and will be provided with the `root` argument.\n * On first call it will be empty.\n *\n * **NOTE:** when the `renderer` function is defined, the template content\n * is not in use.\n *\n * ### Polymer Templates\n *\n * Alternatively to using the `renderer`, you can populate\n * the menu content using Polymer's Templates:\n *\n * ```html\n * \n * \n * \n * First menu item\n * Second menu item\n * \n * \n * \n * ```\n *\n * ### “vaadin-contextmenu” Gesture Event\n *\n * `vaadin-contextmenu` is a gesture event (a custom event),\n * which is dispatched after either `contextmenu` and long touch events.\n * This enables support for both mouse and touch environments in a uniform way.\n *\n * `` opens the menu overlay on the `vaadin-contextmenu`\n * event by default.\n *\n * ### Menu Listener\n *\n * By default, the `` element listens for the menu opening\n * event on itself. In order to have a context menu on your content, wrap\n * your content with the `` element, and add a template\n * element with a menu. Example:\n *\n * ```html\n * \n * \n * \n * First menu item\n * Second menu item\n * \n * \n *\n * This paragraph has the context menu provided in the above template.
\n * Another paragraph with the context menu.
\n * \n * ```\n *\n * In case if you do not want to wrap the page content, you can listen for\n * events on an element outside the `` by setting the\n * `listenOn` property:\n *\n * ```html\n * \n * \n * \n * ...\n * \n * \n * \n *\n * \n * ```\n * ```javascript\n * const contextMenu = document.querySelector('vaadin-context-menu#customListener');\n * contextMenu.listenOn = document.querySelector('#menuListener');\n * ```\n *\n * ### Filtering Menu Targets\n *\n * By default, the listener element and all its descendants open the context\n * menu. You can filter the menu targets to a smaller set of elements inside\n * the listener element by setting the `selector` property.\n *\n * In the following example, only the elements matching `.has-menu` will open the context menu:\n *\n * ```html\n * \n * \n * \n * ...\n * \n * \n *\n * \n * This paragraph does not open the context menu
\n * \n * ```\n *\n * ### Menu Context\n *\n * You can bind to the following properties in the menu template:\n *\n * - `target` is the menu opening event target, which is the element that\n * the user has called the context menu for\n * - `detail` is the menu opening event detail\n *\n * In the following example, the menu item text is composed with the contents\n * of the element that opened the menu:\n *\n * ```html\n * \n * \n * \n * The menu target: [[target.textContent]]\n * \n * \n *\n * \n * - Foo
\n * - Bar
\n * - Baz
\n *
\n * \n * ```\n *\n * ### Styling\n *\n * `` uses `` internal\n * themable component as the actual visible context menu overlay. See\n * See [`` documentation](https://github.com/vaadin/vaadin-overlay/blob/master/src/vaadin-overlay.html)\n * for `` parts.\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * Note: the `theme` attribute value set on `` is\n * propagated to the internal `` component.\n * In case of using nested menu items, the `theme` attribute is also propagated\n * to internal `vaadin-context-menu-list-box` and `vaadin-context-menu-item`'s.\n *\n * @memberof Vaadin\n * @mixes Vaadin.ElementMixin\n * @mixes Vaadin.ThemePropertyMixin\n * @mixes Vaadin.ContextMenu.ItemsMixin\n * @mixes Polymer.GestureEventListeners\n * @demo demo/index.html\n */\nclass ContextMenuElement extends\n ElementMixin(\n ThemePropertyMixin(\n ItemsMixin(\n GestureEventListeners(PolymerElement)))) {\n static get template() {\n return html`\n \n\n \n\n \n\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-context-menu';\n }\n\n static get version() {\n return '4.3.14';\n }\n\n static get properties() {\n return {\n\n /**\n * CSS selector that can be used to target any child element\n * of the context menu to listen for `openOn` events.\n */\n selector: {\n type: String\n },\n\n /**\n * True if the overlay is currently displayed.\n */\n opened: {\n type: Boolean,\n value: false,\n notify: true,\n readOnly: true\n },\n\n /**\n * Event name to listen for opening the context menu.\n */\n openOn: {\n type: String,\n value: 'vaadin-contextmenu'\n },\n\n /**\n * The target element that's listened to for context menu opening events.\n * By default the vaadin-context-menu listens to the target's `vaadin-contextmenu`\n * events.\n * @type {HTMLElement}\n * @default self\n */\n listenOn: {\n type: Object,\n value: function() {\n return this;\n }\n },\n\n /**\n * Event name to listen for closing the context menu.\n */\n closeOn: {\n type: String,\n value: 'click',\n observer: '_closeOnChanged'\n },\n\n /**\n * Custom function for rendering the content of the menu overlay.\n * Receives three arguments:\n *\n * - `root` The root container DOM element. Append your content to it.\n * - `contextMenu` The reference to the `` element.\n * - `context` The object with the menu context, contains:\n * - `context.target` the target of the menu opening event,\n * - `context.detail` the menu opening event detail.\n */\n renderer: {\n type: Function\n },\n\n _context: Object,\n\n _boundClose: Object,\n\n _boundOpen: Object,\n\n _contentTemplate: Object,\n\n _oldTemplate: Object,\n\n _oldRenderer: Object,\n\n _touch: Boolean\n };\n }\n\n static get observers() {\n return [\n '_openedChanged(opened)',\n '_contextChanged(_context, _instance)',\n '_targetOrOpenOnChanged(listenOn, openOn)',\n '_templateOrRendererChanged(_contentTemplate, renderer, _context, items)'\n ];\n }\n\n constructor() {\n super();\n this._boundOpen = this.open.bind(this);\n this._boundClose = this.close.bind(this);\n this._boundOnGlobalContextMenu = this._onGlobalContextMenu.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.__boundOnScroll = this.__onScroll.bind(this);\n window.addEventListener('scroll', this.__boundOnScroll, true);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n window.removeEventListener('scroll', this.__boundOnScroll, true);\n this.close();\n }\n\n ready() {\n super.ready();\n this._observer = new FlattenedNodesObserver(this, info => {\n this._setTemplateFromNodes(info.addedNodes);\n });\n }\n\n _setTemplateFromNodes(nodes) {\n this._contentTemplate = nodes.filter(node => node.localName && node.localName === 'template')[0] || this._contentTemplate;\n }\n\n // Runs before overlay is fully rendered\n _onOverlayOpened(e) {\n this._setOpened(e.detail.value);\n }\n\n // Runs after overlay is fully rendered\n _onVaadinOverlayOpen(e) {\n this.__alignOverlayPosition();\n this.$.overlay.style.opacity = '';\n this.__forwardFocus();\n }\n\n _targetOrOpenOnChanged(listenOn, openOn) {\n if (this._oldListenOn && this._oldOpenOn) {\n this._unlisten(this._oldListenOn, this._oldOpenOn, this._boundOpen);\n\n this._oldListenOn.style.webkitTouchCallout = '';\n this._oldListenOn.style.webkitUserSelect = '';\n this._oldListenOn.style.msUserSelect = '';\n this._oldListenOn.style.userSelect = '';\n\n this._oldListenOn = null;\n this._oldOpenOn = null;\n }\n\n if (listenOn && openOn) {\n this._listen(listenOn, openOn, this._boundOpen);\n\n this._oldListenOn = listenOn;\n this._oldOpenOn = openOn;\n }\n }\n\n _setListenOnUserSelect(value) {\n // note: these styles don't seem to work in Firefox on iOS.\n this.listenOn.style.webkitTouchCallout = value;\n this.listenOn.style.webkitUserSelect = value; // Chrome, Safari, Firefox\n this.listenOn.style.msUserSelect = value; // IE 10+\n this.listenOn.style.userSelect = value;\n\n // note: because user-selection is disabled on the overlay\n // before opening the menu the text could be already selected\n // so we need to clear that selection\n document.getSelection().removeAllRanges();\n }\n\n _closeOnChanged(closeOn, oldCloseOn) {\n // Listen on this.$.overlay.root to workaround issue on\n // ShadyDOM polyfill: https://github.com/webcomponents/shadydom/issues/159\n\n // Outside click event from overlay\n const evtOverlay = 'vaadin-overlay-outside-click';\n\n if (oldCloseOn) {\n this._unlisten(this.$.overlay, oldCloseOn, this._boundClose);\n this._unlisten(this.$.overlay.root, oldCloseOn, this._boundClose);\n }\n if (closeOn) {\n this._listen(this.$.overlay, closeOn, this._boundClose);\n this._listen(this.$.overlay.root, closeOn, this._boundClose);\n this._unlisten(this.$.overlay, evtOverlay, this._preventDefault);\n } else {\n this._listen(this.$.overlay, evtOverlay, this._preventDefault);\n }\n }\n\n _preventDefault(e) {\n e.preventDefault();\n }\n\n _openedChanged(opened) {\n if (opened) {\n if (!this._instance) {\n this.$.overlay.template = this.querySelector('template');\n this._instance = this.$.overlay._instance;\n }\n document.documentElement.addEventListener('contextmenu', this._boundOnGlobalContextMenu, true);\n this._setListenOnUserSelect('none');\n } else {\n document.documentElement.removeEventListener('contextmenu', this._boundOnGlobalContextMenu, true);\n this._setListenOnUserSelect('');\n }\n\n // Has to be set after instance has been created\n this.$.overlay.opened = opened;\n }\n\n /**\n * Manually invoke existing renderer.\n */\n render() {\n this.$.overlay.render();\n }\n\n _removeNewRendererOrTemplate(template, oldTemplate, renderer, oldRenderer) {\n if (template !== oldTemplate) {\n this._contentTemplate = undefined;\n } else if (renderer !== oldRenderer) {\n this.renderer = undefined;\n }\n }\n\n _templateOrRendererChanged(template, renderer, context, items) {\n if (template && renderer) {\n this._removeNewRendererOrTemplate(template, this._oldTemplate, renderer, this._oldRenderer);\n throw new Error('You should only use either a renderer or a template for context-menu content');\n }\n\n this._oldTemplate = template;\n this._oldRenderer = renderer;\n\n if (items) {\n if (template || renderer) {\n throw new Error('The items API cannot be used together with a template/renderer');\n }\n if (this.closeOn === 'click') {\n this.closeOn = '';\n }\n\n renderer = this.__itemsRenderer;\n }\n if (renderer && context) {\n this.$.overlay.setProperties({owner: this, renderer: renderer});\n }\n }\n\n _contextChanged(context, instance) {\n if (context === undefined || instance === undefined) {\n return;\n }\n instance.detail = context.detail;\n instance.target = context.target;\n }\n\n /**\n * Closes the overlay.\n */\n close() {\n this._setOpened(false);\n }\n\n _contextTarget(e) {\n if (this.selector) {\n const targets = this.listenOn.querySelectorAll(this.selector);\n\n return Array.prototype.filter.call(targets, el => {\n return e.composedPath().indexOf(el) > -1;\n })[0];\n } else {\n return e.target;\n }\n }\n\n /**\n * Opens the overlay.\n * @param {Event} e used as the context for the menu. Overlay coordinates are taken from this event.\n */\n open(e) {\n if (e && !this.opened) {\n this._context = {\n detail: e.detail,\n target: this._contextTarget(e)\n };\n\n if (this._context.target) {\n this._preventDefault(e);\n e.stopPropagation();\n\n // Used in alignment which is delayed until overlay is rendered\n this.__x = this._getEventCoordinate(e, 'x');\n this.__pageXOffset = window.pageXOffset;\n\n this.__y = this._getEventCoordinate(e, 'y');\n this.__pageYOffset = window.pageYOffset;\n\n this.$.overlay.style.opacity = '0';\n this._setOpened(true);\n }\n }\n }\n\n __onScroll() {\n if (!this.opened) {\n return;\n }\n\n const yDiff = window.pageYOffset - this.__pageYOffset;\n const xDiff = window.pageXOffset - this.__pageXOffset;\n\n this.__adjustPosition('left', -xDiff);\n this.__adjustPosition('right', xDiff);\n\n this.__adjustPosition('top', -yDiff);\n this.__adjustPosition('bottom', yDiff);\n\n this.__pageYOffset += yDiff;\n this.__pageXOffset += xDiff;\n }\n\n __adjustPosition(coord, diff) {\n const overlay = this.$.overlay;\n const style = overlay.style;\n\n style[coord] = (parseInt(style[coord]) || 0) + diff + 'px';\n }\n\n __alignOverlayPosition() {\n const overlay = this.$.overlay;\n const style = overlay.style;\n\n // Reset all properties before measuring\n ['top', 'right', 'bottom', 'left'].forEach(prop => style.removeProperty(prop));\n ['right-aligned', 'bottom-aligned'].forEach(attr => overlay.removeAttribute(attr));\n\n // Maximum x and y values are imposed by content size and overlay limits.\n const {xMax, yMax, left, top, width} = overlay.getBoundaries();\n // Reuse saved x and y event values, in order to this method be used async\n // in the `vaadin-overlay-change` which guarantees that overlay is ready\n const x = this.__x || left;\n const y = this.__y || top;\n\n // Select one overlay corner and move to the event x/y position.\n // Then set styling attrs for flex-aligning the content appropriately.\n const wdthVport = document.documentElement.clientWidth;\n const hghtVport = document.documentElement.clientHeight;\n\n // Align to the parent menu overlay, if any.\n const parent = overlay.parentOverlay;\n let alignedToParent = false;\n if (parent) {\n const parentContentRect = parent.$.overlay.getBoundingClientRect();\n if (parent.hasAttribute('right-aligned')) {\n const parentStyle = getComputedStyle(parent);\n\n const getPadding = (el, direction) => {\n return parseFloat(getComputedStyle(el.$.content)['padding' + direction]);\n };\n const right = parseFloat(parentStyle.right) + parentContentRect.width;\n const padding = getPadding(parent, 'Left') + getPadding(overlay, 'Right');\n\n // Preserve right-aligned, if possible.\n if ((wdthVport - (right - padding)) > width) {\n overlay.setAttribute('right-aligned', '');\n style.right = right - padding + 'px';\n alignedToParent = true;\n }\n }\n }\n\n if (!alignedToParent) {\n if (x < wdthVport / 2 || x < xMax) {\n style.left = x + 'px';\n } else {\n style.right = Math.max(0, (wdthVport - x)) + 'px';\n overlay.setAttribute('right-aligned', '');\n }\n }\n if (y < hghtVport / 2 || y < yMax) {\n style.top = y + 'px';\n } else {\n style.bottom = Math.max(0, (hghtVport - y)) + 'px';\n overlay.setAttribute('bottom-aligned', '');\n }\n }\n\n _getEventCoordinate(event, coord) {\n if (event.detail instanceof Object) {\n if (event.detail[coord]) {\n // Polymer gesture events, get coordinate from detail\n return event.detail[coord];\n } else if (event.detail.sourceEvent) {\n // Unwrap detailed event\n return this._getEventCoordinate(event.detail.sourceEvent, coord);\n }\n } else {\n const prop = 'client' + coord.toUpperCase();\n const position = event.changedTouches ? event.changedTouches[0][prop] : event[prop];\n\n if (position === 0) {\n // Native keyboard event\n const rect = event.target.getBoundingClientRect();\n return coord === 'x' ? rect.left : rect.top + rect.height;\n } else {\n // Native mouse or touch event\n return position;\n }\n }\n }\n\n _listen(node, evType, handler) {\n if (gestures[evType]) {\n addListener(node, evType, handler);\n } else {\n node.addEventListener(evType, handler);\n }\n }\n\n _unlisten(node, evType, handler) {\n if (gestures[evType]) {\n removeListener(node, evType, handler);\n } else {\n node.removeEventListener(evType, handler);\n }\n }\n\n _onGlobalContextMenu(e) {\n if (!e.shiftKey) {\n e.preventDefault();\n this.close();\n }\n }\n\n /**\n * Fired when an item is selected when the context menu is populated using the `items` API.\n *\n * @event item-selected\n * @param {Object} detail\n * @param {Object} detail.value the selected menu item\n */\n}\n\ncustomElements.define(ContextMenuElement.is, ContextMenuElement);\nexport { ContextMenuElement };\n","import '@vaadin/vaadin-material-styles/color.js';\nimport '@vaadin/vaadin-material-styles/font-icons.js';\nimport '@vaadin/vaadin-material-styles/typography.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n\nconst $_documentContainer = html`\n \n \n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport '@polymer/polymer/lib/elements/custom-style.js';\nimport { Debouncer } from '@polymer/polymer/lib/utils/debounce.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\nimport { microTask } from '@polymer/polymer/lib/utils/async.js';\nconst $_documentContainer = document.createElement('template');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n/**\n * `` is a helper element for the ``\n * that provides toggle and level display functionality for the item tree.\n *\n * #### Example:\n * ```html\n * \n * \n * \n * \n * [[item.name]]\n * \n * \n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---|---\n * `toggle` | The tree toggle icon\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * ---|---|---\n * `expanded` | When present, the toggle is expanded | :host\n * `leaf` | When present, the toggle is not expandable, i. e., the current item is a leaf | :host\n *\n * The following custom CSS properties are available on\n * the `` element:\n *\n * Custom CSS property | Description | Default\n * ---|---|---\n * `--vaadin-grid-tree-toggle-level-offset` | Visual offset step for each tree sublevel | `1em`\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n */\nclass GridTreeToggleElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n\n \n \n \n`;\n }\n\n static get is() {\n return 'vaadin-grid-tree-toggle';\n }\n\n static get properties() {\n return {\n /**\n * Current level of the tree represented with a horizontal offset\n * of the toggle button.\n */\n level: {\n type: Number,\n value: 0,\n observer: '_levelChanged'\n },\n\n /**\n * Hides the toggle icon and disables toggling a tree sublevel.\n */\n leaf: {\n type: Boolean,\n value: false,\n reflectToAttribute: true\n },\n\n /**\n * Sublevel toggle state.\n */\n expanded: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n notify: true\n }\n };\n }\n\n ready() {\n super.ready();\n\n this.addEventListener('click', e => this._onClick(e));\n }\n\n _onClick(e) {\n if (this.leaf) {\n return;\n }\n\n e.preventDefault();\n this.expanded = !this.expanded;\n }\n\n _levelChanged(level) {\n const value = Number(level).toString();\n this.style['---level'] = value;\n // Async is to make DOM updates applied before evaluating the style\n // update, required for polyfilled RTL support in MSIE and Edge.\n this._debouncerUpdateLevel = Debouncer.debounce(\n this._debouncerUpdateLevel,\n microTask,\n () => this.updateStyles({'---level': value})\n );\n }\n}\n\ncustomElements.define(GridTreeToggleElement.is, GridTreeToggleElement);\n\nexport { GridTreeToggleElement };\n","/**\n@license\nCopyright (c) 2017 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { PolymerElement } from '@polymer/polymer/polymer-element.js';\n\nimport { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { RadioButtonElement } from './vaadin-radio-button.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a Web Component for grouping vaadin-radio-buttons.\n *\n * ```html\n * \n * Foo\n * Bar\n * Baz\n * \n * ```\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ----------------|----------------\n * `label` | The label element\n * `group-field` | The element that wraps radio-buttons\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * -----------|-------------|------------\n * `disabled` | Set when the radio group and its children are disabled. | :host\n * `readonly` | Set to a readonly radio group | :host\n * `invalid` | Set when the element is invalid | :host\n * `has-label` | Set when the element has a label | :host\n * `has-value` | Set when the element has a value | :host\n * `focused` | Set when the element contains focus | :host\n *\n * See [ThemableMixin – how to apply styles for shadow parts](https://github.com/vaadin/vaadin-themable-mixin/wiki)\n *\n * @memberof Vaadin\n * @mixes Vaadin.ThemableMixin\n * @element vaadin-radio-group\n * @demo demo/index.html\n */\nclass RadioGroupElement extends ThemableMixin(PolymerElement) {\n static get template() {\n return html`\n \n\n \n
\n\n
\n \n
\n\n
[[errorMessage]]
\n
\n`;\n }\n\n static get is() {\n return 'vaadin-radio-group';\n }\n\n static get properties() {\n return {\n /**\n * The current disabled state of the radio group. True if group and all internal radio buttons are disabled.\n */\n disabled: {\n type: Boolean,\n reflectToAttribute: true,\n observer: '_disabledChanged'\n },\n\n /**\n * This attribute indicates that the user cannot modify the value of the control.\n */\n readonly: {\n type: Boolean,\n reflectToAttribute: true,\n observer: '_readonlyChanged'\n },\n\n /**\n * This property is set to true when the value is invalid.\n */\n invalid: {\n type: Boolean,\n reflectToAttribute: true,\n notify: true,\n value: false\n },\n\n /**\n * Specifies that the user must fill in a value.\n */\n required: {\n type: Boolean,\n reflectToAttribute: true\n },\n\n /**\n * Error to show when the input value is invalid.\n */\n errorMessage: {\n type: String,\n value: ''\n },\n\n _errorId: {\n type: String\n },\n\n _checkedButton: {\n type: Object\n },\n\n /**\n * String used for the label element.\n */\n label: {\n type: String,\n value: '',\n observer: '_labelChanged'\n },\n\n /**\n * Value of the radio group.\n */\n value: {\n type: String,\n notify: true,\n observer: '_valueChanged'\n }\n };\n }\n\n ready() {\n super.ready();\n\n this._addListeners();\n\n this._observer = new FlattenedNodesObserver(this, info => {\n const checkedChangedListener = e => {\n if (e.target.checked) {\n this._changeSelectedButton(e.target);\n }\n };\n\n // reverse() is used to set the last checked radio button value to radio group value\n this._filterRadioButtons(info.addedNodes).reverse().forEach(button => {\n button.addEventListener('checked-changed', checkedChangedListener);\n if (this.disabled) {\n button.disabled = true;\n }\n if (button.checked) {\n this._changeSelectedButton(button);\n }\n });\n\n this._filterRadioButtons(info.removedNodes).forEach(button => {\n button.removeEventListener('checked-changed', checkedChangedListener);\n if (button.checked) {\n this.value = undefined;\n }\n });\n });\n\n if (this._radioButtons.length) {\n this._setFocusable(0);\n }\n\n this.setAttribute('role', 'radiogroup');\n\n const uniqueId = RadioGroupElement._uniqueId = 1 + RadioGroupElement._uniqueId || 0;\n this._errorId = `${this.constructor.is}-error-${uniqueId}`;\n }\n\n get _radioButtons() {\n return this._filterRadioButtons(this.querySelectorAll('*'));\n }\n\n _setFocused(focused) {\n if (focused) {\n this.setAttribute('focused', '');\n } else {\n this.removeAttribute('focused');\n }\n }\n\n _filterRadioButtons(nodes) {\n return Array.from(nodes)\n .filter(child => child instanceof RadioButtonElement);\n }\n\n _disabledChanged(disabled) {\n this.setAttribute('aria-disabled', disabled);\n this._updateDisableButtons();\n }\n\n _updateDisableButtons() {\n this._radioButtons.forEach(button => {\n if (this.disabled) {\n button.disabled = true;\n } else if (this.readonly) {\n // it's not possible to set readonly to radio buttons, but we can\n // unchecked ones instead.\n button.disabled = button !== this._checkedButton && this.readonly;\n } else {\n button.disabled = false;\n }\n });\n }\n\n _readonlyChanged(newV, oldV) {\n (newV || oldV) && this._updateDisableButtons();\n }\n\n _addListeners() {\n this.addEventListener('keydown', e => {\n // if e.target is vaadin-radio-group then assign to checkedRadioButton currently checked radio button\n var checkedRadioButton = (e.target == this) ? this._checkedButton : e.target;\n\n // LEFT, UP - select previous radio button\n if (e.keyCode === 37 || e.keyCode === 38) {\n e.preventDefault();\n this._selectPreviousButton(checkedRadioButton);\n }\n\n // RIGHT, DOWN - select next radio button\n if (e.keyCode === 39 || e.keyCode === 40) {\n e.preventDefault();\n this._selectNextButton(checkedRadioButton);\n }\n });\n\n this.addEventListener('focusin', () => this._setFocused(this._containsFocus()));\n\n // Need to check e.composed as a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1472887\n // otherwise FF runs validation on keyboard focus\n this.addEventListener('focusout', e => {\n e.composed && this.validate();\n this._setFocused(false);\n });\n }\n\n _selectButton(element, setFocusRing) {\n if (this._containsFocus()) {\n element.focus();\n if (setFocusRing) {\n element.setAttribute('focus-ring', '');\n }\n }\n this._changeSelectedButton(element, setFocusRing);\n }\n\n _containsFocus() {\n const root = this.getRootNode();\n // Safari 9 needs polyfilled `_activeElement` to return correct node\n const activeElement = root._activeElement !== undefined ? root._activeElement : root.activeElement;\n return this.contains(activeElement);\n }\n\n _hasEnabledButtons() {\n return !this._radioButtons.every((button) => button.disabled);\n }\n\n _selectNextButton(element) {\n if (!this._hasEnabledButtons()) {\n return;\n }\n\n var nextButton = element.nextElementSibling || this.firstElementChild;\n\n if (nextButton.disabled) {\n this._selectNextButton(nextButton);\n } else {\n this._selectButton(nextButton, true);\n }\n }\n\n _selectPreviousButton(element) {\n if (!this._hasEnabledButtons()) {\n return;\n }\n\n var previousButton = element.previousElementSibling || this.lastElementChild;\n\n if (previousButton.disabled) {\n this._selectPreviousButton(previousButton);\n } else {\n this._selectButton(previousButton, true);\n }\n }\n\n _changeSelectedButton(button, fireChangeEvent) {\n if (this._checkedButton === button) {\n return;\n }\n\n this._checkedButton = button;\n\n if (this._checkedButton) {\n this.value = this._checkedButton.value;\n }\n\n this._radioButtons.forEach(button => {\n if (button === this._checkedButton) {\n if (fireChangeEvent) {\n button.click();\n } else {\n button.checked = true;\n }\n } else {\n button.checked = false;\n }\n });\n\n this.validate();\n this.readonly && this._updateDisableButtons();\n button && this._setFocusable(this._radioButtons.indexOf(button));\n }\n\n _valueChanged(newV, oldV) {\n if (oldV && (newV === '' || newV === null || newV === undefined)) {\n this._changeSelectedButton(null);\n this.removeAttribute('has-value');\n return;\n }\n\n if (!this._checkedButton || newV != this._checkedButton.value) {\n const newCheckedButton = this._radioButtons.filter(button => button.value == newV)[0];\n\n if (newCheckedButton) {\n this._selectButton(newCheckedButton);\n this.setAttribute('has-value', '');\n } else {\n console.warn(`No with value ${newV} found.`);\n }\n }\n }\n\n /**\n * Returns true if `value` is valid.\n * `` uses this to check the validity or all its elements.\n *\n * @return {boolean} True if the value is valid.\n */\n validate() {\n return !(this.invalid = !this.checkValidity());\n }\n\n /**\n * Returns true if the current input value satisfies all constraints (if any)\n * @returns {boolean}\n */\n checkValidity() {\n return !this.required || !!this.value;\n }\n\n _setFocusable(idx) {\n const items = this._radioButtons;\n items.forEach(e => e.tabindex = e === items[idx] ? 0 : -1);\n }\n\n _labelChanged(label) {\n if (label) {\n this.setAttribute('has-label', '');\n } else {\n this.removeAttribute('has-label');\n }\n }\n\n _getActiveErrorId(invalid, errorMessage, errorId) {\n return errorMessage && invalid ? errorId : undefined;\n }\n\n _getErrorMessageAriaHidden(invalid, errorMessage, errorId) {\n return (!this._getActiveErrorId(invalid, errorMessage, errorId)).toString();\n }\n}\n\ncustomElements.define(RadioGroupElement.is, RadioGroupElement);\n\nexport { RadioGroupElement };\n","/**\n@license\nCopyright (c) 2018 Vaadin Ltd.\nThis program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n*/\nimport { GridColumnElement } from './vaadin-grid-column.js';\n\nimport './vaadin-grid-tree-toggle.js';\nimport { html } from '@polymer/polymer/lib/utils/html-tag.js';\n/**\n * `` is a helper element for the ``\n * that provides default template and functionality for toggling tree/hierarchical items.\n *\n * #### Example:\n * ```html\n * \n * \n *\n * \n * ...\n * ```\n *\n * @memberof Vaadin\n * @extends Vaadin.GridColumnElement\n */\nclass GridTreeColumnElement extends GridColumnElement {\n static get template() {\n return html`\n \n \n [[__getToggleContent(path, item)]]\n \n \n`;\n }\n\n static get is() {\n return 'vaadin-grid-tree-column';\n }\n\n static get properties() {\n return {\n /**\n * JS Path of the property in the item used as text content for the tree toggle.\n */\n path: String,\n\n /**\n * JS Path of the property in the item that indicates whether the item has child items.\n */\n itemHasChildrenPath: {\n type: String,\n value: 'children'\n }\n };\n }\n\n _prepareBodyTemplate() {\n const template = this._prepareTemplatizer(this.$.template);\n // needed to override the dataHost correctly in case internal template is used.\n template.templatizer.dataHost = this;\n return template;\n }\n\n __isLeafItem(item, itemHasChildrenPath) {\n return !(item && item[itemHasChildrenPath]);\n }\n\n __getToggleContent(path, item) {\n return path && this.get(path, item);\n }\n}\n\ncustomElements.define(GridTreeColumnElement.is, GridTreeColumnElement);\n\nexport { GridTreeColumnElement };\n"],"names":["toArray","objectOrArray","Array","isArray","log","msg","logValue","value","String","stringType","Object","prototype","toString","call","match","JSON","stringify","MODULE","NOMODULE","bundleKeys","ensureBundle","src","Error","ensureRoute","route","isString","path","bundle","stringKeys","isFunction","action","children","isObject","some","key","join","forEach","redirect","overriddenProp","console","warn","ensureRoutes","routes","loadScript","script","document","head","querySelector","createElement","setAttribute","async","Promise","resolve","reject","onreadystatechange","onload","e","__dynamicImportLoaded","onerror","parentNode","removeChild","appendChild","loadBundle","race","filter","map","fireRouterEvent","type","detail","window","dispatchEvent","CustomEvent","cancelable","o","f","s","getNotFoundError","context","error","pathname","code","notFoundResult","Material","HTMLElement","version","customElements","define","$_documentContainer","innerHTML","content","font","link","rel","crossOrigin","href","html","ThemePropertyMixin","superClass","properties","theme","readOnly","attributeChangedCallback","name","oldValue","newValue","_setTheme","ThemableMixin","finalize","template","_template","hasOwnTemplate","parentElement","id","is","inheritedTemplate","getPrototypeOf","from","querySelectorAll","_includeStyle","getAttribute","_includeMatchingThemes","modules","DomModule","hasThemes","defaultModuleName","keys","sort","moduleNameA","moduleNameB","vaadinA","indexOf","vaadinB","vaadinThemePrefixes","vaadinThemeA","prefix","length","vaadinThemeB","moduleName","themeFor","split","themeForToken","RegExp","test","styleEl","keyboardActive","addEventListener","capture","TabIndexMixin","tabindex","Number","reflectToAttribute","observer","ShadyDOM","ControlStateMixin","autofocus","Boolean","_previousTabIndex","disabled","_isShiftTabbing","_keyboardActive","ready","composedPath","contains","relatedTarget","_focus","focusElement","_setFocused","ensureEventComposed","composed","target","bubbles","shadowRoot","defaultPrevented","keyCode","shiftKey","focus","apply","setTimeout","firefox","navigator","userAgent","parseFloat","nextSibling","fakeTarget","style","position","opacity","tabIndex","insertBefore","requestAnimationFrame","disconnectedCallback","hasAttribute","focused","removeAttribute","localName","blur","_disabledChanged","_tabindexChanged","undefined","setProperties","click","DirHelper","detectScrollType","dummy","textContent","dir","fontSize","width","height","top","overflow","body","cachedType","scrollLeft","getNormalizedScrollLeft","scrollType","direction","element","scrollWidth","clientWidth","setNormalizedScrollLeft","directionSubscribers","directionUpdater","documentDir","getDocumentDir","alignDirs","directionObserver","MutationObserver","observe","documentElement","attributes","attributeFilter","DirMixin","connectedCallback","__subscribe","newValueEqlDocDir","newValueEmptied","newDiffValue","push","splice","__getNormalizedScrollLeft","__setNormalizedScrollLeft","DEV_MODE_CODE_REGEXP","FlowClients","Vaadin","Flow","clients","isMinified","uncommentAndRun","isDevelopmentMode","isForcedDevelopmentMode","isLocalhost","isFlowProductionMode","localStorage","getItem","location","hostname","client","productionMode","callback","args","exec","Function","runIfDevelopmentMode","developmentMode","maybeGatherAndSendStats","usageStatistics","registrations","developmentModeCallback","statsJob","registered","Set","ElementMixin","has","add","Debouncer","debounce","idlePeriod","enqueueDebouncer","constructor","doctype","CheckboxElement","GestureEventListeners","PolymerElement","checked","notify","indeterminate","_nativeCheckbox","_storedName","_handleClick","bind","_addActiveListeners","attrName","_updateLabelAttribute","label","assignedNodes","firstElementChild","_isAssignedNodesEmpty","nodes","nodeType","Node","TEXT_NODE","trim","_checkedChanged","_indeterminateChanged","_addEventListenerToNode","__interactionsAllowed","preventDefault","_toggleChecked","ProgressMixin","min","max","observers","_normalizedValueChanged","newNormalizedValue","_normalizeValue","setProperty","updateStyles","_valueChanged","newV","oldV","_minChanged","_maxChanged","nV","Math","ProgressBarElement","HOST_PROPS","default","accessible","PROP_TYPE","DEFAULT","ACCESSIBLE","TextFieldMixin","subclass","autocomplete","autocorrect","autocapitalize","autoselect","clearButtonVisible","errorMessage","i18n","clear","maxlength","minlength","placeholder","readonly","required","invalid","hasValue","preventInvalidInput","_labelId","_errorId","slotted","_slottedTagName","inputElement","_onInput","__preventInput","stopImmediatePropagation","input","checkValidity","_inputDebouncer","timeOut","after","__fromClearButton","__userInput","_stateChanged","$","clearButton","_onChange","_valueClearing","changeEvent","sourceEvent","newVal","oldVal","validate","_labelChanged","_onSlotChange","_slottedInput","_validateSlottedValue","_addInputListeners","_addIEListeners","_removeInputListeners","_removeIEListeners","_propagateHostAttributes","attr","_hostPropsChanged","attributesValues","_hostAccessiblePropsChanged","attributeNames","index","_setOrToggleAttribute","node","pattern","_boundOnInput","_boundOnChange","_boundOnBlur","_boundOnFocus","removeEventListener","_onBlur","_onFocus","defaultInput","ShadyCSS","nativeCss","_onClearButtonClick","_onKeyDown","uniqueId","_uniqueId","__observeOffsetHeight","select","setSelectionRange","inputEvent","Event","dispatchChange","_shouldPreventInput","_createPropertyObserver","_getActiveErrorId","errorId","_getActiveLabelId","labelId","_getErrorMessageAriaHidden","_dispatchIronResizeEventIfNeeded","sizePropertyName","previousSizePropertyName","offsetHeight","prop","root","WEBKIT_PROPERTY","el","TextFieldElement","list","title","memoizedTemplate","PasswordFieldElement","revealButtonHidden","passwordVisible","cloneNode","thisTemplate","import","revealButton","styles","_passwordVisibilityChanging","_setPasswordVisible","_cachedChangeEvent","stopPropagation","_revealButtonMouseDown","_togglePasswordVisibilityTouchend","_togglePasswordVisibility","_passwordVisibleChange","FormLayoutElement","mixinBehaviors","IronResizableBehavior","responsiveSteps","minWidth","columns","labelsPosition","_columnCount","_labelsOnTop","_styleElement","flush","_selectResponsiveStep","__onAnimationEnd","beforeNextRender","_observeChildrenColspanChange","__mutationObserver","disconnect","__childObserver","mutationObserverConfig","mutationRecord","mutation","attributeName","_invokeUpdateStyles","FlattenedNodesObserver","info","ignore","addedNodes","ELEMENT_NODE","toLowerCase","child","_naturalNumberOrOne","n","Infinity","floor","_isValidCSSLength","firstChild","nodeValue","sheet","cssRules","getPropertyValue","_responsiveStepsChanged","oldResponsiveSteps","step","message","animationName","selectedStep","tmpStyleProp","layout","getComputedStyle","offsetWidth","removeProperty","_lastOffsetWidth","columnSpacing","getComputedStyleValue","marginStartProp","marginEndProp","containerWidth","col","display","colspan","childRatio","nextIndex","nextLineBreak","colspanRatio","ButtonElement","button","addListener","ItemMixin","_hasVaadinItemMixin","selected","_value","attrValue","_setActive","_mousedown","mouseUpListener","_onKeydown","_onKeyup","_selectedChanged","active","event","TabElement","ListMixin","_hasVaadinListMixin","orientation","items","_searchBuf","_onClick","_observer","_setItems","_filterItems","_enhanceItems","item","_setFocusable","itemToSelect","_scrollToItem","getRootNode","activeElement","array","metaKey","ctrlKey","idx","_searchKey","currentIdx","_searchReset","increment","condition","_isItemHidden","replace","_getAvailableIndex","_isRTL","_vertical","dirIncrement","totalItems","i","firstItem","_scrollerElement","props","scrollerRect","getBoundingClientRect","nextItemRect","prevItemRect","scrollDistance","_scroll","pixels","safari10","TabsElement","_updateOverflow","afterNextRender","_scrollForward","_scrollOffset","_scrollBack","scroll","scrollPosition","scrollTop","scrollSize","scrollHeight","_repaintShadowNodesHack","NotificationContainer","opened","_openedChanged","_boundIosResizeListener","_detectIosNavbar","innerHeight","landscape","innerWidth","clientHeight","bottom","NotificationCard","NotificationElement","duration","renderer","_notificationTemplate","_setTemplateFromNodes","render","_card","_removeNewRendererOrTemplate","oldTemplate","oldRenderer","_templateOrRendererChanged","_oldTemplate","_oldRenderer","rendererChanged","_didAnimateNotificationAppend","_animatedAppendNotificationCard","open","close","_container","_instance","_ensureTemplatized","_updateShadyButtonStyles","_closeNotificationCard","_Templatizer","templatize","forwardHostProp","templateRoot","isScoped","_cardContent","attachShadow","mode","nativeShadow","shadyStyleScope","host","scopeCssText","reduce","result","_appendNotificationCard","listener","slot","_removeNotificationCard","_durationTimeoutId","clearTimeout","_animatedRemoveNotificationCard","_positionChanged","_durationChanged","__buttonStylesPending","whenDefined","then","isButton","get","btn","obj","propName","propValue","p","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","FocusablesHelper","getTabbableNodes","_collectTabbableNodes","_sortByTabIndex","isFocusable","isTabbable","_isVisible","_normalizedTabIndex","needsSort","flatten","visibility","tabbables","len","pivot","ceil","left","slice","right","_mergeSortByTabIndex","_hasLowerTabOrder","shift","concat","a","b","ati","bti","overlayContentCounter","overlayContentCache","createOverlayContent","cssText","processOverlayStyles","styledTemplate","prepareTemplate","klass","importNode","styleElement","OverlayElement","owner","instanceProps","withBackdrop","model","modeless","hidden","focusTrap","restoreFocusOnClose","_mouseDownInside","_mouseUpInside","_originalContentPart","_contentNodes","_oldOwner","_oldModel","_oldInstanceProps","_oldOpened","_boundMouseDownListener","_mouseDownListener","_boundMouseUpListener","_mouseUpListener","_boundOutsideClickListener","_outsideClickListener","_boundKeydownListener","_keydownListener","_boundIronOverlayCanceledListener","_ironOverlayCanceled","backdrop","evt","overlay","_last","_cycleTab","wasOpened","__restoreFocusNode","_getActiveElement","_animatedOpening","_activeElement","_addGlobalListeners","_animatedClosing","_removeGlobalListeners","_hiddenChanged","_flushAnimation","_shouldAnimate","_enqueueAnimation","handler","_attachOverlay","_enterModalState","finishOpening","_placeholder","createComment","bringToFront","_exitModalState","_deepContains","finishClosing","_detachOverlay","__attachedInstances","__zIndex","pop","_modelessChanged","pointerEvents","_previousDocumentPointerEvents","instances","_removeOldContent","replaceChild","connect","_stampOverlayTemplate","childNodes","_templateRoot","isShady","styleInfo","ScopingShim","_styleInfoForNode","_getStyleRules","parsedCssText","contentPart","className","unshift","ownerOrModelChanged","templateOrInstancePropsChanged","openedChanged","_isFocused","_focusedIndex","elements","_getFocusableElements","focusableElements","doc","ownerDocument","zIndex","frontmost","DatePickerOverlayElement","DisableUpgradeMixin","DatePickerHelper","_getISOWeekNumber","date","dayOfWeek","getDay","nearestThursdayDiff","nearestThursday","Date","getTime","firstOfJanuary","setFullYear","getFullYear","timeDiff","daysSinceFirstOfJanuary","round","_dateEquals","date1","date2","getMonth","getDate","_dateAllowed","_getClosestDate","dates","closestDate","candidate","candidateDiff","abs","closestDateDiff","_extractDateParts","day","month","year","MonthCalendarElement","selectedDate","focusedDate","showWeekNumbers","ignoreTaps","_notTapping","minDate","maxDate","_days","computed","_isDisabled","firstDate","setMonth","setDate","lastDate","_getTitle","monthNames","formatTitle","_onMonthGridTouchStart","_dateAdd","delta","_applyFirstDayOfWeek","weekDayNames","firstDayOfWeek","_getWeekDayNames","weekDayNamesShort","weekDay","weekDayShort","_getDate","_showWeekNumbersChanged","_showWeekSeparator","_isToday","_getDays","days","startMonth","targetMonth","_getWeekNumber","acc","d","_getWeekNumbers","week","arr","_handleTap","_preventDefault","_getRole","_getAriaLabel","ariaLabel","weekdays","today","_getAriaDisabled","InfiniteScrollerElement","bufferSize","_initialScroll","_initialIndex","_buffers","_preventScrollEvent","_mayHaveMomentum","_initialized","fullHeight","tpl","_TemplateClass","buffer","insertionPoint","_itemWrapper","instance","isFirefox","scroller","_activated","_createPool","_finishInit","_initDone","_ensureStampedInstance","translateY","_reset","_translateBuffer","up","_bufferHeight","transform","updated","reverse","_scrollDisabled","bufferOffset","offsetTop","upperThresholdReached","itemHeight","lowerThresholdReached","_updateClones","_debouncerScrollFinish","_firstIndex","classList","remove","_itemHeightVal","itemHeightPx","_debouncerUpdateClones","container","itemWrapper","slotName","_contentIndex","tmpInstance","set","viewPortOnly","bufferIndex","firstIndex","rect","DatePickerOverlayContentElement","_focusedMonthDate","initialPosition","_originDate","_visibleMonthIndex","_desktopMode","_translateX","_yearScrollerWidth","_ignoreTaps","_focused","_stopPropagation","_onOverlayFocus","_onOverlayBlur","_closeYearScroller","_toggleAnimateClass","setTouchAction","scrollers","IronA11yAnnouncer","requestAvailability","announceFocusedDate","_currentlyFocusedDate","announce","text","focusCancel","cancelButton","scrollToDate","animate","_scrollToPosition","_differenceInMonths","_focusedDateChanged","revealDate","_isCurrentYear","yearsFromNow","_isSelectedYear","diff","scrolledAboveViewport","monthScroller","visibleItems","scrolledBelowViewport","_initialPositionChanged","_repositionYearScroller","yearScroller","_repositionMonthScroller","_onMonthScroll","_doIgnoreTaps","_onYearScroll","_onYearScrollTouchStart","_onMonthScrollTouchStart","_debouncer","_formatDisplayed","formatDate","_onTodayTap","_close","_scrollToCurrentMonth","_showClear","_onYearTap","scrollDelta","y","yearDelta","targetPosition","_targetPosition","easingFunction","t","c","start","smoothScroll","timestamp","currentTime","currentPos","oldPosition","_limit","range","_handleTrack","dx","ddy","ddx","newTranslateX","_track","state","_openYearScroller","enable","_toggleYearScroller","_isYearScrollerVisible","_translateXChanged","x","_yearAfterXYears","parseInt","_yearAfterXMonths","months","_dateAfterXMonths","_differenceInYears","_clear","overlayContent","_cancel","_eventKey","k","IronA11yKeysBehavior","keyboardEventMatchesKeys","isToday","todayButton","isCancel","isScroller","eventKey","isFullscreen","isShift","_moveFocusByDays","_moveFocusInsideMonth","_moveFocusByMonths","_focusDate","dateToFocus","_focusClosestDate","property","_isTodayAllowed","todayMidnight","DatePickerMixin","_selectedDate","_focusedDate","_fullscreen","_fullscreenMediaQuery","_touchPrevented","weekdaysShort","calendar","cancel","yearStr","substr","parseDate","parts","monthName","fullYear","_minDate","_maxDate","_noInput","_ios","_webkitOverflowScroll","webkitOverflowScrolling","_ignoreAnnounce","_focusOverlayOnOpen","_overlayInitialized","_boundOnScroll","_onScroll","_boundFocus","_boundUpdateAlignmentAndPosition","_updateAlignmentAndPosition","inputIndex","_inputElement","_onUserInput","_initOverlay","_overlayContent","_focusAndSelect","_onVaadinOverlayClose","_input","_nativeInput","unwrap","_parseDate","str","_isNoInput","fullscreen","ios","_formatISO","pad","num","fmt","yearSign","yearFmt","yearAbs","_selectedDateChanged","__userInputOccurred","__dispatchChange","inputValue","_inputValue","_ignoreFocusedDateChange","_updateHasValue","__getOverlayTheme","overlayInitialized","_handleDateChange","inputRect","bottomAlign","viewportWidth","viewportHeight","_fullscreenChanged","_onOverlayOpened","_openedWithFocusRing","parsedInitialPosition","_preventWebkitOverflowScrollingTouch","oldInlineValue","_onOverlayClosed","prevented","dateObject","parsedDate","_isValidDate","selectionStart","selectionEnd","inputValid","minMaxValid","inputValidity","_setSelectionRange","isNaN","allowedKeys","_validateInput","_userInputValueChanged","_announceFocusedDate","DatePickerElement","_userInputValue","_toggle","_getAriaExpanded","_setClearButtonLabel","i18nClear","ItemElement","MultiSelectListMixin","multiple","selectedValues","_onMultipleClick","_enhanceMultipleItems","selectedItems","selectedId","_scrollToLastSelectedItem","lastSelectedItem","v","_multipleChanged","ListBoxElement","_checkImport","SelectOverlayElement","SelectTextFieldElement","SelectElement","_phone","_phoneMediaQuery","_overlayElement","_toggleElement","_items","_contentTemplate","_boundSetPosition","_setPosition","_valueElement","_setForwardHostProps","origForwardHostProp","_updateValueSlot","_assignMenuElement","_menuElement","_updateSelectedItem","_onKeyDownInside","__userInteraction","notifyResize","positionTarget","_requiredChanged","newIdx","_hasContent","_attachSelectedItem","labelItem","_sourceItem","_updateAriaExpanded","toggleElement","hasContent","_valueChanging","_selectedChanging","prev","IOS","IOS_TOUCH_SCROLLING","DEFAULT_PHYSICAL_COUNT","ANIMATION_FRAME","animationFrame","IDLE_TIME","MICRO_TASK","microTask","PolymerIronList","Class","behaviors","IronScrollTargetBehavior","_ratio","_scrollerPaddingTop","_scrollPosition","_physicalSize","_physicalAverage","_physicalAverageCount","_physicalTop","_virtualCount","_estScrollHeight","_scrollHeight","_viewportHeight","_viewportWidth","_physicalItems","_physicalSizes","_firstVisibleIndexVal","_collection","_lastVisibleIndexVal","_maxPages","_focusedVirtualIndex","_itemsPerRow","_rowHeight","_templateCost","_physicalBottom","_scrollBottom","_virtualEnd","_virtualStart","_physicalCount","_hiddenContentSize","size","grid","_physicalRows","_maxScrollTop","_maxVirtualStart","virtualCount","_convertIndexToCompleteRow","val","_clamp","_virtualStartVal","_physicalStart","_physicalStartVal","_physicalEnd","_physicalCountVal","_optPhysicalSize","firstVisibleIndex","physicalOffset","_iterateItems","pidx","vidx","_getPhysicalSizeIncrement","lastVisibleIndex","_estRowsInView","attached","_debounce","_render","listen","detached","unlisten","updateViewportBoundaries","scrollTarget","_scrollTargetHeight","_updateGridMetrics","_scrollHandler","_scrollTop","isScrollingDown","idxAdjustment","_update","reusables","_getReusables","physicalTop","indexes","_increasePoolIfNeeded","fromTop","ith","offsetContent","physicalItemHeight","idxs","protectedOffsetContent","virtualStart","virtualEnd","physicalCount","scrollBottom","itemSet","movingUp","_manageFocus","_assignModels","_updateMetrics","_positionItems","_updateScrollerSize","_isClientFull","count","nextPhysicalCount","nextIncrease","ts","performance","now","_isIndexRendered","_getPhysicalIndex","isAttached","_itemsChanged","change","_physicalIndexForKey","_resetScrollPosition","_removeFocusedItem","fn","rtn","arguments","_computeVidx","flush$0","newPhysicalSize","oldPhysicalSize","prevAvgCount","prevPhysicalAvg","_adjustScrollPosition","translate3d","deltaHeight","pos","forceUpdate","_virtualRowCount","scrollToIndex","currentTopItem","currentVirtualItem","targetOffsetTop","hiddenContentSize","_resetAverage","_resizeHandler","toggleScrollListener","cb","asyncModule","_debouncers","GridScrollerElement","_vidxOffset","_updateScrollerItem","_afterScroll","_getRowTarget","_createScrollerRows","_canPopulate","_warnPrivateAPIAccess","_pendingScrollToIndex","borderTopWidth","_scrollingToIndex","_effectiveSize","table","_accessIronListAPI","_adjustVirtualIndexOffset","row","headerOffset","header","_effectiveSizeChanged","fvi","fviOffset","_firstVisibleIndex","maxVirtualItems","_edge","_ie","_scrollToIndex","_focusedItemIndex","_itemsFocusable","cellIndex","rePosition","_initialPoolCreated","_debounceIncreasePool","remainingPhysicalSize","estimatedMissingRowCount","__reorderChildNodes","inOrder","current","currentIndex","row1","row2","fragment","createDocumentFragment","physicalItems","inst","_updateHeaderFooterMetrics","_toggleAttribute","oldOffset","_noScale","scale","offset","threshold","maxShift","maxOffset","_warnPrivateAPIAccessAsyncEnabled","returnValue","_debouncerWarnPrivateAPIAccess","_debounceRender","apiName","_createFocusBackfillItem","_multiSelectionChanged","clearSelection","_lastVisibleIndex","A11yMixin","_a11yGetHeaderRowCount","_columnTree","level","_headerTemplate","headerRenderer","_a11yGetFooterRowCount","_a11yUpdateGridSize","bodyColumns","_a11yUpdateHeaderRows","_a11yUpdateFooterRows","headerRow","footer","footerRow","_a11yUpdateRowRowindex","_a11yUpdateRowSelected","cell","_a11yUpdateRowLevel","_a11yUpdateRowDetailsOpened","detailsOpened","_a11ySetRowDetailsCell","detailsCell","_a11yUpdateCellColspan","_a11yUpdateSorters","sorter","cellContent","assignedSlot","ActiveItemMixin","activeItem","_activateItem","clickedItem","_itemsEqual","_content","_isFocusable","__getRowModel","isFocusableElement","ArrayDataProviderMixin","splices","dataProvider","_arrayDataProvider","clearCache","_ensureFirstPageLoaded","opts","_filters","_checkPaths","_filter","sortOrders","_sorters","_multiSort","page","pageSize","end","arrayToCheck","parentProperty","Base","_compare","_normalizeEmptyValue","filterValueLowercase","ColumnResizingMixin","_onHeaderTrack","handle","column","_column","_childColumns","_order","columnRowCells","targetCell","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","marginLeft","marginRight","flexGrow","ItemCache","parentCache","parentItem","itemCaches","effectiveSize","pendingRequests","isLoading","getItemForIndex","cache","scaledIndex","getCacheAndIndex","updateSize","_isExpanded","curr","subCache","ensureSubCacheForScaledIndex","_loadPage","thisLevelIndex","expandedIndex","DataProviderMixin","loading","_cache","itemIdPath","expandedItems","_sizeChanged","_updateRowItem","_getItem","_updateItem","_getPageForIndex","_pagesForPhysicalItems","_expandedInstanceChangedCallback","expandItem","collapseItem","getItemId","_getItemIndexInArray","_expandedItemsChanged","_getIndexLevel","_hasData","_setLoading","params","_mapSorters","filters","_mapFilters","itemsIndex","itemIndex","cachedItem","__setInitialColumnWidths","_setPendingProperty","_flushItemsDebouncer","_debouncerLoad","_pageSizeChanged","oldPageSize","_checkSize","_dataProviderChanged","oldDataProvider","_debouncerCheckSize","hadData","item1","item2","DynamicColumnsMixin","_addNodeObserver","_hasColumnGroups","_getChildColumns","getFlattenedNodes","_isColumnElement","_flattenColumnGroups","_getColumnTree","rootColumns","_updateColumnTree","columnTree","_arrayEquals","rowDetailsTemplate","_rowDetailsTemplate","removedNodes","_debouncerCheckImports","_checkImports","arr1","arr2","l","elementName","_updateFirstAndLastColumn","_updateFirstAndLastColumnForRow","EventContextMixin","getEventContext","section","assign","FilterMixin","_filterChanged","GridTemplatizer","dataHost","_templateInstances","_parentPathValues","_grid","_instanceProps","expanded","createInstance","addInstance","notifyPath","removeInstance","parentModel","_forwardParentProp","notifyInstanceProp","originalProp","_item","itemPrefix","gridCallback","_templateInstancesChanged","addedCount","keyName","RowDetailsMixin","detailsOpenedItems","rowDetailsRenderer","_detailsCells","_rowDetailsTemplateOrRendererChanged","templatizer","Templatizer","_updateRow","_toggleDetailsCell","_detailsOpenedItemsChanged","changeRecord","_isDetailsOpened","_configureDetailsCell","detailsHidden","hiddenChanged","_renderer","_updateDetailsCellHeights","openItemDetails","closeItemDetails","_detailsOpenedInstanceChangedCallback","ScrollMixin","_timeouts","SCROLL_PERIOD","WHEEL_SCROLLING","SCROLLING","IGNORE_WHEEL","_frozenCells","_scrollbarWidth","scrollDiv","scrollbarWidth","_rowWithFocusedElement","_deltaYAcc","_wheelScrolling","_debouncerWheelScrolling","_onWheel","outerscroller","outerScrolling","_hasScrolledAncestor","deltaX","deltaY","deltaMode","_wheelAnimationFrame","_debouncerWheelAnimationFrame","momentum","_canScroll","_hasResidualMomentum","_ignoreNewWheel","_debouncerIgnoreNewWheel","_previousMomentum","_scheduleScrolling","_scrollingFrame","_debounceScrolling","cancelAnimationFrame","_reorderRows","_scrollPeriodFrame","_debounceScrollPeriod","_translateStationaryElements","os","passthrough","syncOuterScroller","overScroll","_debounceOverflow","adjustedVirtualStart","targetRow","targetPhysicalIndex","_frozenCellsChanged","_debouncerCacheElements","_updateLastFrozen","columnsRow","lastFrozen","_lastFrozen","frozen","_getTranslate","_scrollLeft","frozenCellTransform","_scrollHeightUpdated","outersizer","fixedsizer","SelectionMixin","_isSelected","selectItem","deselectItem","_toggleItem","_selectedItemsChanged","_selectedInstanceChangedCallback","SortMixin","multiSort","_previousSorters","_onSorterChanged","run","sorters","_removeArrayItem","StylingMixin","cellClassNameGenerator","__cellClassNameGeneratorChanged","cellClassGenerator","generateCellClassNames","_generateCellClassNames","rowData","__generatedClasses","DropMode","BETWEEN","ON_TOP_OR_BETWEEN","ON_GRID","DropLocation","ON_TOP","ABOVE","BELOW","EMPTY","DragAndDropMixin","dropMode","rowsDraggable","dragFilter","dropFilter","__dndAutoScrollThreshold","_onDragStart","_onDragEnd","_onDragOver","_onDragLeave","_onDrop","_safari","rowRect","dataTransfer","setDragImage","clientX","clientY","rows","__getViewportRows","setData","__formatDefaultTransferData","draggedItems","setDragData","data","setDraggedItemsCount","originalEvent","_clearDragStyles","_dropLocation","_dragOverItem","__dndAutoScroll","dropAbove","__dndAutoScrolling","headerBottom","footerTop","topDiff","bottomDiff","scrollTopDelta","dragData","types","getData","dropTargetItem","dropLocation","_dragDropAccessChanged","filterDragAndDrop","_filterDragAndDrop","dragDisabled","dropDisabled","KeyboardNavigationMixin","_headerFocusable","_footerFocusable","_navigatingIsHidden","_focusedColumnOrder","_android","_onFocusIn","_onFocusOut","_onCellFocusIn","_onCellFocusOut","_isMousedown","_focusableChanged","focusable","oldFocusable","keyGroup","_detectInteracting","_ensureScrolledToIndex","_onNavigationKeyDown","indexOfChildElement","visibleItemsCount","dy","activeCell","columnIndex","isRowDetails","_elementMatches","activeRow","activeRowGroup","maxRowIndex","rowIndex","dstRowIndex","dstIsRowDetails","dstItem","_getColumns","dstColumns","dstSortedColumnOrders","maxOrderedColumnIndex","orderedColumnIndex","dstOrderedColumnIndex","dstColumnIndex","dstRow","dstCell","_scrollHorizontallyToCell","dstRect","_parseEventPath","tableIndex","rowGroup","_onInteractionKeyDown","localTarget","localTargetIsTextInput","wantInteracting","focusTarget","_predictFocusStepTarget","srcElement","tabOrder","focusexit","_onTabKeyDown","itemsFocusTarget","focusedItemRow","_onSpaceKeyDown","wasNavigating","rootTarget","_activeRowGroup","_detectFocusedItemIndex","_preventScrollerRotatingCellFocus","columnTreeLevel","_resetKeyboardNavigation","firstVisibleIndexRow","dstCellRect","dstCellIndex","tableRect","leftBoundary","rightBoundary","query","ColumnReorderingMixin","columnReorderingAllowed","_orderBaseScope","_onTrackEvent","_reorderGhost","_onTouchStart","_onTouchMove","_onTouchEnd","_onContextMenu","_startTouchReorderTimeout","_onTrackStart","touches","_draggedColumn","_onTrackEnd","headerCell","_touchDevice","_onTrack","dom","_cellFromPoint","childElementCount","_setSiblingsReorderStatus","_reorderStatus","_updateGhost","_updateGhostPosition","_autoScroller","targetColumn","_getTargetColumn","_isSwapAllowed","_isSwappableByPosition","_swapColumnOrders","_lastDragClientX","_getColumnsInOrder","useShadow","elementFromPoint","eventClientX","eventClientY","ghostRect","targetLeft","targetTop","_left","_top","_getInnerText","ghost","propertyName","_updateOrders","status","sibling","rightDiff","leftDiff","column1","column2","differentColumns","sameParent","sameFrozen","sourceCellRect","targetRect","draggedColumn","ColumnBaseMixin","resizable","parent","_footerTemplate","textAlign","_emptyCells","_headerCell","_footerCell","footerRenderer","_bodyTemplate","_templateObserver","_allCells","_findHostGrid","_gridValue","_cells","_prepareHeaderTemplate","_prepareFooterTemplate","_prepareBodyTemplate","_prepareTemplatizer","_findTemplate","_renderHeaderAndFooter","__runRenderer","__setColumnTemplateOrRenderer","cells","_setBodyTemplateOrRenderer","_setHeaderTemplateOrRenderer","headerTemplate","_setFooterTemplateOrRenderer","footerTemplate","footerCell","__updateHeaderFooterRowVisibility","_selectFirstTemplate","_rootDataHost","_flexGrowChanged","_columnPropChanged","_orderChanged","order","_widthChanged","__forceReflow","_frozenChanged","_lastFrozenChanged","_pathOrHeaderChanged","bodyTemplate","hasHeaderText","__setTextContent","pathRenderer","_generateHeader","lastIndexOf","toUpperCase","bool","_reorderStatusChanged","reorderStatus","_resizableChanged","existingHandle","_textAlignChanged","textAlignFallback","_previousHidden","GridColumnElement","autoWidth","GridOuterScrollerElement","scrollHandler","noScrollbars","_syncScrollTarget","_onMouseMove","_","offsetY","offsetX","VaadinGridStyles","safari","scrollingStyles","register","TOUCH_DEVICE","createEvent","GridElement","ScrollerElement","_this","MSStream","CSS","supports","_firefox","heightByRows","_onAnimationEnd","__hasRowsWithClientHeight","_initialColumnWidthsSet","recalculateColumnWidths","_recalculateColumnWidths","cols","_origFlexGrow","_currentWidth","cellWidth","_createCell","tagName","chrome","isColumnRow","noNotify","contentsFragment","_vacant","visibleRowCells","_columnTreeChanged","__detailsOpened__","__selected__","__level__","__expanded__","_debouncerUpdateHeights","headerHeight","footerHeight","borderBottomWidth","_heightByRowsChanged","_debouncerForceReflow","GridSorterElement","_isConnected","_pathOrDirectionChanged","isConnected","_getDisplayOrder","_directionOrOrderChanged","isSafari","GridSortColumnElement","_getHeader","GridSelectionColumnElement","selectAll","autoSelect","_indeterminate","_previousActiveItem","_selectAllHidden","__cleanCellsOfTemplateProperties","defaultHeaderTemplate","defaultBodyTemplate","_boundOnActiveItemChanged","_onActiveItemChanged","_boundOnDataProviderChanged","_onDataProviderChanged","_boundOnSelectedItemsChanged","_onSelectedItemsChanged","nextElementSibling","_onSelectAllChanged","_selectAllChangeLock","_arrayContains","_onSelectAllCheckedChanged","_isChecked","NumberFieldElement","hasControls","__previousValidInput","__onKeyDown","__onInputChange","_decreaseButtonTouchend","_decreaseValue","_increaseButtonTouchend","_increaseValue","decreaseButton","increaseButton","inputField","prefixSlot","_incrementValue","incr","_getIncrement","_incrementIsInsideTheLimits","_setValue","toFixed","__decimals","currentValue","multiplier","_getMultiplier","margin","number","_allowed","sign","_stepOrMinChanged","countDecimalPlaces","DropdownMenuOverlayElement","DropdownMenuTextFieldElement","DropdownMenuElement","TextAreaElement","_updateHeight","_textAreaValueChanged","inputWidth","valueLength","_oldValueLength","maxWidth","inputHeight","CheckboxGroupElement","_containsFocus","_checkboxes","checkbox","checkedChangedListener","_changeSelectedCheckbox","addedCheckboxes","_filterCheckboxes","_addCheckboxToValue","_removeCheckboxFromValue","_updatingValue","_updateValue","_oldValue","ComboBoxPlaceholder","ComboBoxMixin","allowCustomValue","filteredItems","_lastCommittedValue","selectedItem","itemLabelPath","itemValuePath","_clearElement","_inputElementValue","_closeOnBlurIsPrevented","_itemTemplate","dropdown","_overlaySelectedItemChanged","_onClosed","_onOpened","_onOverlayTouchAction","_selector","old","touchDevice","_isEventKey","_onArrowDown","_onArrowUp","_onEnter","_onEscape","_getItemLabel","getItemLabel","_getItemValue","_prefillFocusedItemLabel","_focusedItem","_markAllSelectionRange","_clearSelectionRange","_revertInputValue","_toggleElementChanged","_detectAndDispatchChange","_revertInputValueToValue","ensureItemsRendered","_resizeDropdown","adjustScrollPosition","focusedItem","customValue","_selectItemForValue","_inputValueChanged","_filterFromInput","_itemLabelPathChanged","oldItemLabelPath","_filteredItemsChanged","_loadingChanged","_selectedItemChanged","_selectedItem","_isValidValue","oldItems","_ensureItemsOrDataProvider","_itemsOrPathsChanged","valueIndex","_indexOfValue","_setOverlayItems","indexOfLabel","_repositionOverlay","previouslySelectedItem","_getRootTemplate","_itemTemplateInstance","elem","_preventInputBlur","_restoreInputBlur","ComboBoxDataProviderMixin","_pendingRequests","__placeHolder","_dataProviderClearFilter","_shouldLoadPage","_dataProviderFilterChanged","_ensureFirstPage","_forceNextRequest","loadedItem","restoreOldValueCallback","_warnDataProviderValue","ComboBoxItemElement","comboBoxOverlay","__dataHost","_comboBox","_rendererOrItemChanged","_updateLabel","_updateTemplateInstanceVariable","variable","ComboBoxOverlayElement","loader","ComboBoxDropdownElement","alignedAbove","_isPositionFixed","eventPath","offsetParent","_getOffsetParent","_verticalOffset","overlayRect","_shouldAlignAbove","_translateY","_devicePixelRatio","devicePixelRatio","justifyContent","ComboBoxDropdownWrapperElement","_itemLabelPath","_itemValuePath","_itemIdPath","_fireTouchAction","_getItems","_initDropdown","_templateChanged","_scroller","_selectorChanged","selector","_patchWheelOverScrolling","_setOverlayHeight","maxHeight","_maxOverlayHeight","minHeight","_getFocusedItem","focusedIndex","_isItemSelected","_onItemClick","__requestItemByIndex","_isItemFocused","_getAriaSelected","_getAriaRole","_focusedIndexChanged","_scrollIntoView","_visibleItemsCount","targetIndex","physicalItem","physicalItemRect","scrollTopAdjust","_viewportTotalPaddingBottom","scrolledToTop","scrolledToBottom","_cachedViewportTotalPaddingBottom","itemsStyle","paddingBottom","sum","flushDebouncer","_selectItem","_hidden","itemsChange","ComboBoxLightElement","attrForValue","_boundInputValueChanged","_setInputElement","_propertyForValue","dashToCamelCase","RadioButtonElement","appVersion","_addListeners","MouseEvent","UploadFileElement","file","_fileAborted","abort","_remove","_formatProgressValue","progress","_fireFileEvent","_toggleHostAttribute","shouldHave","UploadElement","nodrop","method","headers","timeout","_dragover","files","maxFiles","maxFilesReached","accept","maxFileSize","_dragoverValid","formDataName","noAuto","withCredentials","dropFiles","one","many","addFiles","tooManyFiles","fileIsTooBig","incorrectFileType","uploading","connecting","stalled","processing","held","remainingTime","unknown","serverUnavailable","unexpectedServerError","forbidden","units","_onDragover","_onDragleave","_onFileRetry","_onFileAbort","_onFileRemove","_onFileStart","_formatSize","bytes","formatSize","base","sizeBase","unit","dec","pow","_splitTimeByUnits","time","unitSizes","timeValues","_formatTime","seconds","formatTime","_formatFileProgress","totalStr","loaded","remainingStr","_maxFilesAdded","numFiles","dropEffect","_addFiles","_createXhr","XMLHttpRequest","_configureXhr","xhr","parse","setRequestHeader","_setStatus","total","elapsed","elapsedStr","remaining","speed","loadedStr","uploadFiles","complete","_uploadFile","ini","stalledId","last","upload","onprogress","_notifyFileChanges","readyState","formData","FormData","uploadTarget","append","onloadstart","send","_retryFileUpload","_abortFileUpload","hasOwnProperty","_addFile","fileExt","re","_removeFile","_onAddFilesTouchEnd","__resetMouseCanceller","_onAddFilesClick","resetMouseCanceller","fileInput","_onFileInputChange","_dragoverChanged","dragover","_dragoverValidChanged","dragoverValid","_i18nPlural","plural","_isMultiple","EmailFieldElement","ComboBoxElement","attributeChanged","toggleButton","_getPositionTarget","deps","flow","emits","platform","maxTouchPoints","reset","_cancelTimer","touchJob","touchStartCoords","_timerId","_fired","touchstart","changedTouches","ct","fire","prevent","touchmove","moveThreshold","touchend","contextmenu","ev","DeviceDetectorElement","phone","touch","_touch","wide","ContextMenuItemElement","ContextMenuListBoxElement","ItemsMixin","__itemsOutsideClickListener","__forwardFocus","getFirstChild","parentOverlay","__openSubMenu","subMenu","itemElement","listenOn","itemRect","paddingTop","_setParentOverlay","__itemsRenderer","menu","__initMenu","closeOn","listBox","component","__toggleMenuComponentAttribute","attribute","on","openOn","expandedItem","__openListenerActive","openSubMenu","ContextMenuOverlayElement","_themeChanged","getBoundaries","contentRect","yMax","parentStyle","xMax","ContextMenuElement","_context","_boundClose","_boundOpen","_boundOnGlobalContextMenu","_onGlobalContextMenu","__boundOnScroll","__onScroll","_setOpened","_onVaadinOverlayOpen","__alignOverlayPosition","_targetOrOpenOnChanged","_oldListenOn","_oldOpenOn","_unlisten","webkitTouchCallout","webkitUserSelect","msUserSelect","userSelect","_listen","_setListenOnUserSelect","getSelection","removeAllRanges","_closeOnChanged","oldCloseOn","evtOverlay","_contextChanged","_contextTarget","targets","__x","_getEventCoordinate","__pageXOffset","pageXOffset","__y","__pageYOffset","pageYOffset","yDiff","xDiff","__adjustPosition","coord","wdthVport","hghtVport","alignedToParent","parentContentRect","getPadding","padding","evType","gestures","removeListener","GridTreeToggleElement","leaf","_levelChanged","_debouncerUpdateLevel","RadioGroupElement","_checkedButton","_changeSelectedButton","_filterRadioButtons","_radioButtons","_updateDisableButtons","_readonlyChanged","checkedRadioButton","_selectPreviousButton","_selectNextButton","_selectButton","setFocusRing","_hasEnabledButtons","every","nextButton","previousButton","previousElementSibling","lastElementChild","fireChangeEvent","newCheckedButton","GridTreeColumnElement","itemHasChildrenPath","__isLeafItem","__getToggleContent"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130]}