@bagelink/vue 1.2.15 → 1.2.18

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 (114) hide show
  1. package/dist/components/calendar/CalendarTypes.d.ts +13 -0
  2. package/dist/components/calendar/CalendarTypes.d.ts.map +1 -0
  3. package/dist/components/calendar/Index.vue.d.ts +39 -507
  4. package/dist/components/calendar/Index.vue.d.ts.map +1 -1
  5. package/dist/components/calendar/utils.d.ts +31 -0
  6. package/dist/components/calendar/utils.d.ts.map +1 -0
  7. package/dist/components/calendar/views/AgendaView.vue.d.ts +16 -0
  8. package/dist/components/calendar/views/AgendaView.vue.d.ts.map +1 -0
  9. package/dist/components/calendar/views/DayView.vue.d.ts +50 -0
  10. package/dist/components/calendar/views/DayView.vue.d.ts.map +1 -0
  11. package/dist/components/calendar/views/MonthView.vue.d.ts +20 -0
  12. package/dist/components/calendar/views/MonthView.vue.d.ts.map +1 -0
  13. package/dist/components/calendar/views/WeekView.vue.d.ts +33 -0
  14. package/dist/components/calendar/views/WeekView.vue.d.ts.map +1 -0
  15. package/dist/components/form/BglMultiStepForm.vue.d.ts +63 -0
  16. package/dist/components/form/BglMultiStepForm.vue.d.ts.map +1 -0
  17. package/dist/components/form/index.d.ts +1 -0
  18. package/dist/components/form/index.d.ts.map +1 -1
  19. package/dist/components/form/inputs/CodeEditor/Index.vue.d.ts.map +1 -1
  20. package/dist/components/form/inputs/DateInput.vue.d.ts +3 -3
  21. package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
  22. package/dist/components/form/inputs/DatePicker.vue.d.ts +3 -3
  23. package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
  24. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  25. package/dist/index.cjs +2166 -3870
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.mjs +2167 -3871
  29. package/dist/style.css +604 -628
  30. package/dist/utils/BagelFormUtils.d.ts +4 -2
  31. package/dist/utils/BagelFormUtils.d.ts.map +1 -1
  32. package/dist/utils/calendar/EDate.d.ts +2 -0
  33. package/dist/utils/calendar/EDate.d.ts.map +1 -0
  34. package/dist/utils/calendar/Helpers.d.ts +19 -0
  35. package/dist/utils/calendar/Helpers.d.ts.map +1 -0
  36. package/dist/utils/calendar/constants.d.ts +3 -0
  37. package/dist/utils/calendar/constants.d.ts.map +1 -0
  38. package/dist/utils/calendar/dateUtils.d.ts +30 -0
  39. package/dist/utils/calendar/dateUtils.d.ts.map +1 -0
  40. package/dist/utils/calendar/event.interface.d.ts +32 -0
  41. package/dist/utils/calendar/event.interface.d.ts.map +1 -0
  42. package/dist/utils/calendar/time.d.ts +117 -0
  43. package/dist/utils/calendar/time.d.ts.map +1 -0
  44. package/dist/utils/calendar/types.d.ts +27 -0
  45. package/dist/utils/calendar/types.d.ts.map +1 -0
  46. package/dist/utils/calendar/typings.d.ts +87 -0
  47. package/dist/utils/calendar/typings.d.ts.map +1 -0
  48. package/dist/utils/calendar/week.d.ts +117 -0
  49. package/dist/utils/calendar/week.d.ts.map +1 -0
  50. package/package.json +1 -1
  51. package/src/components/calendar/CalendarTypes.ts +13 -0
  52. package/src/components/calendar/Index.vue +124 -389
  53. package/src/components/calendar/utils.ts +70 -0
  54. package/src/components/calendar/views/AgendaView.vue +263 -0
  55. package/src/components/calendar/views/DayView.vue +417 -0
  56. package/src/components/calendar/views/MonthView.vue +313 -0
  57. package/src/components/calendar/views/WeekView.vue +432 -0
  58. package/src/components/form/BglMultiStepForm.vue +323 -70
  59. package/src/components/form/index.ts +1 -0
  60. package/src/components/form/inputs/CodeEditor/Index.vue +11 -0
  61. package/src/components/form/inputs/DateInput.vue +3 -3
  62. package/src/components/form/inputs/DatePicker.vue +3 -3
  63. package/src/components/form/inputs/SelectInput.vue +2 -0
  64. package/src/components/form/inputs/Upload/upload.types.d.ts +0 -1
  65. package/src/index.ts +2 -2
  66. package/src/styles/inputs.css +138 -137
  67. package/src/styles/layout.css +3 -2
  68. package/src/styles/mobilLayout.css +4 -2
  69. package/src/utils/BagelFormUtils.ts +6 -2
  70. package/src/utils/calendar/EDate.ts +0 -0
  71. package/src/{components/calendar/helpers → utils/calendar}/Helpers.ts +6 -6
  72. package/src/utils/calendar/constants.ts +2 -0
  73. package/src/utils/{timeAgo.ts → calendar/dateUtils.ts} +38 -1
  74. package/src/utils/calendar/event.interface.ts +33 -0
  75. package/src/{components/calendar/helpers/Time.ts → utils/calendar/time.ts} +15 -15
  76. package/src/utils/calendar/types.ts +27 -0
  77. package/src/{components/calendar/typings/config.interface.ts → utils/calendar/typings.ts} +13 -6
  78. package/src/utils/calendar/week.ts +588 -0
  79. package/src/components/calendar/assets/base.css +0 -60
  80. package/src/components/calendar/components/header/Header.vue +0 -153
  81. package/src/components/calendar/components/month/AgendaEventTile.vue +0 -135
  82. package/src/components/calendar/components/month/AgendaEvents.vue +0 -72
  83. package/src/components/calendar/components/month/Day.vue +0 -256
  84. package/src/components/calendar/components/month/Event.vue +0 -164
  85. package/src/components/calendar/components/month/Month.vue +0 -241
  86. package/src/components/calendar/components/month/WeekDay.vue +0 -15
  87. package/src/components/calendar/components/partials/EventFlyout.vue +0 -430
  88. package/src/components/calendar/components/week/Day.vue +0 -198
  89. package/src/components/calendar/components/week/DayEvent.vue +0 -584
  90. package/src/components/calendar/components/week/DayTimeline.vue +0 -80
  91. package/src/components/calendar/components/week/FullDayEvent.vue +0 -121
  92. package/src/components/calendar/components/week/Week.vue +0 -414
  93. package/src/components/calendar/components/week/WeekTimeline.vue +0 -101
  94. package/src/components/calendar/constants.ts +0 -13
  95. package/src/components/calendar/helpers/DayIntervals.ts +0 -48
  96. package/src/components/calendar/helpers/EDate.ts +0 -18
  97. package/src/components/calendar/helpers/Errors.ts +0 -69
  98. package/src/components/calendar/helpers/EventChange.ts +0 -88
  99. package/src/components/calendar/helpers/EventConcurrency.ts +0 -69
  100. package/src/components/calendar/helpers/EventFlyoutPosition.ts +0 -96
  101. package/src/components/calendar/helpers/EventPosition.ts +0 -154
  102. package/src/components/calendar/helpers/EventsFilter.ts +0 -50
  103. package/src/components/calendar/helpers/Week.ts +0 -37
  104. package/src/components/calendar/language/index.ts +0 -41
  105. package/src/components/calendar/language/keys.ts +0 -99
  106. package/src/components/calendar/models/Event.ts +0 -112
  107. package/src/components/calendar/styles/_mixins.css +0 -21
  108. package/src/components/calendar/styles/_variables.css +0 -47
  109. package/src/components/calendar/typings/interfaces/day.interface.ts +0 -10
  110. package/src/components/calendar/typings/interfaces/event.interface.ts +0 -32
  111. package/src/components/calendar/typings/interfaces/full-day-events-week.type.ts +0 -8
  112. package/src/components/calendar/typings/interfaces/period.interface.ts +0 -5
  113. package/src/components/calendar/typings/interfaces/time-modes.ts +0 -11
  114. package/src/components/calendar/typings/types.ts +0 -27
@@ -1,121 +0,0 @@
1
- <script setup lang="ts">
2
- import type { PropType } from 'vue'
3
- import type { ConfigInterface } from '../../typings/config.interface'
4
- import type { EventInterface } from '../../typings/interfaces/event.interface'
5
- import type { ModeType } from '../../typings/types'
6
- import { computed, onMounted, ref } from 'vue'
7
- import { EVENT_COLORS } from '../../constants'
8
-
9
- interface extendedEventInterface extends EventInterface {
10
- nDays: number
11
- }
12
-
13
- const props = defineProps({
14
- scheduleEvent: {
15
- type: Object as PropType<extendedEventInterface>,
16
- default: null,
17
- },
18
- config: {
19
- type: Object as PropType<ConfigInterface>,
20
- required: true,
21
- },
22
- mode: {
23
- type: String as PropType<ModeType>,
24
- required: true,
25
- },
26
- })
27
-
28
- const emit = defineEmits(['eventWasClicked'])
29
-
30
- const colors = EVENT_COLORS as { [key: string]: string }
31
- const eventColor = ref('#fff')
32
- const eventBackgroundColor = ref('')
33
- const eventElementIdPrefix = 'week-timeline__event-id-'
34
-
35
- const eventWidth = computed(() => {
36
- if (props.mode !== 'day')
37
- return `calc(${props.scheduleEvent.nDays * 100}%)`
38
-
39
- return 'calc(100%)'
40
- })
41
-
42
- function setColors() {
43
- if (
44
- props.scheduleEvent.colorScheme
45
- && props.config.style?.colorSchemes
46
- && props.config.style.colorSchemes[props.scheduleEvent.colorScheme]
47
- ) {
48
- eventColor.value = props.config.style.colorSchemes[props.scheduleEvent.colorScheme].color
49
- eventBackgroundColor.value = props.config.style.colorSchemes[props.scheduleEvent.colorScheme].backgroundColor
50
- return
51
- }
52
-
53
- if (props.scheduleEvent.color) {
54
- eventColor.value = '#fff'
55
- eventBackgroundColor.value = colors[props.scheduleEvent.color]
56
- return
57
- }
58
-
59
- eventBackgroundColor.value = colors.blue
60
- }
61
-
62
- function handleClickOnEvent() {
63
- const eventElement = document.getElementById(
64
- eventElementIdPrefix + props.scheduleEvent.id
65
- )
66
-
67
- emit('eventWasClicked', {
68
- clickedEvent: props.scheduleEvent,
69
- eventElement,
70
- })
71
- }
72
-
73
- onMounted(() => {
74
- setColors()
75
- })
76
- </script>
77
-
78
- <template>
79
- <div
80
- v-if="scheduleEvent"
81
- :id="`${eventElementIdPrefix}${scheduleEvent.id}`"
82
- class="week-timeline__event is-event"
83
- :style="{
84
- width: eventWidth,
85
- color: eventColor,
86
- backgroundColor: eventBackgroundColor,
87
- zIndex: 1,
88
- }"
89
- @click="handleClickOnEvent"
90
- >
91
- {{ scheduleEvent.title }}
92
- </div>
93
-
94
- <div
95
- v-else
96
- class="week-timeline__event"
97
- />
98
- </template>
99
-
100
- <style scoped>
101
- .week-timeline__event {
102
- position: relative;
103
- --event-padding: 3px;
104
- display: flex;
105
- align-items: center;
106
- height: 0.9rem;
107
- width: calc(100% - var(--event-padding));
108
- font-size: var(--qalendar-font-2xs);
109
- border-radius: 4px;
110
- padding: var(--event-padding);
111
- margin-bottom: 0.25em;
112
- text-align: start;
113
- cursor: pointer;
114
- user-select: none;
115
- overflow: hidden;
116
- }
117
-
118
- .week-timeline__event:active {
119
- cursor: not-allowed;
120
- }
121
- </style>
@@ -1,414 +0,0 @@
1
- <script setup lang="ts">
2
- import type { PropType } from 'vue'
3
- import type Time from '../../helpers/Time'
4
- import type { ConfigInterface, DayIntervalsType } from '../../typings/config.interface'
5
- import type { DayInterface } from '../../typings/interfaces/day.interface'
6
- import type { EventInterface } from '../../typings/interfaces/event.interface'
7
- import type { FullDayEventsWeek } from '../../typings/interfaces/full-day-events-week.type'
8
- import type { PeriodInterface } from '../../typings/interfaces/period.interface'
9
- import type { ModeType } from '../../typings/types'
10
- import { ref, computed, onMounted, watch, useSlots } from 'vue'
11
- import EventPosition from '../../helpers/EventPosition'
12
- import { EventsFilter } from '../../helpers/EventsFilter'
13
- import Helpers from '../../helpers/Helpers'
14
- import { WEEK_START_DAY } from '../../helpers/Time'
15
- import { WeekHelper } from '../../helpers/Week'
16
- import EventFlyout from '../partials/EventFlyout.vue'
17
- import Day from './Day.vue'
18
- import DayTimeline from './DayTimeline.vue'
19
- import WeekTimeline from './WeekTimeline.vue'
20
-
21
- const props = defineProps({
22
- config: {
23
- type: Object as PropType<ConfigInterface>,
24
- required: true,
25
- },
26
- eventsProp: {
27
- type: Array as PropType<EventInterface[]>,
28
- default: () => [],
29
- },
30
- period: {
31
- type: Object as PropType<PeriodInterface>,
32
- required: true,
33
- },
34
- modeProp: {
35
- type: String as PropType<ModeType>,
36
- default: 'week',
37
- },
38
- time: {
39
- type: Object as PropType<Time | any>,
40
- required: true,
41
- },
42
- })
43
-
44
- const emit = defineEmits([
45
- 'eventWasClicked',
46
- 'eventWasResized',
47
- 'eventWasDragged',
48
- 'editEvent',
49
- 'deleteEvent',
50
- 'intervalWasClicked',
51
- 'dayWasClicked',
52
- 'datetimeWasClicked',
53
- ])
54
-
55
- const eventPosition = new EventPosition()
56
-
57
- const days = ref<DayInterface[]>([])
58
- const mode = ref<ModeType>(props.modeProp)
59
- const selectedEvent = ref<EventInterface | null>(null)
60
- const selectedEventElement = ref<any | null>(null)
61
- const events = ref<EventInterface[]>(props.eventsProp)
62
- const fullDayEvents = ref<FullDayEventsWeek>([])
63
- const weekVersion = ref(0)
64
- const dayIntervals = ref<DayIntervalsType | any>({
65
- length: 60,
66
- height: 66,
67
- })
68
- const weekHeight = ref('1584px')
69
- const currentTimePercentage = ref(0)
70
- const showCurrentTime = ref(!!props.config.showCurrentTime)
71
-
72
- const hasCustomCurrentTimeSlot = computed(() => {
73
- return Helpers.hasSlotContent(useSlots().customCurrentTime)
74
- })
75
-
76
- const nDays = computed(() => {
77
- return props.config.week?.nDays || 7
78
- })
79
-
80
- watch(() => props.period, () => {
81
- setInitialEvents(mode.value)
82
- }, { deep: true })
83
-
84
- watch(() => props.modeProp, (value) => {
85
- mode.value = value
86
- setInitialEvents(value)
87
- }, { deep: true })
88
-
89
- onMounted(() => {
90
- setDayIntervals()
91
- separateFullDayEventsFromOtherEvents()
92
- setInitialEvents(props.modeProp)
93
- if (props.config.showCurrentTime || hasCustomCurrentTimeSlot.value) setCurrentTime()
94
- })
95
-
96
- function separateFullDayEventsFromOtherEvents() {
97
- const {
98
- singleDayTimedEvents,
99
- fullDayAndMultipleDayEvents,
100
- } = WeekHelper.eventSeparator(events.value, props.time)
101
-
102
- events.value = singleDayTimedEvents
103
- positionFullDayEvents(fullDayAndMultipleDayEvents)
104
- }
105
-
106
- function positionFullDayEvents(fullDayAndMultipleDayEvents: EventInterface[]) {
107
- const weekEndDate = nDays.value === 5
108
- ? new Date(
109
- props.period.end.getFullYear(),
110
- props.period.end.getMonth(),
111
- props.period.end.getDate() - 2
112
- )
113
- : props.period.end
114
-
115
- fullDayEvents.value = fullDayAndMultipleDayEvents.length
116
- ? eventPosition.positionFullDayEventsInWeek(
117
- props.period.start,
118
- weekEndDate,
119
- fullDayAndMultipleDayEvents
120
- )
121
- : []
122
- }
123
-
124
- function setDays() {
125
- const daysArray = props.time
126
- .getCalendarWeekDateObjects(props.period.start)
127
- .map((day: Date) => {
128
- const dayName = props.time.getLocalizedNameOfWeekday(day, 'long')
129
- const dateTimeString = props.time.getDateTimeStringFromDate(
130
- day,
131
- 'start'
132
- )
133
- const dayEvents = new EventsFilter(events.value).getEventsForDay(props.time, dateTimeString)
134
-
135
- return { dayName, dateTimeString, events: dayEvents }
136
- })
137
-
138
- if (nDays.value === 5 && props.time.FIRST_DAY_OF_WEEK === WEEK_START_DAY.MONDAY) {
139
- // Delete Saturday & Sunday
140
- daysArray.splice(5, 2)
141
- fullDayEvents.value.splice(5, 2)
142
- } else if (nDays.value === 5 && props.time.FIRST_DAY_OF_WEEK === WEEK_START_DAY.SUNDAY) {
143
- // First delete Saturday, then Sunday
144
- daysArray.splice(6, 1)
145
- fullDayEvents.value.splice(6, 1)
146
- daysArray.splice(0, 1)
147
- fullDayEvents.value.splice(0, 1)
148
- }
149
-
150
- days.value = daysArray
151
- }
152
-
153
- function mergeFullDayEventsIntoDays() {
154
- for (const [dayIndex] of days.value.entries()) {
155
- days.value[dayIndex].fullDayEvents = fullDayEvents.value[dayIndex]
156
- }
157
- }
158
-
159
- function setDay() {
160
- const dayDateTimeString = props.time.getDateTimeStringFromDate(
161
- props.period.selectedDate
162
- )
163
- // 1. Set the timed events
164
- days.value = [
165
- {
166
- dayName: new Date(props.period.selectedDate).toLocaleDateString(
167
- props.time.CALENDAR_LOCALE,
168
- { weekday: 'long' }
169
- ),
170
- dateTimeString: props.time.getDateTimeStringFromDate(
171
- props.period.selectedDate,
172
- 'start'
173
- ),
174
- events: new EventsFilter(events.value).getEventsForDay(props.time, dayDateTimeString),
175
- },
176
- ]
177
-
178
- if (!fullDayEvents.value.length) return
179
-
180
- // 2. Set full day events
181
- for (const day of fullDayEvents.value) {
182
- const dayDateString = props.time.getDateTimeStringFromDate(day.date)
183
- if (dayDateString.substring(0, 11) === dayDateTimeString.substring(0, 11)) {
184
- fullDayEvents.value = [day]
185
- return
186
- }
187
- }
188
- }
189
-
190
- function setInitialEvents(currentMode: ModeType) {
191
- if (currentMode === 'day') setDay()
192
- if (currentMode === 'week') setDays()
193
-
194
- mergeFullDayEventsIntoDays()
195
- }
196
-
197
- function handleClickOnEvent(event: {
198
- eventElement: HTMLDivElement
199
- clickedEvent: EventInterface
200
- }) {
201
- emit('eventWasClicked', event)
202
-
203
- selectedEventElement.value = event.eventElement
204
- selectedEvent.value = event.clickedEvent
205
- }
206
-
207
- function handleEventWasDragged(event: EventInterface) {
208
- const cleanedUpEvent = event
209
- // Reset all properties of the event, that need be calculated anew
210
- delete cleanedUpEvent.totalConcurrentEvents
211
- delete cleanedUpEvent.nOfPreviousConcurrentEvents
212
-
213
- const filteredEvents = events.value.filter(e => e.id !== event.id)
214
- events.value = [
215
- cleanedUpEvent,
216
- ...filteredEvents.map((e) => {
217
- // Reset all properties of each event, that need be calculated anew
218
- delete e.nOfPreviousConcurrentEvents
219
- delete e.totalConcurrentEvents
220
-
221
- return e
222
- }),
223
- ]
224
- setInitialEvents(mode.value)
225
- weekVersion.value = weekVersion.value + 1
226
- emit('eventWasDragged', event)
227
- }
228
-
229
- function setDayIntervals() {
230
- if (props.config.dayIntervals) {
231
- for (const [key, value] of Object.entries(props.config.dayIntervals)) {
232
- dayIntervals.value[key] = value
233
- }
234
- }
235
-
236
- setWeekHeightBasedOnIntervals()
237
- }
238
-
239
- function setWeekHeightBasedOnIntervals() {
240
- // 1. Catch faulty configurations
241
- if (![15, 30, 60].includes(dayIntervals.value.length)) {
242
- dayIntervals.value.length = 60
243
- dayIntervals.value.height = 66
244
- console.warn(
245
- 'The dayIntervals configuration is faulty. It has been reset to default values.'
246
- )
247
- }
248
-
249
- // 2. Set a multiplier, for getting length of an hour based on the interval length
250
- let intervalMultiplier = 1
251
- if (dayIntervals.value.length === 15) intervalMultiplier = 4
252
- if (dayIntervals.value.length === 30) intervalMultiplier = 2
253
-
254
- // 3. Set height of the week based on the number and length of intervals
255
- weekHeight.value = `${dayIntervals.value.height * intervalMultiplier * props.time.HOURS_PER_DAY}px`
256
- }
257
-
258
- function setCurrentTime() {
259
- const setTime = () => {
260
- const nowString = props.time.getDateTimeStringFromDate(new Date())
261
- const currentTimePercentage = props.time.getPercentageOfDayFromDateTimeString(
262
- nowString,
263
- props.time.DAY_START,
264
- props.time.DAY_END
265
- )
266
-
267
- if (currentTimePercentage < 0 || currentTimePercentage > 100) {
268
- showCurrentTime.value = false
269
- return
270
- }
271
-
272
- showCurrentTime.value = true
273
- currentTimePercentage.value = currentTimePercentage
274
- }
275
- setTime()
276
- setInterval(() => { setTime() }, 60000)
277
- }
278
- </script>
279
-
280
- <template>
281
- <WeekTimeline
282
- :days="days"
283
- :time="time"
284
- :full-day-events="fullDayEvents"
285
- :config="config"
286
- :mode="mode"
287
- @event-was-clicked="handleClickOnEvent"
288
- @day-was-clicked="$emit('dayWasClicked', $event)"
289
- />
290
-
291
- <div class="calendar-week__wrapper relative ps-3-5">
292
- <EventFlyout
293
- v-if="!config.eventDialog || !config.eventDialog.isDisabled"
294
- :calendar-event-prop="selectedEvent"
295
- :event-element="selectedEventElement"
296
- :time="time"
297
- :config="config"
298
- @hide="selectedEvent = null"
299
- @edit-event="$emit('editEvent', $event)"
300
- @delete-event="$emit('deleteEvent', $event)"
301
- >
302
- <template #default="p">
303
- <slot
304
- name="eventDialog"
305
- :event-dialog-data="p.eventDialogData"
306
- :close-event-dialog="p.closeEventDialog"
307
- />
308
- </template>
309
- </EventFlyout>
310
-
311
- <section class="calendar-week">
312
- <div
313
- v-if="hasCustomCurrentTimeSlot && showCurrentTime"
314
- class="custom-current-time"
315
- :style="{ top: `${currentTimePercentage}%` }"
316
- >
317
- <slot name="customCurrentTime" />
318
- </div>
319
-
320
- <div
321
- v-else-if="config && config.showCurrentTime && showCurrentTime"
322
- class="current-time-line"
323
- :style="{ top: `${currentTimePercentage}%` }"
324
- >
325
- <div class="current-time-line__circle" />
326
- </div>
327
-
328
- <DayTimeline
329
- :key="period.start.getTime() + period.end.getTime() + mode"
330
- :time="time"
331
- :day-intervals="dayIntervals"
332
- :week-height="weekHeight"
333
- />
334
-
335
- <div class="calendar-week__events">
336
- <Day
337
- v-for="(day, dayIndex) in days"
338
- :key="day.dateTimeString + mode + weekVersion"
339
- :day="day"
340
- :time="time"
341
- :config="config"
342
- :day-info="{ daysTotalN: days.length, thisDayIndex: dayIndex, dateTimeString: day.dateTimeString }"
343
- :mode="mode"
344
- :day-intervals="dayIntervals"
345
- :week-height="+weekHeight.replace('px', '')"
346
- @event-was-clicked="handleClickOnEvent"
347
- @event-was-resized="$emit('eventWasResized', $event)"
348
- @event-was-dragged="handleEventWasDragged"
349
- @interval-was-clicked="$emit('intervalWasClicked', $event)"
350
- @day-was-clicked="$emit('dayWasClicked', $event)"
351
- @datetime-was-clicked="$emit('datetimeWasClicked', $event)"
352
- >
353
- <template #weekDayEvent="p">
354
- <slot
355
- :event-data="p.eventData"
356
- name="weekDayEvent"
357
- />
358
- </template>
359
- </Day>
360
- </div>
361
- </section>
362
- </div>
363
- </template>
364
-
365
- <style scoped>
366
- .calendar-week__wrapper {
367
- position: relative;
368
- padding-inline-start: var(--qalendar-week-padding-left);
369
- overflow-y: auto;
370
- }
371
-
372
- .calendar-week {
373
- position: relative;
374
- width: 100%;
375
- flex: 1 1 auto;
376
- }
377
-
378
- .calendar-week__events {
379
- display: flex;
380
- width: 100%;
381
- height: v-bind(weekHeight);
382
- overflow: hidden;
383
- }
384
-
385
- .calendar-week .current-time-line {
386
- position: absolute;
387
- inset-inline-start: 0;
388
- width: 100%;
389
- height: 2px;
390
- z-index: 1;
391
- background-color: red;
392
- }
393
-
394
- .calendar-week .current-time-line__circle {
395
- position: relative;
396
- }
397
-
398
- .calendar-week .current-time-line__circle::before {
399
- content: '';
400
- position: absolute;
401
- transform: translate(-45%, -45%);
402
- width: 10px;
403
- height: 10px;
404
- border-radius: 50%;
405
- background-color: red;
406
- }
407
-
408
- .calendar-week .custom-current-time {
409
- position: absolute;
410
- inset-inline-start: 0;
411
- width: 100%;
412
- z-index: 1;
413
- }
414
- </style>
@@ -1,101 +0,0 @@
1
- <script setup lang="ts">
2
- import type Time from '../../helpers/Time'
3
- import type { ConfigInterface } from '../../typings/config.interface'
4
- import type { DayInterface } from '../../typings/interfaces/day.interface'
5
- import type { DayWithFullDayEvents } from '../../typings/interfaces/full-day-events-week.type'
6
- import type { ModeType } from '../../typings/types'
7
- import { ref, defineEmits } from 'vue'
8
- import FullDayEvent from './FullDayEvent.vue'
9
-
10
- const props = defineProps<{
11
- days: DayInterface[]
12
- time: Time
13
- fullDayEvents: DayWithFullDayEvents[]
14
- config: ConfigInterface
15
- mode: ModeType
16
- }>()
17
-
18
- const emit = defineEmits<{
19
- (e: 'eventWasClicked', event: any): void
20
- (e: 'dayWasClicked', date: string): void
21
- }>()
22
-
23
- const now = ref(new Date())
24
-
25
- function getDaysDate(day: DayInterface) {
26
- const { date } = props.time.getAllVariablesFromDateTimeString(
27
- day.dateTimeString
28
- )
29
- return date
30
- }
31
- </script>
32
-
33
- <template>
34
- <div class="week-timeline flex space-between border-bottom ms-3-5" style="margin-inline-end: 0.5em;">
35
- <div
36
- v-for="(day, dayIndex) in days"
37
- :key="dayIndex"
38
- class="week-timeline__day"
39
- :class="{
40
- 'is-today':
41
- time.getDateTimeStringFromDate(now, 'start') === day.dateTimeString,
42
- }"
43
- @click="emit('dayWasClicked', time.dateStringFrom(day.dateTimeString))"
44
- >
45
- <div class="flex justify-content-center gap-025 txt12 pb-025">
46
- <div class="">
47
- {{ day.dayName.charAt(0).toUpperCase() + day.dayName.slice(1, 3).toLowerCase() }}
48
- </div>
49
-
50
- <div class="week-timeline__date txt14 round inline-flex justify-content-center">
51
- {{ getDaysDate(day) }}
52
- </div>
53
- </div>
54
-
55
- <div class="week-timeline__events">
56
- <template
57
- v-for="(event, key) in day.fullDayEvents"
58
- :key="key"
59
- >
60
- <FullDayEvent
61
- v-if="key !== 'date'"
62
- :schedule-event="typeof event === 'object' ? event : null"
63
- :config="config"
64
- :mode="mode"
65
- @event-was-clicked="emit('eventWasClicked', $event)"
66
- />
67
- </template>
68
- </div>
69
- </div>
70
- </div>
71
- </template>
72
-
73
- <style scoped>
74
- .week-timeline {
75
- height: fit-content;
76
- display: flex;
77
- justify-content: space-evenly;
78
- }
79
-
80
- .mode-is-day .week-timeline {
81
- /* width: calc(100% - 3.5em); */
82
- }
83
-
84
- .week-timeline__day {
85
- width: 100%;
86
- }
87
-
88
- .week-timeline__date {
89
- height: 1.5rem;
90
- width: 1.5rem;
91
- }
92
-
93
- .is-today .week-timeline__date {
94
- background: var(--bgl-primary);
95
- color: var(--bgl-white);
96
- }
97
-
98
- .week-timeline__events {
99
-
100
- }
101
- </style>
@@ -1,13 +0,0 @@
1
- export const EVENT_COLORS = {
2
- yellow: 'var(--bgl-yellow)',
3
- blue: 'var(--bgl-blue)',
4
- green: 'var(--bgl-green)',
5
- red: 'var(--bgl-red)',
6
- pink: 'var(--bgl-pink)',
7
- purple: 'var(--bgl-purple)',
8
- turquoise: 'var(--bgl-turquoise)',
9
- brown: 'var(--bgl-brown)',
10
- }
11
-
12
- export const DATE_TIME_STRING_PATTERN = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/
13
- export const DATE_TIME_STRING_FULL_DAY_PATTERN = /^\d{4}-\d{2}-\d{2}$/
@@ -1,48 +0,0 @@
1
- import Time from './Time'
2
-
3
- export interface Interval {
4
- intervalStart: string
5
- intervalEnd: string
6
- hasBorder?: boolean
7
- }
8
- /**
9
- * Define the data for the clickable intervals to be viewed in a calendar day.
10
- */
11
- export default class DayIntervals extends Time {
12
- private readonly INTERVAL_MINUTES: 15 | 30 | 60
13
- private readonly DAY_START_DATE_TIME_STRING: string
14
- HOURS_PER_DAY = 24
15
-
16
- constructor(
17
- intervalMinutes: 15 | 30 | 60,
18
- dayStartDateTimeString: string,
19
- hoursPerDay = 24,
20
- ) {
21
- super()
22
- this.INTERVAL_MINUTES = intervalMinutes
23
- this.DAY_START_DATE_TIME_STRING = dayStartDateTimeString
24
- this.HOURS_PER_DAY = hoursPerDay
25
- }
26
-
27
- getIntervals(): Interval[] {
28
- const intervals = []
29
- const numberOfIntervalsInDay = this.HOURS_PER_DAY * (60 / this.INTERVAL_MINUTES)
30
- let iteratorDateTimeString = this.DAY_START_DATE_TIME_STRING
31
-
32
- while (intervals.length < numberOfIntervalsInDay) {
33
- const intervalEnd = this.addMinutesToDateTimeString(this.INTERVAL_MINUTES, iteratorDateTimeString)
34
-
35
- intervals.push({
36
- intervalStart: iteratorDateTimeString,
37
- intervalEnd,
38
- // Only show a border at the bottom of an interval, when the upcoming interval is not the start of a new hour.
39
- // This prevents double borders
40
- hasBorder: intervalEnd.substring(14, 16) !== '00'
41
- })
42
-
43
- iteratorDateTimeString = intervalEnd
44
- }
45
-
46
- return intervals
47
- }
48
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * A little helper class (Extended-Date), for allowing destructuring of a date
3
- */
4
- class EDate extends Date {
5
- get fullYear() {
6
- return this.getFullYear()
7
- }
8
-
9
- get month() {
10
- return this.getMonth()
11
- }
12
-
13
- get date() {
14
- return this.getDate()
15
- }
16
- }
17
-
18
- export default EDate