@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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "0.0.1216",
4
+ "version": "0.0.1220",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -81,6 +81,7 @@
81
81
  "access": "public"
82
82
  },
83
83
  "dependencies": {
84
+ "date-fns": "^4.1.0",
84
85
  "@vueuse/core": "^12.5.0",
85
86
  "axios": "^1.7.9",
86
87
  "floating-vue": "^5.2.2",
@@ -0,0 +1,420 @@
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 { ref, computed, onMounted, onBeforeUnmount, watch } from 'vue'
7
+ import AppHeader from './components/header/Header.vue'
8
+ import Month from './components/month/Month.vue'
9
+ import Week from './components/week/Week.vue'
10
+ import Errors from './helpers/Errors'
11
+ import Time from './helpers/Time'
12
+ import AgendaEvents from './components/month/AgendaEvents.vue'
13
+ import type { DayInterface } from './typings/interfaces/day.interface'
14
+ import type { PeriodInterface } from './typings/interfaces/period.interface'
15
+
16
+ const props = defineProps({
17
+ config: {
18
+ type: Object as PropType<ConfigInterface>,
19
+ default: () => ({}),
20
+ },
21
+ events: {
22
+ type: Array as PropType<EventInterface[]>,
23
+ default: () => [],
24
+ },
25
+ selectedDate: {
26
+ type: Date,
27
+ default: new Date(),
28
+ },
29
+ isLoading: {
30
+ type: Boolean,
31
+ default: false,
32
+ },
33
+ })
34
+
35
+ const emit = defineEmits([
36
+ 'eventWasClicked',
37
+ 'eventWasResized',
38
+ 'eventWasDragged',
39
+ 'updatedPeriod',
40
+ 'updatedMode',
41
+ 'editEvent',
42
+ 'deleteEvent',
43
+ 'intervalWasClicked',
44
+ 'dayWasClicked', // TODO: remove with v4. day-was-clicked is deprecated
45
+ 'dateWasClicked',
46
+ 'datetimeWasClicked',
47
+ ] as const)
48
+
49
+ const wasInitialized = ref(0)
50
+ const period = ref({
51
+ start: new Date(),
52
+ end: new Date(),
53
+ selectedDate: props.selectedDate,
54
+ })
55
+ const mode = ref(props.config.defaultMode || ('week' as modeType))
56
+ const time = ref(new Time(props.config.week?.startsOn, props.config.locale || null, {
57
+ start: setTimePointsFromDayBoundary(props.config.dayBoundaries?.start || 0),
58
+ end: setTimePointsFromDayBoundary(props.config.dayBoundaries?.end || 24),
59
+ }) as Time | any)
60
+ const fontFamily = computed(() => props.config.style?.fontFamily || '\'Verdana\', \'Open Sans\', serif')
61
+ const eventRenderingKey = ref(0)
62
+ const eventsDataProperty = ref(props.events)
63
+ const isSmall = ref(false)
64
+ const ErrorsHelper = Errors
65
+ const appHeaderRef = ref()
66
+
67
+ const enhancedConfig = computed((): ConfigInterface => {
68
+ return { ...props.config, isSmall: isSmall.value }
69
+ })
70
+
71
+ watch(() => props.events, (newVal, oldVal) => {
72
+ if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
73
+ eventsDataProperty.value = newVal
74
+ eventRenderingKey.value = eventRenderingKey.value + 1
75
+ }
76
+ if (props.config.isSilent) return
77
+
78
+ props.events.forEach((e) => { ErrorsHelper.checkEventProperties(e) })
79
+ }, { deep: true, immediate: true })
80
+
81
+ watch(() => props.config, (value: ConfigInterface) => {
82
+ ErrorsHelper.checkConfig(value)
83
+ }, { deep: true, immediate: true })
84
+
85
+ onMounted(() => {
86
+ setConfigOnMount()
87
+ onCalendarResize()
88
+ setPeriodOnMount()
89
+ window.addEventListener('resize', onCalendarResize)
90
+ })
91
+
92
+ onBeforeUnmount(() => {
93
+ window.removeEventListener('resize', onCalendarResize)
94
+ })
95
+
96
+ function setConfigOnMount() {
97
+ wasInitialized.value = 1
98
+ }
99
+
100
+ function handleUpdatedPeriod(
101
+ value: PeriodInterface,
102
+ leaveMonthMode = false
103
+ ) {
104
+ emit('updatedPeriod', { start: value.start, end: value.end })
105
+ period.value = value
106
+
107
+ if (leaveMonthMode) mode.value = 'day'
108
+ }
109
+
110
+ function handleChangeMode(payload: modeType) {
111
+ if (payload === 'day') {
112
+ period.value.start = period.value.selectedDate
113
+ period.value.end = time.value.setDateToEndOfDay(period.value.selectedDate)
114
+ }
115
+
116
+ if (payload === 'week') {
117
+ const week = time.value.getCalendarWeekDateObjects(period.value.selectedDate)
118
+ period.value.start = week[0]
119
+ period.value.end = time.value.setDateToEndOfDay(week[6])
120
+ }
121
+
122
+ if (payload === 'month') {
123
+ const month = time.value.getCalendarMonthSplitInWeeks(
124
+ period.value.selectedDate.getFullYear(),
125
+ period.value.selectedDate.getMonth()
126
+ )
127
+
128
+ period.value.start = month[0][0]
129
+ const lastWeek = month[month.length - 1]
130
+ period.value.end = time.value.setDateToEndOfDay(lastWeek[lastWeek.length - 1])
131
+ }
132
+
133
+ mode.value = payload
134
+ emit('updatedMode', { mode: payload, period: period.value })
135
+ }
136
+
137
+ const calendarRoot = ref<HTMLElement>()
138
+
139
+ function onCalendarResize() {
140
+ const documentRoot = document.documentElement
141
+ const documentFontSize = +window
142
+ .getComputedStyle(documentRoot)
143
+ .fontSize
144
+ .split('p')[0]
145
+ const breakPointFor1RemEquals16px = 700
146
+ const multiplier = 16 / documentFontSize
147
+ const smallCalendarBreakpoint = breakPointFor1RemEquals16px / multiplier // For 16px root font-size, break point is at 43.75rem
148
+
149
+ if (!calendarRoot.value) return
150
+
151
+ isSmall.value = calendarRoot.value.clientWidth < smallCalendarBreakpoint
152
+
153
+ if (isSmall.value && !['day', 'month'].includes(mode.value)) {
154
+ mode.value = 'day'
155
+ }
156
+ }
157
+
158
+ function setPeriodOnMount() {
159
+ if (mode.value === 'week') {
160
+ const currentWeek = time.value.getCalendarWeekDateObjects(period.value.selectedDate)
161
+ period.value.start = currentWeek[0]
162
+ period.value.end = currentWeek[6]
163
+ } else if (mode.value === 'month') {
164
+ const month = time.value.getCalendarMonthSplitInWeeks(
165
+ period.value.selectedDate.getFullYear(),
166
+ period.value.selectedDate.getMonth()
167
+ )
168
+ period.value.start = month[0][0]
169
+ const lastWeek = month[month.length - 1]
170
+ period.value.end = lastWeek[lastWeek.length - 1]
171
+ }
172
+ }
173
+
174
+ function handleEventWasUpdated(
175
+ calendarEvent: EventInterface,
176
+ eventType: 'dragged' | 'resized'
177
+ ) {
178
+ const newEvents = eventsDataProperty.value.filter(
179
+ e => e.id !== calendarEvent.id
180
+ )
181
+ eventsDataProperty.value = [calendarEvent, ...newEvents]
182
+ emit(eventType === 'dragged' ? 'eventWasDragged' : 'eventWasResized', calendarEvent)
183
+ }
184
+
185
+ function setTimePointsFromDayBoundary(boundary: number) {
186
+ return Time.getTimePointsFromHour(boundary)
187
+ }
188
+
189
+ const day = $computed(() => {
190
+ return {
191
+ dayName: time.value.getLocalizedNameOfWeekday(period.value.selectedDate, 'long'),
192
+ dateTimeString: period.value.selectedDate.toLocaleDateString('en-US', {
193
+ day: '2-digit',
194
+ month: '2-digit',
195
+ year: 'numeric',
196
+ }),
197
+ events: eventsDataProperty.value.filter(e => {
198
+ const eventDate = new Date(e.time.start)
199
+ return eventDate >= period.value.start && eventDate <= period.value.end
200
+ }),
201
+ fullDayEvents: {
202
+ date: period.value.selectedDate,
203
+ events: eventsDataProperty.value.filter(e => {
204
+ const eventDate = new Date(e.time.start)
205
+ return eventDate >= period.value.start && eventDate <= period.value.end
206
+ }),
207
+ }
208
+ } as DayInterface
209
+ })
210
+
211
+ function handleDateWasClicked(payload: string) {
212
+ emit('dayWasClicked', payload)
213
+ emit('dateWasClicked', payload)
214
+ }
215
+ </script>
216
+
217
+ <template>
218
+ <div class="calendar-root-wrapper">
219
+ <div
220
+ ref="calendarRoot"
221
+ class="calendar-root"
222
+ :class="{
223
+ 'mode-is-day': mode === 'day',
224
+ 'mode-is-week': mode === 'week',
225
+ 'mode-is-month': mode === 'month',
226
+ 'qalendar-is-small': isSmall,
227
+ }"
228
+ :data-lang="config?.locale?.substring(0, 2) || 'en'"
229
+ >
230
+ <Transition name="loading">
231
+ <div
232
+ v-if="isLoading"
233
+ class="top-bar-loader"
234
+ />
235
+ </Transition>
236
+
237
+ <AppHeader
238
+ ref="appHeaderRef"
239
+ :key="wasInitialized + mode"
240
+ :config="config"
241
+ :mode="mode"
242
+ :time="time"
243
+ :period="period"
244
+ :is-small="isSmall"
245
+ @change-mode="handleChangeMode"
246
+ @updated-period="handleUpdatedPeriod"
247
+ />
248
+ <AgendaEvents
249
+ v-if="mode === 'agenda'"
250
+ :events-prop="eventsDataProperty"
251
+ :period="period"
252
+ :config="config"
253
+ :time="time"
254
+ :day="day"
255
+ />
256
+
257
+ <Week
258
+ v-if="['week', 'day'].includes(mode)"
259
+ :key="period.start.getTime() + period.end.getTime() + eventRenderingKey"
260
+ :events-prop="eventsDataProperty"
261
+ :period="period"
262
+ :config="config"
263
+ :mode-prop="mode"
264
+ :time="time"
265
+ @event-was-clicked="$emit('eventWasClicked', $event)"
266
+ @event-was-resized="handleEventWasUpdated($event, 'resized')"
267
+ @event-was-dragged="handleEventWasUpdated($event, 'dragged')"
268
+ @edit-event="$emit('editEvent', $event)"
269
+ @delete-event="$emit('deleteEvent', $event)"
270
+ @interval-was-clicked="$emit('intervalWasClicked', $event)"
271
+ @day-was-clicked="$emit('dayWasClicked', $event)"
272
+ @datetime-was-clicked="$emit('datetimeWasClicked', $event)"
273
+ >
274
+ <template #weekDayEvent="p">
275
+ <slot
276
+ :event-data="p.eventData"
277
+ name="weekDayEvent"
278
+ />
279
+ </template>
280
+
281
+ <template #eventDialog="p">
282
+ <slot
283
+ name="eventDialog"
284
+ :event-dialog-data="p.eventDialogData"
285
+ :close-event-dialog="p.closeEventDialog"
286
+ />
287
+ </template>
288
+
289
+ <template #customCurrentTime>
290
+ <slot name="customCurrentTime" />
291
+ </template>
292
+ </Week>
293
+
294
+ <Month
295
+ v-if="mode === 'month'"
296
+ :key="period.start.getTime() + period.end.getTime() + eventRenderingKey"
297
+ :events-prop="eventsDataProperty"
298
+ :time="time"
299
+ :config="enhancedConfig"
300
+ :period="period"
301
+ @event-was-clicked="$emit('eventWasClicked', $event)"
302
+ @date-was-clicked="handleDateWasClicked"
303
+ @event-was-dragged="handleEventWasUpdated($event, 'dragged')"
304
+ @updated-period="handleUpdatedPeriod($event, true)"
305
+ @edit-event="$emit('editEvent', $event)"
306
+ @delete-event="$emit('deleteEvent', $event)"
307
+ >
308
+ <template #eventDialog="p">
309
+ <slot
310
+ name="eventDialog"
311
+ :event-dialog-data="p.eventDialogData"
312
+ :close-event-dialog="p.closeEventDialog"
313
+ />
314
+ </template>
315
+
316
+ <template #monthEvent="p">
317
+ <slot
318
+ :event-data="p.eventData"
319
+ name="monthEvent"
320
+ />
321
+ </template>
322
+
323
+ <template #dayCell="{ dayData }">
324
+ <slot
325
+ :day-data="dayData"
326
+ name="dayCell"
327
+ />
328
+ </template>
329
+ </Month>
330
+ </div>
331
+ </div>
332
+ </template>
333
+
334
+ <style>
335
+ .calendar-root-wrapper {
336
+ width: 100%;
337
+ max-width: 100vw;
338
+ height: 100%;
339
+ display: flex;
340
+ }
341
+
342
+ .calendar-root-wrapper .calendar-root {
343
+ flex: 1;
344
+ border: var(--qalendar-border-gray-thin);
345
+ border-radius: var(--qalendar-border-radius);
346
+ position: relative;
347
+ width: 100%;
348
+ margin: 0 auto;
349
+ display: flex;
350
+ flex-flow: column;
351
+ }
352
+ /*
353
+ @media (prefers-color-scheme: dark) {
354
+ .calendar-root-wrapper .calendar-root {
355
+ background: #121212;
356
+ color: #fff;
357
+ border-color: transparent;
358
+ }
359
+ } */
360
+
361
+ .calendar-root-wrapper .calendar-root .top-bar-loader {
362
+ position: absolute;
363
+ top: 1px;
364
+ left: 2px;
365
+ width: calc(100% - 4px);
366
+ height: 3px;
367
+ background: rgba(241, 241, 241, 0.2);
368
+ border-radius: 16px;
369
+ overflow: hidden;
370
+ }
371
+
372
+ .calendar-root-wrapper .calendar-root .top-bar-loader:before {
373
+ content: '';
374
+ height: 4px;
375
+ width: calc(100% - 4px);
376
+ position: absolute;
377
+ top: 1px;
378
+ left: 2px;
379
+ background: rgb(38, 132, 255);
380
+ background: linear-gradient(
381
+ 90deg,
382
+ rgba(38, 132, 255, 1) 0%,
383
+ rgba(38, 132, 255, 0.5088410364145659) 48%,
384
+ rgba(38, 132, 255, 1) 100%
385
+ );
386
+ animation: load 1.8s infinite;
387
+ border-radius: 16px;
388
+ }
389
+
390
+ @media (prefers-color-scheme: dark) {
391
+ .calendar-root-wrapper .calendar-root .top-bar-loader:before {
392
+ background: rgb(229, 224, 245);
393
+ }
394
+ }
395
+
396
+ @keyframes load {
397
+ 0% {
398
+ width: 0;
399
+ left: -100%;
400
+ }
401
+ 50% {
402
+ left: 0;
403
+ width: 100%;
404
+ }
405
+ 100% {
406
+ width: 0;
407
+ left: 100%;
408
+ }
409
+ }
410
+
411
+ .calendar-root-wrapper .calendar-root .loading-enter-active,
412
+ .calendar-root-wrapper .calendar-root .loading-leave-active {
413
+ transition: background 0.5s ease;
414
+ }
415
+
416
+ .calendar-root-wrapper .calendar-root .loading-leave-to,
417
+ .calendar-root-wrapper .calendar-root .loading-enter-from {
418
+ background-color: rgba(255, 255, 255, 0);
419
+ }
420
+ </style>
@@ -0,0 +1,60 @@
1
+ /* color palette from <https://github.com/vuejs/theme> */
2
+ :root {
3
+ --vt-c-white: #ffffff;
4
+ --vt-c-white-soft: #f8f8f8;
5
+ --vt-c-white-mute: #f2f2f2;
6
+
7
+ --vt-c-black: #181818;
8
+ --vt-c-black-soft: #222222;
9
+ --vt-c-black-mute: #282828;
10
+
11
+ --vt-c-indigo: #2c3e50;
12
+
13
+ --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
14
+ --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
15
+ --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
16
+ --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
17
+
18
+ --vt-c-text-light-1: var(--vt-c-indigo);
19
+ --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
20
+ --vt-c-text-dark-1: var(--vt-c-white);
21
+ --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
22
+ }
23
+
24
+ /* semantic color variables for this project */
25
+ :root {
26
+ --color-background: var(--vt-c-white);
27
+ --color-background-soft: var(--vt-c-white-soft);
28
+ --color-background-mute: var(--vt-c-white-mute);
29
+
30
+ --color-border: var(--vt-c-divider-light-2);
31
+ --color-border-hover: var(--vt-c-divider-light-1);
32
+
33
+ --color-heading: var(--vt-c-text-light-1);
34
+ --color-text: var(--vt-c-text-light-1);
35
+
36
+ --section-gap: 160px;
37
+ }
38
+
39
+ @media (prefers-color-scheme: dark) {
40
+ :root {
41
+ --color-background: var(--vt-c-black);
42
+ --color-background-soft: var(--vt-c-black-soft);
43
+ --color-background-mute: var(--vt-c-black-mute);
44
+
45
+ --color-border: var(--vt-c-divider-dark-2);
46
+ --color-border-hover: var(--vt-c-divider-dark-1);
47
+
48
+ --color-heading: var(--vt-c-text-dark-1);
49
+ --color-text: var(--vt-c-text-dark-2);
50
+ }
51
+ }
52
+
53
+ *,
54
+ *::before,
55
+ *::after {
56
+ box-sizing: border-box;
57
+ margin: 0;
58
+ position: relative;
59
+ font-weight: normal;
60
+ }