@bagelink/vue 0.0.1218 → 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 (138) 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/form/inputs/DatePick.vue.d.ts +8 -0
  79. package/dist/components/form/inputs/DatePick.vue.d.ts.map +1 -1
  80. package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
  81. package/dist/components/index.d.ts +2 -1
  82. package/dist/components/index.d.ts.map +1 -1
  83. package/dist/directives/index.d.ts +2 -0
  84. package/dist/directives/index.d.ts.map +1 -1
  85. package/dist/directives/vResize.d.ts +18 -0
  86. package/dist/directives/vResize.d.ts.map +1 -0
  87. package/dist/index.cjs +3583 -111
  88. package/dist/index.mjs +3584 -112
  89. package/dist/style.css +843 -77
  90. package/package.json +2 -1
  91. package/src/components/Calendar/Index.vue +420 -0
  92. package/src/components/Calendar/assets/base.css +60 -0
  93. package/src/components/Calendar/components/header/Header.vue +274 -0
  94. package/src/components/Calendar/components/month/AgendaEventTile.vue +137 -0
  95. package/src/components/Calendar/components/month/AgendaEvents.vue +107 -0
  96. package/src/components/Calendar/components/month/Day.vue +271 -0
  97. package/src/components/Calendar/components/month/Event.vue +221 -0
  98. package/src/components/Calendar/components/month/Month.vue +278 -0
  99. package/src/components/Calendar/components/month/WeekDay.vue +25 -0
  100. package/src/components/Calendar/components/partials/EventFlyout.vue +429 -0
  101. package/src/components/Calendar/components/week/Day.vue +212 -0
  102. package/src/components/Calendar/components/week/DayEvent.vue +585 -0
  103. package/src/components/Calendar/components/week/DayTimeline.vue +86 -0
  104. package/src/components/Calendar/components/week/FullDayEvent.vue +121 -0
  105. package/src/components/Calendar/components/week/Week.vue +414 -0
  106. package/src/components/Calendar/components/week/WeekTimeline.vue +126 -0
  107. package/src/components/Calendar/constants.ts +13 -0
  108. package/src/components/Calendar/env.d.ts +8 -0
  109. package/src/components/Calendar/helpers/DayIntervals.ts +48 -0
  110. package/src/components/Calendar/helpers/EDate.ts +18 -0
  111. package/src/components/Calendar/helpers/Errors.ts +69 -0
  112. package/src/components/Calendar/helpers/EventChange.ts +88 -0
  113. package/src/components/Calendar/helpers/EventConcurrency.ts +69 -0
  114. package/src/components/Calendar/helpers/EventFlyoutPosition.ts +96 -0
  115. package/src/components/Calendar/helpers/EventPosition.ts +154 -0
  116. package/src/components/Calendar/helpers/EventsFilter.ts +50 -0
  117. package/src/components/Calendar/helpers/Helpers.ts +86 -0
  118. package/src/components/Calendar/helpers/Time.ts +588 -0
  119. package/src/components/Calendar/helpers/Week.ts +37 -0
  120. package/src/components/Calendar/index.ts +4 -0
  121. package/src/components/Calendar/language/index.ts +37 -0
  122. package/src/components/Calendar/language/keys.ts +90 -0
  123. package/src/components/Calendar/models/Event.ts +112 -0
  124. package/src/components/Calendar/styles/_mixins.css +21 -0
  125. package/src/components/Calendar/styles/_variables.css +51 -0
  126. package/src/components/Calendar/typings/config.interface.ts +87 -0
  127. package/src/components/Calendar/typings/interfaces/day.interface.ts +10 -0
  128. package/src/components/Calendar/typings/interfaces/event.interface.ts +32 -0
  129. package/src/components/Calendar/typings/interfaces/full-day-events-week.type.ts +8 -0
  130. package/src/components/Calendar/typings/interfaces/period.interface.ts +5 -0
  131. package/src/components/Calendar/typings/interfaces/time-modes.ts +9 -0
  132. package/src/components/Calendar/typings/types.ts +23 -0
  133. package/src/components/DataTable/DataTable.vue +4 -0
  134. package/src/components/form/inputs/DatePick.vue +189 -152
  135. package/src/components/form/inputs/NumberInput.vue +1 -3
  136. package/src/components/index.ts +3 -6
  137. package/src/directives/index.ts +2 -0
  138. package/src/directives/vResize.ts +205 -0
@@ -0,0 +1,274 @@
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 { PeriodInterface } from '../../typings/interfaces/period.interface'
6
+ import type { modeType } from '../../typings/types'
7
+
8
+ import { DatePick, Icon, TabsNav } from '@bagelink/vue'
9
+ import { ref, computed, watch } from 'vue'
10
+
11
+ const props = defineProps({
12
+ config: {
13
+ type: Object as PropType<ConfigInterface>,
14
+ default: () => ({}),
15
+ },
16
+ mode: {
17
+ type: String as PropType<modeType>,
18
+ default: 'week',
19
+ },
20
+ time: {
21
+ type: Object as PropType<Time>,
22
+ default: () => ({}),
23
+ },
24
+ period: {
25
+ type: Object as PropType<PeriodInterface>,
26
+ required: true,
27
+ },
28
+ isSmall: {
29
+ type: Boolean,
30
+ required: true,
31
+ },
32
+ })
33
+
34
+ const emit = defineEmits<{
35
+ (e: 'changeMode', mode: modeType): void
36
+ (e: 'updatedPeriod', value: PeriodInterface): void
37
+ }>()
38
+
39
+ const periodSelect = ref<InstanceType<typeof DatePick>>()
40
+ const currentPeriod = ref(props.period)
41
+ const modeOptions = ref<modeType[]>(['month', 'week', 'day', 'agenda'])
42
+
43
+ const icons = {
44
+ chevronLeft: 'chevron_left',
45
+ chevronRight: 'chevron_right',
46
+ }
47
+
48
+ const periodName = computed(() => {
49
+ if (props.mode === 'week') {
50
+ const startMonth = props.time.getLocalizedNameOfMonth(
51
+ currentPeriod.value.start,
52
+ 'short'
53
+ )
54
+ const endMonth = props.time.getLocalizedNameOfMonth(
55
+ currentPeriod.value.end,
56
+ 'short'
57
+ )
58
+
59
+ return startMonth === endMonth
60
+ ? startMonth
61
+ : `${startMonth} - ${endMonth}`
62
+ }
63
+
64
+ // day
65
+ return `${props.time.getLocalizedNameOfMonth(
66
+ currentPeriod.value.selectedDate,
67
+ 'short'
68
+ )} ${currentPeriod.value.selectedDate.getFullYear()}`
69
+ })
70
+
71
+ const modeLocal = ref(props.mode)
72
+
73
+ const onlyDayModeIsEnabled = computed(() => {
74
+ const weekIsDisabled = props.config.disableModes?.includes('week')
75
+ const monthIsDisabled = props.config.disableModes?.includes('month')
76
+
77
+ return props.config.disableModes && weekIsDisabled && monthIsDisabled
78
+ })
79
+
80
+ watch(() => props.isSmall, (value) => {
81
+ if (value) modeOptions.value = ['month', 'day']
82
+ else modeOptions.value = ['month', 'week', 'day', 'agenda']
83
+ }, { immediate: true })
84
+
85
+ function dateToPeriod(selectedDate: Date) {
86
+ const period: PeriodInterface = {
87
+ start: new Date(),
88
+ end: new Date(),
89
+ selectedDate
90
+ }
91
+ if (props.mode === 'week') {
92
+ period.start = props.time.getCalendarWeekDateObjects(selectedDate)[0]
93
+ period.end = props.time.getCalendarWeekDateObjects(selectedDate)[6]
94
+ } else if (props.mode === 'month') {
95
+ period.start = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1)
96
+ period.end = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0)
97
+ } else {
98
+ period.start = selectedDate
99
+ period.end = selectedDate
100
+ }
101
+ return period
102
+ }
103
+
104
+ function handlePeriodChange() {
105
+ if (!currentPeriod.value) return
106
+ currentPeriod.value = dateToPeriod(currentPeriod.value.selectedDate)
107
+ emit('updatedPeriod', currentPeriod.value)
108
+ }
109
+
110
+ function goToPeriod(direction: 'previous' | 'next') {
111
+ const date = currentPeriod.value.selectedDate
112
+ if (props.mode === 'month') {
113
+ date.setMonth(direction === 'previous' ? date.getMonth() - 1 : date.getMonth() + 1)
114
+ } else if (props.mode === 'week') {
115
+ date.setDate(direction === 'previous' ? date.getDate() - 7 : date.getDate() + 7)
116
+ } else {
117
+ date.setDate(direction === 'previous' ? date.getDate() - 1 : date.getDate() + 1)
118
+ }
119
+ currentPeriod.value = dateToPeriod(date)
120
+ emit('updatedPeriod', currentPeriod.value)
121
+ }
122
+ </script>
123
+
124
+ <template>
125
+ <div class="calendar-header">
126
+ <div
127
+ v-if="periodName"
128
+ class="calendar-header__period-name"
129
+ >
130
+ {{ periodName }}
131
+ </div>
132
+
133
+ <div class="flex gap-05">
134
+ <div class="calendar-header__chevron-arrows">
135
+ <Icon
136
+ class="calendar-header__chevron-arrow calendar-header__chevron-arrow-left"
137
+ :icon="icons.chevronLeft"
138
+ @click="goToPeriod('previous')"
139
+ />
140
+
141
+ <Icon
142
+ class="calendar-header__chevron-arrow calendar-header__chevron-arrow-right"
143
+ :icon="icons.chevronRight"
144
+ @click="goToPeriod('next')"
145
+ />
146
+ </div>
147
+ <DatePick
148
+ ref="periodSelect"
149
+ v-model="currentPeriod.selectedDate"
150
+ :mode="mode"
151
+ @update:modelValue="handlePeriodChange"
152
+ />
153
+
154
+ <div
155
+ v-if="!onlyDayModeIsEnabled"
156
+ class="calendar-header__mode-picker"
157
+ >
158
+ <TabsNav v-model="modeLocal" :tabs="modeOptions" group="mode" @update:model-value="emit('changeMode', $event)" />
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </template>
163
+
164
+ <style scoped>
165
+ .calendar-header {
166
+ display: flex;
167
+ flex-wrap: wrap;
168
+ align-items: center;
169
+ justify-content: space-between;
170
+ padding: var(--qalendar-spacing-half);
171
+ border-radius: var(--qalendar-border-radius);
172
+ }
173
+
174
+ @media (min-width: 768px) {
175
+ .calendar-header {
176
+ justify-content: space-between;
177
+ gap: var(--qalendar-spacing);
178
+ }
179
+ }
180
+
181
+ :global(.dark) .calendar-header {
182
+ color: var(--qalendar-dark-mode-text-hint);
183
+ }
184
+
185
+
186
+ .calendar-header__period-name {
187
+ font-size: var(--qalendar-font-l);
188
+ text-align: center;
189
+ }
190
+
191
+ @media (min-width: 768px) {
192
+ .calendar-header__period-name {
193
+ margin-bottom: 0;
194
+ text-align: left;
195
+ }
196
+ }
197
+
198
+ .calendar-header__multiselects {
199
+ display: flex;
200
+ flex-wrap: wrap;
201
+ align-items: center;
202
+ gap: var(--qalendar-spacing);
203
+ }
204
+
205
+ .calendar-header__chevron-arrows {
206
+ display: flex;
207
+ align-items: center;
208
+ gap: 20px;
209
+ }
210
+
211
+ .calendar-header__chevron-arrow {
212
+ cursor: pointer;
213
+ transition: color 0.2s ease;
214
+ font-size: var(--qalendar-font-m);
215
+ }
216
+
217
+ .calendar-header__chevron-arrow:hover {
218
+ color: var(--qalendar-gray-quite-dark);
219
+ }
220
+
221
+ .calendar-header__mode-picker {
222
+ position: relative;
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ width: fit-content;
227
+ height: 36px;
228
+ border-radius: 4px;
229
+ font-size: var(--qalendar-font-m);
230
+ cursor: pointer;
231
+ border: var(--qalendar-border-gray-thin);
232
+ }
233
+
234
+ :global(.dark) .calendar-header__mode-picker {
235
+ border-color: transparent;
236
+ }
237
+
238
+ .calendar-header__mode-value {
239
+ padding: 0 var(--qalendar-spacing);
240
+ width: 100%;
241
+ height: 100%;
242
+ display: flex;
243
+ align-items: center;
244
+ user-select: none;
245
+ border-radius: 4px;
246
+ }
247
+
248
+ :global(.dark) .calendar-header__mode-value {
249
+ background-color: var(--qalendar-dark-mode-lightly-elevated-surface);
250
+ }
251
+
252
+ .calendar-header__mode-options {
253
+ position: absolute;
254
+ z-index: 51;
255
+ top: 100%;
256
+ left: 50%;
257
+ transform: translateX(-50%);
258
+ border: var(--qalendar-border-gray-thin);
259
+ background-color: #fff;
260
+ }
261
+
262
+ :global(.dark) .calendar-header__mode-options {
263
+ border-color: transparent;
264
+ background-color: var(--qalendar-dark-mode-elevated-surface);
265
+ }
266
+
267
+ .calendar-header__mode-option {
268
+ padding: var(--qalendar-spacing-half) var(--qalendar-spacing);
269
+ }
270
+
271
+ .calendar-header__mode-option:hover {
272
+ background-color: var(--qalendar-option-hover);
273
+ }
274
+ </style>
@@ -0,0 +1,137 @@
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 { EventInterface } from '../../typings/interfaces/event.interface'
6
+ import { Icon } from '@bagelink/vue'
7
+ import { ref, computed, 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
+ })
24
+
25
+ const emit = defineEmits(['eventWasClicked'])
26
+
27
+ const icons = {
28
+ clock: 'clock',
29
+ user: 'user',
30
+ description: 'comment',
31
+ trash: 'delete',
32
+ edit: 'pen-to-square',
33
+ times: 'close',
34
+ topic: 'question-circle',
35
+ location: 'location_on',
36
+ }
37
+
38
+ const colors = EVENT_COLORS as { [key: string]: string }
39
+ const eventBackgroundColor = ref('')
40
+ const eventColor = ref('#fff')
41
+ const eventIdPrefix = 'agenda__event-'
42
+
43
+ const eventTime = computed(() => {
44
+ return DATE_TIME_STRING_PATTERN.test(props.calendarEvent.time.start)
45
+ ? props.time.getLocalizedTimeRange(
46
+ props.calendarEvent.time.start,
47
+ props.calendarEvent.time.end
48
+ )
49
+ : null
50
+ })
51
+
52
+ const elementId = computed(() => {
53
+ return eventIdPrefix + props.calendarEvent.id
54
+ })
55
+
56
+ function setColors() {
57
+ if (
58
+ props.calendarEvent.colorScheme
59
+ && props.config.style?.colorSchemes
60
+ && props.config.style.colorSchemes[props.calendarEvent.colorScheme]
61
+ ) {
62
+ eventColor.value = props.config.style.colorSchemes[props.calendarEvent.colorScheme].color
63
+ eventBackgroundColor.value = props.config.style.colorSchemes[props.calendarEvent.colorScheme].backgroundColor
64
+ return
65
+ }
66
+
67
+ if (props.calendarEvent.color) {
68
+ eventBackgroundColor.value = colors[props.calendarEvent.color]
69
+ return
70
+ }
71
+
72
+ eventBackgroundColor.value = colors.blue
73
+ }
74
+
75
+ function handleClickOnEvent() {
76
+ const eventElement = document.getElementById(elementId.value)
77
+ emit('eventWasClicked', {
78
+ clickedEvent: props.calendarEvent,
79
+ eventElement,
80
+ })
81
+ }
82
+
83
+ onMounted(() => {
84
+ setColors()
85
+ })
86
+ </script>
87
+
88
+ <template>
89
+ <div
90
+ :id="elementId"
91
+ class="agenda__event is-event"
92
+ @click.prevent="handleClickOnEvent"
93
+ >
94
+ <span
95
+ v-if="eventTime && !calendarEvent.originalEvent"
96
+ class="agenda__event-time"
97
+ >
98
+ <Icon :icon="icons.clock" />
99
+ {{ eventTime }}
100
+ </span>
101
+
102
+ <span class="agenda__event-title">
103
+ {{ calendarEvent.title }}
104
+ </span>
105
+ <span
106
+ v-if="calendarEvent.with"
107
+ class="agenda__event-with"
108
+ >
109
+ <Icon :icon="icons.user" />
110
+ {{ calendarEvent.with }}
111
+ </span>
112
+
113
+ <span
114
+ v-if="calendarEvent.location"
115
+ class="agenda__event-location"
116
+ >
117
+ <Icon :icon="icons.location" />
118
+ {{ calendarEvent.location }}
119
+ </span>
120
+ </div>
121
+ </template>
122
+
123
+ <style scoped>
124
+ .agenda__event {
125
+ background-color: v-bind(eventBackgroundColor);
126
+ color: v-bind(eventColor);
127
+ display: flex;
128
+ flex-flow: column;
129
+ justify-content: flex-start;
130
+ border-radius: 4px;
131
+ font-size: var(--qalendar-font-2xs);
132
+ margin-bottom: 4px;
133
+ padding: var(--qalendar-spacing);
134
+ cursor: pointer;
135
+ user-select: none;
136
+ }
137
+ </style>
@@ -0,0 +1,107 @@
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 { getLanguage, languageKeys } from '../../language'
7
+ import AgendaEventTile from './AgendaEventTile.vue'
8
+
9
+ const props = defineProps({
10
+ config: {
11
+ type: Object as PropType<ConfigInterface>,
12
+ required: true,
13
+ },
14
+ time: {
15
+ type: Object as PropType<Time>,
16
+ required: true,
17
+ },
18
+ day: {
19
+ type: Object as PropType<DayInterface>,
20
+ required: true,
21
+ },
22
+ })
23
+
24
+ const emit = defineEmits(['eventWasClicked'])
25
+ </script>
26
+
27
+ <template>
28
+ <div class="agenda__wrapper">
29
+ <header class="agenda__header">
30
+ <div class="agenda__header-day-name">
31
+ {{ day.dayName }}
32
+ </div>
33
+ <div class="agenda__header-date">
34
+ <!-- Here we want to display leading zero for days 1-9, in order to prevent layout shifts -->
35
+ {{ day.dateTimeString.substring(8, 10) }}
36
+ </div>
37
+ </header>
38
+ <div class="agenda__content">
39
+ <div
40
+ v-if="day.events.length === 0"
41
+ class="is-empty"
42
+ >
43
+ {{ getLanguage(languageKeys.noEvent, time.CALENDAR_LOCALE) }}
44
+ </div>
45
+ <div
46
+ v-else
47
+ class="agenda__content-events-list"
48
+ >
49
+ <AgendaEventTile
50
+ v-for="dayEvent of day.events"
51
+ :key="`agenda_event_${dayEvent.id}`"
52
+ :day="day"
53
+ :config="config"
54
+ :calendar-event="dayEvent"
55
+ :time="time"
56
+ @event-was-clicked="emit('eventWasClicked', $event)"
57
+ />
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </template>
62
+
63
+ <style scoped>
64
+ .agenda__wrapper {
65
+ display: flex;
66
+ flex-flow: row;
67
+ padding: 10px 5px 0;
68
+ }
69
+
70
+ .agenda__header {
71
+ padding-right: 10px;
72
+ }
73
+
74
+ .agenda__header-day-name {
75
+ text-align: center;
76
+ color: var(--qalendar-theme-color);
77
+ font-size: var(--qalendar-font-xs);
78
+ font-weight: bold;
79
+ }
80
+
81
+ .agenda__header-date {
82
+ height: fit-content;
83
+ display: flex;
84
+ justify-content: center;
85
+ align-items: center;
86
+ padding: 5px;
87
+ border-radius: 4px;
88
+ background-color: var(--qalendar-theme-color);
89
+ color: white;
90
+ font-weight: 600;
91
+ font-size: var(--qalendar-font-m);
92
+ }
93
+
94
+ .agenda__content {
95
+ display: flex;
96
+ flex-flow: column;
97
+ width: 100%;
98
+ height: auto;
99
+ }
100
+
101
+ .agenda__content .is-empty {
102
+ min-height: 70px;
103
+ display: flex;
104
+ justify-content: center;
105
+ align-items: center;
106
+ }
107
+ </style>