@bagelink/vue 0.0.1216 → 0.0.1220

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/components/Calendar/Index.vue.d.ts +510 -0
  2. package/dist/components/Calendar/Index.vue.d.ts.map +1 -0
  3. package/dist/components/Calendar/components/header/Header.vue.d.ts +117 -0
  4. package/dist/components/Calendar/components/header/Header.vue.d.ts.map +1 -0
  5. package/dist/components/Calendar/components/month/AgendaEventTile.vue.d.ts +37 -0
  6. package/dist/components/Calendar/components/month/AgendaEventTile.vue.d.ts.map +1 -0
  7. package/dist/components/Calendar/components/month/AgendaEvents.vue.d.ts +37 -0
  8. package/dist/components/Calendar/components/month/AgendaEvents.vue.d.ts.map +1 -0
  9. package/dist/components/Calendar/components/month/Day.vue.d.ts +84 -0
  10. package/dist/components/Calendar/components/month/Day.vue.d.ts.map +1 -0
  11. package/dist/components/Calendar/components/month/Event.vue.d.ts +69 -0
  12. package/dist/components/Calendar/components/month/Event.vue.d.ts.map +1 -0
  13. package/dist/components/Calendar/components/month/Month.vue.d.ts +134 -0
  14. package/dist/components/Calendar/components/month/Month.vue.d.ts.map +1 -0
  15. package/dist/components/Calendar/components/month/WeekDay.vue.d.ts +7 -0
  16. package/dist/components/Calendar/components/month/WeekDay.vue.d.ts.map +1 -0
  17. package/dist/components/Calendar/components/partials/EventFlyout.vue.d.ts +122 -0
  18. package/dist/components/Calendar/components/partials/EventFlyout.vue.d.ts.map +1 -0
  19. package/dist/components/Calendar/components/week/Day.vue.d.ts +152 -0
  20. package/dist/components/Calendar/components/week/Day.vue.d.ts.map +1 -0
  21. package/dist/components/Calendar/components/week/DayEvent.vue.d.ts +136 -0
  22. package/dist/components/Calendar/components/week/DayEvent.vue.d.ts.map +1 -0
  23. package/dist/components/Calendar/components/week/DayTimeline.vue.d.ts +23 -0
  24. package/dist/components/Calendar/components/week/DayTimeline.vue.d.ts.map +1 -0
  25. package/dist/components/Calendar/components/week/FullDayEvent.vue.d.ts +42 -0
  26. package/dist/components/Calendar/components/week/FullDayEvent.vue.d.ts.map +1 -0
  27. package/dist/components/Calendar/components/week/Week.vue.d.ts +196 -0
  28. package/dist/components/Calendar/components/week/Week.vue.d.ts.map +1 -0
  29. package/dist/components/Calendar/components/week/WeekTimeline.vue.d.ts +21 -0
  30. package/dist/components/Calendar/components/week/WeekTimeline.vue.d.ts.map +1 -0
  31. package/dist/components/Calendar/constants.d.ts +13 -0
  32. package/dist/components/Calendar/constants.d.ts.map +1 -0
  33. package/dist/components/Calendar/helpers/DayIntervals.d.ts +17 -0
  34. package/dist/components/Calendar/helpers/DayIntervals.d.ts.map +1 -0
  35. package/dist/components/Calendar/helpers/EDate.d.ts +10 -0
  36. package/dist/components/Calendar/helpers/EDate.d.ts.map +1 -0
  37. package/dist/components/Calendar/helpers/Errors.d.ts +18 -0
  38. package/dist/components/Calendar/helpers/Errors.d.ts.map +1 -0
  39. package/dist/components/Calendar/helpers/EventChange.d.ts +19 -0
  40. package/dist/components/Calendar/helpers/EventChange.d.ts.map +1 -0
  41. package/dist/components/Calendar/helpers/EventConcurrency.d.ts +12 -0
  42. package/dist/components/Calendar/helpers/EventConcurrency.d.ts.map +1 -0
  43. package/dist/components/Calendar/helpers/EventFlyoutPosition.d.ts +14 -0
  44. package/dist/components/Calendar/helpers/EventFlyoutPosition.d.ts.map +1 -0
  45. package/dist/components/Calendar/helpers/EventPosition.d.ts +11 -0
  46. package/dist/components/Calendar/helpers/EventPosition.d.ts.map +1 -0
  47. package/dist/components/Calendar/helpers/EventsFilter.d.ts +11 -0
  48. package/dist/components/Calendar/helpers/EventsFilter.d.ts.map +1 -0
  49. package/dist/components/Calendar/helpers/Helpers.d.ts +19 -0
  50. package/dist/components/Calendar/helpers/Helpers.d.ts.map +1 -0
  51. package/dist/components/Calendar/helpers/Time.d.ts +118 -0
  52. package/dist/components/Calendar/helpers/Time.d.ts.map +1 -0
  53. package/dist/components/Calendar/helpers/Week.d.ts +10 -0
  54. package/dist/components/Calendar/helpers/Week.d.ts.map +1 -0
  55. package/dist/components/Calendar/index.d.ts +4 -0
  56. package/dist/components/Calendar/index.d.ts.map +1 -0
  57. package/dist/components/Calendar/language/index.d.ts +6 -0
  58. package/dist/components/Calendar/language/index.d.ts.map +1 -0
  59. package/dist/components/Calendar/language/keys.d.ts +90 -0
  60. package/dist/components/Calendar/language/keys.d.ts.map +1 -0
  61. package/dist/components/Calendar/models/Event.d.ts +50 -0
  62. package/dist/components/Calendar/models/Event.d.ts.map +1 -0
  63. package/dist/components/Calendar/typings/config.interface.d.ts +77 -0
  64. package/dist/components/Calendar/typings/config.interface.d.ts.map +1 -0
  65. package/dist/components/Calendar/typings/interfaces/day.interface.d.ts +10 -0
  66. package/dist/components/Calendar/typings/interfaces/day.interface.d.ts.map +1 -0
  67. package/dist/components/Calendar/typings/interfaces/event.interface.d.ts +32 -0
  68. package/dist/components/Calendar/typings/interfaces/event.interface.d.ts.map +1 -0
  69. package/dist/components/Calendar/typings/interfaces/full-day-events-week.type.d.ts +7 -0
  70. package/dist/components/Calendar/typings/interfaces/full-day-events-week.type.d.ts.map +1 -0
  71. package/dist/components/Calendar/typings/interfaces/period.interface.d.ts +6 -0
  72. package/dist/components/Calendar/typings/interfaces/period.interface.d.ts.map +1 -0
  73. package/dist/components/Calendar/typings/interfaces/time-modes.d.ts +6 -0
  74. package/dist/components/Calendar/typings/interfaces/time-modes.d.ts.map +1 -0
  75. package/dist/components/Calendar/typings/types.d.ts +21 -0
  76. package/dist/components/Calendar/typings/types.d.ts.map +1 -0
  77. package/dist/components/DataTable/DataTable.vue.d.ts.map +1 -1
  78. package/dist/components/Draggable/useDraggable.d.ts.map +1 -1
  79. package/dist/components/form/inputs/DatePick.vue.d.ts +8 -0
  80. package/dist/components/form/inputs/DatePick.vue.d.ts.map +1 -1
  81. package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
  82. package/dist/components/index.d.ts +2 -1
  83. package/dist/components/index.d.ts.map +1 -1
  84. package/dist/directives/index.d.ts +2 -0
  85. package/dist/directives/index.d.ts.map +1 -1
  86. package/dist/directives/vResize.d.ts +18 -0
  87. package/dist/directives/vResize.d.ts.map +1 -0
  88. package/dist/index.cjs +3657 -169
  89. package/dist/index.mjs +3658 -170
  90. package/dist/style.css +843 -77
  91. package/package.json +2 -1
  92. package/src/components/Calendar/Index.vue +420 -0
  93. package/src/components/Calendar/assets/base.css +60 -0
  94. package/src/components/Calendar/components/header/Header.vue +274 -0
  95. package/src/components/Calendar/components/month/AgendaEventTile.vue +137 -0
  96. package/src/components/Calendar/components/month/AgendaEvents.vue +107 -0
  97. package/src/components/Calendar/components/month/Day.vue +271 -0
  98. package/src/components/Calendar/components/month/Event.vue +221 -0
  99. package/src/components/Calendar/components/month/Month.vue +278 -0
  100. package/src/components/Calendar/components/month/WeekDay.vue +25 -0
  101. package/src/components/Calendar/components/partials/EventFlyout.vue +429 -0
  102. package/src/components/Calendar/components/week/Day.vue +212 -0
  103. package/src/components/Calendar/components/week/DayEvent.vue +585 -0
  104. package/src/components/Calendar/components/week/DayTimeline.vue +86 -0
  105. package/src/components/Calendar/components/week/FullDayEvent.vue +121 -0
  106. package/src/components/Calendar/components/week/Week.vue +414 -0
  107. package/src/components/Calendar/components/week/WeekTimeline.vue +126 -0
  108. package/src/components/Calendar/constants.ts +13 -0
  109. package/src/components/Calendar/env.d.ts +8 -0
  110. package/src/components/Calendar/helpers/DayIntervals.ts +48 -0
  111. package/src/components/Calendar/helpers/EDate.ts +18 -0
  112. package/src/components/Calendar/helpers/Errors.ts +69 -0
  113. package/src/components/Calendar/helpers/EventChange.ts +88 -0
  114. package/src/components/Calendar/helpers/EventConcurrency.ts +69 -0
  115. package/src/components/Calendar/helpers/EventFlyoutPosition.ts +96 -0
  116. package/src/components/Calendar/helpers/EventPosition.ts +154 -0
  117. package/src/components/Calendar/helpers/EventsFilter.ts +50 -0
  118. package/src/components/Calendar/helpers/Helpers.ts +86 -0
  119. package/src/components/Calendar/helpers/Time.ts +588 -0
  120. package/src/components/Calendar/helpers/Week.ts +37 -0
  121. package/src/components/Calendar/index.ts +4 -0
  122. package/src/components/Calendar/language/index.ts +37 -0
  123. package/src/components/Calendar/language/keys.ts +90 -0
  124. package/src/components/Calendar/models/Event.ts +112 -0
  125. package/src/components/Calendar/styles/_mixins.css +21 -0
  126. package/src/components/Calendar/styles/_variables.css +51 -0
  127. package/src/components/Calendar/typings/config.interface.ts +87 -0
  128. package/src/components/Calendar/typings/interfaces/day.interface.ts +10 -0
  129. package/src/components/Calendar/typings/interfaces/event.interface.ts +32 -0
  130. package/src/components/Calendar/typings/interfaces/full-day-events-week.type.ts +8 -0
  131. package/src/components/Calendar/typings/interfaces/period.interface.ts +5 -0
  132. package/src/components/Calendar/typings/interfaces/time-modes.ts +9 -0
  133. package/src/components/Calendar/typings/types.ts +23 -0
  134. package/src/components/DataTable/DataTable.vue +4 -0
  135. package/src/components/Draggable/useDraggable.ts +53 -37
  136. package/src/components/form/inputs/DatePick.vue +189 -152
  137. package/src/components/form/inputs/NumberInput.vue +1 -3
  138. package/src/components/index.ts +3 -6
  139. package/src/directives/index.ts +2 -0
  140. package/src/directives/vResize.ts +205 -0
@@ -0,0 +1,271 @@
1
+ <script setup lang="ts">
2
+ import type { PropType } from 'vue'
3
+ import type Time from '../../helpers/Time'
4
+ import type { ConfigInterface } from '../../typings/config.interface'
5
+ import type { DayInterface } from '../../typings/interfaces/day.interface'
6
+ import type { EventInterface } from '../../typings/interfaces/event.interface'
7
+ import { ref, computed } from 'vue'
8
+ import { getLanguage } from '../../language'
9
+ import { languageKeys } from '../../language/keys'
10
+ import Event from './Event.vue'
11
+
12
+ const props = defineProps({
13
+ config: {
14
+ type: Object as PropType<ConfigInterface>,
15
+ required: true,
16
+ },
17
+ time: {
18
+ type: Object as PropType<Time>,
19
+ required: true,
20
+ },
21
+ day: {
22
+ type: Object as PropType<DayInterface>,
23
+ required: true,
24
+ },
25
+ isSelected: {
26
+ type: Boolean,
27
+ default: false,
28
+ },
29
+ })
30
+
31
+ const emit = defineEmits<{
32
+ (e: 'eventWasClicked', event: EventInterface): void
33
+ (e: 'eventWasDragged', event: EventInterface): void
34
+ (e: 'updatedPeriod', period: { start: Date, end: Date, selectedDate: Date }): void
35
+ (e: 'dateWasClicked', date: string): void
36
+ (e: 'dayWasSelected', day: DayInterface): void
37
+ }>()
38
+
39
+ const isActiveDroppable = ref(false)
40
+
41
+ const canBeDropped = computed(() => isActiveDroppable.value)
42
+
43
+ const hideLeadingAndTrailingDate = computed(() => props.day.isTrailingOrLeadingDate === true && props.config.month?.showTrailingAndLeadingDates === false
44
+ )
45
+
46
+ const isToday = computed(() => {
47
+ const { year, month, date } = props.time.getAllVariablesFromDateTimeString(props.day.dateTimeString)
48
+ return props.time.dateIsToday(new Date(year, month, date))
49
+ })
50
+
51
+ function getMoreEvents() {
52
+ const { date, month, year } = props.time.getAllVariablesFromDateTimeString(props.day.dateTimeString)
53
+ const selectedDate = new Date(year, month, date)
54
+ const week = props.time.getCalendarWeekDateObjects(selectedDate)
55
+ const start = week[0]
56
+ const end = week[6]
57
+ emit('updatedPeriod', { start, end, selectedDate })
58
+ }
59
+
60
+ function handleDragLeave() {
61
+ isActiveDroppable.value = false
62
+ }
63
+
64
+ function handleDragEnd(mouseEvent: DragEvent) {
65
+ isActiveDroppable.value = false
66
+ mouseEvent.stopPropagation()
67
+ }
68
+
69
+ function handleDrop(dropEvent: DragEvent) {
70
+ isActiveDroppable.value = false
71
+ dropEvent.stopPropagation()
72
+
73
+ if (!dropEvent || !dropEvent.dataTransfer) return
74
+
75
+ const calendarEvent: EventInterface = JSON.parse(dropEvent.dataTransfer.getData('json'))
76
+ const eventDroppedOnSameDay = props.time.dateStringsHaveEqualDates(
77
+ calendarEvent.time.start,
78
+ props.time.dateStringFrom(props.day.dateTimeString),
79
+ )
80
+ if (eventDroppedOnSameDay) return
81
+
82
+ calendarEvent.time.start = calendarEvent.time.start.replace(
83
+ /^\d{4}-\d{2}-\d{2}/,
84
+ props.time.dateStringFrom(props.day.dateTimeString)
85
+ )
86
+ calendarEvent.time.end = calendarEvent.time.end.replace(
87
+ /^\d{4}-\d{2}-\d{2}/,
88
+ props.time.dateStringFrom(props.day.dateTimeString)
89
+ )
90
+ emit('eventWasDragged', calendarEvent)
91
+ }
92
+
93
+ function handleDragOver(e: DragEvent) {
94
+ isActiveDroppable.value = true
95
+ e.preventDefault()
96
+ return false
97
+ }
98
+
99
+ function emitDayWasClicked() {
100
+ emit('dateWasClicked', props.time.dateStringFrom(props.day.dateTimeString))
101
+ if (props.config.isSmall) emit('dayWasSelected', props.day)
102
+ }
103
+ </script>
104
+
105
+ <template>
106
+ <div
107
+ v-if="!hideLeadingAndTrailingDate"
108
+ :id="`day-${time.dateStringFrom(day.dateTimeString)}`"
109
+ class="calendar-month__weekday"
110
+ :class="{
111
+ 'is-droppable': canBeDropped,
112
+ 'trailing-or-leading': day.isTrailingOrLeadingDate,
113
+ 'is-selected': isSelected,
114
+ 'is-today': isToday,
115
+ }"
116
+ @click.self="emitDayWasClicked"
117
+ @dragleave="handleDragLeave"
118
+ @dragover="handleDragOver"
119
+ @drop="handleDrop"
120
+ @dragend="handleDragEnd"
121
+ >
122
+ <slot
123
+ name="dayCell"
124
+ :day-data="day"
125
+ >
126
+ <span
127
+ class="calendar-month__day-date"
128
+ @click="emitDayWasClicked"
129
+ >
130
+ {{ day.dateTimeString.substring(8, 10).startsWith('0') ? day.dateTimeString.substring(9, 10) : day.dateTimeString.substring(8, 10) }}
131
+ </span>
132
+
133
+ <div class="calendar-month_events">
134
+ <template
135
+ v-for="(calendarEvent, index) in day.events"
136
+ :key="index"
137
+ >
138
+ <Event
139
+ v-if="index < 3"
140
+ :key="calendarEvent.id"
141
+ :calendar-event="calendarEvent"
142
+ :config="config"
143
+ :time="time"
144
+ :day="day"
145
+ @eventWasClicked="$event => emit('eventWasClicked', $event.clickedEvent)"
146
+ >
147
+ <template #monthEvent="p">
148
+ <slot
149
+ :event-data="p.eventData"
150
+ name="monthEvent"
151
+ />
152
+ </template>
153
+ </Event>
154
+ </template>
155
+ <div
156
+ v-if="day.events.length >= 4"
157
+ class="calendar-month__weekday-more"
158
+ @click="getMoreEvents"
159
+ >
160
+ {{ getLanguage(languageKeys.moreEvents, time.CALENDAR_LOCALE) }}
161
+ </div>
162
+ </div>
163
+ </slot>
164
+ </div>
165
+
166
+ <div
167
+ v-else
168
+ class="space-reserver"
169
+ />
170
+ </template>
171
+
172
+ <style scoped>
173
+ .calendar-month__weekday {
174
+ height: 100%;
175
+ flex: 1;
176
+ display: flex;
177
+ flex-flow: column;
178
+ align-items: center;
179
+ border-right: var(--qalendar-border-gray-thin);
180
+ border-bottom: var(--qalendar-border-gray-thin);
181
+ overflow: hidden;
182
+ transition: background-color 0.2s ease-in-out;
183
+ }
184
+
185
+ .calendar-month__weekday.is-droppable {
186
+ background-color: var(--qalendar-light-gray);
187
+ }
188
+
189
+ .calendar-month__weekday:last-child {
190
+ border-right: 0;
191
+ }
192
+
193
+ .qalendar-is-small .calendar-month__weekday.is-selected {
194
+ -webkit-box-shadow: inset 0 0 0 3px var(--qalendar-theme-color);
195
+ -moz-box-shadow: inset 0 0 0 3px var(--qalendar-theme-color);
196
+ box-shadow: inset 0 0 0 3px var(--qalendar-theme-color);
197
+ border-radius: 5px;
198
+ }
199
+
200
+ .qalendar-is-small .calendar-month__weekday {
201
+ height: 45px;
202
+ width: 45px;
203
+ display: flex;
204
+ flex-flow: column;
205
+ justify-content: space-around;
206
+ }
207
+
208
+ .calendar-month__day-date {
209
+ font-size: var(--qalendar-font-xs);
210
+ color: var(--qalendar-gray-quite-dark);
211
+ }
212
+
213
+ .calendar-month__day-date:first-child {
214
+ margin-top: 6px;
215
+ }
216
+
217
+ .calendar-month__weekday-more {
218
+ font-size: var(--qalendar-font-2xs);
219
+ width: 100%;
220
+ padding-left: 4px;
221
+ color: var(--qalendar-gray-quite-dark);
222
+ cursor: pointer;
223
+ }
224
+
225
+ .calendar-month_events {
226
+ width: 100%;
227
+ }
228
+
229
+ .qalendar-is-small .calendar-month_events {
230
+ display: flex;
231
+ flex-flow: row;
232
+ justify-content: center;
233
+ }
234
+
235
+ .qalendar-is-small .calendar-month_events .calendar-month__weekday-more {
236
+ display: none;
237
+ }
238
+
239
+ .calendar-month__weekday.is-today .calendar-month__day-date {
240
+ background-color: var(--qalendar-theme-color);
241
+ color: #fff;
242
+ border-radius: 50%;
243
+ padding: 4px 6px;
244
+ }
245
+
246
+ .qalendar-is-small .calendar-month__weekday.is-today .calendar-month__day-date {
247
+ padding: 2px 4px;
248
+ }
249
+
250
+ .space-reserver {
251
+ height: 100%;
252
+ flex: 1;
253
+ display: flex;
254
+ flex-flow: column;
255
+ align-items: center;
256
+ border-right: var(--qalendar-border-gray-thin);
257
+ border-bottom: var(--qalendar-border-gray-thin);
258
+ border-right-color: transparent;
259
+ }
260
+
261
+ .space-reserver + .calendar-month__weekday:not(.trailing-or-leading) {
262
+ border-left: var(--qalendar-border-gray-thin);
263
+ }
264
+
265
+ @media (prefers-color-scheme: dark) {
266
+ .calendar-month__weekday,
267
+ .space-reserver {
268
+ border-color: var(--qalendar-dark-mode-line-color);
269
+ }
270
+ }
271
+ </style>
@@ -0,0 +1,221 @@
1
+ <script setup lang="ts">
2
+ import type { PropType } from 'vue'
3
+ import type Time from '../../helpers/Time'
4
+ import type { ConfigInterface } from '../../typings/config.interface'
5
+ import type { DayInterface } from '../../typings/interfaces/day.interface'
6
+ import type { EventInterface } from '../../typings/interfaces/event.interface'
7
+ import { computed, ref, onMounted } from 'vue'
8
+ import { DATE_TIME_STRING_PATTERN, EVENT_COLORS } from '../../constants'
9
+
10
+ const props = defineProps({
11
+ time: {
12
+ type: Object as PropType<Time>,
13
+ required: true,
14
+ },
15
+ calendarEvent: {
16
+ type: Object as PropType<EventInterface>,
17
+ required: true,
18
+ },
19
+ config: {
20
+ type: Object as PropType<ConfigInterface>,
21
+ required: true,
22
+ },
23
+ day: {
24
+ type: Object as PropType<DayInterface>,
25
+ required: true,
26
+ },
27
+ })
28
+
29
+ const emit = defineEmits<{
30
+ (e: 'eventWasClicked', payload: { clickedEvent: EventInterface, eventElement: HTMLElement | null }): void
31
+ }>()
32
+
33
+ const colors = ref(EVENT_COLORS as { [key: string]: string })
34
+ const eventBackgroundColor = ref('')
35
+ const eventIdPrefix = 'calendar-month__event-'
36
+
37
+ const isCustomEvent = computed(() => {
38
+ if (Array.isArray(props.calendarEvent.isCustom)) {
39
+ return props.calendarEvent.isCustom.includes('month')
40
+ }
41
+ return props.calendarEvent.isCustom || false
42
+ })
43
+
44
+ const eventTimeStart = computed(() => {
45
+ return DATE_TIME_STRING_PATTERN.test(props.calendarEvent.time.start)
46
+ ? props.time.getLocalizedTime(props.calendarEvent.time.start)
47
+ : null
48
+ })
49
+
50
+ const elementId = computed(() => eventIdPrefix + props.calendarEvent.id + props.time.dateStringFrom(props.day.dateTimeString))
51
+
52
+ const elementDraggableAttribute = computed(() => {
53
+ const {
54
+ year: startYear,
55
+ month: startMonth,
56
+ date: startDate,
57
+ } = props.time.getAllVariablesFromDateTimeString(props.calendarEvent.time.start)
58
+
59
+ const {
60
+ year: endYear,
61
+ month: endMonth,
62
+ date: endDate,
63
+ } = props.time.getAllVariablesFromDateTimeString(props.calendarEvent.time.end)
64
+
65
+ const eventIsSingleDay = startYear === endYear && startMonth === endMonth && startDate === endDate
66
+ const dragAndDropIsDisabled = props.calendarEvent.disableDnD && props.calendarEvent.disableDnD.includes('month')
67
+
68
+ return props.calendarEvent.isEditable && eventIsSingleDay && !dragAndDropIsDisabled ? true : undefined
69
+ })
70
+
71
+ function setColors() {
72
+ if (
73
+ props.calendarEvent.colorScheme
74
+ && props.config.style?.colorSchemes
75
+ && props.config.style.colorSchemes[props.calendarEvent.colorScheme]
76
+ ) {
77
+ return (eventBackgroundColor.value = props.config.style.colorSchemes[props.calendarEvent.colorScheme].backgroundColor)
78
+ }
79
+
80
+ if (props.calendarEvent.color) {
81
+ return (eventBackgroundColor.value = colors.value[props.calendarEvent.color])
82
+ }
83
+
84
+ return (eventBackgroundColor.value = colors.value.blue)
85
+ }
86
+
87
+ function handleClickOnEvent() {
88
+ const eventElement = document.getElementById(elementId.value)
89
+ emit('eventWasClicked', {
90
+ clickedEvent: props.calendarEvent,
91
+ eventElement,
92
+ })
93
+ }
94
+
95
+ function handleDragStart(dragEvent: DragEvent) {
96
+ if (!dragEvent || !dragEvent.dataTransfer) return
97
+ dragEvent.dataTransfer.effectAllowed = 'move'
98
+ dragEvent.dataTransfer.setData('json', JSON.stringify(props.calendarEvent))
99
+ }
100
+
101
+ onMounted(() => {
102
+ setColors()
103
+ })
104
+ </script>
105
+
106
+ <template>
107
+ <div
108
+ v-if="config.isSmall"
109
+ class="calendar-month__event"
110
+ />
111
+
112
+ <template v-else>
113
+ <div
114
+ v-if="isCustomEvent"
115
+ :id="elementId"
116
+ class="is-event"
117
+ data-ref="custom-event"
118
+ :class="{ 'is-draggable': elementDraggableAttribute }"
119
+ :draggable="elementDraggableAttribute"
120
+ @dragstart="handleDragStart"
121
+ @click="handleClickOnEvent"
122
+ >
123
+ <slot
124
+ name="monthEvent"
125
+ :event-data="calendarEvent"
126
+ />
127
+ </div>
128
+
129
+ <div
130
+ v-else
131
+ :id="elementId"
132
+ data-ref="default-event"
133
+ class="calendar-month__event is-event"
134
+ :class="{ 'is-draggable': elementDraggableAttribute }"
135
+ :draggable="elementDraggableAttribute"
136
+ @dragstart="handleDragStart"
137
+ @click="handleClickOnEvent"
138
+ >
139
+ <span class="calendar-month__event-color" />
140
+
141
+ <span
142
+ v-if="eventTimeStart && !calendarEvent.originalEvent"
143
+ class="calendar-month__event-time"
144
+ >
145
+ {{ eventTimeStart }}
146
+ </span>
147
+
148
+ <span class="calendar-month__event-title">
149
+ {{ calendarEvent.title }}
150
+ </span>
151
+ </div>
152
+ </template>
153
+ </template>
154
+
155
+ <style>
156
+ .calendar-month__event {
157
+ --event-inline-padding: 4px;
158
+ display: flex;
159
+ align-items: center;
160
+ overflow: hidden;
161
+ border-radius: 4px;
162
+ font-size: var(--qalendar-font-2xs);
163
+ width: calc(100% - (var(--event-inline-padding) * 2));
164
+ margin-bottom: 4px;
165
+ padding: 0.25rem var(--event-inline-padding);
166
+ cursor: pointer;
167
+ user-select: none;
168
+ }
169
+
170
+ .calendar-month__event .calendar-month__event-time {
171
+ margin-right: 6px;
172
+ }
173
+
174
+ .calendar-month__event .calendar-month__event-time,
175
+ .calendar-month__event .calendar-month__event-title,
176
+ .calendar-month__event .calendar-month__event-color {
177
+ flex-shrink: 0;
178
+ }
179
+
180
+ .qalendar-is-small .calendar-month__event .calendar-month__event-time,
181
+ .qalendar-is-small .calendar-month__event .calendar-month__event-title {
182
+ display: none;
183
+ }
184
+
185
+ .qalendar-is-small .calendar-month__event {
186
+ background-color: v-bind(eventBackgroundColor);
187
+ width: 4px;
188
+ height: 4px;
189
+ border-radius: 50%;
190
+ padding: 1px;
191
+ margin-right: 1px;
192
+ }
193
+
194
+ .calendar-month__event.is-draggable {
195
+ cursor: grab;
196
+ }
197
+
198
+ .calendar-month__event:active {
199
+ z-index: 100;
200
+ }
201
+
202
+ .calendar-month__event:not(.is-draggable):active {
203
+ cursor: not-allowed;
204
+ }
205
+
206
+ .calendar-month__event:hover {
207
+ background-color: var(--qalendar-light-gray);
208
+ }
209
+
210
+ .calendar-month__event:hover:hover {
211
+ background-color: var(--qalendar-option-hover);
212
+ }
213
+
214
+ .calendar-month__event .calendar-month__event-color {
215
+ background-color: v-bind(eventBackgroundColor);
216
+ width: 6px;
217
+ height: 6px;
218
+ border-radius: 50%;
219
+ margin-right: 4px;
220
+ }
221
+ </style>