@bimetal/calendar-angular-components 0.34.0 → 0.36.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.
- package/LICENSE +57 -129
- package/README.md +1 -1
- package/dist/binding/controller.d.ts +10 -1
- package/dist/binding/controller.d.ts.map +1 -1
- package/dist/binding/controller.js +11 -1
- package/dist/binding/controller.js.map +1 -1
- package/dist/binding/index.d.ts +5 -5
- package/dist/binding/index.d.ts.map +1 -1
- package/dist/binding/index.js +5 -5
- package/dist/binding/index.js.map +1 -1
- package/dist/binding/services/event-render.service.d.ts +9 -0
- package/dist/binding/services/event-render.service.d.ts.map +1 -1
- package/dist/binding/services/event-render.service.js +11 -0
- package/dist/binding/services/event-render.service.js.map +1 -1
- package/dist/binding/services/pointer-gesture.service.d.ts +26 -0
- package/dist/binding/services/pointer-gesture.service.d.ts.map +1 -0
- package/dist/binding/services/pointer-gesture.service.js +37 -0
- package/dist/binding/services/pointer-gesture.service.js.map +1 -0
- package/dist/components/Calendar.d.ts +47 -8
- package/dist/components/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar.js +183 -63
- package/dist/components/Calendar.js.map +1 -1
- package/dist/components/CalendarHeader.d.ts +12 -1
- package/dist/components/CalendarHeader.d.ts.map +1 -1
- package/dist/components/CalendarHeader.js +66 -14
- package/dist/components/CalendarHeader.js.map +1 -1
- package/dist/components/CategoryFilter.d.ts +4 -0
- package/dist/components/CategoryFilter.d.ts.map +1 -1
- package/dist/components/CategoryFilter.js +10 -5
- package/dist/components/CategoryFilter.js.map +1 -1
- package/dist/components/EventBar.d.ts +15 -4
- package/dist/components/EventBar.d.ts.map +1 -1
- package/dist/components/EventBar.js +108 -37
- package/dist/components/EventBar.js.map +1 -1
- package/dist/components/EventDialog.d.ts +11 -4
- package/dist/components/EventDialog.d.ts.map +1 -1
- package/dist/components/EventDialog.js +86 -44
- package/dist/components/EventDialog.js.map +1 -1
- package/dist/components/EventHistory.d.ts +14 -9
- package/dist/components/EventHistory.d.ts.map +1 -1
- package/dist/components/EventHistory.js +59 -55
- package/dist/components/EventHistory.js.map +1 -1
- package/dist/components/UndoToast.d.ts +9 -5
- package/dist/components/UndoToast.d.ts.map +1 -1
- package/dist/components/UndoToast.js +16 -27
- package/dist/components/UndoToast.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/styles/index.css.d.ts +3 -0
- package/dist/views/agenda/AgendaView.d.ts +1 -0
- package/dist/views/agenda/AgendaView.d.ts.map +1 -1
- package/dist/views/agenda/AgendaView.js +9 -2
- package/dist/views/agenda/AgendaView.js.map +1 -1
- package/dist/views/day/DayView.d.ts +30 -4
- package/dist/views/day/DayView.d.ts.map +1 -1
- package/dist/views/day/DayView.js +61 -17
- package/dist/views/day/DayView.js.map +1 -1
- package/dist/views/month/MonthView.d.ts +21 -4
- package/dist/views/month/MonthView.d.ts.map +1 -1
- package/dist/views/month/MonthView.js +66 -12
- package/dist/views/month/MonthView.js.map +1 -1
- package/dist/views/month/WeekRow.d.ts +28 -4
- package/dist/views/month/WeekRow.d.ts.map +1 -1
- package/dist/views/month/WeekRow.js +100 -29
- package/dist/views/month/WeekRow.js.map +1 -1
- package/dist/views/resource/ResourceView.d.ts +32 -1
- package/dist/views/resource/ResourceView.d.ts.map +1 -1
- package/dist/views/resource/ResourceView.js +84 -22
- package/dist/views/resource/ResourceView.js.map +1 -1
- package/dist/views/timeline/TimelineView.d.ts +29 -3
- package/dist/views/timeline/TimelineView.d.ts.map +1 -1
- package/dist/views/timeline/TimelineView.js +83 -17
- package/dist/views/timeline/TimelineView.js.map +1 -1
- package/dist/views/week/AllDayRow.d.ts +21 -3
- package/dist/views/week/AllDayRow.d.ts.map +1 -1
- package/dist/views/week/AllDayRow.js +60 -13
- package/dist/views/week/AllDayRow.js.map +1 -1
- package/dist/views/week/TimeEvent.d.ts +20 -4
- package/dist/views/week/TimeEvent.d.ts.map +1 -1
- package/dist/views/week/TimeEvent.js +101 -31
- package/dist/views/week/TimeEvent.js.map +1 -1
- package/dist/views/week/WeekView.d.ts +25 -2
- package/dist/views/week/WeekView.d.ts.map +1 -1
- package/dist/views/week/WeekView.js +69 -21
- package/dist/views/week/WeekView.js.map +1 -1
- package/dist/views/year/YearView.d.ts +11 -4
- package/dist/views/year/YearView.d.ts.map +1 -1
- package/dist/views/year/YearView.js +26 -5
- package/dist/views/year/YearView.js.map +1 -1
- package/package.json +16 -13
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
|
2
|
-
import type { CalendarLocale } from '../binding/index.js';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Feedback-only now (ticket-15): the undo/redo affordance moved to the header
|
|
5
|
+
* button pair. The toast just narrates the last action and offers a dismiss — it
|
|
6
|
+
* carries no undo/redo action anymore. ticket-31: auto-dismiss delay is the
|
|
7
|
+
* `undoToastMs` input (0 = never); this timer no longer gates undo capability.
|
|
8
|
+
*/
|
|
4
9
|
export declare class UndoToastComponent implements OnChanges, OnDestroy {
|
|
5
10
|
lastAction: {
|
|
6
11
|
entityId: string;
|
|
7
12
|
description: string;
|
|
8
13
|
} | null;
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
/** Auto-dismiss delay (ms); `0` = never (ticket-31). Fed from `config.undoToastMs`. */
|
|
15
|
+
undoToastMs: number;
|
|
11
16
|
dismiss: EventEmitter<void>;
|
|
12
17
|
private timer;
|
|
13
18
|
ngOnChanges(changes: SimpleChanges): void;
|
|
14
19
|
ngOnDestroy(): void;
|
|
15
|
-
handleUndo(): void;
|
|
16
20
|
private clearTimer;
|
|
17
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<UndoToastComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<UndoToastComponent, "cal-undo-toast", never, { "lastAction": { "alias": "lastAction"; "required": false; }; "
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UndoToastComponent, "cal-undo-toast", never, { "lastAction": { "alias": "lastAction"; "required": false; }; "undoToastMs": { "alias": "undoToastMs"; "required": false; }; }, { "dismiss": "dismiss"; }, never, never, true, never>;
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=UndoToast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoToast.d.ts","sourceRoot":"","sources":["../../src/components/UndoToast.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"UndoToast.d.ts","sourceRoot":"","sources":["../../src/components/UndoToast.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;;AAI5G;;;;;GAKG;AACH,qBAYa,kBAAmB,YAAW,SAAS,EAAE,SAAS;IACpD,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAQ;IAC7E,uFAAuF;IAC9E,WAAW,SAA2B;IACrC,OAAO,qBAA4B;IAE7C,OAAO,CAAC,KAAK,CAA8C;IAE3D,WAAW,CAAC,OAAO,EAAE,aAAa;IASlC,WAAW;IAIX,OAAO,CAAC,UAAU;yCArBP,kBAAkB;2CAAlB,kBAAkB;CA2B9B"}
|
|
@@ -9,43 +9,37 @@ function UndoToastComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
9
9
|
i0.ɵɵtext(2);
|
|
10
10
|
i0.ɵɵelementEnd();
|
|
11
11
|
i0.ɵɵelementStart(3, "button", 3);
|
|
12
|
-
i0.ɵɵlistener("click", function UndoToastComponent_div_0_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.
|
|
13
|
-
i0.ɵɵtext(4);
|
|
14
|
-
i0.ɵɵelementEnd();
|
|
15
|
-
i0.ɵɵelementStart(5, "button", 4);
|
|
16
|
-
i0.ɵɵlistener("click", function UndoToastComponent_div_0_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.dismiss.emit()); });
|
|
17
|
-
i0.ɵɵtext(6, "\u00D7");
|
|
12
|
+
i0.ɵɵlistener("click", function UndoToastComponent_div_0_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.dismiss.emit()); });
|
|
13
|
+
i0.ɵɵtext(4, "\u00D7");
|
|
18
14
|
i0.ɵɵelementEnd()();
|
|
19
15
|
} if (rf & 2) {
|
|
20
16
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
21
17
|
i0.ɵɵadvance(2);
|
|
22
18
|
i0.ɵɵtextInterpolate(ctx_r1.lastAction.description);
|
|
23
|
-
i0.ɵɵadvance(2);
|
|
24
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.locale == null ? null : ctx_r1.locale.undo, " ");
|
|
25
19
|
} }
|
|
20
|
+
/**
|
|
21
|
+
* Feedback-only now (ticket-15): the undo/redo affordance moved to the header
|
|
22
|
+
* button pair. The toast just narrates the last action and offers a dismiss — it
|
|
23
|
+
* carries no undo/redo action anymore. ticket-31: auto-dismiss delay is the
|
|
24
|
+
* `undoToastMs` input (0 = never); this timer no longer gates undo capability.
|
|
25
|
+
*/
|
|
26
26
|
export class UndoToastComponent {
|
|
27
27
|
lastAction = null;
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
/** Auto-dismiss delay (ms); `0` = never (ticket-31). Fed from `config.undoToastMs`. */
|
|
29
|
+
undoToastMs = DEFAULT_UNDO_DISMISS_MS;
|
|
30
30
|
dismiss = new EventEmitter();
|
|
31
31
|
timer = null;
|
|
32
32
|
ngOnChanges(changes) {
|
|
33
33
|
if (changes['lastAction']) {
|
|
34
34
|
this.clearTimer();
|
|
35
|
-
if (this.lastAction) {
|
|
36
|
-
this.timer = setTimeout(() => this.dismiss.emit(),
|
|
35
|
+
if (this.lastAction && this.undoToastMs > 0) {
|
|
36
|
+
this.timer = setTimeout(() => this.dismiss.emit(), this.undoToastMs);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
ngOnDestroy() {
|
|
41
41
|
this.clearTimer();
|
|
42
42
|
}
|
|
43
|
-
handleUndo() {
|
|
44
|
-
if (this.lastAction) {
|
|
45
|
-
this.undoAction.emit(this.lastAction.entityId);
|
|
46
|
-
this.dismiss.emit();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
43
|
clearTimer() {
|
|
50
44
|
if (this.timer) {
|
|
51
45
|
clearTimeout(this.timer);
|
|
@@ -53,8 +47,8 @@ export class UndoToastComponent {
|
|
|
53
47
|
}
|
|
54
48
|
}
|
|
55
49
|
static ɵfac = function UndoToastComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || UndoToastComponent)(); };
|
|
56
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UndoToastComponent, selectors: [["cal-undo-toast"]], hostAttrs: [2, "display", "contents"], inputs: { lastAction: "lastAction",
|
|
57
|
-
i0.ɵɵtemplate(0, UndoToastComponent_div_0_Template,
|
|
50
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UndoToastComponent, selectors: [["cal-undo-toast"]], hostAttrs: [2, "display", "contents"], inputs: { lastAction: "lastAction", undoToastMs: "undoToastMs" }, outputs: { dismiss: "dismiss" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["class", "bm-cal__toast", "role", "status", 4, "ngIf"], ["role", "status", 1, "bm-cal__toast"], [1, "bm-cal__toast-text"], [1, "bm-cal__toast-dismiss", 3, "click"]], template: function UndoToastComponent_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
i0.ɵɵtemplate(0, UndoToastComponent_div_0_Template, 5, 1, "div", 0);
|
|
58
52
|
} if (rf & 2) {
|
|
59
53
|
i0.ɵɵproperty("ngIf", ctx.lastAction);
|
|
60
54
|
} }, dependencies: [CommonModule, i1.NgIf], encapsulation: 2 });
|
|
@@ -69,21 +63,16 @@ export class UndoToastComponent {
|
|
|
69
63
|
template: `
|
|
70
64
|
<div class="bm-cal__toast" role="status" *ngIf="lastAction">
|
|
71
65
|
<span class="bm-cal__toast-text">{{ lastAction.description }}</span>
|
|
72
|
-
<button class="bm-cal__toast-btn" (click)="handleUndo()">
|
|
73
|
-
{{ locale?.undo }}
|
|
74
|
-
</button>
|
|
75
66
|
<button class="bm-cal__toast-dismiss" (click)="dismiss.emit()">×</button>
|
|
76
67
|
</div>
|
|
77
68
|
`,
|
|
78
69
|
}]
|
|
79
70
|
}], null, { lastAction: [{
|
|
80
71
|
type: Input
|
|
81
|
-
}],
|
|
72
|
+
}], undoToastMs: [{
|
|
82
73
|
type: Input
|
|
83
|
-
}], undoAction: [{
|
|
84
|
-
type: Output
|
|
85
74
|
}], dismiss: [{
|
|
86
75
|
type: Output
|
|
87
76
|
}] }); })();
|
|
88
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UndoToastComponent, { className: "UndoToastComponent", filePath: "components/undotoast.ts", lineNumber:
|
|
77
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UndoToastComponent, { className: "UndoToastComponent", filePath: "components/undotoast.ts", lineNumber: 23 }); })();
|
|
89
78
|
//# sourceMappingURL=UndoToast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UndoToast.js","sourceRoot":"","sources":["../../src/components/UndoToast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAuC,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"UndoToast.js","sourceRoot":"","sources":["../../src/components/UndoToast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAuC,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;;;;;IAe/D,AADF,8BAA4D,cACzB;IAAA,YAA4B;IAAA,iBAAO;IACpE,iCAA+D;IAAzB,8KAAS,qBAAc,KAAC;IAAC,sBAAO;IACxE,AADwE,iBAAS,EAC3E;;;IAF6B,eAA4B;IAA5B,mDAA4B;;AAbnE;;;;;GAKG;AAaH,MAAM,OAAO,kBAAkB;IACpB,UAAU,GAAqD,IAAI,CAAC;IAC7E,uFAAuF;IAC9E,WAAW,GAAG,uBAAuB,CAAC;IACrC,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;IAErC,KAAK,GAAyC,IAAI,CAAC;IAE3D,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;4GA1BU,kBAAkB;6DAAlB,kBAAkB;YAN3B,mEAA4D;;YAAlB,qCAAgB;4BAFlD,YAAY;;iFAQX,kBAAkB;cAZ9B,SAAS;eAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,QAAQ,EAAE;;;;;GAKT;aACF;gBAEU,UAAU;kBAAlB,KAAK;YAEG,WAAW;kBAAnB,KAAK;YACI,OAAO;kBAAhB,MAAM;;kFAJI,kBAAkB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { CalendarComponent } from './components/Calendar.js';
|
|
2
2
|
export { CalendarHeaderComponent } from './components/CalendarHeader.js';
|
|
3
3
|
export { CategoryFilterComponent } from './components/CategoryFilter.js';
|
|
4
|
-
export { UndoToastComponent } from './components/UndoToast.js';
|
|
5
4
|
export { EventHistoryComponent } from './components/EventHistory.js';
|
|
6
5
|
export { EventBarComponent } from './components/EventBar.js';
|
|
7
6
|
export { EventDialogComponent } from './components/EventDialog.js';
|
|
@@ -16,5 +15,4 @@ export { YearViewComponent } from './views/year/YearView.js';
|
|
|
16
15
|
export { ResourceViewComponent } from './views/resource/ResourceView.js';
|
|
17
16
|
export { TimelineViewComponent } from './views/timeline/TimelineView.js';
|
|
18
17
|
export * from './binding/index.js';
|
|
19
|
-
export * from '@bimetal/angular';
|
|
20
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,6 @@ export { CalendarComponent } from './components/Calendar.js';
|
|
|
3
3
|
// ── UI Components ───────────────────────────────────────────────
|
|
4
4
|
export { CalendarHeaderComponent } from './components/CalendarHeader.js';
|
|
5
5
|
export { CategoryFilterComponent } from './components/CategoryFilter.js';
|
|
6
|
-
export { UndoToastComponent } from './components/UndoToast.js';
|
|
7
6
|
export { EventHistoryComponent } from './components/EventHistory.js';
|
|
8
7
|
export { EventBarComponent } from './components/EventBar.js';
|
|
9
8
|
export { EventDialogComponent } from './components/EventDialog.js';
|
|
@@ -21,5 +20,4 @@ export { TimelineViewComponent } from './views/timeline/TimelineView.js';
|
|
|
21
20
|
// ── Calendar Angular binding (controller binding / services / config / types) ──
|
|
22
21
|
export * from './binding/index.js';
|
|
23
22
|
// ── Re-export the generic component-family bindings for convenience ──
|
|
24
|
-
export * from '@bimetal/angular';
|
|
25
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,mEAAmE;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,mEAAmE;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,mEAAmE;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,kFAAkF;AAClF,cAAc,oBAAoB,CAAC;AAEnC,wEAAwE"}
|
|
@@ -42,6 +42,7 @@ export declare class AgendaViewComponent implements AfterViewInit, OnDestroy {
|
|
|
42
42
|
renderedTitle(ev: CalendarEvent): string;
|
|
43
43
|
slotsClassName(ev: CalendarEvent): string;
|
|
44
44
|
slotsStyle(ev: CalendarEvent): Record<string, string | number> | undefined;
|
|
45
|
+
lockedClass(ev: CalendarEvent): string;
|
|
45
46
|
getColor(ev: CalendarEvent): string;
|
|
46
47
|
ngAfterViewInit(): void;
|
|
47
48
|
ngOnDestroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgendaView.d.ts","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,aAAa,EAAE,SAAS,EAC5B,UAAU,EAAE,MAAM,EACvD,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE3G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;;AAE5D;;;;;;;;GAQG;AACH,qBAkDa,mBAAoB,YAAW,aAAa,EAAE,SAAS;IAa1C,OAAO,CAAC,aAAa,CAAC;IAAkC,OAAO,CAAC,IAAI,CAAC;IAZpF,MAAM,EAAG,YAAY,CAAC;IACtB,MAAM,EAAG,cAAc,CAAC;IACjC,iFAAiF;IACxE,WAAW,EAAG,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,UAAU;iBAA+B,MAAM;cAAQ,OAAO;uBAAiB,MAAM;OAAM;IAC3F,WAAW;iBAA+B,MAAM;uBAAiB,MAAM;OAAM;IAEhE,QAAQ,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO,CAAC,eAAe,CAA6B;IAEpD,KAAK,mDAAuB;gBAEI,aAAa,CAAC,EAAE,kBAAkB,YAAA,EAAsB,IAAI,CAAC,EAAE,MAAM,YAAA;IAGrG,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe;IACzC,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc;IAEvC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM;IAG5C,IAAI,SAAS,yGAAiD;IAC9D,IAAI,UAAU,yGAAkD;IAChE,MAAM,CAAC,EAAE,EAAE,aAAa;IACxB,aAAa,CAAC,EAAE,EAAE,aAAa;IAC/B,cAAc,CAAC,EAAE,EAAE,aAAa;IAIhC,UAAU,CAAC,EAAE,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"AgendaView.d.ts","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,aAAa,EAAE,SAAS,EAC5B,UAAU,EAAE,MAAM,EACvD,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE3G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;;AAE5D;;;;;;;;GAQG;AACH,qBAkDa,mBAAoB,YAAW,aAAa,EAAE,SAAS;IAa1C,OAAO,CAAC,aAAa,CAAC;IAAkC,OAAO,CAAC,IAAI,CAAC;IAZpF,MAAM,EAAG,YAAY,CAAC;IACtB,MAAM,EAAG,cAAc,CAAC;IACjC,iFAAiF;IACxE,WAAW,EAAG,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,UAAU;iBAA+B,MAAM;cAAQ,OAAO;uBAAiB,MAAM;OAAM;IAC3F,WAAW;iBAA+B,MAAM;uBAAiB,MAAM;OAAM;IAEhE,QAAQ,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO,CAAC,eAAe,CAA6B;IAEpD,KAAK,mDAAuB;gBAEI,aAAa,CAAC,EAAE,kBAAkB,YAAA,EAAsB,IAAI,CAAC,EAAE,MAAM,YAAA;IAGrG,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,eAAe;IACzC,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc;IAEvC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM;IAG5C,IAAI,SAAS,yGAAiD;IAC9D,IAAI,UAAU,yGAAkD;IAChE,MAAM,CAAC,EAAE,EAAE,aAAa;IACxB,aAAa,CAAC,EAAE,EAAE,aAAa;IAC/B,cAAc,CAAC,EAAE,EAAE,aAAa;IAIhC,UAAU,CAAC,EAAE,EAAE,aAAa;IAG5B,WAAW,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM;IAMtC,QAAQ,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM;IAInC,eAAe;IAiBf,WAAW;IAIX,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc;IAKpD,sBAAsB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc;yCArE9C,mBAAmB;2CAAnB,mBAAmB;CA0E/B"}
|
|
@@ -102,7 +102,7 @@ function AgendaViewComponent_ng_template_3_ng_container_1_div_2_Template(rf, ctx
|
|
|
102
102
|
const defaultAgenda_r4 = i0.ɵɵreference(3);
|
|
103
103
|
const row_r2 = i0.ɵɵnextContext().$implicit;
|
|
104
104
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
105
|
-
i0.ɵɵclassMap("bm-cal-agenda__row bm-cal-agenda__event" + (ctx_r0.asEvent(row_r2).
|
|
105
|
+
i0.ɵɵclassMap("bm-cal-agenda__row bm-cal-agenda__event" + (ctx_r0.asEvent(row_r2).selected ? " bm-cal-agenda__event--selected" : "") + ctx_r0.lockedClass(ctx_r0.asEvent(row_r2).event) + ctx_r0.slotsClassName(ctx_r0.asEvent(row_r2).event));
|
|
106
106
|
i0.ɵɵproperty("ngStyle", ctx_r0.slotsStyle(ctx_r0.asEvent(row_r2).event));
|
|
107
107
|
i0.ɵɵadvance();
|
|
108
108
|
i0.ɵɵproperty("ngIf", ctx_r0.contentTpl)("ngIfElse", defaultAgenda_r4);
|
|
@@ -175,6 +175,13 @@ export class AgendaViewComponent {
|
|
|
175
175
|
return cls ? ' ' + cls : '';
|
|
176
176
|
}
|
|
177
177
|
slotsStyle(ev) { return this.renderService?.resolveStyle(ev); }
|
|
178
|
+
// ticket-19: agenda rows have no move/resize affordance to drop, but a fully locked
|
|
179
|
+
// event (e.g. a holiday) still gets `--locked` so a theme marks it read-only.
|
|
180
|
+
lockedClass(ev) {
|
|
181
|
+
const p = this.renderService?.resolveInteraction(ev)
|
|
182
|
+
?? { draggable: true, resizable: true, editable: true, deletable: true };
|
|
183
|
+
return (!p.draggable && !p.resizable && !p.editable && !p.deletable) ? ' bm-cal-agenda__event--locked' : '';
|
|
184
|
+
}
|
|
178
185
|
getColor(ev) {
|
|
179
186
|
return ev.metadata.color ?? '#007AFF';
|
|
180
187
|
}
|
|
@@ -254,7 +261,7 @@ export class AgendaViewComponent {
|
|
|
254
261
|
</div>
|
|
255
262
|
</div>
|
|
256
263
|
<div *ngIf="row.kind === 'event'"
|
|
257
|
-
[class]="'bm-cal-agenda__row bm-cal-agenda__event' + (asEvent(row).
|
|
264
|
+
[class]="'bm-cal-agenda__row bm-cal-agenda__event' + (asEvent(row).selected ? ' bm-cal-agenda__event--selected' : '') + lockedClass(asEvent(row).event) + slotsClassName(asEvent(row).event)"
|
|
258
265
|
[ngStyle]="slotsStyle(asEvent(row).event)"
|
|
259
266
|
(mousedown)="click.markMouseDown()"
|
|
260
267
|
(click)="handleEventClick($event, asEvent(row))"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgendaView.js","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EACtC,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GACjE,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;;;;;;IAmBtD,6BAAiD;IAC/C,8BAAkC;IAAA,YAA4B;IAAA,iBAAM;;;;IAAlC,eAA4B;IAA5B,mDAA4B;;;IAG9D,yBAA8H;;;IAA9D,uDAAoC;;;IAKhG,AAHF,+BAE4D,eACjB;IAAA,YAA8B;IAAA,iBAAO;IAE5E,AADF,+BAAsC,eACM;IAAA,YAA2B;IAAA,iBAAO;IAC5E,gCAAuC;IAAA,YAA4B;IAEvE,AADE,AADqE,iBAAO,EACtE,EACF;;;;IANJ,4EAAyD;IAChB,eAA8B;IAA9B,wDAA8B;IAE3B,eAA2B;IAA3B,qDAA2B;IAC9B,eAA4B;IAA5B,sDAA4B;;;IAUnE,wBAAiG;;;IADnG,6BAAqD;IACnD,yIAAkF;;;;;IAAnE,cAA8B;IAAA,AAA9B,oDAA8B,wEAAmC;;;IAGhF,0BAAqG;IAEnG,AADF,+BAA0C,cACA;IAAA,YAAuC;IAAA,iBAAM;IACrF,+BAAuC;IAAA,YAA4B;IACrE,AADqE,iBAAM,EACrE;IACN,+BAA2C;IAAA,YAA2B;IAAA,iBAAM;;;;IALpC,iFAAsD;IAEpD,eAAuC;IAAvC,wEAAuC;IACxC,eAA4B;IAA5B,sDAA4B;IAE1B,eAA2B;IAA3B,qDAA2B;;;IAGtE,wBAAgG;;;IADlG,6BAAgC;IAC9B,yIAAiF;;;;;IAAlE,cAA6B;IAAA,AAA7B,mDAA6B,wEAAmC;;;;IAlBnF,+BAK4D;IAA1D,AADA,AADA,kNAAa,4BAAqB,KAAC,gPAC1B,gCAAyB,sBAAY,CAAC,KAAC,sPACpC,sCAA+B,sBAAY,CAAC,KAAC;IAYzD,AARA,AAHA,yHAAqD,2IAGzB,6GAQI;IAGlC,iBAAM;;;;;IAnBJ,
|
|
1
|
+
{"version":3,"file":"AgendaView.js","sourceRoot":"","sources":["../../../src/views/agenda/AgendaView.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import type { DragInfo } from '@bimetal/calendar-headless';
|
|
1
2
|
import { EventEmitter, OnChanges, AfterViewInit, ElementRef } from '@angular/core';
|
|
2
3
|
import type { CalendarEvent, CalendarDateTime } from '@bimetal/calendar-core';
|
|
3
4
|
import type { CalendarConfig } from '../../binding/index.js';
|
|
4
|
-
import { EventRenderService } from '../../binding/index.js';
|
|
5
|
+
import { EventRenderService, CalendarPointerGestureService } from '../../binding/index.js';
|
|
5
6
|
import { type TimeEventLayout } from '../week/TimeEvent.js';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* Single-day view: all-day event row plus a scrollable 24h time grid with one
|
|
10
|
+
* `cal-time-event` per timed event, laid out into overlap lanes.
|
|
11
|
+
*/
|
|
7
12
|
export declare class DayViewComponent implements OnChanges, AfterViewInit {
|
|
13
|
+
private gesture;
|
|
8
14
|
private renderService?;
|
|
9
15
|
currentDate: CalendarDateTime;
|
|
10
16
|
events: CalendarEvent[];
|
|
@@ -39,6 +45,11 @@ export declare class DayViewComponent implements OnChanges, AfterViewInit {
|
|
|
39
45
|
hidePreviewEv: EventEmitter<void>;
|
|
40
46
|
/** Native `dragend` der Source — Drag-Session vollständig beendet. */
|
|
41
47
|
dragEnd: EventEmitter<void>;
|
|
48
|
+
dropTimedInfo: EventEmitter<{
|
|
49
|
+
info: DragInfo;
|
|
50
|
+
date: CalendarDateTime;
|
|
51
|
+
time: string;
|
|
52
|
+
}>;
|
|
42
53
|
dragStartEv: EventEmitter<any>;
|
|
43
54
|
timeGridEl?: ElementRef<HTMLDivElement>;
|
|
44
55
|
gridInnerEl?: ElementRef<HTMLDivElement>;
|
|
@@ -56,7 +67,7 @@ export declare class DayViewComponent implements OnChanges, AfterViewInit {
|
|
|
56
67
|
nowHours: number;
|
|
57
68
|
click: import("@bimetal/calendar-headless").ClickIntent;
|
|
58
69
|
allDayClick: import("@bimetal/calendar-headless").ClickIntent;
|
|
59
|
-
constructor(renderService?: EventRenderService | undefined);
|
|
70
|
+
constructor(gesture: CalendarPointerGestureService, renderService?: EventRenderService | undefined);
|
|
60
71
|
get badgesTpl(): import("@angular/core").TemplateRef<import("../../index.js").EventRenderTemplateContext> | undefined;
|
|
61
72
|
get contentTpl(): import("@angular/core").TemplateRef<import("../../index.js").EventRenderTemplateContext> | undefined;
|
|
62
73
|
tplCtx(ev: CalendarEvent): import("../../index.js").EventRenderTemplateContext | undefined;
|
|
@@ -68,6 +79,21 @@ export declare class DayViewComponent implements OnChanges, AfterViewInit {
|
|
|
68
79
|
getColor(ev: CalendarEvent): string;
|
|
69
80
|
formatHour(h: number): string;
|
|
70
81
|
isOffHour(h: number): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Same identity rule the week view pins (mcp-130 review of mcp-129's class):
|
|
84
|
+
* `timedEntries` is rebuilt with fresh wrappers on every previewEvent tick of a
|
|
85
|
+
* drag (the snapshot deep-copies previewEvent, so the input identity changes per
|
|
86
|
+
* dragover). Without trackBy that re-created every cal-time-event mid-drag —
|
|
87
|
+
* past dragstart Chromium no longer aborts, but the destroyed source's native
|
|
88
|
+
* `dragend` never reaches the binding, leaking the preview on Escape/outside
|
|
89
|
+
* drops. WeekView had `trackTimed` for the identical structure; DayView was the
|
|
90
|
+
* forgotten sister.
|
|
91
|
+
*/
|
|
92
|
+
trackTimed(_i: number, entry: {
|
|
93
|
+
event: CalendarEvent;
|
|
94
|
+
layout: TimeEventLayout;
|
|
95
|
+
}): string;
|
|
96
|
+
trackEvent(_i: number, ev: CalendarEvent): string;
|
|
71
97
|
ngOnChanges(): void;
|
|
72
98
|
ngAfterViewInit(): void;
|
|
73
99
|
handleGridDragOver(e: DragEvent): void;
|
|
@@ -79,7 +105,7 @@ export declare class DayViewComponent implements OnChanges, AfterViewInit {
|
|
|
79
105
|
handleAllDayClick(e: MouseEvent, ev: CalendarEvent): void;
|
|
80
106
|
handleAllDayDoubleClick(e: MouseEvent, ev: CalendarEvent): void;
|
|
81
107
|
isAllDaySelected(ev: CalendarEvent): boolean;
|
|
82
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DayViewComponent, [{ optional: true; }]>;
|
|
83
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DayViewComponent, "cal-day-view", never, { "currentDate": { "alias": "currentDate"; "required": false; }; "events": { "alias": "events"; "required": false; }; "config": { "alias": "config"; "required": false; }; "previewEvent": { "alias": "previewEvent"; "required": false; }; "selectedEventId": { "alias": "selectedEventId"; "required": false; }; "selectedInstanceDate": { "alias": "selectedInstanceDate"; "required": false; }; }, { "eventClick": "eventClick"; "selectEvent": "selectEvent"; "clearSelection": "clearSelection"; "dayCellClick": "dayCellClick"; "dropTimedEvent": "dropTimedEvent"; "dragOverDateTime": "dragOverDateTime"; "hidePreviewEv": "hidePreviewEv"; "dragEnd": "dragEnd"; "dragStartEv": "dragStartEv"; }, never, never, true, never>;
|
|
108
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DayViewComponent, [null, { optional: true; }]>;
|
|
109
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DayViewComponent, "cal-day-view", never, { "currentDate": { "alias": "currentDate"; "required": false; }; "events": { "alias": "events"; "required": false; }; "config": { "alias": "config"; "required": false; }; "previewEvent": { "alias": "previewEvent"; "required": false; }; "selectedEventId": { "alias": "selectedEventId"; "required": false; }; "selectedInstanceDate": { "alias": "selectedInstanceDate"; "required": false; }; }, { "eventClick": "eventClick"; "selectEvent": "selectEvent"; "clearSelection": "clearSelection"; "dayCellClick": "dayCellClick"; "dropTimedEvent": "dropTimedEvent"; "dragOverDateTime": "dragOverDateTime"; "hidePreviewEv": "hidePreviewEv"; "dragEnd": "dragEnd"; "dropTimedInfo": "dropTimedInfo"; "dragStartEv": "dragStartEv"; }, never, never, true, never>;
|
|
84
110
|
}
|
|
85
111
|
//# sourceMappingURL=DayView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DayView.d.ts","sourceRoot":"","sources":["../../../src/views/day/DayView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAY,MAAM,eAAe,CAAC;AAElI,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"DayView.d.ts","sourceRoot":"","sources":["../../../src/views/day/DayView.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, Optional } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { isSameDay, now, getDayOfMonth, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps,
|
|
4
|
-
import {
|
|
3
|
+
import { isSameDay, now, getDayOfMonth, startOfDay, addDays, getHours, getMinutes, createTimeRange, overlaps, formatWeekdayName } from '@bimetal/temporal';
|
|
4
|
+
import { segmentTimed, layoutTimed, getRecurrenceInstanceMetadata } from '@bimetal/calendar-core';
|
|
5
|
+
import { snapTimeFromMouseY, toDateStr, parseDateTimeStr, EventRenderService, CalendarPointerGestureService } from '../../binding/index.js';
|
|
5
6
|
import { DEFAULT_HOUR_HEIGHT, DEFAULT_TIME_LABEL_WIDTH_DAY, DEFAULT_SCROLL_HOUR, createClickIntent } from '@bimetal/calendar-headless';
|
|
6
7
|
import { TimeEventComponent } from '../week/TimeEvent.js';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
@@ -72,7 +73,7 @@ function DayViewComponent_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
|
72
73
|
i0.ɵɵadvance(2);
|
|
73
74
|
i0.ɵɵtextInterpolate(ctx_r2.config.locale.allDayLabel);
|
|
74
75
|
i0.ɵɵadvance(2);
|
|
75
|
-
i0.ɵɵproperty("ngForOf", ctx_r2.allDayEvents);
|
|
76
|
+
i0.ɵɵproperty("ngForOf", ctx_r2.allDayEvents)("ngForTrackBy", ctx_r2.trackEvent);
|
|
76
77
|
} }
|
|
77
78
|
function DayViewComponent_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
78
79
|
i0.ɵɵelementStart(0, "div")(1, "div", 21);
|
|
@@ -94,7 +95,7 @@ function DayViewComponent_cal_time_event_13_Template(rf, ctx) { if (rf & 1) {
|
|
|
94
95
|
} if (rf & 2) {
|
|
95
96
|
const entry_r8 = ctx.$implicit;
|
|
96
97
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
97
|
-
i0.ɵɵproperty("event", entry_r8.event)("dayCol", entry_r8.layout.dayCol)("dayCount", entry_r8.layout.dayCount)("lane", entry_r8.layout.lane)("laneCount", entry_r8.layout.laneCount)("startOffset", entry_r8.layout.startOffset)("endOffset", entry_r8.layout.endOffset)("dayDate", ctx_r2.currentDate)("hourHeight", ctx_r2.hourHeight)("timeLabelWidth", ctx_r2.timeLabelWidth)("ghost", (ctx_r2.previewEvent == null ? null : ctx_r2.previewEvent.id) === entry_r8.event.id)("clickThresholdMs", ctx_r2.config.clickThresholdMs)("locale", ctx_r2.config.locale)("snapMinutes", ctx_r2.config.core.granularity.day.minutes)("isSelected", ctx_r2.isAllDaySelected(entry_r8.event));
|
|
98
|
+
i0.ɵɵproperty("config", ctx_r2.config)("event", entry_r8.event)("dayCol", entry_r8.layout.dayCol)("dayCount", entry_r8.layout.dayCount)("lane", entry_r8.layout.lane)("laneCount", entry_r8.layout.laneCount)("startOffset", entry_r8.layout.startOffset)("endOffset", entry_r8.layout.endOffset)("dayDate", ctx_r2.currentDate)("hourHeight", ctx_r2.hourHeight)("timeLabelWidth", ctx_r2.timeLabelWidth)("ghost", (ctx_r2.previewEvent == null ? null : ctx_r2.previewEvent.id) === entry_r8.event.id)("clickThresholdMs", ctx_r2.config.clickThresholdMs)("locale", ctx_r2.config.locale)("snapMinutes", ctx_r2.config.core.granularity.day.minutes)("isSelected", ctx_r2.isAllDaySelected(entry_r8.event));
|
|
98
99
|
} }
|
|
99
100
|
function DayViewComponent_div_14_Template(rf, ctx) { if (rf & 1) {
|
|
100
101
|
i0.ɵɵelementStart(0, "div", 23);
|
|
@@ -105,7 +106,12 @@ function DayViewComponent_div_14_Template(rf, ctx) { if (rf & 1) {
|
|
|
105
106
|
i0.ɵɵstyleProp("top", ctx_r2.nowHours * ctx_r2.hourHeight, "px");
|
|
106
107
|
} }
|
|
107
108
|
const HOURS = Array.from({ length: 24 }, (_, i) => i);
|
|
109
|
+
/**
|
|
110
|
+
* Single-day view: all-day event row plus a scrollable 24h time grid with one
|
|
111
|
+
* `cal-time-event` per timed event, laid out into overlap lanes.
|
|
112
|
+
*/
|
|
108
113
|
export class DayViewComponent {
|
|
114
|
+
gesture;
|
|
109
115
|
renderService;
|
|
110
116
|
currentDate;
|
|
111
117
|
events = [];
|
|
@@ -124,6 +130,7 @@ export class DayViewComponent {
|
|
|
124
130
|
hidePreviewEv = new EventEmitter();
|
|
125
131
|
/** Native `dragend` der Source — Drag-Session vollständig beendet. */
|
|
126
132
|
dragEnd = new EventEmitter();
|
|
133
|
+
dropTimedInfo = new EventEmitter();
|
|
127
134
|
dragStartEv = new EventEmitter();
|
|
128
135
|
timeGridEl;
|
|
129
136
|
gridInnerEl;
|
|
@@ -138,7 +145,8 @@ export class DayViewComponent {
|
|
|
138
145
|
nowHours = 0;
|
|
139
146
|
click = createClickIntent();
|
|
140
147
|
allDayClick = createClickIntent();
|
|
141
|
-
constructor(renderService) {
|
|
148
|
+
constructor(gesture, renderService) {
|
|
149
|
+
this.gesture = gesture;
|
|
142
150
|
this.renderService = renderService;
|
|
143
151
|
}
|
|
144
152
|
get badgesTpl() { return this.renderService?.eventBadgesTpl; }
|
|
@@ -158,11 +166,26 @@ export class DayViewComponent {
|
|
|
158
166
|
const wh = this.config.core.workingHours;
|
|
159
167
|
return wh ? (h < wh.start || h >= wh.end) : false;
|
|
160
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Same identity rule the week view pins (mcp-130 review of mcp-129's class):
|
|
171
|
+
* `timedEntries` is rebuilt with fresh wrappers on every previewEvent tick of a
|
|
172
|
+
* drag (the snapshot deep-copies previewEvent, so the input identity changes per
|
|
173
|
+
* dragover). Without trackBy that re-created every cal-time-event mid-drag —
|
|
174
|
+
* past dragstart Chromium no longer aborts, but the destroyed source's native
|
|
175
|
+
* `dragend` never reaches the binding, leaking the preview on Escape/outside
|
|
176
|
+
* drops. WeekView had `trackTimed` for the identical structure; DayView was the
|
|
177
|
+
* forgotten sister.
|
|
178
|
+
*/
|
|
179
|
+
trackTimed(_i, entry) {
|
|
180
|
+
return `${entry.event.id}@${entry.layout.dayCol}`;
|
|
181
|
+
}
|
|
182
|
+
trackEvent(_i, ev) { return ev.id; }
|
|
161
183
|
ngOnChanges() {
|
|
162
184
|
this.currentNow = now(this.config.core.timezone, this.config.core.clock);
|
|
163
185
|
this.timeSnapMinutes = this.config.core.granularity.day.minutes;
|
|
164
186
|
this.isToday = isSameDay(this.currentDate, this.currentNow);
|
|
165
|
-
|
|
187
|
+
// mcp-51 R1 (Review F1): split(',')[0] leckte in komma-losen Locales (ja-JP) den ganzen String.
|
|
188
|
+
this.dayName = formatWeekdayName(this.currentDate, this.config.locale.code);
|
|
166
189
|
this.dayNumber = getDayOfMonth(this.currentDate);
|
|
167
190
|
this.nowHours = getHours(this.currentNow) + getMinutes(this.currentNow) / 60;
|
|
168
191
|
const dayStart = startOfDay(this.currentDate);
|
|
@@ -190,6 +213,23 @@ export class DayViewComponent {
|
|
|
190
213
|
}));
|
|
191
214
|
}
|
|
192
215
|
ngAfterViewInit() {
|
|
216
|
+
// mcp-57 Slice E: shared FSM — single day column, snapped time, scrollport-bounded.
|
|
217
|
+
this.gesture.init({
|
|
218
|
+
hitTest: (x, y) => {
|
|
219
|
+
const inner = this.gridInnerEl?.nativeElement;
|
|
220
|
+
if (!inner)
|
|
221
|
+
return null;
|
|
222
|
+
const port = (inner.parentElement ?? inner).getBoundingClientRect();
|
|
223
|
+
if (x < port.left || x > port.right || y < port.top || y > port.bottom)
|
|
224
|
+
return null;
|
|
225
|
+
return { time: snapTimeFromMouseY(y, inner.getBoundingClientRect(), this.hourHeight, this.timeSnapMinutes) };
|
|
226
|
+
},
|
|
227
|
+
onGestureStart: (info) => this.dragStartEv.emit(info),
|
|
228
|
+
onGestureOver: (hit) => this.dragOverDateTime.emit({ date: this.currentDate, time: hit.time }),
|
|
229
|
+
onGestureLeave: () => this.hidePreviewEv.emit(),
|
|
230
|
+
onGestureDrop: (info, hit) => this.dropTimedInfo.emit({ info, date: this.currentDate, time: hit.time }),
|
|
231
|
+
onGestureEnd: () => this.dragEnd.emit(),
|
|
232
|
+
});
|
|
193
233
|
if (this.timeGridEl)
|
|
194
234
|
this.timeGridEl.nativeElement.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
|
|
195
235
|
}
|
|
@@ -259,7 +299,7 @@ export class DayViewComponent {
|
|
|
259
299
|
const id = getRecurrenceInstanceMetadata(ev)?.instanceDate;
|
|
260
300
|
return this.selectedEventId === ev.id && this.selectedInstanceDate === id;
|
|
261
301
|
}
|
|
262
|
-
static ɵfac = function DayViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DayViewComponent)(i0.ɵɵdirectiveInject(i1.EventRenderService, 8)); };
|
|
302
|
+
static ɵfac = function DayViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DayViewComponent)(i0.ɵɵdirectiveInject(i1.CalendarPointerGestureService), i0.ɵɵdirectiveInject(i1.EventRenderService, 8)); };
|
|
263
303
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DayViewComponent, selectors: [["cal-day-view"]], viewQuery: function DayViewComponent_Query(rf, ctx) { if (rf & 1) {
|
|
264
304
|
i0.ɵɵviewQuery(_c0, 5);
|
|
265
305
|
i0.ɵɵviewQuery(_c1, 5);
|
|
@@ -267,7 +307,7 @@ export class DayViewComponent {
|
|
|
267
307
|
let _t;
|
|
268
308
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timeGridEl = _t.first);
|
|
269
309
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.gridInnerEl = _t.first);
|
|
270
|
-
} }, hostAttrs: [2, "display", "contents"], inputs: { currentDate: "currentDate", events: "events", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", dayCellClick: "dayCellClick", dropTimedEvent: "dropTimedEvent", dragOverDateTime: "dragOverDateTime", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dragStartEv: "dragStartEv" }, features: [i0.ɵɵNgOnChangesFeature], decls: 15, vars:
|
|
310
|
+
} }, hostAttrs: [2, "display", "contents"], inputs: { currentDate: "currentDate", events: "events", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", dayCellClick: "dayCellClick", dropTimedEvent: "dropTimedEvent", dragOverDateTime: "dragOverDateTime", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dropTimedInfo: "dropTimedInfo", dragStartEv: "dragStartEv" }, features: [i0.ɵɵProvidersFeature([CalendarPointerGestureService]), i0.ɵɵNgOnChangesFeature], decls: 15, vars: 15, consts: [["timeGridEl", ""], ["gridInnerEl", ""], ["defaultAllDay", ""], [1, "bm-cal-day"], [1, "bm-cal-day__header"], [1, "bm-cal-day__day-name"], ["class", "bm-cal-day__allday", 4, "ngIf"], [1, "bm-cal-day__time-grid", 3, "dragover", "drop", "dragleave", "mousedown", "click", "dblclick"], [1, "bm-cal-day__time-grid-inner"], [3, "class", "top", "height", 4, "ngFor", "ngForOf"], [1, "bm-cal-day__day-col"], [3, "config", "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected", "eventClick", "selectEvent", "dragStart", "dragEnd", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "bm-cal-day__now-line", 3, "top", 4, "ngIf"], [1, "bm-cal-day__allday"], [1, "bm-cal-day__allday-label"], [1, "bm-cal-day__allday-list"], [3, "class", "background-color", "ngStyle", "title", "mousedown", "click", "dblclick", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "mousedown", "click", "dblclick", "ngStyle", "title"], [4, "ngIf", "ngIfElse"], [4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "bm-cal-day__hour-label"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "config", "event", "dayCol", "dayCount", "lane", "laneCount", "startOffset", "endOffset", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "isSelected"], [1, "bm-cal-day__now-line"], [1, "bm-cal-day__now-dot"]], template: function DayViewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
271
311
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
272
312
|
i0.ɵɵelementStart(0, "div", 3)(1, "div", 4)(2, "span", 5);
|
|
273
313
|
i0.ɵɵtext(3);
|
|
@@ -275,13 +315,13 @@ export class DayViewComponent {
|
|
|
275
315
|
i0.ɵɵelementStart(4, "span");
|
|
276
316
|
i0.ɵɵtext(5);
|
|
277
317
|
i0.ɵɵelementEnd()();
|
|
278
|
-
i0.ɵɵtemplate(6, DayViewComponent_div_6_Template, 5,
|
|
318
|
+
i0.ɵɵtemplate(6, DayViewComponent_div_6_Template, 5, 3, "div", 6);
|
|
279
319
|
i0.ɵɵelementStart(7, "div", 7, 0);
|
|
280
320
|
i0.ɵɵlistener("dragover", function DayViewComponent_Template_div_dragover_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDragOver($event)); })("drop", function DayViewComponent_Template_div_drop_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDrop($event)); })("dragleave", function DayViewComponent_Template_div_dragleave_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDragLeave($event)); })("mousedown", function DayViewComponent_Template_div_mousedown_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.click.markMouseDown()); })("click", function DayViewComponent_Template_div_click_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridClick($event)); })("dblclick", function DayViewComponent_Template_div_dblclick_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDoubleClick($event)); });
|
|
281
321
|
i0.ɵɵelementStart(9, "div", 8, 1);
|
|
282
322
|
i0.ɵɵtemplate(11, DayViewComponent_div_11_Template, 3, 7, "div", 9);
|
|
283
323
|
i0.ɵɵelement(12, "div", 10);
|
|
284
|
-
i0.ɵɵtemplate(13, DayViewComponent_cal_time_event_13_Template, 1,
|
|
324
|
+
i0.ɵɵtemplate(13, DayViewComponent_cal_time_event_13_Template, 1, 16, "cal-time-event", 11)(14, DayViewComponent_div_14_Template, 2, 2, "div", 12);
|
|
285
325
|
i0.ɵɵelementEnd()()();
|
|
286
326
|
} if (rf & 2) {
|
|
287
327
|
i0.ɵɵadvance(3);
|
|
@@ -297,9 +337,9 @@ export class DayViewComponent {
|
|
|
297
337
|
i0.ɵɵadvance(2);
|
|
298
338
|
i0.ɵɵproperty("ngForOf", ctx.hours);
|
|
299
339
|
i0.ɵɵadvance();
|
|
300
|
-
i0.ɵɵstyleProp("
|
|
340
|
+
i0.ɵɵstyleProp("inset-inline-start", ctx.timeLabelWidth, "px")("width", "calc(100% - " + ctx.timeLabelWidth + "px)");
|
|
301
341
|
i0.ɵɵadvance();
|
|
302
|
-
i0.ɵɵproperty("ngForOf", ctx.timedEntries);
|
|
342
|
+
i0.ɵɵproperty("ngForOf", ctx.timedEntries)("ngForTrackBy", ctx.trackTimed);
|
|
303
343
|
i0.ɵɵadvance();
|
|
304
344
|
i0.ɵɵproperty("ngIf", ctx.isToday);
|
|
305
345
|
} }, dependencies: [CommonModule, i2.NgForOf, i2.NgIf, i2.NgTemplateOutlet, i2.NgStyle, TimeEventComponent], encapsulation: 2 });
|
|
@@ -308,6 +348,7 @@ export class DayViewComponent {
|
|
|
308
348
|
type: Component,
|
|
309
349
|
args: [{
|
|
310
350
|
selector: 'cal-day-view',
|
|
351
|
+
providers: [CalendarPointerGestureService],
|
|
311
352
|
standalone: true,
|
|
312
353
|
host: { style: 'display: contents' },
|
|
313
354
|
imports: [CommonModule, TimeEventComponent],
|
|
@@ -323,7 +364,7 @@ export class DayViewComponent {
|
|
|
323
364
|
<div *ngIf="allDayEvents.length > 0" class="bm-cal-day__allday">
|
|
324
365
|
<div class="bm-cal-day__allday-label">{{ config.locale.allDayLabel }}</div>
|
|
325
366
|
<div class="bm-cal-day__allday-list">
|
|
326
|
-
<div *ngFor="let ev of allDayEvents"
|
|
367
|
+
<div *ngFor="let ev of allDayEvents; trackBy: trackEvent"
|
|
327
368
|
[class]="'bm-cal-day__allday-event' + (isAllDaySelected(ev) ? ' bm-cal-day__allday-event--selected' : '') + slotsClassName(ev)"
|
|
328
369
|
[style.background-color]="getColor(ev)"
|
|
329
370
|
[ngStyle]="slotsStyle(ev)"
|
|
@@ -355,9 +396,10 @@ export class DayViewComponent {
|
|
|
355
396
|
<div class="bm-cal-day__hour-label">{{ h > 0 ? formatHour(h) : '' }}</div>
|
|
356
397
|
</div>
|
|
357
398
|
|
|
358
|
-
<div class="bm-cal-day__day-col" [style.
|
|
399
|
+
<div class="bm-cal-day__day-col" [style.inset-inline-start.px]="timeLabelWidth" [style.width]="'calc(100% - ' + timeLabelWidth + 'px)'"></div>
|
|
359
400
|
|
|
360
|
-
<cal-time-event *ngFor="let entry of timedEntries"
|
|
401
|
+
<cal-time-event *ngFor="let entry of timedEntries; trackBy: trackTimed"
|
|
402
|
+
[config]="config"
|
|
361
403
|
[event]="entry.event"
|
|
362
404
|
[dayCol]="entry.layout.dayCol" [dayCount]="entry.layout.dayCount"
|
|
363
405
|
[lane]="entry.layout.lane" [laneCount]="entry.layout.laneCount"
|
|
@@ -382,7 +424,7 @@ export class DayViewComponent {
|
|
|
382
424
|
</div>
|
|
383
425
|
`,
|
|
384
426
|
}]
|
|
385
|
-
}], () => [{ type: i1.EventRenderService, decorators: [{
|
|
427
|
+
}], () => [{ type: i1.CalendarPointerGestureService }, { type: i1.EventRenderService, decorators: [{
|
|
386
428
|
type: Optional
|
|
387
429
|
}] }], { currentDate: [{
|
|
388
430
|
type: Input
|
|
@@ -412,6 +454,8 @@ export class DayViewComponent {
|
|
|
412
454
|
type: Output
|
|
413
455
|
}], dragEnd: [{
|
|
414
456
|
type: Output
|
|
457
|
+
}], dropTimedInfo: [{
|
|
458
|
+
type: Output
|
|
415
459
|
}], dragStartEv: [{
|
|
416
460
|
type: Output
|
|
417
461
|
}], timeGridEl: [{
|
|
@@ -421,5 +465,5 @@ export class DayViewComponent {
|
|
|
421
465
|
type: ViewChild,
|
|
422
466
|
args: ['gridInnerEl']
|
|
423
467
|
}] }); })();
|
|
424
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DayViewComponent, { className: "DayViewComponent", filePath: "views/day/dayview.ts", lineNumber:
|
|
468
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DayViewComponent, { className: "DayViewComponent", filePath: "views/day/dayview.ts", lineNumber: 96 }); })();
|
|
425
469
|
//# sourceMappingURL=DayView.js.map
|