{"version":3,"sources":["webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAvatar/VAvatar.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAvatar/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/util/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/VColorPickerPreview.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/VColorPickerCanvas.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/VColorPickerEdit.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/VColorPickerSwatches.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VColorPicker/VColorPicker.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VApp/VApp.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VApp/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCombobox/VCombobox.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBtn/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBtn/VBtn.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/util/timestamp.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAlert/VAlert.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCounter/VCounter.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCounter/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCard/VCard.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCard/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBreadcrumbs/VBreadcrumbsItem.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBreadcrumbs/VBreadcrumbsDivider.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBreadcrumbs/VBreadcrumbs.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBadge/VBadge.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VChip/VChip.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCheckbox/VCheckbox.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCheckbox/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBanner/VBanner.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAppBar/VAppBar.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAppBar/VAppBarNavIcon.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAppBar/VAppBarTitle.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBottomSheet/VBottomSheet.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCarousel/VCarousel.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCarousel/VCarouselItem.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBtnToggle/VBtnToggle.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VContent/VContent.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VChipGroup/VChipGroup.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/mixins/mouse.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/mixins/times.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/modes/common.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/modes/stack.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/modes/column.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/modes/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/util/props.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/mixins/calendar-base.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/util/events.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/mixins/calendar-with-events.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/VCalendarWeekly.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/VCalendarMonthly.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/mixins/calendar-with-intervals.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/VCalendarDaily.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/util/parser.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/VCalendarCategory.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VCalendar/VCalendar.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAutocomplete/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VBottomNavigation/VBottomNavigation.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VChip/index.ts","webpack:///./node_modules/@gr/authentication/node_modules/vuetify/src/components/VAutocomplete/VAutocomplete.ts"],"names":["mixins","Colorable","Measurable","Roundable","extend","name","props","left","Boolean","right","size","type","Number","String","default","computed","classes","this","roundedClasses","styles","height","convertToUnit","minWidth","width","measurableStyles","render","h","data","staticClass","class","style","on","$listeners","setBackgroundColor","color","$slots","VAvatar","fromHSVA","hsva","hexa","HSVAtoHex","hsla","HSVAtoHSLA","rgba","HSVAtoRGBA","alpha","a","hex","substr","hue","fromHSLA","HSLAtoHSVA","fromRGBA","RGBAtoHSVA","RGBAtoHex","fromHexa","HexToHSVA","fromHex","parseHex","has","obj","key","every","k","hasOwnProperty","parseColor","oldColor","r","g","b","parseFloat","stripAlpha","rest","extractColor","input","length","shouldStrip","hasAlpha","Vue","Object","disabled","hideAlpha","methods","genAlpha","genTrack","thumbColor","hideDetails","value","step","min","max","backgroundImage","undefined","$vuetify","rtl","RGBtoCSS","val","$emit","genSliders","$createElement","genHue","genDot","background","RGBAtoCSS","options","VSlider","dotSize","boundingRect","top","dot","x","s","parseInt","y","v","watch","mounted","updateCanvas","emitColor","clamp","canvas","$refs","ctx","getContext","saturationGradient","createLinearGradient","addColorStop","fillStyle","fillRect","valueGradient","handleClick","e","$el","getBoundingClientRect","clientX","clientY","handleMouseDown","preventDefault","window","addEventListener","handleMouseMove","handleMouseUp","removeEventListener","genCanvas","ref","attrs","radius","transform","click","mousedown","modes","inputs","from","hideModeSwitch","mode","validator","keys","includes","internalMode","currentMode","created","getValue","Math","round","parseValue","changeMode","index","indexOf","newMode","genInput","target","domProps","toUpperCase","genInputs","endsWith","maxlength","change","el","slice","map","newVal","assign","genSwitch","VBtn","small","icon","VIcon","parseDefaultColors","colors","base","darken4","darken3","darken2","darken1","lighten1","lighten2","lighten3","lighten4","lighten5","black","white","transparent","Themeable","swatches","Array","maxWidth","maxHeight","genColor","content","deepEqual","dark","contrastRatio","light","genSwatches","swatch","Elevatable","canvasHeight","flat","hideCanvas","hideSliders","hideInputs","showSwatches","swatchesMaxHeight","internalValue","handler","updateColor","immediate","VColorPickerCanvas","genControls","genPreview","genEdit","VColorPickerEdit","VColorPickerPreview","VColorPickerSwatches","VSheet","themeClasses","elevationClasses","id","isDark","theme","beforeCreate","$root","Error","wrapper","VApp","VAutocomplete","delimiters","returnObject","editingIndex","computedCounterValue","multiple","selectedItems","internalSearch","toString","hasSlot","VSelect","call","isAnyValueAllowed","menuCanShow","isFocused","hasDisplayedItems","hideNoData","searchIsDirty","onInternalSearchChanged","delimiter","find","d","updateTags","updateMenuDimensions","paste","onPaste","genChipSelection","item","chip","componentOptions","listeners","dblclick","getText","selectedIndex","onChipInput","onEnterDown","getMenuIndex","$nextTick","updateSelf","onKeyDown","keyCode","ctrlKey","keyCodes","home","end","selectionStart","enter","changeSelectedIndex","onTabDown","stopPropagation","selectItem","updateEditing","toLocaleLowerCase","setSelectedItems","setValue","findIndex","splice","push","updateCombobox","isUsingSlot","$scopedSlots","selection","hasChips","menuIndex","itemToSelect","event","pastedItemText","clipboardData","_event$clipboardData","getData","findExistingIndex","clearableCallback","baseMixins","Routable","Positionable","Sizeable","GroupableFactory","ToggleableFactory","activeClass","btnToggle","block","depressed","fab","loading","outlined","plain","retainFocusOnClick","rounded","tag","text","tile","proxyClass","absolute","bottom","isElevated","fixed","hasBg","isRound","to","groupClasses","sizeableClasses","computedElevation","computedRipple","defaultRipple","circle","ripple","elevation","breakingProps","forEach","original","replacement","$attrs","breaking","detail","blur","toggle","genContent","genLoader","loader","VProgressCircular","indeterminate","children","generateRouteLink","setColor","setTextColor","JSON","stringify","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","MINUTES_IN_DAY","HOUR_MAX","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","getStartOfWeek","timestamp","weekdays","today","start","copyTimestamp","findWeekday","prevDay","updateFormatted","updateRelative","hasTime","getEndOfWeek","getStartOfMonth","day","updateWeekday","getEndOfMonth","daysInMonth","year","month","validateTime","isFinite","exec","hour","minute","parseTime","parts","validateTimestamp","Date","parseTimestamp","required","now","date","parseDate","time","weekday","hasDay","past","present","future","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getDayIdentifier","getTimeIdentifier","getTimestampIdentifier","isTimedless","updateHasTime","getTime","updateMinutes","minutes","floor","getWeekday","_","m","C","Y","isLeapYear","padNumber","padded","str","nextDay","relativeDays","mover","days","diffMinutes","M","D","maxDays","getWeekdaySkips","skips","filled","i","skip","j","next","timestampToDate","createDayList","weekdaySkips","stop","current","currentIdentifier","stopped","createIntervalList","first","count","intervals","mins","int","createNativeLocaleFormatter","locale","getOptions","emptyFormatter","_t","_s","Intl","DateTimeFormat","short","intlFormatter","format","functional","directives","indeterminateIcon","onIcon","offIcon","center","mergeData","wrapInArray","f","Toggleable","Transitionable","border","closeLabel","coloredBorder","dense","dismissible","closeIcon","prominent","__cachedBorder","computedColor","__cachedDismissible","iconColor","lang","t","isActive","__cachedIcon","computedIcon","hasColoredIcon","hasText","genWrapper","prepend","append","close","genAlert","role","listeners$","transition","origin","isGreater","functionalThemeClasses","VCounter","Loadable","hover","img","link","loaderHeight","raised","isClickable","genProgress","tabindex","VCardActions","createSimpleFunctional","VCardSubtitle","VCardText","VCardTitle","$_vuetify_subcomponents","VCard","isLink","divider","items","large","genDivider","VBreadcrumbsDivider","genItems","VBreadcrumbsItem","join","PositionableFactory","avatar","bordered","label","inline","offsetX","offsetY","overlap","computedBottom","computedYOffset","computedLeft","isRtl","computedXOffset","computedRight","computedTop","calcPosition","offset","genBadge","title","badge","genBadgeContent","slot","getSlot","genBadgeWrapper","unshift","active","chipGroup","draggable","filter","filterIcon","pill","textColor","hasClose","genFilter","VExpandXTransition","genClose","Selectable","inputIndeterminate","VInput","validationState","isDisabled","hasError","shouldValidate","hasSuccess","hasColor","genCheckbox","attrs$","checkboxAttrs","genRipple","rippleState","genDefaultSlot","genLabel","VSimpleCheckbox","Mobile","inheritAttrs","app","singleLine","sticky","hasIcon","isMobile","isSticky","application","bar","position","zIndex","iconClick","genIcon","genText","genActions","dismiss","VExpandTransition","VToolbar","Scrollable","SSRBootable","Applicationable","Scroll","provide","VAppBar","clippedLeft","clippedRight","collapseOnScroll","elevateOnScroll","fadeImgOnScroll","hideOnScroll","invertedScroll","scrollOffScreen","shrinkOnScroll","applicationProperty","canScroll","isBooted","collapse","hideShadow","currentScroll","scrollRatio","threshold","computedScrollThreshold","computedContentHeight","computedOriginalHeight","computedFontSize","isProminent","computedMarginTop","computedOpacity","isExtended","extensionHeight","scrollThreshold","computedTransform","computedHeight","isCollapsed","fontSize","marginTop","callUpdate","genBackground","_b","opacity","updateApplication","thresholdMet","isScrollingUp","currentThreshold","savedScroll","arg","scrollTarget","onScroll","slots","trim","defaultSlot","inject","contentWidth","ratio","easeInOutCubic","visibility","updateDimensions","dimensions","placeholder","scrollWidth","VDialog","inset","VWindow","continuous","cycle","delimiterIcon","hideDelimiters","hideDelimiterBackground","interval","mandatory","progress","progressColor","showArrows","verticalDelimiters","parentTheme","internalHeight","slideTimeout","isVertical","oldVal","restartTimeout","clearTimeout","startTimeout","genControlIcons","genDelimiters","child","ButtonGroup","VProgressLinear","internalIndex","requestAnimationFrame","setTimeout","VWindowItem","VImg","windowGroup","scopedSlots","genWindowItem","backgroundColor","borderless","group","shaped","genData","VMain","deprecate","node","BaseSlideGroup","column","scrollOffset","onResize","getDefaultMouseEventHandlers","suffix","getEvent","getMouseEventHandlers","prevent","result","events","eventOptions","prefix","passive","once","capture","mouseEvent","button","buttons","classSeparator","eventTargetClasses","currentTarget","_e$currentTarget","className","split","currentTargets","document","elementsFromPoint","changedTouches","some","c","_e$target","isSameNode","dispatchEvent","TouchEvent","targetTouches","touches","isArray","times","parsedNow","updateTimes","setPresent","getNow","updateDay","updateTime","MILLIS_IN_DAY","getVisuals","minStart","visuals","columnCount","sort","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","exclude","setColumnCount","groups","groupVisual","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","getOpenGroup","timed","intersected","groupStart","groupEnd","getOverlapGroupHandler","firstWeekday","reset","dayEvents","visual","targetGroup","FULL_WIDTH","DEFAULT_OFFSET","WIDTH_MULTIPLIER","stack","overlapThreshold","getGroups","nodes","getNode","getNextIndex","parent","getParent","sibling","addTime","getOverlappingRange","grand","grandNext","calculateBounds","columns","getMaxChildIndex","spaceLeft","spaceWidth","columnWidthMultiplier","getColumnWidthMultiplier","columnOffset","columnWidth","hasFullWidth","maxColumn","minColumn","reduce","getOverlappingIndices","indices","other","indexMin","indexMax","returnFirstColumn","overlapping","n","added","childMax","identifier","removeMinutes","totalMinutes","addHours","addMinutes","CalendarEventOverlapModes","validate","validateWeekdays","hideHeader","shortWeekdays","weekdayFormat","Function","dayFormat","shortIntervals","intervalHeight","validateNumber","intervalWidth","intervalMinutes","firstInterval","firstTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","weeks","localeFirstDayOfYear","minWeeks","shortMonths","showMonthOnFirst","showWeek","monthFormat","calendar","category","categories","categoryText","categoryHideDynamic","categoryShowAll","categoryForInvalid","categoryDays","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventName","eventOverlapThreshold","eventOverlapMode","eventMore","eventMoreText","eventRipple","eventMarginBottom","ints","visited","wrapped","Localable","Mouse","Times","Resize","parsedWeekdays","weekdaySkipsReverse","reversed","reverse","parsedStart","parsedEnd","dayFormatter","timeZone","currentLocale","_tms","_short","weekdayFormatter","longOptions","shortOptions","getRelativeClasses","outside","getFormatter","parseEvent","startProperty","endProperty","startInput","endInput","startParsed","endParsed","endOffset","allDay","isEventOn","dayIdentifier","isEventHiddenOn","isEventStart","isEventOverlapping","WIDTH_FULL","WIDTH_START","CalendarBase","noEvents","parsedEvents","parsedEventOverlapThreshold","eventTimedFunction","eventCategoryFunction","eventTextColorFunction","eventNameFunction","timedEvent","escapeHTML","eventModeFunction","eventWeekdays","categoryMode","eventColorFunction","formatTime","withTime","ampm","formatter","updateEventVisibility","eventsMap","getEventsMap","more","parentBounds","last","eventsSorted","hidden","hide","display","innerHTML","elements","getAttribute","parentElement","genDayEvent","week","weekdayIdentifier","scope","eventParsed","genEvent","refInFor","genTimedEvent","timeDelta","timeToY","scopeInput","overlapsNoon","singline","timeSummary","eventSummary","eventSummaryClass","nativeEvent","genName","genPlaceholder","genMore","getVisibleEvents","isEventForCategory","categoryName","getEventsForDay","getEventsForDayAll","getEventsForDayTimed","getScopedSlots","isNode","getSlotChildren","getter","mapper","mapped","slotDay","slotDayHeader","slotDayBody","concat","parsedMinWeeks","minDays","MAX_SAFE_INTEGER","todayWeek","monthFormatter","isOutside","genHead","genHeadDays","header","genHeadDay","genWeeks","weekDays","genWeek","getWeekNumber","weekNumber","weekNodes","genDay","genWeekNumber","determineDay","genDayLabel","genDayLabelButton","hasMonth","genDayMonth","dragstart","VCalendarWeekly","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parsedFirstTime","firstMinute","bodyHeight","intervalFormatter","shortHourOptions","tms","showIntervalLabelDefault","isFirst","intervalStyleDefault","_interval","getTimestampAtEvent","bounds","baseMinutes","touchEvent","addIntervals","getSlotScope","minutesToPixels","scrollToTime","pane","scrollArea","scrollTop","gap","CalendarWithIntervals","scrollPush","init","getScrollPush","area","offsetWidth","marginRight","genHeadIntervals","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genBody","genScrollArea","genPane","genDayContainer","genBodyIntervals","genDays","genDayIntervals","genDayBody","genDayInterval","styler","genIntervalLabels","genIntervalLabel","shower","show","modifiers","quiet","parsedCategoryText","getParsedCategories","VCalendarDaily","parsedCategories","genDayHeaderCategory","getCategoryScope","cat","headerTitle","genDayHeaderCategoryTitle","fill","categoryIndex","genDayBodyCategory","CalendarWithEvents","lastStart","lastEnd","parsedValue","parsedCategoryDays","renderProps","around","component","VCalendarMonthly","VCalendarCategory","getCategoryList","spanYears","spanMonths","monthShortFormatter","monthLongFormatter","checkChange","updated","move","amount","moved","forward","limit","prev","$children","categoryMap","categoryLength","ev","$props","Proxyable","grow","horizontal","inputValue","shift","clientHeight","updateValue","VChip","defaultMenuProps","VSelectMenuProps","offsetOverflow","allowOverflow","autoSelectFirst","queryText","itemText","menuProps","noFilter","searchInput","lazySearch","computedItems","filteredItems","selectedValues","hideSelected","hasItem","currentRange","selectedItem","isSearching","allItems","getPropertyFromItem","get","set","isDirty","$_menuProps","contentClass","valueComparator","listData","virtualizedItems","onCopy","select","isMenuActive","activateMenu","setSearch","destroyed","onFilteredItemsChanged","preSelectedItem","menu","listIndex","setMenuIndex","getTiles","backspace","delete","deleteCurrentItem","curIndex","curItem","isInteractive","getDisabled","lastIndex","nextIndex","nextItem","VTextField","getObjectValueByPath","autocomplete","genInputSlot","genSelections","onClick","onFocus","isAppendInner","onInput","badInput","validity","onSpaceDown","onUpDown","currentItem","currentItemText","setData"],"mappings":"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","file":"js/gr-authentication~8ffd97f3.2d82e809.js","sourcesContent":["import './VAvatar.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Measurable from '../../mixins/measurable'\nimport Roundable from '../../mixins/roundable'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n Colorable,\n Measurable,\n Roundable,\n /* @vue/component */\n).extend({\n name: 'v-avatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n size: {\n type: [Number, String],\n default: 48,\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-avatar--left': this.left,\n 'v-avatar--right': this.right,\n ...this.roundedClasses,\n }\n },\n styles (): object {\n return {\n height: convertToUnit(this.size),\n minWidth: convertToUnit(this.size),\n width: convertToUnit(this.size),\n ...this.measurableStyles,\n }\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-avatar',\n class: this.classes,\n style: this.styles,\n on: this.$listeners,\n }\n\n return h('div', this.setBackgroundColor(this.color, data), this.$slots.default)\n },\n})\n","import VAvatar from './VAvatar'\n\nexport { VAvatar }\nexport default VAvatar\n","// Utilities\nimport {\n HSVA,\n HSVAtoRGBA,\n HSVAtoHex,\n RGBA,\n Hex,\n RGBAtoHSVA,\n HexToHSVA,\n HSLA,\n HSVAtoHSLA,\n RGBAtoHex,\n HSLAtoHSVA,\n parseHex,\n Hexa,\n} from '../../../util/colorUtils'\n\nexport interface VColorPickerColor {\n alpha: number\n hex: Hex\n hexa: Hexa\n hsla: HSLA\n hsva: HSVA\n hue: number\n rgba: RGBA\n}\n\nexport function fromHSVA (hsva: HSVA): VColorPickerColor {\n hsva = { ...hsva }\n const hexa = HSVAtoHex(hsva)\n const hsla = HSVAtoHSLA(hsva)\n const rgba = HSVAtoRGBA(hsva)\n return {\n alpha: hsva.a,\n hex: hexa.substr(0, 7),\n hexa,\n hsla,\n hsva,\n hue: hsva.h,\n rgba,\n }\n}\n\nexport function fromHSLA (hsla: HSLA): VColorPickerColor {\n const hsva = HSLAtoHSVA(hsla)\n const hexa = HSVAtoHex(hsva)\n const rgba = HSVAtoRGBA(hsva)\n return {\n alpha: hsva.a,\n hex: hexa.substr(0, 7),\n hexa,\n hsla,\n hsva,\n hue: hsva.h,\n rgba,\n }\n}\n\nexport function fromRGBA (rgba: RGBA): VColorPickerColor {\n const hsva = RGBAtoHSVA(rgba)\n const hexa = RGBAtoHex(rgba)\n const hsla = HSVAtoHSLA(hsva)\n return {\n alpha: hsva.a,\n hex: hexa.substr(0, 7),\n hexa,\n hsla,\n hsva,\n hue: hsva.h,\n rgba,\n }\n}\n\nexport function fromHexa (hexa: Hexa): VColorPickerColor {\n const hsva = HexToHSVA(hexa)\n const hsla = HSVAtoHSLA(hsva)\n const rgba = HSVAtoRGBA(hsva)\n return {\n alpha: hsva.a,\n hex: hexa.substr(0, 7),\n hexa,\n hsla,\n hsva,\n hue: hsva.h,\n rgba,\n }\n}\n\nexport function fromHex (hex: Hex): VColorPickerColor {\n return fromHexa(parseHex(hex))\n}\n\nfunction has (obj: object, key: string[]) {\n return key.every(k => obj.hasOwnProperty(k))\n}\n\nexport function parseColor (color: any, oldColor: VColorPickerColor | null) {\n if (!color) return fromRGBA({ r: 255, g: 0, b: 0, a: 1 })\n\n if (typeof color === 'string') {\n if (color === 'transparent') return fromHexa('#00000000')\n\n const hex = parseHex(color)\n\n if (oldColor && hex === oldColor.hexa) return oldColor\n else return fromHexa(hex)\n }\n\n if (typeof color === 'object') {\n if (color.hasOwnProperty('alpha')) return color\n\n const a = color.hasOwnProperty('a') ? parseFloat(color.a) : 1\n\n if (has(color, ['r', 'g', 'b'])) {\n if (oldColor && color === oldColor.rgba) return oldColor\n else return fromRGBA({ ...color, a })\n } else if (has(color, ['h', 's', 'l'])) {\n if (oldColor && color === oldColor.hsla) return oldColor\n else return fromHSLA({ ...color, a })\n } else if (has(color, ['h', 's', 'v'])) {\n if (oldColor && color === oldColor.hsva) return oldColor\n else return fromHSVA({ ...color, a })\n }\n }\n\n return fromRGBA({ r: 255, g: 0, b: 0, a: 1 })\n}\n\nfunction stripAlpha (color: any, stripAlpha: boolean) {\n if (stripAlpha) {\n const { a, ...rest } = color\n\n return rest\n }\n\n return color\n}\n\nexport function extractColor (color: VColorPickerColor, input: any) {\n if (input == null) return color\n\n if (typeof input === 'string') {\n return input.length === 7 ? color.hex : color.hexa\n }\n\n if (typeof input === 'object') {\n const shouldStrip = typeof input.a === 'number' && input.a === 0 ? !!input.a : !input.a\n if (has(input, ['r', 'g', 'b'])) return stripAlpha(color.rgba, shouldStrip)\n else if (has(input, ['h', 's', 'l'])) return stripAlpha(color.hsla, shouldStrip)\n else if (has(input, ['h', 's', 'v'])) return stripAlpha(color.hsva, shouldStrip)\n }\n\n return color\n}\n\nexport function hasAlpha (color: any) {\n if (!color) return false\n\n if (typeof color === 'string') {\n return color.length > 7\n }\n\n if (typeof color === 'object') {\n return has(color, ['a']) || has(color, ['alpha'])\n }\n\n return false\n}\n","// Styles\nimport './VColorPickerPreview.sass'\n\n// Components\nimport VSlider from '../VSlider/VSlider'\n\n// Utilities\nimport { RGBtoCSS, RGBAtoCSS } from '../../util/colorUtils'\n\n// Types\nimport Vue, { VNode, VNodeData, PropType } from 'vue'\nimport { VColorPickerColor, fromHSVA } from './util'\n\nexport default Vue.extend({\n name: 'v-color-picker-preview',\n\n props: {\n color: Object as PropType,\n disabled: Boolean,\n hideAlpha: Boolean,\n },\n\n methods: {\n genAlpha (): VNode {\n return this.genTrack({\n staticClass: 'v-color-picker__alpha',\n props: {\n thumbColor: 'grey lighten-2',\n hideDetails: true,\n value: this.color.alpha,\n step: 0,\n min: 0,\n max: 1,\n },\n style: {\n backgroundImage: this.disabled\n ? undefined\n : `linear-gradient(to ${this.$vuetify.rtl ? 'left' : 'right'}, transparent, ${RGBtoCSS(this.color.rgba)})`,\n },\n on: {\n input: (val: number) => this.color.alpha !== val && this.$emit('update:color', fromHSVA({ ...this.color.hsva, a: val })),\n },\n })\n },\n genSliders (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-color-picker__sliders',\n }, [\n this.genHue(),\n !this.hideAlpha && this.genAlpha(),\n ])\n },\n genDot (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-color-picker__dot',\n }, [\n this.$createElement('div', {\n style: {\n background: RGBAtoCSS(this.color.rgba),\n },\n }),\n ])\n },\n genHue (): VNode {\n return this.genTrack({\n staticClass: 'v-color-picker__hue',\n props: {\n thumbColor: 'grey lighten-2',\n hideDetails: true,\n value: this.color.hue,\n step: 0,\n min: 0,\n max: 360,\n },\n on: {\n input: (val: number) => this.color.hue !== val && this.$emit('update:color', fromHSVA({ ...this.color.hsva, h: val })),\n },\n })\n },\n genTrack (options: VNodeData): VNode {\n return this.$createElement(VSlider, {\n class: 'v-color-picker__track',\n ...options,\n props: {\n disabled: this.disabled,\n ...options.props,\n },\n })\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-color-picker__preview',\n class: {\n 'v-color-picker__preview--hide-alpha': this.hideAlpha,\n },\n }, [\n this.genDot(),\n this.genSliders(),\n ])\n },\n})\n","// Styles\nimport './VColorPickerCanvas.sass'\n\n// Helpers\nimport { clamp, convertToUnit } from '../../util/helpers'\nimport { fromHSVA, VColorPickerColor, fromRGBA } from './util'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\n\nexport default Vue.extend({\n name: 'v-color-picker-canvas',\n\n props: {\n color: {\n type: Object as PropType,\n default: () => fromRGBA({ r: 255, g: 0, b: 0, a: 1 }),\n },\n disabled: Boolean,\n dotSize: {\n type: [Number, String],\n default: 10,\n },\n height: {\n type: [Number, String],\n default: 150,\n },\n width: {\n type: [Number, String],\n default: 300,\n },\n },\n\n data () {\n return {\n boundingRect: {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n } as ClientRect,\n }\n },\n\n computed: {\n dot (): { x: number, y: number} {\n if (!this.color) return { x: 0, y: 0 }\n\n return {\n x: this.color.hsva.s * parseInt(this.width, 10),\n y: (1 - this.color.hsva.v) * parseInt(this.height, 10),\n }\n },\n },\n\n watch: {\n 'color.hue': 'updateCanvas',\n },\n\n mounted () {\n this.updateCanvas()\n },\n\n methods: {\n emitColor (x: number, y: number) {\n const { left, top, width, height } = this.boundingRect\n\n this.$emit('update:color', fromHSVA({\n h: this.color.hue,\n s: clamp(x - left, 0, width) / width,\n v: 1 - clamp(y - top, 0, height) / height,\n a: this.color.alpha,\n }))\n },\n updateCanvas () {\n if (!this.color) return\n\n const canvas = this.$refs.canvas as HTMLCanvasElement\n const ctx = canvas.getContext('2d')\n\n if (!ctx) return\n\n const saturationGradient = ctx.createLinearGradient(0, 0, canvas.width, 0)\n saturationGradient.addColorStop(0, 'hsla(0, 0%, 100%, 1)') // white\n saturationGradient.addColorStop(1, `hsla(${this.color.hue}, 100%, 50%, 1)`)\n ctx.fillStyle = saturationGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n\n const valueGradient = ctx.createLinearGradient(0, 0, 0, canvas.height)\n valueGradient.addColorStop(0, 'hsla(0, 0%, 100%, 0)') // transparent\n valueGradient.addColorStop(1, 'hsla(0, 0%, 0%, 1)') // black\n ctx.fillStyle = valueGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n },\n handleClick (e: MouseEvent) {\n if (this.disabled) return\n\n this.boundingRect = this.$el.getBoundingClientRect()\n this.emitColor(e.clientX, e.clientY)\n },\n handleMouseDown (e: MouseEvent) {\n // To prevent selection while moving cursor\n e.preventDefault()\n\n if (this.disabled) return\n\n this.boundingRect = this.$el.getBoundingClientRect()\n\n window.addEventListener('mousemove', this.handleMouseMove)\n window.addEventListener('mouseup', this.handleMouseUp)\n },\n handleMouseMove (e: MouseEvent) {\n if (this.disabled) return\n\n this.emitColor(e.clientX, e.clientY)\n },\n handleMouseUp () {\n window.removeEventListener('mousemove', this.handleMouseMove)\n window.removeEventListener('mouseup', this.handleMouseUp)\n },\n genCanvas (): VNode {\n return this.$createElement('canvas', {\n ref: 'canvas',\n attrs: {\n width: this.width,\n height: this.height,\n },\n })\n },\n genDot (): VNode {\n const radius = parseInt(this.dotSize, 10) / 2\n const x = convertToUnit(this.dot.x - radius)\n const y = convertToUnit(this.dot.y - radius)\n\n return this.$createElement('div', {\n staticClass: 'v-color-picker__canvas-dot',\n class: {\n 'v-color-picker__canvas-dot--disabled': this.disabled,\n },\n style: {\n width: convertToUnit(this.dotSize),\n height: convertToUnit(this.dotSize),\n transform: `translate(${x}, ${y})`,\n },\n })\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-color-picker__canvas',\n style: {\n width: convertToUnit(this.width),\n height: convertToUnit(this.height),\n },\n on: {\n click: this.handleClick,\n mousedown: this.handleMouseDown,\n },\n }, [\n this.genCanvas(),\n this.genDot(),\n ])\n },\n})\n","// Styles\nimport './VColorPickerEdit.sass'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Helpers\nimport { parseHex } from '../../util/colorUtils'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { VColorPickerColor, fromRGBA, fromHexa, fromHSLA } from './util'\n\ntype Input = [string, number, string]\n\nexport type Mode = {\n inputs?: Input[]\n from: Function\n}\n\nexport const modes = {\n rgba: {\n inputs: [\n ['r', 255, 'int'],\n ['g', 255, 'int'],\n ['b', 255, 'int'],\n ['a', 1, 'float'],\n ],\n from: fromRGBA,\n },\n hsla: {\n inputs: [\n ['h', 360, 'int'],\n ['s', 1, 'float'],\n ['l', 1, 'float'],\n ['a', 1, 'float'],\n ],\n from: fromHSLA,\n },\n hexa: {\n from: fromHexa,\n },\n} as { [key: string]: Mode }\n\nexport default Vue.extend({\n name: 'v-color-picker-edit',\n\n props: {\n color: Object as PropType,\n disabled: Boolean,\n hideAlpha: Boolean,\n hideModeSwitch: Boolean,\n mode: {\n type: String,\n default: 'rgba',\n validator: (v: string) => Object.keys(modes).includes(v),\n },\n },\n\n data () {\n return {\n modes,\n internalMode: this.mode,\n }\n },\n\n computed: {\n currentMode (): Mode {\n return this.modes[this.internalMode]\n },\n },\n\n watch: {\n mode (mode) {\n this.internalMode = mode\n },\n },\n\n created () {\n this.internalMode = this.mode\n },\n\n methods: {\n getValue (v: any, type: string) {\n if (type === 'float') return Math.round(v * 100) / 100\n else if (type === 'int') return Math.round(v)\n else return 0\n },\n parseValue (v: string, type: string) {\n if (type === 'float') return parseFloat(v)\n else if (type === 'int') return parseInt(v, 10) || 0\n else return 0\n },\n changeMode () {\n const modes = Object.keys(this.modes)\n const index = modes.indexOf(this.internalMode)\n const newMode = modes[(index + 1) % modes.length]\n this.internalMode = newMode\n this.$emit('update:mode', newMode)\n },\n genInput (target: string, attrs: any, value: any, on: any): VNode {\n return this.$createElement('div', {\n staticClass: 'v-color-picker__input',\n }, [\n this.$createElement('input', {\n key: target,\n attrs,\n domProps: {\n value,\n },\n on,\n }),\n this.$createElement('span', target.toUpperCase()),\n ])\n },\n genInputs (): VNode[] | VNode {\n if (this.internalMode === 'hexa') {\n const hex = this.color.hexa\n const value = this.hideAlpha && hex.endsWith('FF') ? hex.substr(0, 7) : hex\n return this.genInput(\n 'hex',\n {\n maxlength: this.hideAlpha ? 7 : 9,\n disabled: this.disabled,\n },\n value,\n {\n change: (e: Event) => {\n const el = e.target as HTMLInputElement\n this.$emit('update:color', this.currentMode.from(parseHex(el.value)))\n },\n }\n )\n } else {\n const inputs = this.hideAlpha ? this.currentMode.inputs!.slice(0, -1) : this.currentMode.inputs!\n return inputs.map(([target, max, type]) => {\n const value = this.color[this.internalMode as keyof VColorPickerColor] as any\n return this.genInput(\n target,\n {\n type: 'number',\n min: 0,\n max,\n step: type === 'float' ? '0.01' : type === 'int' ? '1' : undefined,\n disabled: this.disabled,\n },\n this.getValue(value[target], type),\n {\n input: (e: Event) => {\n const el = e.target as HTMLInputElement\n const newVal = this.parseValue(el.value || '0', type)\n\n this.$emit('update:color', this.currentMode.from(\n Object.assign({}, value, { [target]: newVal }),\n this.color.alpha\n ))\n },\n }\n )\n })\n }\n },\n genSwitch (): VNode {\n return this.$createElement(VBtn, {\n props: {\n small: true,\n icon: true,\n disabled: this.disabled,\n },\n on: {\n click: this.changeMode,\n },\n }, [\n this.$createElement(VIcon, '$unfold'),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-color-picker__edit',\n }, [\n this.genInputs(),\n !this.hideModeSwitch && this.genSwitch(),\n ])\n },\n})\n","// Styles\nimport './VColorPickerSwatches.sass'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Helpers\nimport colors from '../../util/colors'\nimport { VColorPickerColor, fromHex, parseColor } from './util'\nimport { convertToUnit, deepEqual } from '../../util/helpers'\nimport mixins from '../../util/mixins'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { contrastRatio } from '../../util/colorUtils'\n\nfunction parseDefaultColors (colors: Record>) {\n return Object.keys(colors).map(key => {\n const color = colors[key]\n return color.base ? [\n color.base,\n color.darken4,\n color.darken3,\n color.darken2,\n color.darken1,\n color.lighten1,\n color.lighten2,\n color.lighten3,\n color.lighten4,\n color.lighten5,\n ] : [\n color.black,\n color.white,\n color.transparent,\n ]\n })\n}\n\nconst white = fromHex('#FFFFFF').rgba\nconst black = fromHex('#000000').rgba\n\nexport default mixins(Themeable).extend({\n name: 'v-color-picker-swatches',\n\n props: {\n swatches: {\n type: Array as PropType,\n default: () => parseDefaultColors(colors),\n },\n disabled: Boolean,\n color: Object as PropType,\n maxWidth: [Number, String],\n maxHeight: [Number, String],\n },\n\n methods: {\n genColor (color: string) {\n const content = this.$createElement('div', {\n style: {\n background: color,\n },\n }, [\n deepEqual(this.color, parseColor(color, null)) && this.$createElement(VIcon, {\n props: {\n small: true,\n dark: contrastRatio(this.color.rgba, white) > 2 && this.color.alpha > 0.5,\n light: contrastRatio(this.color.rgba, black) > 2 && this.color.alpha > 0.5,\n },\n }, '$success'),\n ])\n\n return this.$createElement('div', {\n staticClass: 'v-color-picker__color',\n on: {\n // TODO: Less hacky way of catching transparent\n click: () => this.disabled || this.$emit('update:color', fromHex(color === 'transparent' ? '#00000000' : color)),\n },\n }, [content])\n },\n genSwatches () {\n return this.swatches.map(swatch => {\n const colors = swatch.map(this.genColor)\n\n return this.$createElement('div', {\n staticClass: 'v-color-picker__swatch',\n }, colors)\n })\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-color-picker__swatches',\n style: {\n maxWidth: convertToUnit(this.maxWidth),\n maxHeight: convertToUnit(this.maxHeight),\n },\n }, [\n this.$createElement('div', this.genSwatches()),\n ])\n },\n})\n","// Styles\nimport './VColorPicker.sass'\n\n// Components\nimport VSheet from '../VSheet/VSheet'\nimport VColorPickerPreview from './VColorPickerPreview'\nimport VColorPickerCanvas from './VColorPickerCanvas'\nimport VColorPickerEdit, { Mode, modes } from './VColorPickerEdit'\nimport VColorPickerSwatches from './VColorPickerSwatches'\n\n// Helpers\nimport { VColorPickerColor, parseColor, fromRGBA, extractColor, hasAlpha } from './util'\nimport mixins from '../../util/mixins'\nimport { deepEqual } from '../../util/helpers'\n\n// Mixins\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode, PropType } from 'vue'\n\nexport default mixins(Elevatable, Themeable).extend({\n name: 'v-color-picker',\n\n props: {\n canvasHeight: {\n type: [String, Number],\n default: 150,\n },\n disabled: Boolean,\n dotSize: {\n type: [Number, String],\n default: 10,\n },\n flat: Boolean,\n hideCanvas: Boolean,\n hideSliders: Boolean,\n hideInputs: Boolean,\n hideModeSwitch: Boolean,\n mode: {\n type: String,\n default: 'rgba',\n validator: (v: string) => Object.keys(modes).includes(v),\n },\n showSwatches: Boolean,\n swatches: Array as PropType,\n swatchesMaxHeight: {\n type: [Number, String],\n default: 150,\n },\n value: {\n type: [Object, String],\n },\n width: {\n type: [Number, String],\n default: 300,\n },\n },\n\n data: () => ({\n internalValue: fromRGBA({ r: 255, g: 0, b: 0, a: 1 }),\n }),\n\n computed: {\n hideAlpha (): boolean {\n if (!this.value) return false\n\n return !hasAlpha(this.value)\n },\n },\n\n watch: {\n value: {\n handler (color: any) {\n this.updateColor(parseColor(color, this.internalValue))\n },\n immediate: true,\n },\n },\n\n methods: {\n updateColor (color: VColorPickerColor) {\n this.internalValue = color\n const value = extractColor(this.internalValue, this.value)\n\n if (!deepEqual(value, this.value)) {\n this.$emit('input', value)\n this.$emit('update:color', this.internalValue)\n }\n },\n genCanvas (): VNode {\n return this.$createElement(VColorPickerCanvas, {\n props: {\n color: this.internalValue,\n disabled: this.disabled,\n dotSize: this.dotSize,\n width: this.width,\n height: this.canvasHeight,\n },\n on: {\n 'update:color': this.updateColor,\n },\n })\n },\n genControls (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-color-picker__controls',\n }, [\n !this.hideSliders && this.genPreview(),\n !this.hideInputs && this.genEdit(),\n ])\n },\n genEdit (): VNode {\n return this.$createElement(VColorPickerEdit, {\n props: {\n color: this.internalValue,\n disabled: this.disabled,\n hideAlpha: this.hideAlpha,\n hideModeSwitch: this.hideModeSwitch,\n mode: this.mode,\n },\n on: {\n 'update:color': this.updateColor,\n 'update:mode': (v: Mode) => this.$emit('update:mode', v),\n },\n })\n },\n genPreview (): VNode {\n return this.$createElement(VColorPickerPreview, {\n props: {\n color: this.internalValue,\n disabled: this.disabled,\n hideAlpha: this.hideAlpha,\n },\n on: {\n 'update:color': this.updateColor,\n },\n })\n },\n genSwatches (): VNode {\n return this.$createElement(VColorPickerSwatches, {\n props: {\n dark: this.dark,\n light: this.light,\n disabled: this.disabled,\n swatches: this.swatches,\n color: this.internalValue,\n maxHeight: this.swatchesMaxHeight,\n },\n on: {\n 'update:color': this.updateColor,\n },\n })\n },\n },\n\n render (h): VNode {\n return h(VSheet, {\n staticClass: 'v-color-picker',\n class: {\n 'v-color-picker--flat': this.flat,\n ...this.themeClasses,\n ...this.elevationClasses,\n },\n props: {\n maxWidth: this.width,\n },\n }, [\n !this.hideCanvas && this.genCanvas(),\n (!this.hideSliders || !this.hideInputs) && this.genControls(),\n this.showSwatches && this.genSwatches(),\n ])\n },\n})\n","// Styles\nimport './VApp.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n Themeable\n).extend({\n name: 'v-app',\n\n props: {\n dark: {\n type: Boolean,\n default: undefined,\n },\n id: {\n type: String,\n default: 'app',\n },\n light: {\n type: Boolean,\n default: undefined,\n },\n },\n\n computed: {\n isDark (): boolean {\n return this.$vuetify.theme.dark\n },\n },\n\n beforeCreate () {\n if (!this.$vuetify || (this.$vuetify === this.$root as any)) {\n throw new Error('Vuetify is not properly initialized, see https://vuetifyjs.com/getting-started/quick-start#bootstrapping-the-vuetify-object')\n }\n },\n\n render (h) {\n const wrapper = h('div', { staticClass: 'v-application--wrap' }, this.$slots.default)\n\n return h('div', {\n staticClass: 'v-application',\n class: {\n 'v-application--is-rtl': this.$vuetify.rtl,\n 'v-application--is-ltr': !this.$vuetify.rtl,\n ...this.themeClasses,\n },\n attrs: { 'data-app': true },\n domProps: { id: this.id },\n }, [wrapper])\n },\n})\n","import VApp from './VApp'\n\nexport { VApp }\nexport default VApp\n","// Styles\nimport '../VAutocomplete/VAutocomplete.sass'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\n\n/* @vue/component */\nexport default VAutocomplete.extend({\n name: 'v-combobox',\n\n props: {\n delimiters: {\n type: Array,\n default: () => ([]),\n } as PropValidator,\n returnObject: {\n type: Boolean,\n default: true,\n },\n },\n\n data: () => ({\n editingIndex: -1,\n }),\n\n computed: {\n computedCounterValue (): number {\n return this.multiple\n ? this.selectedItems.length\n : (this.internalSearch || '').toString().length\n },\n hasSlot (): boolean {\n return VSelect.options.computed.hasSlot.call(this) || this.multiple\n },\n isAnyValueAllowed (): boolean {\n return true\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems ||\n (!!this.$slots['no-data'] && !this.hideNoData)\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null\n },\n },\n\n methods: {\n onInternalSearchChanged (val: any) {\n if (\n val &&\n this.multiple &&\n this.delimiters.length\n ) {\n const delimiter = this.delimiters.find(d => val.endsWith(d))\n if (delimiter != null) {\n this.internalSearch = val.slice(0, val.length - delimiter.length)\n this.updateTags()\n }\n }\n\n this.updateMenuDimensions()\n },\n genInput () {\n const input = VAutocomplete.options.methods.genInput.call(this)\n\n delete input.data!.attrs!.name\n input.data!.on!.paste = this.onPaste\n\n return input\n },\n genChipSelection (item: object, index: number) {\n const chip = VSelect.options.methods.genChipSelection.call(this, item, index)\n\n // Allow user to update an existing value\n if (this.multiple) {\n chip.componentOptions!.listeners! = {\n ...chip.componentOptions!.listeners!,\n dblclick: () => {\n this.editingIndex = index\n this.internalSearch = this.getText(item)\n this.selectedIndex = -1\n },\n }\n }\n\n return chip\n },\n onChipInput (item: object) {\n VSelect.options.methods.onChipInput.call(this, item)\n\n this.editingIndex = -1\n },\n // Requires a manual definition\n // to overwrite removal in v-autocomplete\n onEnterDown (e: Event) {\n e.preventDefault()\n // If has menu index, let v-select-list handle\n if (this.getMenuIndex() > -1) return\n\n this.$nextTick(this.updateSelf)\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\n }\n\n // If user is at selection index of 0\n // create a new tag\n if (this.multiple &&\n keyCode === keyCodes.left &&\n this.$refs.input.selectionStart === 0\n ) {\n this.updateSelf()\n } else if (keyCode === keyCodes.enter) {\n this.onEnterDown(e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onTabDown (e: KeyboardEvent) {\n // When adding tags, if searching and\n // there is not a filtered options,\n // add the value to the tags list\n if (this.multiple &&\n this.internalSearch &&\n this.getMenuIndex() === -1\n ) {\n e.preventDefault()\n e.stopPropagation()\n\n return this.updateTags()\n }\n\n VAutocomplete.options.methods.onTabDown.call(this, e)\n },\n selectItem (item: object) {\n // Currently only supports items:\n if (this.editingIndex > -1) {\n this.updateEditing()\n } else {\n VAutocomplete.options.methods.selectItem.call(this, item)\n\n // if selected item contains search value,\n // remove the search string\n if (\n this.internalSearch &&\n this.multiple &&\n this.getText(item).toLocaleLowerCase().includes(this.internalSearch.toLocaleLowerCase())\n ) {\n this.internalSearch = null\n }\n }\n },\n setSelectedItems () {\n if (this.internalValue == null ||\n this.internalValue === ''\n ) {\n this.selectedItems = []\n } else {\n this.selectedItems = this.multiple ? this.internalValue : [this.internalValue]\n }\n },\n setValue (value?: any) {\n VSelect.options.methods.setValue.call(this, value === undefined ? this.internalSearch : value)\n },\n updateEditing () {\n const value = this.internalValue.slice()\n const index = this.selectedItems.findIndex(item =>\n this.getText(item) === this.internalSearch)\n\n // If user enters a duplicate text on chip edit,\n // don't add it, move it to the end of the list\n if (index > -1) {\n const item = typeof value[index] === 'object'\n ? Object.assign({}, value[index])\n : value[index]\n\n value.splice(index, 1)\n value.push(item)\n } else {\n value[this.editingIndex] = this.internalSearch\n }\n\n this.setValue(value)\n this.editingIndex = -1\n this.internalSearch = null\n },\n updateCombobox () {\n // If search is not dirty, do nothing\n if (!this.searchIsDirty) return\n\n // The internal search is not matching\n // the internal value, update the input\n if (this.internalSearch !== this.getText(this.internalValue)) this.setValue()\n\n // Reset search if using slot to avoid a double input\n const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips\n if (isUsingSlot) this.internalSearch = null\n },\n updateSelf () {\n this.multiple ? this.updateTags() : this.updateCombobox()\n },\n updateTags () {\n const menuIndex = this.getMenuIndex()\n\n // If the user is not searching\n // and no menu item is selected\n // or if the search is empty\n // do nothing\n if ((menuIndex < 0 && !this.searchIsDirty) ||\n !this.internalSearch) return\n\n if (this.editingIndex > -1) {\n return this.updateEditing()\n }\n\n const index = this.selectedItems.findIndex(item =>\n this.internalSearch === this.getText(item))\n\n // If the duplicate item is an object,\n // copy it, so that it can be added again later\n const itemToSelect = index > -1 && typeof this.selectedItems[index] === 'object'\n ? Object.assign({}, this.selectedItems[index])\n : this.internalSearch\n\n // If it already exists, do nothing\n // this might need to change to bring\n // the duplicated item to the last entered\n if (index > -1) {\n const internalValue = this.internalValue.slice()\n internalValue.splice(index, 1)\n\n this.setValue(internalValue)\n }\n\n // If menu index is greater than 1\n // the selection is handled elsewhere\n // TODO: find out where\n if (menuIndex > -1) return (this.internalSearch = null)\n\n this.selectItem(itemToSelect)\n\n this.internalSearch = null\n },\n onPaste (event: ClipboardEvent) {\n if (!this.multiple || this.searchIsDirty) return\n\n const pastedItemText = event.clipboardData?.getData('text/vnd.vuetify.autocomplete.item+plain')\n if (pastedItemText && this.findExistingIndex(pastedItemText as any) === -1) {\n event.preventDefault()\n VSelect.options.methods.selectItem.call(this, pastedItemText as any)\n }\n },\n clearableCallback () {\n this.editingIndex = -1\n\n VAutocomplete.options.methods.clearableCallback.call(this)\n },\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","// Styles\nimport './VBtn.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VProgressCircular from '../VProgressCircular'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Elevatable from '../../mixins/elevatable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator, PropType } from 'vue/types/options'\nimport { RippleOptions } from '../../directives/ripple'\n\nconst baseMixins = mixins(\n VSheet,\n Routable,\n Positionable,\n Sizeable,\n GroupableFactory('btnToggle'),\n ToggleableFactory('inputValue')\n /* @vue/component */\n)\ninterface options extends ExtractVue {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-btn',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.btnToggle) return ''\n\n return this.btnToggle.activeClass\n },\n } as any as PropValidator,\n block: Boolean,\n depressed: Boolean,\n fab: Boolean,\n icon: Boolean,\n loading: Boolean,\n outlined: Boolean,\n plain: Boolean,\n retainFocusOnClick: Boolean,\n rounded: Boolean,\n tag: {\n type: String,\n default: 'button',\n },\n text: Boolean,\n tile: Boolean,\n type: {\n type: String,\n default: 'button',\n },\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-btn--active',\n }),\n\n computed: {\n classes (): any {\n return {\n 'v-btn': true,\n ...Routable.options.computed.classes.call(this),\n 'v-btn--absolute': this.absolute,\n 'v-btn--block': this.block,\n 'v-btn--bottom': this.bottom,\n 'v-btn--disabled': this.disabled,\n 'v-btn--is-elevated': this.isElevated,\n 'v-btn--fab': this.fab,\n 'v-btn--fixed': this.fixed,\n 'v-btn--has-bg': this.hasBg,\n 'v-btn--icon': this.icon,\n 'v-btn--left': this.left,\n 'v-btn--loading': this.loading,\n 'v-btn--outlined': this.outlined,\n 'v-btn--plain': this.plain,\n 'v-btn--right': this.right,\n 'v-btn--round': this.isRound,\n 'v-btn--rounded': this.rounded,\n 'v-btn--router': this.to,\n 'v-btn--text': this.text,\n 'v-btn--tile': this.tile,\n 'v-btn--top': this.top,\n ...this.themeClasses,\n ...this.groupClasses,\n ...this.elevationClasses,\n ...this.sizeableClasses,\n }\n },\n computedElevation (): string | number | undefined {\n if (this.disabled) return undefined\n\n return Elevatable.options.computed.computedElevation.call(this)\n },\n computedRipple (): RippleOptions | boolean {\n const defaultRipple = this.icon || this.fab ? { circle: true } : true\n if (this.disabled) return false\n else return this.ripple ?? defaultRipple\n },\n hasBg (): boolean {\n return !this.text && !this.plain && !this.outlined && !this.icon\n },\n isElevated (): boolean {\n return Boolean(\n !this.icon &&\n !this.text &&\n !this.outlined &&\n !this.depressed &&\n !this.disabled &&\n !this.plain &&\n (this.elevation == null || Number(this.elevation) > 0)\n )\n },\n isRound (): boolean {\n return Boolean(\n this.icon ||\n this.fab\n )\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n }\n },\n },\n\n created () {\n const breakingProps = [\n ['flat', 'text'],\n ['outline', 'outlined'],\n ['round', 'rounded'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n // TODO: Remove this in v3\n !this.retainFocusOnClick && !this.fab && e.detail && this.$el.blur()\n this.$emit('click', e)\n\n this.btnToggle && this.toggle()\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-btn__content',\n }, this.$slots.default)\n },\n genLoader (): VNode {\n return this.$createElement('span', {\n class: 'v-btn__loader',\n }, this.$slots.loader || [this.$createElement(VProgressCircular, {\n props: {\n indeterminate: true,\n size: 23,\n width: 2,\n },\n })])\n },\n },\n\n render (h): VNode {\n const children = [\n this.genContent(),\n this.loading && this.genLoader(),\n ]\n const { tag, data } = this.generateRouteLink()\n const setColor = this.hasBg\n ? this.setBackgroundColor\n : this.setTextColor\n\n if (tag === 'button') {\n data.attrs!.type = this.type\n data.attrs!.disabled = this.disabled\n }\n data.attrs!.value = ['string', 'number'].includes(typeof this.value)\n ? this.value\n : JSON.stringify(this.value)\n\n return h(tag, this.disabled ? data : setColor(this.color, data), children)\n },\n})\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","import './VSimpleCheckbox.sass'\n\nimport ripple from '../../directives/ripple'\n\nimport Vue, { VNode, VNodeDirective } from 'vue'\nimport { VIcon } from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'v-simple-checkbox',\n\n functional: true,\n\n directives: {\n ripple,\n },\n\n props: {\n ...Colorable.options.props,\n ...Themeable.options.props,\n disabled: Boolean,\n ripple: {\n type: Boolean,\n default: true,\n },\n value: Boolean,\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n },\n\n render (h, { props, data, listeners }): VNode {\n const children = []\n let icon = props.offIcon\n if (props.indeterminate) icon = props.indeterminateIcon\n else if (props.value) icon = props.onIcon\n\n children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n props: {\n disabled: props.disabled,\n dark: props.dark,\n light: props.light,\n },\n }), icon))\n\n if (props.ripple && !props.disabled) {\n const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n staticClass: 'v-input--selection-controls__ripple',\n directives: [{\n name: 'ripple',\n value: { center: true },\n }] as VNodeDirective[],\n }))\n\n children.push(ripple)\n }\n\n return h('div',\n mergeData(data, {\n class: {\n 'v-simple-checkbox': true,\n 'v-simple-checkbox--disabled': props.disabled,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n\n if (data.on && data.on.input && !props.disabled) {\n wrapInArray(data.on.input).forEach(f => f(!props.value))\n }\n },\n },\n }), [\n h('div', { staticClass: 'v-input--selection-controls__input' }, children),\n ])\n },\n})\n","// Styles\nimport './VAlert.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNodeData } from 'vue'\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Toggleable,\n Transitionable\n).extend({\n name: 'v-alert',\n\n props: {\n border: {\n type: String,\n validator (val: string) {\n return [\n 'top',\n 'right',\n 'bottom',\n 'left',\n ].includes(val)\n },\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n coloredBorder: Boolean,\n dense: Boolean,\n dismissible: Boolean,\n closeIcon: {\n type: String,\n default: '$cancel',\n },\n icon: {\n default: '',\n type: [Boolean, String],\n validator (val: boolean | string) {\n return typeof val === 'string' || val === false\n },\n },\n outlined: Boolean,\n prominent: Boolean,\n text: Boolean,\n type: {\n type: String,\n validator (val: string) {\n return [\n 'info',\n 'error',\n 'success',\n 'warning',\n ].includes(val)\n },\n },\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n __cachedBorder (): VNode | null {\n if (!this.border) return null\n\n let data: VNodeData = {\n staticClass: 'v-alert__border',\n class: {\n [`v-alert__border--${this.border}`]: true,\n },\n }\n\n if (this.coloredBorder) {\n data = this.setBackgroundColor(this.computedColor, data)\n data.class['v-alert__border--has-color'] = true\n }\n\n return this.$createElement('div', data)\n },\n __cachedDismissible (): VNode | null {\n if (!this.dismissible) return null\n\n const color = this.iconColor\n\n return this.$createElement(VBtn, {\n staticClass: 'v-alert__dismissible',\n props: {\n color,\n icon: true,\n small: true,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: () => (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n this.$slots.prepend || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n this.$slots.append,\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, this.$slots.default)\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","// Styles\nimport './VCounter.sass'\n\n// Mixins\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n name: 'v-counter',\n\n functional: true,\n\n props: {\n value: {\n type: [Number, String],\n default: '',\n },\n max: [Number, String],\n },\n\n render (h, ctx): VNode {\n const { props } = ctx\n const max = parseInt(props.max, 10)\n const value = parseInt(props.value, 10)\n const content = max ? `${value} / ${max}` : String(props.value)\n const isGreater = max && (value > max)\n\n return h('div', {\n staticClass: 'v-counter',\n class: {\n 'error--text': isGreater,\n ...functionalThemeClasses(ctx),\n },\n }, content)\n },\n})\n","import VCounter from './VCounter'\n\nexport { VCounter }\nexport default VCounter\n","// Styles\nimport './VCard.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\nimport Routable from '../../mixins/routable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Loadable,\n Routable,\n VSheet\n).extend({\n name: 'v-card',\n\n props: {\n flat: Boolean,\n hover: Boolean,\n img: String,\n link: Boolean,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n raised: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-card': true,\n ...Routable.options.computed.classes.call(this),\n 'v-card--flat': this.flat,\n 'v-card--hover': this.hover,\n 'v-card--link': this.isClickable,\n 'v-card--loading': this.loading,\n 'v-card--disabled': this.disabled,\n 'v-card--raised': this.raised,\n ...VSheet.options.computed.classes.call(this),\n }\n },\n styles (): object {\n const style: Dictionary = {\n ...VSheet.options.computed.styles.call(this),\n }\n\n if (this.img) {\n style.background = `url(\"${this.img}\") center center / cover no-repeat`\n }\n\n return style\n },\n },\n\n methods: {\n genProgress () {\n const render = Loadable.options.methods.genProgress.call(this)\n\n if (!render) return null\n\n return this.$createElement('div', {\n staticClass: 'v-card__progress',\n key: 'progress',\n }, [render])\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.style = this.styles\n\n if (this.isClickable) {\n data.attrs = data.attrs || {}\n data.attrs.tabindex = 0\n }\n\n return h(tag, this.setBackgroundColor(this.color, data), [\n this.genProgress(),\n this.$slots.default,\n ])\n },\n})\n","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","import Routable from '../../mixins/routable'\n\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(Routable).extend({\n name: 'v-breadcrumbs-item',\n\n props: {\n // In a breadcrumb, the currently\n // active item should be dimmed\n activeClass: {\n type: String,\n default: 'v-breadcrumbs__item--disabled',\n },\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-breadcrumbs__item': true,\n [this.activeClass]: this.disabled,\n }\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n return h('li', [\n h(tag, {\n ...data,\n attrs: {\n ...data.attrs,\n 'aria-current': this.isActive && this.isLink ? 'page' : undefined,\n },\n }, this.$slots.default),\n ])\n },\n})\n","import { createSimpleFunctional } from '../../util/helpers'\n\nexport default createSimpleFunctional('v-breadcrumbs__divider', 'li')\n","// Styles\nimport './VBreadcrumbs.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VBreadcrumbsItem from './VBreadcrumbsItem'\nimport VBreadcrumbsDivider from './VBreadcrumbsDivider'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-breadcrumbs',\n\n props: {\n divider: {\n type: String,\n default: '/',\n },\n items: {\n type: Array,\n default: () => ([]),\n } as PropValidator,\n large: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-breadcrumbs--large': this.large,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genDivider () {\n return this.$createElement(VBreadcrumbsDivider, this.$slots.divider ? this.$slots.divider : this.divider)\n },\n genItems () {\n const items = []\n const hasSlot = !!this.$scopedSlots.item\n const keys = []\n\n for (let i = 0; i < this.items.length; i++) {\n const item = this.items[i]\n\n keys.push(item.text)\n\n if (hasSlot) items.push(this.$scopedSlots.item!({ item }))\n else items.push(this.$createElement(VBreadcrumbsItem, { key: keys.join('.'), props: item }, [item.text]))\n\n if (i < this.items.length - 1) items.push(this.genDivider())\n }\n\n return items\n },\n },\n\n render (h): VNode {\n const children = this.$slots.default || this.genItems()\n\n return h('ul', {\n staticClass: 'v-breadcrumbs',\n class: this.classes,\n }, children)\n },\n})\n","// Styles\nimport './VBadge.sass'\n\n// Components\nimport VIcon from '../VIcon/VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport Toggleable from '../../mixins/toggleable'\nimport Transitionable from '../../mixins/transitionable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport {\n convertToUnit,\n getSlot,\n} from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n PositionableFactory(['left', 'bottom']),\n Themeable,\n Toggleable,\n Transitionable,\n/* @vue/component */\n).extend({\n name: 'v-badge',\n\n props: {\n avatar: Boolean,\n bordered: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n content: { required: false },\n dot: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n icon: String,\n inline: Boolean,\n offsetX: [Number, String],\n offsetY: [Number, String],\n overlap: Boolean,\n tile: Boolean,\n transition: {\n type: String,\n default: 'scale-rotate-transition',\n },\n value: { default: true },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-badge--avatar': this.avatar,\n 'v-badge--bordered': this.bordered,\n 'v-badge--bottom': this.bottom,\n 'v-badge--dot': this.dot,\n 'v-badge--icon': this.icon != null,\n 'v-badge--inline': this.inline,\n 'v-badge--left': this.left,\n 'v-badge--overlap': this.overlap,\n 'v-badge--tile': this.tile,\n ...this.themeClasses,\n }\n },\n computedBottom (): string {\n return this.bottom ? 'auto' : this.computedYOffset\n },\n computedLeft (): string {\n if (this.isRtl) {\n return this.left ? this.computedXOffset : 'auto'\n }\n\n return this.left ? 'auto' : this.computedXOffset\n },\n computedRight (): string {\n if (this.isRtl) {\n return this.left ? 'auto' : this.computedXOffset\n }\n\n return !this.left ? 'auto' : this.computedXOffset\n },\n computedTop (): string {\n return this.bottom ? this.computedYOffset : 'auto'\n },\n computedXOffset (): string {\n return this.calcPosition(this.offsetX)\n },\n computedYOffset (): string {\n return this.calcPosition(this.offsetY)\n },\n isRtl (): boolean {\n return this.$vuetify.rtl\n },\n // Default fallback if offsetX\n // or offsetY are undefined.\n offset (): number {\n if (this.overlap) return this.dot ? 8 : 12\n return this.dot ? 2 : 4\n },\n styles (): object {\n if (this.inline) return {}\n\n return {\n bottom: this.computedBottom,\n left: this.computedLeft,\n right: this.computedRight,\n top: this.computedTop,\n }\n },\n },\n\n methods: {\n calcPosition (offset: string | number): string {\n return `calc(100% - ${convertToUnit(offset || this.offset)})`\n },\n genBadge () {\n const lang = this.$vuetify.lang\n const label = this.$attrs['aria-label'] || lang.t(this.label)\n\n const data = this.setBackgroundColor(this.color, {\n staticClass: 'v-badge__badge',\n style: this.styles,\n attrs: {\n 'aria-atomic': this.$attrs['aria-atomic'] || 'true',\n 'aria-label': label,\n 'aria-live': this.$attrs['aria-live'] || 'polite',\n title: this.$attrs.title,\n role: this.$attrs.role || 'status',\n },\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n })\n\n const badge = this.$createElement('span', data, [this.genBadgeContent()])\n\n if (!this.transition) return badge\n\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [badge])\n },\n genBadgeContent () {\n // Dot prop shows no content\n if (this.dot) return undefined\n\n const slot = getSlot(this, 'badge')\n\n if (slot) return slot\n if (this.content) return String(this.content)\n if (this.icon) return this.$createElement(VIcon, this.icon)\n\n return undefined\n },\n genBadgeWrapper () {\n return this.$createElement('span', {\n staticClass: 'v-badge__wrapper',\n }, [this.genBadge()])\n },\n },\n\n render (h): VNode {\n const badge = [this.genBadgeWrapper()]\n const children = [getSlot(this)]\n const {\n 'aria-atomic': _x,\n 'aria-label': _y,\n 'aria-live': _z,\n role,\n title,\n ...attrs\n } = this.$attrs\n\n if (this.inline && this.left) children.unshift(badge)\n else children.push(badge)\n\n return h('span', {\n staticClass: 'v-badge',\n attrs,\n class: this.classes,\n }, children)\n },\n})\n","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","import VCheckbox from './VCheckbox'\nimport VSimpleCheckbox from './VSimpleCheckbox'\n\nexport { VCheckbox, VSimpleCheckbox }\nexport default {\n $_vuetify_subcomponents: {\n VCheckbox,\n VSimpleCheckbox,\n },\n}\n","// Styles\nimport './VBanner.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VAvatar from '../VAvatar'\nimport VIcon from '../VIcon'\nimport { VExpandTransition } from '../transitions'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\nimport Toggleable from '../../mixins/toggleable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport {\n convertToUnit,\n getSlot,\n} from '../../util/helpers'\n\n// Typeslint\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Mobile,\n Toggleable\n).extend({\n name: 'v-banner',\n\n inheritAttrs: false,\n\n props: {\n app: Boolean,\n icon: String,\n iconColor: String,\n singleLine: Boolean,\n sticky: Boolean,\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VSheet.options.computed.classes.call(this),\n 'v-banner--has-icon': this.hasIcon,\n 'v-banner--is-mobile': this.isMobile,\n 'v-banner--single-line': this.singleLine,\n 'v-banner--sticky': this.isSticky,\n }\n },\n hasIcon (): boolean {\n return Boolean(this.icon || this.$slots.icon)\n },\n isSticky (): boolean {\n return this.sticky || this.app\n },\n styles (): object {\n const styles: Record = { ...VSheet.options.computed.styles.call(this) }\n\n if (this.isSticky) {\n const top = !this.app\n ? 0\n : (this.$vuetify.application.bar + this.$vuetify.application.top)\n\n styles.top = convertToUnit(top)\n styles.position = 'sticky'\n styles.zIndex = 1\n }\n\n return styles\n },\n },\n\n methods: {\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n iconClick (e: MouseEvent) {\n this.$emit('click:icon', e)\n },\n genIcon () {\n if (!this.hasIcon) return undefined\n\n let content\n\n if (this.icon) {\n content = this.$createElement(VIcon, {\n props: {\n color: this.iconColor,\n size: 28,\n },\n }, [this.icon])\n } else {\n content = this.$slots.icon\n }\n\n return this.$createElement(VAvatar, {\n staticClass: 'v-banner__icon',\n props: {\n color: this.color,\n size: 40,\n },\n on: {\n click: this.iconClick,\n },\n }, [content])\n },\n genText () {\n return this.$createElement('div', {\n staticClass: 'v-banner__text',\n }, this.$slots.default)\n },\n genActions () {\n const children = getSlot(this, 'actions', {\n dismiss: () => this.isActive = false,\n })\n\n if (!children) return undefined\n\n return this.$createElement('div', {\n staticClass: 'v-banner__actions',\n }, children)\n },\n genContent () {\n return this.$createElement('div', {\n staticClass: 'v-banner__content',\n }, [\n this.genIcon(),\n this.genText(),\n ])\n },\n genWrapper () {\n return this.$createElement('div', {\n staticClass: 'v-banner__wrapper',\n }, [\n this.genContent(),\n this.genActions(),\n ])\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-banner',\n attrs: this.attrs$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n return h(VExpandTransition, [\n h(\n 'div',\n this.outlined ? data : this.setBackgroundColor(this.color, data),\n [this.genWrapper()],\n ),\n ])\n },\n})\n","// Styles\nimport './VAppBar.sass'\n\n// Extensions\nimport VToolbar from '../VToolbar/VToolbar'\n\n// Directives\nimport Scroll from '../../directives/scroll'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Scrollable from '../../mixins/scrollable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n VToolbar,\n Scrollable,\n SSRBootable,\n Toggleable,\n Applicationable('top', [\n 'clippedLeft',\n 'clippedRight',\n 'computedHeight',\n 'invertedScroll',\n 'isExtended',\n 'isProminent',\n 'value',\n ])\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-app-bar',\n\n directives: { Scroll },\n\n provide (): object {\n return { VAppBar: this }\n },\n\n props: {\n clippedLeft: Boolean,\n clippedRight: Boolean,\n collapseOnScroll: Boolean,\n elevateOnScroll: Boolean,\n fadeImgOnScroll: Boolean,\n hideOnScroll: Boolean,\n invertedScroll: Boolean,\n scrollOffScreen: Boolean,\n shrinkOnScroll: Boolean,\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n data () {\n return {\n isActive: this.value,\n }\n },\n\n computed: {\n applicationProperty (): string {\n return !this.bottom ? 'top' : 'bottom'\n },\n canScroll (): boolean {\n return (\n Scrollable.options.computed.canScroll.call(this) &&\n (\n this.invertedScroll ||\n this.elevateOnScroll ||\n this.hideOnScroll ||\n this.collapseOnScroll ||\n this.isBooted ||\n // If falsy, user has provided an\n // explicit value which should\n // overwrite anything we do\n !this.value\n )\n )\n },\n classes (): object {\n return {\n ...VToolbar.options.computed.classes.call(this),\n 'v-toolbar--collapse': this.collapse || this.collapseOnScroll,\n 'v-app-bar': true,\n 'v-app-bar--clipped': this.clippedLeft || this.clippedRight,\n 'v-app-bar--fade-img-on-scroll': this.fadeImgOnScroll,\n 'v-app-bar--elevate-on-scroll': this.elevateOnScroll,\n 'v-app-bar--fixed': !this.absolute && (this.app || this.fixed),\n 'v-app-bar--hide-shadow': this.hideShadow,\n 'v-app-bar--is-scrolled': this.currentScroll > 0,\n 'v-app-bar--shrink-on-scroll': this.shrinkOnScroll,\n }\n },\n scrollRatio (): number {\n const threshold = this.computedScrollThreshold\n return Math.max((threshold - this.currentScroll) / threshold, 0)\n },\n computedContentHeight (): number {\n if (!this.shrinkOnScroll) return VToolbar.options.computed.computedContentHeight.call(this)\n\n const min = this.dense ? 48 : 56\n const max = this.computedOriginalHeight\n\n return min + (max - min) * this.scrollRatio\n },\n computedFontSize (): number | undefined {\n if (!this.isProminent) return undefined\n\n const min = 1.25\n const max = 1.5\n\n return min + (max - min) * this.scrollRatio\n },\n computedLeft (): number {\n if (!this.app || this.clippedLeft) return 0\n\n return this.$vuetify.application.left\n },\n computedMarginTop (): number {\n if (!this.app) return 0\n\n return this.$vuetify.application.bar\n },\n computedOpacity (): number | undefined {\n if (!this.fadeImgOnScroll) return undefined\n\n return this.scrollRatio\n },\n computedOriginalHeight (): number {\n let height = VToolbar.options.computed.computedContentHeight.call(this)\n if (this.isExtended) height += parseInt(this.extensionHeight)\n return height\n },\n computedRight (): number {\n if (!this.app || this.clippedRight) return 0\n\n return this.$vuetify.application.right\n },\n computedScrollThreshold (): number {\n if (this.scrollThreshold) return Number(this.scrollThreshold)\n\n return this.computedOriginalHeight - (this.dense ? 48 : 56)\n },\n computedTransform (): number {\n if (\n !this.canScroll ||\n (this.elevateOnScroll && this.currentScroll === 0 && this.isActive)\n ) return 0\n\n if (this.isActive) return 0\n\n const scrollOffScreen = this.scrollOffScreen\n ? this.computedHeight\n : this.computedContentHeight\n\n return this.bottom ? scrollOffScreen : -scrollOffScreen\n },\n hideShadow (): boolean {\n if (this.elevateOnScroll && this.isExtended) {\n return this.currentScroll < this.computedScrollThreshold\n }\n\n if (this.elevateOnScroll) {\n return this.currentScroll === 0 ||\n this.computedTransform < 0\n }\n\n return (\n !this.isExtended ||\n this.scrollOffScreen\n ) && this.computedTransform !== 0\n },\n isCollapsed (): boolean {\n if (!this.collapseOnScroll) {\n return VToolbar.options.computed.isCollapsed.call(this)\n }\n\n return this.currentScroll > 0\n },\n isProminent (): boolean {\n return (\n VToolbar.options.computed.isProminent.call(this) ||\n this.shrinkOnScroll\n )\n },\n styles (): object {\n return {\n ...VToolbar.options.computed.styles.call(this),\n fontSize: convertToUnit(this.computedFontSize, 'rem'),\n marginTop: convertToUnit(this.computedMarginTop),\n transform: `translateY(${convertToUnit(this.computedTransform)})`,\n left: convertToUnit(this.computedLeft),\n right: convertToUnit(this.computedRight),\n }\n },\n },\n\n watch: {\n canScroll: 'onScroll',\n computedTransform () {\n // Normally we do not want the v-app-bar\n // to update the application top value\n // to avoid screen jump. However, in\n // this situation, we must so that\n // the clipped drawer can update\n // its top value when scrolled\n if (\n !this.canScroll ||\n (!this.clippedLeft && !this.clippedRight)\n ) return\n\n this.callUpdate()\n },\n invertedScroll (val: boolean) {\n this.isActive = !val || this.currentScroll !== 0\n },\n hideOnScroll (val: boolean) {\n this.isActive = !val || this.currentScroll < this.computedScrollThreshold\n },\n },\n\n created () {\n if (this.invertedScroll) this.isActive = false\n },\n\n methods: {\n genBackground () {\n const render = VToolbar.options.methods.genBackground.call(this)\n\n render.data = this._b(render.data || {}, render.tag!, {\n style: { opacity: this.computedOpacity },\n })\n\n return render\n },\n updateApplication (): number {\n return this.invertedScroll\n ? 0\n : this.computedHeight + this.computedTransform\n },\n thresholdMet () {\n if (this.invertedScroll) {\n this.isActive = this.currentScroll > this.computedScrollThreshold\n return\n }\n\n if (this.hideOnScroll) {\n this.isActive = this.isScrollingUp ||\n this.currentScroll < this.computedScrollThreshold\n }\n\n if (this.currentThreshold < this.computedScrollThreshold) return\n\n this.savedScroll = this.currentScroll\n },\n },\n\n render (h): VNode {\n const render = VToolbar.options.render.call(this, h)\n\n render.data = render.data || {}\n\n if (this.canScroll) {\n render.data.directives = render.data.directives || []\n render.data.directives.push({\n arg: this.scrollTarget,\n name: 'scroll',\n value: this.onScroll,\n })\n }\n\n return render\n },\n})\n","// Components\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn/VBtn'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'v-app-bar-nav-icon',\n\n functional: true,\n\n render (h, { slots, listeners, props, data }) {\n const d = Object.assign(data, {\n staticClass: (`v-app-bar__nav-icon ${data.staticClass || ''}`).trim(),\n props: {\n ...props,\n icon: true,\n },\n on: listeners,\n })\n\n const defaultSlot = slots().default\n\n return h(VBtn, d, defaultSlot || [h(VIcon, '$menu')])\n },\n})\n","// Mixins\nimport { inject } from '../../mixins/registrable'\n\n// Types\nimport { VNode } from 'vue'\nimport { ExtractVue } from '../../util/mixins'\nimport VAppBar from './VAppBar'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport { easeInOutCubic } from '../../services/goto/easing-patterns'\n\nconst base = inject<'VAppBar', typeof VAppBar>('VAppBar', 'v-app-bar-title', 'v-app-bar')\n\ninterface options extends ExtractVue {\n $refs: {\n content: Element\n placeholder: Element\n }\n}\n\nexport default base.extend().extend({\n name: 'v-app-bar-title',\n\n data: () => ({\n contentWidth: 0,\n left: 0,\n width: 0,\n }),\n\n watch: {\n '$vuetify.breakpoint.width': 'updateDimensions',\n },\n\n computed: {\n styles (): object {\n if (!this.contentWidth) return {}\n\n const min = this.width\n const max = this.contentWidth\n const ratio = easeInOutCubic(Math.min(1, this.VAppBar.scrollRatio * 1.5))\n return {\n width: convertToUnit(min + (max - min) * ratio),\n visibility: this.VAppBar.scrollRatio ? 'visible' : 'hidden',\n }\n },\n },\n\n mounted () {\n this.updateDimensions()\n },\n\n methods: {\n updateDimensions (): void {\n const dimensions = this.$refs.placeholder.getBoundingClientRect()\n this.width = dimensions.width\n this.left = dimensions.left\n this.contentWidth = this.$refs.content.scrollWidth\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: 'v-toolbar__title v-app-bar-title',\n }, [\n h('div', {\n class: 'v-app-bar-title__content',\n style: this.styles,\n ref: 'content',\n }, [this.$slots.default]),\n h('div', {\n class: 'v-app-bar-title__placeholder',\n style: {\n visibility: this.VAppBar.scrollRatio ? 'hidden' : 'visible',\n },\n ref: 'placeholder',\n }, [this.$slots.default]),\n ])\n },\n})\n","import './VBottomSheet.sass'\n\n// Extensions\nimport VDialog from '../VDialog/VDialog'\n\n/* @vue/component */\nexport default VDialog.extend({\n name: 'v-bottom-sheet',\n\n props: {\n inset: Boolean,\n maxWidth: [String, Number],\n transition: {\n type: String,\n default: 'bottom-sheet-transition',\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VDialog.options.computed.classes.call(this),\n 'v-bottom-sheet': true,\n 'v-bottom-sheet--inset': this.inset,\n }\n },\n },\n})\n","// Styles\nimport './VCarousel.sass'\n\n// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\nimport VProgressLinear from '../VProgressLinear'\n\n// Mixins\n// TODO: Move this into core components v2.0\nimport ButtonGroup from '../../mixins/button-group'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode, PropType } from 'vue'\n\nexport default VWindow.extend({\n name: 'v-carousel',\n\n props: {\n continuous: {\n type: Boolean,\n default: true,\n },\n cycle: Boolean,\n delimiterIcon: {\n type: String,\n default: '$delimiter',\n },\n height: {\n type: [Number, String],\n default: 500,\n },\n hideDelimiters: Boolean,\n hideDelimiterBackground: Boolean,\n interval: {\n type: [Number, String],\n default: 6000,\n validator: (value: string | number) => value > 0,\n },\n mandatory: {\n type: Boolean,\n default: true,\n },\n progress: Boolean,\n progressColor: String,\n showArrows: {\n type: Boolean,\n default: true,\n },\n verticalDelimiters: {\n type: String as PropType<'' | 'left' | 'right'>,\n default: undefined,\n },\n },\n\n // pass down the parent's theme\n provide (): object {\n return {\n parentTheme: this.theme,\n }\n },\n\n data () {\n return {\n internalHeight: this.height,\n slideTimeout: undefined as number | undefined,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VWindow.options.computed.classes.call(this),\n 'v-carousel': true,\n 'v-carousel--hide-delimiter-background': this.hideDelimiterBackground,\n 'v-carousel--vertical-delimiters': this.isVertical,\n }\n },\n isDark (): boolean {\n return this.dark || !this.light\n },\n isVertical (): boolean {\n return this.verticalDelimiters != null\n },\n },\n\n watch: {\n internalValue: 'restartTimeout',\n interval: 'restartTimeout',\n height (val, oldVal) {\n if (val === oldVal || !val) return\n this.internalHeight = val\n },\n cycle (val) {\n if (val) {\n this.restartTimeout()\n } else {\n clearTimeout(this.slideTimeout)\n this.slideTimeout = undefined\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('hide-controls')) {\n breaking('hide-controls', ':show-arrows=\"false\"', this)\n }\n },\n\n mounted () {\n this.startTimeout()\n },\n\n methods: {\n genControlIcons () {\n if (this.isVertical) return null\n\n return VWindow.options.methods.genControlIcons.call(this)\n },\n genDelimiters (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-carousel__controls',\n style: {\n left: this.verticalDelimiters === 'left' && this.isVertical ? 0 : 'auto',\n right: this.verticalDelimiters === 'right' ? 0 : 'auto',\n },\n }, [this.genItems()])\n },\n genItems (): VNode {\n const length = this.items.length\n const children = []\n\n for (let i = 0; i < length; i++) {\n const child = this.$createElement(VBtn, {\n staticClass: 'v-carousel__controls__item',\n attrs: {\n 'aria-label': this.$vuetify.lang.t('$vuetify.carousel.ariaLabel.delimiter', i + 1, length),\n },\n props: {\n icon: true,\n small: true,\n value: this.getValue(this.items[i], i),\n },\n }, [\n this.$createElement(VIcon, {\n props: { size: 18 },\n }, this.delimiterIcon),\n ])\n\n children.push(child)\n }\n\n return this.$createElement(ButtonGroup, {\n props: {\n value: this.internalValue,\n mandatory: this.mandatory,\n },\n on: {\n change: (val: unknown) => {\n this.internalValue = val\n },\n },\n }, children)\n },\n genProgress () {\n return this.$createElement(VProgressLinear, {\n staticClass: 'v-carousel__progress',\n props: {\n color: this.progressColor,\n value: (this.internalIndex + 1) / this.items.length * 100,\n },\n })\n },\n restartTimeout () {\n this.slideTimeout && clearTimeout(this.slideTimeout)\n this.slideTimeout = undefined\n\n window.requestAnimationFrame(this.startTimeout)\n },\n startTimeout () {\n if (!this.cycle) return\n\n this.slideTimeout = window.setTimeout(this.next, +this.interval > 0 ? +this.interval : 6000)\n },\n },\n\n render (h): VNode {\n const render = VWindow.options.render.call(this, h)\n\n render.data!.style = `height: ${convertToUnit(this.height)};`\n\n /* istanbul ignore else */\n if (!this.hideDelimiters) {\n render.children!.push(this.genDelimiters())\n }\n\n /* istanbul ignore else */\n if (this.progress || this.progressColor) {\n render.children!.push(this.genProgress())\n }\n\n return render\n },\n})\n","// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n// Components\nimport { VImg } from '../VImg'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { getSlot } from '../../util/helpers'\nimport Routable from '../../mixins/routable'\n\n// Types\nconst baseMixins = mixins(\n VWindowItem,\n Routable\n)\n\ninterface options extends ExtractVue {\n parentTheme: {\n isDark: boolean\n }\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-carousel-item',\n\n inject: {\n parentTheme: {\n default: {\n isDark: false,\n },\n },\n },\n\n // pass down the parent's theme\n provide (): object {\n return {\n theme: this.parentTheme,\n }\n },\n\n inheritAttrs: false,\n\n methods: {\n genDefaultSlot () {\n return [\n this.$createElement(VImg, {\n staticClass: 'v-carousel__item',\n props: {\n ...this.$attrs,\n height: this.windowGroup.internalHeight,\n },\n on: this.$listeners,\n scopedSlots: {\n placeholder: this.$scopedSlots.placeholder,\n },\n }, getSlot(this)),\n ]\n },\n genWindowItem () {\n const { tag, data } = this.generateRouteLink()\n\n data.staticClass = 'v-window-item'\n data.directives!.push({\n name: 'show',\n value: this.isActive,\n })\n\n return this.$createElement(tag, data, this.genDefaultSlot())\n },\n },\n})\n","// Styles\nimport './VBtnToggle.sass'\n\n// Mixins\nimport ButtonGroup from '../../mixins/button-group'\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n ButtonGroup,\n Colorable\n).extend({\n name: 'v-btn-toggle',\n\n props: {\n backgroundColor: String,\n borderless: Boolean,\n dense: Boolean,\n group: Boolean,\n rounded: Boolean,\n shaped: Boolean,\n tile: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n ...ButtonGroup.options.computed.classes.call(this),\n 'v-btn-toggle': true,\n 'v-btn-toggle--borderless': this.borderless,\n 'v-btn-toggle--dense': this.dense,\n 'v-btn-toggle--group': this.group,\n 'v-btn-toggle--rounded': this.rounded,\n 'v-btn-toggle--shaped': this.shaped,\n 'v-btn-toggle--tile': this.tile,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genData () {\n const data = this.setTextColor(this.color, {\n ...ButtonGroup.options.methods.genData.call(this),\n })\n\n if (this.group) return data\n\n return this.setBackgroundColor(this.backgroundColor, data)\n },\n },\n})\n","// Types\nimport { VNode } from 'vue'\n\n// Extensions\nimport VMain from '../VMain/VMain'\nimport { deprecate } from '../../util/console'\n\n/* @vue/component */\nexport default VMain.extend({\n name: 'v-main',\n\n created () {\n deprecate('v-content', 'v-main', this)\n },\n\n render (h): VNode {\n // Add the legacy class names\n const node = VMain.options.render.call(this, h)\n\n node.data!.staticClass += ' v-content'\n node.children![0]!.data!.staticClass += ' v-content__wrap'\n\n return h(node.tag, node.data, node.children)\n },\n})\n","// Styles\nimport './VChipGroup.sass'\n\n// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n BaseSlideGroup,\n Colorable\n).extend({\n name: 'v-chip-group',\n\n provide () {\n return {\n chipGroup: this,\n }\n },\n\n props: {\n column: Boolean,\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.options.computed.classes.call(this),\n 'v-chip-group': true,\n 'v-chip-group--column': this.column,\n }\n },\n },\n\n watch: {\n column (val) {\n if (val) this.scrollOffset = 0\n\n this.$nextTick(this.onResize)\n },\n },\n\n methods: {\n genData () {\n return this.setTextColor(this.color, {\n ...BaseSlideGroup.options.methods.genData.call(this),\n })\n },\n },\n})\n","import Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getEvent: MouseHandler): MouseEventsMap {\n return this.getMouseEventHandlers({\n ['click' + suffix]: { event: 'click' },\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n ['mousedown' + suffix]: { event: 'mousedown' },\n ['mousemove' + suffix]: { event: 'mousemove' },\n ['mouseup' + suffix]: { event: 'mouseup' },\n ['mouseenter' + suffix]: { event: 'mouseenter' },\n ['mouseleave' + suffix]: { event: 'mouseleave' },\n ['touchstart' + suffix]: { event: 'touchstart' },\n ['touchmove' + suffix]: { event: 'touchmove' },\n ['touchend' + suffix]: { event: 'touchend' },\n }, getEvent)\n },\n getMouseEventHandlers (events: MouseEvents, getEvent: MouseHandler): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && 'touches' in e) {\n const classSeparator = ' '\n\n const eventTargetClasses = (e.currentTarget as HTMLElement)?.className.split(classSeparator)\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n // Get \"the same kind\" current hovering target by checking\n // If element has the same class of initial touch start element (which has touch event listener registered)\n const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)))\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget)\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n this.$emit(event, getEvent(e), e)\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n","import Vue from 'vue'\n\nimport {\n validateTimestamp,\n parseTimestamp,\n parseDate,\n} from '../util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'times',\n\n props: {\n now: {\n type: String,\n validator: validateTimestamp,\n },\n },\n\n data: () => ({\n times: {\n now: parseTimestamp('0000-00-00 00:00', true),\n today: parseTimestamp('0000-00-00', true),\n },\n }),\n\n computed: {\n parsedNow (): CalendarTimestamp | null {\n return this.now ? parseTimestamp(this.now, true) : null\n },\n },\n\n watch: {\n parsedNow: 'updateTimes',\n },\n\n created () {\n this.updateTimes()\n this.setPresent()\n },\n\n methods: {\n setPresent (): void {\n this.times.now.present = this.times.today.present = true\n this.times.now.past = this.times.today.past = false\n this.times.now.future = this.times.today.future = false\n },\n updateTimes (): void {\n const now: CalendarTimestamp = this.parsedNow || this.getNow()\n this.updateDay(now, this.times.now)\n this.updateTime(now, this.times.now)\n this.updateDay(now, this.times.today)\n },\n getNow (): CalendarTimestamp {\n return parseDate(new Date())\n },\n updateDay (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.date !== target.date) {\n target.year = now.year\n target.month = now.month\n target.day = now.day\n target.weekday = now.weekday\n target.date = now.date\n }\n },\n updateTime (now: CalendarTimestamp, target: CalendarTimestamp): void {\n if (now.time !== target.time) {\n target.hour = now.hour\n target.minute = now.minute\n target.time = now.time\n }\n },\n },\n})\n","import { CalendarEventParsed, CalendarEventVisual, CalendarTimestamp } from 'vuetify/types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\nconst MILLIS_IN_DAY = 86400000\n\nexport type GetRange = (event: CalendarEventParsed) => [number, number]\n\nexport function getVisuals (events: CalendarEventParsed[], minStart = 0): CalendarEventVisual[] {\n const visuals = events.map(event => ({\n event,\n columnCount: 0,\n column: 0,\n left: 0,\n width: 100,\n }))\n\n visuals.sort((a, b) => {\n return (Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier)) ||\n (b.event.endTimestampIdentifier - a.event.endTimestampIdentifier)\n })\n\n return visuals\n}\n\nexport interface ColumnGroup {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\nexport function hasOverlap (s0: number, e0: number, s1: number, e1: number, exclude = true): boolean {\n return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1)\n}\n\nexport function setColumnCount (groups: ColumnGroup[]) {\n groups.forEach(group => {\n group.visuals.forEach(groupVisual => {\n groupVisual.columnCount = groups.length\n })\n })\n}\n\nexport function getRange (event: CalendarEventParsed): [number, number] {\n return [event.startTimestampIdentifier, event.endTimestampIdentifier]\n}\n\nexport function getDayRange (event: CalendarEventParsed): [number, number] {\n return [event.startIdentifier, event.endIdentifier]\n}\n\nexport function getNormalizedRange (event: CalendarEventParsed, dayStart: number): [number, number] {\n return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)]\n}\n\nexport function getOpenGroup (groups: ColumnGroup[], start: number, end: number, timed: boolean) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i]\n let intersected = false\n\n if (hasOverlap(start, end, group.start, group.end, timed)) {\n for (let k = 0; k < group.visuals.length; k++) {\n const groupVisual = group.visuals[k]\n const [groupStart, groupEnd] = timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event)\n\n if (hasOverlap(start, end, groupStart, groupEnd, timed)) {\n intersected = true\n break\n }\n }\n }\n\n if (!intersected) {\n return i\n }\n }\n\n return -1\n}\n\nexport function getOverlapGroupHandler (firstWeekday: number) {\n const handler = {\n groups: [] as ColumnGroup[],\n min: -1,\n max: -1,\n reset: () => {\n handler.groups = []\n handler.min = handler.max = -1\n },\n getVisuals: (day: CalendarTimestamp, dayEvents: CalendarEventParsed[], timed: boolean, reset = false) => {\n if (day.weekday === firstWeekday || reset) {\n handler.reset()\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n\n visuals.forEach(visual => {\n const [start, end] = timed ? getRange(visual.event) : getDayRange(visual.event)\n\n if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {\n setColumnCount(handler.groups)\n handler.reset()\n }\n\n let targetGroup = getOpenGroup(handler.groups, start, end, timed)\n\n if (targetGroup === -1) {\n targetGroup = handler.groups.length\n\n handler.groups.push({ start, end, visuals: [] })\n }\n\n const target = handler.groups[targetGroup]\n target.visuals.push(visual)\n target.start = Math.min(target.start, start)\n target.end = Math.max(target.end, end)\n\n visual.column = targetGroup\n\n if (handler.min === -1) {\n handler.min = start\n handler.max = end\n } else {\n handler.min = Math.min(handler.min, start)\n handler.max = Math.max(handler.max, end)\n }\n })\n\n setColumnCount(handler.groups)\n\n if (timed) {\n handler.reset()\n }\n\n return visuals\n },\n }\n\n return handler\n}\n","import { CalendarEventOverlapMode, CalendarEventVisual } from 'vuetify/types'\nimport { getOverlapGroupHandler, getVisuals, hasOverlap, getNormalizedRange } from './common'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\ninterface Group {\n start: number\n end: number\n visuals: CalendarEventVisual[]\n}\n\ninterface Node {\n parent: Node | null\n sibling: boolean\n index: number\n visual: CalendarEventVisual\n start: number\n end: number\n children: Node[]\n}\n\nconst FULL_WIDTH = 100\n\nconst DEFAULT_OFFSET = 5\n\nconst WIDTH_MULTIPLIER = 1.7\n\n/**\n * Variation of column mode where events can be stacked. The priority of this\n * mode is to stack events together taking up the least amount of space while\n * trying to ensure the content of the event is always visible as well as its\n * start and end. A sibling column has intersecting event content and must be\n * placed beside each other. Non-sibling columns are offset by 5% from the\n * previous column. The width is scaled by 1.7 so the events overlap and\n * whitespace is reduced. If there is a hole in columns the event width is\n * scaled up so it intersects with the next column. The columns have equal\n * width in the space they are given. If the event doesn't have any to the\n * right of it that intersect with it's content it's right side is extended\n * to the right side.\n */\n\nexport const stack: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n // eslint-disable-next-line max-statements\n return (day, dayEvents, timed, reset) => {\n if (!timed) {\n return handler.getVisuals(day, dayEvents, timed, reset)\n }\n\n const dayStart = getTimestampIdentifier(day)\n const visuals = getVisuals(dayEvents, dayStart)\n const groups = getGroups(visuals, dayStart)\n\n for (const group of groups) {\n const nodes: Node[] = []\n\n for (const visual of group.visuals) {\n const child = getNode(visual, dayStart)\n const index = getNextIndex(child, nodes)\n\n if (index === false) {\n const parent = getParent(child, nodes)\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n child.index = parent.index + 1\n parent.children.push(child)\n }\n } else {\n const [parent] = getOverlappingRange(child, nodes, index - 1, index - 1)\n const children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true)\n\n child.children = children\n child.index = index\n\n if (parent) {\n child.parent = parent\n child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n parent.children.push(child)\n }\n\n for (const grand of children) {\n if (grand.parent === parent) {\n grand.parent = child\n }\n\n const grandNext = grand.index - child.index <= 1\n if (grandNext && child.sibling &&\n hasOverlap(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {\n grand.sibling = true\n }\n }\n }\n\n nodes.push(child)\n }\n\n calculateBounds(nodes, overlapThreshold)\n }\n\n visuals.sort((a, b) => (a.left - b.left) || (a.event.startTimestampIdentifier - b.event.startTimestampIdentifier))\n\n return visuals\n }\n}\n\nfunction calculateBounds (nodes: Node[], overlapThreshold: number) {\n for (const node of nodes) {\n const { visual, parent } = node\n const columns = getMaxChildIndex(node) + 1\n const spaceLeft = parent ? parent.visual.left : 0\n const spaceWidth = FULL_WIDTH - spaceLeft\n const offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns)\n const columnWidthMultiplier = getColumnWidthMultiplier(node, nodes)\n const columnOffset = spaceWidth / (columns - node.index + 1)\n const columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier\n\n if (parent) {\n visual.left = node.sibling\n ? spaceLeft + columnOffset\n : spaceLeft + offset\n }\n\n visual.width = hasFullWidth(node, nodes, overlapThreshold)\n ? FULL_WIDTH - visual.left\n : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER)\n }\n}\n\nfunction getColumnWidthMultiplier (node: Node, nodes: Node[]): number {\n if (!node.children.length) {\n return 1\n }\n\n const maxColumn = node.index + nodes.length\n const minColumn = node.children.reduce((min, c) => Math.min(min, c.index), maxColumn)\n\n return minColumn - node.index\n}\n\nfunction getOverlappingIndices (node: Node, nodes: Node[]): number[] {\n const indices: number[] = []\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end)) {\n indices.push(other.index)\n }\n }\n return indices\n}\n\nfunction getNextIndex (node: Node, nodes: Node[]): number | false {\n const indices = getOverlappingIndices(node, nodes)\n indices.sort()\n\n for (let i = 0; i < indices.length; i++) {\n if (i < indices[i]) {\n return i\n }\n }\n return false\n}\n\nfunction getOverlappingRange (node: Node, nodes: Node[], indexMin: number, indexMax: number, returnFirstColumn = false): Node[] {\n const overlapping: Node[] = []\n for (const other of nodes) {\n if (other.index >= indexMin && other.index <= indexMax && hasOverlap(node.start, node.end, other.start, other.end)) {\n overlapping.push(other)\n }\n }\n if (returnFirstColumn && overlapping.length > 0) {\n const first = overlapping.reduce((min, n) => Math.min(min, n.index), overlapping[0].index)\n return overlapping.filter(n => n.index === first)\n }\n return overlapping\n}\n\nfunction getParent (node: Node, nodes: Node[]): Node | null {\n let parent: Node | null = null\n for (const other of nodes) {\n if (hasOverlap(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {\n parent = other\n }\n }\n return parent\n}\n\nfunction hasFullWidth (node: Node, nodes: Node[], overlapThreshold: number): boolean {\n for (const other of nodes) {\n if (other !== node &&\n other.index > node.index &&\n hasOverlap(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {\n return false\n }\n }\n\n return true\n}\n\nfunction getGroups (visuals: CalendarEventVisual[], dayStart: number): Group[] {\n const groups: Group[] = []\n\n for (const visual of visuals) {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n let added = false\n\n for (const group of groups) {\n if (hasOverlap(start, end, group.start, group.end)) {\n group.visuals.push(visual)\n group.end = Math.max(group.end, end)\n added = true\n break\n }\n }\n\n if (!added) {\n groups.push({ start, end, visuals: [visual] })\n }\n }\n\n return groups\n}\n\nfunction getNode (visual: CalendarEventVisual, dayStart: number): Node {\n const [start, end] = getNormalizedRange(visual.event, dayStart)\n\n return {\n parent: null,\n sibling: true,\n index: 0,\n visual,\n start,\n end,\n children: [],\n }\n}\n\nfunction getMaxChildIndex (node: Node): number {\n let max = node.index\n for (const child of node.children) {\n const childMax = getMaxChildIndex(child)\n if (childMax > max) {\n max = childMax\n }\n }\n return max\n}\n\nfunction addTime (identifier: number, minutes: number): number {\n const removeMinutes = identifier % 100\n const totalMinutes = removeMinutes + minutes\n const addHours = Math.floor(totalMinutes / 60)\n const addMinutes = totalMinutes % 60\n\n return identifier - removeMinutes + addHours * 100 + addMinutes\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { getOverlapGroupHandler } from './common'\n\nconst FULL_WIDTH = 100\n\nexport const column: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n const handler = getOverlapGroupHandler(firstWeekday)\n\n return (day, dayEvents, timed, reset) => {\n const visuals = handler.getVisuals(day, dayEvents, timed, reset)\n\n if (timed) {\n visuals.forEach(visual => {\n visual.left = visual.column * FULL_WIDTH / visual.columnCount\n visual.width = FULL_WIDTH / visual.columnCount\n })\n }\n\n return visuals\n }\n}\n","import { CalendarEventOverlapMode } from 'vuetify/types'\nimport { stack } from './stack'\nimport { column } from './column'\n\nexport const CalendarEventOverlapModes: Record = {\n stack,\n column,\n}\n","\nimport { validateTimestamp, parseDate, DAYS_IN_WEEK, validateTime } from './timestamp'\nimport { PropType } from 'vue'\nimport { CalendarEvent, CalendarFormatter, CalendarTimestamp, CalendarEventOverlapMode, CalendarEventNameFunction, CalendarEventColorFunction, CalendarEventCategoryFunction, CalendarEventTimedFunction, CalendarCategoryTextFunction, CalendarCategory } from 'vuetify/types'\nimport { CalendarEventOverlapModes } from '../modes'\nimport { PropValidator } from 'vue/types/options'\n\nexport default {\n base: {\n start: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n default: () => parseDate(new Date()).date,\n },\n end: {\n type: [String, Number, Date],\n validate: validateTimestamp,\n },\n weekdays: {\n type: [Array, String] as PropType,\n default: () => [0, 1, 2, 3, 4, 5, 6],\n validate: validateWeekdays,\n },\n hideHeader: {\n type: Boolean,\n },\n shortWeekdays: {\n type: Boolean,\n default: true,\n },\n weekdayFormat: {\n type: Function as PropType,\n default: null,\n },\n dayFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n intervals: {\n maxDays: {\n type: Number,\n default: 7,\n },\n shortIntervals: {\n type: Boolean,\n default: true,\n },\n intervalHeight: {\n type: [Number, String],\n default: 48,\n validate: validateNumber,\n },\n intervalWidth: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n intervalMinutes: {\n type: [Number, String],\n default: 60,\n validate: validateNumber,\n },\n firstInterval: {\n type: [Number, String],\n default: 0,\n validate: validateNumber,\n },\n firstTime: {\n type: [Number, String, Object],\n validate: validateTime,\n },\n intervalCount: {\n type: [Number, String],\n default: 24,\n validate: validateNumber,\n },\n intervalFormat: {\n type: Function as PropType,\n default: null,\n },\n intervalStyle: {\n type: Function as PropType<(interval: CalendarTimestamp) => object>,\n default: null,\n },\n showIntervalLabel: {\n type: Function as PropType<(interval: CalendarTimestamp) => boolean>,\n default: null,\n },\n },\n weeks: {\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n minWeeks: {\n validate: validateNumber,\n default: 1,\n },\n shortMonths: {\n type: Boolean,\n default: true,\n },\n showMonthOnFirst: {\n type: Boolean,\n default: true,\n },\n showWeek: Boolean,\n monthFormat: {\n type: Function as PropType,\n default: null,\n },\n },\n calendar: {\n type: {\n type: String,\n default: 'month',\n },\n value: {\n type: [String, Number, Date] as PropType,\n validate: validateTimestamp,\n },\n },\n category: {\n categories: {\n type: [Array, String] as PropType,\n default: '',\n },\n categoryText: {\n type: [String, Function] as PropType,\n },\n categoryHideDynamic: {\n type: Boolean,\n },\n categoryShowAll: {\n type: Boolean,\n },\n categoryForInvalid: {\n type: String,\n default: '',\n },\n categoryDays: {\n type: [Number, String],\n default: 1,\n validate: (x: any) => isFinite(parseInt(x)) && parseInt(x) > 0,\n },\n },\n events: {\n events: {\n type: Array,\n default: () => [],\n } as PropValidator,\n eventStart: {\n type: String,\n default: 'start',\n },\n eventEnd: {\n type: String,\n default: 'end',\n },\n eventTimed: {\n type: [String, Function] as PropType,\n default: 'timed',\n },\n eventCategory: {\n type: [String, Function] as PropType,\n default: 'category',\n },\n eventHeight: {\n type: Number,\n default: 20,\n },\n eventColor: {\n type: [String, Function] as PropType,\n default: 'primary',\n },\n eventTextColor: {\n type: [String, Function] as PropType,\n default: 'white',\n },\n eventName: {\n type: [String, Function] as PropType,\n default: 'name',\n },\n eventOverlapThreshold: {\n type: [String, Number],\n default: 60,\n },\n eventOverlapMode: {\n type: [String, Function],\n default: 'stack',\n validate: (mode: any) => mode in CalendarEventOverlapModes || typeof mode === 'function',\n } as PropValidator<'stack' | 'column' | CalendarEventOverlapMode>,\n eventMore: {\n type: Boolean,\n default: true,\n },\n eventMoreText: {\n type: String,\n default: '$vuetify.calendar.moreEvents',\n },\n eventRipple: {\n type: [Boolean, Object],\n default: null,\n },\n eventMarginBottom: {\n type: Number,\n default: 1,\n },\n },\n}\n\nexport function validateNumber (input: any): boolean {\n return isFinite(parseInt(input))\n}\n\nexport function validateWeekdays (input: string | (number | string)[]): boolean {\n if (typeof input === 'string') {\n input = input.split(',')\n }\n\n if (Array.isArray(input)) {\n const ints = input.map(x => parseInt(x))\n\n if (ints.length > DAYS_IN_WEEK || ints.length === 0) {\n return false\n }\n\n const visited: Record = {}\n let wrapped = false\n\n for (let i = 0; i < ints.length; i++) {\n const x = ints[i]\n\n if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {\n return false\n }\n\n if (i > 0) {\n const d = x - ints[i - 1]\n if (d < 0) {\n if (wrapped) {\n return false\n }\n wrapped = true\n } else if (d === 0) {\n return false\n }\n }\n\n if (visited[x]) {\n return false\n }\n visited[x] = true\n }\n\n return true\n }\n\n return false\n}\n","\n// Mixins\nimport mixins from '../../../util/mixins'\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Mouse from './mouse'\nimport Themeable from '../../../mixins/themeable'\nimport Times from './times'\n\n// Directives\nimport Resize from '../../../directives/resize'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTimestamp,\n getWeekdaySkips,\n createDayList,\n createNativeLocaleFormatter,\n getStartOfWeek,\n getEndOfWeek,\n getTimestampIdentifier,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Mouse,\n Themeable,\n Times\n/* @vue/component */\n).extend({\n name: 'calendar-base',\n\n directives: {\n Resize,\n },\n\n props: props.base,\n\n computed: {\n parsedWeekdays (): number[] {\n return Array.isArray(this.weekdays)\n ? this.weekdays\n : (this.weekdays || '').split(',').map(x => parseInt(x, 10))\n },\n weekdaySkips (): number[] {\n return getWeekdaySkips(this.parsedWeekdays)\n },\n weekdaySkipsReverse (): number [] {\n const reversed = this.weekdaySkips.slice()\n reversed.reverse()\n return reversed\n },\n parsedStart (): CalendarTimestamp {\n return parseTimestamp(this.start, true)\n },\n parsedEnd (): CalendarTimestamp {\n const start = this.parsedStart\n const end: CalendarTimestamp = this.end ? parseTimestamp(this.end) || start : start\n\n return getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips\n )\n },\n dayFormatter (): CalendarFormatter {\n if (this.dayFormat) {\n return this.dayFormat as CalendarFormatter\n }\n\n const options = { timeZone: 'UTC', day: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, _short) => options\n )\n },\n weekdayFormatter (): CalendarFormatter {\n if (this.weekdayFormat) {\n return this.weekdayFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', weekday: 'long' }\n const shortOptions = { timeZone: 'UTC', weekday: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n getRelativeClasses (timestamp: CalendarTimestamp, outside = false): object {\n return {\n 'v-present': timestamp.present,\n 'v-past': timestamp.past,\n 'v-future': timestamp.future,\n 'v-outside': outside,\n }\n },\n getStartOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getStartOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getEndOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n return getEndOfWeek(timestamp, this.parsedWeekdays, this.times.today)\n },\n getFormatter (options: object): CalendarFormatter {\n return createNativeLocaleFormatter(\n this.locale,\n (_tms, _short) => options\n )\n },\n },\n})\n","import {\n parseTimestamp,\n getDayIdentifier,\n getTimestampIdentifier,\n isTimedless,\n updateHasTime,\n} from './timestamp'\nimport { CalendarTimestamp, CalendarEvent, CalendarEventParsed } from 'vuetify/types'\n\nexport function parseEvent (\n input: CalendarEvent,\n index: number,\n startProperty: string,\n endProperty: string,\n timed = false,\n category: string | false = false,\n): CalendarEventParsed {\n const startInput = input[startProperty]\n const endInput = input[endProperty]\n const startParsed: CalendarTimestamp = parseTimestamp(startInput, true)\n const endParsed: CalendarTimestamp = (endInput ? parseTimestamp(endInput, true) : startParsed)\n const start: CalendarTimestamp = isTimedless(startInput)\n ? updateHasTime(startParsed, timed)\n : startParsed\n const end: CalendarTimestamp = isTimedless(endInput)\n ? updateHasTime(endParsed, timed)\n : endParsed\n const startIdentifier: number = getDayIdentifier(start)\n const startTimestampIdentifier: number = getTimestampIdentifier(start)\n const endIdentifier: number = getDayIdentifier(end)\n const endOffset: number = start.hasTime ? 0 : 2359\n const endTimestampIdentifier: number = getTimestampIdentifier(end) + endOffset\n const allDay = !start.hasTime\n\n return { input, start, startIdentifier, startTimestampIdentifier, end, endIdentifier, endTimestampIdentifier, allDay, index, category }\n}\n\nexport function isEventOn (event: CalendarEventParsed, dayIdentifier: number): boolean {\n return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier\n}\n\nexport function isEventHiddenOn (event: CalendarEventParsed, day: CalendarTimestamp): boolean {\n return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date\n}\n\nexport function isEventStart (event: CalendarEventParsed, day: CalendarTimestamp, dayIdentifier: number, firstWeekday: number): boolean {\n return dayIdentifier === event.startIdentifier || (firstWeekday === day.weekday && isEventOn(event, dayIdentifier))\n}\n\nexport function isEventOverlapping (event: CalendarEventParsed, startIdentifier: number, endIdentifier: number): boolean {\n return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier\n}\n","// Styles\nimport './calendar-with-events.sass'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n// Directives\nimport ripple from '../../../directives/ripple'\n\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Helpers\nimport { escapeHTML } from '../../../util/helpers'\n\n// Util\nimport props from '../util/props'\nimport {\n CalendarEventOverlapModes,\n} from '../modes'\nimport {\n getDayIdentifier, diffMinutes,\n} from '../util/timestamp'\nimport {\n parseEvent,\n isEventStart,\n isEventOn,\n isEventOverlapping,\n isEventHiddenOn,\n} from '../util/events'\nimport {\n CalendarTimestamp,\n CalendarEventParsed,\n CalendarEventVisual,\n CalendarEventColorFunction,\n CalendarEventNameFunction,\n CalendarEventTimedFunction,\n CalendarDaySlotScope,\n CalendarDayBodySlotScope,\n CalendarEventOverlapMode,\n CalendarEvent,\n CalendarEventCategoryFunction,\n CalendarCategory,\n} from 'vuetify/types'\n\n// Types\ntype VEventGetter = (day: D) => CalendarEventParsed[]\n\ntype VEventVisualToNode = (visual: CalendarEventVisual, day: D) => VNode | false\n\ntype VEventsToNodes = (\n day: D,\n getter: VEventGetter,\n mapper: VEventVisualToNode,\n timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n [date: string]: {\n parent: HTMLElement\n more: HTMLElement | null\n events: HTMLElement[]\n }\n}\n\ninterface VEventScopeInput {\n eventParsed: CalendarEventParsed\n day: CalendarDaySlotScope\n start: boolean\n end: boolean\n timed: boolean\n}\n\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\nconst MINUTES_IN_DAY = 1440\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-events',\n\n directives: {\n ripple,\n },\n\n props: {\n ...props.events,\n ...props.calendar,\n ...props.category,\n },\n\n computed: {\n noEvents (): boolean {\n return this.events.length === 0\n },\n parsedEvents (): CalendarEventParsed[] {\n return this.events.map(this.parseEvent)\n },\n parsedEventOverlapThreshold (): number {\n return parseInt(this.eventOverlapThreshold)\n },\n eventTimedFunction (): CalendarEventTimedFunction {\n return typeof this.eventTimed === 'function'\n ? this.eventTimed\n : event => !!event[this.eventTimed as string]\n },\n eventCategoryFunction (): CalendarEventCategoryFunction {\n return typeof this.eventCategory === 'function'\n ? this.eventCategory\n : event => event[this.eventCategory as string]\n },\n eventTextColorFunction (): CalendarEventColorFunction {\n return typeof this.eventTextColor === 'function'\n ? this.eventTextColor\n : () => this.eventTextColor as string\n },\n eventNameFunction (): CalendarEventNameFunction {\n return typeof this.eventName === 'function'\n ? this.eventName\n : (event, timedEvent) => escapeHTML(event.input[this.eventName as string] as string || '')\n },\n eventModeFunction (): CalendarEventOverlapMode {\n return typeof this.eventOverlapMode === 'function'\n ? this.eventOverlapMode\n : CalendarEventOverlapModes[this.eventOverlapMode]\n },\n eventWeekdays (): number[] {\n return this.parsedWeekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n },\n\n methods: {\n eventColorFunction (e: CalendarEvent): string {\n return typeof this.eventColor === 'function'\n ? this.eventColor(e)\n : e.color || this.eventColor\n },\n parseEvent (input: CalendarEvent, index = 0): CalendarEventParsed {\n return parseEvent(\n input,\n index,\n this.eventStart,\n this.eventEnd,\n this.eventTimedFunction(input),\n this.categoryMode ? this.eventCategoryFunction(input) : false,\n )\n },\n formatTime (withTime: CalendarTimestamp, ampm: boolean): string {\n const formatter = this.getFormatter({\n timeZone: 'UTC',\n hour: 'numeric',\n minute: withTime.minute > 0 ? 'numeric' : undefined,\n })\n\n return formatter(withTime, true)\n },\n updateEventVisibility () {\n if (this.noEvents || !this.eventMore) {\n return\n }\n\n const eventHeight = this.eventHeight\n const eventsMap = this.getEventsMap()\n\n for (const date in eventsMap) {\n const { parent, events, more } = eventsMap[date]\n if (!more) {\n break\n }\n\n const parentBounds = parent.getBoundingClientRect()\n const last = events.length - 1\n const eventsSorted = events.map(event => ({\n event,\n bottom: event.getBoundingClientRect().bottom,\n })).sort((a, b) => a.bottom - b.bottom)\n let hidden = 0\n\n for (let i = 0; i <= last; i++) {\n const bottom = eventsSorted[i].bottom\n const hide = i === last\n ? (bottom > parentBounds.bottom)\n : (bottom + eventHeight > parentBounds.bottom)\n\n if (hide) {\n eventsSorted[i].event.style.display = 'none'\n hidden++\n }\n }\n\n if (hidden) {\n more.style.display = ''\n more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden)\n } else {\n more.style.display = 'none'\n }\n }\n },\n getEventsMap (): VDailyEventsMap {\n const eventsMap: VDailyEventsMap = {}\n const elements = this.$refs.events as HTMLElement[]\n\n if (!elements || !elements.forEach) {\n return eventsMap\n }\n\n elements.forEach(el => {\n const date = el.getAttribute('data-date')\n if (el.parentElement && date) {\n if (!(date in eventsMap)) {\n eventsMap[date] = {\n parent: el.parentElement,\n more: null,\n events: [],\n }\n }\n if (el.getAttribute('data-more')) {\n eventsMap[date].more = el\n } else {\n eventsMap[date].events.push(el)\n el.style.display = ''\n }\n }\n })\n\n return eventsMap\n },\n genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n const dayIdentifier = getDayIdentifier(day)\n const week = day.week\n const start = dayIdentifier === event.startIdentifier\n let end = dayIdentifier === event.endIdentifier\n let width = WIDTH_START\n\n if (!this.categoryMode) {\n for (let i = day.index + 1; i < week.length; i++) {\n const weekdayIdentifier = getDayIdentifier(week[i])\n if (event.endIdentifier >= weekdayIdentifier) {\n width += WIDTH_FULL\n end = end || weekdayIdentifier === event.endIdentifier\n } else {\n end = true\n break\n }\n }\n }\n const scope = { eventParsed: event, day, start, end, timed: false }\n\n return this.genEvent(event, scope, false, {\n staticClass: 'v-event',\n class: {\n 'v-event-start': start,\n 'v-event-end': end,\n },\n style: {\n height: `${eventHeight}px`,\n width: `${width}%`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n key: event.index,\n ref: 'events',\n refInFor: true,\n })\n },\n genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n if (day.timeDelta(event.end) < 0 || day.timeDelta(event.start) >= 1 || isEventHiddenOn(event, day)) {\n return false\n }\n\n const dayIdentifier = getDayIdentifier(day)\n const start = event.startIdentifier >= dayIdentifier\n const end = event.endIdentifier > dayIdentifier\n const top = start ? day.timeToY(event.start) : 0\n const bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end)\n const height = Math.max(this.eventHeight, bottom - top)\n const scope = { eventParsed: event, day, start, end, timed: true }\n\n return this.genEvent(event, scope, true, {\n staticClass: 'v-event-timed',\n style: {\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}%`,\n width: `${width}%`,\n },\n })\n },\n genEvent (event: CalendarEventParsed, scopeInput: VEventScopeInput, timedEvent: boolean, data: VNodeData): VNode {\n const slot = this.$scopedSlots.event\n const text = this.eventTextColorFunction(event.input)\n const background = this.eventColorFunction(event.input)\n const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n const singline = diffMinutes(event.start, event.end) <= this.parsedEventOverlapThreshold\n const formatTime = this.formatTime\n const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n const eventSummary = () => {\n const name = this.eventNameFunction(event, timedEvent)\n if (event.start.hasTime) {\n const eventSummaryClass = 'v-event-summary'\n if (timedEvent) {\n const time = timeSummary()\n const delimiter = singline ? ', ' : '
'\n\n return `${name}${delimiter}${time}`\n } else {\n const time = formatTime(event.start, true)\n\n return `${time} ${name}`\n }\n }\n\n return name\n }\n\n const scope = {\n ...scopeInput,\n event: event.input,\n outside: scopeInput.day.outside,\n singline,\n overlapsNoon,\n formatTime,\n timeSummary,\n eventSummary,\n }\n\n return this.$createElement('div',\n this.setTextColor(text,\n this.setBackgroundColor(background, {\n on: this.getDefaultMouseEventHandlers(':event', nativeEvent => ({ ...scope, nativeEvent })),\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n ...data,\n })\n ), slot\n ? slot(scope)\n : [this.genName(eventSummary)]\n )\n },\n genName (eventSummary: () => string): VNode {\n return this.$createElement('div', {\n staticClass: 'pl-1',\n domProps: {\n innerHTML: eventSummary(),\n },\n })\n },\n genPlaceholder (day: CalendarTimestamp): VNode {\n const height = this.eventHeight + this.eventMarginBottom\n\n return this.$createElement('div', {\n style: {\n height: `${height}px`,\n },\n attrs: {\n 'data-date': day.date,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n genMore (day: CalendarDaySlotScope): VNode {\n const eventHeight = this.eventHeight\n const eventMarginBottom = this.eventMarginBottom\n\n return this.$createElement('div', {\n staticClass: 'v-event-more pl-1',\n class: {\n 'v-outside': day.outside,\n },\n attrs: {\n 'data-date': day.date,\n 'data-more': 1,\n },\n directives: [{\n name: 'ripple',\n value: this.eventRipple ?? true,\n }],\n on: this.getDefaultMouseEventHandlers(':more', nativeEvent => {\n return { nativeEvent, ...day }\n }),\n\n style: {\n display: 'none',\n height: `${eventHeight}px`,\n 'margin-bottom': `${eventMarginBottom}px`,\n },\n ref: 'events',\n refInFor: true,\n })\n },\n getVisibleEvents (): CalendarEventParsed[] {\n const start = getDayIdentifier(this.days[0])\n const end = getDayIdentifier(this.days[this.days.length - 1])\n\n return this.parsedEvents.filter(\n event => isEventOverlapping(event, start, end)\n )\n },\n isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n return !this.categoryMode ||\n (typeof category === 'object' && category.categoryName &&\n category.categoryName === event.category) ||\n (typeof event.category === 'string' && category === event.category) ||\n (typeof event.category !== 'string' && category === null)\n },\n getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => isEventStart(event, day, identifier, firstWeekday)\n )\n },\n getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n const firstWeekday = this.eventWeekdays[0]\n\n return this.parsedEvents.filter(\n event => event.allDay &&\n (this.categoryMode ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n const identifier = getDayIdentifier(day)\n return this.parsedEvents.filter(\n event => !event.allDay &&\n isEventOn(event, identifier) &&\n this.isEventForCategory(event, day.category)\n )\n },\n getScopedSlots () {\n if (this.noEvents) {\n return { ...this.$scopedSlots }\n }\n\n const mode = this.eventModeFunction(\n this.parsedEvents,\n this.eventWeekdays[0],\n this.parsedEventOverlapThreshold\n )\n\n const isNode = (input: VNode | false): input is VNode => !!input\n const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n const events = getter(day)\n const visuals = mode(day, events, timed, this.categoryMode)\n\n if (timed) {\n return visuals.map(visual => mapper(visual, day)).filter(isNode)\n }\n\n const children: VNode[] = []\n\n visuals.forEach((visual, index) => {\n while (children.length < visual.column) {\n children.push(this.genPlaceholder(day))\n }\n\n const mapped = mapper(visual, day)\n if (mapped) {\n children.push(mapped)\n }\n })\n\n return children\n }\n\n const slots = this.$scopedSlots\n const slotDay = slots.day\n const slotDayHeader = slots['day-header']\n const slotDayBody = slots['day-body']\n\n return {\n ...slots,\n day: (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDay, this.genDayEvent, false)\n if (children && children.length > 0 && this.eventMore) {\n children.push(this.genMore(day))\n }\n if (slotDay) {\n const slot = slotDay(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-header': (day: CalendarDaySlotScope) => {\n let children = getSlotChildren(day, this.getEventsForDayAll, this.genDayEvent, false)\n\n if (slotDayHeader) {\n const slot = slotDayHeader(day)\n if (slot) {\n children = children ? children.concat(slot) : slot\n }\n }\n return children\n },\n 'day-body': (day: CalendarDayBodySlotScope) => {\n const events = getSlotChildren(day, this.getEventsForDayTimed, this.genTimedEvent, true)\n let children: VNode[] = [\n this.$createElement('div', {\n staticClass: 'v-event-timed-container',\n }, events),\n ]\n\n if (slotDayBody) {\n const slot = slotDayBody(day)\n if (slot) {\n children = children.concat(slot)\n }\n }\n return children\n },\n }\n },\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarBase from './mixins/calendar-base'\n\n// Util\nimport { getSlot } from '../../util/helpers'\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport props from './util/props'\nimport {\n createDayList,\n getDayIdentifier,\n createNativeLocaleFormatter,\n} from './util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'v-calendar-weekly',\n\n props: props.weeks,\n\n computed: {\n staticClass (): string {\n return 'v-calendar-weekly'\n },\n classes (): object {\n return this.themeClasses\n },\n parsedMinWeeks (): number {\n return parseInt(this.minWeeks)\n },\n days (): CalendarTimestamp[] {\n const minDays = this.parsedMinWeeks * this.parsedWeekdays.length\n const start = this.getStartOfWeek(this.parsedStart)\n const end = this.getEndOfWeek(this.parsedEnd)\n\n return createDayList(\n start,\n end,\n this.times.today,\n this.weekdaySkips,\n Number.MAX_SAFE_INTEGER,\n minDays\n )\n },\n todayWeek (): CalendarTimestamp[] {\n const today = this.times.today\n const start = this.getStartOfWeek(today)\n const end = this.getEndOfWeek(today)\n\n return createDayList(\n start,\n end,\n today,\n this.weekdaySkips,\n this.parsedWeekdays.length,\n this.parsedWeekdays.length\n )\n },\n monthFormatter (): CalendarFormatter {\n if (this.monthFormat) {\n return this.monthFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', month: 'long' }\n const shortOptions = { timeZone: 'UTC', month: 'short' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (_tms, short) => short ? shortOptions : longOptions\n )\n },\n },\n\n methods: {\n isOutside (day: CalendarTimestamp): boolean {\n const dayIdentifier = getDayIdentifier(day)\n\n return dayIdentifier < getDayIdentifier(this.parsedStart) ||\n dayIdentifier > getDayIdentifier(this.parsedEnd)\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head',\n }, this.genHeadDays())\n },\n genHeadDays (): VNode[] {\n const header = this.todayWeek.map(this.genHeadDay)\n\n if (this.showWeek) {\n header.unshift(this.$createElement('div', {\n staticClass: 'v-calendar-weekly__head-weeknumber',\n }))\n }\n\n return header\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n const outside = this.isOutside(this.days[index])\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n key: day.date,\n staticClass: 'v-calendar-weekly__head-weekday',\n class: this.getRelativeClasses(day, outside),\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genWeeks (): VNode[] {\n const days = this.days\n const weekDays = this.parsedWeekdays.length\n const weeks: VNode[] = []\n\n for (let i = 0; i < days.length; i += weekDays) {\n weeks.push(this.genWeek(days.slice(i, i + weekDays), this.getWeekNumber(days[i])))\n }\n\n return weeks\n },\n genWeek (week: CalendarTimestamp[], weekNumber: number): VNode {\n const weekNodes = week.map((day, index) => this.genDay(day, index, week))\n\n if (this.showWeek) {\n weekNodes.unshift(this.genWeekNumber(weekNumber))\n }\n\n return this.$createElement('div', {\n key: week[0].date,\n staticClass: 'v-calendar-weekly__week',\n }, weekNodes)\n },\n getWeekNumber (determineDay: CalendarTimestamp) {\n return weekNumber(\n determineDay.year,\n determineDay.month - 1,\n determineDay.day,\n this.parsedWeekdays[0],\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__weeknumber',\n }, [\n this.$createElement('small', String(weekNumber)),\n ])\n },\n genDay (day: CalendarTimestamp, index: number, week: CalendarTimestamp[]): VNode {\n const outside = this.isOutside(day)\n\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-weekly__day',\n class: this.getRelativeClasses(day, outside),\n on: this.getDefaultMouseEventHandlers(':day', nativeEvent => {\n return { nativeEvent, ...day }\n }),\n }, [\n this.genDayLabel(day),\n ...(getSlot(this, 'day', () => ({ outside, index, week, ...day })) || []),\n ])\n },\n genDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-weekly__day-label',\n }, getSlot(this, 'day-label', day) || [this.genDayLabelButton(day)])\n },\n genDayLabelButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n const hasMonth = day.day === 1 && this.showMonthOnFirst\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n small: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, nativeEvent => ({ nativeEvent, ...day })),\n }, hasMonth\n ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false)\n : this.dayFormatter(day, false)\n )\n },\n genDayMonth (day: CalendarTimestamp): VNode | string {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-weekly__day-month',\n }), getSlot(this, 'day-month', day) || this.monthFormatter(day, this.shortMonths))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: this.staticClass,\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n }, [\n !this.hideHeader ? this.genHead() : '',\n ...this.genWeeks(),\n ])\n },\n})\n","// Styles\nimport './VCalendarWeekly.sass'\n\n// Mixins\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Util\nimport { parseTimestamp, getStartOfMonth, getEndOfMonth } from './util/timestamp'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default VCalendarWeekly.extend({\n name: 'v-calendar-monthly',\n\n computed: {\n staticClass (): string {\n return 'v-calendar-monthly v-calendar-weekly'\n },\n parsedStart (): CalendarTimestamp {\n return getStartOfMonth(parseTimestamp(this.start, true))\n },\n parsedEnd (): CalendarTimestamp {\n return getEndOfMonth(parseTimestamp(this.end, true))\n },\n },\n\n})\n","\n// Mixins\nimport CalendarBase from './calendar-base'\n\n// Util\nimport props from '../util/props'\nimport {\n parseTime,\n copyTimestamp,\n updateMinutes,\n createDayList,\n createIntervalList,\n createNativeLocaleFormatter,\n VTime,\n MINUTES_IN_DAY,\n} from '../util/timestamp'\nimport { CalendarTimestamp, CalendarFormatter, CalendarDayBodySlotScope } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarBase.extend({\n name: 'calendar-with-intervals',\n\n props: props.intervals,\n\n computed: {\n parsedFirstInterval (): number {\n return parseInt(this.firstInterval)\n },\n parsedIntervalMinutes (): number {\n return parseInt(this.intervalMinutes)\n },\n parsedIntervalCount (): number {\n return parseInt(this.intervalCount)\n },\n parsedIntervalHeight (): number {\n return parseFloat(this.intervalHeight)\n },\n parsedFirstTime (): number | false {\n return parseTime(this.firstTime)\n },\n firstMinute (): number {\n const time = this.parsedFirstTime\n\n return time !== false && time >= 0 && time <= MINUTES_IN_DAY\n ? time\n : this.parsedFirstInterval * this.parsedIntervalMinutes\n },\n bodyHeight (): number {\n return this.parsedIntervalCount * this.parsedIntervalHeight\n },\n days (): CalendarTimestamp[] {\n return createDayList(\n this.parsedStart,\n this.parsedEnd,\n this.times.today,\n this.weekdaySkips,\n this.maxDays\n )\n },\n intervals (): CalendarTimestamp[][] {\n const days: CalendarTimestamp[] = this.days\n const first: number = this.firstMinute\n const minutes: number = this.parsedIntervalMinutes\n const count: number = this.parsedIntervalCount\n const now: CalendarTimestamp = this.times.now\n\n return days.map(d => createIntervalList(d, first, minutes, count, now))\n },\n intervalFormatter (): CalendarFormatter {\n if (this.intervalFormat) {\n return this.intervalFormat as CalendarFormatter\n }\n\n const longOptions = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' }\n const shortOptions = { timeZone: 'UTC', hour: 'numeric', minute: '2-digit' }\n const shortHourOptions = { timeZone: 'UTC', hour: 'numeric' }\n\n return createNativeLocaleFormatter(\n this.currentLocale,\n (tms, short) => short ? (tms.minute === 0 ? shortHourOptions : shortOptions) : longOptions\n )\n },\n },\n\n methods: {\n showIntervalLabelDefault (interval: CalendarTimestamp): boolean {\n const first: CalendarTimestamp = this.intervals[0][0]\n const isFirst: boolean = first.hour === interval.hour && first.minute === interval.minute\n return !isFirst\n },\n intervalStyleDefault (_interval: CalendarTimestamp): object | undefined {\n return undefined\n },\n getTimestampAtEvent (e: MouseEvent | TouchEvent, day: CalendarTimestamp): CalendarTimestamp {\n const timestamp: CalendarTimestamp = copyTimestamp(day)\n const bounds = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const baseMinutes: number = this.firstMinute\n const touchEvent: TouchEvent = e as TouchEvent\n const mouseEvent: MouseEvent = e as MouseEvent\n const touches: TouchList = touchEvent.changedTouches || touchEvent.touches\n const clientY: number = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY\n const addIntervals: number = (clientY - bounds.top) / this.parsedIntervalHeight\n const addMinutes: number = Math.floor(addIntervals * this.parsedIntervalMinutes)\n const minutes: number = baseMinutes + addMinutes\n\n return updateMinutes(timestamp, minutes, this.times.now)\n },\n getSlotScope (timestamp: CalendarTimestamp): CalendarDayBodySlotScope {\n const scope = copyTimestamp(timestamp) as any\n scope.timeToY = this.timeToY\n scope.timeDelta = this.timeDelta\n scope.minutesToPixels = this.minutesToPixels\n scope.week = this.days\n return scope\n },\n scrollToTime (time: VTime): boolean {\n const y = this.timeToY(time)\n const pane = this.$refs.scrollArea as HTMLElement\n\n if (y === false || !pane) {\n return false\n }\n\n pane.scrollTop = y\n\n return true\n },\n minutesToPixels (minutes: number): number {\n return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight\n },\n timeToY (time: VTime, clamp = true): number | false {\n let y = this.timeDelta(time)\n\n if (y !== false) {\n y *= this.bodyHeight\n\n if (clamp) {\n if (y < 0) {\n y = 0\n }\n if (y > this.bodyHeight) {\n y = this.bodyHeight\n }\n }\n }\n\n return y\n },\n timeDelta (time: VTime): number | false {\n const minutes = parseTime(time)\n\n if (minutes === false) {\n return false\n }\n\n const min: number = this.firstMinute\n const gap: number = this.parsedIntervalCount * this.parsedIntervalMinutes\n\n return (minutes - min) / gap\n },\n },\n})\n","// Styles\nimport './VCalendarDaily.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Components\nimport VBtn from '../VBtn'\n\n// Mixins\nimport CalendarWithIntervals from './mixins/calendar-with-intervals'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarTimestamp } from 'vuetify/types'\n\n/* @vue/component */\nexport default CalendarWithIntervals.extend({\n name: 'v-calendar-daily',\n\n directives: { Resize },\n\n data: () => ({\n scrollPush: 0,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n ...this.themeClasses,\n }\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.$nextTick(this.onResize)\n },\n onResize () {\n this.scrollPush = this.getScrollPush()\n },\n getScrollPush (): number {\n const area = this.$refs.scrollArea as HTMLElement\n const pane = this.$refs.pane as HTMLElement\n\n return area && pane ? (area.offsetWidth - pane.offsetWidth) : 0\n },\n genHead (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__head',\n style: {\n marginRight: this.scrollPush + 'px',\n },\n }, [\n this.genHeadIntervals(),\n ...this.genHeadDays(),\n ])\n },\n genHeadIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__intervals-head',\n style: {\n width,\n },\n }, getSlot(this, 'interval-header'))\n },\n genHeadDays (): VNode[] {\n return this.days.map(this.genHeadDay)\n },\n genHeadDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily_head-day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':day', nativeEvent => {\n return { nativeEvent, ...this.getSlotScope(day) }\n }),\n }, [\n this.genHeadWeekday(day),\n this.genHeadDayLabel(day),\n ...this.genDayHeader(day, index),\n ])\n },\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n return getSlot(this, 'day-header', () => ({\n week: this.days, ...day, index,\n })) || []\n },\n genHeadWeekday (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : undefined\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-calendar-daily_head-weekday',\n }), this.weekdayFormatter(day, this.shortWeekdays))\n },\n genHeadDayLabel (day: CalendarTimestamp): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily_head-day-label',\n }, getSlot(this, 'day-label-header', day) || [this.genHeadDayButton(day)])\n },\n genHeadDayButton (day: CalendarTimestamp): VNode {\n const color = day.present ? this.color : 'transparent'\n\n return this.$createElement(VBtn, {\n props: {\n color,\n fab: true,\n depressed: true,\n },\n on: this.getMouseEventHandlers({\n 'click:date': { event: 'click', stop: true },\n 'contextmenu:date': { event: 'contextmenu', stop: true, prevent: true, result: false },\n }, nativeEvent => {\n return { nativeEvent, ...day }\n }),\n }, this.dayFormatter(day, false))\n },\n genBody (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__body',\n }, [\n this.genScrollArea(),\n ])\n },\n genScrollArea (): VNode {\n return this.$createElement('div', {\n ref: 'scrollArea',\n staticClass: 'v-calendar-daily__scroll-area',\n }, [\n this.genPane(),\n ])\n },\n genPane (): VNode {\n return this.$createElement('div', {\n ref: 'pane',\n staticClass: 'v-calendar-daily__pane',\n style: {\n height: convertToUnit(this.bodyHeight),\n },\n }, [\n this.genDayContainer(),\n ])\n },\n genDayContainer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-calendar-daily__day-container',\n }, [\n this.genBodyIntervals(),\n ...this.genDays(),\n ])\n },\n genDays (): VNode[] {\n return this.days.map(this.genDay)\n },\n genDay (day: CalendarTimestamp, index: number): VNode {\n return this.$createElement('div', {\n key: day.date,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', nativeEvent => {\n return { nativeEvent, ...this.getSlotScope(this.getTimestampAtEvent(nativeEvent, day)) }\n }),\n }, [\n ...this.genDayIntervals(index),\n ...this.genDayBody(day),\n ])\n },\n genDayBody (day: CalendarTimestamp): VNode[] {\n return getSlot(this, 'day-body', () => this.getSlotScope(day)) || []\n },\n genDayIntervals (index: number): VNode[] {\n return this.intervals[index].map(this.genDayInterval)\n },\n genDayInterval (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler(interval),\n },\n\n }\n\n const children = getSlot(this, 'interval', () => this.getSlotScope(interval))\n\n return this.$createElement('div', data, children)\n },\n genBodyIntervals (): VNode {\n const width: string | undefined = convertToUnit(this.intervalWidth)\n const data = {\n staticClass: 'v-calendar-daily__intervals-body',\n style: {\n width,\n },\n on: this.getDefaultMouseEventHandlers(':interval', nativeEvent => {\n return { nativeEvent, ...this.getTimestampAtEvent(nativeEvent, this.parsedStart) }\n }),\n }\n\n return this.$createElement('div', data, this.genIntervalLabels())\n },\n genIntervalLabels (): VNode[] | null {\n if (!this.intervals.length) return null\n\n return this.intervals[0].map(this.genIntervalLabel)\n },\n genIntervalLabel (interval: CalendarTimestamp): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const short: boolean = this.shortIntervals\n const shower = this.showIntervalLabel || this.showIntervalLabelDefault\n const show = shower(interval)\n const label = show ? this.intervalFormatter(interval, short) : undefined\n\n return this.$createElement('div', {\n key: interval.time,\n staticClass: 'v-calendar-daily__interval',\n style: {\n height,\n },\n }, [\n this.$createElement('div', {\n staticClass: 'v-calendar-daily__interval-text',\n }, label),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n class: this.classes,\n on: {\n dragstart: (e: MouseEvent) => {\n e.preventDefault()\n },\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n }, [\n !this.hideHeader ? this.genHead() : '',\n this.genBody(),\n ])\n },\n})\n","import { CalendarCategory, CalendarCategoryTextFunction } from 'types'\n\nexport function parsedCategoryText (\n category: CalendarCategory,\n categoryText: string | CalendarCategoryTextFunction\n): string {\n return typeof categoryText === 'string' && typeof category === 'object' && category\n ? category[categoryText]\n : typeof categoryText === 'function'\n ? categoryText(category)\n : category\n}\n\nexport function getParsedCategories (\n categories: CalendarCategory | CalendarCategory[],\n categoryText: string | CalendarCategoryTextFunction\n): CalendarCategory[] {\n if (typeof categories === 'string') return categories.split(/\\s*,\\s/)\n if (Array.isArray(categories)) {\n return categories.map((category: CalendarCategory) => {\n if (typeof category === 'string') return category\n\n const categoryName = typeof category.categoryName === 'string'\n ? category.categoryName\n : parsedCategoryText(category, categoryText)\n return { ...category, categoryName }\n })\n }\n return []\n}\n","// Styles\nimport './VCalendarCategory.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport VCalendarDaily from './VCalendarDaily'\n\n// Util\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { CalendarCategory, CalendarTimestamp } from 'types'\nimport props from './util/props'\nimport { getParsedCategories } from './util/parser'\n\n/* @vue/component */\nexport default VCalendarDaily.extend({\n name: 'v-calendar-category',\n\n props: props.category,\n\n computed: {\n classes (): object {\n return {\n 'v-calendar-daily': true,\n 'v-calendar-category': true,\n ...this.themeClasses,\n }\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n methods: {\n genDayHeader (day: CalendarTimestamp, index: number): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n const scope = {\n week: this.days, ...day, index,\n }\n\n const children = this.parsedCategories.map(category => {\n return this.genDayHeaderCategory(day, this.getCategoryScope(scope, category))\n })\n\n return [this.$createElement('div', data, children)]\n },\n getCategoryScope (scope: any, category: CalendarCategory) {\n const cat = typeof category === 'object' && category &&\n category.categoryName === this.categoryForInvalid ? null : category\n return {\n ...scope,\n category: cat,\n }\n },\n genDayHeaderCategory (day: CalendarTimestamp, scope: any): VNode {\n const headerTitle = typeof scope.category === 'object' ? scope.category.categoryName : scope.category\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__column-header',\n on: this.getDefaultMouseEventHandlers(':day-category', e => {\n return this.getCategoryScope(this.getSlotScope(day), scope.category)\n }),\n }, [\n getSlot(this, 'category', scope) || this.genDayHeaderCategoryTitle(headerTitle),\n getSlot(this, 'day-header', scope),\n ])\n },\n genDayHeaderCategoryTitle (categoryName: string | null) {\n return this.$createElement('div', {\n staticClass: 'v-calendar-category__category',\n }, categoryName === null ? this.categoryForInvalid : categoryName)\n },\n genDays (): VNode[] {\n const days: VNode[] = []\n this.days.forEach((d, j) => {\n const day = new Array(this.parsedCategories.length || 1)\n day.fill(d)\n days.push(...day.map((v, i) => this.genDay(v, j, i)))\n })\n return days\n },\n genDay (day: CalendarTimestamp, index: number, categoryIndex: number): VNode {\n const category = this.parsedCategories[categoryIndex]\n return this.$createElement('div', {\n key: day.date + '-' + categoryIndex,\n staticClass: 'v-calendar-daily__day',\n class: this.getRelativeClasses(day),\n on: this.getDefaultMouseEventHandlers(':time', e => {\n return this.getSlotScope(this.getTimestampAtEvent(e, day))\n }),\n }, [\n ...this.genDayIntervals(index, category),\n ...this.genDayBody(day, category),\n ])\n },\n genDayIntervals (index: number, category: CalendarCategory): VNode[] {\n return this.intervals[index].map(v => this.genDayInterval(v, category))\n },\n genDayInterval (interval: CalendarTimestamp, category: CalendarCategory): VNode {\n const height: string | undefined = convertToUnit(this.intervalHeight)\n const styler = this.intervalStyle || this.intervalStyleDefault\n\n const data = {\n key: interval.time,\n staticClass: 'v-calendar-daily__day-interval',\n style: {\n height,\n ...styler({ ...interval, category }),\n },\n }\n\n const children = getSlot(this, 'interval', () =>\n this.getCategoryScope(this.getSlotScope(interval), category)\n )\n\n return this.$createElement('div', data, children)\n },\n genDayBody (day: CalendarTimestamp, category: CalendarCategory): VNode[] {\n const data = {\n staticClass: 'v-calendar-category__columns',\n }\n\n const children = [this.genDayBodyCategory(day, category)]\n\n return [this.$createElement('div', data, children)]\n },\n genDayBodyCategory (day: CalendarTimestamp, category: CalendarCategory): VNode {\n const data = {\n staticClass: 'v-calendar-category__column',\n on: this.getDefaultMouseEventHandlers(':time-category', e => {\n return this.getCategoryScope(this.getSlotScope(this.getTimestampAtEvent(e, day)), category)\n }),\n }\n\n const children = getSlot(this, 'day-body', () => this.getCategoryScope(this.getSlotScope(day), category))\n\n return this.$createElement('div', data, children)\n },\n },\n})\n","// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n\n// Types\nimport { VNode, Component } from 'vue'\n\n// Mixins\nimport CalendarWithEvents from './mixins/calendar-with-events'\n\n// Util\nimport props from './util/props'\nimport {\n DAYS_IN_MONTH_MAX,\n DAY_MIN,\n DAYS_IN_WEEK,\n parseTimestamp,\n validateTimestamp,\n relativeDays,\n nextDay,\n prevDay,\n copyTimestamp,\n updateFormatted,\n updateWeekday,\n updateRelative,\n getStartOfMonth,\n getEndOfMonth,\n VTime,\n VTimestampInput,\n timestampToDate,\n} from './util/timestamp'\n\n// Calendars\nimport VCalendarMonthly from './VCalendarMonthly'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\nimport VCalendarCategory from './VCalendarCategory'\nimport { CalendarTimestamp, CalendarFormatter, CalendarCategory } from 'vuetify/types'\nimport { getParsedCategories } from './util/parser'\n\n// Types\ninterface VCalendarRenderProps {\n start: CalendarTimestamp\n end: CalendarTimestamp\n component: string | Component\n maxDays: number\n weekdays: number[]\n categories: CalendarCategory[]\n}\n\n/* @vue/component */\nexport default CalendarWithEvents.extend({\n name: 'v-calendar',\n\n props: {\n ...props.calendar,\n ...props.weeks,\n ...props.intervals,\n ...props.category,\n },\n\n data: () => ({\n lastStart: null as CalendarTimestamp | null,\n lastEnd: null as CalendarTimestamp | null,\n }),\n\n computed: {\n parsedValue (): CalendarTimestamp {\n return (validateTimestamp(this.value)\n ? parseTimestamp(this.value, true)\n : (this.parsedStart || this.times.today))\n },\n parsedCategoryDays (): number {\n return parseInt(this.categoryDays) || 1\n },\n renderProps (): VCalendarRenderProps {\n const around = this.parsedValue\n let component: any = null\n let maxDays = this.maxDays\n let weekdays = this.parsedWeekdays\n let categories = this.parsedCategories\n let start = around\n let end = around\n switch (this.type) {\n case 'month':\n component = VCalendarMonthly\n start = getStartOfMonth(around)\n end = getEndOfMonth(around)\n break\n case 'week':\n component = VCalendarDaily\n start = this.getStartOfWeek(around)\n end = this.getEndOfWeek(around)\n maxDays = 7\n break\n case 'day':\n component = VCalendarDaily\n maxDays = 1\n weekdays = [start.weekday]\n break\n case '4day':\n component = VCalendarDaily\n end = relativeDays(copyTimestamp(end), nextDay, 3)\n updateFormatted(end)\n maxDays = 4\n weekdays = [\n start.weekday,\n (start.weekday + 1) % 7,\n (start.weekday + 2) % 7,\n (start.weekday + 3) % 7,\n ]\n break\n case 'custom-weekly':\n component = VCalendarWeekly\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'custom-daily':\n component = VCalendarDaily\n start = this.parsedStart || around\n end = this.parsedEnd\n break\n case 'category':\n const days = this.parsedCategoryDays\n\n component = VCalendarCategory\n end = relativeDays(copyTimestamp(end), nextDay, days)\n updateFormatted(end)\n maxDays = days\n weekdays = []\n\n for (let i = 0; i < days; i++) {\n weekdays.push((start.weekday + i) % 7)\n }\n\n categories = this.getCategoryList(categories)\n break\n default:\n throw new Error(this.type + ' is not a valid Calendar type')\n }\n\n return { component, start, end, maxDays, weekdays, categories }\n },\n eventWeekdays (): number[] {\n return this.renderProps.weekdays\n },\n categoryMode (): boolean {\n return this.type === 'category'\n },\n title (): string {\n const { start, end } = this.renderProps\n const spanYears = start.year !== end.year\n const spanMonths = spanYears || start.month !== end.month\n\n if (spanYears) {\n return this.monthShortFormatter(start, true) + ' ' + start.year + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n }\n\n if (spanMonths) {\n return this.monthShortFormatter(start, true) + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year\n } else {\n return this.monthLongFormatter(start, false) + ' ' + start.year\n }\n },\n monthLongFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'long',\n })\n },\n monthShortFormatter (): CalendarFormatter {\n return this.getFormatter({\n timeZone: 'UTC', month: 'short',\n })\n },\n parsedCategories (): CalendarCategory[] {\n return getParsedCategories(this.categories, this.categoryText)\n },\n },\n\n watch: {\n renderProps: 'checkChange',\n },\n\n mounted () {\n this.updateEventVisibility()\n this.checkChange()\n },\n\n updated () {\n window.requestAnimationFrame(this.updateEventVisibility)\n },\n\n methods: {\n checkChange (): void {\n const { lastStart, lastEnd } = this\n const { start, end } = this.renderProps\n if (!lastStart || !lastEnd ||\n start.date !== lastStart.date ||\n end.date !== lastEnd.date) {\n this.lastStart = start\n this.lastEnd = end\n this.$emit('change', { start, end })\n }\n },\n move (amount = 1): void {\n const moved = copyTimestamp(this.parsedValue)\n const forward = amount > 0\n const mover = forward ? nextDay : prevDay\n const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n let times = forward ? amount : -amount\n\n while (--times >= 0) {\n switch (this.type) {\n case 'month':\n moved.day = limit\n mover(moved)\n break\n case 'week':\n relativeDays(moved, mover, DAYS_IN_WEEK)\n break\n case 'day':\n relativeDays(moved, mover, 1)\n break\n case '4day':\n relativeDays(moved, mover, 4)\n break\n case 'category':\n relativeDays(moved, mover, this.parsedCategoryDays)\n break\n }\n }\n\n updateWeekday(moved)\n updateFormatted(moved)\n updateRelative(moved, this.times.now)\n\n if (this.value instanceof Date) {\n this.$emit('input', timestampToDate(moved))\n } else if (typeof this.value === 'number') {\n this.$emit('input', timestampToDate(moved).getTime())\n } else {\n this.$emit('input', moved.date)\n }\n\n this.$emit('moved', moved)\n },\n next (amount = 1): void {\n this.move(amount)\n },\n prev (amount = 1): void {\n this.move(-amount)\n },\n timeToY (time: VTime, clamp = true): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeToY) {\n return c.timeToY(time, clamp)\n } else {\n return false\n }\n },\n timeDelta (time: VTime): number | false {\n const c = this.$children[0] as any\n\n if (c && c.timeDelta) {\n return c.timeDelta(time)\n } else {\n return false\n }\n },\n minutesToPixels (minutes: number): number {\n const c = this.$children[0] as any\n\n if (c && c.minutesToPixels) {\n return c.minutesToPixels(minutes)\n } else {\n return -1\n }\n },\n scrollToTime (time: VTime): boolean {\n const c = this.$children[0] as any\n\n if (c && c.scrollToTime) {\n return c.scrollToTime(time)\n } else {\n return false\n }\n },\n parseTimestamp (input: VTimestampInput, required?: false): CalendarTimestamp | null {\n return parseTimestamp(input, required, this.times.now)\n },\n timestampToDate (timestamp: CalendarTimestamp): Date {\n return timestampToDate(timestamp)\n },\n getCategoryList (categories: CalendarCategory[]): CalendarCategory[] {\n if (!this.noEvents) {\n const categoryMap: any = categories.reduce((map: any, category, index) => {\n if (typeof category === 'object' && category.categoryName) map[category.categoryName] = { index, count: 0 }\n else if (typeof category === 'string') map[category] = { index, count: 0 }\n return map\n }, {})\n\n if (!this.categoryHideDynamic || !this.categoryShowAll) {\n let categoryLength = categories.length\n\n this.parsedEvents.forEach(ev => {\n let category = ev.category\n\n if (typeof category !== 'string') {\n category = this.categoryForInvalid\n }\n\n if (!category) {\n return\n }\n\n if (category in categoryMap) {\n categoryMap[category].count++\n } else if (!this.categoryHideDynamic) {\n categoryMap[category] = {\n index: categoryLength++,\n count: 1,\n }\n }\n })\n }\n\n if (!this.categoryShowAll) {\n for (const category in categoryMap) {\n if (categoryMap[category].count === 0) {\n delete categoryMap[category]\n }\n }\n }\n\n categories = categories.filter((category: CalendarCategory) => {\n if (typeof category === 'object' && category.categoryName) {\n return categoryMap.hasOwnProperty(category.categoryName)\n } else if (typeof category === 'string') {\n return categoryMap.hasOwnProperty(category)\n }\n return false\n })\n }\n return categories\n },\n },\n\n render (h): VNode {\n const { start, end, maxDays, component, weekdays, categories } = this.renderProps\n\n return h(component, {\n staticClass: 'v-calendar',\n class: {\n 'v-calendar-events': !this.noEvents,\n },\n props: {\n ...this.$props,\n start: start.date,\n end: end.date,\n maxDays,\n weekdays,\n categories,\n },\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.updateEventVisibility,\n }],\n on: {\n ...this.$listeners,\n\n 'click:date': (day: CalendarTimestamp, e?: MouseEvent) => {\n if (this.$listeners.input) {\n this.$emit('input', day.date)\n }\n if (this.$listeners['click:date']) {\n this.$emit('click:date', day, e)\n }\n },\n },\n scopedSlots: this.getScopedSlots(),\n })\n },\n})\n","import VAutocomplete from './VAutocomplete'\n\nexport { VAutocomplete }\nexport default VAutocomplete\n","// Styles\nimport './VBottomNavigation.sass'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport ButtonGroup from '../../mixins/button-group'\nimport Colorable from '../../mixins/colorable'\nimport Measurable from '../../mixins/measurable'\nimport Proxyable from '../../mixins/proxyable'\nimport Scrollable from '../../mixins/scrollable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Applicationable('bottom', [\n 'height',\n 'inputValue',\n ]),\n Colorable,\n Measurable,\n ToggleableFactory('inputValue'),\n Proxyable,\n Scrollable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-bottom-navigation',\n\n props: {\n activeClass: {\n type: String,\n default: 'v-btn--active',\n },\n backgroundColor: String,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: 56,\n },\n hideOnScroll: Boolean,\n horizontal: Boolean,\n inputValue: {\n type: Boolean,\n default: true,\n },\n mandatory: Boolean,\n shift: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n isActive: this.inputValue,\n }\n },\n\n computed: {\n canScroll (): boolean {\n return (\n Scrollable.options.computed.canScroll.call(this) &&\n (\n this.hideOnScroll ||\n !this.inputValue\n )\n )\n },\n classes (): object {\n return {\n 'v-bottom-navigation--absolute': this.absolute,\n 'v-bottom-navigation--grow': this.grow,\n 'v-bottom-navigation--fixed': !this.absolute && (this.app || this.fixed),\n 'v-bottom-navigation--horizontal': this.horizontal,\n 'v-bottom-navigation--shift': this.shift,\n }\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n transform: this.isActive ? 'none' : 'translateY(100%)',\n }\n },\n },\n\n watch: {\n canScroll: 'onScroll',\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('active')) {\n breaking('active.sync', 'value or v-model', this)\n }\n },\n\n methods: {\n thresholdMet () {\n if (this.hideOnScroll) {\n this.isActive = !this.isScrollingUp ||\n this.currentScroll > this.computedScrollThreshold\n\n this.$emit('update:input-value', this.isActive)\n }\n\n if (this.currentThreshold < this.computedScrollThreshold) return\n\n this.savedScroll = this.currentScroll\n },\n updateApplication (): number {\n return this.$el\n ? this.$el.clientHeight\n : 0\n },\n updateValue (val: any) {\n this.$emit('change', val)\n },\n },\n\n render (h): VNode {\n const data = this.setBackgroundColor(this.backgroundColor, {\n staticClass: 'v-bottom-navigation',\n class: this.classes,\n style: this.styles,\n props: {\n activeClass: this.activeClass,\n mandatory: Boolean(\n this.mandatory ||\n this.value !== undefined\n ),\n tag: this.tag,\n value: this.internalValue,\n },\n on: { change: this.updateValue },\n })\n\n if (this.canScroll) {\n data.directives = data.directives || []\n\n data.directives.push({\n arg: this.scrollTarget,\n name: 'scroll',\n value: this.onScroll,\n })\n }\n\n return h(ButtonGroup, this.setTextColor(this.color, data), this.$slots.default)\n },\n})\n","import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | null {\n return this.lazySearch\n },\n set (val: any) { // TODO: this should be `string | null` but it breaks lots of other types\n // emit update event only when the new\n // search value is different from previous\n if (this.lazySearch !== val) {\n this.lazySearch = val\n this.$emit('update:search-input', val)\n }\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.blur()\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = null\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n if (!this.autoSelectFirst) {\n const preSelectedItem = oldVal[this.$refs.menu.listIndex]\n\n if (preSelectedItem) {\n this.setMenuIndex(val.findIndex(i => i === preSelectedItem))\n } else {\n this.setMenuIndex(-1)\n }\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n\n if (this.autoSelectFirst && val.length) {\n this.setMenuIndex(0)\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : null)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = null\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n if (!this.multiple && value === '') this.deleteCurrentItem()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (\n !this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (\n !this.multiple &&\n !this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )\n ) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData?.setData('text/plain', currentItemText)\n event.clipboardData?.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n"],"sourceRoot":""}