{"version":3,"sources":["components/calendar2.js","components/calendarSourceBase2.js","components/calendarSource2.js","components/calendarSourceGoogle2.js","components/calendarEvent2.js"],"names":["dmx","Component","initialData","title","activeStart","activeEnd","currentStart","currentEnd","attributes","timezone","type","String","default","locale","undefined","date","height","aspectRatio","Number","view","views","theme","enum","hideNonCurrentDates","Boolean","selectable","editable","longPressDelay","noEventOverlap","businessHours","Object","Array","eventOrder","eventLimit","nowIndicator","viewsOptions","eventConstraint","selectConstraint","googleCalendarApiKey","bsTooltip","bsTooltipPlacement","bsTooltipTitle","bsTooltipHtml","config","methods","gotoDate","this","_calendar","updateSize","prev","next","prevYear","nextYear","today","events","dateclick","MouseEvent","eventclick","eventmouseenter","eventmouseleave","eventdrop","Event","eventresize","select","render","node","FullCalendar","Calendar","timeZone","props","navigator","language","initialDate","initialView","themeSystem","showNonCurrentDates","eventOverlap","dayMaxEventRows","datesSet","_datesSet","bind","dateClick","_dateClick","eventClick","_eventClick","eventMouseEnter","_eventMouseEnter","eventMouseLeave","_eventMouseLeave","eventDrop","_eventDrop","eventResize","_eventResize","eventDidMount","_eventDidMount","eventWillUnmount","_eventWillUnmount","_select","headerToolbar","start","center","end","toString","$parse","innerHTML","performUpdate","updatedProps","batchRendering","has","changeView","setOption","destroy","$parseAttributes","BaseComponent","prototype","call","_businessHours","dom","getAttributes","forEach","attr","name","$watch","value","key","keys","modifiers","values","viewOptionsMappings","day","week","list","startsWith","slice","_getEventData","event","id","startStr","endStr","allDay","extendedProps","_parseDate","utc","year","month","dateInfo","set","dateClickInfo","dispatchEvent","jsEvent","dateStr","preventDefault","eventClickInfo","cancelled","source","child","children","mouseEnterInfo","mouseLeaveInfo","eventDropInfo","oldEvent","eventResizeInfo","info","window","bootstrap","scope","DataScope","options","placement","parse","html","Tooltip","VERSION","$","el","tooltip","getInstance","dispose","selectionInfo","color","backgroundColor","borderColor","textColor","className","overlap","constraint","display","refetch","_refetch","init","parent","_baseProps","getEventSourceById","extends","eventId","eventTitle","eventUrl","eventStart","eventEnd","eventAllDay","eventDaysOfWeek","eventStartTime","eventEndTime","eventStartRecur","eventEndRecur","eventGroupId","eventDisplay","eventColor","eventBackgroundColor","eventBorderColor","eventTextColor","eventClassName","eventEditable","eventExtendedProps","addEventSource","_parseEvents","remove","success","failure","_events","isArray","repeatItems","data","prop","toLowerCase","push","hasOwnProperty","googleCalendarId","url","daysOfWeek","startTime","endTime","startRecur","endRecur","groupId"],"mappings":"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","file":"dmxCalendar.js","sourcesContent":["dmx.Component('calendar', {\r\n\r\n initialData: {\r\n title: '',\r\n activeStart: null,\r\n activeEnd: null,\r\n currentStart: null,\r\n currentEnd: null,\r\n },\r\n\r\n attributes: {\r\n timezone: {\r\n type: String,\r\n default: 'local',\r\n // local and UTC, for named timezones use moment-timezone or luxon plugin\r\n // https://fullcalendar.io/docs/timeZone#named-time-zones\r\n },\r\n \r\n locale: {\r\n type: String,\r\n default: undefined,\r\n // https://fullcalendar.io/docs/locale\r\n },\r\n\r\n date: {\r\n type: String,\r\n default: undefined,\r\n // https://fullcalendar.io/docs/initialDate\r\n },\r\n\r\n height: {\r\n type: String,\r\n default: undefined,\r\n // https://fullcalendar.io/docs/height\r\n },\r\n\r\n aspectRatio: {\r\n type: Number,\r\n default: 1.35,\r\n // https://fullcalendar.io/docs/aspectRatio\r\n },\r\n\r\n view: {\r\n // dayGridMonth, dayGridWeek, dayGridDay, dayGridYear\r\n // timeGridWeek, timeGridDay\r\n // listDay, listWeek, listMonth, listYear\r\n // multiMonthYear\r\n // timelineDay, timelineWeek, timelineMonth, timelineYear\r\n // resourceTimeGridDay\r\n type: String,\r\n default: 'dayGridMonth',\r\n // https://fullcalendar.io/docs/initialView\r\n },\r\n\r\n views: {\r\n type: String,\r\n default: '',\r\n // used in headerToolbar\r\n },\r\n\r\n theme: {\r\n type: String,\r\n default: 'standard',\r\n enum: ['standard', 'bootstrap', 'bootstrap5'],\r\n // https://fullcalendar.io/docs/themeSystem\r\n },\r\n\r\n hideNonCurrentDates: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/showNonCurrentDates\r\n },\r\n\r\n selectable: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/selectable\r\n },\r\n\r\n editable: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/editable\r\n },\r\n\r\n longPressDelay: {\r\n type: Number,\r\n default: 1000,\r\n // https://fullcalendar.io/docs/longPressDelay\r\n },\r\n\r\n noEventOverlap: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/eventOverlap\r\n },\r\n\r\n businessHours: {\r\n type: [Boolean, Object, Array],\r\n default: false,\r\n // https://fullcalendar.io/docs/businessHours\r\n },\r\n\r\n /* Use fixedWeekCount on month/multimonth view options instead\r\n noFixedWeekCount: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/fixedWeekCount\r\n },\r\n */\r\n\r\n eventOrder: {\r\n type: String,\r\n default: 'start,-duration,allDay,title',\r\n // https://fullcalendar.io/docs/eventOrder\r\n },\r\n\r\n eventLimit: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/eventLimit\r\n },\r\n\r\n nowIndicator: {\r\n type: Boolean,\r\n default: false,\r\n // https://fullcalendar.io/docs/nowIndicator\r\n },\r\n\r\n viewsOptions: {\r\n type: Object,\r\n default: {},\r\n // https://fullcalendar.io/docs/view-specific-options\r\n },\r\n\r\n eventConstraint: {\r\n type: [String, Object],\r\n default: null,\r\n // https://fullcalendar.io/docs/eventConstraint\r\n },\r\n\r\n selectConstraint: {\r\n type: [String, Object],\r\n default: null,\r\n // https://fullcalendar.io/docs/selectConstraint\r\n },\r\n\r\n googleCalendarApiKey: {\r\n type: String,\r\n default: '',\r\n // https://fullcalendar.io/docs/google-calendar\r\n },\r\n\r\n bsTooltip: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n bsTooltipPlacement: {\r\n type: String,\r\n default: '\"top\"',\r\n },\r\n\r\n bsTooltipTitle: {\r\n type: String,\r\n default: 'event.extendedProps.description || event.title',\r\n },\r\n\r\n bsTooltipHtml: {\r\n type: String,\r\n default: 'false',\r\n },\r\n\r\n // allow extending the config\r\n config: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n // TODO: constraint\r\n },\r\n\r\n methods: {\r\n gotoDate (date) {\r\n this._calendar.gotoDate(date);\r\n },\r\n\r\n updateSize () {\r\n this._calendar.updateSize();\r\n },\r\n\r\n prev () {\r\n this._calendar.prev();\r\n },\r\n\r\n next () {\r\n this._calendar.next();\r\n },\r\n\r\n prevYear () {\r\n this._calendar.prevYear();\r\n },\r\n\r\n nextYear () {\r\n this._calendar.nextYear();\r\n },\r\n\r\n today () {\r\n this._calendar.today();\r\n },\r\n },\r\n\r\n events: {\r\n dateclick: MouseEvent, // interaction plugin\r\n eventclick: MouseEvent,\r\n eventmouseenter: MouseEvent,\r\n eventmouseleave: MouseEvent,\r\n eventdrop: Event,\r\n eventresize: Event,\r\n select: Event,\r\n },\r\n\r\n render (node) {\r\n this._calendar = new FullCalendar.Calendar(node, {\r\n timeZone: this.props.timezone,\r\n locale: this.props.locale || navigator.language,\r\n initialDate: this.props.date,\r\n initialView: this.props.view,\r\n height: this.props.height, // TODO: check if this is a valid value and convert number when needed\r\n aspectRatio: this.props.aspectRatio,\r\n themeSystem: this.props.theme,\r\n showNonCurrentDates: !this.props.hideNonCurrentDates,\r\n selectable: this.props.selectable,\r\n editable: this.props.editable,\r\n longPressDelay: this.props.longPressDelay,\r\n eventOrder: this.props.eventOrder,\r\n eventOverlap: !this.props.noEventOverlap,\r\n eventConstraint: this.props.eventConstraint,\r\n selectConstraint: this.props.selectConstraint,\r\n businessHours: typeof this.props.businessHours == 'string' ? this.props.businessHours != 'false' : this.props.businessHours,\r\n dayMaxEventRows: this.props.eventLimit,\r\n nowIndicator: this.props.nowIndicator,\r\n googleCalendarApiKey: this.props.googleCalendarApiKey,\r\n views: this.props.viewsOptions,\r\n\r\n // callbacks\r\n datesSet: this._datesSet.bind(this), // https://fullcalendar.io/docs/datesSet (previously datesRender)\r\n dateClick: this._dateClick.bind(this), // https://fullcalendar.io/docs/dateClick\r\n eventClick: this._eventClick.bind(this), // https://fullcalendar.io/docs/eventClick\r\n eventMouseEnter: this._eventMouseEnter.bind(this), // https://fullcalendar.io/docs/eventMouseEnter\r\n eventMouseLeave: this._eventMouseLeave.bind(this), // https://fullcalendar.io/docs/eventMouseLeave\r\n eventDrop: this._eventDrop.bind(this), // https://fullcalendar.io/docs/eventDrop\r\n eventResize: this._eventResize.bind(this), // https://fullcalendar.io/docs/eventResize\r\n eventDidMount: this._eventDidMount.bind(this), // https://fullcalendar.io/docs/event-render-hooks\r\n eventWillUnmount: this._eventWillUnmount.bind(this), // https://fullcalendar.io/docs/event-render-hooks\r\n select: this._select.bind(this), // https://fullcalendar.io/docs/select-callback\r\n\r\n headerToolbar: {\r\n start: 'today prev,next',\r\n center: 'title',\r\n end: this.props.views.toString(),\r\n },\r\n\r\n ...this.props.config,\r\n });\r\n\r\n this.$parse();\r\n \r\n node.innerHTML = '';\r\n\r\n this._calendar.render();\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n this._calendar.batchRendering(() => {\r\n if (updatedProps.has('date')) {\r\n this._calendar.gotoDate(this.props.date);\r\n }\r\n\r\n if (updatedProps.has('view')) {\r\n this._calendar.changeView(this.props.view);\r\n }\r\n\r\n if (updatedProps.has('theme')) {\r\n this._calendar.setOption('themeSystem', this.props.theme);\r\n }\r\n\r\n if (updatedProps.has('height')) {\r\n this._calendar.setOption('height', this.props.height);\r\n }\r\n\r\n if (updatedProps.has('aspectRatio')) {\r\n this._calendar.setOption('aspectRatio', this.props.aspectRatio);\r\n }\r\n\r\n if (updatedProps.has('hideNonCurrentDates')) {\r\n this._calendar.setOption('showNonCurrentDates', !this.props.hideNonCurrentDates);\r\n }\r\n\r\n if (updatedProps.has('selectable')) {\r\n this._calendar.setOption('selectable', this.props.selectable);\r\n }\r\n\r\n if (updatedProps.has('editable')) {\r\n this._calendar.setOption('editable', this.props.editable);\r\n }\r\n\r\n if (updatedProps.has('longPressDelay')) {\r\n this._calendar.setOption('longPressDelay', this.props.longPressDelay);\r\n }\r\n\r\n if (updatedProps.has('eventOrder')) {\r\n this._calendar.setOption('eventOrder', this.props.eventOrder);\r\n }\r\n\r\n if (updatedProps.has('noEventOverlap')) {\r\n this._calendar.setOption('eventOverlap', !this.props.noEventOverlap);\r\n }\r\n\r\n if (updatedProps.has('businessHours')) {\r\n this._calendar.setOption('businessHours', typeof this.props.businessHours == 'string' ? this.props.businessHours != 'false' : this.props.businessHours);\r\n }\r\n\r\n if (updatedProps.has('eventLimit')) {\r\n this._calendar.setOption('dayMaxEventRows', this.props.eventLimit);\r\n }\r\n\r\n if (updatedProps.has('nowIndicator')) {\r\n this._calendar.setOption('nowIndicator', this.props.nowIndicator);\r\n }\r\n\r\n // Not implemented yet in calendar\r\n if (updatedProps.has('viewsOptions')) {\r\n this._calendar.setOption('views', this.props.viewsOptions);\r\n }\r\n\r\n if (updatedProps.has('views')) {\r\n this._calendar.setOption('headerToolbar', {\r\n start: 'today prev,next',\r\n center: 'title',\r\n end: this.props.views.toString(),\r\n });\r\n }\r\n });\r\n },\r\n\r\n destroy () {\r\n if (this._calendar) {\r\n this._calendar.destroy();\r\n }\r\n },\r\n\r\n // TODO: deprecate this, use JSON or expression instead which is the App Connect 2 default way\r\n // we overwrite the default $parseAttributes method to parse some special non-standard attributes\r\n $parseAttributes (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n\r\n // used to keep track of the business hours from custom attributes\r\n this._businessHours = {};\r\n\r\n // TODO: this should be done using the default business-hours attribute\r\n // TODO: like `dmx-bind:business-hours=\"[{...},{...}]\"`\r\n dmx.dom.getAttributes(node).forEach((attr) => {\r\n if (attr.name == 'business-hours') {\r\n this.$watch(attr.value, (value) => {\r\n if (value != null) {\r\n // the key is the first modifier of the attribute\r\n const key = Object.keys(attr.modifiers)[0];\r\n // we need to temporarily store the value\r\n this._businessHours[key] = value;\r\n // we need to convert the object to an array\r\n this.props.businessHours = Object.values(this._businessHours);\r\n }\r\n });\r\n }\r\n });\r\n\r\n // we need to parse the views options attributes and map them to the correct view\r\n // this is here for backwards compatibility and does not support custom views or premium views\r\n const viewOptionsMappings = {\r\n 'day': 'day', // options apply to dayGridDay and timeGridDay views\r\n 'week': 'week', // options apply to dayGridWeek and timeGridWeek views\r\n 'day-grid': 'dayGrid', // options apply to dayGridMonth, dayGridWeek, and dayGridDay views\r\n 'day-grid-month': 'dayGridMonth',\r\n 'day-grid-week': 'dayGridWeek',\r\n 'day-grid-day': 'dayGridDay',\r\n 'time-grid': 'timeGrid', // options apply to timeGridWeek and timeGridDay views\r\n 'time-grid-week': 'timeGridWeek',\r\n 'time-grid-day': 'timeGridDay',\r\n 'list': 'list', // options apply to listDay, listWeek, listMonth, and listYear views\r\n 'list-day': 'listDay',\r\n 'list-week': 'listWeek',\r\n 'list-month': 'listMonth',\r\n 'list-year': 'listYear',\r\n 'multi-month': 'multiMonth', // options apply to multiMonthYear view\r\n 'multi-month-year': 'multiMonthYear',\r\n };\r\n\r\n // TODO: insteaf of `views-options:day=\"{...}\"` it should be `dmx-bind:views-options\"{days:{...}}\"`\r\n // TODO: all the other view options should be handled the same way into a single attribute\r\n for (const attr of node.attributes) {\r\n if (attr.name.startsWith('views-options')) {\r\n const view = viewOptionsMappings[attr.name.slice(14)];\r\n if (view) {\r\n this.$watch(attr.value, (value) => {\r\n if (value != null) {\r\n // make sure to set a new object to trigger the update\r\n this.props.viewsOptions = { ...this.props.viewsOptions, [view]: value };\r\n }\r\n });\r\n }\r\n }\r\n\r\n // special handling for the constraint business hours attribute\r\n if (attr.name == 'constraint.business-hours') {\r\n // old behavior was to set selectConstraint instead of eventConstraint\r\n // TODO: insteaf of `constraint.group=\"groupId\"` it should be `select-constraint=\"businessHours\"`\r\n this.props.selectConstraint = 'businessHours';\r\n }\r\n\r\n // special handling for the constraint group attribute\r\n if (attr.name == 'constraint.group') {\r\n // old behavior was to set selectConstraint instead of eventConstraint\\\r\n // TODO: insteaf of `constraint.group=\"groupId\"` it should be `select-constraint=\"groupId\"`\r\n this.props.selectConstraint = attr.value;\r\n }\r\n\r\n // special handling for the constraint dynamic attribute\r\n if (attr.name == 'dmx-bind:constraint') {\r\n this.$watch(attr.value, (value) => {\r\n if (value != null) {\r\n // old behavior was to set selectConstraint instead of eventConstraint\r\n // TODO: insteaf of `dmx-bind:constraint=\"{...}\"` it should be `dmx-bind:select-constraint=\"{...}`\r\n this.props.selectConstraint = value;\r\n }\r\n });\r\n }\r\n\r\n // special handling for the select constraint business hours attribute\r\n if (attr.name == 'select-constraint.business-hours') {\r\n // TODO: insteaf of `constraint.group=\"groupId\"` it should be `select-constraint=\"businessHours\"`\r\n this.props.selectConstraint = 'businessHours';\r\n }\r\n\r\n // special handling for the select constraint group attribute\r\n if (attr.name == 'select-constraint.group') {\r\n // TODO: insteaf of `constraint.group=\"groupId\"` it should be `select-constraint=\"groupId\"`\r\n this.props.selectConstraint = attr.value;\r\n }\r\n\r\n // special handling for the event constraint business hours attribute\r\n if (attr.name == 'event-constraint.business-hours') {\r\n // TODO: insteaf of `event-constraint.group=\"groupId\"` it should be `event-constraint=\"businessHours\"`\r\n this.props.eventConstraint = 'businessHours';\r\n }\r\n\r\n // special handling for the event constraint group attribute\r\n if (attr.name == 'event-constraint.group') {\r\n // TODO: insteaf of `event-constraint.group=\"groupId\"` it should be `event-constraint=\"groupId\"`\r\n this.props.eventConstraint = attr.value;\r\n }\r\n }\r\n },\r\n\r\n _getEventData (event) {\r\n return {\r\n id: event.id,\r\n title: event.title,\r\n start: event.startStr,\r\n end: event.endStr,\r\n allDay: event.allDay,\r\n extendedProps: event.extendedProps,\r\n };\r\n },\r\n\r\n _parseDate (date) {\r\n const utc = this.props.timezone === 'UTC';\r\n const year = date[utc ? 'getUTCFullYear' : 'getFullYear']();\r\n const month = date[utc ? 'getUTCMonth' : 'getMonth']() + 1;\r\n const day = date[utc ? 'getUTCDate' : 'getDate']();\r\n return `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day}T00:00:00${utc ? 'Z' : ''}`;\r\n },\r\n\r\n _datesSet (dateInfo) {\r\n this.set({\r\n title: dateInfo.view.title,\r\n activeStart: this._parseDate(dateInfo.view.activeStart),\r\n activeEnd: this._parseDate(dateInfo.view.activeEnd),\r\n currentStart: this._parseDate(dateInfo.view.currentStart),\r\n currentEnd: this._parseDate(dateInfo.view.currentEnd),\r\n });\r\n },\r\n\r\n _dateClick (dateClickInfo) {\r\n const cancelled = !this.dispatchEvent('dateclick', dateClickInfo.jsEvent, {\r\n date: dateClickInfo.dateStr,\r\n allDay: dateClickInfo.allDay,\r\n });\r\n\r\n if (!cancelled) {\r\n dateClickInfo.jsEvent.preventDefault();\r\n }\r\n },\r\n\r\n _eventClick (eventClickInfo) {\r\n const cancelled = !this.dispatchEvent('eventclick', eventClickInfo.jsEvent, {\r\n event: this._getEventData(eventClickInfo.event),\r\n });\r\n\r\n if (eventClickInfo.event.source) {\r\n for (const child of this.children) {\r\n if (child instanceof dmx.Component('calendar-source') && child.name == eventClickInfo.event.source.id) {\r\n child.dispatchEvent('eventclick', eventClickInfo.jsEvent, {\r\n event: this._getEventData(eventClickInfo.event),\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!cancelled) {\r\n eventClickInfo.jsEvent.preventDefault();\r\n }\r\n },\r\n\r\n _eventMouseEnter (mouseEnterInfo) {\r\n this.dispatchEvent('eventmouseenter', mouseEnterInfo.jsEvent, {\r\n event: this._getEventData(mouseEnterInfo.event),\r\n });\r\n\r\n if (mouseEnterInfo.event.source) {\r\n for (const child of this.children) {\r\n if (child instanceof dmx.Component('calendar-source') && child.name == mouseEnterInfo.event.source.id) {\r\n child.dispatchEvent('eventmouseenter', mouseEnterInfo.jsEvent, {\r\n event: this._getEventData(mouseEnterInfo.event),\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n _eventMouseLeave (mouseLeaveInfo) {\r\n this.dispatchEvent('eventmouseleave', mouseLeaveInfo.jsEvent, {\r\n event: this._getEventData(mouseLeaveInfo.event),\r\n });\r\n\r\n if (mouseLeaveInfo.event.source) {\r\n for (const child of this.children) {\r\n if (child instanceof dmx.Component('calendar-source') && child.name == mouseLeaveInfo.event.source.id) {\r\n child.dispatchEvent('eventmouseleave', mouseLeaveInfo.jsEvent, {\r\n event: this._getEventData(mouseLeaveInfo.event),\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n _eventDrop (eventDropInfo) {\r\n this.dispatchEvent('eventdrop', eventDropInfo.jsEvent, {\r\n event: this._getEventData(eventDropInfo.event),\r\n oldEvent: this._getEventData(eventDropInfo.oldEvent),\r\n });\r\n\r\n if (eventDropInfo.event.source) {\r\n for (const child of this.children) {\r\n if (child instanceof dmx.Component('calendar-source') && child.name == eventDropInfo.event.source.id) {\r\n child.dispatchEvent('eventdrop', eventDropInfo.jsEvent, {\r\n event: this._getEventData(eventDropInfo.event),\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n _eventResize (eventResizeInfo) {\r\n this.dispatchEvent('eventresize', eventResizeInfo.jsEvent, {\r\n event: this._getEventData(eventResizeInfo.event),\r\n oldEvent: this._getEventData(eventResizeInfo.oldEvent),\r\n });\r\n\r\n if (eventResizeInfo.event.source) {\r\n for (const child of this.children) {\r\n if (child instanceof dmx.Component('calendar-source') && child.name == eventResizeInfo.event.source.id) {\r\n child.dispatchEvent('eventresize', eventResizeInfo.jsEvent, {\r\n event: this._getEventData(eventResizeInfo.event),\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n _eventDidMount (info) {\r\n if (this.props.bsTooltip && window.bootstrap) {\r\n const scope = dmx.DataScope({\r\n event: this._getEventData(info.event),\r\n }, this);\r\n\r\n const options = {\r\n placement: dmx.parse(this.props.bsTooltipPlacement, scope),\r\n title: dmx.parse(this.props.bsTooltipTitle, scope),\r\n html: dmx.parse(this.props.bsTooltipHtml, scope),\r\n };\r\n\r\n if (bootstrap.Tooltip.VERSION.startsWith('4.')) {\r\n $(info.el).tooltip(options);\r\n } else {\r\n new bootstrap.Tooltip(info.el, options);\r\n }\r\n }\r\n },\r\n\r\n _eventWillUnmount (info) {\r\n if (this.props.bsTooltip && window.bootstrap) {\r\n if (bootstrap.Tooltip.VERSION.startsWith('4.')) {\r\n $(info.el).tooltip('dispose');\r\n } else {\r\n const tooltip = bootstrap.Tooltip.getInstance(info.el);\r\n if (tooltip) tooltip.dispose();\r\n }\r\n }\r\n },\r\n\r\n _select (selectionInfo) {\r\n const cancelled = !this.dispatchEvent('select', selectionInfo.jsEvent, {\r\n start: selectionInfo.startStr,\r\n end: selectionInfo.endStr,\r\n allDay: selectionInfo.allDay,\r\n });\r\n\r\n if (!cancelled) {\r\n selectionInfo.jsEvent.preventDefault();\r\n }\r\n },\r\n\r\n});","dmx.Component('calendar-source-base', {\r\n\r\n initialData: {\r\n id: null,\r\n events: [],\r\n },\r\n \r\n attributes: {\r\n color: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n backgroundColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n borderColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n textColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n className: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n editable: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n\r\n overlap: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n\r\n constraint: {\r\n type: [String, Object],\r\n default: undefined,\r\n },\r\n\r\n display: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n config: {\r\n type: Object,\r\n default: {},\r\n },\r\n },\r\n\r\n methods: {\r\n refetch () {\r\n this._refetch();\r\n },\r\n },\r\n\r\n events: {\r\n eventclick: MouseEvent,\r\n eventmouseenter: MouseEvent,\r\n eventmouseleave: MouseEvent,\r\n eventdrop: Event,\r\n eventresize: Event,\r\n },\r\n\r\n init () {\r\n this._calendar = this.parent._calendar;\r\n this.set('id', this.name);\r\n },\r\n\r\n _baseProps () {\r\n const props = {};\r\n\r\n if (this.props.color != null) props.color = this.props.color;\r\n if (this.props.backgroundColor != null) props.backgroundColor = this.props.backgroundColor;\r\n if (this.props.borderColor != null) props.borderColor = this.props.borderColor;\r\n if (this.props.textColor != null) props.textColor = this.props.textColor;\r\n if (this.props.className != null) props.className = this.props.className;\r\n if (this.props.editable != null) props.editable = this.props.editable;\r\n if (this.props.overlap != null) props.overlap = this.props.overlap;\r\n if (this.props.constraint != null) props.constraint = this.props.constraint;\r\n if (this.props.display != null) props.display = this.props.display;\r\n\r\n return props;\r\n },\r\n\r\n _refetch () {\r\n this._calendar.getEventSourceById(this.name).refetch();\r\n },\r\n\r\n});","dmx.Component('calendar-source', {\r\n\r\n extends: 'calendar-source-base',\r\n\r\n attributes: {\r\n events: {\r\n type: Array,\r\n default: [],\r\n },\r\n\r\n eventId: {\r\n type: String,\r\n default: 'id',\r\n },\r\n\r\n eventTitle: {\r\n type: String,\r\n default: 'title',\r\n },\r\n\r\n eventUrl: {\r\n type: String,\r\n default: 'url',\r\n },\r\n\r\n eventStart: {\r\n type: String,\r\n default: 'start',\r\n },\r\n\r\n eventEnd: {\r\n type: String,\r\n default: 'end',\r\n },\r\n\r\n eventAllDay: {\r\n type: String,\r\n default: 'allDay',\r\n },\r\n\r\n eventDaysOfWeek: {\r\n type: String,\r\n default: 'daysOfWeek',\r\n },\r\n\r\n eventStartTime: {\r\n type: String,\r\n default: 'startTime',\r\n },\r\n\r\n eventEndTime: {\r\n type: String,\r\n default: 'endTime',\r\n },\r\n\r\n eventStartRecur: {\r\n type: String,\r\n default: 'startRecur',\r\n },\r\n\r\n eventEndRecur: {\r\n type: String,\r\n default: 'endRecur',\r\n },\r\n\r\n eventGroupId: {\r\n type: String,\r\n default: 'groupId',\r\n },\r\n\r\n eventDisplay: {\r\n type: String,\r\n default: 'display',\r\n },\r\n\r\n eventColor: {\r\n type: String,\r\n default: 'color',\r\n },\r\n\r\n eventBackgroundColor: {\r\n type: String,\r\n default: 'backgroundColor',\r\n },\r\n\r\n eventBorderColor: {\r\n type: String,\r\n default: 'borderColor',\r\n },\r\n\r\n eventTextColor: {\r\n type: String,\r\n default: 'textColor',\r\n },\r\n\r\n eventClassName: {\r\n type: String,\r\n default: 'className',\r\n },\r\n\r\n eventEditable: {\r\n type: String,\r\n default: 'editable',\r\n },\r\n\r\n eventOverlap: {\r\n type: String,\r\n default: 'overlap',\r\n },\r\n\r\n eventConstraint: {\r\n type: [String, Object],\r\n default: 'constraint',\r\n },\r\n\r\n eventExtendedProps: {\r\n type: String,\r\n default: '$value',\r\n },\r\n },\r\n\r\n render (node) {\r\n this.$parse();\r\n\r\n this._calendar.addEventSource({\r\n id: this.name,\r\n events: this._parseEvents.bind(this),\r\n ...this._baseProps(),\r\n ...this.props.config,\r\n });\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n this._refetch();\r\n },\r\n\r\n destroy () {\r\n this._calendar.getEventSourceById(this.name).remove();\r\n },\r\n\r\n _parseEvents (info, success, failure) {\r\n this._events = [];\r\n\r\n if (Array.isArray(this.props.events)) {\r\n dmx.repeatItems(this.props.events).forEach(data => {\r\n const event = {}, scope = dmx.DataScope(data, this);\r\n\r\n for (const prop in this.props) {\r\n if (prop == 'events' || !prop.startsWith('event')) continue;\r\n const value = dmx.parse(this.props[prop], scope);\r\n if (value != null) {\r\n event[prop.slice(5, 6).toLowerCase() + prop.slice(6)] = value;\r\n }\r\n }\r\n\r\n this._events.push(event);\r\n });\r\n }\r\n\r\n this.children.forEach(child => {\r\n if (child instanceof dmx.Component('calendar-event')) {\r\n const event = { id: child.name };\r\n\r\n for (const prop in child.props) {\r\n if (!child.props.hasOwnProperty(prop)) continue;\r\n if (prop != 'config' && child.props[prop] != null) {\r\n event[prop] = child.props[prop];\r\n }\r\n }\r\n\r\n this._events.push({ ...event, ...child.props.config });\r\n }\r\n });\r\n\r\n success(this._events);\r\n\r\n this.set('events', this._events);\r\n },\r\n\r\n});","dmx.Component('calendar-source-google', {\r\n\r\n extends: 'calendar-source-base',\r\n\r\n attributes: {\r\n googleCalendarApiKey: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n googleCalendarId: {\r\n type: String,\r\n default: undefined,\r\n },\r\n },\r\n\r\n events: {\r\n success: Event,\r\n failure: Event,\r\n },\r\n\r\n render (node) {\r\n this.$parse();\r\n\r\n this._calendar.addEventSource({\r\n id: this.name,\r\n success: this.dispatchEvent.bind(this, 'success'),\r\n failure: this.dispatchEvent.bind(this, 'failure'),\r\n ...this._baseProps(),\r\n ...this.props.config,\r\n });\r\n },\r\n\r\n destroy () {\r\n this._calendar.getEventSourceById(this.name).remove();\r\n },\r\n\r\n});","dmx.Component('calendar-event', {\r\n\r\n attributes: {\r\n title: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n url: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n start: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n end: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n allDay: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n daysOfWeek: { // For defining a simple recurring event\r\n type: Array,\r\n default: undefined,\r\n },\r\n\r\n startTime: { // For defining a simple recurring event\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n endTime: { // For defining a simple recurring event\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n startRecur: { // For defining a simple recurring event\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n endRecur: { // For defining a simple recurring event\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n groupId: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n display: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n editable: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n\r\n color: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n backgroundColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n borderColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n textColor: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n className: {\r\n type: String,\r\n default: undefined,\r\n },\r\n\r\n constraint: {\r\n type: [String, Object],\r\n default: undefined,\r\n },\r\n\r\n overlap: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n\r\n extendedProps: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n\r\n config: {\r\n type: Object,\r\n default: {},\r\n },\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (this.parent._refetch) {\r\n this.parent._refetch();\r\n }\r\n },\r\n\r\n // TODO: deprecate this, use JSON or expression instead which is the App Connect 2 default way\r\n // we overwrite the default $parseAttributes method to parse some special non-standard attributes\r\n $parseAttributes (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n\r\n for (const attr of node.attributes) {\r\n // special handling for the constraint business hours attribute\r\n if (attr.name == 'constraint.business-hours') {\r\n // TODO: insteaf of `constraint.business-hours=\"\"` it should be `constraint=\"businessHours\"`\r\n this.props.constraint = 'businessHours';\r\n }\r\n\r\n // special handling for the constraint group attribute\r\n if (attr.name == 'constraint.group') {\r\n // TODO: insteaf of `constraint.group=\"groupId\"` it should be `constraint=\"groupId\"`\r\n this.props.constraint = attr.value;\r\n }\r\n }\r\n },\r\n\r\n});"]}