@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
@@ -0,0 +1,229 @@
1
+ import { defineComponent, computed, reactive, watch, markRaw, toRaw, h } from 'vue';
2
+ import { getYear, getMonth } from '@bimetal/calendar-core';
3
+ import { parseDragInfo } from '@bimetal/calendar-headless';
4
+ import { provideCalendarContext, provideCalendarConfig, useCalendarController, } from '../binding/index.js';
5
+ import { CalendarHeader } from './CalendarHeader.js';
6
+ import { EventDialog } from './EventDialog.js';
7
+ import { UndoToast } from './UndoToast.js';
8
+ import { MonthView } from '../views/month/MonthView.js';
9
+ import { WeekView } from '../views/week/WeekView.js';
10
+ import { DayView } from '../views/day/DayView.js';
11
+ import { AgendaView } from '../views/agenda/AgendaView.js';
12
+ import { YearView } from '../views/year/YearView.js';
13
+ import { CategoryFilter } from './CategoryFilter.js';
14
+ import { ResourceFilter } from './ResourceFilter.js';
15
+ import { ResourceView } from '../views/resource/ResourceView.js';
16
+ import { TimelineView } from '../views/timeline/TimelineView.js';
17
+ export const Calendar = defineComponent({
18
+ name: 'Calendar',
19
+ props: {
20
+ store: { type: Object, required: true },
21
+ rules: { type: Array, default: undefined },
22
+ config: { type: Object, default: undefined },
23
+ darkMode: { type: Boolean, default: false },
24
+ showCategoryFilter: { type: Boolean, default: false },
25
+ showResourceFilter: { type: Boolean, default: false },
26
+ customViews: { type: Array, default: undefined },
27
+ eventDialog: { type: Object, default: () => ({ kind: 'builtin' }) },
28
+ onEventClick: { type: Function, default: undefined },
29
+ onNewEventRequested: { type: Function, default: undefined },
30
+ renderEvent: { type: Function, default: undefined },
31
+ onError: { type: Function, default: undefined },
32
+ },
33
+ setup(props) {
34
+ // The controller owns ALL interaction state and semantics. This component
35
+ // is a thin binding: it bridges the snapshot into Vue reactivity, parses
36
+ // DOM drop/keyboard events into intents, and re-builds the (unchanged)
37
+ // context/config provide surface from the snapshot.
38
+ const { snapshot, ctrl } = useCalendarController({
39
+ store: props.store,
40
+ config: props.config,
41
+ rules: props.rules,
42
+ customViews: props.customViews,
43
+ eventDialogKind: props.eventDialog?.kind ?? 'builtin',
44
+ // `none`-mode: forward to the consumer's callbacks (read fresh from props).
45
+ onEventClickExternal: (id, rect, inst) => props.onEventClick?.(id, rect, inst),
46
+ onNewEventRequestedExternal: (date, rect, rid) => props.onNewEventRequested?.(date, rect, rid),
47
+ onError: (err) => props.onError?.(err),
48
+ }, {
49
+ config: () => props.config,
50
+ rules: () => props.rules,
51
+ customViews: () => props.customViews,
52
+ });
53
+ // F8: dialog mode is a dynamic prop — keep the controller in sync after mount.
54
+ watch(() => props.eventDialog?.kind ?? 'builtin', (kind) => ctrl.setEventDialogKind(kind));
55
+ // ── v0.29 Tastatur: root-scoped keydown → controller (Ctrl/Cmd+Z undo, Escape
56
+ // clears). Bound on the `.calendar` root below (onKeydown) — NOT a window listener
57
+ // (no document-level routing). Semantics live in the controller. ──
58
+ const onKey = (e) => ctrl.handleKeydown(e);
59
+ // ── DOM-event → controller-intent bindings (the only place DOM is parsed) ──
60
+ const onDropEvent = (e, dropDate) => {
61
+ const info = parseDragInfo(e.dataTransfer);
62
+ if (info)
63
+ void ctrl.dropAllDay(info, dropDate);
64
+ };
65
+ const onDropTimedEvent = (e, dropDate, dropTime) => {
66
+ const info = parseDragInfo(e.dataTransfer);
67
+ if (info)
68
+ void ctrl.dropTimed(info, dropDate, dropTime);
69
+ };
70
+ const onResourceDrop = (e, dropDate, dropTime, resourceId) => {
71
+ const info = parseDragInfo(e.dataTransfer);
72
+ if (info)
73
+ void ctrl.dropResource(info, dropDate, dropTime, resourceId);
74
+ };
75
+ const onTimelineDrop = (e, dropDate, targetResourceId) => {
76
+ const info = parseDragInfo(e.dataTransfer);
77
+ if (info)
78
+ void ctrl.dropTimeline(info, dropDate, targetResourceId);
79
+ };
80
+ const onResourceCellClick = (date, time, resourceId, anchorRect) => ctrl.openCreateFromResourceCell(date, time, resourceId, anchorRect);
81
+ const onTimelineCellClick = (date, resourceId, anchorRect) => ctrl.openCreate(date, anchorRect, resourceId);
82
+ // ── Context value: keep the existing Ref-based shape so views are UNCHANGED.
83
+ // Each reactive field is a `computed` derived from the immutable snapshot. ──
84
+ const contextValue = {
85
+ events: computed(() => [...snapshot.value.events]),
86
+ view: computed(() => snapshot.value.currentView),
87
+ previewEvent: computed(() => snapshot.value.previewEvent),
88
+ expandedMonthDay: computed(() => snapshot.value.expandedMonthDay),
89
+ onExpandMonthCell: ctrl.expandMonthCell,
90
+ onCollapseMonthCell: ctrl.collapseMonthCell,
91
+ onEventClick: ctrl.openEdit,
92
+ onDayCellClick: (date, anchorRect) => ctrl.openCreate(date, anchorRect),
93
+ onDropEvent,
94
+ onDropTimedEvent,
95
+ onDragOverDate: ctrl.updatePreview,
96
+ onDragOverDateTime: ctrl.updateTimedPreview,
97
+ onDragStart: ctrl.startDrag,
98
+ onHidePreview: ctrl.hidePreview,
99
+ onDragEnd: ctrl.endDrag,
100
+ selectedEventId: computed(() => snapshot.value.selection?.eventId ?? null),
101
+ selectedInstanceDate: computed(() => snapshot.value.selection?.instanceDate),
102
+ onSelectEvent: ctrl.selectEvent,
103
+ onClearSelection: ctrl.clearSelection,
104
+ onUndo: ctrl.undo,
105
+ getHistory: ctrl.getHistory,
106
+ lastAction: computed(() => snapshot.value.lastAction),
107
+ dismissUndo: ctrl.dismissUndo,
108
+ renderEvent: props.renderEvent,
109
+ };
110
+ // ── Reactive config provide (F4): a reactive object kept in sync with the
111
+ // snapshot's merged config, so locale/timezone/categories changes flow into
112
+ // the views without a re-mount. ──
113
+ const reactiveConfig = reactive({ ...snapshot.value.config });
114
+ watch(() => snapshot.value.config, (next) => {
115
+ Object.assign(reactiveConfig, next);
116
+ });
117
+ provideCalendarConfig(reactiveConfig);
118
+ provideCalendarContext(contextValue);
119
+ const renderView = (view, date) => {
120
+ const snap = snapshot.value;
121
+ switch (view) {
122
+ case 'year':
123
+ return h(YearView, {
124
+ year: getYear(date),
125
+ onMonthClick: (y, mo) => ctrl.goToMonth(y, mo),
126
+ });
127
+ case 'month':
128
+ return h(MonthView, { year: getYear(date), month: getMonth(date) });
129
+ case 'week':
130
+ return h(WeekView, { currentDate: date });
131
+ case 'day':
132
+ return h(DayView, { currentDate: date });
133
+ case 'agenda':
134
+ return h(AgendaView, { currentDate: date });
135
+ case 'resource':
136
+ return h(ResourceView, {
137
+ currentDate: date,
138
+ visibleResources: snap.visibleResources,
139
+ onResourceCellClick,
140
+ onResourceDrop,
141
+ });
142
+ case 'timeline':
143
+ return h(TimelineView, {
144
+ currentDate: date,
145
+ days: snap.config.core.timelineDays ?? 7,
146
+ visibleResources: snap.visibleResources,
147
+ onTimelineCellClick,
148
+ onTimelineDrop,
149
+ });
150
+ default: {
151
+ const custom = props.customViews?.find(v => v.id === view);
152
+ if (!custom)
153
+ return h('div', { class: 'view-placeholder' }, `${view} view`);
154
+ // toRaw + markRaw to avoid the reactive-Component warn (Vue wraps a
155
+ // consumer component travelling through a reactive prop).
156
+ return h(markRaw(toRaw(custom).component), {
157
+ currentDate: date,
158
+ events: snap.events,
159
+ config: snap.config,
160
+ onNewEvent: (defaultDate, anchorRect) => {
161
+ ctrl.openCreate(defaultDate, anchorRect ?? new DOMRect(0, 0, 0, 0));
162
+ },
163
+ onEventClick: ctrl.openEdit,
164
+ selectedEventId: snap.selection?.eventId ?? null,
165
+ selectedInstanceDate: snap.selection?.instanceDate,
166
+ onSelectEvent: ctrl.selectEvent,
167
+ onClearSelection: ctrl.clearSelection,
168
+ });
169
+ }
170
+ }
171
+ };
172
+ return () => {
173
+ const snap = snapshot.value;
174
+ const config = snap.config;
175
+ return h('div', { class: `calendar${props.darkMode ? ' dark' : ''}`, onKeydown: onKey }, [
176
+ h(CalendarHeader, {
177
+ title: snap.title,
178
+ currentView: snap.currentView,
179
+ viewConfigs: [...snap.viewConfigList],
180
+ onPrev: ctrl.prev,
181
+ onNext: ctrl.next,
182
+ onToday: ctrl.today,
183
+ onViewChange: ctrl.setView,
184
+ }),
185
+ props.showCategoryFilter
186
+ ? h(CategoryFilter, {
187
+ categories: config.categories,
188
+ hiddenCategories: snap.hiddenCategories,
189
+ onToggle: ctrl.toggleCategory,
190
+ })
191
+ : null,
192
+ props.showResourceFilter && config.resources.length > 0
193
+ ? h(ResourceFilter, {
194
+ resources: config.resources,
195
+ hiddenResources: snap.hiddenResources,
196
+ onToggle: ctrl.toggleResource,
197
+ })
198
+ : null,
199
+ renderView(snap.currentView, snap.currentDate),
200
+ snap.dialog && props.eventDialog?.kind === 'builtin'
201
+ ? h(EventDialog, {
202
+ dialog: snap.dialog,
203
+ setDraft: ctrl.setDraft,
204
+ onSave: () => void ctrl.saveDialogFromInput(),
205
+ onDelete: ctrl.deleteDialog,
206
+ onClose: ctrl.closeDialog,
207
+ })
208
+ : null,
209
+ snap.dialog && props.eventDialog?.kind === 'custom'
210
+ // Vue's prop reactivity walks into the eventDialog object and wraps
211
+ // the consumer's component in a reactive proxy; h() then warns.
212
+ // toRaw returns the original definition; markRaw prevents re-wrapping.
213
+ ? h(markRaw(toRaw(props.eventDialog).component), {
214
+ event: snap.dialog.event,
215
+ defaultDate: snap.dialog.defaultDate,
216
+ anchorRect: snap.dialog.anchorRect,
217
+ defaultResourceId: snap.dialog.defaultResourceId,
218
+ config,
219
+ onSave: ctrl.saveDialog,
220
+ onDelete: ctrl.deleteDialog,
221
+ onClose: ctrl.closeDialog,
222
+ })
223
+ : null,
224
+ h(UndoToast),
225
+ ]);
226
+ };
227
+ },
228
+ });
229
+ //# sourceMappingURL=Calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../src/components/Calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type PropType } from 'vue';
2
+ import type { ViewType } from '@bimetal/calendar-core';
3
+ import type { ViewConfig } from '../binding/index.js';
4
+ export declare const CalendarHeader: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
+ title: {
6
+ type: StringConstructor;
7
+ required: true;
8
+ };
9
+ currentView: {
10
+ type: PropType<ViewType>;
11
+ required: true;
12
+ };
13
+ viewConfigs: {
14
+ type: PropType<ViewConfig[]>;
15
+ required: true;
16
+ };
17
+ onPrev: {
18
+ type: PropType<() => void>;
19
+ required: true;
20
+ };
21
+ onNext: {
22
+ type: PropType<() => void>;
23
+ required: true;
24
+ };
25
+ onToday: {
26
+ type: PropType<() => void>;
27
+ required: true;
28
+ };
29
+ onViewChange: {
30
+ type: PropType<(view: ViewType) => void>;
31
+ required: true;
32
+ };
33
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
34
+ [key: string]: any;
35
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
36
+ title: {
37
+ type: StringConstructor;
38
+ required: true;
39
+ };
40
+ currentView: {
41
+ type: PropType<ViewType>;
42
+ required: true;
43
+ };
44
+ viewConfigs: {
45
+ type: PropType<ViewConfig[]>;
46
+ required: true;
47
+ };
48
+ onPrev: {
49
+ type: PropType<() => void>;
50
+ required: true;
51
+ };
52
+ onNext: {
53
+ type: PropType<() => void>;
54
+ required: true;
55
+ };
56
+ onToday: {
57
+ type: PropType<() => void>;
58
+ required: true;
59
+ };
60
+ onViewChange: {
61
+ type: PropType<(view: ViewType) => void>;
62
+ required: true;
63
+ };
64
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
65
+ //# sourceMappingURL=CalendarHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarHeader.d.ts","sourceRoot":"","sources":["../../src/components/CalendarHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAK,MAAM,KAAK,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,eAAO,MAAM,cAAc;;;;;;cAIQ,QAAQ,CAAC,QAAQ,CAAC;;;;cACnB,QAAQ,CAAC,UAAU,EAAE,CAAC;;;;cACxB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACpB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACnB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACf,QAAQ,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;;;;;;;;;;;cALrC,QAAQ,CAAC,QAAQ,CAAC;;;;cACnB,QAAQ,CAAC,UAAU,EAAE,CAAC;;;;cACxB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACpB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACnB,QAAQ,CAAC,MAAM,IAAI,CAAC;;;;cACf,QAAQ,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;;;iGA0BtE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { defineComponent, h } from 'vue';
2
+ import { useCalendarConfig } from '../binding/index.js';
3
+ export const CalendarHeader = defineComponent({
4
+ name: 'CalendarHeader',
5
+ props: {
6
+ title: { type: String, required: true },
7
+ currentView: { type: String, required: true },
8
+ viewConfigs: { type: Array, required: true },
9
+ onPrev: { type: Function, required: true },
10
+ onNext: { type: Function, required: true },
11
+ onToday: { type: Function, required: true },
12
+ onViewChange: { type: Function, required: true },
13
+ },
14
+ setup(props) {
15
+ const config = useCalendarConfig();
16
+ return () => h('div', { class: 'calendar-header' }, [
17
+ h('h1', { class: 'month-title' }, props.title),
18
+ h('div', { class: 'header-controls' }, [
19
+ h('div', { class: 'view-switcher' }, props.viewConfigs.map(vc => h('button', {
20
+ key: vc.type,
21
+ class: `view-btn ${props.currentView === vc.type ? 'view-btn--active' : ''}`,
22
+ onClick: () => props.onViewChange(vc.type),
23
+ }, vc.label))),
24
+ h('div', { class: 'nav-controls' }, [
25
+ h('button', { class: 'nav-btn', 'aria-label': config.locale.prev, onClick: props.onPrev, innerHTML: '&lsaquo;' }),
26
+ h('button', { class: 'today-btn', onClick: props.onToday }, config.locale.today),
27
+ h('button', { class: 'nav-btn', 'aria-label': config.locale.next, onClick: props.onNext, innerHTML: '&rsaquo;' }),
28
+ ]),
29
+ ]),
30
+ ]);
31
+ },
32
+ });
33
+ //# sourceMappingURL=CalendarHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarHeader.js","sourceRoot":"","sources":["../../src/components/CalendarHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;IAC5C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,WAAW,EAAE,EAAE,IAAI,EAAE,MAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnE,WAAW,EAAE,EAAE,IAAI,EAAE,KAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnE,YAAY,EAAE,EAAE,IAAI,EAAE,QAA8C,EAAE,QAAQ,EAAE,IAAI,EAAE;KACvF;IACD,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,OAAO,GAAG,EAAE,CACV,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;YACrC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;YAC9C,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;gBACrC,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EACjC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CACzB,CAAC,CAAC,QAAQ,EAAE;oBACV,GAAG,EAAE,EAAE,CAAC,IAAI;oBACZ,KAAK,EAAE,YAAY,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC5E,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAa,CAAC,EAAE,CAAC,IAAI,CAAC;iBAC5C,EAAE,EAAE,CAAC,KAAK,CAAC,CACb,CACF;gBACD,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;oBAClC,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;oBACjH,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChF,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;iBAClH,CAAC;aACH,CAAC;SACH,CAAC,CAAC;IACP,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type PropType } from 'vue';
2
+ import type { Category } from '../binding/index.js';
3
+ export declare const CategoryFilter: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ categories: {
5
+ type: PropType<Category[]>;
6
+ required: true;
7
+ };
8
+ hiddenCategories: {
9
+ type: PropType<ReadonlySet<string>>;
10
+ required: true;
11
+ };
12
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
13
+ [key: string]: any;
14
+ }> | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "toggle"[], "toggle", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
15
+ categories: {
16
+ type: PropType<Category[]>;
17
+ required: true;
18
+ };
19
+ hiddenCategories: {
20
+ type: PropType<ReadonlySet<string>>;
21
+ required: true;
22
+ };
23
+ }>> & Readonly<{
24
+ onToggle?: ((...args: any[]) => any) | undefined;
25
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
26
+ //# sourceMappingURL=CategoryFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryFilter.d.ts","sourceRoot":"","sources":["../../src/components/CategoryFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAK,MAAM,KAAK,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,eAAO,MAAM,cAAc;;cAGM,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACb,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;;;;;cADpC,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACb,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;;;iFAqBnE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { defineComponent, h } from 'vue';
2
+ export const CategoryFilter = defineComponent({
3
+ name: 'CategoryFilter',
4
+ props: {
5
+ categories: { type: Array, required: true },
6
+ hiddenCategories: { type: Object, required: true },
7
+ },
8
+ emits: ['toggle'],
9
+ setup(props, { emit }) {
10
+ return () => {
11
+ if (props.categories.length === 0)
12
+ return null;
13
+ return h('div', { class: 'category-filter' }, props.categories.map(cat => {
14
+ const isHidden = props.hiddenCategories.has(cat.name);
15
+ return h('button', {
16
+ key: cat.name,
17
+ class: `category-filter__pill${isHidden ? ' category-filter__pill--hidden' : ''}`,
18
+ style: { backgroundColor: cat.color },
19
+ onClick: () => emit('toggle', cat.name),
20
+ type: 'button',
21
+ }, cat.name);
22
+ }));
23
+ };
24
+ },
25
+ });
26
+ //# sourceMappingURL=CategoryFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryFilter.js","sourceRoot":"","sources":["../../src/components/CategoryFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxD,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;IAC5C,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE;QACL,UAAU,EAAE,EAAE,IAAI,EAAE,KAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnE,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAuC,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpF;IACD,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE;QACnB,OAAO,GAAG,EAAE;YACV,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE/C,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAC1C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtD,OAAO,CAAC,CAAC,QAAQ,EAAE;oBACjB,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,KAAK,EAAE,wBAAwB,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjF,KAAK,EAAE,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE;oBACrC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC;oBACvC,IAAI,EAAE,QAAQ;iBACf,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type PropType } from 'vue';
2
+ import type { CalendarDateTime, LayoutItem } from '@bimetal/calendar-core';
3
+ export declare const EventBar: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ item: {
5
+ type: PropType<LayoutItem>;
6
+ required: true;
7
+ };
8
+ weekDates: {
9
+ type: PropType<CalendarDateTime[]>;
10
+ required: true;
11
+ };
12
+ ghost: {
13
+ type: BooleanConstructor;
14
+ default: boolean;
15
+ };
16
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
17
+ [key: string]: any;
18
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
19
+ item: {
20
+ type: PropType<LayoutItem>;
21
+ required: true;
22
+ };
23
+ weekDates: {
24
+ type: PropType<CalendarDateTime[]>;
25
+ required: true;
26
+ };
27
+ ghost: {
28
+ type: BooleanConstructor;
29
+ default: boolean;
30
+ };
31
+ }>> & Readonly<{}>, {
32
+ ghost: boolean;
33
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
34
+ //# sourceMappingURL=EventBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBar.d.ts","sourceRoot":"","sources":["../../src/components/EventBar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAK,MAAM,KAAK,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAK3E,eAAO,MAAM,QAAQ;;cAGO,QAAQ,CAAC,UAAU,CAAC;;;;cAChB,QAAQ,CAAC,gBAAgB,EAAE,CAAC;;;;;;;;;;;cADhC,QAAQ,CAAC,UAAU,CAAC;;;;cAChB,QAAQ,CAAC,gBAAgB,EAAE,CAAC;;;;;;;;;4EAmJ1D,CAAC"}
@@ -0,0 +1,141 @@
1
+ import { defineComponent, h } from 'vue';
2
+ import { daysBetween, getRecurrenceInstanceMetadata, isExpandedRecurrenceInstance } from '@bimetal/calendar-core';
3
+ import { useCalendarContext, useCalendarConfig, buildDragInfo, useEventSlots, toTimeStr } from '../binding/index.js';
4
+ import { createClickIntent, writeCalendarDragData, installTransparentDragImage, eventBarWantsDarkText } from '@bimetal/calendar-headless';
5
+ export const EventBar = defineComponent({
6
+ name: 'EventBar',
7
+ props: {
8
+ item: { type: Object, required: true },
9
+ weekDates: { type: Array, required: true },
10
+ ghost: { type: Boolean, default: false },
11
+ },
12
+ setup(props) {
13
+ const { onEventClick, onSelectEvent, selectedEventId, selectedInstanceDate, onDragStart: ctxDragStart, onDragEnd: ctxDragEnd, } = useCalendarContext();
14
+ const config = useCalendarConfig();
15
+ const click = createClickIntent();
16
+ const slots = useEventSlots(() => props.item.segment.event);
17
+ const handleMouseDown = () => {
18
+ click.markMouseDown();
19
+ };
20
+ const handleDragStart = (e) => {
21
+ click.markDragged();
22
+ const { segment, dayIndex, daySpan } = props.item;
23
+ const { event } = segment;
24
+ const bar = e.currentTarget;
25
+ const barRect = bar.getBoundingClientRect();
26
+ const colWidth = barRect.width / daySpan;
27
+ const grabColInBar = Math.min(Math.max(0, Math.floor((e.clientX - barRect.left) / colWidth)), daySpan - 1);
28
+ const grabbedDate = props.weekDates[dayIndex + grabColInBar];
29
+ const offset = daysBetween(event.timeRange.start, grabbedDate);
30
+ const info = buildDragInfo(event, 'move', { dayOffset: offset });
31
+ writeCalendarDragData(e.dataTransfer, info);
32
+ ctxDragStart(info);
33
+ };
34
+ const handleResizeDragStart = (e, edge) => {
35
+ e.stopPropagation();
36
+ click.markDragged();
37
+ installTransparentDragImage(e.dataTransfer);
38
+ const { event } = props.item.segment;
39
+ const info = buildDragInfo(event, 'resize', { edge });
40
+ writeCalendarDragData(e.dataTransfer, info);
41
+ ctxDragStart(info);
42
+ };
43
+ const handleClick = (e) => {
44
+ e.stopPropagation();
45
+ if (!click.accept(config.clickThresholdMs))
46
+ return;
47
+ const ev = props.item.segment.event;
48
+ const instanceDate = getRecurrenceInstanceMetadata(ev)?.instanceDate;
49
+ onSelectEvent(ev.id, instanceDate);
50
+ };
51
+ const handleDoubleClick = (e) => {
52
+ e.stopPropagation();
53
+ if (!click.accept(config.clickThresholdMs))
54
+ return;
55
+ const rect = e.currentTarget.getBoundingClientRect();
56
+ const ev = props.item.segment.event;
57
+ const instanceDate = getRecurrenceInstanceMetadata(ev)?.instanceDate;
58
+ onEventClick(ev.id, rect, instanceDate);
59
+ };
60
+ return () => {
61
+ const { segment, column, dayIndex, daySpan } = props.item;
62
+ const { event, isStart, isEnd } = segment;
63
+ const startCol = dayIndex;
64
+ const span = daySpan;
65
+ const lane = column;
66
+ const isCompact = span === 1 && isStart && isEnd && !event.allDay;
67
+ const isBar = !isCompact;
68
+ const color = event.metadata.color ?? '#007AFF';
69
+ const isRecurring = isExpandedRecurrenceInstance(event) || !!event.recurrence;
70
+ const ghostClass = props.ghost ? ' event-bar--ghost' : '';
71
+ const instanceDate = getRecurrenceInstanceMetadata(event)?.instanceDate;
72
+ const isSelected = selectedEventId.value === event.id && selectedInstanceDate.value === instanceDate;
73
+ const selectedClass = isSelected ? ' event-bar--selected' : '';
74
+ const s = slots.value;
75
+ const title = s.title ?? event.title;
76
+ const extraClass = s.className ? ' ' + s.className : '';
77
+ const style = {
78
+ gridColumn: `${startCol + 1} / span ${span}`,
79
+ gridRow: lane + 1,
80
+ };
81
+ if (isCompact) {
82
+ return h('div', {
83
+ class: `event-bar event-bar--single${ghostClass}${selectedClass}${extraClass}`,
84
+ style: { ...style, ...s.style },
85
+ draggable: !props.ghost,
86
+ onMousedown: handleMouseDown,
87
+ onDragstart: handleDragStart,
88
+ onDragend: ctxDragEnd,
89
+ onClick: handleClick,
90
+ onDblclick: handleDoubleClick,
91
+ title,
92
+ }, [
93
+ s.content ?? [
94
+ h('span', { class: 'event-dot', style: { backgroundColor: color } }),
95
+ h('span', { class: 'event-time' }, toTimeStr(event.timeRange.start)),
96
+ h('span', { class: 'event-title event-title--dark' }, `${isRecurring ? '↻ ' : ''}${title}`),
97
+ ],
98
+ s.badges ?? null,
99
+ ]);
100
+ }
101
+ return h('div', {
102
+ class: `event-bar event-bar--multi${ghostClass}${selectedClass}${extraClass}`,
103
+ style: {
104
+ ...style,
105
+ backgroundColor: color,
106
+ borderRadius: `${isStart ? 4 : 0}px ${isEnd ? 4 : 0}px ${isEnd ? 4 : 0}px ${isStart ? 4 : 0}px`,
107
+ ...s.style,
108
+ },
109
+ draggable: !props.ghost,
110
+ onMousedown: handleMouseDown,
111
+ onDragstart: handleDragStart,
112
+ onDragend: ctxDragEnd,
113
+ onClick: handleClick,
114
+ onDblclick: handleDoubleClick,
115
+ title,
116
+ }, [
117
+ isBar && isStart && !props.ghost
118
+ ? h('div', {
119
+ class: 'resize-handle resize-handle--start',
120
+ draggable: true,
121
+ onDragstart: (e) => handleResizeDragStart(e, 'start'),
122
+ onDragend: ctxDragEnd,
123
+ onMousedown: (e) => e.stopPropagation(),
124
+ })
125
+ : null,
126
+ s.content ?? h('span', { class: `event-title${eventBarWantsDarkText(color) ? ' event-title--on-light' : ''}` }, `${isRecurring ? '↻ ' : ''}${title}`),
127
+ s.badges ?? null,
128
+ isBar && isEnd && !props.ghost
129
+ ? h('div', {
130
+ class: 'resize-handle resize-handle--end',
131
+ draggable: true,
132
+ onDragstart: (e) => handleResizeDragStart(e, 'end'),
133
+ onDragend: ctxDragEnd,
134
+ onMousedown: (e) => e.stopPropagation(),
135
+ })
136
+ : null,
137
+ ]);
138
+ };
139
+ },
140
+ });
141
+ //# sourceMappingURL=EventBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBar.js","sourceRoot":"","sources":["../../src/components/EventBar.ts"],"names":[],"mappings":"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"}