Showing preview only (969K chars total). Download the full file or copy to clipboard to get everything.
Repository: stormseed/quasar-calendar
Branch: master
Commit: 4cca6893457f
Files: 76
Total size: 932.0 KB
Directory structure:
gitextract_1_gyaq1y/
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── babel.config.js
├── boot/
│ └── qcalendar.js
├── component/
│ ├── calendar/
│ │ ├── fields/
│ │ │ ├── index.js
│ │ │ └── quasar/
│ │ │ ├── DateTimeMixin.js
│ │ │ ├── FieldDate.vue
│ │ │ └── FieldTime.vue
│ │ ├── mixins/
│ │ │ ├── code/
│ │ │ │ ├── CalendarEventMixin.js
│ │ │ │ ├── CalendarMixin.js
│ │ │ │ ├── CalendarParentComponentMixin.js
│ │ │ │ ├── EventPropsMixin.js
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ └── template/
│ │ │ ├── Calendar.js
│ │ │ ├── CalendarAgenda.js
│ │ │ ├── CalendarAgendaEvent.js
│ │ │ ├── CalendarAgendaInner.js
│ │ │ ├── CalendarAllDayEvents.js
│ │ │ ├── CalendarDayColumn.js
│ │ │ ├── CalendarDayLabels.js
│ │ │ ├── CalendarEvent.js
│ │ │ ├── CalendarEventDetail.js
│ │ │ ├── CalendarHeaderNav.js
│ │ │ ├── CalendarMonth.js
│ │ │ ├── CalendarMonthInner.js
│ │ │ ├── CalendarMultiDay.js
│ │ │ ├── CalendarMultiDayContent.js
│ │ │ ├── CalendarTimeLabelColumn.js
│ │ │ └── index.js
│ │ ├── plugin/
│ │ │ └── Calendar.json
│ │ ├── styles-common/
│ │ │ ├── app.styl
│ │ │ └── calendar.vars.styl
│ │ └── templates/
│ │ └── quasar/
│ │ ├── Calendar.json
│ │ ├── Calendar.vue
│ │ ├── CalendarAgenda.json
│ │ ├── CalendarAgenda.vue
│ │ ├── CalendarEventDetail.vue
│ │ ├── CalendarHeaderNav.vue
│ │ ├── CalendarMonth.json
│ │ ├── CalendarMonth.vue
│ │ ├── CalendarMultiDay.json
│ │ ├── CalendarMultiDay.vue
│ │ └── index.js
│ ├── index.js
│ └── quasar.js
├── demo/
│ ├── App.vue
│ ├── boot/
│ │ └── .gitkeep
│ ├── css/
│ │ ├── app.styl
│ │ └── quasar.variables.styl
│ ├── index.js
│ ├── index.template.html
│ ├── layouts/
│ │ └── LayoutDefault.vue
│ ├── pages/
│ │ ├── Error404.vue
│ │ ├── index.vue
│ │ └── page-mixins/
│ │ ├── move-dates.js
│ │ └── sample-data.js
│ └── router/
│ ├── index.js
│ └── routes.js
├── docs/
│ ├── css/
│ │ ├── 942ad096.eacf1890.css
│ │ └── app.54118af7.css
│ ├── index.html
│ └── js/
│ ├── 116eebfe.60111037.js
│ ├── 942ad096.e9c588f2.js
│ ├── app.699aeeff.js
│ ├── f22ee960.70e2404b.js
│ ├── runtime.14845b32.js
│ └── vendor.4fc4c185.js
├── package.json
├── quasar.conf.js
├── quasar.extensions.json
├── readme.md
└── src/
├── index.js
├── install.js
└── uninstall.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.DS_Store
.Thumbs.db
/node_modules
/*.log
.editorconfig
.eslint*
.stylint*
cordova
*.sublime*
.idea/
debug.log
yarn.lock
package-lock.json
/.quasar
.env
.env.dev
================================================
FILE: .postcssrc.js
================================================
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
plugins: [
// to edit target browsers: use "browserslist" field in package.json
require('autoprefixer')
]
}
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2018 Stormseed
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: babel.config.js
================================================
module.exports = {
presets: [
'@quasar/babel-preset-app'
]
}
================================================
FILE: boot/qcalendar.js
================================================
import {
QCalendar,
QCalendarMonth,
QCalendarMultiDay,
QCalendarAgenda
} from '@quasar/quasar-app-extension-qcalendar/component'
export default async ({ Vue }) => {
Vue.component('q-calendar', QCalendar)
Vue.component('q-calendar-month', QCalendarMonth)
Vue.component('q-calendar-multi-day', QCalendarMultiDay)
Vue.component('q-calendar-agenda', QCalendarAgenda)
}
================================================
FILE: component/calendar/fields/index.js
================================================
// import FieldDate from './FieldDate'
// import FieldTime from './FieldTime'
import QuasarFieldDate from './quasar/FieldDate'
import QuasarFieldTime from './quasar/FieldTime'
export {
QuasarFieldDate,
QuasarFieldTime
}
================================================
FILE: component/calendar/fields/quasar/DateTimeMixin.js
================================================
import DateTime from 'luxon/src/datetime'
export default {
props: {
value: { required: true },
placeholder: String,
label: String,
stackLabel: Boolean,
dense: Boolean
},
computed: {
thisFieldType: function () {
let thisFieldType = 'date'
if (this.$options.name === 'FieldTime') {
thisFieldType = 'time'
}
return thisFieldType
}
},
methods: {
convertValueToStringValue: function (newValue = null, fieldType = 'date') {
if (!newValue) {
newValue = this.value
}
if (newValue instanceof Date) {
newValue = DateTime.fromJSDate(this.value)
}
this.stringValue = newValue.toFormat(this.dateMask.luxon)
this.fakieStringValue = newValue.toLocaleString(this.fakieStringFormats[fieldType])
this.dtValue = newValue
},
convertDtToEverythingElse: function (newDt = null, fieldType = 'date') {
if (!newDt) {
newDt = this.dtValue
}
this.fakieStringValue = newDt.toLocaleString(this.fakieStringFormats[fieldType])
this.dtValue = newDt
this.$emit('input', newDt.toJSDate())
},
handleDateFieldInput: function (value, reason, details) {
this.convertDtToEverythingElse(
this.dtValue.set({
year: details.year,
month: details.month,
day: details.day
}),
'date'
)
this.$refs.qDateTimeProxy.hide()
},
handleTimeFieldInput: function (value, reason, details) {
let tempDT = DateTime.fromFormat(value, this.dateMask.luxon)
this.convertDtToEverythingElse(
this.dtValue.set({
hour: tempDT.hour,
minute: tempDT.minute
}),
'time'
)
// this.$refs.qDateTimeProxy.hide()
}
},
mounted () {
this.convertValueToStringValue(null, this.thisFieldType)
},
data () {
return {
stringValue: '',
dtValue: {},
fakieStringValue: '',
fakieStringFormats: {
date: DateTime.DATE_FULL,
time: DateTime.TIME_SIMPLE
},
dateMask: {
quasar: 'YYYY-MM-DD HH:mm',
luxon: 'yyyy-MM-dd HH:mm'
}
}
},
watch: {
value: function (newVal) {
this.convertValueToStringValue(newVal, this.thisFieldType)
}
}
}
================================================
FILE: component/calendar/fields/quasar/FieldDate.vue
================================================
<template>
<q-input
v-if="stringValue"
v-bind:value="fakieStringValue"
:placeholder="placeholder"
:label="label"
:stack-label="stackLabel"
:dense="dense"
filled
disabled
>
<q-popup-proxy
ref="qDateTimeProxy"
transition-show="scale"
transition-hide="scale"
>
<q-date
class="date-field-q-date"
v-bind:value="stringValue"
@input="handleDateFieldInput"
:mask="dateMask.quasar"
/>
</q-popup-proxy>
<template v-slot:append>
<q-icon name="event" class="cursor-pointer"></q-icon>
</template>
</q-input>
</template>
<script>
import {
QIcon,
QPopupProxy,
QDate,
QInput
} from 'quasar'
import DateTimeMixin from './DateTimeMixin'
export default {
name: 'FieldDate',
mixins: [ DateTimeMixin ],
components: {
QIcon,
QPopupProxy,
QDate,
QInput
}
}
</script>
================================================
FILE: component/calendar/fields/quasar/FieldTime.vue
================================================
<template>
<q-input
v-if="stringValue"
v-bind:value="fakieStringValue"
:placeholder="placeholder"
:label="label"
:stack-label="stackLabel"
:dense="dense"
filled
disabled
>
<q-popup-proxy
ref="qDateTimeProxy"
transition-show="scale"
transition-hide="scale"
>
<q-time
class="date-field-q-date"
v-bind:value="stringValue"
@input="handleTimeFieldInput"
:mask="dateMask.quasar"
/>
</q-popup-proxy>
<template v-slot:append>
<q-icon name="access_time" class="cursor-pointer"></q-icon>
</template>
</q-input>
</template>
<script>
import {
QIcon,
QPopupProxy,
QTime,
QInput
} from 'quasar'
import DateTimeMixin from './DateTimeMixin'
export default {
name: 'FieldTime',
mixins: [ DateTimeMixin ],
components: {
QIcon,
QPopupProxy,
QTime,
QInput
}
}
</script>
================================================
FILE: component/calendar/mixins/code/CalendarEventMixin.js
================================================
import dashHas from 'lodash.has'
import DateTime from 'luxon/src/datetime'
import Interval from 'luxon/src/interval'
const defaultParsed = {
byAllDayStartDate: {},
byAllDayObject: {},
byStartDate: {},
byId: {}
}
const gridBlockSize = 5 // the number here is how many minutes for each block to use when calculating overlaps
// const debug = require('debug')('calendar:CalendarEventMixin')
export default {
computed: {},
methods: {
formatToSqlDate: function (dateObject) {
return this.makeDT(dateObject).toISODate()
},
getEventById: function (eventId) {
return this.parsed.byId[eventId]
},
dateGetEvents: function (thisDate, skipSlotIndicators) {
let hasAllDayEvents = this.hasAllDayEvents(thisDate)
let hasEvents = this.hasEvents(thisDate)
let returnArray = []
let sqlDate = this.makeDT(thisDate).toISODate()
if (hasAllDayEvents) {
let transferFields = ['daysFromStart', 'durationDays', 'hasNext', 'hasPrev', 'slot']
// build temp object with slot IDs
let slotObject = {}
let maxSlot = 0
for (let thisEvent of this.parsed.byAllDayObject[sqlDate]) {
slotObject[thisEvent.slot] = thisEvent
if (thisEvent.slot > maxSlot) {
maxSlot = thisEvent.slot
}
}
// now we have it sorted but have to fill in any gaps
for (let counter = 0; counter <= maxSlot; counter++) {
let tempObject = {}
if (dashHas(slotObject, counter)) {
// this element exists
tempObject = this.getEventById(slotObject[counter].id)
for (let thisField of transferFields) {
tempObject[thisField] = slotObject[counter][thisField]
}
}
else {
// this is an empty slot
tempObject = {
slot: counter,
start: {
isAllDay: true,
isEmptySlot: true
}
}
}
if (skipSlotIndicators && tempObject.slot) {
// bypass this - we don't want slot indicators
}
else {
returnArray.push(tempObject)
}
}
}
if (hasEvents) {
for (let thisEvent of this.parsed.byStartDate[sqlDate]) {
returnArray.push(this.getEventById(thisEvent))
}
}
return returnArray
},
hasAnyEvents: function (thisDateObject) {
return (
this.hasEvents(thisDateObject) ||
this.hasAllDayEvents(thisDateObject)
)
},
hasAllDayEvents: function (thisDateObject) {
return dashHas(
this.parsed.byAllDayObject,
this.formatToSqlDate(thisDateObject)
)
},
hasEvents: function (thisDateObject) {
return dashHas(
this.parsed.byStartDate,
this.formatToSqlDate(thisDateObject)
)
},
clearParsed: function () {
this.parsed = {}
this.parsed = {
byAllDayStartDate: {},
byAllDayObject: {},
byStartDate: {},
byId: {},
byMultiDay: {},
byNextDay: {},
byContinuedMultiDay: {},
byContinuedNextDay: {}
}
return true
},
moveToDisplayZone: function (dateObject) {
return this.makeDT(dateObject, this.calendarTimezone)
},
parseEventList: function () {
this.clearParsed()
for (let thisEvent of this.eventArray) {
this.parsed.byId[thisEvent.id] = thisEvent
if (dashHas(thisEvent.start, 'date')) {
thisEvent.start['dateObject'] = this.moveToDisplayZone(
DateTime.fromISO(thisEvent.start.date).startOf('day')
)
thisEvent.end['dateObject'] = this.moveToDisplayZone(
DateTime.fromISO(thisEvent.end.date).endOf('day')
)
thisEvent.start['isAllDay'] = true
thisEvent['durationDays'] = Math.ceil(
thisEvent.end.dateObject
.diff(thisEvent.start.dateObject)
.as('days')
)
}
else {
// start date
thisEvent.start['dateObject'] = DateTime.fromISO(thisEvent.start.dateTime)
if (dashHas(thisEvent.start, 'timeZone')) {
// convert to local timezone
thisEvent.start.dateObject = thisEvent.start.dateObject
.setZone(thisEvent.start.timeZone, { keepLocalTime: true })
.toLocal()
delete thisEvent.start.timeZone
thisEvent.start.dateTime = thisEvent.start.dateObject.toISO() // fix time zone
}
thisEvent.start.dateObject = this.moveToDisplayZone(
thisEvent.start.dateObject
)
// end date
thisEvent.end['dateObject'] = DateTime.fromISO(thisEvent.end.dateTime)
if (dashHas(thisEvent.end, 'timeZone')) {
// convert to local timezone
thisEvent.end.dateObject = thisEvent.end.dateObject
.setZone(thisEvent.end.timeZone, { keepLocalTime: true })
.toLocal()
delete thisEvent.end.timeZone
thisEvent.end.dateTime = thisEvent.end.dateObject.toISO() // fix time zone
}
thisEvent.end.dateObject = this.moveToDisplayZone(
thisEvent.end.dateObject
)
}
// put in duration for multiday events with an associated time
if (
!thisEvent.start['isAllDay'] &&
thisEvent.start.dateObject.toISODate() !== thisEvent.end.dateObject.toISODate()
) {
thisEvent['durationDays'] = Math.ceil(
thisEvent.end.dateObject
.diff(thisEvent.start.dateObject)
.as('days')
)
if (thisEvent['durationDays'] > 2) {
thisEvent['timeSpansMultipleDays'] = true
}
else {
thisEvent['timeSpansOvernight'] = true
}
}
let thisStartDate = thisEvent.start.dateObject.toISODate()
// get all-day events
if (
thisEvent.start.isAllDay ||
Math.floor(thisEvent.end.dateObject.diff(thisEvent.start.dateObject).as('days')) > 1
) {
for (let dayAdd = 0; dayAdd < thisEvent.durationDays; dayAdd++) {
let innerStartDate = thisEvent.start.dateObject
.plus({ days: dayAdd })
.toISODate()
this.addToParsedList('byAllDayStartDate', innerStartDate, thisEvent.id)
// newer all-day events routine
this.addToParsedList(
'byAllDayObject',
innerStartDate,
{
id: thisEvent.id,
hasPrev: (dayAdd > 0),
hasNext: (dayAdd < (thisEvent.durationDays - 1)),
hasPreviousDay: (dayAdd > 0),
hasNextDay: (dayAdd < (thisEvent.durationDays - 1)),
durationDays: thisEvent.durationDays,
startDate: thisEvent.start.dateObject,
daysFromStart: dayAdd
}
)
}
}
// get events with a start and end time
else {
thisEvent.durationMinutes = this.parseGetDurationMinutes(thisEvent)
this.addToParsedList('byStartDate', thisStartDate, thisEvent.id)
if (thisEvent.start.dateObject.toISODate() !== thisEvent.end.dateObject.toISODate()) {
// this is a date where the time is set and spans across more than one day
const diffDays = Math.floor(thisEvent.end.dateObject.diff(thisEvent.start.dateObject).as('days'))
if (diffDays > 1) {
// this event spans multiple days
this.addToParsedList('byMultiDay', thisStartDate, thisEvent.id)
this.addToParsedList('byAllDayObject', thisStartDate, thisEvent.id)
this.addToParsedList('byAllDayStartDate', thisStartDate, thisEvent.id)
let multiDate = thisEvent.start.dateObject
while (multiDate.toISODate() !== thisEvent.end.dateObject.toISODate()) {
multiDate = multiDate.plus({ days: 1 })
this.addToParsedList('byContinuedMultiDay', multiDate.toISODate(), thisEvent.id)
this.addToParsedList('byAllDayObject', thisStartDate, thisEvent.id)
}
}
else {
// this event crosses into the next day
this.addToParsedList('byNextDay', thisStartDate, thisEvent.id)
this.addToParsedList('byContinuedNextDay', thisEvent.end.dateObject.toISODate(), thisEvent.id)
this.addToParsedList('byStartDate', thisEvent.end.dateObject.toISODate(), thisEvent.id)
}
}
}
}
// sort all day events
for (let thisDate in this.parsed.byAllDayObject) {
this.parsed.byAllDayObject[thisDate].sort(this.sortPairOfAllDayObjects)
}
this.buildAllDaySlotArray()
for (let thisDate in this.parsed.byStartDate) {
this.parsed.byStartDate[thisDate] = this.sortDateEvents(this.parsed.byStartDate[thisDate])
this.parseDateEvents(this.parsed.byStartDate[thisDate])
}
},
addToParsedList: function (listName, thisDate, whatToPush) {
if (!dashHas(this.parsed[listName], thisDate)) {
this.parsed[listName][thisDate] = []
}
this.parsed[listName][thisDate].push(whatToPush)
},
eventIsContinuedFromPreviousDay (id, thisDayObject) {
const isoDate = this.makeDT(thisDayObject).toISODate()
return (
dashHas(this.parsed['byContinuedNextDay'], isoDate) &&
this.parsed['byContinuedNextDay'][isoDate].includes(id)
)
},
buildAllDaySlotArray: function () {
let slotAssignments = {}
let dateArray = Object.keys(this.parsed.byAllDayObject).sort()
for (let thisDate of dateArray) {
if (!dashHas(slotAssignments, thisDate)) {
slotAssignments[thisDate] = {}
}
// go through each element on that date
for (let thisAllDayObject of this.parsed.byAllDayObject[thisDate]) {
if (!dashHas(thisAllDayObject, 'slot')) {
let thisEventId = thisAllDayObject.id
// find the first empty slot in the first day
let slotToUse = 0
let slotFound = false
while (!slotFound) {
if (dashHas(slotAssignments[thisDate], slotToUse)) {
slotToUse++
}
else {
slotFound = true
}
}
// now fill that slot for each successive day
for (let dayAdd = 0; dayAdd < thisAllDayObject.durationDays; dayAdd++) {
let innerStartDate = DateTime.fromISO(thisDate + 'T00:00:00')
.plus({ days: dayAdd })
.toISODate()
if (!dashHas(slotAssignments, innerStartDate)) {
slotAssignments[innerStartDate] = {}
}
slotAssignments[innerStartDate][slotToUse] = thisEventId
// go through each element on that date
for (let thisDateElementIndex in this.parsed.byAllDayObject[innerStartDate]) {
let thisDateElement = this.parsed.byAllDayObject[innerStartDate][thisDateElementIndex]
if (thisDateElement.id === thisEventId) {
this.parsed.byAllDayObject[innerStartDate][thisDateElementIndex]['slot'] = slotToUse
break
}
}
}
}
}
}
},
sortPairOfAllDayObjects: function (eventA, eventB) {
if (eventA.daysFromStart < eventB.daysFromStart) return 1
if (eventA.daysFromStart > eventB.daysFromStart) return -1
// okay, so daysFromStart are equal, now look at duration
if (eventA.durationDays > eventB.durationDays) return 1
if (eventA.durationDays < eventB.durationDays) return -1
// daysFromStart are equal, so just take the first one
return 0
},
sortPairOfDateEvents: function (eventA, eventB) {
// return date.getDateDiff(
// date.addToDate(eventA.start.dateObject, { milliseconds: eventA.durationMinutes }),
// date.addToDate(eventB.start.dateObject, { milliseconds: eventB.durationMinutes })
// )
return eventB.start.dateObject
.plus({ milliseconds: eventA.durationMinutes })
.diff(
eventB.start.dateObject.plus({ milliseconds: eventA.durationMinutes })
)
.as('days')
},
sortDateEvents: function (eventArray) {
let tempArray = []
for (let eventId of eventArray) {
tempArray.push(this.parsed.byId[eventId])
}
tempArray.sort(this.sortPairOfDateEvents)
let returnArray = []
for (let thisEvent of tempArray) {
returnArray.push(thisEvent.id)
}
return returnArray
},
parseDateEvents: function (eventArray) {
let columnArray = [[]]
let gridTimeMap = new Map()
for (let eventId of eventArray) {
let thisEvent = this.parsed.byId[eventId]
let gridTimes = this.getGridTimeSlots(thisEvent)
for (let gridCounter = gridTimes.start; gridCounter <= gridTimes.end; gridCounter++) {
if (gridTimeMap.has(gridCounter)) {
gridTimeMap.set(gridCounter, gridTimeMap.get(gridCounter) + 1)
}
else {
gridTimeMap.set(gridCounter, 1)
}
}
let foundAColumn = false
for (let columnIndex in columnArray) {
if (this.hasSlotForEvent(thisEvent, columnArray[columnIndex])) {
columnArray[columnIndex].push(thisEvent)
foundAColumn = true
break
}
}
if (!foundAColumn) {
columnArray.push([thisEvent])
}
}
// let numberOfColumns = columnArray.length
for (let columnIndex in columnArray) {
for (let thisEvent of columnArray[columnIndex]) {
// thisEvent.numberOfOverlaps = numberOfColumns - 1
thisEvent.numberOfOverlaps = this.getMaxOfGrid(thisEvent, gridTimeMap) - 1
thisEvent.overlapIteration = parseInt(columnIndex) + 1
}
}
// make column count corrections for overlapping events that overlap with other events. Confusing.
for (let eventId of eventArray) {
let thisEvent = this.parsed.byId[eventId]
thisEvent.numberOfOverlaps = this.getMaxOverlapsForEvent(thisEvent, eventArray)
}
},
eventsOverlap: function (event1, event2) {
// const interval1 = this.getIntervalFromEvent(event1)
// const interval2 = this.getIntervalFromEvent(event2)
// return interval1.overlaps(interval2)
return this.getIntervalFromEvent(event1).overlaps(this.getIntervalFromEvent(event2))
},
getIntervalFromEvent: function (thisEvent) {
return Interval.fromDateTimes(
thisEvent.start.dateObject,
thisEvent.end.dateObject
)
},
getMaxOverlapsForEvent: function (testEvent, eventArray) {
let maxOverlaps = testEvent.numberOfOverlaps
for (let eventId of eventArray) {
const thisEvent = this.parsed.byId[eventId]
if (this.eventsOverlap(testEvent, thisEvent)) {
if (thisEvent.numberOfOverlaps > testEvent.numberOfOverlaps) {
maxOverlaps = thisEvent.numberOfOverlaps
}
}
}
return maxOverlaps
},
hasSlotForEvent: function (checkEvent, existingEvents = []) {
let slotAvailable = true
for (let thisEvent of existingEvents) {
if (
// case 1: top of checkEvent overlaps bottom of thisEvent
checkEvent.start.dateObject >= thisEvent.start.dateObject &&
checkEvent.start.dateObject < thisEvent.end.dateObject
) {
slotAvailable = false
break
}
else if (
// case 2: bottom of checkEvent overlaps top of thisEvent
checkEvent.end.dateObject > thisEvent.start.dateObject &&
checkEvent.end.dateObject <= thisEvent.end.dateObject
) {
slotAvailable = false
break
}
else if (
// case 3: checkEvent falls inside of thisEvent
checkEvent.start.dateObject >= thisEvent.start.dateObject &&
checkEvent.end.dateObject <= thisEvent.end.dateObject
) {
slotAvailable = false
break
}
else if (
// case 4: checkEvent encompasses all of thisEvent
checkEvent.start.dateObject <= thisEvent.start.dateObject &&
checkEvent.end.dateObject >= thisEvent.end.dateObject
) {
slotAvailable = false
break
}
}
return slotAvailable
},
getGridTimeSlots: function (thisEvent) {
return {
start: this.getGridTime(thisEvent.start.dateObject, false),
end: this.getGridTime(thisEvent.end.dateObject, true) - 1
}
},
getGridTime: function (dateObject, roundUp = false) {
dateObject = this.makeDT(dateObject) // just in case
const gridCalc = ((dateObject.hour * 60) + dateObject.minute) / gridBlockSize
if (roundUp) {
return Math.ceil(gridCalc)
}
else {
return Math.floor(gridCalc)
}
},
getMaxOfGrid: function (thisEvent, gridTimeMap) {
// TODO: there's probably a fancier Collections way to do this
let max = 0
const gridTimes = this.getGridTimeSlots(thisEvent)
for (let gridCounter = gridTimes.start; gridCounter <= gridTimes.end; gridCounter++) {
if (gridTimeMap.has(gridCounter) && gridTimeMap.get(gridCounter) > max) {
max = gridTimeMap.get(gridCounter)
}
}
return max
},
parseGetDurationMinutes: function (eventObj) {
if (eventObj.start.isAllDay) {
return 24 * 60
}
else {
return eventObj.end.dateObject.diff(
eventObj.start.dateObject,
'minutes'
)
}
},
getPassedInParsedEvents: function () {
this.parsed = defaultParsed
if (
this.parsedEvents !== undefined &&
this.parsedEvents.byId !== undefined &&
Object.keys(this.parsedEvents).length > 0
) {
this.parsed = this.parsedEvents
return true
}
else {
return false
}
},
getPassedInEventArray: function () {
this.parsed = defaultParsed
if (this.eventArray !== undefined && this.eventArray.length > 0) {
this.parseEventList()
return true
}
else {
return false
}
},
getDefaultParsed: function () {
return defaultParsed
},
isParsedEventsEmpty: function () {
return !(
this.parsedEvents !== undefined &&
this.parsedEvents.byId !== undefined &&
Object.keys(this.parsedEvents).length > 0
)
},
isEventArrayEmpty: function () {
return !(this.eventArray !== undefined && this.eventArray.length > 0)
},
handlePassedInEvents: function () {
if (!this.isParsedEventsEmpty()) {
this.getPassedInParsedEvents()
}
else if (!this.isEventArrayEmpty()) {
this.getPassedInEventArray()
}
},
handleEventUpdate: function (eventObject) {
if (dashHas(this._props, 'fullComponentRef') && this._props.fullComponentRef) {
// this component has a calendar parent, so don't move forward
return
}
let thisEventId = eventObject.id
// update eventArray
for (let thisEventIndex in this.eventArray) {
if (this.eventArray[thisEventIndex].id === thisEventId) {
this.eventArray[thisEventIndex] = eventObject
this.parseEventList()
}
}
},
formatTimeRange: function (startTime, endTime) {
let returnString = ''
// start time
returnString += this.simplifyTimeFormat(
this.makeDT(startTime).toLocaleString(DateTime.TIME_SIMPLE),
(this.formatDate(startTime, 'a') === this.formatDate(endTime, 'a'))
)
returnString += ' - '
// end time
returnString += this.simplifyTimeFormat(
this.makeDT(endTime).toLocaleString(DateTime.TIME_SIMPLE),
false
)
return returnString
},
formatTime: function (startTime) {
let returnString = this.makeDT(startTime).toLocaleString(DateTime.TIME_SIMPLE)
// simplify if AM / PM present
if (returnString.includes('M')) {
returnString = returnString.replace(':00', '') // remove minutes if = ':00'
.replace(' AM', 'am')
.replace(' PM', 'pm')
}
return returnString
},
getEventDuration: function (startTime, endTime) {
return Math.floor(
this.makeDT(endTime).diff(this.makeDT(startTime)).as('minutes')
)
}
},
mounted () {}
}
================================================
FILE: component/calendar/mixins/code/CalendarMixin.js
================================================
import dashHas from 'lodash.has'
import DateTime from 'luxon/src/datetime'
// const debug = require('debug')('calendar:CalendarMixin')
export default {
computed: {},
methods: {
handleStartChange: function (val, oldVal) {
this.doUpdate()
},
makeDT: function (dateObject, adjustTimezone) {
if (typeof dateObject === 'undefined') {
return null
}
if (dateObject instanceof Date) {
dateObject = DateTime.fromJSDate(dateObject)
}
if (
this.calendarLocale &&
(!dashHas(dateObject, 'locale') || this.calendarLocale !== dateObject.locale)
) {
dateObject = dateObject.setLocale(this.calendarLocale)
}
if (adjustTimezone && adjustTimezone !== dateObject.zoneName) {
dateObject = dateObject.setZone(this.calendarTimezone)
}
return dateObject
},
triggerEventClick: function (eventObject, eventRef) {
this.$root.$emit(
'click-event-' + eventRef,
eventObject
)
},
triggerDayClick: function (dateObject, eventRef) {
this.$root.$emit(
'click-day-' + eventRef, {
day: dateObject.toObject()
}
)
},
triggerDisplayChange: function (eventRef, payload) {
if (this.fullComponentRef) {
// this component is part of a parent calendar, so look at current tab
payload['visible'] = this.$parent.active
payload['tabName'] = this.$parent.name
}
else {
payload['visible'] = true
}
this.$root.$emit(
'display-change-' + eventRef,
payload
)
},
handleEventDetailEvent: function (params, thisRef) {
if (!this.preventEventDetail) {
if (thisRef === undefined) {
thisRef = 'defaultEventDetail'
}
this.eventDetailEventObject = params
if (dashHas(this.$refs, thisRef + '.__open')) {
this.$refs[thisRef].__open()
}
else if (dashHas(this.$parent.$refs, thisRef + '.__open')) {
this.$parent.$refs[thisRef].__open()
}
else if (dashHas(this, thisRef + '.__open')) {
this[thisRef].__open()
}
}
},
fullMoveToDay: function (dateObject) {
if (this.fullComponentRef) {
this.$root.$emit(
this.fullComponentRef + ':moveToSingleDay', {
dateObject: dateObject
}
)
}
},
getEventColor: function (eventObject, colorName) {
if (dashHas(eventObject, colorName)) {
return eventObject[colorName]
}
else if (dashHas(this, colorName)) {
return this[colorName]
}
else if (colorName === 'textColor') {
return 'white'
}
else {
return 'primary'
}
},
addCssColorClasses: function (cssObject, eventObject) {
cssObject['bg-' + this.getEventColor(eventObject, 'color')] = true
cssObject['text-' + this.getEventColor(eventObject, 'textColor')] = true
return cssObject
},
formatDate: function (dateObject, formatString, usePredefined) {
if (usePredefined) {
return this.makeDT(dateObject).toLocaleString(DateTime[formatString])
}
else {
return this.makeDT(dateObject).toFormat(formatString)
}
},
dateAdjustWeekday (thisDateObject, weekdayNum) {
thisDateObject = this.makeDT(thisDateObject)
let checkDate = DateTime.local()
let adjustForward = true
if (weekdayNum < 1) {
adjustForward = false
weekdayNum = Math.abs(weekdayNum)
if (weekdayNum === 0) {
weekdayNum = 7
}
}
for (let counter = 1; counter <= 7; counter++) {
if (adjustForward) {
checkDate = thisDateObject.plus({ days: counter })
}
else {
checkDate = thisDateObject.minus({ days: counter })
}
if (checkDate.weekday === weekdayNum) {
return checkDate
}
}
},
buildWeekDateArray: function (numberOfDays, sundayFirstDayOfWeek) {
if (numberOfDays === undefined) {
if (this.numberOfDays !== undefined) {
numberOfDays = this.numberOfDays
}
else if (this.numDays !== undefined) {
numberOfDays = this.numDays
}
else {
numberOfDays = 7
}
}
if (this.forceStartOfWeek) {
this.weekDateArray = this.getForcedWeekDateArray(numberOfDays, sundayFirstDayOfWeek)
}
else {
this.weekDateArray = this.getWeekDateArray(numberOfDays)
}
return this.weekDateArray
},
getForcedWeekBookendDates: function (numberOfDays, sundayFirstDayOfWeek) {
if (numberOfDays === undefined) {
numberOfDays = 7
}
if (sundayFirstDayOfWeek) {
return {
first: this.dateAdjustWeekday(this.workingDate, -1).minus({ days: 1 }),
last: this.dateAdjustWeekday(this.workingDate, numberOfDays).minus({ days: 1 })
}
}
else {
return {
first: this.dateAdjustWeekday(this.workingDate, -1),
last: this.dateAdjustWeekday(this.workingDate, numberOfDays)
}
}
},
getForcedWeekDateArray: function (numberOfDays, sundayFirstDayOfWeek) {
let bookendDates = this.getForcedWeekBookendDates(numberOfDays, sundayFirstDayOfWeek)
let returnArray = []
for (let counter = 0; counter <= numberOfDays - 1; counter++) {
returnArray.push(
this.makeDT(bookendDates.first).plus({ days: counter })
)
}
return returnArray
},
getWeekDateArray: function (numberOfDays) {
let returnArray = []
for (let counter = 0; counter <= numberOfDays - 1; counter++) {
returnArray.push(
this.makeDT(this.workingDate).plus({ days: counter })
)
}
return returnArray
},
formatTimeFromNumber: function (hourNumber, minuteNumber = 0) {
// TODO: this should be able to handle 24 hour and alternate time formats
let tempDate = this.makeDT(DateTime.fromObject({ hour: hourNumber, minute: minuteNumber }))
let localeFormattedHour = tempDate.toLocaleString(DateTime.TIME_SIMPLE)
if (minuteNumber === 0 && localeFormattedHour.includes('M')) {
localeFormattedHour = localeFormattedHour.replace(/:[0-9][0-9]/, '')
}
return localeFormattedHour
.replace(' ', '')
.toLowerCase()
},
simplifyTimeFormat: function (timeString, removeMeridiem) {
if (removeMeridiem) {
timeString = timeString.replace(/[AP]M/i, '')
}
return timeString
.replace(':00', '')
.replace(' ', '')
.toLowerCase()
},
moveTimePeriod: function (params) {
console.debug('moveTimePeriod triggered, params = ', params)
if (dashHas(params, 'absolute')) {
this.workingDate = this.makeDT(params.absolute)
}
else if (dashHas(this, 'workingDate')) {
let paramObj = {}
paramObj[params.unitType] = params.amount
console.debug('this.workingDate = ', this.workingDate)
this.workingDate = this.workingDate.plus(paramObj)
}
else if (dashHas(this.$parent, 'workingDate')) {
let paramObj = {}
paramObj[params.unitType] = params.amount
// console.debug('this.workingDate = ', this.workingDate)
this.workingDate = this.$parent.workingDate.plus(paramObj)
}
else {
let paramObj = {}
paramObj[params.unitType] = params.amount
console.debug('this.workingDate = ', this.workingDate)
this.workingDate = this.workingDate.plus(paramObj)
}
},
setTimePeriod: function (params) {
this.workingDate = params.dateObject
},
handleDateChange: function (params) {
let dateObject = null
if (dashHas(params, 'dateObject')) {
dateObject = params.dateObject
}
else {
dateObject = params
}
this.workingDate = this.makeDT(dateObject)
this.triggerDisplayChange(
this.eventRef,
{
newDate: this.workingDate
}
)
},
getDayOfWeek: function () {
return this.createThisDate(this.dayNumber).format('dddd')
},
createThisDate: function (dateNum) {
return this.parseDateParams(dateNum)
},
isCurrentDate: function (thisDateObject) {
return DateTime.local().hasSame(
this.makeDT(thisDateObject),
'day'
)
},
isWeekendDay: function (thisDateObject) {
const dayNumber = this.makeDT(thisDateObject).weekday
return (dayNumber === 6 || dayNumber === 7)
},
getWeekNumber (thisDateObject, useSundayStart) {
if (useSundayStart) {
return this.makeDT(thisDateObject).plus({ days: 1 }).weekNumber
}
else {
return this.makeDT(thisDateObject).weekNumber
}
},
mountSetDate: function () {
this.workingDate = this.makeDT(this.startDate)
},
decimalAdjust: function (type, value, exp) {
// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
// If the exp is undefined or zero...
if (typeof exp === 'undefined' || +exp === 0) {
return Math[type](value)
}
value = +value
exp = +exp
// If the value is not a number or the exp is not an integer...
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
return NaN
}
// Shift
value = value.toString().split('e')
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)))
// Shift back
value = value.toString().split('e')
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp))
},
calculateDayCellWidth: function (numberOfDays) {
return this.decimalAdjust(
'floor',
100 / numberOfDays,
-3
) + '%'
},
createNewNavEventName: function () {
return 'calendar:navMovePeriod:' + this.createRandomString()
},
createRandomString: function () {
return Math.random().toString(36).substring(2, 15)
},
getEventIdString: function (eventObj) {
if (dashHas(eventObj, 'id')) {
if (typeof eventObj.id === 'number') {
return eventObj.id.toString()
}
else if (typeof eventObj.id === 'string') {
return eventObj.id
}
else {
return '' + eventObj.id
}
}
else {
return 'NOID' + this.createRandomString()
}
},
getDayHourId: function (eventRef, workingDate, thisHour) {
return eventRef +
'-' +
this.makeDT(workingDate).toISODate() +
'-hour-' +
thisHour
}
},
mounted () {}
}
================================================
FILE: component/calendar/mixins/code/CalendarParentComponentMixin.js
================================================
// this file contains shared properties for Calendar, CalendarAgenda, CalendarMonth and CalendarMultiday
import DateTime from 'luxon/src/datetime'
export default {
props: {
startDate: {
type: [Object, Date],
default: () => { return DateTime.local() }
},
eventArray: {
type: Array,
default: () => []
},
parsedEvents: {
type: Object,
default: () => {}
},
eventRef: {
type: String,
default: () => { return 'cal-' + Math.random().toString(36).substring(2, 15) }
},
preventEventDetail: {
type: Boolean,
default: false
},
calendarLocale: {
type: String,
default: () => { return DateTime.local().locale }
},
calendarTimezone: {
type: String,
default: () => { return DateTime.local().zoneName }
},
sundayFirstDayOfWeek: {
type: Boolean,
default: false
},
allowEditing: {
type: Boolean,
default: false
},
renderHtml: {
type: Boolean,
default: false
},
dayDisplayStartHour: {
type: Number,
default: 7
},
fullComponentRef: String
},
methods: {
doUpdate: () => {
// this should be overridden
}
},
mounted () {}
}
================================================
FILE: component/calendar/mixins/code/EventPropsMixin.js
================================================
import DateTime from 'luxon/src/datetime'
export default {
props: {
eventObject: {
type: Object,
default: () => {}
},
color: {
type: String,
default: 'primary'
},
textColor: {
type: String,
default: 'white'
},
showTime: {
type: Boolean,
default: true
},
monthStyle: {
type: Boolean,
default: false
},
eventRef: String,
preventEventDetail: {
type: Boolean,
default: false
},
calendarLocale: {
type: String,
default: () => { return DateTime.local().locale }
},
calendarTimezone: {
type: String,
default: () => { return DateTime.local().zoneName }
},
allowEditing: {
type: Boolean,
default: false
},
renderHtml: {
type: Boolean,
default: false
}
}
}
================================================
FILE: component/calendar/mixins/code/index.js
================================================
import CalendarEventMixin from './CalendarEventMixin'
import CalendarMixin from './CalendarMixin'
import CalendarParentComponentMixin from './CalendarParentComponentMixin'
import EventPropsMixin from './EventPropsMixin'
export {
CalendarEventMixin,
CalendarMixin,
CalendarParentComponentMixin,
EventPropsMixin
}
================================================
FILE: component/calendar/mixins/index.js
================================================
import {
CalendarEventMixin,
CalendarMixin,
CalendarParentComponentMixin,
EventPropsMixin
} from './code'
import {
CalendarTemplateMixin,
CalendarAgendaTemplateMixin,
CalendarAgendaEventTemplateMixin,
CalendarAllDayEventsTemplateMixin,
CalendarDayColumnTemplateMixin,
CalendarDayLabelsTemplateMixin,
CalendarEventTemplateMixin,
CalendarEventDetailTemplateMixin,
CalendarHeaderNavTemplateMixin,
CalendarMonthTemplateMixin,
CalendarMonthInnerTemplateMixin,
CalendarMultiDayTemplateMixin,
CalendarMultiDayContentTemplateMixin,
CalendarTimeLabelTemplateMixin
} from './template'
export {
CalendarEventMixin,
CalendarMixin,
CalendarParentComponentMixin,
EventPropsMixin,
CalendarTemplateMixin,
CalendarAgendaTemplateMixin,
CalendarAgendaEventTemplateMixin,
CalendarAllDayEventsTemplateMixin,
CalendarDayColumnTemplateMixin,
CalendarDayLabelsTemplateMixin,
CalendarEventTemplateMixin,
CalendarEventDetailTemplateMixin,
CalendarHeaderNavTemplateMixin,
CalendarMonthTemplateMixin,
CalendarMonthInnerTemplateMixin,
CalendarMultiDayTemplateMixin,
CalendarMultiDayContentTemplateMixin,
CalendarTimeLabelTemplateMixin
}
================================================
FILE: component/calendar/mixins/template/Calendar.js
================================================
const debug = require('debug')('calendar:Calendar')
export default {
props: {
startDate: {
type: [Object, Date],
default: () => { return new Date() }
},
tabLabels: {
type: Object,
default: () => {
return {
month: 'Month',
week: 'Week',
threeDay: '3 Day',
day: 'Day',
agenda: 'Agenda'
}
}
}
},
data () {
return {
dayCellHeight: 5,
dayCellHeightUnit: 'rem',
workingDate: new Date(),
parsed: {
byAllDayStartDate: {},
byStartDate: {},
byId: {}
},
currentTab: 'tab-month',
thisRefName: this.createRandomString()
}
},
methods: {
setupEventsHandling: function () {
this.$root.$on(
this.eventRef + ':navMovePeriod',
this.calPackageMoveTimePeriod
)
this.$root.$on(
this.eventRef + ':moveToSingleDay',
this.switchToSingleDay
)
this.$root.$on(
'update-event-' + this.eventRef,
this.handleEventUpdate
)
},
calPackageMoveTimePeriod: function (params) {
this.moveTimePeriod(params)
this.$emit(
'calendar' + ':navMovePeriod',
params
)
},
switchToSingleDay: function (params) {
this.setTimePeriod(params)
this.currentTab = 'tab-single-day-component'
},
doUpdate: function () {
this.mountSetDate()
}
},
mounted () {
debug('Component mounted')
this.mountSetDate()
this.parseEventList()
this.setupEventsHandling()
},
watch: {
startDate: function () {
this.handleStartChange()
},
eventArray: function () {
this.getPassedInEventArray()
},
parsedEvents: function () {
this.getPassedInParsedEvents()
}
}
}
================================================
FILE: component/calendar/mixins/template/CalendarAgenda.js
================================================
const debug = require('debug')('calendar:CalendarAgenda')
export default {
props: {
agendaStyle: {
type: String,
default: 'dot'
},
numDays: {
type: Number,
default: 7
},
leftMargin: {
type: String,
default: '4rem'
},
scrollHeight: {
type: String,
default: '200px'
}
},
data () {
return {
workingDate: new Date(),
numJumpDays: 28,
localNumDays: 28,
dayCounter: [],
parsed: this.getDefaultParsed(),
eventDetailEventObject: {}
}
},
computed: {
calendarDaysAreClickable: function () {
return (this.fullComponentRef && this.fullComponentRef.length > 0)
}
},
methods: {
getDaysForwardDate: function (daysForward) {
return this.makeDT(this.workingDate).plus({ days: daysForward })
},
isFirstOfMonth: function (thisDate) {
return this.makeDT(thisDate).day === 1
},
isFirstDayOfWeek: function (thisDate) {
return this.makeDT(thisDate).weekday === 1
},
loadMore: function (index, done) {
this.localNumDays += this.numJumpDays
done(true)
},
doUpdate: function () {
this.mountSetDate()
this.triggerDisplayChange(
this.eventRef,
this.getAgendaDisplayDates()
)
},
getWeekTitle: function (firstDate) {
firstDate = this.makeDT(firstDate)
let lastDate = firstDate.plus({ days: 6 })
if (firstDate.month === lastDate.month) {
return this.formatDate(firstDate, 'MMM d - ') + this.formatDate(lastDate, 'd')
}
else {
return this.formatDate(firstDate, 'MMM d - ') + this.formatDate(lastDate, 'MMM d')
}
},
handleStartChange: function () {
this.doUpdate()
},
handleNavMove: function (params) {
this.moveTimePeriod(params)
this.$emit(
this.eventRef + ':navMovePeriod',
params
)
let payload = this.getAgendaDisplayDates()
payload['moveUnit'] = params.unitType
payload['moveAmount'] = params.amount
this.triggerDisplayChange(
this.eventRef,
payload
)
},
handleDayClick: function (dateObject) {
if (this.fullComponentRef) {
this.fullMoveToDay(dateObject)
}
},
getAgendaDisplayDates: function () {
return {
startDate: this.makeDT(this.workingDate).toISODate(),
endDate: this.makeDT(this.getDaysForwardDate(this.localNumDays)).toISODate(),
numDays: this.localNumDays,
viewType: this.$options.name
}
}
},
mounted () {
debug('Component mounted')
this.localNumDays = this.numDays
this.doUpdate()
this.handlePassedInEvents()
this.$root.$on(
this.eventRef + ':navMovePeriod',
this.handleNavMove
)
this.$root.$on(
'click-event-' + this.eventRef,
this.handleEventDetailEvent
)
this.$root.$on(
'update-event-' + this.eventRef,
this.handleEventUpdate
)
},
watch: {
startDate: 'handleStartChange',
eventArray: function () {
this.getPassedInEventArray()
},
parsedEvents: function () {
this.getPassedInParsedEvents()
}
}
}
================================================
FILE: component/calendar/mixins/template/CalendarAgendaEvent.js
================================================
const debug = require('debug')('calendar:CalendarAgendaEvent')
export default {
props: {
agendaStyle: {
type: String,
default: 'block'
},
forwardDate: [Object, Date]
},
methods: {
getDotClass: function () {
return this.addCssColorClasses({}, this.eventObject)
},
getDotEventClass: function () {
return {
'flex-row': true,
'flex-items-center': true,
'flex-justify-start': true,
'cursor-pointer': true,
'calendar-agenda-event': true,
'calendar-agenda-event-dot-style': true,
'calendar-agenda-event-allday': this.eventObject.start.isAllDay,
'calendar-agenda-event-empty-slot': this.eventObject.start.isEmptySlot
}
},
getEventClass: function () {
return this.addCssColorClasses(
{
'calendar-agenda-event': true,
'calendar-agenda-event-allday': this.eventObject.start.isAllDay,
'calendar-agenda-event-empty-slot': this.eventObject.start.isEmptySlot
},
this.eventObject
)
},
getEventStyle: function () {
return {}
},
handleClick: function (e) {
this.eventObject.allowEditing = this.allowEditing
this.$emit('click', this.eventObject)
this.triggerEventClick(this.eventObject, this.eventRef)
}
},
mounted () {
debug('Component mounted')
}
}
================================================
FILE: component/calendar/mixins/template/CalendarAgendaInner.js
================================================
const debug = require('debug')('calendar:CalendarAgenda')
export default {
props: {
agendaStyle: {
type: String,
default: 'dot'
},
numDays: {
type: Number,
default: 7
},
leftMargin: {
type: String,
default: '4rem'
},
scrollHeight: {
type: String,
default: '200px'
}
},
data () {
return {
workingDate: new Date(),
numJumpDays: 28,
localNumDays: 28,
dayCounter: [],
parsed: this.getDefaultParsed(),
eventDetailEventObject: {}
}
},
computed: {
calendarDaysAreClickable: function () {
return (this.fullComponentRef && this.fullComponentRef.length > 0)
}
},
methods: {
getDaysForwardDate: function (daysForward) {
return this.makeDT(this.workingDate).plus({ days: daysForward })
},
isFirstOfMonth: function (thisDate) {
return this.makeDT(thisDate).day === 1
},
isFirstDayOfWeek: function (thisDate) {
return this.makeDT(thisDate).weekday === 1
},
loadMore: function (index, done) {
this.localNumDays += this.numJumpDays
done(true)
},
doUpdate: function () {
this.mountSetDate()
this.triggerDisplayChange(
this.eventRef,
this.getAgendaDisplayDates()
)
},
getWeekTitle: function (firstDate) {
firstDate = this.makeDT(firstDate)
let lastDate = firstDate.plus({ days: 6 })
if (firstDate.month === lastDate.month) {
return this.formatDate(firstDate, 'MMM d - ') + this.formatDate(lastDate, 'd')
}
else {
return this.formatDate(firstDate, 'MMM d - ') + this.formatDate(lastDate, 'MMM d')
}
},
handleStartChange: function () {
this.doUpdate()
},
handleNavMove: function (params) {
this.moveTimePeriod(params)
this.$emit(
this.eventRef + ':navMovePeriod',
params
)
let payload = this.getAgendaDisplayDates()
payload['moveUnit'] = params.unitType
payload['moveAmount'] = params.amount
this.triggerDisplayChange(
this.eventRef,
payload
)
},
handleDayClick: function (dateObject) {
if (this.fullComponentRef) {
this.fullMoveToDay(dateObject)
}
},
getAgendaDisplayDates: function () {
return {
startDate: this.makeDT(this.workingDate).toISODate(),
endDate: this.makeDT(this.getDaysForwardDate(this.localNumDays)).toISODate(),
numDays: this.localNumDays,
viewType: this.$options.name
}
}
},
mounted () {
debug('Component mounted')
this.localNumDays = this.numDays
this.doUpdate()
this.handlePassedInEvents()
this.$root.$on(
this.eventRef + ':navMovePeriod',
this.handleNavMove
)
this.$root.$on(
'click-event-' + this.eventRef,
this.handleEventDetailEvent
)
this.$root.$on(
'update-event-' + this.eventRef,
this.handleEventUpdate
)
},
watch: {
startDate: 'handleStartChange',
eventArray: function () {
this.getPassedInEventArray()
},
parsedEvents: function () {
this.getPassedInParsedEvents()
}
}
}
================================================
FILE: component/calendar/mixins/template/CalendarAllDayEvents.js
================================================
const debug = require('debug')('calendar:CalendarAllDayEvents')
export default {
props: {
startDate: {
type: [Object, Date],
default: () => { return new Date() }
},
parsed: {
type: Object,
default: () => {}
},
numberOfDays: {
type: Number,
default: 7
},
eventRef: String,
preventEventDetail: {
type: Boolean,
default: false
},
allowEditing: {
type: Boolean,
default: false
}
},
data () {
return {
dayCellHeight: 5,
dayCellHeightUnit: 'rem',
workingDate: new Date(),
workingDateObject: {},
weekArray: []
}
},
computed: {
cellWidth: function () {
return this.calculateDayCellWidth(this.numberOfDays)
}
},
methods: {
doUpdate: function () {
this.mountSetDate()
},
addDaysToDate: function (thisDateObject, numDays) {
return this.makeDT(thisDateObject).plus({ days: numDays })
}
},
mounted () {
debug('Component mounted')
this.mountSetDate()
},
updated () {
this.mountSetDate()
},
watch: {
startDate: 'handleStartChange'
}
}
================================================
FILE: component/calendar/mixins/template/CalendarDayColumn.js
================================================
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarDayColumn')
export default {
props: {
startDate: {
type: [Object, Date],
default: () => { return new Date() }
},
dateEvents: {
type: Array,
default: () => []
},
columnCssClass: {
type: String,
default: 'flex-col'
},
dayCellHeight: {
type: [Number, String],
default: 5
},
dayCellHeightUnit: {
type: String,
default: 'rem'
},
eventRef: String,
preventEventDetail: {
type: Boolean,
default: false
},
calendarLocale: {
type: String,
default: () => { return DateTime.local().locale }
},
calendarTimezone: {
type: String,
default: () => { return DateTime.local().zoneName }
},
allowEditing: {
type: Boolean,
default: false
},
showHalfHours: {
type: Boolean,
default: false
}
},
data () {
return {
workingDate: new Date(),
eventDetailEventObject: {},
timePosition: {
display: 'none'
},
timePositionInterval: {}
}
},
watch: {
startDate: 'mountSetDate'
},
computed: {
columnCss: function () {
let returnVal = {
'calendar-day-column-content': true,
'relative-position': true,
'calendar-day-column-weekend': this.isWeekendDay(this.workingDate),
'calendar-day-column-current': this.isCurrentDate(this.workingDate)
}
returnVal[this.columnCssClass] = true
return returnVal
},
getCellStyle: function () {
let thisHeight = this.dayCellHeight + this.dayCellHeightUnit
if (this.showHalfHours) {
thisHeight = (this.dayCellHeight / 2) + this.dayCellHeightUnit
}
return {
height: thisHeight,
'max-height': thisHeight
}
}
},
methods: {
calculateDayEventClass: function (thisEvent) {
let classes = {}
if (thisEvent.numberOfOverlaps > 0) {
classes['calendar-day-event-overlap'] = true
if (thisEvent.overlapIteration === 1) {
classes['calendar-day-event-overlap-first'] = true
}
}
return classes
},
calculateDayEventStyle: function (thisEvent) {
let style = {
position: 'absolute',
'z-index': 10,
width: '100%'
}
let positions = {}
if (thisEvent.start.dateObject && thisEvent.end.dateObject) {
if (thisEvent.timeSpansOvernight) {
if (this.makeDT(this.workingDate).toISODate() === this.makeDT(thisEvent.start.dateObject).toISODate()) {
// this is a overnight event's first day
positions = this.calculateDayEventPosition(
thisEvent.start.dateObject,
thisEvent.start.dateObject.set({ hour: 23, minute: 59 }) // set to midnight
)
}
else {
// this is the second day of an overnight event
positions = this.calculateDayEventPosition(
thisEvent.end.dateObject.set({ hour: 0, minute: 0 }), // set to midnight
thisEvent.end.dateObject
)
}
}
else {
positions = this.calculateDayEventPosition(
thisEvent.start.dateObject,
thisEvent.end.dateObject
)
}
}
else {
positions = {
top: 0,
height: 0
}
}
style['top'] = positions.top
style['height'] = positions.height
if (thisEvent.numberOfOverlaps > 0) {
let thisWidth = (100 / (thisEvent.numberOfOverlaps + 1)).toFixed(2)
let thisShift = thisWidth * (thisEvent.overlapIteration - 1)
style['width'] = thisWidth + '%'
style['max-width'] = thisWidth + '%'
style['left'] = thisShift + '%'
style['z-index'] = 10 + thisEvent.overlapIteration
}
return style
},
calculateDayEventPosition: function (startDateObject, endDateObject) {
let startMidnight = startDateObject.set({
hours: 0,
minutes: 0,
seconds: 0,
milliseconds: 0
})
let topMinuteCount = startDateObject.diff(startMidnight).as('minutes')
let heightMinuteCount = endDateObject.diff(startDateObject).as('minutes')
let sizePerMinute = this.dayCellHeight / 60
debug('dayEventPosition = ', {
start: startDateObject.toISO(),
topMinuteCount: topMinuteCount,
heightMinuteCount: heightMinuteCount,
sizePerMinute: sizePerMinute,
top: (topMinuteCount * sizePerMinute) + this.dayCellHeightUnit,
height: (heightMinuteCount * sizePerMinute) + this.dayCellHeightUnit
})
return {
top: (topMinuteCount * sizePerMinute) + this.dayCellHeightUnit,
height: (heightMinuteCount * sizePerMinute) + this.dayCellHeightUnit
}
},
calculateTimePosition: function () {
let pos = {}
let thisDateObject = this.makeDT(DateTime.local())
if (
thisDateObject.hasSame(this.workingDate, 'day') &&
thisDateObject.hasSame(this.workingDate, 'month') &&
thisDateObject.hasSame(this.workingDate, 'year')
) {
pos = this.calculateDayEventPosition(thisDateObject, thisDateObject)
pos.height = pos.top + 1
}
else {
pos = {
display: 'none'
}
}
this.timePosition = pos
},
startTimePositionInterval: function () {
this.calculateTimePosition()
this.timePositionInterval = setInterval(
this.calculateTimePosition,
60000 // one minute
)
},
endTimePositionInterval: function () {
clearInterval(this.timePositionInterval)
}
},
mounted () {
debug('Component mounted')
this.mountSetDate()
this.startTimePositionInterval()
},
beforeDestroy () {
this.endTimePositionInterval()
}
}
================================================
FILE: component/calendar/mixins/template/CalendarDayLabels.js
================================================
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarDayLabels')
export default {
props: {
startDate: {
type: [Object, Date],
default: () => { return new Date() }
},
numberOfDays: {
type: Number,
default: 7
},
showDates: {
type: Boolean,
default: false
},
forceStartOfWeek: {
type: Boolean,
default: false
},
fullComponentRef: String,
sundayFirstDayOfWeek: {
type: Boolean,
default: false
},
calendarLocale: {
type: String,
default: () => { return DateTime.local().locale }
}
},
data () {
return {
dayCellHeight: 5,
dayCellHeightUnit: 'rem',
workingDate: DateTime.local(),
weekDateArray: []
}
},
computed: {
cellWidth: function () {
return this.calculateDayCellWidth(this.numberOfDays)
},
calendarDaysAreClickable: function () {
return (this.fullComponentRef && this.fullComponentRef.length > 0)
}
},
methods: {
handleStartChange: function (val, oldVal) {
this.doUpdate()
},
doUpdate: function () {
this.mountSetDate()
this.buildWeekDateArray(this.numberOfDays, this.sundayFirstDayOfWeek)
},
isCurrentDayLabel: function (thisDay, checkMonthOnly) {
let now = DateTime.local()
thisDay = this.makeDT(thisDay)
if (checkMonthOnly === true) {
return (
now.weekday === thisDay.weekday &&
now.month === thisDay.month
)
}
else {
return now.hasSame(thisDay, 'day')
}
},
handleDayClick: function (dateObject) {
if (this.fullComponentRef) {
this.fullMoveToDay(dateObject)
}
}
},
mounted () {
debug('Component mounted')
this.mountSetDate()
},
watch: {
startDate: 'handleStartChange'
}
}
================================================
FILE: component/calendar/mixins/template/CalendarEvent.js
================================================
import dashHas from 'lodash.has'
const debug = require('debug')('calendar:CalendarEvent')
export default {
props: {
forceAllDay: Boolean,
currentCalendarDay: Object,
hasPreviousDay: Boolean,
hasNextDay: Boolean,
firstDayOfWeek: Boolean,
lastDayOfWeek: Boolean,
renderStyle: {
type: String,
default: 'singleLine'
},
isLeftmostColumn: {
type: Boolean,
default: false
}
},
methods: {
getEventStyle: function () {
return {
// 'background-color': this.backgroundColor,
// 'color': this.textColor
}
},
getEventClass: function () {
return this.addCssColorClasses(
{
'calendar-event': true,
'calendar-event-month': this.monthStyle,
'calendar-event-multi': !this.monthStyle,
'calendar-event-multi-allday': this.forceAllDay,
'calendar-event-has-next-day': this.eventHasNextDay(),
'calendar-event-has-previous-day': this.eventHasPreviousDay(),
'calendar-event-empty-slot': this.isEmptySlot(),
'calendar-event-continues-next-week': this.eventContinuesNextWeek(), // for future use
'calendar-event-continues-from-last-week': this.eventContinuesFromLastWeek() // for future use
},
this.eventObject
)
},
isEmptySlot: function () {
return this.eventObject.start.isEmptySlot
},
eventContinuesNextWeek: function () {
return (
dashHas(this.eventObject, 'start.dateObject') &&
this.monthStyle &&
this.eventHasNextDay() &&
(this.lastDayOfWeek || this.isLastDayOfMonth(this.eventObject.start.dateObject))
)
},
eventContinuesFromLastWeek: function () {
return (
dashHas(this.eventObject, 'start.dateObject') &&
this.monthStyle &&
this.eventHasPreviousDay() &&
(this.firstDayOfWeek || this.isFirstDayOfMonth(this.eventObject.start.dateObject))
)
},
isLastDayOfMonth: function (dateObject) {
if (typeof dateObject === 'undefined' || dateObject === null) {
return false
}
return this.makeDT(this.currentCalendarDay).toISODate() === this.makeDT(dateObject).endOf('month').toISODate()
},
isFirstDayOfMonth: function (dateObject) {
if (typeof dateObject === 'undefined' || dateObject === null) {
return false
}
return this.makeDT(this.currentCalendarDay).toISODate() === this.makeDT(dateObject).startOf('month').toISODate()
},
eventHasNextDay: function () {
if (this.hasNextDay) {
return this.hasNextDay
}
return false
},
eventHasPreviousDay: function () {
if (this.hasPreviousDay) {
return this.hasPreviousDay
}
return false
},
isAllDayEvent: function () {
return this.eventObject.start.isAllDay
},
eventDuration: function () {
return this.getEventDuration(this.eventObject.start.dateObject, this.eventObject.end.dateObject)
},
handleClick: function (e) {
this.eventObject.allowEditing = this.allowEditing
this.$emit('click', this.eventObject)
this.triggerEventClick(this.eventObject, this.eventRef)
}
},
mounted () {
debug('Component mounted')
}
}
================================================
FILE: component/calendar/mixins/template/CalendarEventDetail.js
================================================
import dashHas from 'lodash.has'
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarEventDetail')
export default {
props: {
fieldColor: {
type: String,
default: 'grey-2'
}
},
data () {
return {
modalIsOpen: false,
inEditMode: false,
editEventObject: {},
startDateObject: new Date(),
startTimeObject: new Date(),
endDateObject: new Date(),
endTimeObject: new Date()
}
},
computed: {
countAttendees: function () {
if (!dashHas(this.eventObject, 'attendees')) {
return 0
}
let count = this.eventObject.attendees.length
for (let thisAttendee of this.eventObject.attendees) {
if (dashHas(thisAttendee, 'resource') && thisAttendee.resource) {
count--
}
}
return count
},
countResources: function () {
if (!dashHas(this.eventObject, 'attendees')) {
return 0
}
let count = 0
for (let thisAttendee of this.eventObject.attendees) {
debug('thisAttendee = ', thisAttendee)
if (dashHas(thisAttendee, 'resource') && thisAttendee.resource) {
count++
}
}
return count
},
getTopColorClasses: function () {
return this.addCssColorClasses(
{
'full-width': true,
'full-height': true,
'q-pr-md': true,
// 'q-py-md': true,
// 'q-py-none': true,
// 'q-mt-sm': true,
'relative-position': true,
'ced-top': true
},
this.eventObject)
},
eventColor: function () {
return this.getEventColor(this.eventObject, 'color')
},
getEventStyle: function () {
return {
// 'background-color': this.backgroundColor,
// 'color': this.textColor
}
},
getEventClass: function () {
return this.addCssColorClasses(
{
'calendar-event': true,
'calendar-event-month': this.monthStyle
},
this.eventObject
)
},
isEditingAllowed: function () {
if (dashHas(this.eventObject, 'allowEditing')) {
return this.eventObject.allowEditing
}
return this.allowEditing
}
},
methods: {
dashHas: dashHas, // set this so we can easily use it in a template
textExists: function (fieldLocation) {
return (
dashHas(this.eventObject, fieldLocation) &&
this.eventObject[fieldLocation].length > 0
)
},
__open: function () {
this.modalIsOpen = true
},
__close: function () {
this.modalIsOpen = false
this.inEditMode = false
},
startEditMode: function () {
this.editEventObject = this.eventObject
// fixes for any values that will cause errors
if (!dashHas(this.editEventObject, 'start.isAllDay')) {
this.editEventObject.start.isAllDay = false
}
let dateObj = {}
if (typeof this.editEventObject.start.dateObject.toJSDate === 'function') {
dateObj = this.editEventObject.start.dateObject.toJSDate()
}
else {
dateObj = this.editEventObject.start.dateObject
}
this.startDateObject = dateObj
this.startTimeObject = dateObj
if (dashHas(this.editEventObject, 'end.dateObject')) {
if (typeof this.editEventObject.end.dateObject.toJSDate === 'function') {
dateObj = this.editEventObject.end.dateObject.toJSDate()
}
else {
dateObj = this.editEventObject.end.dateObject
}
this.endDateObject = dateObj
this.endTimeObject = dateObj
}
this.inEditMode = true
},
checkEndAfterStart: function () {
let startDate = this.makeDT(this.startDateObject)
let endDate = this.makeDT(this.endDateObject)
let daysDiff = startDate.diff(endDate).as('days')
if (Math.floor(daysDiff) >= 0) {
endDate = endDate.set({
year: startDate.year,
month: startDate.month,
day: startDate.day
})
this.endDateObject = endDate.toJSDate()
// now check minutes
let startTime = this.makeDT(this.startTimeObject)
let endTime = this.makeDT(this.endTimeObject)
let minutesDiff = startTime.diff(endTime).as('minutes')
if (Math.floor(minutesDiff) > 0) {
endTime = endTime.set({
year: startDate.year,
month: startDate.month,
day: startDate.day,
hour: startTime.hour,
minute: startTime.minute
})
}
this.endTimeObject = endTime.toJSDate()
}
},
__save: function () {
// convert elements back to parsed format
const stepList = ['start', 'end']
const isAllDay = this.editEventObject.start.isAllDay
for (let step of stepList) {
let dateObj = DateTime.fromJSDate(this[step + 'DateObject'])
if (isAllDay) {
this.editEventObject[step] = {
date: dateObj.toISODate()
}
}
else {
let timeObj = this[step + 'TimeObject']
dateObj = dateObj.set({
hour: timeObj.getHours(),
minute: timeObj.getMinutes(),
second: timeObj.getSeconds()
})
this.editEventObject[step] = {
dateTime: dateObj.toISO()
}
}
}
// strip out calculated fields
let fieldList = ['daysFromStart', 'durationDays', 'hasNext', 'hasPrev', 'slot', 'allowEditing']
for (let thisField of fieldList) {
delete this.editEventObject[thisField]
}
// done modifying
this.eventObject = this.editEventObject
this.$root.$emit(
'update-event-' + this.eventRef,
this.eventObject
)
this.__close()
}
},
mounted () {
debug('Component mounted')
}
}
================================================
FILE: component/calendar/mixins/template/CalendarHeaderNav.js
================================================
const debug = require('debug')('calendar:CalendarHeaderNav')
export default {
props: {
timePeriodUnit: {
type: String,
default: 'days'
},
timePeriodAmount: {
type: Number,
default: 1
},
moveTimePeriodFunction: Object,
moveTimePeriodEmit: {
type: String,
default: 'calendar:navMovePeriod'
}
},
methods: {
doMoveTimePeriod (timePeriodUnit, timePeriodAmount) {
this.$root.$emit(
this.moveTimePeriodEmit,
{
unitType: timePeriodUnit,
amount: timePeriodAmount
}
)
}
},
mounted () {
debug('Component mounted')
}
}
================================================
FILE: component/calendar/mixins/template/CalendarMonth.js
================================================
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarMonth')
export default {
// data () {
// return {
// dayCellHeight: 5,
// dayCellHeightUnit: 'rem',
// workingDate: new Date(),
// weekArray: [],
// parsed: this.getDefaultParsed(),
// eventDetailEventObject: {},
// eventClicked: false
// }
// },
computed: {
// calendarDaysAreClickable: function () {
// return (this.fullComponentRef && this.fullComponentRef.length > 0)
// }
},
methods: {
// monthGetDateEvents: function (dateObject) {
// return this.dateGetEvents(dateObject)
// },
// doUpdate: function () {
// this.mountSetDate()
// let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray())
// this.triggerDisplayChange(
// this.eventRef,
// payload
// )
// },
// getCalendarCellArray: function (monthNumber, yearNumber) {
// let currentDay = this.makeDT(
// DateTime.fromObject({
// year: yearNumber,
// month: monthNumber,
// day: 1
// })
// )
// let currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek)
// let weekArray = []
// let currentWeekArray = []
// let thisDayObject = {}
// for (let thisDateOfMonth = 1; thisDateOfMonth <= 31; thisDateOfMonth++) {
// currentDay = this.makeDT(
// DateTime.fromObject({
// year: yearNumber,
// month: monthNumber,
// day: thisDateOfMonth
// })
// )
// if (
// currentDay.year === yearNumber &&
// currentDay.month === monthNumber
// ) {
// if (
// this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek) !== currentWeekOfYear
// ) {
// weekArray.push(currentWeekArray)
// currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek)
// currentWeekArray = []
// }
// thisDayObject = {
// dateObject: currentDay,
// year: currentDay.year,
// month: currentDay.month,
// date: currentDay.day,
// dayName: currentDay.toFormat('EEEE'),
// dayNumber: currentDay.weekday
// }
// currentWeekArray.push(thisDayObject)
// }
// }
// if (weekArray.length > 0) {
// weekArray.push(currentWeekArray)
// }
// return weekArray
// },
// generateCalendarCellArray: function () {
// this.weekArray = this.getCalendarCellArray(
// this.makeDT(this.workingDate).month,
// this.makeDT(this.workingDate).year
// )
// return this.weekArray
// },
/*
handleNavMove: function (params) {
this.moveTimePeriod(params)
this.$emit(
this.eventRef + ':navMovePeriod',
// {
// unitType: params.unitType,
// amount: params.amount
// }
params
)
let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray())
payload['moveUnit'] = params.unitType
payload['moveAmount'] = params.amount
this.triggerDisplayChange(
this.eventRef,
payload
)
}
*/
// getWeekArrayDisplayDates: function (weekArray) {
// // this takes a weekArray and figures out the values to send for a page display event
// let startDateObj = weekArray[0][0].dateObject
// const lastWeek = weekArray[weekArray.length - 1]
// let endDateObj = lastWeek[lastWeek.length - 1].dateObject
// return {
// startDate: startDateObj.toISODate(),
// endDate: endDateObj.toISODate(),
// numDays: Math.ceil(endDateObj.diff(startDateObj).as('days') + 1),
// viewType: this.$options.name
// }
// },
// handleDayClick: function (dateObject) {
// // event item clicked; prevent "day" event
// if (this.eventClicked) {
// this.eventClicked = false
// return
// }
// if (this.fullComponentRef) {
// this.fullMoveToDay(dateObject)
// }
// this.handleNavMove({ absolute: dateObject })
// this.triggerDayClick(dateObject, this.eventRef)
// },
// handleCalendarEventClick: function () {
// this.eventClicked = true
// }
},
mounted () {
debug('Component mounted')
// this.doUpdate()
// this.handlePassedInEvents()
// this.$root.$on(
// this.eventRef + ':navMovePeriod',
// this.handleNavMove
// )
// this.$root.$on(
// 'click-event-' + this.eventRef,
// this.handleEventDetailEvent
// )
// this.$root.$on(
// 'update-event-' + this.eventRef,
// this.handleEventUpdate
// )
},
watch: {
startDate: function () {
this.handleStartChange()
},
eventArray: function () {
this.getPassedInEventArray()
},
parsedEvents: function () {
this.getPassedInParsedEvents()
}
}
}
================================================
FILE: component/calendar/mixins/template/CalendarMonthInner.js
================================================
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarMonthInner')
export default {
data () {
return {
dayCellHeight: 5,
dayCellHeightUnit: 'rem',
workingDate: new Date(),
weekArray: [],
parsed: this.getDefaultParsed(),
eventDetailEventObject: {},
eventClicked: false
}
},
computed: {
calendarDaysAreClickable: function () {
return (this.fullComponentRef && this.fullComponentRef.length > 0)
}
},
methods: {
monthGetDateEvents: function (dateObject) {
return this.dateGetEvents(dateObject)
},
doUpdate: function () {
this.mountSetDate()
let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray())
this.triggerDisplayChange(
this.eventRef,
payload
)
},
getCalendarCellArray: function (monthNumber, yearNumber) {
let currentDay = this.makeDT(
DateTime.fromObject({
year: yearNumber,
month: monthNumber,
day: 1
})
)
let currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek)
let weekArray = []
let currentWeekArray = []
let thisDayObject = {}
for (let thisDateOfMonth = 1; thisDateOfMonth <= 31; thisDateOfMonth++) {
currentDay = this.makeDT(
DateTime.fromObject({
year: yearNumber,
month: monthNumber,
day: thisDateOfMonth
})
)
if (
currentDay.year === yearNumber &&
currentDay.month === monthNumber
) {
if (
this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek) !== currentWeekOfYear
) {
weekArray.push(currentWeekArray)
currentWeekOfYear = this.getWeekNumber(currentDay, this.sundayFirstDayOfWeek)
currentWeekArray = []
}
thisDayObject = {
dateObject: currentDay,
year: currentDay.year,
month: currentDay.month,
date: currentDay.day,
dayName: currentDay.toFormat('EEEE'),
dayNumber: currentDay.weekday
}
currentWeekArray.push(thisDayObject)
}
}
if (weekArray.length > 0) {
weekArray.push(currentWeekArray)
}
return weekArray
},
generateCalendarCellArray: function () {
this.weekArray = this.getCalendarCellArray(
this.makeDT(this.workingDate).month,
this.makeDT(this.workingDate).year
)
return this.weekArray
},
handleNavMove: function (params) {
this.moveTimePeriod(params)
this.$emit(
this.eventRef + ':navMovePeriod',
// {
// unitType: params.unitType,
// amount: params.amount
// }
params
)
let payload = this.getWeekArrayDisplayDates(this.generateCalendarCellArray())
payload['moveUnit'] = params.unitType
payload['moveAmount'] = params.amount
this.triggerDisplayChange(
this.eventRef,
payload
)
},
getWeekArrayDisplayDates: function (weekArray) {
// this takes a weekArray and figures out the values to send for a page display event
let startDateObj = weekArray[0][0].dateObject
const lastWeek = weekArray[weekArray.length - 1]
let endDateObj = lastWeek[lastWeek.length - 1].dateObject
return {
startDate: startDateObj.toISODate(),
endDate: endDateObj.toISODate(),
numDays: Math.ceil(endDateObj.diff(startDateObj).as('days') + 1),
viewType: this.$options.name
}
},
handleDayClick: function (dateObject) {
// event item clicked; prevent "day" event
if (this.eventClicked) {
this.eventClicked = false
return
}
if (this.fullComponentRef) {
this.fullMoveToDay(dateObject)
}
this.handleNavMove({ absolute: dateObject })
this.triggerDayClick(dateObject, this.eventRef)
},
handleCalendarEventClick: function () {
this.eventClicked = true
}
},
mounted () {
debug('Component mounted')
this.doUpdate()
this.handlePassedInEvents()
this.$root.$on(
this.eventRef + ':navMovePeriod',
this.handleNavMove
)
this.$root.$on(
'click-event-' + this.eventRef,
this.handleEventDetailEvent
)
this.$root.$on(
'update-event-' + this.eventRef,
this.handleEventUpdate
)
},
watch: {
startDate: function () {
this.handleStartChange()
},
eventArray: function () {
this.getPassedInEventArray()
},
parsedEvents: function () {
this.getPassedInParsedEvents()
}
}
}
================================================
FILE: component/calendar/mixins/template/CalendarMultiDay.js
================================================
// import {animScrollTo} from "quasar/src/utils/scroll";
const debug = require('debug')('calendar:CalendarMultiDay')
// const { getScrollTarget, setScrollPosition } = scroll
export default {
props: {
numDays: {
type: Number,
default: 7
},
navDays: {
type: Number,
default: 7
},
forceStartOfWeek: {
type: Boolean,
default: true
},
dayCellHeight: {
type: [Number, String],
default: 5
},
dayCellHeightUnit: {
type: String,
default: 'rem'
},
scrollStyle: {
type: Object,
default: function () {
return {}
}
},
scrollHeight: {
type: String,
default: 'auto'
},
showHalfHours: {
type: Boolean,
default: false
}
},
data () {
return {
workingDate: new Date(),
weekDateArray: [],
parsed: this.getDefaultParsed(),
thisNavRef: this.createNewNavEventName(),
eventDetailEventObject: {}
}
},
computed: {
dayCellWidth: function () {
return this.calculateDayCellWidth(this.numDays)
},
getScrollStyle: function () {
if (this.scrollStyle.length > 0) {
return this.scrollStyle
}
else {
return {
'height': this.scrollHeight
}
}
},
getScrollClass: function () {
if (this.scrollHeight === 'auto') {
return {
'col': true
}
}
else {
return {}
}
}
},
methods: {
getHeaderLabel: function () {
if (this.forceStartOfWeek) {
let dateReturn = ''
let bookendDates = this.getForcedWeekBookendDates()
if (bookendDates.first.month !== bookendDates.last.month) {
dateReturn += bookendDates.first.toFormat('MMM')
if (bookendDates.first.year !== bookendDates.last.year) {
dateReturn += bookendDates.first.toFormat(' yyyy')
}
dateReturn += ' - '
}
dateReturn += bookendDates.last.toFormat('MMM yyyy')
return dateReturn
}
else {
return this.makeDT(this.workingDate).toFormat('MMMM yyyy')
}
},
doUpdate: function () {
this.mountSetDate()
let payload = this.getMultiDayDisplayDates(
this.buildWeekDateArray(this.numDays, this.sundayFirstDayOfWeek)
)
this.triggerDisplayChange(
this.eventRef,
payload
)
this.$nextTick(() => {
this.scrollToFirstDay()
})
},
handleNavMove: function (params) {
this.moveTimePeriod(params)
this.$emit(
this.eventRef + ':navMovePeriod',
params
)
let payload = this.getMultiDayDisplayDates(
this.buildWeekDateArray()
)
payload['moveUnit'] = params.unitType
payload['moveAmount'] = params.amount
this.triggerDisplayChange(
this.eventRef,
payload
)
},
scrollToElement: function (el) {
let target = this.getScrollTarget(el)
let offset = el.offsetTop - el.scrollHeight
let duration = 0
this.setScrollPosition(target, offset, duration)
},
scrollToFirstDay: function () {
let thisId = this.getDayHourId(
this.eventRef,
this.weekDateArray[0],
(this.dayDisplayStartHour + 1)
)
let thisEl = document.getElementById(thisId)
this.scrollToElement(thisEl)
},
getMultiDayDisplayDates: function (weekDateArray) {
return {
startDate: weekDateArray[0].toISODate(),
endDate: weekDateArray[weekDateArray.length - 1].toISODate(),
numDays: this.numDays,
viewType: this.$options.name
}
},
getScrollTarget (el) {
return el.closest('.scroll,.scroll-y,.overflow-auto') || window
},
setScrollPosition: function (scrollTarget, offset, duration) {
if (duration) {
this.animScrollTo(scrollTarget, offset, duration)
return
}
this.setScroll(scrollTarget, offset)
},
setScroll: function (scrollTarget, offset) {
if (scrollTarget === window) {
window.scrollTo(0, offset)
return
}
scrollTarget.scrollTop = offset
},
animScrollTo: function (el, to, duration) {
let pos = this.getScrollPosition(el)
if (duration <= 0) {
if (pos !== to) {
this.setScroll(el, to)
}
return
}
let _this = this
requestAnimationFrame(function () {
let newPos = pos + (to - pos) / Math.max(16, duration) * 16
_this.setScroll(el, newPos)
if (newPos !== to) {
_this.animScrollTo(el, to, duration - 16)
}
})
}
},
mounted () {
debug('Component mounted')
this.doUpdate()
this.handlePassedInEvents()
this.$root.$on(
this.eventRef + ':navMovePeriod',
this.handleNavMove
)
this.$root.$on(
this.fullComponentRef + ':moveToSingleDay',
this.handleDateChange
)
this.$root.$on(
'click-event-' + this.eventRef,
this.handleEventDetailEvent
)
this.$root.$on(
'update-event-' + this.eventRef,
this.handleEventUpdate
)
},
watch: {
startDate: function (newVal, oldVal) {
this.handleStartChange()
},
eventArray: 'getPassedInEventArray',
parsedEvents: 'getPassedInParsedEvents'
}
}
================================================
FILE: component/calendar/mixins/template/CalendarMultiDayContent.js
================================================
// import {animScrollTo} from "quasar/src/utils/scroll";
const debug = require('debug')('calendar:CalendarMultiDayContent')
// const { getScrollTarget, setScrollPosition } = scroll
export default {
props: {
eventRef: {
type: String
},
weekDateArray: {
type: Array
},
workingDate: {
type: [Date, Object]
},
parsed: {
type: Object
},
numDays: {
type: Number,
default: 7
},
navDays: {
type: Number,
default: 7
},
forceStartOfWeek: {
type: Boolean,
default: true
},
dayCellHeight: {
type: [Number, String],
default: 5
},
dayCellHeightUnit: {
type: String,
default: 'rem'
},
scrollStyle: {
type: Object,
default: function () {
return {}
}
},
scrollHeight: {
type: String,
default: 'auto'
},
showHalfHours: {
type: Boolean,
default: false
}
},
data () {
return {
// workingDate: new Date(),
// weekDateArray: [],
// parsed: this.getDefaultParsed(),
// thisNavRef: this.createNewNavEventName(),
eventDetailEventObject: {}
}
},
computed: {
dayCellWidth: function () {
return this.calculateDayCellWidth(this.numDays)
}
// getScrollStyle: function () {
// if (this.scrollStyle.length > 0) {
// return this.scrollStyle
// }
// else {
// return {
// 'height': this.scrollHeight
// }
// }
// },
// getScrollClass: function () {
// if (this.scrollHeight === 'auto') {
// return {
// 'col': true
// }
// }
// else {
// return {}
// }
// }
},
methods: {
// getHeaderLabel: function () {
// if (this.forceStartOfWeek) {
// let dateReturn = ''
// let bookendDates = this.getForcedWeekBookendDates()
// if (bookendDates.first.month !== bookendDates.last.month) {
// dateReturn += bookendDates.first.toFormat('MMM')
// if (bookendDates.first.year !== bookendDates.last.year) {
// dateReturn += bookendDates.first.toFormat(' yyyy')
// }
// dateReturn += ' - '
// }
// dateReturn += bookendDates.last.toFormat('MMM yyyy')
// return dateReturn
// }
// else {
// return this.makeDT(this.workingDate).toFormat('MMMM yyyy')
// }
// },
// doUpdate: function () {
// this.mountSetDate()
// let payload = this.getMultiDayDisplayDates(
// this.buildWeekDateArray(this.numDays, this.sundayFirstDayOfWeek)
// )
// this.triggerDisplayChange(
// this.eventRef,
// payload
// )
// this.$nextTick(() => {
// this.scrollToFirstDay()
// })
// },
// handleNavMove: function (params) {
// this.moveTimePeriod(params)
// this.$emit(
// this.eventRef + ':navMovePeriod',
// params
// )
// let payload = this.getMultiDayDisplayDates(
// this.buildWeekDateArray()
// )
// payload['moveUnit'] = params.unitType
// payload['moveAmount'] = params.amount
// this.triggerDisplayChange(
// this.eventRef,
// payload
// )
// },
// scrollToElement: function (el) {
// let target = this.getScrollTarget(el)
// let offset = el.offsetTop - el.scrollHeight
// let duration = 0
// this.setScrollPosition(target, offset, duration)
// },
// scrollToFirstDay: function () {
// let thisId = this.getDayHourId(
// this.eventRef,
// this.weekDateArray[0],
// (this.dayDisplayStartHour + 1)
// )
// let thisEl = document.getElementById(thisId)
// this.scrollToElement(thisEl)
// },
getMultiDayDisplayDates: function (weekDateArray) {
return {
startDate: weekDateArray[0].toISODate(),
endDate: weekDateArray[weekDateArray.length - 1].toISODate(),
numDays: this.numDays,
viewType: this.$options.name
}
},
// getScrollTarget (el) {
// return el.closest('.scroll,.scroll-y,.overflow-auto') || window
// },
// setScrollPosition: function (scrollTarget, offset, duration) {
// if (duration) {
// this.animScrollTo(scrollTarget, offset, duration)
// return
// }
// this.setScroll(scrollTarget, offset)
// },
// setScroll: function (scrollTarget, offset) {
// if (scrollTarget === window) {
// window.scrollTo(0, offset)
// return
// }
// scrollTarget.scrollTop = offset
// },
// animScrollTo: function (el, to, duration) {
// let pos = this.getScrollPosition(el)
// if (duration <= 0) {
// if (pos !== to) {
// this.setScroll(el, to)
// }
// return
// }
// let _this = this
// requestAnimationFrame(function () {
// let newPos = pos + (to - pos) / Math.max(16, duration) * 16
// _this.setScroll(el, newPos)
// if (newPos !== to) {
// _this.animScrollTo(el, to, duration - 16)
// }
// })
// }
},
mounted () {
debug('Component mounted')
// this.doUpdate()
this.handlePassedInEvents()
// this.$root.$on(
// this.eventRef + ':navMovePeriod',
// this.handleNavMove
// )
// this.$root.$on(
// this.fullComponentRef + ':moveToSingleDay',
// this.handleDateChange
// )
// this.$root.$on(
// 'click-event-' + this.eventRef,
// this.handleEventDetailEvent
// )
// this.$root.$on(
// 'update-event-' + this.eventRef,
// this.handleEventUpdate
// )
},
watch: {
startDate: function (newVal, oldVal) {
this.handleStartChange()
},
eventArray: 'getPassedInEventArray',
parsedEvents: 'getPassedInParsedEvents'
}
}
================================================
FILE: component/calendar/mixins/template/CalendarTimeLabelColumn.js
================================================
import DateTime from 'luxon/src/datetime'
const debug = require('debug')('calendar:CalendarTimeLabelColumn')
export default {
props: {
dayCellHeight: {
type: [Number, String],
default: 5
},
dayCellHeightUnit: {
type: String,
default: 'rem'
},
calendarLocale: {
type: String,
default: () => { return DateTime.local().locale }
},
showHalfHours: {
type: Boolean,
default: false
}
},
computed: {
calcDayCellHeight: function () {
if (this.showHalfHours) {
return (this.dayCellHeight / 2) + this.dayCellHeightUnit
}
else {
return this.dayCellHeight + this.dayCellHeightUnit
}
}
}
}
================================================
FILE: component/calendar/mixins/template/index.js
================================================
import CalendarTemplateMixin from './Calendar'
import CalendarAgendaTemplateMixin from './CalendarAgenda'
import CalendarAgendaEventTemplateMixin from './CalendarAgendaEvent'
import CalendarAllDayEventsTemplateMixin from './CalendarAllDayEvents'
import CalendarDayColumnTemplateMixin from './CalendarDayColumn'
import CalendarDayLabelsTemplateMixin from './CalendarDayLabels'
import CalendarEventTemplateMixin from './CalendarEvent'
import CalendarEventDetailTemplateMixin from './CalendarEventDetail'
import CalendarHeaderNavTemplateMixin from './CalendarHeaderNav'
import CalendarMonthTemplateMixin from './CalendarMonth'
import CalendarMonthInnerTemplateMixin from './CalendarMonthInner'
import CalendarMultiDayTemplateMixin from './CalendarMultiDay'
import CalendarMultiDayContentTemplateMixin from './CalendarMultiDayContent'
import CalendarTimeLabelTemplateMixin from './CalendarTimeLabelColumn'
export {
CalendarTemplateMixin,
CalendarAgendaTemplateMixin,
CalendarAgendaEventTemplateMixin,
CalendarAllDayEventsTemplateMixin,
CalendarDayColumnTemplateMixin,
CalendarDayLabelsTemplateMixin,
CalendarEventTemplateMixin,
CalendarEventDetailTemplateMixin,
CalendarHeaderNavTemplateMixin,
CalendarMonthTemplateMixin,
CalendarMonthInnerTemplateMixin,
CalendarMultiDayTemplateMixin,
CalendarMultiDayContentTemplateMixin,
CalendarTimeLabelTemplateMixin
}
================================================
FILE: component/calendar/plugin/Calendar.json
================================================
{
"mixins": [
],
"injection": "$q.quasarCalendar",
"methods": {
"create": {
"desc": "INSERT DESCRIPTION HERE",
"params": {
"opts": {
"desc": "INSERT DESCRIPTION HERE",
"definition": {
"startDate": {
"type": ["Date","DateTime"],
"desc": "A JavaScript Date or Luxon DateTime object that passes in a starting display date for the calendar to display."
},
"sundayFirstDayOfWeek": {
"type": "Boolean",
"desc": "If true this will force month and week calendars to start on a Sunday instead of the standard Monday."
},
"calendarLocale": {
"type": "String",
"desc": "A string setting the locale. We use the Luxon package for this. This will default to the user's system setting.",
"examples": ["fr", "de-AT"]
},
"calendarTimezone": {
"type": "String",
"desc": "Manually set the timezone for the calendar. Many strings can be passed in including UTC or any valid IANA zone.",
"examples": ["UTC", "Australia/Brisbane"]
},
"eventRef": {
"type": "String",
"desc": "Give the calendar component a custom name so that events triggered on the global event bus can be watched. If none given a random name will be assigned.",
"examples": ["mycalendar1"]
},
"preventEventDetail": {
"type": "Boolean",
"desc": "Prevent the default event detail popup from appearing when an event is clicked in a calendar."
},
"allowEditing": {
"type": "Boolean",
"desc": "Allows for individual events to be edited."
},
"renderHtml": {
"type": "Boolean",
"desc": "Event descriptions render HTML tags and provide a WYSIWYG editor when editing. No HTML validation is performed so be sure to pass the data passed in does not present a security threat."
},
"dayDisplayStartHour": {
"type": "Number",
"desc": "Will scroll to a defined start hour when a day / multi-day component is rendered. Pass in the hour of the day from 0-23, the default being 7. Current has no effect on the CalendarAgenda component."
}
}
}
}
}
}
}
================================================
FILE: component/calendar/styles-common/app.styl
================================================
.wtf-is-this
font-weight bold
================================================
FILE: component/calendar/styles-common/calendar.vars.styl
================================================
$grayLight = #bdbdbd
$grayLighter = #eeeeee
$grayLightest = #f5f5f5
$sevenCellWidth = 14.285%
$cellHeight = 8em
$borderColor = $grayLight
$borderThinColor = $grayLighter
$borderOuter = 1px solid $borderColor
$borderThin = 1px solid $borderThinColor
$borderThinner = 1px dotted $borderThinColor
$dayTimeLabelWidth = 4em
$currentDayBackgroundColor = $grayLighter
$weekendDayBackgroundColor = $grayLightest
$whiteHighlightBackgroundColor = $grayLighter
.flex-row, .flex-column, .flex
display flex
flex-wrap wrap
&.inline
display inline-flex
.flex-row.reverse
flex-direction row-reverse
.flex-column
flex-direction column
&.reverse
flex-direction column-reverse
.flex-wrap
flex-wrap wrap
.flex-no-wrap
flex-wrap nowrap
.flex-reverse-wrap
flex-wrap wrap-reverse
.flex-justify-
&start
justify-content flex-start
&end
justify-content flex-end
¢er
justify-content center
&between
justify-content space-between
&around
justify-content space-around
.flex-items-
&start
align-items flex-start
&end
align-items flex-end
¢er
align-items center
&baseline
align-items baseline
&stretch
align-items stretch
.flex-content-
&start
align-content flex-start
&end
align-content flex-end
¢er
align-content center
&stretch
align-content stretch
&between
align-content space-between
&around
align-content space-around
.flex-self-
&start
align-self flex-start
&end
align-self flex-end
¢er
align-self center
&baseline
align-self baseline
&stretch
align-self stretch
.flex-center
@extends .flex-items-center
@extends .flex-justify-center
.flex-col
flex 10000 1 0
&-auto
flex 0 0 auto
.fit
width 100% !important
height 100% !important
.is-clickable
cursor pointer
================================================
FILE: component/calendar/templates/quasar/Calendar.json
================================================
{
"type": "component",
"props": {
"start-date": {
"type": [
"Date",
"DateTime"
],
"desc": "A JavaScript Date or Luxon DateTime object that passes in a starting display date for the calendar to display."
},
"sunday-first-day-of-week": {
"type": "Boolean",
"desc": "If true this will force month and week calendars to start on a Sunday instead of the standard Monday."
},
"calendar-locale": {
"type": "String",
"desc": "A string setting the locale. We use the Luxon package for this and they describe how to set this at https://moment.github.io/luxon/docs/manual/intl.html. This will default to the user's system setting."
},
"calendar-timezone": {
"type": "String",
"desc": "Manually set the timezone for the calendar. Many strings can be passed in including 'UTC' or any valid [IANA zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). This is better explained [here](https://moment.github.io/luxon/docs/manual/zones.html)."
},
"event-ref": {
"type": "String",
"desc": "Give the calendar component a custom name so that events triggered on the global event bus can be watched."
},
"prevent-event-detail": {
"type": "Boolean",
"desc": "Prevent the default event detail popup from appearing when an event is clicked in a calendar."
},
"allow-editing": {
"type": "Boolean",
"desc": "Allows for individual events to be edited. See the editing section."
},
"render-html": {
"type": "Boolean",
"desc": "Event descriptions render HTML tags and provide a WYSIWYG editor when editing. No HTML validation is performed so be sure to pass the data passed in does not present a security threat."
},
"day-display-start-hour": {
"type": "Number",
"desc": "Will scroll to a defined start hour when a day / multi-day component is rendered. Pass in the hour of the day from 0-23, the default being '7'. Current has no effect on the 'CalendarAgenda' component."
},
"tab-labels": {
"type": "Object",
"desc": "Passing in an object with strings that will override the labels for the different calendar components. Set variables for 'month', 'week', 'threeDay', 'day' and 'agenda'. Eventually we will replace this with language files and will use the 'calendar-locale' setting."
}
}
}
================================================
FILE: component/calendar/templates/quasar/Calendar.vue
================================================
<template>
<div class="calendar-test">
<q-tabs
v-model="currentTab"
class="text-primary calendar-tabs"
ref="fullCalendarTabs"
align="left"
>
<q-tab
name="tab-month"
icon="view_module"
:label="tabLabels.month"
/>
<q-tab
name="tab-week-component"
icon="view_week"
:label="tabLabels.week"
/>
<q-tab
name="tab-days-component"
icon="view_column"
:label="tabLabels.threeDay"
/>
<q-tab
name="tab-single-day-component"
icon="view_day"
:label="tabLabels.day"
/>
<q-tab
name="tab-agenda"
icon="view_agenda"
:label="tabLabels.agenda"
/>
</q-tabs>
<q-separator />
<q-tab-panels
v-model="currentTab"
class="calendar-tab-panels"
animated
>
<q-tab-panel name="tab-month" class="calendar-tab-panel-month">
<calendar-month
:ref="'month-' + thisRefName"
:start-date="workingDate"
:parsed-events="parsed"
:event-ref="eventRef"
:full-component-ref="eventRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:prevent-event-detail="preventEventDetail"
:allow-editing="allowEditing"
/>
</q-tab-panel>
<q-tab-panel name="tab-week-component" class="calendar-tab-panel-week">
<calendar-multi-day
:ref="'week-' + thisRefName"
:start-date="workingDate"
:parsed-events="parsed"
:num-days="7"
:nav-days="7"
:force-start-of-week="true"
:event-ref="eventRef"
:full-component-ref="eventRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:prevent-event-detail="preventEventDetail"
:allow-editing="allowEditing"
:day-display-start-hour="dayDisplayStartHour"
/>
</q-tab-panel>
<q-tab-panel name="tab-days-component" class="calendar-tab-panel-week">
<calendar-multi-day
:ref="'days-' + thisRefName"
:start-date="workingDate"
:parsed-events="parsed"
:num-days="3"
:nav-days="1"
:force-start-of-week="false"
:event-ref="eventRef"
:full-component-ref="eventRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:prevent-event-detail="preventEventDetail"
:allow-editing="allowEditing"
:day-display-start-hour="dayDisplayStartHour"
/>
</q-tab-panel>
<q-tab-panel name="tab-single-day-component" class="calendar-tab-panel-week">
<calendar-multi-day
:ref="'day-' + thisRefName"
:start-date="workingDate"
:parsed-events="parsed"
:num-days="1"
:nav-days="1"
:force-start-of-week="false"
:event-ref="eventRef"
:full-component-ref="eventRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:prevent-event-detail="preventEventDetail"
:allow-editing="allowEditing"
:day-display-start-hour="dayDisplayStartHour"
/>
</q-tab-panel>
<q-tab-panel name="tab-agenda" class="calendar-tab-panel-agenda">
<calendar-agenda
:ref="'agenda-' + thisRefName"
:start-date="workingDate"
:parsed-events="parsed"
:num-days="28"
:event-ref="eventRef"
scroll-height="300px"
:full-component-ref="eventRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:prevent-event-detail="preventEventDetail"
:allow-editing="allowEditing"
/>
</q-tab-panel>
</q-tab-panels>
</div>
</template>
<script>
import {
CalendarMixin,
CalendarEventMixin,
CalendarParentComponentMixin,
CalendarTemplateMixin
} from '@daykeep/calendar-core'
import CalendarMonth from './CalendarMonth'
import CalendarMultiDay from './CalendarMultiDay'
import CalendarAgenda from './CalendarAgenda'
import {
QTabs,
QTab,
QTabPanels,
QTabPanel,
QSeparator
} from 'quasar'
export default {
name: 'Calendar',
mixins: [
CalendarParentComponentMixin,
CalendarMixin,
CalendarEventMixin,
CalendarTemplateMixin
],
components: {
CalendarMonth,
CalendarMultiDay,
CalendarAgenda,
QTabs,
QTab,
QTabPanels,
QTabPanel,
QSeparator
}
}
</script>
<style lang="stylus">
@import '~@daykeep/calendar-core/component/calendar/styles-common/calendar.vars.styl'
.calendar-tab-panels
.calendar-tab-panel-day,
.calendar-tab-panel-week
height 60vh
max-height 60vh
overflow hidden
.q-tab-panel
border none
</style>
================================================
FILE: component/calendar/templates/quasar/CalendarAgenda.json
================================================
{
"type": "component",
"props": {
"start-date": {
"type": [
"Date",
"DateTime"
],
"desc": "A JavaScript Date or Luxon DateTime object that passes in a starting display date for the calendar to display."
},
"sunday-first-day-of-week": {
"type": "Boolean",
"desc": "If true this will force month and week calendars to start on a Sunday instead of the standard Monday."
},
"calendar-locale": {
"type": "String",
"desc": "A string setting the locale. We use the Luxon package for this and they describe how to set this at https://moment.github.io/luxon/docs/manual/intl.html. This will default to the user's system setting."
},
"calendar-timezone": {
"type": "String",
"desc": "Manually set the timezone for the calendar. Many strings can be passed in including 'UTC' or any valid [IANA zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). This is better explained [here](https://moment.github.io/luxon/docs/manual/zones.html)."
},
"event-ref": {
"type": "String",
"desc": "Give the calendar component a custom name so that events triggered on the global event bus can be watched."
},
"prevent-event-detail": {
"type": "Boolean",
"desc": "Prevent the default event detail popup from appearing when an event is clicked in a calendar."
},
"allow-editing": {
"type": "Boolean",
"desc": "Allows for individual events to be edited. See the editing section."
},
"render-html": {
"type": "Boolean",
"desc": "Event descriptions render HTML tags and provide a WYSIWYG editor when editing. No HTML validation is performed so be sure to pass the data passed in does not present a security threat."
},
"day-display-start-hour": {
"type": "Number",
"desc": "Will scroll to a defined start hour when a day / multi-day component is rendered. Pass in the hour of the day from 0-23, the default being '7'. Current has no effect on the 'CalendarAgenda' component."
},
"num-days": {
"type": "Number",
"desc": "The number of days the multi-day calendar. A value of `1` will change the header to be more appropriate for a single day."
},
"scroll-height": {
"type": "String",
"desc": "Defaults to '200px', this is meant to define the size of the 'block' style."
}
}
}
================================================
FILE: component/calendar/templates/quasar/CalendarAgenda.vue
================================================
<template>
<div class="calendar-test">
<calendar-agenda-inner
:agenda-style="agendaStyle"
:num-days="numDays"
:left-margin="leftMargin"
:scroll-height="scrollHeight"
:start-date="startDate"
:event-array="eventArray"
:parsed-events="parsedEvents"
:event-ref="eventRef"
:prevent-event-detail="preventEventDetail"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:allow-editing="allowEditing"
:render-html="renderHtml"
:day-display-start-hour="dayDisplayStartHour"
:full-component-ref="fullComponentRef"
>
<template v-slot:headernav="navVal">
<!-- calendar header -->
<calendar-header-nav
time-period-unit="days"
:time-period-amount="1"
:move-time-period-emit="eventRef + ':navMovePeriod'"
:calendar-locale="calendarLocale"
>
{{ formatDate(workingDate, 'EEE, MMM d')}}
-
{{ formatDate(makeDT(workingDate).plus({ days: numJumpDays }), 'MMM d')}}
</calendar-header-nav>
</template>
<template v-slot:eventdetail="eventVal">
<calendar-event-detail
:ref="eventVal.targetRef"
v-if="!eventVal.preventEventDetail"
:event-object="eventVal.eventObject"
:calendar-locale="eventVal.calendarLocale"
:calendar-timezone="eventVal.calendarTimezone"
:event-ref="eventVal.eventRef"
:allow-editing="eventVal.allowEditing"
:render-html="eventVal.renderHtml"
/>
</template>
</calendar-agenda-inner>
</div>
</template>
<script>
import {
CalendarMixin,
CalendarEventMixin,
CalendarParentComponentMixin,
CalendarAgendaTemplateMixin,
CalendarAgendaInner
} from '@daykeep/calendar-core'
import CalendarHeaderNav from './CalendarHeaderNav'
import CalendarEventDetail from './CalendarEventDetail'
export default {
name: 'CalendarAgenda',
mixins: [
CalendarParentComponentMixin,
CalendarMixin,
CalendarEventMixin,
CalendarAgendaTemplateMixin
],
components: {
CalendarHeaderNav,
CalendarEventDetail,
CalendarAgendaInner
}
}
</script>
<style lang="stylus">
@import '~@daykeep/calendar-core/component/calendar/styles-common/calendar.vars.styl'
.calendar-tab-panels
.calendar-tab-panel-day,
.calendar-tab-panel-week
height 60vh
max-height 60vh
overflow hidden
.q-tab-panel
border none
</style>
================================================
FILE: component/calendar/templates/quasar/CalendarEventDetail.vue
================================================
<template>
<q-dialog
v-model="modalIsOpen"
class="NOcalendar-event-detail"
@hide="__close()"
@escape-key="__close()"
>
<q-card class="calendar-event-detail">
<q-toolbar>
<q-toolbar-title>
<!--{{ eventObject.summary }}-->
</q-toolbar-title>
<q-btn
v-if="isEditingAllowed && !inEditMode"
flat
round
dense
icon="edit"
@click="startEditMode"
/>
<div class="ced-close-button-left-spacer"></div>
<q-btn
flat
round
dense
icon="close"
v-close-popup
/>
</q-toolbar>
<q-card-section class="ced-q-card-main">
<div class="ced-content">
<q-list no-border>
<!-- title -->
<q-item>
<!-- left side color bar -->
<q-item-section
avatar
class="ced-avatar-column"
>
<div :class="getTopColorClasses"></div>
</q-item-section>
<q-item-section>
<div
v-if="isEditingAllowed && inEditMode"
class="ced-top-title ced-event-title"
>
<q-input
v-model="editEventObject.summary"
label="Summary"
stack-label
filled
bottom-slots
/>
</div>
<div
v-else
class="ced-event-title"
>
{{ eventObject.summary }}
</div>
<!-- date/time edit mode -->
<div
v-if="isEditingAllowed && inEditMode"
class="flex-column q-gutter-y-md"
>
<div class="flex-row flex-items-center q-gutter-x-md flex-no-wrap">
<field-date
v-model="startDateObject"
label="Start date"
stack-label
@input="checkEndAfterStart"
/>
<template v-if="!editEventObject.start.isAllDay">
<field-time
v-model="startTimeObject"
label="Time"
stack-label
@input="checkEndAfterStart"
/>
</template>
</div>
<div class="flex-row flex-items-center q-gutter-x-md flex-no-wrap">
<field-date
label="End date"
stack-label
v-model="endDateObject"
/>
<template v-if="!editEventObject.start.isAllDay">
<field-time
v-model="endTimeObject"
label="Time"
stack-label
/>
</template>
</div>
<!-- all-day -->
<q-checkbox
label="All day"
v-model="editEventObject.start.isAllDay"
@input="$forceUpdate()"
:toggle-indeterminate="false"
/>
</div>
<!-- date/time display mode -->
<div v-else>
<div
v-if="eventObject.start && eventObject.start.dateObject"
class="ced-list-title"
>
{{ formatDate(eventObject.start.dateObject, 'DATE_HUGE', true) }}
<template
v-if="eventObject.end &&
eventObject.end.dateObject &&
eventObject.start.isAllDay &&
formatDate(eventObject.start.dateObject, 'DATE_SHORT', true) !== formatDate(eventObject.end.dateObject, 'DATE_SHORT', true)"
>
-
{{ formatDate(eventObject.end.dateObject, 'DATE_HUGE', true) }}
</template>
</div>
<div
v-if="eventObject.end &&
eventObject.end.dateObject &&
!eventObject.start.isAllDay"
class="ced-list-subtitle"
>
{{ formatDate(eventObject.start.dateObject, 'TIME_SIMPLE', true) }}
-
{{ formatDate(eventObject.end.dateObject, 'TIME_SIMPLE', true) }}
</div>
</div>
<!-- date / time -->
</q-item-section>
</q-item>
<!-- location -->
<q-item v-if="isEditingAllowed && inEditMode">
<q-item-section avatar>
<q-icon
name="location_on"
:color="eventColor"
/>
</q-item-section>
<q-item-section class="ced-list-title">
<q-input
v-model="editEventObject.location"
label="Location"
stack-label
filled
/>
</q-item-section>
</q-item>
<q-item v-else-if="textExists('location')">
<q-item-section avatar>
<q-icon
name="location_on"
:color="eventColor"
/>
</q-item-section>
<q-item-section class="ced-list-title">
{{ eventObject.location }}
</q-item-section>
</q-item>
<!-- resources -->
<q-item
v-if="countResources > 0"
>
<q-item-section avatar>
<q-icon
name="business"
:color="eventColor"
/>
</q-item-section>
<q-item-section>
<div
v-for="thisAttendee in eventObject.attendees"
:key="thisAttendee.id"
>
<q-item
dense
v-if="dashHas(thisAttendee, 'resource') && thisAttendee.resource"
class="ced-nested-item"
>
{{ thisAttendee.displayName }}
</q-item>
</div>
</q-item-section>
</q-item>
<!-- attendees -->
<q-item
multiline
v-if="countAttendees > 0"
>
<q-item-section avatar>
<div class="relative-position ced-icon-div-with-badge">
<q-icon
name="people"
:color="eventColor"
>
</q-icon>
<q-badge color="red" floating transparent>
{{ countAttendees }}
</q-badge>
</div>
</q-item-section>
<q-item-section class="ced-list-title">
<!-- guest list -->
<div class="flex-row">
<template
v-for="thisAttendee in eventObject.attendees"
>
<q-chip
:key="thisAttendee.id"
v-if="!(dashHas(thisAttendee, 'resource') && thisAttendee.resource)"
>
<q-avatar icon="person" :color="eventColor" />
<template v-if="thisAttendee.displayName && thisAttendee.displayName.length > 0">
{{ thisAttendee.displayName }}
</template>
<template v-else>
{{ thisAttendee.email }}
</template>
</q-chip>
</template>
</div>
</q-item-section>
</q-item>
<!-- description -->
<q-item v-if="isEditingAllowed && inEditMode">
<q-item-section avatar>
<q-icon
name="format_align_left"
:color="eventColor"
/>
</q-item-section>
<q-item-section>
<template v-if="renderHtml">
<q-editor v-model="editEventObject.description"/>
</template>
<template v-else>
<q-input
v-model="editEventObject.description"
label="Description"
stack-label
type="textarea"
filled
/>
</template>
</q-item-section>
</q-item>
<q-item
v-else-if="textExists('description')"
multiline
>
<q-item-section avatar>
<q-icon
name="format_align_left"
:color="eventColor"
/>
</q-item-section>
<q-item-section class="ced-list-title">
<template v-if="renderHtml">
<div v-html="eventObject.description"></div>
</template>
<template v-else>
{{ eventObject.description }}
</template>
</q-item-section>
</q-item>
</q-list>
</div>
<!-- editing close buttons -->
<div
v-if="isEditingAllowed && inEditMode"
class="flex-row flex-justify-end q-pa-md q-gutter-sm"
>
<div>
<q-btn
:color="eventColor"
icon="cancel"
label="Cancel"
flat
@click="__close()"
/>
</div>
<div>
<q-btn
:color="eventColor"
icon="check"
label="Save"
flat
@click="__save()"
/>
</div>
</div>
</q-card-section>
</q-card>
</q-dialog>
</template>
<script>
import {
QList,
QItem,
QItemSection,
QAvatar,
QChip,
QIcon,
QBadge,
QDialog,
ClosePopup,
QCard,
QCardSection,
QToolbar,
QToolbarTitle,
QBtn,
QCheckbox,
QInput,
QEditor
} from 'quasar'
import {
CalendarMixin,
EventPropsMixin,
CalendarEventDetailTemplateMixin
} from '@daykeep/calendar-core'
import {
QuasarFieldDate as FieldDate,
QuasarFieldTime as FieldTime
} from '../../fields'
export default {
name: 'CalendarEventDetail',
mixins: [
CalendarMixin,
EventPropsMixin,
CalendarEventDetailTemplateMixin
],
components: {
QList,
QItem,
QItemSection,
QAvatar,
QChip,
QIcon,
QBadge,
QDialog,
QCard,
QCardSection,
QToolbar,
QToolbarTitle,
QBtn,
QCheckbox,
QInput,
QEditor,
FieldDate,
FieldTime
},
directives: {
ClosePopup
}
}
</script>
<style lang="stylus">
@import '~@daykeep/calendar-core/component/calendar/styles-common/calendar.vars.styl'
$topSidePadding = 16px
$listSideItemWidth = 38px
$listSideItemSpace = 10px
$forcedLeftMargin = $topSidePadding + $listSideItemWidth + $listSideItemSpace
.calendar-event-detail
max-width 80vw !important
.ced-icon-div-with-badge
padding-right 5px
padding-top 5px
.ced-close-button-left-spacer
width 16px
.ced-event-title
font-size 1.5em
font-weight 500
.ced-list-title
font-size 1em
.ced-list-subtitle
font-size .8em
opacity 0.8
.ced-q-card-main
padding-top 0
.ced-avatar-column
min-width 40px
margin-right 16px
.ced-top
/*padding .25em 0 1em*/
.ced-top-title
font-size 1.25em
margin-left $forcedLeftMargin
.ced-toolbar-edit-spacer
min-height 1em
height 1em
.ced-edit-button-container
position relative
.ced-edit-button
position absolute
left 8px
bottom -32px
.ced-content
font-size 1em
.ced-edit-button-content-spacer
min-height 1em
height 1em
.ced-nested-item
padding-left 0
.ced-small-inverted-icon
font-size 20px
padding 2px
border-radius 50%
min-width 24px
.q-item-icon-inverted
background $grey-4
</style>
================================================
FILE: component/calendar/templates/quasar/CalendarHeaderNav.vue
================================================
<template>
<div class="calendar-header flex-col-auto flex-row flex-justify-between flex-items-center">
<div class="calendar-header-left flex-col-auto">
<q-btn
@click="doMoveTimePeriod(timePeriodUnit, -timePeriodAmount)"
icon="chevron_left"
color="primary"
round
flat
/>
</div>
<div class="calendar-header-label">
<slot/>
</div>
<div class="calendar-header-right flex-col-auto">
<q-btn
@click="doMoveTimePeriod(timePeriodUnit, timePeriodAmount)"
icon="chevron_right"
color="primary"
round
flat
/>
</div>
</div>
</template>
<script>
import { CalendarHeaderNavTemplateMixin } from '@daykeep/calendar-core'
import { QBtn } from 'quasar'
export default {
name: 'CalendarHeaderNav',
mixins: [ CalendarHeaderNavTemplateMixin ],
components: {
QBtn
}
}
</script>
<style lang="stylus">
.calendar-header
.calendar-month-year
font-size 1.25em
font-weight bold
</style>
================================================
FILE: component/calendar/templates/quasar/CalendarMonth.json
================================================
{
"type": "component",
"props": {
"start-date": {
"type": [
"Date",
"DateTime"
],
"desc": "A JavaScript Date or Luxon DateTime object that passes in a starting display date for the calendar to display."
},
"sunday-first-day-of-week": {
"type": "Boolean",
"desc": "If true this will force month and week calendars to start on a Sunday instead of the standard Monday."
},
"calendar-locale": {
"type": "String",
"desc": "A string setting the locale. We use the Luxon package for this and they describe how to set this at https://moment.github.io/luxon/docs/manual/intl.html. This will default to the user's system setting."
},
"calendar-timezone": {
"type": "String",
"desc": "Manually set the timezone for the calendar. Many strings can be passed in including 'UTC' or any valid [IANA zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). This is better explained [here](https://moment.github.io/luxon/docs/manual/zones.html)."
},
"event-ref": {
"type": "String",
"desc": "Give the calendar component a custom name so that events triggered on the global event bus can be watched."
},
"prevent-event-detail": {
"type": "Boolean",
"desc": "Prevent the default event detail popup from appearing when an event is clicked in a calendar."
},
"allow-editing": {
"type": "Boolean",
"desc": "Allows for individual events to be edited. See the editing section."
},
"render-html": {
"type": "Boolean",
"desc": "Event descriptions render HTML tags and provide a WYSIWYG editor when editing. No HTML validation is performed so be sure to pass the data passed in does not present a security threat."
},
"day-display-start-hour": {
"type": "Number",
"desc": "Will scroll to a defined start hour when a day / multi-day component is rendered. Pass in the hour of the day from 0-23, the default being '7'. Current has no effect on the 'CalendarAgenda' component."
}
}
}
================================================
FILE: component/calendar/templates/quasar/CalendarMonth.vue
================================================
<template>
<div class="calendar-month">
<calendar-month-inner
:start-date="startDate"
:event-array="eventArray"
:parsed-events="parsedEvents"
:event-ref="eventRef"
:prevent-event-detail="preventEventDetail"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:allow-editing="allowEditing"
:render-html="renderHtml"
:day-display-start-hour="dayDisplayStartHour"
:full-component-ref="fullComponentRef"
>
<template v-slot:headernav="navVal">
<calendar-header-nav
:time-period-unit="navVal.timePeriodUnit"
:time-period-amount="1"
:move-time-period-emit="navVal.eventRef + ':navMovePeriod'"
>
{{ formatDate(navVal.workingDate, 'MMMM yyyy') }}
</calendar-header-nav>
</template>
<template v-slot:eventdetail="eventVal">
<calendar-event-detail
:ref="eventVal.targetRef"
v-if="!eventVal.preventEventDetail"
:event-object="eventVal.eventObject"
:calendar-locale="eventVal.calendarLocale"
:calendar-timezone="eventVal.calendarTimezone"
:event-ref="eventVal.eventRef"
:allow-editing="eventVal.allowEditing"
:render-html="eventVal.renderHtml"
/>
</template>
</calendar-month-inner>
</div>
</template>
<script>
import {
CalendarMixin,
CalendarEventMixin,
CalendarParentComponentMixin,
CalendarMonthTemplateMixin,
CalendarMonthInner
} from '@daykeep/calendar-core'
import CalendarHeaderNav from './CalendarHeaderNav'
import CalendarEventDetail from './CalendarEventDetail'
export default {
name: 'CalendarMonth',
components: {
CalendarHeaderNav,
CalendarEventDetail,
CalendarMonthInner
},
mixins: [
CalendarParentComponentMixin,
CalendarMixin,
CalendarEventMixin,
CalendarMonthTemplateMixin
]
}
</script>
<style lang="stylus">
</style>
================================================
FILE: component/calendar/templates/quasar/CalendarMultiDay.json
================================================
{
"type": "component",
"props": {
"start-date": {
"type": [
"Date",
"DateTime"
],
"desc": "A JavaScript Date or Luxon DateTime object that passes in a starting display date for the calendar to display."
},
"sunday-first-day-of-week": {
"type": "Boolean",
"desc": "If true this will force month and week calendars to start on a Sunday instead of the standard Monday."
},
"calendar-locale": {
"type": "String",
"desc": "A string setting the locale. We use the Luxon package for this and they describe how to set this at https://moment.github.io/luxon/docs/manual/intl.html. This will default to the user's system setting."
},
"calendar-timezone": {
"type": "String",
"desc": "Manually set the timezone for the calendar. Many strings can be passed in including 'UTC' or any valid [IANA zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). This is better explained [here](https://moment.github.io/luxon/docs/manual/zones.html)."
},
"event-ref": {
"type": "String",
"desc": "Give the calendar component a custom name so that events triggered on the global event bus can be watched."
},
"prevent-event-detail": {
"type": "Boolean",
"desc": "Prevent the default event detail popup from appearing when an event is clicked in a calendar."
},
"allow-editing": {
"type": "Boolean",
"desc": "Allows for individual events to be edited. See the editing section."
},
"render-html": {
"type": "Boolean",
"desc": "Event descriptions render HTML tags and provide a WYSIWYG editor when editing. No HTML validation is performed so be sure to pass the data passed in does not present a security threat."
},
"day-display-start-hour": {
"type": "Number",
"desc": "Will scroll to a defined start hour when a day / multi-day component is rendered. Pass in the hour of the day from 0-23, the default being '7'. Current has no effect on the 'CalendarAgenda' component."
},
"num-days": {
"type": "Number",
"desc": "The number of days the multi-day calendar. A value of `1` will change the header to be more appropriate for a single day."
},
"nav-days": {
"type": "Number",
"desc": "This is how many days the previous / next navigation buttons will jump."
},
"force-start-of-week": {
"type": "Boolean",
"desc": "Default is 'false'. This is appropriate if you have a week display (7 days) that you want to always start on the first day of the week."
},
"day-cell-height": {
"type": "Number",
"desc": "Default is '5'. How high in units (unit type defined by 'day-cell-height-unit') an hour should be."
},
"day-cell-height-unit": {
"type": "String",
"desc": "his is how many days the previous / next navigation buttons will jump."
},
"show-half-hours": {
"type": "Boolean",
"desc": "Default is `false`. Show ticks and labels for half hour segments."
}
}
}
================================================
FILE: component/calendar/templates/quasar/CalendarMultiDay.vue
================================================
<template>
<div class="calendar-multi-day-component flex-column fit flex-no-wrap">
<!-- week nav -->
<template v-if="numDays === 1">
<calendar-header-nav
time-period-unit="days"
:time-period-amount="navDays"
:move-time-period-emit="eventRef + ':navMovePeriod'"
:calendar-locale="calendarLocale"
>
{{ formatDate(workingDate, 'EEEE, MMMM d, yyyy') }}
</calendar-header-nav>
</template>
<template v-else>
<calendar-header-nav
time-period-unit="days"
:time-period-amount="navDays"
:move-time-period-emit="eventRef + ':navMovePeriod'"
>
{{ getHeaderLabel() }}
</calendar-header-nav>
</template>
<div v-if="numDays > 1" class="calendar-time-margin">
<calendar-day-labels
:number-of-days="numDays"
:show-dates="true"
:start-date="workingDate"
:force-start-of-week="forceStartOfWeek"
:full-component-ref="fullComponentRef"
:sunday-first-day-of-week="sundayFirstDayOfWeek"
:calendar-locale="calendarLocale"
/>
</div>
<!-- all day events -->
<div class="calendar-time-margin">
<calendar-all-day-events
:number-of-days="numDays"
:start-date="weekDateArray[0]"
:parsed="parsed"
:event-ref="eventRef"
:prevent-event-detail="preventEventDetail"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:allow-editing="allowEditing"
/>
</div>
<!-- content -->
<q-scroll-area
:style="getScrollStyle"
:class="getScrollClass"
>
<calendar-multi-day-content
:week-date-array="weekDateArray"
:working-date="workingDate"
:num-days="numDays"
:nav-days="navDays"
:parsed="parsed"
:event-ref="eventRef"
:prevent-event-detail="preventEventDetail"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:allow-editing="allowEditing"
:day-cell-height="dayCellHeight"
:day-cell-height-unit="dayCellHeightUnit"
:show-half-hours="showHalfHours"
></calendar-multi-day-content>
</q-scroll-area>
<calendar-event-detail
ref="defaultEventDetail"
v-if="!preventEventDetail"
:event-object="eventDetailEventObject"
:event-ref="eventRef"
:calendar-locale="calendarLocale"
:calendar-timezone="calendarTimezone"
:allow-editing="allowEditing"
:render-html="renderHtml"
/>
</div>
</template>
<script>
import {
// mixins
CalendarMixin,
CalendarEventMixin,
CalendarParentComponentMixin,
CalendarMultiDayTemplateMixin,
// components
CalendarDayLabels,
CalendarAllDayEvents,
CalendarMultiDayContent
} from '@daykeep/calendar-core'
import CalendarHeaderNav from './CalendarHeaderNav'
import CalendarEventDetail from './CalendarEventDetail'
import { QScrollArea } from 'quasar'
export default {
name: 'CalendarMultiDay',
mixins: [
CalendarParentComponentMixin,
CalendarMixin,
CalendarEventMixin,
CalendarMultiDayTemplateMixin
],
components: {
CalendarMultiDayContent,
CalendarDayLabels,
CalendarHeaderNav,
CalendarAllDayEvents,
CalendarEventDetail,
QScrollArea
}
}
</script>
<style lang="stylus">
@import '~@daykeep/calendar-core/component/calendar/styles-common/calendar.vars.styl'
.calendar-multi-day-component
.calendar-time-margin
margin-left $dayTimeLabelWidth
.calendar-header
.calendar-header-label
font-size 1.25em
font-weight bold
.calendar-day
margin-top 10px
.calendar-day-column-label
width $dayTimeLabelWidth
.calendar-day-column-content
border-right $borderThin
position relative
.calendar-day-time
padding-right .5em
border-right $borderOuter
.calendar-day-time-content
border-top $borderThin
</style>
================================================
FILE: component/calendar/templates/quasar/index.js
================================================
// common templates
import {
CalendarAgendaEvent,
CalendarAllDayEvents,
CalendarDayColumn,
CalendarDayLabels,
CalendarEvent,
CalendarTimeLabelColumn
} from '@daykeep/calendar-core'
// framework specific templates
import Calendar from './Calendar'
import CalendarAgenda from './CalendarAgenda'
import CalendarEventDetail from './CalendarEventDetail'
import CalendarHeaderNav from './CalendarHeaderNav'
import CalendarMonth from './CalendarMonth'
import CalendarMultiDay from './CalendarMultiDay'
export {
CalendarAgenda,
CalendarAgendaEvent,
CalendarAllDayEvents,
CalendarDayColumn,
CalendarDayLabels,
CalendarEvent,
CalendarTimeLabelColumn,
Calendar,
CalendarEventDetail,
CalendarHeaderNav,
CalendarMonth,
CalendarMultiDay
}
================================================
FILE: component/index.js
================================================
import {
Calendar,
CalendarAgenda,
CalendarMonth,
CalendarMultiDay
} from './calendar/templates/quasar'
export {
Calendar as DaykeepCalendar,
CalendarAgenda as DaykeepCalendarAgenda,
CalendarMonth as DaykeepCalendarMonth,
CalendarMultiDay as DaykeepCalendarMultiDay
}
================================================
FILE: component/quasar.js
================================================
import {
Calendar as DaykeepCalendar,
CalendarAgenda as DaykeepCalendarAgenda,
CalendarMonth as DaykeepCalendarMonth,
CalendarMultiDay as DaykeepCalendarMultiDay
} from './calendar/templates/quasar'
export {
DaykeepCalendar,
DaykeepCalendarAgenda,
DaykeepCalendarMonth,
DaykeepCalendarMultiDay
}
================================================
FILE: demo/App.vue
================================================
<template>
<div id="q-app">
<router-view />
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
</style>
================================================
FILE: demo/boot/.gitkeep
================================================
================================================
FILE: demo/css/app.styl
================================================
// app global css
================================================
FILE: demo/css/quasar.variables.styl
================================================
// Quasar Stylus Variables
// --------------------------------------------------
// To customize the look and feel of this app, you can override
// the Stylus variables found in Quasar's source Stylus files.
// Check documentation for full list of Quasar variables
// It's highly recommended to change the default colors
// to match your app's branding.
// Tip: Use the "Theme Builder" on Quasar's documentation website.
$primary = #027BE3
$secondary = #26A69A
$accent = #9C27B0
$positive = #21BA45
$negative = #C10015
$info = #31CCEC
$warning = #F2C037
================================================
FILE: demo/index.js
================================================
export * from '../component/calendar'
================================================
FILE: demo/index.template.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="<%= htmlWebpackPlugin.options.productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (htmlWebpackPlugin.options.ctx.mode.cordova) { %>, viewport-fit=cover<% } %>">
<title><%= htmlWebpackPlugin.options.productName %></title>
</head>
<body>
<noscript>
This is your fallback content in case JavaScript fails to load.
</noscript>
<!-- DO NOT touch the following <div> -->
<div id="q-app"></div>
<!-- built files will be auto injected here -->
</body>
</html>
================================================
FILE: demo/layouts/LayoutDefault.vue
================================================
<template>
<q-layout view="lHh Lpr lFf">
<q-header>
<q-toolbar>
<q-toolbar-title>
{{ calendarAppName }} {{ calendarVersion }}
</q-toolbar-title>
<div>Quasar v{{ $q.version }}</div>
</q-toolbar>
</q-header>
<q-page-container>
<router-view />
</q-page-container>
</q-layout>
</template>
<script>
import {
openURL,
QLayout,
QHeader,
QPageContainer,
QToolbar,
QToolbarTitle
} from 'quasar'
const pckg = require('../../package.json')
export default {
name: 'LayoutDefault',
components: {
QLayout,
QHeader,
QPageContainer,
QToolbar,
QToolbarTitle
},
data () {
return {
leftDrawerOpen: false
}
},
computed: {
calendarVersion: () => {
return 'v' + pckg.version
},
calendarAppName: () => {
return pckg.productName
}
},
methods: {
openURL
}
}
</script>
<style>
</style>
================================================
FILE: demo/pages/Error404.vue
================================================
<template>
<div class="fixed-center text-center">
<p>
<img
src="~assets/sad.svg"
style="width:30vw;max-width:150px;"
>
</p>
<p class="text-faded">Sorry, nothing here...<strong>(404)</strong></p>
<q-btn
color="secondary"
style="width:200px;"
@click="$router.push('/')"
>Go back</q-btn>
</div>
</template>
<script>
export default {
name: 'Error404'
}
</script>
================================================
FILE: demo/pages/index.vue
================================================
<template>
<q-page padding class="row NOflex NOflex-center">
<div>
<q-option-group
v-model="showCards"
:options="showCardOptions"
type="toggle"
inline
></q-option-group>
</div>
<transition
appear
enter-active-class="animated fadeInLeft"
leave-active-class="animated fadeOutLeft"
>
<q-card
v-if="showCards.includes('fullCalendar')"
inline
class="full-width q-ma-sm"
>
<q-card-section>
<div class="text-h6">
Full calendar component
</div>
<div class="text-subtitle2">
A multifunction component that displays calendar information in a variety of predefined formats.
</div>
</q-card-section>
<q-card-section>
<daykeep-calendar
:event-array="eventArray"
:sunday-first-day-of-week="false"
NOcalendar-locale="fr"
NOcalendar-timezone="America/Los_Angeles"
NOevent-ref="MYCALENDAR"
:allow-editing="true"
agenda-style="block"
:render-html="true"
:NOstart-date="new Date(2019, 1, 4)"
/>
</q-card-section>
</q-card>
</transition>
<transition
appear
enter-active-class="animated fadeInLeft"
leave-active-class="animated fadeOutLeft"
>
<q-card
v-if="showCards.includes('month')"
inline
class="full-width q-ma-sm"
>
<q-card-section>
<div class="text-h6">
Individual month view component
</div>
<div class="text-subtitle2">
Example of a single component displayed. Acts independently of any other calendar component on the same page.
</div>
</q-card-section>
<q-card-section>
<daykeep-calendar-month
:event-array="eventArray"
:sunday-first-day-of-week="false"
calendar-locale="fr"
/>
</q-card-section>
</q-card>
</transition>
<transition
appear
enter-active-class="animated fadeInLeft"
leave-active-class="animated fadeOutLeft"
>
<q-card
v-if="showCards.includes('week')"
inline
class="full-width q-ma-sm"
>
<q-card-section>
<div class="text-h6">
Individual multi-day / week view component
</div>
<div class="text-subtitle2">
The multi-day component. This can be configured as a proper full-week display (shown), a single day or a multi-day. The number of days shown and the number of days moved in the navigation are adjustable.
</div>
</q-card-section>
<q-card-section>
<daykeep-calendar-multi-day
:event-array="eventArray"
scrollHeight="400px"
day-cell-height="7"
day-cell-height-unit="rem"
:show-half-hours="true"
/>
</q-card-section>
</q-card>
</transition>
<transition
appear
enter-active-class="animated fadeInLeft"
leave-active-class="animated fadeOutLeft"
>
<q-card
v-if="showCards.includes('agenda')"
inline
class="full-width q-ma-sm"
>
<q-card-section>
<div class="text-h6">
Agenda view component
</div>
</q-card-section>
<q-card-section>
<daykeep-calendar-agenda
:event-array="eventArray"
agenda-style="block"
:sunday-first-day-of-week="true"
:allow-editing="false"
:num-days="1"
calendar-locale="es"
calendar-timezone="America/Argentina/Buenos_Aires"
/>
</q-card-section>
</q-card>
</transition>
</q-page>
</template>
<script>
import {
QPage,
QCard,
QCardSection,
QOptionGroup
} from 'quasar'
import {
DaykeepCalendar,
DaykeepCalendarMonth,
DaykeepCalendarMultiDay,
DaykeepCalendarAgenda
} from '../../component/quasar'
import {
MoveDates,
sampleEventArray
} from '@daykeep/calendar-core/demo'
export default {
name: 'PageIndex',
components: {
QPage,
QCard,
QCardSection,
QOptionGroup,
DaykeepCalendar,
DaykeepCalendarMonth,
DaykeepCalendarMultiDay,
DaykeepCalendarAgenda
},
mixins: [ MoveDates ],
data () {
return {
eventArray: sampleEventArray, // in page-code-mixins/sample-data.js
showCards: ['fullCalendar'],
showCardOptions: [
{ label: 'Full calendar', value: 'fullCalendar' },
{ label: 'Month', value: 'month' },
{ label: 'Week', value: 'week' },
{ label: 'Agenda', value: 'agenda' }
]
}
},
computed: {},
methods: {},
created () {
this.moveSampleDatesAhead()
}
}
</script>
<style lang="stylus">
</style>
================================================
FILE: demo/pages/page-mixins/move-dates.js
================================================
import {
date
} from 'quasar'
import { sampleDateAdjustments } from './sample-data'
import dashHas from 'lodash.has'
export default {
methods: {
moveSampleDatesAhead: function () {
// function to take dates in our demo eventArray and move them to the near future
for (let counter = 0; counter < this.eventArray.length; counter++) {
let currentItem = this.eventArray[counter]
for (let thisAdjustment of sampleDateAdjustments) {
if (thisAdjustment.ids.indexOf(currentItem.id) >= 0) {
currentItem = this.adjustStartEndDates(currentItem, thisAdjustment.addDays)
}
}
this.eventArray[counter] = currentItem
}
},
adjustStartEndDates: function (eventItem, numDays) {
let daysDiff = 0
if (dashHas(eventItem.start, 'dateTime') && dashHas(eventItem.end, 'dateTime')) {
// console.debug('has dateTime')
daysDiff = date.getDateDiff(
new Date(eventItem.end.dateTime),
new Date(eventItem.start.dateTime),
'days'
)
}
else if (dashHas(eventItem.start, 'date') && dashHas(eventItem.end, 'date')) {
// console.debug('has date', Date(eventItem.start.date), Date(eventItem.end.date))
// console.debug('has date', JSON.stringify(eventItem))
daysDiff = date.getDateDiff(
new Date(eventItem.end.date),
new Date(eventItem.start.date),
'days'
)
}
// start dates
if (dashHas(eventItem.start, 'dateTime')) {
eventItem.start.dateTime = this.getSqlDateFormat(
this.setADateToADay(eventItem.start.dateTime, numDays),
true
)
}
if (dashHas(eventItem.start, 'date')) {
eventItem.start.date = this.getSqlDateFormat(
this.setADateToADay(eventItem.start.date + 'T00:00:00Z', numDays),
false
)
}
// end dates
if (dashHas(eventItem.end, 'dateTime')) {
eventItem.end.dateTime = this.getSqlDateFormat(
this.setADateToADay(eventItem.end.dateTime, numDays + daysDiff),
true
)
}
if (dashHas(eventItem.end, 'date')) {
eventItem.end.date = this.getSqlDateFormat(
this.setADateToADay(eventItem.end.date + 'T00:00:00Z', numDays + daysDiff),
false
)
}
return eventItem
},
setADateToADay: function (dateObject, addDays) {
let now = new Date()
if (typeof dateObject === 'string') {
dateObject = new Date(dateObject)
}
dateObject = date.adjustDate(
dateObject, {
year: now.getFullYear(),
month: now.getMonth() + 1,
date: now.getDate()
}
)
if (addDays !== undefined) {
dateObject = date.addToDate(
dateObject, {
days: addDays
}
)
}
return dateObject
},
getSqlDateFormat: function (dateObject, withTime) {
if (withTime) {
return date.formatDate(dateObject, 'YYYY-MM-DDTHH:mm:ssZ')
}
else {
return date.formatDate(dateObject, 'YYYY-MM-DD')
}
}
}
}
================================================
FILE: demo/pages/page-mixins/sample-data.js
================================================
const sampleEventArray = [
{
id: 1,
summary: 'Test event',
description: 'Some extra info goes here',
location: 'Office of the Divine Randomness, 1232 Main St., Denver, CO',
start: {
dateTime: '2018-02-16T14:00:00',
timeZone: 'Europe/Zurich'
},
end: {
dateTime: '2018-02-16T16:30:00',
timeZone: 'Europe/Zurich'
},
color: 'positive',
attendees: [
{
id: 5,
email: 'somebody@somewhere.com',
displayName: 'John Q. Public',
organizer: false,
self: false,
resource: false
},
{
id: 6,
email: 'somebody@somewhere.com',
displayName: 'John Q. Public',
organizer: false,
self: false,
resource: false
},
{
id: 7,
email: 'somebody@somewhere.com',
displayName: 'John Q. Public',
organizer: false,
self: false,
resource: false
},
{
id: 31,
email: '',
displayName: 'South Conference Room',
organizer: false,
self: false,
resource: true
}
]
},
{
id: 3,
summary: 'Test event 2',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-16T17:30:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-16T18:30:00',
timeZone: 'America/New_York'
}
},
{
id: 4,
summary: 'Test event 3',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-13T10:30:00+0500'
},
end: {
dateTime: '2018-02-13T13:00:00+0500'
}
},
{
id: 5,
summary: 'All day event',
description: 'Some extra info goes here',
start: {
date: '2018-02-13'
},
end: {
date: '2018-02-13'
}
},
{
id: 103,
summary: 'All day x4',
description: 'Some extra info goes here',
start: {
date: '2018-02-15'
},
end: {
date: '2018-02-18'
}
},
{
id: 101,
summary: 'All day x3',
description: 'Some extra info goes here',
start: {
date: '2018-02-14'
},
end: {
date: '2018-02-16'
}
},
{
id: 102,
summary: 'All day x2',
description: 'Some extra info goes here',
start: {
date: '2018-02-14'
},
end: {
date: '2018-02-15'
}
},
{
id: 104,
summary: 'All day x4 #2',
description: 'Some extra info goes here',
start: {
date: '2018-02-14'
},
end: {
date: '2018-02-17'
}
},
{
id: 105,
summary: 'All day x4 #3',
description: 'Some extra info goes here',
start: {
date: '2018-02-14'
},
end: {
date: '2018-02-17'
}
},
{
id: 6,
summary: 'Overlapping event',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-13T11:30:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-13T12:30:00',
timeZone: 'America/New_York'
}
},
{
id: 7,
summary: 'Some event',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-13T06:30:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-13T07:30:00',
timeZone: 'America/New_York'
},
color: 'warning',
textColor: 'dark'
},
{
id: 'test-string-id',
summary: 'Some other event',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-13T16:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-13T17:00:00',
timeZone: 'America/New_York'
}
},
{
id: 201,
summary: 'Overlap test 33 #1',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T13:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T13:50:00',
timeZone: 'America/New_York'
}
},
{
id: 202,
summary: 'Overlap test 33 #2',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T13:30:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T14:20:00',
timeZone: 'America/New_York'
}
},
{
id: 203,
summary: 'Overlap test 33 #3',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T14:50:00',
timeZone: 'America/New_York'
}
},
{
id: 204,
summary: 'Overlap test 33 #4',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T14:50:00',
timeZone: 'America/New_York'
}
},
{
id: 205,
summary: 'Overlap test 33 #5',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T14:50:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T16:30:00',
timeZone: 'America/New_York'
}
},
{
id: 206,
summary: 'Overlap test 33 #6',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T11:30:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T13:00:00',
timeZone: 'America/New_York'
}
},
{
id: 207,
summary: 'Overlap test 33 #7',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-19T15:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-19T16:00:00',
timeZone: 'America/New_York'
}
},
{
id: 301,
summary: 'Overlap 33 same #1',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T14:45:00',
timeZone: 'America/New_York'
}
},
{
id: 302,
summary: 'Overlap 33 same #2',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T15:00:00',
timeZone: 'America/New_York'
}
},
{
id: 303,
summary: 'Overlap 33 same #3',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T16:00:00',
timeZone: 'America/New_York'
}
},
{
id: 304,
summary: 'Overlap 33 almost same #4',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T16:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T18:00:00',
timeZone: 'America/New_York'
}
},
{
id: 305,
summary: 'Overlap 33 almost same #5',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T18:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T19:00:00',
timeZone: 'America/New_York'
}
},
{
id: 306,
summary: 'Overlap 33 almost same #6',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-20T16:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-20T18:00:00',
timeZone: 'America/New_York'
}
},
{
id: 3601,
summary: 'Multi-day test #36-1',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-21T14:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-22T20:00:00',
timeZone: 'America/New_York'
}
},
{
id: 3602,
summary: 'Multi-day test #36-2',
description: 'Some extra info goes here',
start: {
dateTime: '2018-02-21T16:00:00',
timeZone: 'America/New_York'
},
end: {
dateTime: '2018-02-24T11:00:00',
timeZone: 'America/New_York'
}
}
]
const sampleDateAdjustments = [
{
ids: [4, 5, 6, 7, 'test-string-id'],
addDays: 5
},
{
ids: [1, 3],
addDays: 2
},
{
ids: [102, 103],
addDays: 8
},
{
ids: [101],
addDays: 10
},
{
ids: [104],
addDays: 11
},
{
ids: [105],
addDays: 13
},
{
ids: [201, 202, 203, 204, 205, 206, 207],
addDays: 14
},
{
ids: [301, 302, 303, 304, 305, 306],
addDays: 7
},
{
ids: [3601, 3602],
addDays: 0
}
]
export {
sampleEventArray,
sampleDateAdjustments
}
================================================
FILE: demo/router/index.js
================================================
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
Vue.use(VueRouter)
/*
* If not building with SSR mode, you can
* directly export the Router instantiation
*/
export default function (/* { store, ssrContext } */) {
const Router = new VueRouter({
scrollBehavior: () => ({ y: 0 }),
routes,
// Leave these as is and change from quasar.conf.js instead!
// quasar.conf.js -> build -> vueRouterMode
// quasar.conf.js -> build -> publicPath
mode: process.env.VUE_ROUTER_MODE,
base: process.env.VUE_ROUTER_BASE
})
return Router
}
================================================
FILE: demo/router/routes.js
================================================
const routes = [
{
path: '/',
component: () => import('layouts/LayoutDefault.vue'),
children: [
{ path: '', component: () => import('pages/index.vue') }
]
}
]
// Always leave this as last one
if (process.env.MODE !== 'ssr') {
routes.push({
path: '*',
component: () => import('pages/Error404.vue')
})
}
export default routes
================================================
FILE: docs/css/942ad096.eacf1890.css
================================================
.calendar-agenda-event-empty-slot{display:none;background:green}.calendar-agenda-event-dot-style{width:100%;background-color:inherit}.calendar-agenda-event-dot-style,.calendar-agenda-event-dot-style:hover{-webkit-transition:background-color 0.3s ease;transition:background-color 0.3s ease}.calendar-agenda-event-dot-style:hover{background-color:#eee}.calendar-agenda-event-dot-style .calendar-agenda-event-time{margin-left:1em;width:160px}.calendar-agenda-event-dot-style .calendar-agenda-event-dot{border-radius:12px;width:12px;height:12px}.calendar-agenda .calendar-header{margin-bottom:1em}.calendar-agenda .calendar-header .calendar-header-label{font-size:1.25em;font-weight:700}.calendar-agenda .calendar-agenda-month{font-size:1.5em;font-weight:700;background:#00f;color:#fff;padding:1em 0 2em 0;margin-bottom:0.5em}.calendar-agenda .calendar-agenda-week{font-size:1.2em;font-weight:700;color:grey;margin-bottom:0.5em}.calendar-agenda .calendar-agenda-day{margin-bottom:1em}.calendar-agenda .calendar-agenda-day .calendar-agenda-side{width:4em}.calendar-agenda .calendar-agenda-day .calendar-agenda-side .calendar-agenda-side-date{font-size:1.75em;font-weight:700}.calendar-agenda .calendar-agenda-day .calendar-agenda-side .calendar-agenda-side-day{font-size:1.1em}.calendar-agenda .calendar-agenda-day .calendar-agenda-events{width:100%}.calendar-agenda .calendar-agenda-day .calendar-agenda-event{width:100%;padding:0.5em 0.5em;margin-bottom:0.5em;text-overflow:clip;border-radius:0.25em;cursor:pointer}.calendar-agenda .calendar-agenda-day .calendar-agenda-event .calendar-agenda-event-summary{font-weight:700}.calendar-agenda .calendar-agenda-style-dot .calendar-agenda-day{margin-bottom:0.5em;padding-bottom:0.5em;border-bottom:1px solid #bdbdbd}.calendar-agenda .calendar-agenda-style-dot .calendar-agenda-day .calendar-agenda-side{width:6em;max-width:6em}.calendar-agenda .calendar-agenda-style-dot .calendar-agenda-day .calendar-agenda-side .calendar-agenda-side-date{font-size:1.1em;font-weight:400}.calendar-agenda .calendar-agenda-style-dot .calendar-agenda-day .calendar-agenda-side .calendar-agenda-side-day{font-size:0.9em}.calendar-event{height:100%;padding:2px;text-overflow:clip;border-radius:5px;margin:1px 0;font-size:0.8em;cursor:pointer}.calendar-event .calendar-event-summary{font-weight:bolder}.calendar-event .calendar-event-time{font-weight:400}.calendar-event .calendar-event-render-single{white-space:nowrap;overflow:hidden}.calendar-event-month{white-space:nowrap;margin:1px 2px}.calendar-event-multi-allday{margin-right:1em}.calendar-event-has-next-day{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0}.calendar-event-has-previous-day{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.calendar-event-empty-slot{background-color:transparent!important;cursor:inherit;border-radius:0}.calendar-event-continues-next-week{padding-right:5%;-webkit-clip-path:polygon(0% 100%,0% 0%,95% 0%,100% 50%,95% 100%);clip-path:polygon(0% 100%,0% 0%,95% 0%,100% 50%,95% 100%)}.calendar-event-continues-from-last-week{padding-left:5%;-webkit-clip-path:polygon(5% 100%,0% 50%,5% 0,100% 0,100% 100%);clip-path:polygon(5% 100%,0% 50%,5% 0,100% 0,100% 100%)}.calendar-event-continues-next-week.calendar-event-continues-from-last-week{padding-left:5%;padding-right:5%;-webkit-clip-path:polygon(5% 100%,0% 50%,5% 0,95% 0%,100% 50%,95% 100%);clip-path:polygon(5% 100%,0% 50%,5% 0,95% 0%,100% 50%,95% 100%)}.calendar-day{position:relative}.calendar-day .calendar-day-cell-height{height:5rem;max-height:5rem}.calendar-day .calendar-day-column-content{position:relative}.calendar-day .calendar-day-column-current{background-color:$currentDayBackgroundColor}.calendar-day .calendar-day-column-weekend{background-color:$weekendDayBackgroundColor}.calendar-day .calendar-day-time{padding-right:0.5em;border-right:$borderOuter}.calendar-day .calendar-day-time-content{border-top:$borderThin}.calendar-day .calendar-day-time-content-half{border-top:$borderThinner}.calendar-day .calendar-day-event-overlap{margin-left:1px}.calendar-day .calendar-day-event-overlap :after{position:absolute;top:-1px;left:-1px;width:calc(100% + 2px);height:calc(100% + 2px);content:"";border-radius:5px;border:1px solid #fff;-webkit-box-sizing:border-box;box-sizing:border-box}.calendar-day .calendar-day-event-overlap-first{margin-left:0}.calendar-day .current-time-line{position:absolute;border:1px solid red;width:100%}.calendar-day-labels .calendar-day-label{font-size:1.1em;padding-left:4px}.calendar-day-labels .calendar-day-label .calendar-day-label-date{font-size:1.75em}.calendar-day-labels .calendar-day-label-current{font-weight:700}.calendar-month .calendar-time-width{width:4em}.calendar-month .calendar-time-margin{margin-left:4em}.calendar-month .calendar-header .calendar-header-label{font-size:1.25em;font-weight:700}.calendar-month .calendar-content{padding:4px 12px}.calendar-month .calendar-content .calendar-cell{width:$cellWidth;max-width:$cellWidth;padding:0}.calendar-month .calendar-content .calendar-day-labels .calendar-day-label{font-size:1.1em}.calendar-month .calendar-content .calendar-day-labels .calendar-day-label-current{font-weight:700}.calendar-month .calendar-content .calendar-multi-day{border-bottom:1px solid #bdbdbd}.calendar-month .calendar-content .calendar-multi-day :last-child{border-bottom:none}.calendar-month .calendar-content .calendar-day{background-color:none;height:8em;max-height:8em;overflow:hidden;width:14.285%}.calendar-month .calendar-content .calendar-day .calendar-day-number{font-size:0.9em;height:2em;width:2em;vertical-align:middle;padding-top:0.25em;padding-left:0.25em}.calendar-month .calendar-content .calendar-day .calendar-day-number .inner-span{font-size:1.1em}.calendar-month .calendar-content .calendar-day .calendar-day-number-current .inner-span{font-size:1.25em}.calendar-month .calendar-content .calendar-day-current{background-color:#eee}.calendar-month .calendar-content .calendar-day-weekend{background-color:#f5f5f5}.calendar-day-column-label .calendar-day-time{position:relative}.calendar-day-column-label .calendar-day-time .time-label{position:absolute;top:-10px;right:20px}.calendar-day-column-label .cdcl-half-hour{font-size:0.75em;text-align:right}.calendar-day-column-label .cdcl-half-hour .time-label{top:-6px;right:20px}.calendar-multi-day-content .calendar-day{margin-top:10px}.calendar-multi-day-content .calendar-day .calendar-day-column-label{width:4em}.calendar-multi-day-content .calendar-day .calendar-day-column-content{border-right:1px solid #eee;position:relative}.calendar-multi-day-content .calendar-day .calendar-day-time{padding-right:0.5em;border-right:1px solid #bdbdbd}.calendar-multi-day-content .calendar-day .calendar-day-time-content{border-top:1px solid #eee}.calendar-header .calendar-month-year{font-size:1.25em;font-weight:700}.calendar-event-detail{max-width:80vw!important}.calendar-event-detail .ced-icon-div-with-badge{padding-right:5px;padding-top:5px}.calendar-event-detail .ced-close-button-left-spacer{width:16px}.calendar-event-detail .ced-event-title{font-size:1.5em;font-weight:500}.calendar-event-detail .ced-list-title{font-size:1em}.calendar-event-detail .ced-list-subtitle{font-size:0.8em;opacity:0.8}.calendar-event-detail .ced-q-card-main{padding-top:0}.calendar-event-detail .ced-avatar-column{min-width:40px;margin-right:16px}.calendar-event-detail .ced-top .ced-top-title{font-size:1.25em;margin-left:64px}.calendar-event-detail .ced-top .ced-top-title .ced-toolbar-edit-spacer{min-height:1em;height:1em}.calendar-event-detail .ced-top .ced-edit-button-container{position:relative}.calendar-event-detail .ced-top .ced-edit-button-container .ced-edit-button{position:absolute;left:8px;bottom:-32px}.calendar-event-detail .ced-content{font-size:1em}.calendar-event-detail .ced-content .ced-edit-button-content-spacer{min-height:1em;height:1em}.calendar-event-detail .ced-nested-item{padding-left:0}.calendar-event-detail .ced-small-inverted-icon{font-size:20px;padding:2px;border-radius:50%;min-width:24px}.calendar-event-detail .ced-small-inverted-icon .q-item-icon-inverted{background:#e0e0e0}.calendar-multi-day-component .calendar-time-margin{margin-left:4em}.calendar-multi-day-component .calendar-header .calendar-header-label{font-size:1.25em;font-weight:700}.calendar-multi-day-component .calendar-day{margin-top:10px}.calendar-multi-day-component .calendar-day .calendar-day-column-label{width:4em}.calendar-multi-day-component .calendar-day .calendar-day-column-content{border-right:1px solid #eee;position:relative}.calendar-multi-day-component .calendar-day .calendar-day-time{padding-right:0.5em;border-right:1px solid #bdbdbd}.calendar-multi-day-component .calendar-day .calendar-day-time-content{border-top:1px solid #eee}.flex,.flex-column,.flex-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-column.inline,.flex-row.inline,.flex.inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-row.reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-column.reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-reverse-wrap{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.flex-center,.flex-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-justify-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.flex-items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.flex-center,.flex-items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex-items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.flex-items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.flex-content-start{-ms-flex-line-pack:start;align-content:flex-start}.flex-content-end{-ms-flex-line-pack:end;align-content:flex-end}.flex-content-center{-ms-flex-line-pack:center;align-content:center}.flex-content-stretch{-ms-flex-line-pack:stretch;align-content:stretch}.flex-content-between{-ms-flex-line-pack:justify;align-content:space-between}.flex-content-around{-ms-flex-line-pack:distribute;align-content:space-around}.flex-self-start{-ms-flex-item-align:start;align-self:flex-start}.flex-self-end{-ms-flex-item-align:end;align-self:flex-end}.flex-self-center{-ms-flex-item-align:center;align-self:center}.flex-self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.flex-self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.flex-col{-webkit-box-flex:10000;-ms-flex:10000 1 0px;flex:10000 1 0}.flex-col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.fit{width:100%!important;height:100%!important}.is-clickable{cursor:pointer}.calendar-tab-panels .calendar-tab-panel-day,.calendar-tab-panels .calendar-tab-panel-week{height:60vh;max-height:60vh;overflow:hidden}.calendar-tab-panels .q-tab-panel{border:none}
================================================
FILE: docs/css/app.54118af7.css
================================================
@font-face{font-family:Roboto;font-style:normal;font-weight:100;src:url(../fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:300;src:url(../fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(../fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:url(../fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:url(../fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff) format("woff")}@font-face{font-family:Roboto;font-style:normal;font-weight:900;src:url(../fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff) format("woff")}@font-face{font-family:Material Icons;font-style:normal;font-weight:400;src:url(../fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2) format("woff2"),url(../fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff) format("woff")}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-feature-settings:"liga";font-feature-settings:"liga"}@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-0.78125deg) skewY(-0.78125deg);transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-0.1953125deg) skewY(-0.1953125deg);transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-0.78125deg) skewY(-0.78125deg);transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-0.1953125deg) skewY(-0.1953125deg);transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,0.75,1);transform:scale3d(1.25,0.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,0.85,1);transform:scale3d(1.15,0.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,0.75,1);transform:scale3d(1.25,0.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,0.85,1);transform:scale3d(1.15,0.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}to{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}to{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-tra
gitextract_1_gyaq1y/
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── babel.config.js
├── boot/
│ └── qcalendar.js
├── component/
│ ├── calendar/
│ │ ├── fields/
│ │ │ ├── index.js
│ │ │ └── quasar/
│ │ │ ├── DateTimeMixin.js
│ │ │ ├── FieldDate.vue
│ │ │ └── FieldTime.vue
│ │ ├── mixins/
│ │ │ ├── code/
│ │ │ │ ├── CalendarEventMixin.js
│ │ │ │ ├── CalendarMixin.js
│ │ │ │ ├── CalendarParentComponentMixin.js
│ │ │ │ ├── EventPropsMixin.js
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ └── template/
│ │ │ ├── Calendar.js
│ │ │ ├── CalendarAgenda.js
│ │ │ ├── CalendarAgendaEvent.js
│ │ │ ├── CalendarAgendaInner.js
│ │ │ ├── CalendarAllDayEvents.js
│ │ │ ├── CalendarDayColumn.js
│ │ │ ├── CalendarDayLabels.js
│ │ │ ├── CalendarEvent.js
│ │ │ ├── CalendarEventDetail.js
│ │ │ ├── CalendarHeaderNav.js
│ │ │ ├── CalendarMonth.js
│ │ │ ├── CalendarMonthInner.js
│ │ │ ├── CalendarMultiDay.js
│ │ │ ├── CalendarMultiDayContent.js
│ │ │ ├── CalendarTimeLabelColumn.js
│ │ │ └── index.js
│ │ ├── plugin/
│ │ │ └── Calendar.json
│ │ ├── styles-common/
│ │ │ ├── app.styl
│ │ │ └── calendar.vars.styl
│ │ └── templates/
│ │ └── quasar/
│ │ ├── Calendar.json
│ │ ├── Calendar.vue
│ │ ├── CalendarAgenda.json
│ │ ├── CalendarAgenda.vue
│ │ ├── CalendarEventDetail.vue
│ │ ├── CalendarHeaderNav.vue
│ │ ├── CalendarMonth.json
│ │ ├── CalendarMonth.vue
│ │ ├── CalendarMultiDay.json
│ │ ├── CalendarMultiDay.vue
│ │ └── index.js
│ ├── index.js
│ └── quasar.js
├── demo/
│ ├── App.vue
│ ├── boot/
│ │ └── .gitkeep
│ ├── css/
│ │ ├── app.styl
│ │ └── quasar.variables.styl
│ ├── index.js
│ ├── index.template.html
│ ├── layouts/
│ │ └── LayoutDefault.vue
│ ├── pages/
│ │ ├── Error404.vue
│ │ ├── index.vue
│ │ └── page-mixins/
│ │ ├── move-dates.js
│ │ └── sample-data.js
│ └── router/
│ ├── index.js
│ └── routes.js
├── docs/
│ ├── css/
│ │ ├── 942ad096.eacf1890.css
│ │ └── app.54118af7.css
│ ├── index.html
│ └── js/
│ ├── 116eebfe.60111037.js
│ ├── 942ad096.e9c588f2.js
│ ├── app.699aeeff.js
│ ├── f22ee960.70e2404b.js
│ ├── runtime.14845b32.js
│ └── vendor.4fc4c185.js
├── package.json
├── quasar.conf.js
├── quasar.extensions.json
├── readme.md
└── src/
├── index.js
├── install.js
└── uninstall.js
SYMBOL INDEX (1085 symbols across 24 files)
FILE: component/calendar/fields/quasar/DateTimeMixin.js
method mounted (line 62) | mounted () {
method data (line 65) | data () {
FILE: component/calendar/mixins/code/CalendarEventMixin.js
method eventIsContinuedFromPreviousDay (line 251) | eventIsContinuedFromPreviousDay (id, thisDayObject) {
method mounted (line 577) | mounted () {}
FILE: component/calendar/mixins/code/CalendarMixin.js
method dateAdjustWeekday (line 108) | dateAdjustWeekday (thisDateObject, weekdayNum) {
method getWeekNumber (line 267) | getWeekNumber (thisDateObject, useSundayStart) {
method mounted (line 334) | mounted () {}
FILE: component/calendar/mixins/code/CalendarParentComponentMixin.js
method mounted (line 56) | mounted () {}
FILE: component/calendar/mixins/template/Calendar.js
method data (line 22) | data () {
method mounted (line 66) | mounted () {
FILE: component/calendar/mixins/template/CalendarAgenda.js
method data (line 22) | data () {
method mounted (line 99) | mounted () {
FILE: component/calendar/mixins/template/CalendarAgendaEvent.js
method mounted (line 46) | mounted () {
FILE: component/calendar/mixins/template/CalendarAgendaInner.js
method data (line 22) | data () {
method mounted (line 99) | mounted () {
FILE: component/calendar/mixins/template/CalendarAllDayEvents.js
method data (line 27) | data () {
method mounted (line 49) | mounted () {
method updated (line 53) | updated () {
FILE: component/calendar/mixins/template/CalendarDayColumn.js
method data (line 49) | data () {
method mounted (line 196) | mounted () {
method beforeDestroy (line 201) | beforeDestroy () {
FILE: component/calendar/mixins/template/CalendarDayLabels.js
method data (line 33) | data () {
method mounted (line 76) | mounted () {
FILE: component/calendar/mixins/template/CalendarEvent.js
method mounted (line 100) | mounted () {
FILE: component/calendar/mixins/template/CalendarEventDetail.js
method data (line 13) | data () {
method mounted (line 198) | mounted () {
FILE: component/calendar/mixins/template/CalendarHeaderNav.js
method doMoveTimePeriod (line 20) | doMoveTimePeriod (timePeriodUnit, timePeriodAmount) {
method mounted (line 30) | mounted () {
FILE: component/calendar/mixins/template/CalendarMonth.js
method mounted (line 138) | mounted () {
FILE: component/calendar/mixins/template/CalendarMonthInner.js
method data (line 6) | data () {
method mounted (line 134) | mounted () {
FILE: component/calendar/mixins/template/CalendarMultiDay.js
method data (line 43) | data () {
method getScrollTarget (line 148) | getScrollTarget (el) {
method mounted (line 183) | mounted () {
FILE: component/calendar/mixins/template/CalendarMultiDayContent.js
method data (line 55) | data () {
method mounted (line 195) | mounted () {
FILE: docs/js/116eebfe.60111037.js
function o (line 1) | function o(t){return t.closest(".scroll,.scroll-y,.overflow-auto")||window}
function r (line 1) | function r(t){return t===window?window.pageYOffset||window.scrollY||docu...
function a (line 1) | function a(t){return t===window?window.pageXOffset||window.scrollX||docu...
function l (line 1) | function l(t,e,i){var n=r(t);i<=0?n!==e&&d(t,e):requestAnimationFrame(fu...
function c (line 1) | function c(t,e,i){var n=a(t);i<=0?n!==e&&h(t,e):requestAnimationFrame(fu...
function d (line 1) | function d(t,e){t!==window?t.scrollTop=e:window.scrollTo(0,e)}
function h (line 1) | function h(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,0)}
function u (line 1) | function u(t,e,i){i?l(t,e,i):d(t,e)}
function f (line 1) | function f(t,e,i){i?c(t,e,i):h(t,e)}
function p (line 1) | function p(){if(void 0!==n)return n;var t=document.createElement("p"),e=...
function v (line 1) | function v(t){var e=!(arguments.length>1&&void 0!==arguments[1])||argume...
function g (line 1) | function g(t){for(var e=1;e<arguments.length;e++)if(e%2){var i=null!=arg...
function n (line 1) | function n(t,e){var i=t.style;Object.keys(e).forEach(function(t){i[t]=e[...
FILE: docs/js/942ad096.e9c588f2.js
function r (line 1) | function r(t){return t.closest(".scroll,.scroll-y,.overflow-auto")||window}
function a (line 1) | function a(t){return t===window?window.pageYOffset||window.scrollY||docu...
function o (line 1) | function o(t){return t===window?window.pageXOffset||window.scrollX||docu...
function l (line 1) | function l(t,e,n){var i=a(t);n<=0?i!==e&&u(t,e):requestAnimationFrame(fu...
function c (line 1) | function c(t,e,n){var i=o(t);n<=0?i!==e&&d(t,e):requestAnimationFrame(fu...
function u (line 1) | function u(t,e){t!==window?t.scrollTop=e:window.scrollTo(0,e)}
function d (line 1) | function d(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,0)}
function h (line 1) | function h(t,e,n){n?l(t,e,n):u(t,e)}
function f (line 1) | function f(t,e,n){n?c(t,e,n):d(t,e)}
function m (line 1) | function m(){if(void 0!==i)return i;var t=document.createElement("p"),e=...
function p (line 1) | function p(t){var e=!(arguments.length>1&&void 0!==arguments[1])||argume...
function l (line 1) | function l(t){if(t=String(t),!(t.length>100)){var e=/^((?:\d+)?\-?\d?\.?...
function c (line 1) | function c(t){var e=Math.abs(t);return e>=r?Math.round(t/r)+"d":e>=s?Mat...
function u (line 1) | function u(t){var e=Math.abs(t);return e>=r?d(t,e,r,"day"):e>=s?d(t,e,s,...
function d (line 1) | function d(t,e,n,i){var s=e>=1.5*n;return Math.round(t/n)+" "+i+(s?"s":"")}
function s (line 1) | function s(){return!("undefined"===typeof window||!window.process||"rend...
function r (line 1) | function r(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useC...
function a (line 1) | function a(...t){return"object"===typeof console&&console.log&&console.l...
function o (line 1) | function o(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("d...
function l (line 1) | function l(){let t;try{t=e.storage.getItem("debug")}catch(n){}return!t&&...
function c (line 1) | function c(){try{return localStorage}catch(t){}}
function r (line 1) | function r(t){if(s(Object(t))||"[object Arguments]"===Object.prototype.t...
function a (line 1) | function a(t){return i(t)||s(t)||r()}
function s (line 1) | function s(t,e){for(var n=0;n<e.length;n++){var s=e[n];s.enumerable=s.en...
function r (line 1) | function r(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}
function w (line 1) | function w(t,e){return null==t?void 0:t[e]}
method constructor (line 1) | constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}
function k (line 1) | function k(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!...
method constructor (line 1) | constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}
function F (line 1) | function F(t){var e=-1,n=t?t.length:0;this.clear();while(++e<n){var i=t[...
function H (line 1) | function H(){this.__data__=I?I(null):{}}
function z (line 1) | function z(t){return this.has(t)&&delete this.__data__[t]}
function B (line 1) | function B(t){var e=this.__data__;if(I){var n=e[t];return n===i?void 0:n...
function R (line 1) | function R(t){var e=this.__data__;return I?void 0!==e[t]:E.call(e,t)}
function V (line 1) | function V(t,e){var n=this.__data__;return n[t]=I&&void 0===e?i:e,this}
function W (line 1) | function W(t){var e=-1,n=t?t.length:0;this.clear();while(++e<n){var i=t[...
function Z (line 1) | function Z(){this.__data__=[]}
function Y (line 1) | function Y(t){var e=this.__data__,n=it(e,t);if(n<0)return!1;var i=e.leng...
function U (line 1) | function U(t){var e=this.__data__,n=it(e,t);return n<0?void 0:e[n][1]}
function Q (line 1) | function Q(t){return it(this.__data__,t)>-1}
function J (line 1) | function J(t,e){var n=this.__data__,i=it(n,t);return i<0?n.push([t,e]):n...
function G (line 1) | function G(t){var e=-1,n=t?t.length:0;this.clear();while(++e<n){var i=t[...
function K (line 1) | function K(){this.__data__={hash:new F,map:new(L||W),string:new F}}
function X (line 1) | function X(t){return lt(this,t)["delete"](t)}
function tt (line 1) | function tt(t){return lt(this,t).get(t)}
function et (line 1) | function et(t){return lt(this,t).has(t)}
function nt (line 1) | function nt(t,e){return lt(this,t).set(t,e),this}
function it (line 1) | function it(t,e){var n=t.length;while(n--)if(bt(t[n][0],e))return n;retu...
function st (line 1) | function st(t,e){return null!=t&&E.call(t,e)}
function rt (line 1) | function rt(t){if(!St(t)||mt(t))return!1;var e=Dt(t)||k(t)?j:v;return e....
function at (line 1) | function at(t){if("string"==typeof t)return t;if(xt(t))return N?N.call(t...
function ot (line 1) | function ot(t){return wt(t)?t:pt(t)}
function lt (line 1) | function lt(t,e){var n=t.__data__;return ft(e)?n["string"==typeof e?"str...
function ct (line 1) | function ct(t,e){var n=w(t,e);return rt(n)?n:void 0}
function ut (line 1) | function ut(t,e,n){e=ht(e,t)?[e]:ot(e);var i,s=-1,r=e.length;while(++s<r...
function dt (line 1) | function dt(t,e){return e=null==e?r:e,!!e&&("number"==typeof t||y.test(t...
function ht (line 1) | function ht(t,e){if(wt(t))return!1;var n=typeof t;return!("number"!=n&&"...
function ft (line 1) | function ft(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==...
function mt (line 1) | function mt(t){return!!T&&T in t}
function vt (line 1) | function vt(t){if("string"==typeof t||xt(t))return t;var e=t+"";return"0...
function yt (line 1) | function yt(t){if(null!=t){try{return x.call(t)}catch(e){}try{return t+"...
function gt (line 1) | function gt(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw ...
function bt (line 1) | function bt(t,e){return t===e||t!==t&&e!==e}
function _t (line 1) | function _t(t){return Ct(t)&&E.call(t,"callee")&&(!A.call(t,"callee")||M...
function kt (line 1) | function kt(t){return null!=t&&Ot(t.length)&&!Dt(t)}
function Ct (line 1) | function Ct(t){return Tt(t)&&kt(t)}
function Dt (line 1) | function Dt(t){var e=St(t)?M.call(t):"";return e==o||e==l}
function Ot (line 1) | function Ot(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}
function St (line 1) | function St(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}
function Tt (line 1) | function Tt(t){return!!t&&"object"==typeof t}
function xt (line 1) | function xt(t){return"symbol"==typeof t||Tt(t)&&M.call(t)==c}
function Et (line 1) | function Et(t){return null==t?"":at(t)}
function Mt (line 1) | function Mt(t,e){return null!=t&&ut(t,e,st)}
function s (line 1) | function s(t){if(i(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)...
function s (line 1) | function s(t){var e,n;this.promise=new t(function(t,i){if(void 0!==e||vo...
class _ (line 1) | class _ extends Error{}
class w (line 1) | class w extends _{constructor(t){super(`Invalid DateTime: ${t.toMessage(...
method constructor (line 1) | constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}
class k (line 1) | class k extends _{constructor(t){super(`Invalid Interval: ${t.toMessage(...
method constructor (line 1) | constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}
class C (line 1) | class C extends _{constructor(t){super(`Invalid Duration: ${t.toMessage(...
method constructor (line 1) | constructor(t){super(`Invalid Duration: ${t.toMessage()}`)}
class D (line 1) | class D extends _{}
class O (line 1) | class O extends _{constructor(t){super(`Invalid unit ${t}`)}}
method constructor (line 1) | constructor(t){super(`Invalid unit ${t}`)}
class S (line 1) | class S extends _{}
class T (line 1) | class T extends _{constructor(){super("Zone is an abstract class")}}
method constructor (line 1) | constructor(){super("Zone is an abstract class")}
function x (line 1) | function x(t){return"undefined"===typeof t}
function E (line 1) | function E(t){return"number"===typeof t}
function M (line 1) | function M(t){return"string"===typeof t}
function j (line 1) | function j(t){return"[object Date]"===Object.prototype.toString.call(t)}
function q (line 1) | function q(){try{return"undefined"!==typeof Intl&&Intl.DateTimeFormat}ca...
function A (line 1) | function A(){return!x(Intl.DateTimeFormat.prototype.formatToParts)}
function $ (line 1) | function $(){try{return"undefined"!==typeof Intl&&!!Intl.RelativeTimeFor...
function L (line 1) | function L(t){return Array.isArray(t)?t:[t]}
function I (line 1) | function I(t,e,n){if(0!==t.length)return t.reduce((t,i)=>{const s=[e(i),...
function P (line 1) | function P(t,e){return e.reduce((e,n)=>{return e[n]=t[n],e},{})}
function N (line 1) | function N(t,e){return Object.prototype.hasOwnProperty.call(t,e)}
function F (line 1) | function F(t,e,n){return E(t)&&t>=e&&t<=n}
function H (line 1) | function H(t,e){return t-e*Math.floor(t/e)}
function z (line 1) | function z(t,e=2){return t.toString().length<e?("0".repeat(e)+t).slice(-...
function B (line 1) | function B(t){return x(t)||null===t||""===t?void 0:parseInt(t,10)}
function R (line 1) | function R(t){if(!x(t)&&null!==t&&""!==t){const e=1e3*parseFloat("0."+t)...
function V (line 1) | function V(t,e,n=!1){const i=10**e,s=n?Math.trunc:Math.round;return s(t*...
function W (line 1) | function W(t){return t%4===0&&(t%100!==0||t%400===0)}
function Z (line 1) | function Z(t){return W(t)?366:365}
function Y (line 1) | function Y(t,e){const n=H(e-1,12)+1,i=t+(e-n)/12;return 2===n?W(i)?29:28...
function U (line 1) | function U(t){let e=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.se...
function Q (line 1) | function Q(t){const e=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/...
function J (line 1) | function J(t){return t>99?t:t>60?1900+t:2e3+t}
function G (line 1) | function G(t,e,n,i=null){const s=new Date(t),r={hour12:!1,year:"numeric"...
function K (line 1) | function K(t,e){const n=parseInt(t,10)||0,i=parseInt(e,10)||0,s=n<0?-i:i...
function X (line 1) | function X(t){const e=Number(t);if("boolean"===typeof t||""===t||Number....
function tt (line 1) | function tt(t,e,n){const i={};for(const s in t)if(N(t,s)){if(n.indexOf(s...
function et (line 1) | function et(t,e){const n=Math.trunc(t/60),i=Math.abs(t%60),s=n>=0?"+":"-...
function nt (line 1) | function nt(t){return P(t,["hour","minute","second","millisecond"])}
function Et (line 1) | function Et(t){return JSON.stringify(t,Object.keys(t).sort())}
function At (line 1) | function At(t){switch(t){case"narrow":return qt;case"short":return jt;ca...
function Pt (line 1) | function Pt(t){switch(t){case"narrow":return It;case"short":return Lt;ca...
function Bt (line 1) | function Bt(t){switch(t){case"narrow":return zt;case"short":return Ht;ca...
function Rt (line 1) | function Rt(t){return Nt[t.hour<12?0:1]}
function Vt (line 1) | function Vt(t,e){return Pt(e)[t.weekday-1]}
function Wt (line 1) | function Wt(t,e){return At(e)[t.month-1]}
function Zt (line 1) | function Zt(t,e){return Bt(e)[t.year<0?0:1]}
function Yt (line 1) | function Yt(t,e,n="always",i=!1){const s={years:["year","yr."],quarters:...
function Ut (line 1) | function Ut(t){const e=P(t,["weekday","era","year","month","day","hour",...
class Qt (line 1) | class Qt{get type(){throw new T}get name(){throw new T}get universal(){t...
method type (line 1) | get type(){throw new T}
method name (line 1) | get name(){throw new T}
method universal (line 1) | get universal(){throw new T}
method offsetName (line 1) | offsetName(t,e){throw new T}
method formatOffset (line 1) | formatOffset(t,e){throw new T}
method offset (line 1) | offset(t){throw new T}
method equals (line 1) | equals(t){throw new T}
method isValid (line 1) | get isValid(){throw new T}
class Gt (line 1) | class Gt extends Qt{static get instance(){return null===Jt&&(Jt=new Gt),...
method instance (line 1) | static get instance(){return null===Jt&&(Jt=new Gt),Jt}
method type (line 1) | get type(){return"local"}
method name (line 1) | get name(){return q()?(new Intl.DateTimeFormat).resolvedOptions().time...
method universal (line 1) | get universal(){return!1}
method offsetName (line 1) | offsetName(t,{format:e,locale:n}){return G(t,e,n)}
method formatOffset (line 1) | formatOffset(t,e){return et(this.offset(t),e)}
method offset (line 1) | offset(t){return-new Date(t).getTimezoneOffset()}
method equals (line 1) | equals(t){return"local"===t.type}
method isValid (line 1) | get isValid(){return!0}
function te (line 1) | function te(t){return Xt[t]||(Xt[t]=new Intl.DateTimeFormat("en-US",{hou...
function ne (line 1) | function ne(t,e){const n=t.format(e).replace(/\u200E/g,""),i=/(\d+)\/(\d...
function ie (line 1) | function ie(t,e){const n=t.formatToParts(e),i=[];for(let s=0;s<n.length;...
class re (line 1) | class re extends Qt{static create(t){return se[t]||(se[t]=new re(t)),se[...
method create (line 1) | static create(t){return se[t]||(se[t]=new re(t)),se[t]}
method resetCache (line 1) | static resetCache(){se={},Xt={}}
method isValidSpecifier (line 1) | static isValidSpecifier(t){return!(!t||!t.match(Kt))}
method isValidZone (line 1) | static isValidZone(t){try{return new Intl.DateTimeFormat("en-US",{time...
method parseGMTOffset (line 1) | static parseGMTOffset(t){if(t){const e=t.match(/^Etc\/GMT([+-]\d{1,2})...
method constructor (line 1) | constructor(t){super(),this.zoneName=t,this.valid=re.isValidZone(t)}
method type (line 1) | get type(){return"iana"}
method name (line 1) | get name(){return this.zoneName}
method universal (line 1) | get universal(){return!1}
method offsetName (line 1) | offsetName(t,{format:e,locale:n}){return G(t,e,n,this.name)}
method formatOffset (line 1) | formatOffset(t,e){return et(this.offset(t),e)}
method offset (line 1) | offset(t){const e=new Date(t),n=te(this.name),[i,s,r,a,o,l]=n.formatTo...
method equals (line 1) | equals(t){return"iana"===t.type&&t.name===this.name}
method isValid (line 1) | get isValid(){return this.valid}
class oe (line 1) | class oe extends Qt{static get utcInstance(){return null===ae&&(ae=new o...
method utcInstance (line 1) | static get utcInstance(){return null===ae&&(ae=new oe(0)),ae}
method instance (line 1) | static instance(t){return 0===t?oe.utcInstance:new oe(t)}
method parseSpecifier (line 1) | static parseSpecifier(t){if(t){const e=t.match(/^utc(?:([+-]\d{1,2})(?...
method constructor (line 1) | constructor(t){super(),this.fixed=t}
method type (line 1) | get type(){return"fixed"}
method name (line 1) | get name(){return 0===this.fixed?"UTC":`UTC${et(this.fixed,"narrow")}`}
method offsetName (line 1) | offsetName(){return this.name}
method formatOffset (line 1) | formatOffset(t,e){return et(this.fixed,e)}
method universal (line 1) | get universal(){return!0}
method offset (line 1) | offset(){return this.fixed}
method equals (line 1) | equals(t){return"fixed"===t.type&&t.fixed===this.fixed}
method isValid (line 1) | get isValid(){return!0}
class le (line 1) | class le extends Qt{constructor(t){super(),this.zoneName=t}get type(){re...
method constructor (line 1) | constructor(t){super(),this.zoneName=t}
method type (line 1) | get type(){return"invalid"}
method name (line 1) | get name(){return this.zoneName}
method universal (line 1) | get universal(){return!1}
method offsetName (line 1) | offsetName(){return null}
method formatOffset (line 1) | formatOffset(){return""}
method offset (line 1) | offset(){return NaN}
method equals (line 1) | equals(){return!1}
method isValid (line 1) | get isValid(){return!1}
function ce (line 1) | function ce(t,e){let n;if(x(t)||null===t)return e;if(t instanceof Qt)ret...
class ve (line 1) | class ve{static get now(){return ue}static set now(t){ue=t}static get de...
method now (line 1) | static get now(){return ue}
method now (line 1) | static set now(t){ue=t}
method defaultZoneName (line 1) | static get defaultZoneName(){return ve.defaultZone.name}
method defaultZoneName (line 1) | static set defaultZoneName(t){de=t?ce(t):null}
method defaultZone (line 1) | static get defaultZone(){return de||Gt.instance}
method defaultLocale (line 1) | static get defaultLocale(){return he}
method defaultLocale (line 1) | static set defaultLocale(t){he=t}
method defaultNumberingSystem (line 1) | static get defaultNumberingSystem(){return fe}
method defaultNumberingSystem (line 1) | static set defaultNumberingSystem(t){fe=t}
method defaultOutputCalendar (line 1) | static get defaultOutputCalendar(){return me}
method defaultOutputCalendar (line 1) | static set defaultOutputCalendar(t){me=t}
method throwOnInvalid (line 1) | static get throwOnInvalid(){return pe}
method throwOnInvalid (line 1) | static set throwOnInvalid(t){pe=t}
method resetCaches (line 1) | static resetCaches(){Pe.resetCache(),re.resetCache()}
function ye (line 1) | function ye(t,e){let n="";for(const i of t)i.literal?n+=i.val:n+=e(i.val...
class be (line 1) | class be{static create(t,e={}){return new be(t,e)}static parseFormat(t){...
method create (line 1) | static create(t,e={}){return new be(t,e)}
method parseFormat (line 1) | static parseFormat(t){let e=null,n="",i=!1;const s=[];for(let r=0;r<t....
method constructor (line 1) | constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}
method formatWithSystemDefault (line 1) | formatWithSystemDefault(t,e){null===this.systemLoc&&(this.systemLoc=th...
method formatDateTime (line 1) | formatDateTime(t,e={}){const n=this.loc.dtFormatter(t,Object.assign({}...
method formatDateTimeParts (line 1) | formatDateTimeParts(t,e={}){const n=this.loc.dtFormatter(t,Object.assi...
method resolvedOptions (line 1) | resolvedOptions(t,e={}){const n=this.loc.dtFormatter(t,Object.assign({...
method num (line 1) | num(t,e=0){if(this.opts.forceSimple)return z(t,e);const n=Object.assig...
method formatDateTimeFromString (line 1) | formatDateTimeFromString(t,e){const n="en"===this.loc.listingMode(),i=...
method formatDurationFromString (line 1) | formatDurationFromString(t,e){const n=t=>{switch(t[0]){case"S":return"...
function we (line 1) | function we(t,e={}){const n=JSON.stringify([t,e]);let i=_e[n];return i||...
function Ce (line 1) | function Ce(t,e={}){const n=JSON.stringify([t,e]);let i=ke[n];return i||...
function Oe (line 1) | function Oe(t,e={}){const n=JSON.stringify([t,e]);let i=De[n];return i||...
function Te (line 1) | function Te(){if(Se)return Se;if(q()){const t=(new Intl.DateTimeFormat)....
function xe (line 1) | function xe(t){const e=t.indexOf("-u-");if(-1===e)return[t];{let i;const...
function Ee (line 1) | function Ee(t,e,n){return q()?n||e?(t+="-u",n&&(t+=`-ca-${n}`),e&&(t+=`-...
function Me (line 1) | function Me(t){const e=[];for(let n=1;n<=12;n++){const i=is.utc(2016,n,1...
function je (line 1) | function je(t){const e=[];for(let n=1;n<=7;n++){const i=is.utc(2016,11,1...
function qe (line 1) | function qe(t,e,n,i,s){const r=t.listingMode(n);return"error"===r?null:"...
function Ae (line 1) | function Ae(t){return(!t.numberingSystem||"latn"===t.numberingSystem)&&(...
class $e (line 1) | class $e{constructor(t,e,n){if(this.padTo=n.padTo||0,this.floor=n.floor|...
method constructor (line 1) | constructor(t,e,n){if(this.padTo=n.padTo||0,this.floor=n.floor||!1,!e&...
method format (line 1) | format(t){if(this.inf){const e=this.floor?Math.floor(t):t;return this....
class Le (line 1) | class Le{constructor(t,e,n){let i;if(this.opts=n,this.hasIntl=q(),t.zone...
method constructor (line 1) | constructor(t,e,n){let i;if(this.opts=n,this.hasIntl=q(),t.zone.univer...
method format (line 1) | format(){if(this.hasIntl)return this.dtf.format(this.dt.toJSDate());{c...
method formatToParts (line 1) | formatToParts(){return this.hasIntl&&A()?this.dtf.formatToParts(this.d...
method resolvedOptions (line 1) | resolvedOptions(){return this.hasIntl?this.dtf.resolvedOptions():{loca...
class Ie (line 1) | class Ie{constructor(t,e,n){this.opts=Object.assign({style:"long"},n),!e...
method constructor (line 1) | constructor(t,e,n){this.opts=Object.assign({style:"long"},n),!e&&$()&&...
method format (line 1) | format(t,e){return this.rtf?this.rtf.format(t,e):Yt(e,t,this.opts.nume...
method formatToParts (line 1) | formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}
class Pe (line 1) | class Pe{static fromOpts(t){return Pe.create(t.locale,t.numberingSystem,...
method fromOpts (line 1) | static fromOpts(t){return Pe.create(t.locale,t.numberingSystem,t.outpu...
method create (line 1) | static create(t,e,n,i=!1){const s=t||ve.defaultLocale,r=s||(i?"en-US":...
method resetCache (line 1) | static resetCache(){Se=null,_e={},ke={},De={}}
method fromObject (line 1) | static fromObject({locale:t,numberingSystem:e,outputCalendar:n}={}){re...
method constructor (line 1) | constructor(t,e,n,i){const[s,r,a]=xe(t);this.locale=s,this.numberingSy...
method fastNumbers (line 1) | get fastNumbers(){return null==this.fastNumbersCached&&(this.fastNumbe...
method listingMode (line 1) | listingMode(t=!0){const e=q(),n=e&&A(),i=this.isEnglish(),s=(null===th...
method clone (line 1) | clone(t){return t&&0!==Object.getOwnPropertyNames(t).length?Pe.create(...
method redefaultToEN (line 1) | redefaultToEN(t={}){return this.clone(Object.assign({},t,{defaultToEN:...
method redefaultToSystem (line 1) | redefaultToSystem(t={}){return this.clone(Object.assign({},t,{defaultT...
method months (line 1) | months(t,e=!1,n=!0){return qe(this,t,n,At,()=>{const n=e?{month:t,day:...
method weekdays (line 1) | weekdays(t,e=!1,n=!0){return qe(this,t,n,Pt,()=>{const n=e?{weekday:t,...
method meridiems (line 1) | meridiems(t=!0){return qe(this,void 0,t,()=>Nt,()=>{if(!this.meridiemC...
method eras (line 1) | eras(t,e=!0){return qe(this,t,e,Bt,()=>{const e={era:t};return this.er...
method extract (line 1) | extract(t,e,n){const i=this.dtFormatter(t,e),s=i.formatToParts(),r=s.f...
method numberFormatter (line 1) | numberFormatter(t={}){return new $e(this.intl,t.forceSimple||this.fast...
method dtFormatter (line 1) | dtFormatter(t,e={}){return new Le(t,this.intl,e)}
method relFormatter (line 1) | relFormatter(t={}){return new Ie(this.intl,this.isEnglish(),t)}
method isEnglish (line 1) | isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCas...
method equals (line 1) | equals(t){return this.locale===t.locale&&this.numberingSystem===t.numb...
function Ne (line 1) | function Ne(...t){const e=t.reduce((t,e)=>t+e.source,"");return RegExp(`...
function Fe (line 1) | function Fe(...t){return e=>t.reduce(([t,n,i],s)=>{const[r,a,o]=s(e,i);r...
function He (line 1) | function He(t,...e){if(null==t)return[null,null];for(const[n,i]of e){con...
function ze (line 1) | function ze(...t){return(e,n)=>{const i={};let s;for(s=0;s<t.length;s++)...
function tn (line 1) | function tn(t,e,n){const i=t[e];return x(i)?n:B(i)}
function en (line 1) | function en(t,e){const n={year:tn(t,e),month:tn(t,e+1,1),day:tn(t,e+2,1)...
function nn (line 1) | function nn(t,e){const n={hour:tn(t,e,0),minute:tn(t,e+1,0),second:tn(t,...
function sn (line 1) | function sn(t,e){const n=!t[e]&&!t[e+1],i=K(t[e+1],t[e+2]),s=n?null:oe.i...
function rn (line 1) | function rn(t,e){const n=t[e]?re.create(t[e]):null;return[{},n,e+1]}
function on (line 1) | function on(t){const[,e,n,i,s,r,a,o,l]=t;return[{years:B(e),months:B(n),...
function cn (line 1) | function cn(t,e,n,i,s,r,a){const o={year:2===e.length?J(B(e)):B(e),month...
function dn (line 1) | function dn(t){const[,e,n,i,s,r,a,o,l,c,u,d]=t,h=cn(e,s,i,n,r,a,o);let f...
function hn (line 1) | function hn(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+...
function vn (line 1) | function vn(t){const[,e,n,i,s,r,a,o]=t,l=cn(e,s,i,n,r,a,o);return[l,oe.u...
function yn (line 1) | function yn(t){const[,e,n,i,s,r,a,o]=t,l=cn(e,o,n,i,s,r,a);return[l,oe.u...
function Sn (line 1) | function Sn(t){return He(t,[gn,kn],[bn,Cn],[_n,Dn],[wn,On])}
function Tn (line 1) | function Tn(t){return He(hn(t),[un,dn])}
function xn (line 1) | function xn(t){return He(t,[fn,vn],[mn,vn],[pn,yn])}
function En (line 1) | function En(t){return He(t,[an,on])}
function $n (line 1) | function $n(t){return He(t,[Mn,qn],[jn,An])}
class Ln (line 1) | class Ln{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){r...
method constructor (line 1) | constructor(t,e){this.reason=t,this.explanation=e}
method toMessage (line 1) | toMessage(){return this.explanation?`${this.reason}: ${this.explanatio...
function Vn (line 1) | function Vn(t,e,n=!1){const i={values:n?e.values:Object.assign({},t.valu...
function Wn (line 1) | function Wn(t){return t<0?Math.floor(t):Math.ceil(t)}
function Zn (line 1) | function Zn(t,e,n,i,s){const r=t[s][n],a=e[n]/r,o=Math.sign(a)===Math.si...
function Yn (line 1) | function Yn(t,e){Rn.reduce((n,i)=>{return x(e[i])?n:(n&&Zn(t,e,n,e,i),i)...
class Un (line 1) | class Un{constructor(t){const e="longterm"===t.conversionAccuracy||!1;th...
method constructor (line 1) | constructor(t){const e="longterm"===t.conversionAccuracy||!1;this.valu...
method fromMillis (line 1) | static fromMillis(t,e){return Un.fromObject(Object.assign({millisecond...
method fromObject (line 1) | static fromObject(t){if(null==t||"object"!==typeof t)throw new S(`Dura...
method fromISO (line 1) | static fromISO(t,e){const[n]=En(t);if(n){const t=Object.assign(n,e);re...
method invalid (line 1) | static invalid(t,e=null){if(!t)throw new S("need to specify a reason t...
method normalizeUnit (line 1) | static normalizeUnit(t){const e={year:"years",years:"years",quarter:"q...
method isDuration (line 1) | static isDuration(t){return t&&t.isLuxonDuration||!1}
method locale (line 1) | get locale(){return this.isValid?this.loc.locale:null}
method numberingSystem (line 1) | get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}
method toFormat (line 1) | toFormat(t,e={}){const n=Object.assign({},e,{floor:!1!==e.round&&!1!==...
method toObject (line 1) | toObject(t={}){if(!this.isValid)return{};const e=Object.assign({},this...
method toISO (line 1) | toISO(){if(!this.isValid)return null;let t="P";return 0!==this.years&&...
method toJSON (line 1) | toJSON(){return this.toISO()}
method toString (line 1) | toString(){return this.toISO()}
method valueOf (line 1) | valueOf(){return this.as("milliseconds")}
method plus (line 1) | plus(t){if(!this.isValid)return this;const e=Qn(t),n={};for(const i of...
method minus (line 1) | minus(t){if(!this.isValid)return this;const e=Qn(t);return this.plus(e...
method get (line 1) | get(t){return this[Un.normalizeUnit(t)]}
method set (line 1) | set(t){if(!this.isValid)return this;const e=Object.assign(this.values,...
method reconfigure (line 1) | reconfigure({locale:t,numberingSystem:e,conversionAccuracy:n}={}){cons...
method as (line 1) | as(t){return this.isValid?this.shiftTo(t).get(t):NaN}
method normalize (line 1) | normalize(){if(!this.isValid)return this;const t=this.toObject();retur...
method shiftTo (line 1) | shiftTo(...t){if(!this.isValid)return this;if(0===t.length)return this...
method negate (line 1) | negate(){if(!this.isValid)return this;const t={};for(const e of Object...
method years (line 1) | get years(){return this.isValid?this.values.years||0:NaN}
method quarters (line 1) | get quarters(){return this.isValid?this.values.quarters||0:NaN}
method months (line 1) | get months(){return this.isValid?this.values.months||0:NaN}
method weeks (line 1) | get weeks(){return this.isValid?this.values.weeks||0:NaN}
method days (line 1) | get days(){return this.isValid?this.values.days||0:NaN}
method hours (line 1) | get hours(){return this.isValid?this.values.hours||0:NaN}
method minutes (line 1) | get minutes(){return this.isValid?this.values.minutes||0:NaN}
method seconds (line 1) | get seconds(){return this.isValid?this.values.seconds||0:NaN}
method milliseconds (line 1) | get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}
method isValid (line 1) | get isValid(){return null===this.invalid}
method invalidReason (line 1) | get invalidReason(){return this.invalid?this.invalid.reason:null}
method invalidExplanation (line 1) | get invalidExplanation(){return this.invalid?this.invalid.explanation:...
method equals (line 1) | equals(t){if(!this.isValid||!t.isValid)return!1;if(!this.loc.equals(t....
function Qn (line 1) | function Qn(t){if(E(t))return Un.fromMillis(t);if(Un.isDuration(t))retur...
function Gn (line 1) | function Gn(t,e){return t&&t.isValid?e&&e.isValid?e<t?Kn.invalid("end be...
class Kn (line 1) | class Kn{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.inval...
method constructor (line 1) | constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||nul...
method invalid (line 1) | static invalid(t,e=null){if(!t)throw new S("need to specify a reason t...
method fromDateTimes (line 1) | static fromDateTimes(t,e){const n=ss(t),i=ss(e),s=Gn(n,i);return null=...
method after (line 1) | static after(t,e){const n=Qn(e),i=ss(t);return Kn.fromDateTimes(i,i.pl...
method before (line 1) | static before(t,e){const n=Qn(e),i=ss(t);return Kn.fromDateTimes(i.min...
method fromISO (line 1) | static fromISO(t,e){const[n,i]=(t||"").split("/",2);if(n&&i){const t=i...
method isInterval (line 1) | static isInterval(t){return t&&t.isLuxonInterval||!1}
method start (line 1) | get start(){return this.isValid?this.s:null}
method end (line 1) | get end(){return this.isValid?this.e:null}
method isValid (line 1) | get isValid(){return null===this.invalidReason}
method invalidReason (line 1) | get invalidReason(){return this.invalid?this.invalid.reason:null}
method invalidExplanation (line 1) | get invalidExplanation(){return this.invalid?this.invalid.explanation:...
method length (line 1) | length(t="milliseconds"){return this.isValid?this.toDuration(t).get(t)...
method count (line 1) | count(t="milliseconds"){if(!this.isValid)return NaN;const e=this.start...
method hasSame (line 1) | hasSame(t){return!!this.isValid&&this.e.minus(1).hasSame(this.s,t)}
method isEmpty (line 1) | isEmpty(){return this.s.valueOf()===this.e.valueOf()}
method isAfter (line 1) | isAfter(t){return!!this.isValid&&this.s>t}
method isBefore (line 1) | isBefore(t){return!!this.isValid&&this.e<=t}
method contains (line 1) | contains(t){return!!this.isValid&&(this.s<=t&&this.e>t)}
method set (line 1) | set({start:t,end:e}={}){return this.isValid?Kn.fromDateTimes(t||this.s...
method splitAt (line 1) | splitAt(...t){if(!this.isValid)return[];const e=t.map(ss).sort(),n=[];...
method splitBy (line 1) | splitBy(t){const e=Qn(t);if(!this.isValid||!e.isValid||0===e.as("milli...
method divideEqually (line 1) | divideEqually(t){return this.isValid?this.splitBy(this.length()/t).sli...
method overlaps (line 1) | overlaps(t){return this.e>t.s&&this.s<t.e}
method abutsStart (line 1) | abutsStart(t){return!!this.isValid&&+this.e===+t.s}
method abutsEnd (line 1) | abutsEnd(t){return!!this.isValid&&+t.e===+this.s}
method engulfs (line 1) | engulfs(t){return!!this.isValid&&(this.s<=t.s&&this.e>=t.e)}
method equals (line 1) | equals(t){return!(!this.isValid||!t.isValid)&&(this.s.equals(t.s)&&thi...
method intersection (line 1) | intersection(t){if(!this.isValid)return this;const e=this.s>t.s?this.s...
method union (line 1) | union(t){if(!this.isValid)return this;const e=this.s<t.s?this.s:t.s,n=...
method merge (line 1) | static merge(t){const[e,n]=t.sort((t,e)=>t.s-e.s).reduce(([t,e],n)=>{r...
method xor (line 1) | static xor(t){let e=null,n=0;const i=[],s=t.map(t=>[{time:t.s,type:"s"...
method difference (line 1) | difference(...t){return Kn.xor([this].concat(t)).map(t=>this.intersect...
method toString (line 1) | toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()}...
method toISO (line 1) | toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:Jn}
method toFormat (line 1) | toFormat(t,{separator:e=" – "}={}){return this.isValid?`${this.s.toFor...
method toDuration (line 1) | toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):Un.invalid...
method mapEndpoints (line 1) | mapEndpoints(t){return Kn.fromDateTimes(t(this.s),t(this.e))}
class Xn (line 1) | class Xn{static hasDST(t=ve.defaultZone){const e=is.local().setZone(t).s...
method hasDST (line 1) | static hasDST(t=ve.defaultZone){const e=is.local().setZone(t).set({mon...
method isValidIANAZone (line 1) | static isValidIANAZone(t){return re.isValidSpecifier(t)&&re.isValidZon...
method normalizeZone (line 1) | static normalizeZone(t){return ce(t,ve.defaultZone)}
method months (line 1) | static months(t="long",{locale:e=null,numberingSystem:n=null,outputCal...
method monthsFormat (line 1) | static monthsFormat(t="long",{locale:e=null,numberingSystem:n=null,out...
method weekdays (line 1) | static weekdays(t="long",{locale:e=null,numberingSystem:n=null}={}){re...
method weekdaysFormat (line 1) | static weekdaysFormat(t="long",{locale:e=null,numberingSystem:n=null}=...
method meridiems (line 1) | static meridiems({locale:t=null}={}){return Pe.create(t).meridiems()}
method eras (line 1) | static eras(t="short",{locale:e=null}={}){return Pe.create(e,null,"gre...
method features (line 1) | static features(){let t=!1,e=!1,n=!1,i=!1;if(q()){t=!0,e=A(),i=$();try...
function ti (line 1) | function ti(t,e){const n=t=>t.toUTC(0,{keepLocalTime:!0}).startOf("day")...
function ei (line 1) | function ei(t,e,n){const i=[["years",(t,e)=>e.year-t.year],["months",(t,...
function ai (line 1) | function ai(t){let e=parseInt(t,10);if(isNaN(e)){e="";for(let n=0;n<t.le...
function oi (line 1) | function oi({numberingSystem:t},e=""){return new RegExp(`${ii[t||"latn"]...
function ci (line 1) | function ci(t,e=(t=>t)){return{regex:t,deser:([t])=>e(ai(t))}}
function ui (line 1) | function ui(t){return t.replace(/\./,"\\.?")}
function di (line 1) | function di(t){return t.replace(/\./,"").toLowerCase()}
function hi (line 1) | function hi(t,e){return null===t?null:{regex:RegExp(t.map(ui).join("|"))...
function fi (line 1) | function fi(t,e){return{regex:t,deser:([,t,e])=>K(t,e),groups:e}}
function mi (line 1) | function mi(t){return{regex:t,deser:([t])=>t}}
function pi (line 1) | function pi(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}
function vi (line 1) | function vi(t,e){const n=oi(e),i=oi(e,"{2}"),s=oi(e,"{3}"),r=oi(e,"{4}")...
function yi (line 1) | function yi(t){const e=t.map(t=>t.regex).reduce((t,e)=>`${t}(${e.source}...
function gi (line 1) | function gi(t,e,n){const i=t.match(e);if(i){const t={};let e=1;for(const...
function bi (line 1) | function bi(t){const e=t=>{switch(t){case"S":return"millisecond";case"s"...
function _i (line 1) | function _i(t,e,n){const i=be.parseFormat(n),s=i.map(e=>vi(e,t)),r=s.fin...
function wi (line 1) | function wi(t,e,n){const{result:i,zone:s,invalidReason:r}=_i(t,e,n);retu...
function Di (line 1) | function Di(t,e){return new Ln("unit out of range",`you specified ${e} (...
function Oi (line 1) | function Oi(t,e,n){const i=new Date(Date.UTC(t,e-1,n)).getUTCDay();retur...
function Si (line 1) | function Si(t,e,n){return n+(W(t)?Ci:ki)[e-1]}
function Ti (line 1) | function Ti(t,e){const n=W(t)?Ci:ki,i=n.findIndex(t=>t<e),s=e-n[i];retur...
function xi (line 1) | function xi(t){const{year:e,month:n,day:i}=t,s=Si(e,n,i),r=Oi(e,n,i);let...
function Ei (line 1) | function Ei(t){const{weekYear:e,weekNumber:n,weekday:i}=t,s=Oi(e,1,4),r=...
function Mi (line 1) | function Mi(t){const{year:e,month:n,day:i}=t,s=Si(e,n,i);return Object.a...
function ji (line 1) | function ji(t){const{year:e,ordinal:n}=t,{month:i,day:s}=Ti(e,n);return ...
function qi (line 1) | function qi(t){const e=E(t.weekYear),n=F(t.weekNumber,1,Q(t.weekYear)),i...
function Ai (line 1) | function Ai(t){const e=E(t.year),n=F(t.ordinal,1,Z(t.year));return e?!n&...
function $i (line 1) | function $i(t){const e=E(t.year),n=F(t.month,1,12),i=F(t.day,1,Y(t.year,...
function Li (line 1) | function Li(t){const{hour:e,minute:n,second:i,millisecond:s}=t,r=F(e,0,2...
function Ni (line 1) | function Ni(t){return new Ln("unsupported zone",`the zone "${t.name}" is...
function Fi (line 1) | function Fi(t){return null===t.weekData&&(t.weekData=xi(t.c)),t.weekData}
function Hi (line 1) | function Hi(t,e){const n={ts:t.ts,zone:t.zone,c:t.c,o:t.o,loc:t.loc,inva...
function zi (line 1) | function zi(t,e,n){let i=t-60*e*1e3;const s=n.offset(i);if(e===s)return[...
function Bi (line 1) | function Bi(t,e){t+=60*e*1e3;const n=new Date(t);return{year:n.getUTCFul...
function Ri (line 1) | function Ri(t,e,n){return zi(U(t),e,n)}
function Vi (line 1) | function Vi(t,e){const n=t.o,i=t.c.year+e.years,s=t.c.month+e.months+3*e...
function Wi (line 1) | function Wi(t,e,n,i,s){const{setZone:r,zone:a}=n;if(t&&0!==Object.keys(t...
function Zi (line 1) | function Zi(t,e){return t.isValid?be.create(Pe.create("en-US"),{allowZ:!...
function Yi (line 1) | function Yi(t,{suppressSeconds:e=!1,suppressMilliseconds:n=!1,includeOff...
function ts (line 1) | function ts(t){const e={year:"year",years:"year",month:"month",months:"m...
function es (line 1) | function es(t,e){for(const o of Gi)x(t[o])&&(t[o]=Ui[o]);const n=$i(t)||...
function ns (line 1) | function ns(t,e,n){const i=!!x(n.round)||n.round,s=(t,s)=>{t=V(t,i||n.ca...
class is (line 1) | class is{constructor(t){const e=t.zone||ve.defaultZone,n=t.invalid||(Num...
method constructor (line 1) | constructor(t){const e=t.zone||ve.defaultZone,n=t.invalid||(Number.isN...
method local (line 1) | static local(t,e,n,i,s,r,a){return x(t)?new is({ts:ve.now()}):es({year...
method utc (line 1) | static utc(t,e,n,i,s,r,a){return x(t)?new is({ts:ve.now(),zone:oe.utcI...
method fromJSDate (line 1) | static fromJSDate(t,e={}){const n=j(t)?t.valueOf():NaN;if(Number.isNaN...
method fromMillis (line 1) | static fromMillis(t,e={}){if(E(t))return t<-Pi||t>Pi?is.invalid("Times...
method fromSeconds (line 1) | static fromSeconds(t,e={}){if(E(t))return new is({ts:1e3*t,zone:ce(e.z...
method fromObject (line 1) | static fromObject(t){const e=ce(t.zone,ve.defaultZone);if(!e.isValid)r...
method fromISO (line 1) | static fromISO(t,e={}){const[n,i]=Sn(t);return Wi(n,i,e,"ISO 8601",t)}
method fromRFC2822 (line 1) | static fromRFC2822(t,e={}){const[n,i]=Tn(t);return Wi(n,i,e,"RFC 2822"...
method fromHTTP (line 1) | static fromHTTP(t,e={}){const[n,i]=xn(t);return Wi(n,i,e,"HTTP",e)}
method fromFormat (line 1) | static fromFormat(t,e,n={}){if(x(t)||x(e))throw new S("fromFormat requ...
method fromString (line 1) | static fromString(t,e,n={}){return is.fromFormat(t,e,n)}
method fromSQL (line 1) | static fromSQL(t,e={}){const[n,i]=$n(t);return Wi(n,i,e,"SQL",t)}
method invalid (line 1) | static invalid(t,e=null){if(!t)throw new S("need to specify a reason t...
method isDateTime (line 1) | static isDateTime(t){return t&&t.isLuxonDateTime||!1}
method get (line 1) | get(t){return this[t]}
method isValid (line 1) | get isValid(){return null===this.invalid}
method invalidReason (line 1) | get invalidReason(){return this.invalid?this.invalid.reason:null}
method invalidExplanation (line 1) | get invalidExplanation(){return this.invalid?this.invalid.explanation:...
method locale (line 1) | get locale(){return this.isValid?this.loc.locale:null}
method numberingSystem (line 1) | get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}
method outputCalendar (line 1) | get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}
method zone (line 1) | get zone(){return this._zone}
method zoneName (line 1) | get zoneName(){return this.isValid?this.zone.name:null}
method year (line 1) | get year(){return this.isValid?this.c.year:NaN}
method quarter (line 1) | get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}
method month (line 1) | get month(){return this.isValid?this.c.month:NaN}
method day (line 1) | get day(){return this.isValid?this.c.day:NaN}
method hour (line 1) | get hour(){return this.isValid?this.c.hour:NaN}
method minute (line 1) | get minute(){return this.isValid?this.c.minute:NaN}
method second (line 1) | get second(){return this.isValid?this.c.second:NaN}
method millisecond (line 1) | get millisecond(){return this.isValid?this.c.millisecond:NaN}
method weekYear (line 1) | get weekYear(){return this.isValid?Fi(this).weekYear:NaN}
method weekNumber (line 1) | get weekNumber(){return this.isValid?Fi(this).weekNumber:NaN}
method weekday (line 1) | get weekday(){return this.isValid?Fi(this).weekday:NaN}
method ordinal (line 1) | get ordinal(){return this.isValid?Mi(this.c).ordinal:NaN}
method monthShort (line 1) | get monthShort(){return this.isValid?Xn.months("short",{locale:this.lo...
method monthLong (line 1) | get monthLong(){return this.isValid?Xn.months("long",{locale:this.loca...
method weekdayShort (line 1) | get weekdayShort(){return this.isValid?Xn.weekdays("short",{locale:thi...
method weekdayLong (line 1) | get weekdayLong(){return this.isValid?Xn.weekdays("long",{locale:this....
method offset (line 1) | get offset(){return this.isValid?this.zone.offset(this.ts):NaN}
method offsetNameShort (line 1) | get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts...
method offsetNameLong (line 1) | get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,...
method isOffsetFixed (line 1) | get isOffsetFixed(){return this.isValid?this.zone.universal:null}
method isInDST (line 1) | get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:...
method isInLeapYear (line 1) | get isInLeapYear(){return W(this.year)}
method daysInMonth (line 1) | get daysInMonth(){return Y(this.year,this.month)}
method daysInYear (line 1) | get daysInYear(){return this.isValid?Z(this.year):NaN}
method weeksInWeekYear (line 1) | get weeksInWeekYear(){return this.isValid?Q(this.weekYear):NaN}
method resolvedLocaleOpts (line 1) | resolvedLocaleOpts(t={}){const{locale:e,numberingSystem:n,calendar:i}=...
method toUTC (line 1) | toUTC(t=0,e={}){return this.setZone(oe.instance(t),e)}
method toLocal (line 1) | toLocal(){return this.setZone(ve.defaultZone)}
method setZone (line 1) | setZone(t,{keepLocalTime:e=!1,keepCalendarTime:n=!1}={}){if(t=ce(t,ve....
method reconfigure (line 1) | reconfigure({locale:t,numberingSystem:e,outputCalendar:n}={}){const i=...
method setLocale (line 1) | setLocale(t){return this.reconfigure({locale:t})}
method set (line 1) | set(t){if(!this.isValid)return this;const e=tt(t,ts,[]),n=!x(e.weekYea...
method plus (line 1) | plus(t){if(!this.isValid)return this;const e=Qn(t);return Hi(this,Vi(t...
method minus (line 1) | minus(t){if(!this.isValid)return this;const e=Qn(t).negate();return Hi...
method startOf (line 1) | startOf(t){if(!this.isValid)return this;const e={},n=Un.normalizeUnit(...
method endOf (line 1) | endOf(t){return this.isValid?this.plus({[t]:1}).startOf(t).minus(1):this}
method toFormat (line 1) | toFormat(t,e={}){return this.isValid?be.create(this.loc.redefaultToEN(...
method toLocaleString (line 1) | toLocaleString(t=lt){return this.isValid?be.create(this.loc.clone(t),t...
method toLocaleParts (line 1) | toLocaleParts(t={}){return this.isValid?be.create(this.loc.clone(t),t)...
method toISO (line 1) | toISO(t={}){return this.isValid?`${this.toISODate()}T${this.toISOTime(...
method toISODate (line 1) | toISODate(){let t="yyyy-MM-dd";return this.year>9999&&(t="+"+t),Zi(thi...
method toISOWeekDate (line 1) | toISOWeekDate(){return Zi(this,"kkkk-'W'WW-c")}
method toISOTime (line 1) | toISOTime({suppressMilliseconds:t=!1,suppressSeconds:e=!1,includeOffse...
method toRFC2822 (line 1) | toRFC2822(){return Zi(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ")}
method toHTTP (line 1) | toHTTP(){return Zi(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}
method toSQLDate (line 1) | toSQLDate(){return Zi(this,"yyyy-MM-dd")}
method toSQLTime (line 1) | toSQLTime({includeOffset:t=!0,includeZone:e=!1}={}){return Yi(this,{in...
method toSQL (line 1) | toSQL(t={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(...
method toString (line 1) | toString(){return this.isValid?this.toISO():Ii}
method valueOf (line 1) | valueOf(){return this.toMillis()}
method toMillis (line 1) | toMillis(){return this.isValid?this.ts:NaN}
method toSeconds (line 1) | toSeconds(){return this.isValid?this.ts/1e3:NaN}
method toJSON (line 1) | toJSON(){return this.toISO()}
method toBSON (line 1) | toBSON(){return this.toJSDate()}
method toObject (line 1) | toObject(t={}){if(!this.isValid)return{};const e=Object.assign({},this...
method toJSDate (line 1) | toJSDate(){return new Date(this.isValid?this.ts:NaN)}
method diff (line 1) | diff(t,e="milliseconds",n={}){if(!this.isValid||!t.isValid)return Un.i...
method diffNow (line 1) | diffNow(t="milliseconds",e={}){return this.diff(is.local(),t,e)}
method until (line 1) | until(t){return this.isValid?Kn.fromDateTimes(this,t):this}
method hasSame (line 1) | hasSame(t,e){if(!this.isValid)return!1;if("millisecond"===e)return thi...
method equals (line 1) | equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()...
method toRelative (line 1) | toRelative(t={}){if(!this.isValid)return null;const e=t.base||is.fromO...
method toRelativeCalendar (line 1) | toRelativeCalendar(t={}){return this.isValid?ns(t.base||is.fromObject(...
method min (line 1) | static min(...t){if(!t.every(is.isDateTime))throw new S("min requires ...
method max (line 1) | static max(...t){if(!t.every(is.isDateTime))throw new S("max requires ...
method fromFormatExplain (line 1) | static fromFormatExplain(t,e,n={}){const{locale:i=null,numberingSystem...
method fromStringExplain (line 1) | static fromStringExplain(t,e,n={}){return is.fromFormatExplain(t,e,n)}
method DATE_SHORT (line 1) | static get DATE_SHORT(){return lt}
method DATE_MED (line 1) | static get DATE_MED(){return ct}
method DATE_FULL (line 1) | static get DATE_FULL(){return ut}
method DATE_HUGE (line 1) | static get DATE_HUGE(){return dt}
method TIME_SIMPLE (line 1) | static get TIME_SIMPLE(){return ht}
method TIME_WITH_SECONDS (line 1) | static get TIME_WITH_SECONDS(){return ft}
method TIME_WITH_SHORT_OFFSET (line 1) | static get TIME_WITH_SHORT_OFFSET(){return mt}
method TIME_WITH_LONG_OFFSET (line 1) | static get TIME_WITH_LONG_OFFSET(){return pt}
method TIME_24_SIMPLE (line 1) | static get TIME_24_SIMPLE(){return vt}
method TIME_24_WITH_SECONDS (line 1) | static get TIME_24_WITH_SECONDS(){return yt}
method TIME_24_WITH_SHORT_OFFSET (line 1) | static get TIME_24_WITH_SHORT_OFFSET(){return gt}
method TIME_24_WITH_LONG_OFFSET (line 1) | static get TIME_24_WITH_LONG_OFFSET(){return bt}
method DATETIME_SHORT (line 1) | static get DATETIME_SHORT(){return _t}
method DATETIME_SHORT_WITH_SECONDS (line 1) | static get DATETIME_SHORT_WITH_SECONDS(){return wt}
method DATETIME_MED (line 1) | static get DATETIME_MED(){return kt}
method DATETIME_MED_WITH_SECONDS (line 1) | static get DATETIME_MED_WITH_SECONDS(){return Ct}
method DATETIME_MED_WITH_WEEKDAY (line 1) | static get DATETIME_MED_WITH_WEEKDAY(){return Dt}
method DATETIME_FULL (line 1) | static get DATETIME_FULL(){return Ot}
method DATETIME_FULL_WITH_SECONDS (line 1) | static get DATETIME_FULL_WITH_SECONDS(){return St}
method DATETIME_HUGE (line 1) | static get DATETIME_HUGE(){return Tt}
method DATETIME_HUGE_WITH_SECONDS (line 1) | static get DATETIME_HUGE_WITH_SECONDS(){return xt}
function ss (line 1) | function ss(t){if(is.isDateTime(t))return t;if(t&&t.valueOf&&E(t.valueOf...
method eventIsContinuedFromPreviousDay (line 1) | eventIsContinuedFromPreviousDay(t,e){const n=this.makeDT(e).toISODate();...
method mounted (line 1) | mounted(){}
method dateAdjustWeekday (line 1) | dateAdjustWeekday(t,e){t=this.makeDT(t);let n=is.local(),i=!0;e<1&&(i=!1...
method getWeekNumber (line 1) | getWeekNumber(t,e){return e?this.makeDT(t).plus({days:1}).weekNumber:thi...
method mounted (line 1) | mounted(){}
method mounted (line 1) | mounted(){}
method data (line 1) | data(){return{dayCellHeight:5,dayCellHeightUnit:"rem",workingDate:new Da...
method mounted (line 1) | mounted(){ds("Component mounted"),this.mountSetDate(),this.parseEventLis...
method data (line 1) | data(){return{workingDate:new Date,numJumpDays:28,localNumDays:28,dayCou...
method mounted (line 1) | mounted(){fs("Component mounted"),this.localNumDays=this.numDays,this.do...
method mounted (line 1) | mounted(){ps("Component mounted")}
method data (line 1) | data(){return{dayCellHeight:5,dayCellHeightUnit:"rem",workingDate:new Da...
method mounted (line 1) | mounted(){ys("Component mounted"),this.mountSetDate()}
method updated (line 1) | updated(){this.mountSetDate()}
method data (line 1) | data(){return{workingDate:new Date,eventDetailEventObject:{},timePositio...
method mounted (line 1) | mounted(){bs("Component mounted"),this.mountSetDate(),this.startTimePosi...
method beforeDestroy (line 1) | beforeDestroy(){this.endTimePositionInterval()}
method data (line 1) | data(){return{dayCellHeight:5,dayCellHeightUnit:"rem",workingDate:is.loc...
method mounted (line 1) | mounted(){ws("Component mounted"),this.mountSetDate()}
method mounted (line 1) | mounted(){Cs("Component mounted")}
method data (line 1) | data(){return{modalIsOpen:!1,inEditMode:!1,editEventObject:{},startDateO...
method mounted (line 1) | mounted(){Os("Component mounted")}
method doMoveTimePeriod (line 1) | doMoveTimePeriod(t,e){this.$root.$emit(this.moveTimePeriodEmit,{unitType...
method mounted (line 1) | mounted(){Ts("Component mounted")}
method mounted (line 1) | mounted(){Es("Component mounted")}
method data (line 1) | data(){return{dayCellHeight:5,dayCellHeightUnit:"rem",workingDate:new Da...
method mounted (line 1) | mounted(){js("Component mounted"),this.doUpdate(),this.handlePassedInEve...
method data (line 1) | data(){return{workingDate:new Date,weekDateArray:[],parsed:this.getDefau...
method getScrollTarget (line 1) | getScrollTarget(t){return t.closest(".scroll,.scroll-y,.overflow-auto")|...
method mounted (line 1) | mounted(){As("Component mounted"),this.doUpdate(),this.handlePassedInEve...
method data (line 1) | data(){return{eventDetailEventObject:{}}}
method mounted (line 1) | mounted(){Ls("Component mounted"),this.handlePassedInEvents()}
function ia (line 1) | function ia(t,e,n,i){!0===n.modifiers.stop&&Object(u["i"])(t);var s=n.mo...
function sa (line 1) | function sa(t,e){var n=e.value,i=e.modifiers,s=e.arg;t.enabled=!1!==n,!0...
function ca (line 1) | function ca(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function _a (line 1) | function _a(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Ea (line 1) | function Ea(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Ma (line 1) | function Ma(t){var e=(new r["a"]).$root.$options,n=["el","methods","rend...
function ja (line 1) | function ja(t,e){return void 0===wa&&void 0!==t&&Ma(t.$root.$options),ne...
function La (line 1) | function La(t){Ia(t)&&Object(u["j"])(t)}
function Ia (line 1) | function Ia(t){if(t.target===document.body||t.target.classList.contains(...
function Pa (line 1) | function Pa(t){if($a+=t?1:-1,!($a>1)){var e=t?"add":"remove";na["a"].is....
function za (line 1) | function za(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function no (line 1) | function no(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function po (line 1) | function po(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function go (line 1) | function go(){if(void 0!==window.getSelection){var t=window.getSelection...
function Co (line 1) | function Co(){return Math.floor(65536*(1+Math.random())).toString(16).su...
function xo (line 1) | function xo(t){while(void 0!==So[t]){var e=Object.keys(So).find(function...
function Mo (line 1) | function Mo(t){var e=t.split(" ");return 2===e.length&&(["top","center",...
function jo (line 1) | function jo(t){return!t||2===t.length&&("number"===typeof t[0]&&"number"...
function qo (line 1) | function qo(t){var e=t.split(" ");return{vertical:e[0],horizontal:e[1]}}
function Ao (line 1) | function Ao(t,e){var n=t.getBoundingClientRect(),i=n.top,s=n.left,r=n.ri...
function $o (line 1) | function $o(t){return{top:0,center:t.offsetHeight/2,bottom:t.offsetHeigh...
function Lo (line 1) | function Lo(t){var e,n=t.el.scrollTop;if(t.el.style.maxHeight=t.maxHeigh...
function Io (line 1) | function Io(t,e,n,i,s){var r=Object(Aa["d"])(),a=window,o=a.innerHeight,...
function Po (line 1) | function Po(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Fo (line 1) | function Fo(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Bo (line 1) | function Bo(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Ro (line 1) | function Ro(t,e,n){e.handler?e.handler(t,n,n.caret):n.runCmd(e.cmd,e.par...
function Vo (line 1) | function Vo(t,e){return t("div",{staticClass:"q-editor__toolbar-group"},e)}
function Wo (line 1) | function Wo(t,e,n,i){var s=arguments.length>4&&void 0!==arguments[4]&&ar...
function Zo (line 1) | function Zo(t,e,n){var i,s,r=n.label,a=n.icon,o="only-icons"===n.list;fu...
function Yo (line 1) | function Yo(t,e){if(e.caret)return e.buttons.map(function(n){return Vo(t...
function Uo (line 1) | function Uo(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?argum...
function Qo (line 1) | function Qo(t,e){if(e.caret){var n=e.toolbarColor||e.toolbarTextColor,i=...
function tl (line 1) | function tl(t,e){if(e&&t===e)return null;var n=window.getComputedStyle?w...
function el (line 1) | function el(t,e){if(!t)return!1;while(t=t.parentNode){if(t===document.bo...
function t (line 1) | function t(e,n){Go()(this,t),this.el=e,this.vm=n}
function ll (line 1) | function ll(t){return null===t?String(t):ol[rl.call(t)]||"object"}
function cl (line 1) | function cl(t){if(!t||"object"!==ll(t))return!1;if(t.constructor&&!al.ca...
function ul (line 1) | function ul(){var t,e,n,i,s,r,a=arguments[0]||{},o=1,l=arguments.length,...
function dl (line 1) | function dl(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function pl (line 1) | function pl(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function gl (line 1) | function gl(t,e,n){return"[object Date]"===Object.prototype.toString.cal...
function bl (line 1) | function bl(t,e,n){return Tl(Dl(t,e,n))}
function _l (line 1) | function _l(t){return 0===kl(t)}
function wl (line 1) | function wl(t,e){return e<=6?31:e<=11?30:_l(t)?30:29}
function kl (line 1) | function kl(t){var e,n,i,s,r,a=yl.length,o=yl[0];if(t<o||t>=yl[a-1])thro...
function Cl (line 1) | function Cl(t,e){var n,i,s,r,a,o,l,c=yl.length,u=t+621,d=-14,h=yl[0];if(...
function Dl (line 1) | function Dl(t,e,n){var i=Cl(t,!0);return Sl(i.gy,3,i.march)+31*(e-1)-xl(...
function Ol (line 1) | function Ol(t){var e,n,i,s=Tl(t).gy,r=s-621,a=Cl(r,!1),o=Sl(s,3,a.march)...
function Sl (line 1) | function Sl(t,e,n){var i=xl(1461*(t+xl(e-8,6)+100100),4)+xl(153*El(e+9,1...
function Tl (line 1) | function Tl(t){var e,n,i,s,r;return e=4*t+139361631,e=e+4*xl(3*xl(4*t+18...
function xl (line 1) | function xl(t,e){return~~(t/e)}
function El (line 1) | function El(t,e){return t-~~(t/e)*e}
function jl (line 1) | function jl(t,e,n){return n<=e?e:Math.min(n,Math.max(e,t))}
function ql (line 1) | function ql(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments...
function zl (line 1) | function zl(t,e){var n="("+e.days.join("|")+")",i=t+n;if(void 0!==Hl[i])...
function Bl (line 1) | function Bl(t,e,n,i){var s={year:null,month:null,day:null,hour:null,minu...
function Rl (line 1) | function Rl(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments...
function Vl (line 1) | function Vl(t){var e=new Date(t.getFullYear(),t.getMonth(),t.getDate());...
function Wl (line 1) | function Wl(t,e){var n=new Date(t);switch(e){case"year":n.setMonth(0);ca...
function Zl (line 1) | function Zl(t,e,n){return(t.getTime()-t.getTimezoneOffset()*Il-(e.getTim...
function Yl (line 1) | function Yl(t,e){var n=arguments.length>2&&void 0!==arguments[2]?argumen...
function Ul (line 1) | function Ul(t){return Yl(t,Wl(t,"year"),"days")+1}
function Ql (line 1) | function Ql(t){if(t>=11&&t<=13)return"".concat(t,"th");switch(t%10){case...
function Gl (line 1) | function Gl(t,e,n,i){if((0===t||t)&&t!==1/0&&t!==-1/0){var s=new Date(t)...
function Kl (line 1) | function Kl(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function uc (line 1) | function uc(t){var e={};return lc.forEach(function(n){t[n]&&(e[n]=!0)}),...
function dc (line 1) | function dc(t,e){var n=e.oldValue,i=e.value,s=e.modifiers;n!==i&&(t.hand...
function hc (line 1) | function hc(t,e,n){var i=e.target;n.touchTargetObserver=new MutationObse...
function fc (line 1) | function fc(t){void 0!==t.touchTargetObserver&&(t.touchTargetObserver.di...
function mc (line 1) | function mc(t,e,n){var i,s=Object(u["f"])(t),r=s.left-e.event.x,a=s.top-...
function o (line 1) | function o(t,e){!0===i.mouse&&!0===e?Object(u["j"])(t):(i.stop&&Object(u...
function yc (line 1) | function yc(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Zc (line 1) | function Zc(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function Yc (line 1) | function Yc(t,e,n){var i=!0===n?["left","right"]:["top","bottom"];return...
function Uc (line 1) | function Uc(t,e){return t.priorityMatched===e.priorityMatched?e.priority...
function Qc (line 1) | function Qc(t){return t.selected=!1,t}
function Xc (line 1) | function Xc(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=ar...
function eu (line 1) | function eu(t){var e=[.06,6,50];return"string"===typeof t&&t.length&&t.s...
function n (line 1) | function n(){throw new TypeError("Invalid attempt to spread non-iterable...
function i (line 1) | function i(t){function e(t){let e=0;for(let n=0;n<t.length;n++)e=(e<<5)-...
function n (line 1) | function n(t,e){for(var n=0,i=t.length-1;i>=0;i--){var s=t[i];"."===s?t....
function r (line 1) | function r(t,e){if(t.filter)return t.filter(e);for(var n=[],i=0;i<t.leng...
function i (line 1) | function i(t){for(var e=0;e<t.length;e++)if(""!==t[e])break;for(var n=t....
function i (line 1) | function i(t,e){var n=t.style;Object.keys(e).forEach(function(t){n[t]=e[...
function n (line 1) | function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a ...
FILE: docs/js/app.699aeeff.js
function J (line 1) | function J(){return _.apply(this,arguments)}
function _ (line 1) | function _(){return _=u()(t.a.mark(function e(){return t.a.wrap(function...
FILE: docs/js/runtime.14845b32.js
function t (line 1) | function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,s=[];f<i.length;f++)o...
function r (line 1) | function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.l...
function i (line 1) | function i(e){return c.p+"js/"+({}[e]||e)+"."+{"116eebfe":"60111037","94...
function c (line 1) | function c(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{...
FILE: docs/js/vendor.4fc4c185.js
function a (line 1) | function a(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=arg...
function l (line 1) | function l(t,e){var n=/(edge|edga|edgios)\/([\w.]+)/.exec(t)||/(opr)[\/]...
function p (line 1) | function p(){return(navigator.userAgent||navigator.vendor||window.opera)...
function d (line 1) | function d(t){return/(ipad)/.exec(t)||/(ipod)/.exec(t)||/(windows phone)...
function h (line 1) | function h(t){var e=d(t),n=l(t,e),r={};n.browser&&(r[n.browser]=!0,r.ver...
function v (line 1) | function v(){if(void 0!==c)return c;try{if(window.localStorage)return c=...
function y (line 1) | function y(){return{has:{touch:function(){return"ontouchstart"in window|...
function o (line 1) | function o(){for(var o=this,i=arguments.length,a=new Array(i),c=0;c<i;c+...
function r (line 1) | function r(t,e,n,r,o,i,a,c){var s,u="function"===typeof t?t.options:t;if...
function r (line 7) | function r(t){return void 0===t||null===t}
function o (line 7) | function o(t){return void 0!==t&&null!==t}
function i (line 7) | function i(t){return!0===t}
function a (line 7) | function a(t){return!1===t}
function c (line 7) | function c(t){return"string"===typeof t||"number"===typeof t||"symbol"==...
function s (line 7) | function s(t){return null!==t&&"object"===typeof t}
function f (line 7) | function f(t){return"[object Object]"===u.call(t)}
function l (line 7) | function l(t){return"[object RegExp]"===u.call(t)}
function p (line 7) | function p(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e...
function d (line 7) | function d(t){return o(t)&&"function"===typeof t.then&&"function"===type...
function h (line 7) | function h(t){return null==t?"":Array.isArray(t)||f(t)&&t.toString===u?J...
function v (line 7) | function v(t){var e=parseFloat(t);return isNaN(e)?t:e}
function y (line 7) | function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o<r.len...
function g (line 7) | function g(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(...
function _ (line 7) | function _(t,e){return b.call(t,e)}
function w (line 7) | function w(t){var e=Object.create(null);return function(n){var r=e[n];re...
function A (line 7) | function A(t,e){function n(n){var r=arguments.length;return r?r>1?t.appl...
function C (line 7) | function C(t,e){return t.bind(e)}
function $ (line 7) | function $(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[...
function T (line 7) | function T(t,e){for(var n in e)t[n]=e[n];return t}
function P (line 7) | function P(t){for(var e={},n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}
function L (line 7) | function L(t,e,n){}
function M (line 7) | function M(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&...
function N (line 7) | function N(t,e){for(var n=0;n<t.length;n++)if(M(t[n],e))return n;return-1}
function F (line 7) | function F(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments...
function H (line 7) | function H(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}
function B (line 7) | function B(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,wr...
function W (line 7) | function W(t){if(!G.test(t)){var e=t.split(".");return function(t){for(v...
function ft (line 7) | function ft(t){return"function"===typeof t&&/native code/.test(t.toStrin...
function t (line 7) | function t(){this.set=Object.create(null)}
function mt (line 7) | function mt(t){yt.push(t),vt.target=t}
function gt (line 7) | function gt(){yt.pop(),vt.target=yt[yt.length-1]}
function xt (line 7) | function xt(t){return new bt(void 0,void 0,void 0,String(t))}
function Ot (line 7) | function Ot(t){var e=new bt(t.tag,t.data,t.children&&t.children.slice(),...
function jt (line 7) | function jt(t){Ct=t}
function Tt (line 7) | function Tt(t,e){t.__proto__=e}
function Pt (line 7) | function Pt(t,e,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];B(t,i,e[i])}}
function Lt (line 7) | function Lt(t,e){var n;if(s(t)&&!(t instanceof bt))return _(t,"__ob__")&...
function It (line 7) | function It(t,e,n,r,o){var i=new vt,a=Object.getOwnPropertyDescriptor(t,...
function Rt (line 7) | function Rt(t,e,n){if(Array.isArray(t)&&p(e))return t.length=Math.max(t....
function Mt (line 7) | function Mt(t,e){if(Array.isArray(t)&&p(e))t.splice(e,1);else{var n=t.__...
function Nt (line 7) | function Nt(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob_...
function Dt (line 7) | function Dt(t,e){if(!e)return t;for(var n,r,o,i=pt?Reflect.ownKeys(e):Ob...
function zt (line 7) | function zt(t,e,n){return n?function(){var r="function"===typeof e?e.cal...
function Ut (line 7) | function Ut(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n...
function qt (line 7) | function qt(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.p...
function Vt (line 7) | function Vt(t,e,n,r){var o=Object.create(t||null);return e?T(o,e):o}
function Bt (line 7) | function Bt(t,e){var n=t.props;if(n){var r,o,i,a={};if(Array.isArray(n))...
function Gt (line 7) | function Gt(t,e){var n=t.inject;if(n){var r=t.inject={};if(Array.isArray...
function Wt (line 7) | function Wt(t){var e=t.directives;if(e)for(var n in e){var r=e[n];"funct...
function Kt (line 7) | function Kt(t,e,n){if("function"===typeof e&&(e=e.options),Bt(e,n),Gt(e,...
function Jt (line 7) | function Jt(t,e,n,r){if("string"===typeof n){var o=t[e];if(_(o,n))return...
function Yt (line 7) | function Yt(t,e,n,r){var o=e[t],i=!_(n,t),a=n[t],c=te(Boolean,o.type);if...
function Xt (line 7) | function Xt(t,e,n){if(_(e,"default")){var r=e.default;return t&&t.$optio...
function Qt (line 7) | function Qt(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return ...
function Zt (line 7) | function Zt(t,e){return Qt(t)===Qt(e)}
function te (line 7) | function te(t,e){if(!Array.isArray(e))return Zt(e,t)?0:-1;for(var n=0,r=...
function ee (line 7) | function ee(t,e,n){mt();try{if(e){var r=e;while(r=r.$parent){var o=r.$op...
function ne (line 7) | function ne(t,e,n,r,o){var i;try{i=n?t.apply(e,n):t.call(e),i&&!i._isVue...
function re (line 7) | function re(t,e,n){if(q.errorHandler)try{return q.errorHandler.call(null...
function oe (line 7) | function oe(t,e,n){if(!Y&&!X||"undefined"===typeof console)throw t;conso...
function ue (line 7) | function ue(){se=!1;var t=ce.slice(0);ce.length=0;for(var e=0;e<t.length...
function he (line 7) | function he(t,e){var n;if(ce.push(function(){if(t)try{t.call(e)}catch(Oa...
function ye (line 7) | function ye(t){me(t,ve),ve.clear()}
function me (line 7) | function me(t,e){var n,r,o=Array.isArray(t);if(!(!o&&!s(t)||Object.isFro...
function be (line 7) | function be(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(...
function _e (line 7) | function _e(t,e,n,o,a,c){var s,u,f,l;for(s in t)u=t[s],f=e[s],l=ge(s),r(...
function we (line 7) | function we(t,e,n){var a;t instanceof bt&&(t=t.data.hook||(t.data.hook={...
function xe (line 7) | function xe(t,e,n){var i=e.options.props;if(!r(i)){var a={},c=t.attrs,s=...
function Oe (line 7) | function Oe(t,e,n,r,i){if(o(e)){if(_(e,n))return t[n]=e[n],i||delete e[n...
function Se (line 7) | function Se(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return ...
function ke (line 7) | function ke(t){return c(t)?[xt(t)]:Array.isArray(t)?Ae(t):void 0}
function Ee (line 7) | function Ee(t){return o(t)&&o(t.text)&&a(t.isComment)}
function Ae (line 7) | function Ae(t,e){var n,a,s,u,f=[];for(n=0;n<t.length;n++)a=t[n],r(a)||"b...
function Ce (line 7) | function Ce(t){var e=t.$options.provide;e&&(t._provided="function"===typ...
function je (line 7) | function je(t){var e=$e(t.$options.inject,t);e&&(jt(!1),Object.keys(e).f...
function $e (line 7) | function $e(t,e){if(t){for(var n=Object.create(null),r=pt?Reflect.ownKey...
function Te (line 7) | function Te(t,e){if(!t||!t.length)return{};for(var n={},r=0,o=t.length;r...
function Pe (line 7) | function Pe(t){return t.isComment&&!t.asyncFactory||" "===t.text}
function Le (line 7) | function Le(t,e,r){var o,i=Object.keys(e).length>0,a=t?!!t.$stable:!i,c=...
function Ie (line 7) | function Ie(t,e,n){var r=function(){var t=arguments.length?n.apply(null,...
function Re (line 7) | function Re(t,e){return function(){return t[e]}}
function Me (line 7) | function Me(t,e){var n,r,i,a,c;if(Array.isArray(t)||"string"===typeof t)...
function Ne (line 7) | function Ne(t,e,n,r){var o,i=this.$scopedSlots[t];i?(n=n||{},r&&(n=T(T({...
function Fe (line 7) | function Fe(t){return Jt(this.$options,"filters",t,!0)||R}
function De (line 7) | function De(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}
function ze (line 7) | function ze(t,e,n,r,o){var i=q.keyCodes[e]||n;return o&&r&&!q.keyCodes[e...
function Ue (line 7) | function Ue(t,e,n,r,o){if(n)if(s(n)){var i;Array.isArray(n)&&(n=P(n));va...
function qe (line 7) | function qe(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];...
function Ve (line 7) | function Ve(t,e,n){return He(t,"__once__"+e+(n?"_"+n:""),!0),t}
function He (line 7) | function He(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&...
function Be (line 7) | function Be(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}
function Ge (line 7) | function Ge(t,e){if(e)if(f(e)){var n=t.on=t.on?T({},t.on):{};for(var r i...
function We (line 7) | function We(t,e,n,r){e=e||{$stable:!n};for(var o=0;o<t.length;o++){var i...
function Ke (line 7) | function Ke(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"===type...
function Je (line 7) | function Je(t,e){return"string"===typeof t?e+t:t}
function Ye (line 7) | function Ye(t){t._o=Ve,t._n=v,t._s=h,t._l=Me,t._t=Ne,t._q=M,t._i=N,t._m=...
function Xe (line 7) | function Xe(t,e,r,o,a){var c,s=this,u=a.options;_(o,"_uid")?(c=Object.cr...
function Qe (line 7) | function Qe(t,e,r,i,a){var c=t.options,s={},u=c.props;if(o(u))for(var f ...
function Ze (line 7) | function Ze(t,e,n,r,o){var i=Ot(t);return i.fnContext=n,i.fnOptions=r,e....
function tn (line 7) | function tn(t,e){for(var n in e)t[O(n)]=e[n]}
function rn (line 7) | function rn(t,e,n,a,c){if(!r(t)){var u=n.$options._base;if(s(t)&&(t=u.ex...
function on (line 7) | function on(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},r=t.dat...
function an (line 7) | function an(t){for(var e=t.hook||(t.hook={}),n=0;n<nn.length;n++){var r=...
function cn (line 7) | function cn(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}
function sn (line 7) | function sn(t,e){var n=t.model&&t.model.prop||"value",r=t.model&&t.model...
function ln (line 7) | function ln(t,e,n,r,o,a){return(Array.isArray(n)||c(n))&&(o=r,r=n,n=void...
function pn (line 7) | function pn(t,e,n,r,i){if(o(n)&&o(n.__ob__))return wt();if(o(n)&&o(n.is)...
function dn (line 7) | function dn(t,e,n){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,n=!0),o(...
function hn (line 7) | function hn(t){s(t.style)&&ye(t.style),s(t.class)&&ye(t.class)}
function vn (line 7) | function vn(t){t._vnode=null,t._staticTrees=null;var e=t.$options,r=t.$v...
function gn (line 7) | function gn(t){Ye(t.prototype),t.prototype.$nextTick=function(t){return ...
function bn (line 7) | function bn(t,e){return(t.__esModule||pt&&"Module"===t[Symbol.toStringTa...
function _n (line 7) | function _n(t,e,n,r,o){var i=wt();return i.asyncFactory=t,i.asyncMeta={d...
function wn (line 7) | function wn(t,e){if(i(t.error)&&o(t.errorComp))return t.errorComp;if(o(t...
function xn (line 7) | function xn(t){return t.isComment&&t.asyncFactory}
function On (line 7) | function On(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e...
function Sn (line 7) | function Sn(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t....
function kn (line 7) | function kn(t,e){yn.$on(t,e)}
function En (line 7) | function En(t,e){yn.$off(t,e)}
function An (line 7) | function An(t,e){var n=yn;return function r(){var o=e.apply(null,argumen...
function Cn (line 7) | function Cn(t,e,n){yn=t,_e(e,n||{},kn,En,An,t),yn=void 0}
function jn (line 7) | function jn(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;i...
function Tn (line 7) | function Tn(t){var e=$n;return $n=t,function(){$n=e}}
function Pn (line 7) | function Pn(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){while(n.$o...
function Ln (line 7) | function Ln(t){t.prototype._update=function(t,e){var n=this,r=n.$el,o=n....
function In (line 7) | function In(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.r...
function Rn (line 7) | function Rn(t,e,r,o,i){var a=o.data.scopedSlots,c=t.$scopedSlots,s=!!(a&...
function Mn (line 7) | function Mn(t){while(t&&(t=t.$parent))if(t._inactive)return!0;return!1}
function Nn (line 7) | function Nn(t,e){if(e){if(t._directInactive=!1,Mn(t))return}else if(t._d...
function Fn (line 7) | function Fn(t,e){if((!e||(t._directInactive=!0,!Mn(t)))&&!t._inactive){t...
function Dn (line 7) | function Dn(t,e){mt();var n=t.$options[e],r=e+" hook";if(n)for(var o=0,i...
function Gn (line 7) | function Gn(){Bn=zn.length=Un.length=0,qn={},Vn=Hn=!1}
function Yn (line 7) | function Yn(){var t,e;for(Wn=Kn(),Hn=!0,zn.sort(function(t,e){return t.i...
function Xn (line 7) | function Xn(t){var e=t.length;while(e--){var n=t[e],r=n.vm;r._watcher===...
function Qn (line 7) | function Qn(t){t._inactive=!1,Un.push(t)}
function Zn (line 7) | function Zn(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Nn(t[e],!0)}
function tr (line 7) | function tr(t){var e=t.id;if(null==qn[e]){if(qn[e]=!0,Hn){var n=zn.lengt...
function or (line 7) | function or(t,e,n){rr.get=function(){return this[e][n]},rr.set=function(...
function ir (line 7) | function ir(t){t._watchers=[];var e=t.$options;e.props&&ar(t,e.props),e....
function ar (line 7) | function ar(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$optio...
function cr (line 7) | function cr(t){var e=t.$options.data;e=t._data="function"===typeof e?sr(...
function sr (line 7) | function sr(t,e){mt();try{return t.call(e,e)}catch(Oa){return ee(Oa,e,"d...
function fr (line 7) | function fr(t,e){var n=t._computedWatchers=Object.create(null),r=st();fo...
function lr (line 7) | function lr(t,e,n){var r=!st();"function"===typeof n?(rr.get=r?pr(e):dr(...
function pr (line 7) | function pr(t){return function(){var e=this._computedWatchers&&this._com...
function dr (line 7) | function dr(t){return function(){return t.call(this,this)}}
function hr (line 7) | function hr(t,e){t.$options.props;for(var n in e)t[n]="function"!==typeo...
function vr (line 7) | function vr(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var ...
function yr (line 7) | function yr(t,e,n,r){return f(n)&&(r=n,n=n.handler),"string"===typeof n&...
function mr (line 7) | function mr(t){var e={get:function(){return this._data}},n={get:function...
function br (line 7) | function br(t){t.prototype._init=function(t){var e=this;e._uid=gr++,e._i...
function _r (line 7) | function _r(t,e){var n=t.$options=Object.create(t.constructor.options),r...
function wr (line 7) | function wr(t){var e=t.options;if(t.super){var n=wr(t.super),r=t.superOp...
function xr (line 7) | function xr(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!=...
function Or (line 7) | function Or(t){this._init(t)}
function Sr (line 7) | function Sr(t){t.use=function(t){var e=this._installedPlugins||(this._in...
function kr (line 7) | function kr(t){t.mixin=function(t){return this.options=Kt(this.options,t...
function Er (line 7) | function Er(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r...
function Ar (line 7) | function Ar(t){var e=t.options.props;for(var n in e)or(t.prototype,"_pro...
function Cr (line 7) | function Cr(t){var e=t.options.computed;for(var n in e)lr(t.prototype,n,...
function jr (line 7) | function jr(t){z.forEach(function(e){t[e]=function(t,n){return n?("compo...
function $r (line 7) | function $r(t){return t&&(t.Ctor.options.name||t.tag)}
function Tr (line 7) | function Tr(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"===type...
function Pr (line 7) | function Pr(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a...
function Lr (line 7) | function Lr(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstanc...
function Nr (line 7) | function Nr(t){var e={get:function(){return q}};Object.defineProperty(t,...
function Jr (line 7) | function Jr(t){var e=t.data,n=t,r=t;while(o(r.componentInstance))r=r.com...
function Yr (line 7) | function Yr(t,e){return{staticClass:Qr(t.staticClass,e.staticClass),clas...
function Xr (line 7) | function Xr(t,e){return o(t)||o(e)?Qr(t,Zr(e)):""}
function Qr (line 7) | function Qr(t,e){return t?e?t+" "+e:t:e||""}
function Zr (line 7) | function Zr(t){return Array.isArray(t)?to(t):s(t)?eo(t):"string"===typeo...
function to (line 7) | function to(t){for(var e,n="",r=0,i=t.length;r<i;r++)o(e=Zr(t[r]))&&""!=...
function eo (line 7) | function eo(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}
function ao (line 7) | function ao(t){return oo(t)?"svg":"math"===t?"math":void 0}
function so (line 7) | function so(t){if(!Y)return!0;if(io(t))return!1;if(t=t.toLowerCase(),nul...
function fo (line 7) | function fo(t){if("string"===typeof t){var e=document.querySelector(t);r...
function lo (line 7) | function lo(t,e){var n=document.createElement(t);return"select"!==t?n:(e...
function po (line 7) | function po(t,e){return document.createElementNS(no[t],e)}
function ho (line 7) | function ho(t){return document.createTextNode(t)}
function vo (line 7) | function vo(t){return document.createComment(t)}
function yo (line 7) | function yo(t,e,n){t.insertBefore(e,n)}
function mo (line 7) | function mo(t,e){t.removeChild(e)}
function go (line 7) | function go(t,e){t.appendChild(e)}
function bo (line 7) | function bo(t){return t.parentNode}
function _o (line 7) | function _o(t){return t.nextSibling}
function wo (line 7) | function wo(t){return t.tagName}
function xo (line 7) | function xo(t,e){t.textContent=e}
function Oo (line 7) | function Oo(t,e){t.setAttribute(e,"")}
function Eo (line 7) | function Eo(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.component...
function jo (line 7) | function jo(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.i...
function $o (line 7) | function $o(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n....
function To (line 7) | function To(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=...
function Po (line 7) | function Po(t){var e,n,a={},s=t.modules,u=t.nodeOps;for(e=0;e<Co.length;...
function Io (line 7) | function Io(t,e){(t.data.directives||e.data.directives)&&Ro(t,e)}
function Ro (line 7) | function Ro(t,e){var n,r,o,i=t===Ao,a=e===Ao,c=No(t.data.directives,t.co...
function No (line 7) | function No(t,e){var n,r,o=Object.create(null);if(!t)return o;for(n=0;n<...
function Fo (line 7) | function Fo(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{})...
function Do (line 7) | function Do(t,e,n,r,o){var i=t.def&&t.def[e];if(i)try{i(n.elm,t,n,r,o)}c...
function Uo (line 7) | function Uo(t,e){var n=e.componentOptions;if((!o(n)||!1!==n.Ctor.options...
function qo (line 7) | function qo(t,e,n){t.tagName.indexOf("-")>-1?Vo(t,e,n):Hr(e)?Kr(n)?t.rem...
function Vo (line 7) | function Vo(t,e,n){if(Kr(n))t.removeAttribute(e);else{if(tt&&!et&&"TEXTA...
function Bo (line 7) | function Bo(t,e){var n=e.elm,i=e.data,a=t.data;if(!(r(i.staticClass)&&r(...
function Yo (line 7) | function Yo(t){if(o(t[Ko])){var e=tt?"change":"input";t[e]=[].concat(t[K...
function Xo (line 7) | function Xo(t,e,n){var r=Go;return function o(){var i=e.apply(null,argum...
function Zo (line 7) | function Zo(t,e,n,r){if(Qo){var o=Wn,i=e;e=i._wrapper=function(t){if(t.t...
function ti (line 7) | function ti(t,e,n,r){(r||Go).removeEventListener(t,e._wrapper||e,n)}
function ei (line 7) | function ei(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=...
function oi (line 7) | function oi(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,i,a=...
function ii (line 7) | function ii(t,e){return!t.composing&&("OPTION"===t.tagName||ai(t,e)||ci(...
function ai (line 7) | function ai(t,e){var n=!0;try{n=document.activeElement!==t}catch(Oa){}re...
function ci (line 7) | function ci(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)retu...
function fi (line 7) | function fi(t){var e=li(t.style);return t.staticStyle?T(t.staticStyle,e):e}
function li (line 7) | function li(t){return Array.isArray(t)?P(t):"string"===typeof t?ui(t):t}
function pi (line 7) | function pi(t,e){var n,r={};if(e){var o=t;while(o.componentInstance)o=o....
function bi (line 7) | function bi(t,e){var n=e.data,i=t.data;if(!(r(n.staticStyle)&&r(n.style)...
function xi (line 7) | function xi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Oi (line 7) | function Oi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Si (line 7) | function Si(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&...
function Ii (line 7) | function Ii(t){Li(function(){Li(t)})}
function Ri (line 7) | function Ri(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n...
function Mi (line 7) | function Mi(t,e){t._transitionClasses&&g(t._transitionClasses,e),Oi(t,e)}
function Ni (line 7) | function Ni(t,e,n){var r=Di(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!...
function Di (line 7) | function Di(t,e){var n,r=window.getComputedStyle(t),o=(r[ji+"Delay"]||""...
function zi (line 7) | function zi(t,e){while(t.length<e.length)t=t.concat(t);return Math.max.a...
function Ui (line 7) | function Ui(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}
function qi (line 7) | function qi(t,e){var n=t.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function Vi (line 7) | function Vi(t,e){var n=t.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
function Hi (line 7) | function Hi(t){return"number"===typeof t&&!isNaN(t)}
function Bi (line 7) | function Bi(t){if(r(t))return!1;var e=t.fns;return o(e)?Bi(Array.isArray...
function Gi (line 7) | function Gi(t,e){!0!==e.data.show&&qi(e)}
function Qi (line 7) | function Qi(t,e,n){Zi(t,e,n),(tt||nt)&&setTimeout(function(){Zi(t,e,n)},0)}
function Zi (line 7) | function Zi(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){f...
function ta (line 7) | function ta(t,e){return e.every(function(e){return!M(e,t)})}
function ea (line 7) | function ea(t){return"_value"in t?t._value:t.value}
function na (line 7) | function na(t){t.target.composing=!0}
function ra (line 7) | function ra(t){t.target.composing&&(t.target.composing=!1,oa(t.target,"i...
function oa (line 7) | function oa(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,...
function ia (line 7) | function ia(t){return!t.componentInstance||t.data&&t.data.transition?t:i...
function ua (line 7) | function ua(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abst...
function fa (line 7) | function fa(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];...
function la (line 7) | function la(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{...
function pa (line 7) | function pa(t){while(t=t.parent)if(t.data.transition)return!0}
function da (line 7) | function da(t,e){return e.key===t.key&&e.tag===t.tag}
function ba (line 7) | function ba(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._ent...
function _a (line 7) | function _a(t){t.data.newPos=t.elm.getBoundingClientRect()}
function wa (line 7) | function wa(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-...
function o (line 7) | function o(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||vo...
function r (line 12) | function r(t,e){0}
function o (line 12) | function o(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}
function i (line 12) | function i(t,e){for(var n in e)t[n]=e[n];return t}
function c (line 12) | function c(t,e){switch(typeof e){case"undefined":return;case"object":ret...
function d (line 12) | function d(t,e,n){void 0===e&&(e={});var r,o=n||h;try{r=o(t||"")}catch(a...
function h (line 12) | function h(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.sp...
function v (line 12) | function v(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void ...
function m (line 12) | function m(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{...
function g (line 12) | function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"===typeo...
function _ (line 12) | function _(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}
function w (line 12) | function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;v...
function x (line 12) | function x(t,e){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(y...
function O (line 12) | function O(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t...
function S (line 12) | function S(t,e){return 0===t.path.replace(y,"/").indexOf(e.path.replace(...
function k (line 12) | function k(t,e){for(var n in e)if(!(n in t))return!1;return!0}
function $ (line 12) | function $(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defau...
function T (line 12) | function T(t){if(t)for(var e,n=0;n<t.length;n++){if(e=t[n],"a"===e.tag)r...
function P (line 12) | function P(t){if(!P.installed||E!==t){P.installed=!0,E=t;var e=function(...
function I (line 12) | function I(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"=...
function R (line 12) | function R(t){var e="",n="",r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.sli...
function M (line 12) | function M(t){return t.replace(/\/\//g,"/")}
function H (line 12) | function H(t,e){var n,r=[],o=0,i=0,a="",c=e&&e.delimiter||"/";while(null...
function B (line 12) | function B(t,e){return K(H(t,e))}
function G (line 12) | function G(t){return encodeURI(t).replace(/[\/?#]/g,function(t){return"%...
function W (line 12) | function W(t){return encodeURI(t).replace(/[?#]/g,function(t){return"%"+...
function K (line 12) | function K(t){for(var e=new Array(t.length),n=0;n<t.length;n++)"object"=...
function J (line 12) | function J(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function Y (line 12) | function Y(t){return t.replace(/([=!:$\/()])/g,"\\$1")}
function X (line 12) | function X(t,e){return t.keys=e,t}
function Q (line 12) | function Q(t){return t.sensitive?"":"i"}
function Z (line 12) | function Z(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.l...
function tt (line 12) | function tt(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push(rt(t[o],e,n).s...
function et (line 12) | function et(t,e,n){return nt(H(t,n),e,n)}
function nt (line 12) | function nt(t,e,n){N(e)||(n=e||n,e=[]),n=n||{};for(var r=n.strict,o=!1!=...
function rt (line 12) | function rt(t,e,n){return N(e)||(n=e||n,e=[]),n=n||{},t instanceof RegEx...
function it (line 12) | function it(t,e,n){e=e||{};try{var r=ot[t]||(ot[t]=F.compile(t));return ...
function at (line 12) | function at(t,e,n,r){var o=e||[],i=n||Object.create(null),a=r||Object.cr...
function ct (line 12) | function ct(t,e,n,r,o,i){var a=r.path,c=r.name;var s=r.pathToRegexpOptio...
function st (line 12) | function st(t,e){var n=F(t,[],e);return n}
function ut (line 12) | function ut(t,e,n){return n||(t=t.replace(/\/$/,"")),"/"===t[0]?t:null==...
function ft (line 12) | function ft(t,e,n,r){var o="string"===typeof t?{path:t}:t;if(o._normaliz...
function lt (line 12) | function lt(t,e){var n=at(t),r=n.pathList,o=n.pathMap,i=n.nameMap;functi...
function pt (line 12) | function pt(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(va...
function dt (line 12) | function dt(t,e){return I(t,e.parent?e.parent.path:"/",!0)}
function vt (line 12) | function vt(){var t=window.location.protocol+"//"+window.location.host,e...
function yt (line 12) | function yt(t,e,n,r){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$...
function mt (line 12) | function mt(){var t=jt();t&&(ht[t]={x:window.pageXOffset,y:window.pageYO...
function gt (line 12) | function gt(){var t=jt();if(t)return ht[t]}
function bt (line 12) | function bt(t,e){var n=document.documentElement,r=n.getBoundingClientRec...
function _t (line 12) | function _t(t){return Ot(t.x)||Ot(t.y)}
function wt (line 12) | function wt(t){return{x:Ot(t.x)?t.x:window.pageXOffset,y:Ot(t.y)?t.y:win...
function xt (line 12) | function xt(t){return{x:Ot(t.x)?t.x:0,y:Ot(t.y)?t.y:0}}
function Ot (line 12) | function Ot(t){return"number"===typeof t}
function St (line 12) | function St(t,e){var n="object"===typeof t;if(n&&"string"===typeof t.sel...
function Ct (line 12) | function Ct(){return Et.now().toFixed(3)}
function jt (line 12) | function jt(){return At}
function $t (line 12) | function $t(t){At=t}
function Tt (line 12) | function Tt(t,e){mt();var n=window.history;try{e?n.replaceState({key:At}...
function Pt (line 12) | function Pt(t){Tt(t,!0)}
function Lt (line 12) | function Lt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],functio...
function It (line 12) | function It(t){return function(e,n,r){var i=!1,a=0,c=null;Rt(t,function(...
function Rt (line 12) | function Rt(t,e){return Mt(t.map(function(t){return Object.keys(t.compon...
function Mt (line 12) | function Mt(t){return Array.prototype.concat.apply([],t)}
function Ft (line 12) | function Ft(t){return t.__esModule||Nt&&"Module"===t[Symbol.toStringTag]}
function Dt (line 12) | function Dt(t){var e=!1;return function(){var n=[],r=arguments.length;wh...
function Ut (line 12) | function Ut(t){if(!t)if(L){var e=document.querySelector("base");t=e&&e.g...
function qt (line 12) | function qt(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n<r;n++)if(...
function Vt (line 12) | function Vt(t,e,n,r){var o=Rt(t,function(t,r,o,i){var a=Ht(t,e);if(a)ret...
function Ht (line 12) | function Ht(t,e){return"function"!==typeof t&&(t=E.extend(t)),t.options[e]}
function Bt (line 12) | function Bt(t){return Vt(t,"beforeRouteLeave",Wt,!0)}
function Gt (line 12) | function Gt(t){return Vt(t,"beforeRouteUpdate",Wt)}
function Wt (line 12) | function Wt(t,e){if(e)return function(){return t.apply(e,arguments)}}
function Kt (line 12) | function Kt(t,e,n){return Vt(t,"beforeRouteEnter",function(t,r,o,i){retu...
function Jt (line 12) | function Jt(t,e,n,r,o){return function(i,a,c){return t(i,a,function(t){"...
function Yt (line 12) | function Yt(t,e,n,r){e[n]&&!e[n]._isBeingDestroyed?t(e[n]):r()&&setTimeo...
function e (line 12) | function e(e,n){var r=this;t.call(this,e,n);var o=e.options.scrollBehavi...
function Qt (line 12) | function Qt(t){var e=decodeURI(window.location.pathname);return t&&0===e...
function e (line 12) | function e(e,n,r){t.call(this,e,n),r&&te(this.base)||ee()}
function te (line 12) | function te(t){var e=Qt(t);if(!/^\/#/.test(e))return window.location.rep...
function ee (line 12) | function ee(){var t=ne();return"/"===t.charAt(0)||(ie("/"+t),!1)}
function ne (line 12) | function ne(){var t=window.location.href,e=t.indexOf("#");if(e<0)return"...
function re (line 12) | function re(t){var e=window.location.href,n=e.indexOf("#"),r=n>=0?e.slic...
function oe (line 12) | function oe(t){kt?Tt(re(t)):window.location.hash=t}
function ie (line 12) | function ie(t){kt?Pt(re(t)):window.location.replace(re(t))}
function e (line 12) | function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}
function ue (line 12) | function ue(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t....
function fe (line 12) | function fe(t,e,n){var r="hash"===n?"#"+e:e;return t?M(t+"/"+r):r}
function s (line 12) | function s(t,e,n,r){var o=e&&e.prototype instanceof v?e:v,i=Object.creat...
function u (line 12) | function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){ret...
function v (line 12) | function v(){}
function y (line 12) | function y(){}
function m (line 12) | function m(){}
function x (line 12) | function x(t){["next","throw","return"].forEach(function(e){t[e]=functio...
function O (line 12) | function O(t){function e(n,o,i,a){var c=u(t[n],t,o);if("throw"!==c.type)...
function S (line 12) | function S(t,e,n){var r=f;return function(o,i){if(r===p)throw new Error(...
function k (line 12) | function k(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,...
function E (line 12) | function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.f...
function A (line 12) | function A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.comp...
function C (line 12) | function C(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.r...
function j (line 12) | function j(t){if(t){var n=t[i];if(n)return n.call(t);if("function"===typ...
function $ (line 12) | function $(){return{value:e,done:!0}}
function o (line 12) | function o(r,o){return c.type="throw",c.arg=t,n.next=r,o&&(n.method="nex...
function y (line 12) | function y(t,e,r,i,a,c){var s=r+t.length,u=i.length,f=d;return void 0!==...
function o (line 12) | function o(t,e){if(void 0===t||null===t)throw new TypeError("Cannot conv...
function d (line 12) | function d(t){if("string"!==typeof t)throw new TypeError("Expected a str...
function v (line 12) | function v(t){if("string"!==typeof t)throw new TypeError("Expected a str...
function y (line 12) | function y(t,e){if("string"!==typeof t)throw new TypeError("Expected a s...
function m (line 12) | function m(t,e){var n=arguments.length>2&&void 0!==arguments[2]?argument...
function g (line 12) | function g(t){return!0===t.ios?"ios":!0===t.android?"android":!0===t.win...
function b (line 12) | function b(t,e){var n=t.is,r=t.has,o=t.within,i=[n.desktop?"desktop":"mo...
function _ (line 12) | function _(t,e){var n=b(t,e);!0===t.is.ie&&11===t.is.versionNumber?n.for...
function w (line 12) | function w(t){for(var e in t)m(e,t[e])}
function $ (line 12) | function $(t){for(var e=1;e<arguments.length;e++)if(e%2){var n=null!=arg...
function o (line 12) | function o(t,e,n){return e in t?r(t,e,{value:n,enumerable:!0,configurabl...
function i (line 12) | function i(t){return 0===t.button}
function a (line 12) | function a(t){return t.touches&&t.touches[0]?t=t.touches[0]:t.changedTou...
function c (line 12) | function c(t){if(t.path)return t.path;if(t.composedPath)return t.compose...
function f (line 12) | function f(t){var e=t.deltaX,n=t.deltaY;if((e||n)&&t.deltaMode){var r=1=...
function l (line 12) | function l(t){t.stopPropagation()}
function p (line 12) | function p(t){!1!==t.cancelable&&t.preventDefault()}
function d (line 12) | function d(t){!1!==t.cancelable&&t.preventDefault(),t.stopPropagation()}
function h (line 12) | function h(t,e){if(void 0!==t&&(!0!==e||!0!==t.__dragPrevented)){var n=!...
function v (line 12) | function v(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[...
function o (line 12) | function o(t,e,n,o,i,a,c){try{var s=t[a](c),u=s.value}catch(f){return vo...
function i (line 12) | function i(t){return function(){var e=this,n=arguments;return new r(func...
FILE: quasar.conf.js
method extendWebpack (line 36) | extendWebpack (cfg) {
Condensed preview — 76 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (983K chars).
[
{
"path": ".gitignore",
"chars": 162,
"preview": ".DS_Store\n.Thumbs.db\n/node_modules\n/*.log\n.editorconfig\n.eslint*\n.stylint*\ncordova\n*.sublime*\n.idea/\ndebug.log\nyarn.lock"
},
{
"path": ".postcssrc.js",
"chars": 200,
"preview": "// https://github.com/michael-ciniawsky/postcss-load-config\n\nmodule.exports = {\n plugins: [\n // to edit target brows"
},
{
"path": "LICENSE",
"chars": 1075,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2018 Stormseed\n\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "babel.config.js",
"chars": 69,
"preview": "module.exports = {\n presets: [\n '@quasar/babel-preset-app'\n ]\n}\n"
},
{
"path": "boot/qcalendar.js",
"chars": 382,
"preview": "import {\n QCalendar,\n QCalendarMonth,\n QCalendarMultiDay,\n QCalendarAgenda\n} from '@quasar/quasar-app-extension-qcal"
},
{
"path": "component/calendar/fields/index.js",
"chars": 225,
"preview": "// import FieldDate from './FieldDate'\n// import FieldTime from './FieldTime'\nimport QuasarFieldDate from './quasar/Fiel"
},
{
"path": "component/calendar/fields/quasar/DateTimeMixin.js",
"chars": 2288,
"preview": "import DateTime from 'luxon/src/datetime'\nexport default {\n props: {\n value: { required: true },\n placeholder: St"
},
{
"path": "component/calendar/fields/quasar/FieldDate.vue",
"chars": 937,
"preview": "<template>\n <q-input\n v-if=\"stringValue\"\n v-bind:value=\"fakieStringValue\"\n :placeholder=\"placeholder\"\n :lab"
},
{
"path": "component/calendar/fields/quasar/FieldTime.vue",
"chars": 943,
"preview": "<template>\n <q-input\n v-if=\"stringValue\"\n v-bind:value=\"fakieStringValue\"\n :placeholder=\"placeholder\"\n :lab"
},
{
"path": "component/calendar/mixins/code/CalendarEventMixin.js",
"chars": 20877,
"preview": "import dashHas from 'lodash.has'\nimport DateTime from 'luxon/src/datetime'\nimport Interval from 'luxon/src/interval'\ncon"
},
{
"path": "component/calendar/mixins/code/CalendarMixin.js",
"chars": 10785,
"preview": "import dashHas from 'lodash.has'\nimport DateTime from 'luxon/src/datetime'\n// const debug = require('debug')('calendar:C"
},
{
"path": "component/calendar/mixins/code/CalendarParentComponentMixin.js",
"chars": 1249,
"preview": "// this file contains shared properties for Calendar, CalendarAgenda, CalendarMonth and CalendarMultiday\nimport DateTime"
},
{
"path": "component/calendar/mixins/code/EventPropsMixin.js",
"chars": 855,
"preview": "import DateTime from 'luxon/src/datetime'\nexport default {\n props: {\n eventObject: {\n type: Object,\n defau"
},
{
"path": "component/calendar/mixins/code/index.js",
"chars": 321,
"preview": "import CalendarEventMixin from './CalendarEventMixin'\nimport CalendarMixin from './CalendarMixin'\nimport CalendarParentC"
},
{
"path": "component/calendar/mixins/index.js",
"chars": 1181,
"preview": "import {\n CalendarEventMixin,\n CalendarMixin,\n CalendarParentComponentMixin,\n EventPropsMixin\n} from './code'\nimport"
},
{
"path": "component/calendar/mixins/template/Calendar.js",
"chars": 1816,
"preview": "const debug = require('debug')('calendar:Calendar')\n\nexport default {\n props: {\n startDate: {\n type: [Object, D"
},
{
"path": "component/calendar/mixins/template/CalendarAgenda.js",
"chars": 3198,
"preview": "const debug = require('debug')('calendar:CalendarAgenda')\n\nexport default {\n props: {\n agendaStyle: {\n type: St"
},
{
"path": "component/calendar/mixins/template/CalendarAgendaEvent.js",
"chars": 1385,
"preview": "const debug = require('debug')('calendar:CalendarAgendaEvent')\n\nexport default {\n props: {\n agendaStyle: {\n typ"
},
{
"path": "component/calendar/mixins/template/CalendarAgendaInner.js",
"chars": 3198,
"preview": "const debug = require('debug')('calendar:CalendarAgenda')\n\nexport default {\n props: {\n agendaStyle: {\n type: St"
},
{
"path": "component/calendar/mixins/template/CalendarAllDayEvents.js",
"chars": 1149,
"preview": "const debug = require('debug')('calendar:CalendarAllDayEvents')\n\nexport default {\n props: {\n startDate: {\n type"
},
{
"path": "component/calendar/mixins/template/CalendarDayColumn.js",
"chars": 5933,
"preview": "import DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:CalendarDayColumn')\n\nexport default "
},
{
"path": "component/calendar/mixins/template/CalendarDayLabels.js",
"chars": 1884,
"preview": "import DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:CalendarDayLabels')\n\nexport default "
},
{
"path": "component/calendar/mixins/template/CalendarEvent.js",
"chars": 3281,
"preview": "import dashHas from 'lodash.has'\n\nconst debug = require('debug')('calendar:CalendarEvent')\n\nexport default {\n props: {\n"
},
{
"path": "component/calendar/mixins/template/CalendarEventDetail.js",
"chars": 5888,
"preview": "import dashHas from 'lodash.has'\nimport DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:Cal"
},
{
"path": "component/calendar/mixins/template/CalendarHeaderNav.js",
"chars": 652,
"preview": "const debug = require('debug')('calendar:CalendarHeaderNav')\n\nexport default {\n props: {\n timePeriodUnit: {\n ty"
},
{
"path": "component/calendar/mixins/template/CalendarMonth.js",
"chars": 5107,
"preview": "import DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:CalendarMonth')\n\nexport default {\n "
},
{
"path": "component/calendar/mixins/template/CalendarMonthInner.js",
"chars": 4735,
"preview": "import DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:CalendarMonthInner')\n\nexport default"
},
{
"path": "component/calendar/mixins/template/CalendarMultiDay.js",
"chars": 5364,
"preview": "// import {animScrollTo} from \"quasar/src/utils/scroll\";\n\nconst debug = require('debug')('calendar:CalendarMultiDay')\n//"
},
{
"path": "component/calendar/mixins/template/CalendarMultiDayContent.js",
"chars": 5962,
"preview": "// import {animScrollTo} from \"quasar/src/utils/scroll\";\n\nconst debug = require('debug')('calendar:CalendarMultiDayConte"
},
{
"path": "component/calendar/mixins/template/CalendarTimeLabelColumn.js",
"chars": 714,
"preview": "import DateTime from 'luxon/src/datetime'\n\nconst debug = require('debug')('calendar:CalendarTimeLabelColumn')\n\nexport de"
},
{
"path": "component/calendar/mixins/template/index.js",
"chars": 1382,
"preview": "import CalendarTemplateMixin from './Calendar'\nimport CalendarAgendaTemplateMixin from './CalendarAgenda'\nimport Calenda"
},
{
"path": "component/calendar/plugin/Calendar.json",
"chars": 2474,
"preview": "{\n \"mixins\": [\n\n ],\n\n \"injection\": \"$q.quasarCalendar\",\n\n \"methods\": {\n \"create\": {\n \"desc\": \"INSERT DESCRIP"
},
{
"path": "component/calendar/styles-common/app.styl",
"chars": 32,
"preview": ".wtf-is-this\n font-weight bold\n"
},
{
"path": "component/calendar/styles-common/calendar.vars.styl",
"chars": 1835,
"preview": "$grayLight = #bdbdbd\n$grayLighter = #eeeeee\n$grayLightest = #f5f5f5\n\n$sevenCellWidth = 14.285%\n$cellHeight = 8em\n$border"
},
{
"path": "component/calendar/templates/quasar/Calendar.json",
"chars": 2394,
"preview": "{\n \"type\": \"component\",\n \"props\": {\n \"start-date\": {\n \"type\": [\n \"Date\",\n \"DateTime\"\n ],\n "
},
{
"path": "component/calendar/templates/quasar/Calendar.vue",
"chars": 5270,
"preview": "<template>\n <div class=\"calendar-test\">\n <q-tabs\n v-model=\"currentTab\"\n class=\"text-primary calendar-tabs\""
},
{
"path": "component/calendar/templates/quasar/CalendarAgenda.json",
"chars": 2393,
"preview": "{\n \"type\": \"component\",\n \"props\": {\n \"start-date\": {\n \"type\": [\n \"Date\",\n \"DateTime\"\n ],\n "
},
{
"path": "component/calendar/templates/quasar/CalendarAgenda.vue",
"chars": 2604,
"preview": "<template>\n <div class=\"calendar-test\">\n <calendar-agenda-inner\n :agenda-style=\"agendaStyle\"\n :num-days=\"n"
},
{
"path": "component/calendar/templates/quasar/CalendarEventDetail.vue",
"chars": 12740,
"preview": "<template>\n\n <q-dialog\n v-model=\"modalIsOpen\"\n class=\"NOcalendar-event-detail\"\n @hide=\"__close()\"\n @escape-"
},
{
"path": "component/calendar/templates/quasar/CalendarHeaderNav.vue",
"chars": 1046,
"preview": "<template>\n <div class=\"calendar-header flex-col-auto flex-row flex-justify-between flex-items-center\">\n <div class="
},
{
"path": "component/calendar/templates/quasar/CalendarMonth.json",
"chars": 2059,
"preview": "{\n \"type\": \"component\",\n \"props\": {\n \"start-date\": {\n \"type\": [\n \"Date\",\n \"DateTime\"\n ],\n "
},
{
"path": "component/calendar/templates/quasar/CalendarMonth.vue",
"chars": 2060,
"preview": "<template>\n <div class=\"calendar-month\">\n <calendar-month-inner\n :start-date=\"startDate\"\n :event-array=\"ev"
},
{
"path": "component/calendar/templates/quasar/CalendarMultiDay.json",
"chars": 3055,
"preview": "{\n \"type\": \"component\",\n \"props\": {\n \"start-date\": {\n \"type\": [\n \"Date\",\n \"DateTime\"\n ],\n "
},
{
"path": "component/calendar/templates/quasar/CalendarMultiDay.vue",
"chars": 4059,
"preview": "<template>\n <div class=\"calendar-multi-day-component flex-column fit flex-no-wrap\">\n <!-- week nav -->\n <template"
},
{
"path": "component/calendar/templates/quasar/index.js",
"chars": 763,
"preview": "// common templates\nimport {\n CalendarAgendaEvent,\n CalendarAllDayEvents,\n CalendarDayColumn,\n CalendarDayLabels,\n "
},
{
"path": "component/index.js",
"chars": 285,
"preview": "import {\n Calendar,\n CalendarAgenda,\n CalendarMonth,\n CalendarMultiDay\n} from './calendar/templates/quasar'\n\nexport "
},
{
"path": "component/quasar.js",
"chars": 313,
"preview": "import {\n Calendar as DaykeepCalendar,\n CalendarAgenda as DaykeepCalendarAgenda,\n CalendarMonth as DaykeepCalendarMon"
},
{
"path": "demo/App.vue",
"chars": 148,
"preview": "<template>\n <div id=\"q-app\">\n <router-view />\n </div>\n</template>\n\n<script>\n export default {\n name: 'App'\n }\n"
},
{
"path": "demo/boot/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "demo/css/app.styl",
"chars": 18,
"preview": "// app global css\n"
},
{
"path": "demo/css/quasar.variables.styl",
"chars": 572,
"preview": "// Quasar Stylus Variables\n// --------------------------------------------------\n// To customize the look and feel of th"
},
{
"path": "demo/index.js",
"chars": 38,
"preview": "export * from '../component/calendar'\n"
},
{
"path": "demo/index.template.html",
"chars": 771,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"description\" content=\"<%= htmlWebpackPlug"
},
{
"path": "demo/layouts/LayoutDefault.vue",
"chars": 1002,
"preview": "<template>\n <q-layout view=\"lHh Lpr lFf\">\n <q-header>\n <q-toolbar>\n\n <q-toolbar-title>\n {{ cale"
},
{
"path": "demo/pages/Error404.vue",
"chars": 438,
"preview": "<template>\n <div class=\"fixed-center text-center\">\n <p>\n <img\n src=\"~assets/sad.svg\"\n style=\"widt"
},
{
"path": "demo/pages/index.vue",
"chars": 5012,
"preview": "<template>\n <q-page padding class=\"row NOflex NOflex-center\">\n <div>\n <q-option-group\n v-model=\"showCard"
},
{
"path": "demo/pages/page-mixins/move-dates.js",
"chars": 3162,
"preview": "import {\n date\n} from 'quasar'\nimport { sampleDateAdjustments } from './sample-data'\nimport dashHas from 'lodash.has'\n\n"
},
{
"path": "demo/pages/page-mixins/sample-data.js",
"chars": 8537,
"preview": "const sampleEventArray = [\n {\n id: 1,\n summary: 'Test event',\n description: 'Some extra info goes here',\n l"
},
{
"path": "demo/router/index.js",
"chars": 602,
"preview": "import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\nimport routes from './routes'\n\nVue.use(VueRouter)\n\n/*\n * If no"
},
{
"path": "demo/router/routes.js",
"chars": 365,
"preview": "\nconst routes = [\n {\n path: '/',\n component: () => import('layouts/LayoutDefault.vue'),\n children: [\n { p"
},
{
"path": "docs/css/942ad096.eacf1890.css",
"chars": 11631,
"preview": ".calendar-agenda-event-empty-slot{display:none;background:green}.calendar-agenda-event-dot-style{width:100%;background-c"
},
{
"path": "docs/css/app.54118af7.css",
"chars": 231567,
"preview": "@font-face{font-family:Roboto;font-style:normal;font-weight:100;src:url(../fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff) "
},
{
"path": "docs/index.html",
"chars": 1479,
"preview": "<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=description content=\"A full display calendar for the Q"
},
{
"path": "docs/js/116eebfe.60111037.js",
"chars": 16349,
"preview": "(window[\"webpackJsonp\"]=window[\"webpackJsonp\"]||[]).push([[\"116eebfe\"],{\"0831\":function(t,e,i){\"use strict\";i.d(e,\"c\",fu"
},
{
"path": "docs/js/942ad096.e9c588f2.js",
"chars": 336023,
"preview": "(window[\"webpackJsonp\"]=window[\"webpackJsonp\"]||[]).push([[\"942ad096\"],{\"0831\":function(t,e,n){\"use strict\";n.d(e,\"c\",fu"
},
{
"path": "docs/js/app.699aeeff.js",
"chars": 2180,
"preview": "(window[\"webpackJsonp\"]=window[\"webpackJsonp\"]||[]).push([[\"app\"],{0:function(e,n,a){e.exports=a(\"2f39\")},\"2f39\":functio"
},
{
"path": "docs/js/f22ee960.70e2404b.js",
"chars": 12366,
"preview": "(window[\"webpackJsonp\"]=window[\"webpackJsonp\"]||[]).push([[\"f22ee960\"],{\"5a6e\":function(M,j,I){\"use strict\";I.r(j);var g"
},
{
"path": "docs/js/runtime.14845b32.js",
"chars": 3251,
"preview": "(function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,s=[];f<i.length;f++)o=i[f],a[o]&&s.push(a[o][0]),a[o]=0;"
},
{
"path": "docs/js/vendor.4fc4c185.js",
"chars": 168864,
"preview": "(window[\"webpackJsonp\"]=window[\"webpackJsonp\"]||[]).push([[\"vendor\"],{\"01f9\":function(t,e,n){\"use strict\";var r=n(\"2d00\""
},
{
"path": "package.json",
"chars": 1718,
"preview": "{\n \"name\": \"@daykeep/calendar-quasar\",\n \"version\": \"1.0.0-beta.3\",\n \"productName\": \"Daykeep Calendar for Quasar\",\n \""
},
{
"path": "quasar.conf.js",
"chars": 2184,
"preview": "// Configuration for your app\nconst path = require('path')\nconst CopyPlugin = require('copy-webpack-plugin')\n\nmodule.exp"
},
{
"path": "quasar.extensions.json",
"chars": 192,
"preview": "{\n \"@quasar/dotenv\": {\n \"env_development\": \".env.dev\",\n \"env_production\": \".env\",\n \"common_root_object\": \"none"
},
{
"path": "readme.md",
"chars": 9300,
"preview": "# Daykeep Calendar\nAn event display calendar for the Quasar framework. \n\n. The extraction includes 76 files (932.0 KB), approximately 306.2k tokens, and a symbol index with 1085 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.