@bimetal/calendar-vue-components 0.29.0

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 (116) hide show
  1. package/LICENSE +129 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/binding/composables/useCalendarConfig.d.ts +15 -0
  4. package/dist/binding/composables/useCalendarConfig.d.ts.map +1 -0
  5. package/dist/binding/composables/useCalendarConfig.js +19 -0
  6. package/dist/binding/composables/useCalendarConfig.js.map +1 -0
  7. package/dist/binding/composables/useCalendarContext.d.ts +73 -0
  8. package/dist/binding/composables/useCalendarContext.d.ts.map +1 -0
  9. package/dist/binding/composables/useCalendarContext.js +31 -0
  10. package/dist/binding/composables/useCalendarContext.js.map +1 -0
  11. package/dist/binding/composables/useCalendarController.d.ts +31 -0
  12. package/dist/binding/composables/useCalendarController.d.ts.map +1 -0
  13. package/dist/binding/composables/useCalendarController.js +38 -0
  14. package/dist/binding/composables/useCalendarController.js.map +1 -0
  15. package/dist/binding/config.d.ts +6 -0
  16. package/dist/binding/config.d.ts.map +1 -0
  17. package/dist/binding/config.js +6 -0
  18. package/dist/binding/config.js.map +1 -0
  19. package/dist/binding/index.d.ts +24 -0
  20. package/dist/binding/index.d.ts.map +1 -0
  21. package/dist/binding/index.js +26 -0
  22. package/dist/binding/index.js.map +1 -0
  23. package/dist/binding/types.d.ts +87 -0
  24. package/dist/binding/types.d.ts.map +1 -0
  25. package/dist/binding/types.js +12 -0
  26. package/dist/binding/types.js.map +1 -0
  27. package/dist/binding/utils/date-strings.d.ts +16 -0
  28. package/dist/binding/utils/date-strings.d.ts.map +1 -0
  29. package/dist/binding/utils/date-strings.js +30 -0
  30. package/dist/binding/utils/date-strings.js.map +1 -0
  31. package/dist/binding/utils/gridUtils.d.ts +6 -0
  32. package/dist/binding/utils/gridUtils.d.ts.map +1 -0
  33. package/dist/binding/utils/gridUtils.js +13 -0
  34. package/dist/binding/utils/gridUtils.js.map +1 -0
  35. package/dist/binding/view-configs.d.ts +6 -0
  36. package/dist/binding/view-configs.d.ts.map +1 -0
  37. package/dist/binding/view-configs.js +6 -0
  38. package/dist/binding/view-configs.js.map +1 -0
  39. package/dist/components/Calendar.d.ts +139 -0
  40. package/dist/components/Calendar.d.ts.map +1 -0
  41. package/dist/components/Calendar.js +229 -0
  42. package/dist/components/Calendar.js.map +1 -0
  43. package/dist/components/CalendarHeader.d.ts +65 -0
  44. package/dist/components/CalendarHeader.d.ts.map +1 -0
  45. package/dist/components/CalendarHeader.js +33 -0
  46. package/dist/components/CalendarHeader.js.map +1 -0
  47. package/dist/components/CategoryFilter.d.ts +26 -0
  48. package/dist/components/CategoryFilter.d.ts.map +1 -0
  49. package/dist/components/CategoryFilter.js +26 -0
  50. package/dist/components/CategoryFilter.js.map +1 -0
  51. package/dist/components/EventBar.d.ts +34 -0
  52. package/dist/components/EventBar.d.ts.map +1 -0
  53. package/dist/components/EventBar.js +141 -0
  54. package/dist/components/EventBar.js.map +1 -0
  55. package/dist/components/EventDialog.d.ts +54 -0
  56. package/dist/components/EventDialog.d.ts.map +1 -0
  57. package/dist/components/EventDialog.js +284 -0
  58. package/dist/components/EventDialog.js.map +1 -0
  59. package/dist/components/EventHistory.d.ts +32 -0
  60. package/dist/components/EventHistory.d.ts.map +1 -0
  61. package/dist/components/EventHistory.js +76 -0
  62. package/dist/components/EventHistory.js.map +1 -0
  63. package/dist/components/ResourceFilter.d.ts +32 -0
  64. package/dist/components/ResourceFilter.d.ts.map +1 -0
  65. package/dist/components/ResourceFilter.js +26 -0
  66. package/dist/components/ResourceFilter.js.map +1 -0
  67. package/dist/components/UndoToast.d.ts +4 -0
  68. package/dist/components/UndoToast.d.ts.map +1 -0
  69. package/dist/components/UndoToast.js +36 -0
  70. package/dist/components/UndoToast.js.map +1 -0
  71. package/dist/index.d.ts +20 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +24 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/styles/index.css +1 -0
  76. package/dist/views/agenda/AgendaView.d.ts +16 -0
  77. package/dist/views/agenda/AgendaView.d.ts.map +1 -0
  78. package/dist/views/agenda/AgendaView.js +163 -0
  79. package/dist/views/agenda/AgendaView.js.map +1 -0
  80. package/dist/views/day/DayView.d.ts +16 -0
  81. package/dist/views/day/DayView.d.ts.map +1 -0
  82. package/dist/views/day/DayView.js +237 -0
  83. package/dist/views/day/DayView.js.map +1 -0
  84. package/dist/views/month/MonthView.d.ts +22 -0
  85. package/dist/views/month/MonthView.d.ts.map +1 -0
  86. package/dist/views/month/MonthView.js +54 -0
  87. package/dist/views/month/MonthView.js.map +1 -0
  88. package/dist/views/month/WeekRow.d.ts +48 -0
  89. package/dist/views/month/WeekRow.d.ts.map +1 -0
  90. package/dist/views/month/WeekRow.js +208 -0
  91. package/dist/views/month/WeekRow.js.map +1 -0
  92. package/dist/views/resource/ResourceView.d.ts +40 -0
  93. package/dist/views/resource/ResourceView.d.ts.map +1 -0
  94. package/dist/views/resource/ResourceView.js +194 -0
  95. package/dist/views/resource/ResourceView.js.map +1 -0
  96. package/dist/views/timeline/TimelineView.d.ts +48 -0
  97. package/dist/views/timeline/TimelineView.d.ts.map +1 -0
  98. package/dist/views/timeline/TimelineView.js +155 -0
  99. package/dist/views/timeline/TimelineView.js.map +1 -0
  100. package/dist/views/week/AllDayRow.d.ts +24 -0
  101. package/dist/views/week/AllDayRow.d.ts.map +1 -0
  102. package/dist/views/week/AllDayRow.js +67 -0
  103. package/dist/views/week/AllDayRow.js.map +1 -0
  104. package/dist/views/week/TimeEvent.d.ts +72 -0
  105. package/dist/views/week/TimeEvent.d.ts.map +1 -0
  106. package/dist/views/week/TimeEvent.js +141 -0
  107. package/dist/views/week/TimeEvent.js.map +1 -0
  108. package/dist/views/week/WeekView.d.ts +16 -0
  109. package/dist/views/week/WeekView.d.ts.map +1 -0
  110. package/dist/views/week/WeekView.js +210 -0
  111. package/dist/views/week/WeekView.js.map +1 -0
  112. package/dist/views/year/YearView.d.ts +25 -0
  113. package/dist/views/year/YearView.d.ts.map +1 -0
  114. package/dist/views/year/YearView.js +67 -0
  115. package/dist/views/year/YearView.js.map +1 -0
  116. package/package.json +50 -0
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ // ── Main component ──────────────────────────────────────────────
2
+ export { Calendar } from './components/Calendar.js';
3
+ // ── View components ─────────────────────────────────────────────
4
+ export { MonthView } from './views/month/MonthView.js';
5
+ export { WeekView } from './views/week/WeekView.js';
6
+ export { AllDayRow } from './views/week/AllDayRow.js';
7
+ export { TimeEvent } from './views/week/TimeEvent.js';
8
+ export { DayView } from './views/day/DayView.js';
9
+ export { AgendaView } from './views/agenda/AgendaView.js';
10
+ export { YearView } from './views/year/YearView.js';
11
+ export { ResourceView } from './views/resource/ResourceView.js';
12
+ export { TimelineView } from './views/timeline/TimelineView.js';
13
+ // ── Sub-components ──────────────────────────────────────────────
14
+ export { CalendarHeader } from './components/CalendarHeader.js';
15
+ export { CategoryFilter } from './components/CategoryFilter.js';
16
+ export { EventBar } from './components/EventBar.js';
17
+ export { EventDialog } from './components/EventDialog.js';
18
+ export { EventHistory } from './components/EventHistory.js';
19
+ export { UndoToast } from './components/UndoToast.js';
20
+ // ── Calendar Vue binding (context/provider/config/controller composable) ──
21
+ export * from './binding/index.js';
22
+ // ── Re-export the generic component-family bindings for convenience ──
23
+ export * from '@bimetal/vue';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,mEAAmE;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,6EAA6E;AAC7E,cAAc,oBAAoB,CAAC;AAEnC,wEAAwE;AACxE,cAAc,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ @import '@bimetal/calendar-themes';
@@ -0,0 +1,16 @@
1
+ import { type PropType } from 'vue';
2
+ import type { CalendarDateTime } from '@bimetal/calendar-core';
3
+ export declare const AgendaView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ currentDate: {
5
+ type: PropType<CalendarDateTime>;
6
+ required: true;
7
+ };
8
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
9
+ [key: string]: any;
10
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
11
+ currentDate: {
12
+ type: PropType<CalendarDateTime>;
13
+ required: true;
14
+ };
15
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
16
+ //# sourceMappingURL=AgendaView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgendaView.d.ts","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAK,MAAM,KAAK,CAAC;AAClE,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AA2D9E,eAAO,MAAM,UAAU;;cAGY,QAAQ,CAAC,gBAAgB,CAAC;;;;;;;cAA1B,QAAQ,CAAC,gBAAgB,CAAC;;;iGAkI3D,CAAC"}
@@ -0,0 +1,163 @@
1
+ import { defineComponent, computed, h } from 'vue';
2
+ import { addDays, isSameDay, startOfDay, isBefore, isAfter, getDayOfMonth, createTimeRange, overlaps, formatDateTime, now, getRecurrenceInstanceMetadata, isSingleDayAllDay, } from '@bimetal/calendar-core';
3
+ import { useCalendarContext, useCalendarConfig, toDateStr, toTimeStr, useEventSlots } from '../../binding/index.js';
4
+ import { DEFAULT_AGENDA_RANGE_DAYS, createClickIntent } from '@bimetal/calendar-headless';
5
+ const AgendaEvent = defineComponent({
6
+ name: 'AgendaEvent',
7
+ props: {
8
+ ev: { type: Object, required: true },
9
+ dateStr: { type: String, required: true },
10
+ timeLabel: { type: String, required: true },
11
+ category: { type: String, required: true },
12
+ isSelected: { type: Boolean, required: true },
13
+ onEntryMouseDown: { type: Function, required: true },
14
+ onEntryClick: { type: Function, required: true },
15
+ onEntryDoubleClick: { type: Function, required: true },
16
+ },
17
+ setup(props) {
18
+ const slots = useEventSlots(() => props.ev);
19
+ return () => {
20
+ const s = slots.value;
21
+ const title = s.title ?? props.ev.title;
22
+ const instanceDate = getRecurrenceInstanceMetadata(props.ev)?.instanceDate;
23
+ return h('div', {
24
+ class: `agenda-view__event${props.isSelected ? ' agenda-view__event--selected' : ''}${s.className ? ' ' + s.className : ''}`,
25
+ style: s.style,
26
+ onMousedown: props.onEntryMouseDown,
27
+ onClick: (e) => props.onEntryClick(e, props.ev.id, instanceDate),
28
+ onDblclick: (e) => props.onEntryDoubleClick(e, props.ev.id, instanceDate),
29
+ }, [
30
+ s.content ?? [
31
+ h('div', {
32
+ class: 'agenda-view__event-color',
33
+ style: { backgroundColor: props.ev.metadata.color ?? '#007AFF' },
34
+ }),
35
+ h('div', { class: 'agenda-view__event-content' }, [
36
+ h('div', { class: 'agenda-view__event-title' }, title),
37
+ h('div', { class: 'agenda-view__event-time' }, props.timeLabel),
38
+ ]),
39
+ h('div', { class: 'agenda-view__event-calendar' }, props.category),
40
+ ],
41
+ s.badges ?? null,
42
+ ]);
43
+ };
44
+ },
45
+ });
46
+ export const AgendaView = defineComponent({
47
+ name: 'AgendaView',
48
+ props: {
49
+ currentDate: { type: Object, required: true },
50
+ },
51
+ setup(props) {
52
+ const config = useCalendarConfig();
53
+ const { events, onEventClick, onSelectEvent, selectedEventId, selectedInstanceDate } = useCalendarContext();
54
+ const click = createClickIntent();
55
+ const rangeStartDt = computed(() => startOfDay(props.currentDate));
56
+ const rangeEndDt = computed(() => addDays(rangeStartDt.value, DEFAULT_AGENDA_RANGE_DAYS));
57
+ const agendaRange = computed(() => createTimeRange(rangeStartDt.value, rangeEndDt.value));
58
+ const dayGroups = computed(() => {
59
+ const groups = new Map();
60
+ for (const ev of events.value) {
61
+ if (!overlaps(ev.timeRange, agendaRange.value))
62
+ continue;
63
+ const evStart = isBefore(ev.timeRange.start, rangeStartDt.value) ? rangeStartDt.value : ev.timeRange.start;
64
+ const evEnd = isAfter(ev.timeRange.end, rangeEndDt.value) ? rangeEndDt.value : ev.timeRange.end;
65
+ let d = startOfDay(evStart);
66
+ const end = startOfDay(evEnd);
67
+ const limit = addDays(end, 1);
68
+ while (isBefore(d, limit) && isBefore(d, rangeEndDt.value)) {
69
+ const ds = toDateStr(d);
70
+ const list = groups.get(ds) || [];
71
+ list.push(ev);
72
+ groups.set(ds, list);
73
+ d = addDays(d, 1);
74
+ }
75
+ }
76
+ const result = [];
77
+ for (let i = 0; i < DEFAULT_AGENDA_RANGE_DAYS; i++) {
78
+ const date = addDays(rangeStartDt.value, i);
79
+ const dateStr = toDateStr(date);
80
+ const dayEvents = groups.get(dateStr);
81
+ if (dayEvents && dayEvents.length > 0) {
82
+ dayEvents.sort((a, b) => {
83
+ if (a.allDay !== b.allDay)
84
+ return a.allDay ? -1 : 1;
85
+ return a.timeRange.start.epochMs - b.timeRange.start.epochMs;
86
+ });
87
+ result.push({ date, dateStr, events: dayEvents });
88
+ }
89
+ }
90
+ return result;
91
+ });
92
+ const handleMouseDown = () => { click.markMouseDown(); };
93
+ const handleEventClick = (e, eventId, instanceDate) => {
94
+ if (!click.accept(config.clickThresholdMs))
95
+ return;
96
+ onSelectEvent(eventId, instanceDate);
97
+ };
98
+ const handleEventDoubleClick = (e, eventId, instanceDate) => {
99
+ if (!click.accept(config.clickThresholdMs))
100
+ return;
101
+ const rect = e.currentTarget.getBoundingClientRect();
102
+ onEventClick(eventId, rect, instanceDate);
103
+ };
104
+ const isEventSelected = (ev) => {
105
+ const instanceDate = getRecurrenceInstanceMetadata(ev)?.instanceDate;
106
+ return selectedEventId.value === ev.id && selectedInstanceDate.value === instanceDate;
107
+ };
108
+ const formatEventTime = (ev, date) => {
109
+ if (ev.allDay) {
110
+ if (isSingleDayAllDay(ev.timeRange)) {
111
+ return config.locale.allDayEvent;
112
+ }
113
+ const startStr = formatDateTime(ev.timeRange.start, { locale: config.locale.code, dateStyle: 'short' });
114
+ const endStr = formatDateTime(addDays(ev.timeRange.end, -1), { locale: config.locale.code, dateStyle: 'short' });
115
+ return `${config.locale.allDayEvent} (${startStr} \u2013 ${endStr})`;
116
+ }
117
+ const isFirst = isSameDay(ev.timeRange.start, date);
118
+ const isLast = isSameDay(ev.timeRange.end, date);
119
+ const startTime = toTimeStr(ev.timeRange.start);
120
+ const endTime = toTimeStr(ev.timeRange.end);
121
+ if (isFirst && isLast)
122
+ return `${startTime} \u2013 ${endTime}`;
123
+ if (isFirst)
124
+ return `${config.locale.timeFrom} ${startTime}`;
125
+ if (isLast)
126
+ return `${config.locale.timeUntil} ${endTime}`;
127
+ return config.locale.allDayEvent;
128
+ };
129
+ return () => {
130
+ const currentNow = now(config.core.timezone, config.core.clock);
131
+ if (dayGroups.value.length === 0) {
132
+ return h('div', { class: 'agenda-view' }, [
133
+ h('div', { class: 'agenda-view__empty' }, config.locale.noEvents),
134
+ ]);
135
+ }
136
+ return h('div', { class: 'agenda-view' }, dayGroups.value.map(group => h('div', { key: group.dateStr, class: 'agenda-view__day' }, [
137
+ h('div', {
138
+ class: `agenda-view__date-header ${isSameDay(group.date, currentNow) ? 'agenda-view__date-header--today' : ''}`,
139
+ }, [
140
+ h('span', {
141
+ class: `agenda-view__date-number ${isSameDay(group.date, currentNow) ? 'agenda-view__date-number--today' : ''}`,
142
+ }, getDayOfMonth(group.date)),
143
+ h('div', { class: 'agenda-view__date-text' }, [
144
+ h('span', { class: 'agenda-view__date-weekday' }, formatDateTime(group.date, { locale: config.locale.code, dateStyle: 'full' }).split(',')[0]),
145
+ h('span', { class: 'agenda-view__date-full' }, formatDateTime(group.date, { locale: config.locale.code, dateStyle: 'long' }).replace(/\d+\.?\s*/, '')),
146
+ ]),
147
+ ]),
148
+ h('div', { class: 'agenda-view__events' }, group.events.map(ev => h(AgendaEvent, {
149
+ key: `${ev.id}-${group.dateStr}`,
150
+ ev,
151
+ dateStr: group.dateStr,
152
+ timeLabel: formatEventTime(ev, group.date),
153
+ category: ev.metadata.category ?? 'default',
154
+ isSelected: isEventSelected(ev),
155
+ onEntryMouseDown: handleMouseDown,
156
+ onEntryClick: handleEventClick,
157
+ onEntryDoubleClick: handleEventDoubleClick,
158
+ }))),
159
+ ])));
160
+ };
161
+ },
162
+ });
163
+ //# sourceMappingURL=AgendaView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgendaView.js","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type PropType } from 'vue';
2
+ import type { CalendarDateTime } from '@bimetal/calendar-core';
3
+ export declare const DayView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ currentDate: {
5
+ type: PropType<CalendarDateTime>;
6
+ required: true;
7
+ };
8
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
9
+ [key: string]: any;
10
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
11
+ currentDate: {
12
+ type: PropType<CalendarDateTime>;
13
+ required: true;
14
+ };
15
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
16
+ //# sourceMappingURL=DayView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DayView.d.ts","sourceRoot":"","sources":["../../../src/views/day/DayView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,QAAQ,EAAK,MAAM,KAAK,CAAC;AAClF,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAyC9E,eAAO,MAAM,OAAO;;cAGe,QAAQ,CAAC,gBAAgB,CAAC;;;;;;;cAA1B,QAAQ,CAAC,gBAAgB,CAAC;;;iGAwO3D,CAAC"}
@@ -0,0 +1,237 @@
1
+ import { defineComponent, computed, ref, onMounted, h } from 'vue';
2
+ import { isSameDay, now, getDayOfMonth, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps, formatDateTime, segmentTimed, layoutTimed, getRecurrenceInstanceMetadata, } from '@bimetal/calendar-core';
3
+ import { useCalendarContext, useCalendarConfig, snapTimeFromMouseY, useEventSlots, toDateStr, parseDateTimeStr } from '../../binding/index.js';
4
+ import { DEFAULT_HOUR_HEIGHT, DEFAULT_TIME_LABEL_WIDTH_DAY, DEFAULT_SCROLL_HOUR, createClickIntent } from '@bimetal/calendar-headless';
5
+ import { TimeEvent } from '../week/TimeEvent.js';
6
+ const AllDayEvent = defineComponent({
7
+ name: 'DayViewAllDayEvent',
8
+ props: {
9
+ ev: { type: Object, required: true },
10
+ isSelected: { type: Boolean, required: true },
11
+ onEntryMouseDown: { type: Function, required: true },
12
+ onEntryClick: { type: Function, required: true },
13
+ onEntryDoubleClick: { type: Function, required: true },
14
+ },
15
+ setup(props) {
16
+ const slots = useEventSlots(() => props.ev);
17
+ return () => {
18
+ const s = slots.value;
19
+ const title = s.title ?? props.ev.title;
20
+ const instanceDate = getRecurrenceInstanceMetadata(props.ev)?.instanceDate;
21
+ return h('div', {
22
+ class: `day-view__allday-event${props.isSelected ? ' day-view__allday-event--selected' : ''}${s.className ? ' ' + s.className : ''}`,
23
+ style: { backgroundColor: props.ev.metadata.color ?? '#007AFF', ...s.style },
24
+ onMousedown: props.onEntryMouseDown,
25
+ onClick: (e) => props.onEntryClick(e, props.ev.id, instanceDate),
26
+ onDblclick: (e) => props.onEntryDoubleClick(e, props.ev.id, instanceDate),
27
+ title,
28
+ }, [s.content ?? title, s.badges ?? null]);
29
+ };
30
+ },
31
+ });
32
+ const HOURS = Array.from({ length: 24 }, (_, i) => i);
33
+ export const DayView = defineComponent({
34
+ name: 'DayView',
35
+ props: {
36
+ currentDate: { type: Object, required: true },
37
+ },
38
+ setup(props) {
39
+ const config = useCalendarConfig();
40
+ const { events, previewEvent, onDragOverDateTime, onDropTimedEvent, onHidePreview, onDayCellClick, onEventClick, onSelectEvent, selectedEventId, selectedInstanceDate, onClearSelection, } = useCalendarContext();
41
+ const timeGridRef = ref(null);
42
+ const gridInnerRef = ref(null);
43
+ const click = createClickIntent();
44
+ const allDayClick = createClickIntent();
45
+ const timeSnapMinutes = config.core.granularity.day.minutes;
46
+ const scrollTo8AM = () => {
47
+ if (timeGridRef.value) {
48
+ timeGridRef.value.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
49
+ }
50
+ };
51
+ onMounted(scrollTo8AM);
52
+ let lastDateEpoch = 0;
53
+ const dayStart = computed(() => startOfDay(props.currentDate));
54
+ const dayEnd = computed(() => addDays(dayStart.value, 1));
55
+ const dayRange = computed(() => createTimeRange(dayStart.value, dayEnd.value));
56
+ // B-CAL-1: Controller-gebautes Event by id einswappen (kein Parsing in der View).
57
+ const displayEvents = computed(() => {
58
+ const pe = previewEvent.value;
59
+ if (!pe)
60
+ return events.value;
61
+ return events.value.map(ev => ev.id === pe.id ? { ...ev, timeRange: pe.timeRange } : ev);
62
+ });
63
+ const allDayEvents = computed(() => displayEvents.value.filter(ev => ev.allDay && overlaps(ev.timeRange, dayRange.value)));
64
+ const timedEvents = computed(() => displayEvents.value.filter(ev => !ev.allDay && overlaps(ev.timeRange, dayRange.value)));
65
+ // Lane-Layout durch den Core (Pilot-Direktive 2026-06-21).
66
+ const timedLayout = computed(() => layoutTimed(segmentTimed(timedEvents.value, props.currentDate)));
67
+ const handleGridDragOver = (e) => {
68
+ e.preventDefault();
69
+ e.dataTransfer.dropEffect = 'move';
70
+ if (!gridInnerRef.value)
71
+ return;
72
+ const time = snapTimeFromMouseY(e.clientY, gridInnerRef.value.getBoundingClientRect(), DEFAULT_HOUR_HEIGHT, timeSnapMinutes);
73
+ onDragOverDateTime(props.currentDate, time);
74
+ };
75
+ const handleGridDrop = (e) => {
76
+ e.preventDefault();
77
+ if (!gridInnerRef.value)
78
+ return;
79
+ const time = snapTimeFromMouseY(e.clientY, gridInnerRef.value.getBoundingClientRect(), DEFAULT_HOUR_HEIGHT, timeSnapMinutes);
80
+ onDropTimedEvent(e, props.currentDate, time);
81
+ };
82
+ const handleGridDragLeave = (e) => {
83
+ const el = e.currentTarget;
84
+ const rect = el.getBoundingClientRect();
85
+ if (e.clientX < rect.left || e.clientX > rect.right ||
86
+ e.clientY < rect.top || e.clientY > rect.bottom) {
87
+ onHidePreview();
88
+ }
89
+ };
90
+ const handleGridMouseDown = () => { click.markMouseDown(); };
91
+ const handleGridClick = (e) => {
92
+ if (!click.accept(config.clickThresholdMs))
93
+ return;
94
+ if (e.target.closest('.time-event'))
95
+ return;
96
+ // Single click on empty grid deselects; create-dialog moves to dblclick.
97
+ if (selectedEventId.value !== null)
98
+ onClearSelection();
99
+ };
100
+ const handleGridDoubleClick = (e) => {
101
+ if (!click.accept(config.clickThresholdMs))
102
+ return;
103
+ if (!gridInnerRef.value)
104
+ return;
105
+ if (e.target.closest('.time-event'))
106
+ return;
107
+ const time = snapTimeFromMouseY(e.clientY, gridInnerRef.value.getBoundingClientRect(), DEFAULT_HOUR_HEIGHT, timeSnapMinutes);
108
+ // Tag + gesnapte Zeit über den geteilten Parser (kein split, wie WeekView).
109
+ const clickedDt = parseDateTimeStr(toDateStr(props.currentDate), time, props.currentDate.timezone);
110
+ const rect = e.currentTarget.getBoundingClientRect();
111
+ onDayCellClick(clickedDt, rect);
112
+ };
113
+ const handleAllDayEventMouseDown = () => {
114
+ allDayClick.markMouseDown();
115
+ };
116
+ const handleAllDayEventClick = (e, eventId, instanceDate) => {
117
+ e.stopPropagation();
118
+ if (!allDayClick.accept(config.clickThresholdMs))
119
+ return;
120
+ onSelectEvent(eventId, instanceDate);
121
+ };
122
+ const handleAllDayEventDoubleClick = (e, eventId, instanceDate) => {
123
+ e.stopPropagation();
124
+ if (!allDayClick.accept(config.clickThresholdMs))
125
+ return;
126
+ const rect = e.currentTarget.getBoundingClientRect();
127
+ onEventClick(eventId, rect, instanceDate);
128
+ };
129
+ const isAllDayEventSelected = (ev) => {
130
+ const instanceDate = getRecurrenceInstanceMetadata(ev)?.instanceDate;
131
+ return selectedEventId.value === ev.id && selectedInstanceDate.value === instanceDate;
132
+ };
133
+ return () => {
134
+ // Scroll to 8 AM when currentDate changes
135
+ const dateEpoch = props.currentDate.epochMs;
136
+ if (lastDateEpoch !== 0 && lastDateEpoch !== dateEpoch) {
137
+ if (timeGridRef.value) {
138
+ timeGridRef.value.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
139
+ }
140
+ }
141
+ lastDateEpoch = dateEpoch;
142
+ const currentNow = now(config.core.timezone, config.core.clock);
143
+ const isToday = isSameDay(props.currentDate, currentNow);
144
+ const dayName = formatDateTime(props.currentDate, { locale: config.locale.code, dateStyle: 'full' })
145
+ .split(',')[0];
146
+ const nowHours = getHours(currentNow) + getMinutes(currentNow) / 60;
147
+ return h('div', { class: 'day-view' }, [
148
+ // Header
149
+ h('div', { class: 'day-view__header' }, [
150
+ h('span', { class: 'day-view__day-name' }, dayName),
151
+ h('span', {
152
+ class: `day-view__day-number ${isToday ? 'day-view__day-number--today' : ''}`,
153
+ }, getDayOfMonth(props.currentDate)),
154
+ ]),
155
+ // All-day events
156
+ allDayEvents.value.length > 0
157
+ ? h('div', { class: 'day-view__allday' }, [
158
+ h('div', { class: 'day-view__allday-label' }, config.locale.allDayLabel),
159
+ h('div', { class: 'day-view__allday-list' }, allDayEvents.value.map(ev => h(AllDayEvent, {
160
+ key: ev.id,
161
+ ev,
162
+ isSelected: isAllDayEventSelected(ev),
163
+ onEntryMouseDown: handleAllDayEventMouseDown,
164
+ onEntryClick: handleAllDayEventClick,
165
+ onEntryDoubleClick: handleAllDayEventDoubleClick,
166
+ }))),
167
+ ])
168
+ : null,
169
+ // Time grid
170
+ h('div', {
171
+ ref: timeGridRef,
172
+ class: 'day-view__time-grid',
173
+ onDragover: handleGridDragOver,
174
+ onDrop: handleGridDrop,
175
+ onDragleave: handleGridDragLeave,
176
+ onMousedown: handleGridMouseDown,
177
+ onClick: handleGridClick,
178
+ onDblclick: handleGridDoubleClick,
179
+ }, [
180
+ h('div', {
181
+ ref: gridInnerRef,
182
+ class: 'day-view__time-grid-inner',
183
+ style: { height: `${24 * DEFAULT_HOUR_HEIGHT}px` },
184
+ }, [
185
+ // Hour rows
186
+ ...HOURS.map(hr => {
187
+ const wh = config.core.workingHours;
188
+ const isOff = wh ? (hr < wh.start || hr >= wh.end) : false;
189
+ return h('div', {
190
+ key: hr,
191
+ class: `day-view__hour-row${isOff ? ' hour-slot--off' : ''}`,
192
+ style: { top: `${hr * DEFAULT_HOUR_HEIGHT}px`, height: `${DEFAULT_HOUR_HEIGHT}px` },
193
+ }, [
194
+ h('div', { class: 'day-view__hour-label' }, hr > 0 ? `${String(hr).padStart(2, '0')}:00` : ''),
195
+ ]);
196
+ }),
197
+ // Day column
198
+ h('div', {
199
+ class: 'day-view__day-col',
200
+ style: {
201
+ left: `${DEFAULT_TIME_LABEL_WIDTH_DAY}px`,
202
+ width: `calc(100% - ${DEFAULT_TIME_LABEL_WIDTH_DAY}px)`,
203
+ },
204
+ }),
205
+ // Timed events
206
+ ...timedLayout.value.map(item => h(TimeEvent, {
207
+ key: `${item.segment.event.id}-${item.column}`,
208
+ event: item.segment.event,
209
+ layout: {
210
+ dayCol: 0,
211
+ dayCount: 1,
212
+ lane: item.column,
213
+ laneCount: item.totalColumns,
214
+ startOffset: item.startOffset,
215
+ endOffset: item.endOffset,
216
+ },
217
+ dayDate: props.currentDate,
218
+ hourHeight: DEFAULT_HOUR_HEIGHT,
219
+ timeLabelWidth: DEFAULT_TIME_LABEL_WIDTH_DAY,
220
+ ghost: previewEvent.value?.id === item.segment.event.id,
221
+ })),
222
+ // Now line
223
+ isToday
224
+ ? h('div', {
225
+ class: 'day-view__now-line',
226
+ style: { top: `${nowHours * DEFAULT_HOUR_HEIGHT}px` },
227
+ }, [
228
+ h('div', { class: 'day-view__now-dot' }),
229
+ ])
230
+ : null,
231
+ ]),
232
+ ]),
233
+ ]);
234
+ };
235
+ },
236
+ });
237
+ //# sourceMappingURL=DayView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DayView.js","sourceRoot":"","sources":["../../../src/views/day/DayView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const MonthView: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ year: {
3
+ type: NumberConstructor;
4
+ required: true;
5
+ };
6
+ month: {
7
+ type: NumberConstructor;
8
+ required: true;
9
+ };
10
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
11
+ [key: string]: any;
12
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
13
+ year: {
14
+ type: NumberConstructor;
15
+ required: true;
16
+ };
17
+ month: {
18
+ type: NumberConstructor;
19
+ required: true;
20
+ };
21
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
22
+ //# sourceMappingURL=MonthView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonthView.d.ts","sourceRoot":"","sources":["../../../src/views/month/MonthView.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;iGAqDpB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { defineComponent, computed, h } from 'vue';
2
+ import { monthGrid, segmentAllDay, layoutAllDay, startOfDay, } from '@bimetal/calendar-core';
3
+ import { useCalendarContext, useCalendarConfig } from '../../binding/index.js';
4
+ import { WeekRow } from './WeekRow.js';
5
+ export const MonthView = defineComponent({
6
+ name: 'MonthView',
7
+ props: {
8
+ year: { type: Number, required: true },
9
+ month: { type: Number, required: true },
10
+ },
11
+ setup(props) {
12
+ const config = useCalendarConfig();
13
+ const { events, previewEvent } = useCalendarContext();
14
+ const weeks = computed(() => monthGrid(props.year, props.month, config.core));
15
+ // B-CAL-1: Controller-gebautes Event by id einswappen (kein Parsing in der View).
16
+ const displayEvents = computed(() => {
17
+ const pe = previewEvent.value;
18
+ if (!pe)
19
+ return events.value;
20
+ return events.value.map(ev => ev.id === pe.id ? { ...ev, timeRange: pe.timeRange } : ev);
21
+ });
22
+ const timedByDay = computed(() => {
23
+ const map = new Map();
24
+ for (const event of displayEvents.value) {
25
+ if (event.allDay)
26
+ continue;
27
+ const dayMs = startOfDay(event.timeRange.start).epochMs;
28
+ const list = map.get(dayMs) ?? [];
29
+ list.push(event);
30
+ map.set(dayMs, list);
31
+ }
32
+ return map;
33
+ });
34
+ return () => h('div', { class: 'month-grid' }, [
35
+ h('div', { class: 'day-headers' }, [
36
+ h('div', { class: 'header-spacer' }),
37
+ ...config.locale.dayNamesShort.map(name => h('div', { key: name, class: 'day-header' }, name)),
38
+ ]),
39
+ ...weeks.value.map((weekDates, idx) => {
40
+ const segments = segmentAllDay(displayEvents.value, weekDates);
41
+ const items = layoutAllDay(segments, weekDates);
42
+ return h(WeekRow, {
43
+ key: idx,
44
+ weekDates,
45
+ items,
46
+ timedByDay: timedByDay.value,
47
+ currentYear: props.year,
48
+ currentMonth: props.month,
49
+ });
50
+ }),
51
+ ]);
52
+ },
53
+ });
54
+ //# sourceMappingURL=MonthView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonthView.js","sourceRoot":"","sources":["../../../src/views/month/MonthView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAC;AAElE,OAAO,EACL,SAAS,EAAE,aAAa,EAAE,YAAY,EACtC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;IACvC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;KACxC;IACD,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAEtD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,kFAAkF;QAClF,MAAM,aAAa,GAAG,QAAQ,CAAkB,GAAG,EAAE;YACnD,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,MAAM;oBAAE,SAAS;gBAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBACxD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE,CACV,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;YAChC,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;gBACjC,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;gBACpC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACxC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,CACnD;aACF,CAAC;YACF,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;gBACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAChD,OAAO,CAAC,CAAC,OAAO,EAAE;oBAChB,GAAG,EAAE,GAAG;oBACR,SAAS;oBACT,KAAK;oBACL,UAAU,EAAE,UAAU,CAAC,KAAK;oBAC5B,WAAW,EAAE,KAAK,CAAC,IAAI;oBACvB,YAAY,EAAE,KAAK,CAAC,KAAK;iBAC1B,CAAC,CAAC;YACL,CAAC,CAAC;SACH,CAAC,CAAC;IACP,CAAC;CACF,CAAC,CAAC"}