@visactor/vtable-calendar 1.7.6

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 (52) hide show
  1. package/README.md +67 -0
  2. package/cjs/custom/custom-handler.d.ts +46 -0
  3. package/cjs/custom/custom-handler.js +147 -0
  4. package/cjs/custom/custom-handler.js.map +1 -0
  5. package/cjs/custom/custom-layout.d.ts +6 -0
  6. package/cjs/custom/custom-layout.js +112 -0
  7. package/cjs/custom/custom-layout.js.map +1 -0
  8. package/cjs/date-util.d.ts +10 -0
  9. package/cjs/date-util.js +99 -0
  10. package/cjs/date-util.js.map +1 -0
  11. package/cjs/event/type.d.ts +39 -0
  12. package/cjs/event/type.js +12 -0
  13. package/cjs/event/type.js.map +1 -0
  14. package/cjs/index.d.ts +3 -0
  15. package/cjs/index.js +30 -0
  16. package/cjs/index.js.map +1 -0
  17. package/cjs/month-calendar.d.ts +65 -0
  18. package/cjs/month-calendar.js +177 -0
  19. package/cjs/month-calendar.js.map +1 -0
  20. package/cjs/style.d.ts +13 -0
  21. package/cjs/style.js +54 -0
  22. package/cjs/style.js.map +1 -0
  23. package/cjs/table/table-option.d.ts +7 -0
  24. package/cjs/table/table-option.js +61 -0
  25. package/cjs/table/table-option.js.map +1 -0
  26. package/dist/vtable-calendar.js +54526 -0
  27. package/dist/vtable-calendar.min.js +1 -0
  28. package/es/custom/custom-handler.d.ts +46 -0
  29. package/es/custom/custom-handler.js +140 -0
  30. package/es/custom/custom-handler.js.map +1 -0
  31. package/es/custom/custom-layout.d.ts +6 -0
  32. package/es/custom/custom-layout.js +105 -0
  33. package/es/custom/custom-layout.js.map +1 -0
  34. package/es/date-util.d.ts +10 -0
  35. package/es/date-util.js +88 -0
  36. package/es/date-util.js.map +1 -0
  37. package/es/event/type.d.ts +39 -0
  38. package/es/event/type.js +8 -0
  39. package/es/event/type.js.map +1 -0
  40. package/es/index.d.ts +3 -0
  41. package/es/index.js +4 -0
  42. package/es/index.js.map +1 -0
  43. package/es/month-calendar.d.ts +65 -0
  44. package/es/month-calendar.js +181 -0
  45. package/es/month-calendar.js.map +1 -0
  46. package/es/style.d.ts +13 -0
  47. package/es/style.js +45 -0
  48. package/es/style.js.map +1 -0
  49. package/es/table/table-option.d.ts +7 -0
  50. package/es/table/table-option.js +58 -0
  51. package/es/table/table-option.js.map +1 -0
  52. package/package.json +87 -0
@@ -0,0 +1,46 @@
1
+ import type { Calendar } from '../month-calendar';
2
+ export interface ICustomEventOptions {
3
+ contentHeight?: number;
4
+ barHeight?: number;
5
+ fontSize?: number;
6
+ contentPadding?: number;
7
+ barCornerRadius?: number;
8
+ circleRadius?: number;
9
+ }
10
+ type ICellCustomEvent = {
11
+ keys: number[];
12
+ values: {
13
+ [key: number]: IEventData;
14
+ };
15
+ };
16
+ export interface ICustomEvent {
17
+ type: 'list' | 'bar';
18
+ id?: string;
19
+ startDate?: Date;
20
+ endDate?: Date;
21
+ date?: Date;
22
+ text: string;
23
+ color?: string;
24
+ bgColor?: string;
25
+ customInfo?: any;
26
+ }
27
+ export interface IEventData extends ICustomEvent {
28
+ col: number;
29
+ row: number;
30
+ index: number;
31
+ }
32
+ export declare class CustomEventHandler {
33
+ calendar: Calendar;
34
+ cellEvents: Map<string, ICellCustomEvent>;
35
+ events: ICustomEvent[];
36
+ customEventOptions: Required<ICustomEventOptions>;
37
+ constructor(calendar: Calendar, customEventOptions?: ICustomEventOptions);
38
+ getCellCustomEvent(col: number, row: number): ICellCustomEvent;
39
+ setCellCustomEvent(col: number, row: number, events: ICellCustomEvent): void;
40
+ addEvent(event: ICustomEvent): void;
41
+ addEvents(events: ICustomEvent[]): void;
42
+ removeEvents(ids: string[]): void;
43
+ _removeEvent(id: string): void;
44
+ updateEvents(events: ICustomEvent[]): void;
45
+ }
46
+ export {};
@@ -0,0 +1,140 @@
1
+ import { max, min } from "date-fns";
2
+
3
+ import { merge } from "@visactor/vutils";
4
+
5
+ const CUSTOM_CONTAINER_NAME = "custom-container";
6
+
7
+ export class CustomEventHandler {
8
+ constructor(calendar, customEventOptions) {
9
+ this.cellEvents = new Map, this.events = [], this.calendar = calendar, this.customEventOptions = merge({
10
+ contentHeight: 24,
11
+ barHeight: 18,
12
+ fontSize: 14,
13
+ contentPadding: 5,
14
+ barCornerRadius: 5,
15
+ circleRadius: 5
16
+ }, customEventOptions);
17
+ }
18
+ getCellCustomEvent(col, row) {
19
+ return this.cellEvents.get(`${col}-${row}`);
20
+ }
21
+ setCellCustomEvent(col, row, events) {
22
+ this.cellEvents.set(`${col}-${row}`, events);
23
+ }
24
+ addEvent(event) {
25
+ const {date: date, startDate: startDate, endDate: endDate} = event;
26
+ if (date || startDate && endDate) {
27
+ if ("list" === event.type) {
28
+ const location = this.calendar.getCellLocation(date);
29
+ if (!location) return;
30
+ const {col: col, row: row} = location, eventData = Object.assign(Object.assign({}, event), {
31
+ col: col,
32
+ row: row,
33
+ index: 0
34
+ }), cellCustomEvent = this.getCellCustomEvent(col, row);
35
+ if (!cellCustomEvent) {
36
+ const events = {
37
+ keys: [ 0 ],
38
+ values: {
39
+ 0: eventData
40
+ }
41
+ };
42
+ return this.setCellCustomEvent(col, row, events), this.calendar.table.scenegraph.updateCellContent(col, row),
43
+ void this.events.push(event);
44
+ }
45
+ const keys = cellCustomEvent.keys;
46
+ if (0 === keys.length) return cellCustomEvent.keys.push(0), cellCustomEvent.values[0] = eventData,
47
+ this.calendar.table.scenegraph.updateCellContent(col, row), void this.events.push(event);
48
+ let isInsert = !1;
49
+ for (let i = 0; i < keys[keys.length - 1]; i++) if (!cellCustomEvent.values[i]) {
50
+ eventData.index = i, keys.push(i), keys.sort(((a, b) => a - b)), cellCustomEvent.values[i] = eventData,
51
+ isInsert = !0;
52
+ break;
53
+ }
54
+ if (!isInsert) {
55
+ const index = keys[keys.length - 1] + 1;
56
+ eventData.index = index, cellCustomEvent.keys.push(index), cellCustomEvent.values[index] = eventData;
57
+ }
58
+ this.calendar.table.scenegraph.updateCellContent(col, row);
59
+ } else {
60
+ const startLocation = this.calendar.getCellLocation(max([ startDate, this.calendar.startDate ])), endLocation = this.calendar.getCellLocation(min([ endDate, this.calendar.endDate ]));
61
+ if (!startLocation || !endLocation) return;
62
+ let col = startLocation.col, row = startLocation.row, maxIndex = -1;
63
+ for (;row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
64
+ const cellCustomEvent = this.getCellCustomEvent(col, row);
65
+ if (cellCustomEvent) {
66
+ const keys = cellCustomEvent.keys, maxKey = keys[keys.length - 1];
67
+ maxKey > maxIndex && (maxIndex = maxKey);
68
+ }
69
+ col++, col > this.calendar.maxCol && (col = this.calendar.minCol, row++);
70
+ }
71
+ for (col = startLocation.col, row = startLocation.row; row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
72
+ const cellCustomEvent = this.getCellCustomEvent(col, row), eventData = Object.assign(Object.assign({}, event), {
73
+ col: col,
74
+ row: row,
75
+ index: maxIndex + 1
76
+ });
77
+ if (cellCustomEvent) {
78
+ const keys = cellCustomEvent.keys;
79
+ keys.push(maxIndex + 1), keys.sort(((a, b) => a - b)), cellCustomEvent.values[maxIndex + 1] = eventData;
80
+ } else {
81
+ const events = {
82
+ keys: [ maxIndex + 1 ],
83
+ values: {
84
+ [maxIndex + 1]: eventData
85
+ }
86
+ };
87
+ this.setCellCustomEvent(col, row, events);
88
+ }
89
+ this.calendar.table.scenegraph.updateCellContent(col, row), col++, col > this.calendar.maxCol && (col = this.calendar.minCol,
90
+ row++);
91
+ }
92
+ }
93
+ this.events.push(event);
94
+ }
95
+ }
96
+ addEvents(events) {
97
+ events.forEach((event => {
98
+ this.addEvent(event);
99
+ }));
100
+ }
101
+ removeEvents(ids) {
102
+ ids.forEach((id => {
103
+ this._removeEvent(id);
104
+ }));
105
+ const newEvents = this.events.filter((event => !event.id || !ids.includes(event.id)));
106
+ this.events.length = 0, this.cellEvents.clear(), newEvents.forEach((event => {
107
+ this.addEvent(event);
108
+ }));
109
+ }
110
+ _removeEvent(id) {
111
+ if (!id) return;
112
+ const event = this.events.find((event => event.id === id));
113
+ if (!event) return;
114
+ const {date: date, startDate: startDate, endDate: endDate} = event;
115
+ if ("list" === event.type) {
116
+ const {col: col, row: row} = this.calendar.getCellLocation(date), cellGroup = this.calendar.table.scenegraph.getCell(col, row), customGroup = cellGroup.getChildByName("custom-container");
117
+ customGroup && cellGroup.removeChild(customGroup);
118
+ } else {
119
+ const startLocation = this.calendar.getCellLocation(max([ startDate, this.calendar.startDate ])), endLocation = this.calendar.getCellLocation(min([ endDate, this.calendar.endDate ]));
120
+ let col = startLocation.col, row = startLocation.row;
121
+ for (;row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
122
+ const cellGroup = this.calendar.table.scenegraph.getCell(col, row), customGroup = cellGroup.getChildByName("custom-container");
123
+ customGroup && cellGroup.removeChild(customGroup), col++, col > this.calendar.maxCol && (col = this.calendar.minCol,
124
+ row++);
125
+ }
126
+ }
127
+ }
128
+ updateEvents(events) {
129
+ events.forEach((event => {
130
+ this._removeEvent(event.id);
131
+ const oldEvent = this.events.find((e => e.id === event.id));
132
+ merge(oldEvent, event);
133
+ }));
134
+ const oldEvents = this.events;
135
+ this.events = [], this.cellEvents.clear(), oldEvents.forEach((event => {
136
+ this.addEvent(event);
137
+ }));
138
+ }
139
+ }
140
+ //# sourceMappingURL=custom-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["custom/custom-handler.ts"],"names":[],"mappings":"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","file":"custom-handler.js","sourcesContent":["import { max, min } from 'date-fns';\nimport type { Calendar } from '../month-calendar';\nimport { merge } from '@visactor/vutils';\n\nconst CUSTOM_CONTAINER_NAME = 'custom-container';\n\nexport interface ICustomEventOptions {\n contentHeight?: number;\n barHeight?: number;\n fontSize?: number;\n contentPadding?: number;\n barCornerRadius?: number;\n circleRadius?: number;\n}\n\ntype ICellCustomEvent = {\n keys: number[];\n values: {\n [key: number]: IEventData;\n };\n};\n\nexport interface ICustomEvent {\n type: 'list' | 'bar';\n id?: string;\n\n // list: date; bar: startDate+endDate\n startDate?: Date;\n endDate?: Date;\n date?: Date;\n\n text: string;\n color?: string; // text color\n bgColor?: string; // bar background color\n // style config in global option\n // fontSize?: number;\n // fontFamily?: string;\n // fontWeight?: string;\n\n customInfo?: any; // user custom data\n}\n\nexport interface IEventData extends ICustomEvent {\n col: number;\n row: number;\n index: number; // event content index in all cells about this event\n}\n\nexport class CustomEventHandler {\n calendar: Calendar;\n cellEvents: Map<string, ICellCustomEvent> = new Map();\n events: ICustomEvent[] = [];\n customEventOptions: Required<ICustomEventOptions>;\n constructor(calendar: Calendar, customEventOptions?: ICustomEventOptions) {\n this.calendar = calendar;\n this.customEventOptions = merge(\n {\n contentHeight: 24,\n barHeight: 18,\n fontSize: 14,\n contentPadding: 5,\n barCornerRadius: 5,\n circleRadius: 5\n },\n customEventOptions\n );\n }\n\n getCellCustomEvent(col: number, row: number) {\n return this.cellEvents.get(`${col}-${row}`);\n }\n\n setCellCustomEvent(col: number, row: number, events: ICellCustomEvent) {\n this.cellEvents.set(`${col}-${row}`, events);\n }\n\n addEvent(event: ICustomEvent) {\n const { date, startDate, endDate } = event;\n if (!date && (!startDate || !endDate)) {\n return;\n }\n if (event.type === 'list') {\n const location = this.calendar.getCellLocation(date);\n if (!location) {\n return;\n }\n const { col, row } = location;\n const eventData: IEventData = { ...event, col, row, index: 0 };\n const cellCustomEvent = this.getCellCustomEvent(col, row);\n if (!cellCustomEvent) {\n const events = {\n keys: [0],\n values: {\n 0: eventData\n }\n };\n this.setCellCustomEvent(col, row, events);\n this.calendar.table.scenegraph.updateCellContent(col, row);\n this.events.push(event);\n return;\n }\n\n const keys = cellCustomEvent.keys;\n if (keys.length === 0) {\n cellCustomEvent.keys.push(0);\n cellCustomEvent.values[0] = eventData;\n this.calendar.table.scenegraph.updateCellContent(col, row);\n this.events.push(event);\n return;\n }\n\n // find single location from index 0\n let isInsert = false;\n for (let i = 0; i < keys[keys.length - 1]; i++) {\n if (!cellCustomEvent.values[i]) {\n eventData.index = i;\n // insert index into keys\n keys.push(i);\n keys.sort((a, b) => a - b);\n cellCustomEvent.values[i] = eventData;\n isInsert = true;\n break;\n }\n }\n\n if (!isInsert) {\n const index = keys[keys.length - 1] + 1;\n eventData.index = index;\n cellCustomEvent.keys.push(index);\n cellCustomEvent.values[index] = eventData;\n }\n\n this.calendar.table.scenegraph.updateCellContent(col, row);\n } else {\n // bar\n const startLocation = this.calendar.getCellLocation(max([startDate, this.calendar.startDate]));\n const endLocation = this.calendar.getCellLocation(min([endDate, this.calendar.endDate]));\n if (!startLocation || !endLocation) {\n return;\n }\n\n // get index of this evemt\n let col = startLocation.col;\n let row = startLocation.row;\n let maxIndex = -1;\n while (row < endLocation.row || (col <= endLocation.col && row === endLocation.row)) {\n const cellCustomEvent = this.getCellCustomEvent(col, row) as ICellCustomEvent;\n if (cellCustomEvent) {\n // get max index in this cellCustomEvent\n const keys = cellCustomEvent.keys;\n const maxKey = keys[keys.length - 1];\n if (maxKey > maxIndex) {\n maxIndex = maxKey;\n }\n }\n\n col++;\n if (col > this.calendar.maxCol) {\n col = this.calendar.minCol;\n row++;\n }\n }\n\n // insert into cellCustomEvent\n col = startLocation.col;\n row = startLocation.row;\n while (row < endLocation.row || (col <= endLocation.col && row === endLocation.row)) {\n const cellCustomEvent = this.getCellCustomEvent(col, row) as ICellCustomEvent;\n const eventData: IEventData = { ...event, col, row, index: maxIndex + 1 };\n if (!cellCustomEvent) {\n const events = {\n keys: [maxIndex + 1],\n values: {\n [maxIndex + 1]: eventData\n }\n };\n this.setCellCustomEvent(col, row, events);\n } else {\n const keys = cellCustomEvent.keys;\n keys.push(maxIndex + 1);\n keys.sort((a, b) => a - b);\n cellCustomEvent.values[maxIndex + 1] = eventData;\n }\n\n this.calendar.table.scenegraph.updateCellContent(col, row);\n\n col++;\n if (col > this.calendar.maxCol) {\n col = this.calendar.minCol;\n row++;\n }\n }\n }\n\n this.events.push(event);\n }\n\n addEvents(events: ICustomEvent[]) {\n events.forEach(event => {\n this.addEvent(event);\n });\n }\n\n removeEvents(ids: string[]) {\n ids.forEach(id => {\n this._removeEvent(id);\n });\n\n // readd custom event\n const newEvents = this.events.filter(event => {\n if (event.id && ids.includes(event.id)) {\n return false;\n }\n return true;\n });\n\n this.events.length = 0;\n this.cellEvents.clear();\n\n newEvents.forEach(event => {\n this.addEvent(event);\n });\n }\n\n _removeEvent(id: string) {\n if (!id) {\n return;\n }\n const event = this.events.find(event => {\n if (event.id === id) {\n return true;\n }\n return false;\n });\n\n if (!event) {\n return;\n }\n\n // clear custom graphic in this event\n const { date, startDate, endDate } = event;\n if (event.type === 'list') {\n const { col, row } = this.calendar.getCellLocation(date);\n const cellGroup = this.calendar.table.scenegraph.getCell(col, row);\n const customGroup = cellGroup.getChildByName(CUSTOM_CONTAINER_NAME);\n customGroup && cellGroup.removeChild(customGroup);\n } else {\n // bar\n const startLocation = this.calendar.getCellLocation(max([startDate, this.calendar.startDate]));\n const endLocation = this.calendar.getCellLocation(min([endDate, this.calendar.endDate]));\n\n let col = startLocation.col;\n let row = startLocation.row;\n while (row < endLocation.row || (col <= endLocation.col && row === endLocation.row)) {\n const cellGroup = this.calendar.table.scenegraph.getCell(col, row);\n const customGroup = cellGroup.getChildByName(CUSTOM_CONTAINER_NAME);\n customGroup && cellGroup.removeChild(customGroup);\n\n col++;\n if (col > this.calendar.maxCol) {\n col = this.calendar.minCol;\n row++;\n }\n }\n }\n }\n\n updateEvents(events: ICustomEvent[]) {\n events.forEach(event => {\n this._removeEvent(event.id);\n // replace event in this.events\n const oldEvent = this.events.find(e => {\n if (e.id === event.id) {\n return true;\n }\n return false;\n });\n // const newEvent = merge(oldEvent, event);\n // this.events.splice(this.events.indexOf(oldEvent), 1, newEvent);\n merge(oldEvent, event);\n });\n\n // readd custom event\n const oldEvents = this.events;\n this.events = [];\n this.cellEvents.clear();\n\n oldEvents.forEach(event => {\n this.addEvent(event);\n });\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { CustomRenderFunctionArg } from '@visactor/vtable/es/ts-types';
2
+ import { Group } from '@visactor/vtable/es/vrender';
3
+ export declare function calendarCustomLayout(args: CustomRenderFunctionArg): {
4
+ rootContainer: Group;
5
+ renderDefault: boolean;
6
+ };
@@ -0,0 +1,105 @@
1
+ import { Group, Text, Rect, Circle } from "@visactor/vtable/es/vrender";
2
+
3
+ import { differenceInDays, startOfDay } from "date-fns";
4
+
5
+ export function calendarCustomLayout(args) {
6
+ const {table: table, row: row, col: col, rect: rect} = args, calendar = table.options._calendar, {height: height, width: width} = null != rect ? rect : table.getCellRect(col, row), cellDate = calendar.getCellDate(col, row), customEvents = calendar.customHandler.getCellCustomEvent(col, row), {contentHeight: contentHeight, barHeight: barHeight, fontSize: fontSize, contentPadding: contentPadding, barCornerRadius: barCornerRadius, circleRadius: circleRadius} = calendar.customHandler.customEventOptions;
7
+ if (!customEvents) return;
8
+ const textHeight = table.theme.bodyStyle.fontSize + 10, container = new Group({
9
+ x: 0,
10
+ y: textHeight,
11
+ height: height - textHeight,
12
+ width: width
13
+ }), {keys: keys, values: values} = customEvents, lastKey = keys[keys.length - 1];
14
+ let y = 0;
15
+ for (let i = 0; i <= lastKey; i++) {
16
+ const event = values[i];
17
+ if (event) if ("list" === event.type) {
18
+ const listGroup = new Group({
19
+ x: 0,
20
+ y: y,
21
+ width: width,
22
+ height: contentHeight,
23
+ fill: !1,
24
+ stroke: !1,
25
+ clip: !0,
26
+ cursor: "pointer"
27
+ });
28
+ container.add(listGroup), listGroup._role = "calendar-custom-event", listGroup._customEvent = event;
29
+ const circle = new Circle({
30
+ radius: circleRadius,
31
+ fill: event.color,
32
+ x: contentPadding + circleRadius,
33
+ y: contentHeight / 2,
34
+ pickable: !1
35
+ });
36
+ listGroup.add(circle);
37
+ const text = new Text({
38
+ x: contentPadding + 2 * circleRadius + contentPadding,
39
+ y: contentHeight / 2,
40
+ text: event.text,
41
+ fontSize: fontSize,
42
+ fill: event.color,
43
+ textAlign: "left",
44
+ textBaseline: "middle",
45
+ pickable: !1
46
+ });
47
+ listGroup.add(text);
48
+ } else {
49
+ const {startDate: startDate, endDate: endDate} = event, barGroup = new Group({
50
+ x: 0,
51
+ y: y,
52
+ width: width,
53
+ height: contentHeight,
54
+ fill: !1,
55
+ stroke: !1,
56
+ clip: !0,
57
+ cursor: "pointer"
58
+ });
59
+ container.add(barGroup), barGroup._role = "calendar-custom-event", barGroup._customEvent = event;
60
+ const rect = new Rect({
61
+ x: 0,
62
+ y: (contentHeight - barHeight) / 2,
63
+ width: width,
64
+ height: barHeight,
65
+ fill: event.bgColor,
66
+ cornerRadius: getRectCornerRadius(startDate, endDate, cellDate, barCornerRadius),
67
+ pickable: !1
68
+ });
69
+ barGroup.add(rect);
70
+ const days = differenceInDays(startOfDay(startDate), startOfDay(cellDate)), text = new Text({
71
+ x: contentPadding,
72
+ y: contentHeight / 2,
73
+ dx: days * width,
74
+ text: event.text,
75
+ fontSize: fontSize,
76
+ fill: event.color,
77
+ textAlign: "left",
78
+ textBaseline: "middle",
79
+ pickable: !1
80
+ });
81
+ barGroup.add(text);
82
+ } else {
83
+ const emptyGroup = new Group({
84
+ x: 0,
85
+ y: y,
86
+ width: width,
87
+ height: contentHeight,
88
+ fill: !1,
89
+ stroke: !1,
90
+ clip: !0
91
+ });
92
+ container.add(emptyGroup);
93
+ }
94
+ y += contentHeight;
95
+ }
96
+ return {
97
+ rootContainer: container,
98
+ renderDefault: !0
99
+ };
100
+ }
101
+
102
+ function getRectCornerRadius(startDate, endDate, cellDate, cornerRadius) {
103
+ return startDate.getDate() === endDate.getDate() ? cornerRadius : startDate.getDate() === cellDate.getDate() ? [ cornerRadius, 0, 0, cornerRadius ] : endDate.getDate() === cellDate.getDate() ? [ 0, cornerRadius, cornerRadius, 0 ] : 0;
104
+ }
105
+ //# sourceMappingURL=custom-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["custom/custom-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAI,KAAa,CAAC,OAAO,CAAC,SAAqB,CAAC;IAE9D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEzE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,GACzF,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,UAAU,GAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAmB,GAAG,EAAE,CAAC;IAEnE,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC;QAC1B,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,UAAU;QACb,MAAM,EAAE,MAAM,GAAG,UAAU;QAC3B,KAAK;KAIN,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;YAEV,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC;gBAC3B,CAAC,EAAE,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI;aACX,CAAQ,CAAC;YACV,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC3B;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC;gBAC1B,CAAC,EAAE,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,SAAS;aAClB,CAAQ,CAAC;YACV,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,SAAS,CAAC,KAAK,GAAG,uBAAuB,CAAC;YAC1C,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC;YAE/B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;gBACxB,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,CAAC,EAAE,cAAc,GAAG,YAAY;gBAChC,CAAC,EAAE,aAAa,GAAG,CAAC;gBACpB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEtB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;gBACpB,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,CAAC,GAAG,cAAc;gBACrD,CAAC,EAAE,aAAa,GAAG,CAAC;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ;gBACR,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,QAAQ;gBACtB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrB;aAAM;YACL,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;YAErC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC;gBACzB,CAAC,EAAE,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,SAAS;aAClB,CAAQ,CAAC;YACV,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,CAAC,KAAK,GAAG,uBAAuB,CAAC;YACzC,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;YAE9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;gBACpB,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC;gBAClC,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,KAAK,CAAC,OAAO;gBACnB,YAAY,EAAE,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC;gBAChF,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnB,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;gBACpB,CAAC,EAAE,cAAc;gBACjB,CAAC,EAAE,aAAa,GAAG,CAAC;gBACpB,EAAE,EAAE,IAAI,GAAG,KAAK;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ;gBACR,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,QAAQ;gBACtB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACpB;QAED,CAAC,IAAI,aAAa,CAAC;KACpB;IAED,OAAO;QACL,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAe,EAAE,OAAa,EAAE,QAAc,EAAE,YAAoB;IAC/F,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,EAAE;QAC7C,OAAO,YAAY,CAAC;KACrB;SAAM,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,EAAE;QACrD,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;KAC3C;SAAM,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;KAC3C;IACD,OAAO,CAAC,CAAC;AACX,CAAC","file":"custom-layout.js","sourcesContent":["import type { CustomRenderFunctionArg } from '@visactor/vtable/es/ts-types';\nimport { Group, Text, Rect, Circle } from '@visactor/vtable/es/vrender';\nimport type { Calendar } from '../month-calendar';\nimport { differenceInDays, startOfDay } from 'date-fns';\n\nexport function calendarCustomLayout(args: CustomRenderFunctionArg) {\n const { table, row, col, rect } = args;\n const calendar = (table as any).options._calendar as Calendar;\n // const record = table.getRecordByCell(col, row);\n const { height, width } = rect ?? table.getCellRect(col, row);\n\n const cellDate = calendar.getCellDate(col, row);\n const customEvents = calendar.customHandler.getCellCustomEvent(col, row);\n\n const { contentHeight, barHeight, fontSize, contentPadding, barCornerRadius, circleRadius } =\n calendar.customHandler.customEventOptions;\n\n if (!customEvents) {\n return undefined;\n }\n\n const textHeight = (table.theme.bodyStyle.fontSize as number) + 10; // padding\n\n const container = new Group({\n x: 0,\n y: textHeight,\n height: height - textHeight, // text height\n width\n // display: 'flex',\n // flexDirection: 'column',\n // flexWrap: 'nowrap'\n });\n\n const { keys, values } = customEvents;\n const lastKey = keys[keys.length - 1];\n\n let y = 0;\n for (let i = 0; i <= lastKey; i++) {\n const event = values[i];\n if (!event) {\n // add empty rect for ocupy space\n const emptyGroup = new Group({\n x: 0,\n y,\n width: width,\n height: contentHeight,\n fill: false,\n stroke: false,\n clip: true\n }) as any;\n container.add(emptyGroup);\n } else if (event.type === 'list') {\n const listGroup = new Group({\n x: 0,\n y,\n width: width,\n height: contentHeight,\n fill: false,\n stroke: false,\n clip: true,\n cursor: 'pointer'\n }) as any;\n container.add(listGroup);\n listGroup._role = 'calendar-custom-event';\n listGroup._customEvent = event;\n\n const circle = new Circle({\n radius: circleRadius,\n fill: event.color,\n x: contentPadding + circleRadius,\n y: contentHeight / 2,\n pickable: false\n });\n listGroup.add(circle);\n\n const text = new Text({\n x: contentPadding + circleRadius * 2 + contentPadding,\n y: contentHeight / 2,\n text: event.text,\n fontSize,\n fill: event.color,\n textAlign: 'left',\n textBaseline: 'middle',\n pickable: false\n });\n listGroup.add(text);\n } else {\n const { startDate, endDate } = event;\n // bar\n const barGroup = new Group({\n x: 0,\n y,\n width: width,\n height: contentHeight,\n fill: false,\n stroke: false,\n clip: true,\n cursor: 'pointer'\n }) as any;\n container.add(barGroup);\n barGroup._role = 'calendar-custom-event';\n barGroup._customEvent = event;\n\n const rect = new Rect({\n x: 0,\n y: (contentHeight - barHeight) / 2,\n width: width,\n height: barHeight,\n fill: event.bgColor,\n cornerRadius: getRectCornerRadius(startDate, endDate, cellDate, barCornerRadius),\n pickable: false\n });\n barGroup.add(rect);\n\n const days = differenceInDays(startOfDay(startDate), startOfDay(cellDate));\n const text = new Text({\n x: contentPadding,\n y: contentHeight / 2,\n dx: days * width,\n text: event.text,\n fontSize,\n fill: event.color,\n textAlign: 'left',\n textBaseline: 'middle',\n pickable: false\n });\n barGroup.add(text);\n }\n\n y += contentHeight;\n }\n\n return {\n rootContainer: container,\n renderDefault: true\n };\n}\n\nfunction getRectCornerRadius(startDate: Date, endDate: Date, cellDate: Date, cornerRadius: number) {\n if (startDate.getDate() === endDate.getDate()) {\n return cornerRadius;\n } else if (startDate.getDate() === cellDate.getDate()) {\n return [cornerRadius, 0, 0, cornerRadius];\n } else if (endDate.getDate() === cellDate.getDate()) {\n return [0, cornerRadius, cornerRadius, 0];\n }\n return 0;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export declare function getStartAndEndDate(today: Date, daltaDays: number): {
2
+ startDate: Date;
3
+ endDate: Date;
4
+ };
5
+ export declare const defaultDayTitles: string[];
6
+ export type DateRecordKeys = 'year' | 'month' | 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';
7
+ export type DateRecord = Record<DateRecordKeys, number>;
8
+ export declare function getRecords(startDate: Date, endDate: Date): DateRecord[];
9
+ export declare function getMonthString(monthIndex: number): string;
10
+ export declare function getWeekdayString(weekdayIndex: number): string;
@@ -0,0 +1,88 @@
1
+ import { addDays, getDaysInMonth, isAfter, lastDayOfMonth } from "date-fns";
2
+
3
+ export function getStartAndEndDate(today, daltaDays) {
4
+ const startDate = addDays(today, -daltaDays);
5
+ startDate.setDate(1);
6
+ return {
7
+ startDate: startDate,
8
+ endDate: lastDayOfMonth(addDays(today, daltaDays))
9
+ };
10
+ }
11
+
12
+ export const defaultDayTitles = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];
13
+
14
+ export function getRecords(startDate, endDate) {
15
+ const records = [];
16
+ if (isAfter(startDate, endDate)) {
17
+ const temp = startDate;
18
+ startDate = endDate, endDate = temp;
19
+ }
20
+ const startYear = startDate.getFullYear(), startMonth = startDate.getMonth(), endYear = endDate.getFullYear(), endMonth = endDate.getMonth();
21
+ let year = startYear, month = startMonth;
22
+ for (;year !== endYear || month <= endMonth; ) {
23
+ const monthStartDate = new Date(year, month, 1), daysInMonth = getDaysInMonth(monthStartDate);
24
+ let record, week = monthStartDate.getDay();
25
+ 0 === records.length ? 0 === week ? (record = {
26
+ year: year,
27
+ month: month
28
+ }, records.push(record)) : 0 === month ? (record = {
29
+ year: year - 1,
30
+ month: 11
31
+ }, records.push(record)) : (record = {
32
+ year: year,
33
+ month: month - 1
34
+ }, records.push(record)) : 0 === week ? (record = {
35
+ year: year,
36
+ month: month
37
+ }, records.push(record)) : record = records[records.length - 1];
38
+ for (let day = 1; day <= daysInMonth; day++) 7 === week && (week = 0, record = {
39
+ year: year,
40
+ month: month
41
+ }, records.push(record)), setDate(record, week, day), week += 1;
42
+ month += 1, 12 === month && (month = 0, year += 1);
43
+ }
44
+ return records;
45
+ }
46
+
47
+ function setDate(record, day, date) {
48
+ switch (day) {
49
+ case 0:
50
+ record.Sun = date;
51
+ break;
52
+
53
+ case 1:
54
+ record.Mon = date;
55
+ break;
56
+
57
+ case 2:
58
+ record.Tue = date;
59
+ break;
60
+
61
+ case 3:
62
+ record.Wed = date;
63
+ break;
64
+
65
+ case 4:
66
+ record.Thu = date;
67
+ break;
68
+
69
+ case 5:
70
+ record.Fri = date;
71
+ break;
72
+
73
+ case 6:
74
+ record.Sat = date;
75
+ }
76
+ }
77
+
78
+ const monthStrings = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
79
+
80
+ export function getMonthString(monthIndex) {
81
+ return monthStrings[monthIndex % monthStrings.length];
82
+ }
83
+
84
+ const weekdayStrings = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];
85
+
86
+ export function getWeekdayString(weekdayIndex) {
87
+ return weekdayStrings[weekdayIndex % weekdayStrings.length];
88
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["date-util.ts"],"names":[],"mappings":"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","file":"date-util.js","sourcesContent":["import { addDays, getDaysInMonth, isAfter, lastDayOfMonth } from 'date-fns';\n\nexport function getStartAndEndDate(today: Date, daltaDays: number) {\n const startDate = addDays(today, -daltaDays);\n startDate.setDate(1);\n const endDate = lastDayOfMonth(addDays(today, daltaDays));\n return { startDate, endDate };\n}\n\n// export const defaultDayTitles = ['year', 'month', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nexport const defaultDayTitles = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nexport type DateRecordKeys = 'year' | 'month' | 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';\nexport type DateRecord = Record<DateRecordKeys, number>;\n\nexport function getRecords(startDate: Date, endDate: Date) {\n const records: DateRecord[] = [];\n\n if (isAfter(startDate, endDate)) {\n const temp = startDate;\n startDate = endDate;\n endDate = temp;\n }\n\n const startYear = startDate.getFullYear();\n const startMonth = startDate.getMonth();\n\n const endYear = endDate.getFullYear();\n const endMonth = endDate.getMonth();\n\n let year = startYear;\n let month = startMonth;\n while (year !== endYear || month <= endMonth) {\n const monthStartDate = new Date(year, month, 1);\n const daysInMonth = getDaysInMonth(monthStartDate);\n let week = monthStartDate.getDay();\n let record: DateRecord;\n if (records.length === 0) {\n if (week === 0) {\n record = { year, month } as DateRecord;\n records.push(record);\n } else if (month === 0) {\n record = { year: year - 1, month: 11 } as DateRecord;\n records.push(record);\n } else {\n record = { year, month: month - 1 } as DateRecord;\n records.push(record);\n }\n } else if (week === 0) {\n record = { year, month } as DateRecord;\n records.push(record);\n } else {\n record = records[records.length - 1];\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n if (week === 7) {\n week = 0;\n record = { year, month } as DateRecord;\n records.push(record);\n }\n setDate(record, week, day);\n week += 1;\n }\n\n month += 1;\n if (month === 12) {\n month = 0;\n year += 1;\n }\n }\n\n return records;\n}\n\nfunction setDate(record: DateRecord, day: number, date: number) {\n switch (day) {\n case 0:\n record.Sun = date;\n break;\n case 1:\n record.Mon = date;\n break;\n case 2:\n record.Tue = date;\n break;\n case 3:\n record.Wed = date;\n break;\n case 4:\n record.Thu = date;\n break;\n case 5:\n record.Fri = date;\n break;\n case 6:\n record.Sat = date;\n break;\n }\n}\n\nconst monthStrings = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nexport function getMonthString(monthIndex: number) {\n return monthStrings[monthIndex % monthStrings.length];\n}\n\nconst weekdayStrings = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nexport function getWeekdayString(weekdayIndex: number) {\n return weekdayStrings[weekdayIndex % weekdayStrings.length];\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import type { MousePointerCellEvent } from '@visactor/vtable';
2
+ import type { IEventData } from '../custom/custom-handler';
3
+ import type { SelectedCellEvent } from '@visactor/vtable/src/ts-types';
4
+ export interface CalendarEvents {
5
+ CALENDAR_DATE_CLICK: 'calendar_date_click';
6
+ SELECTED_DATE: 'selected_date';
7
+ SELECTED_DATE_CLEAR: 'selected_date_clear';
8
+ DRAG_SELECT_DATE_END: 'drag_select_date_end';
9
+ CALENDAR_CUSTOM_EVENT_CLICK: 'calendar_custom_event_click';
10
+ }
11
+ export declare const CALENDAR_EVENT_TYPE: CalendarEvents;
12
+ export interface CalendarEventHandlersEventArgumentMap {
13
+ calendar_date_click: {
14
+ date: Date;
15
+ tableEvent: MousePointerCellEvent;
16
+ };
17
+ selected_date: {
18
+ date: Date;
19
+ tableEvent: SelectedCellEvent;
20
+ };
21
+ selected_date_clear: void;
22
+ drag_select_date_end: {
23
+ dates: Date[];
24
+ tableEvent: MousePointerCellEvent;
25
+ };
26
+ calendar_custom_event_click: {
27
+ date: Date;
28
+ tableEvent: MousePointerCellEvent;
29
+ customEvent: IEventData;
30
+ };
31
+ }
32
+ export interface CalendarEventHandlersReturnMap {
33
+ calendar_date_click: void;
34
+ selected_date: void;
35
+ selected_date_clear: void;
36
+ drag_select_date_end: void;
37
+ calendar_custom_event_click: void;
38
+ }
39
+ export type CalendarEventListener<TYPE extends keyof CalendarEventHandlersEventArgumentMap> = (args: CalendarEventHandlersEventArgumentMap[TYPE]) => CalendarEventHandlersReturnMap[TYPE];
@@ -0,0 +1,8 @@
1
+ export const CALENDAR_EVENT_TYPE = {
2
+ CALENDAR_DATE_CLICK: "calendar_date_click",
3
+ SELECTED_DATE: "selected_date",
4
+ SELECTED_DATE_CLEAR: "selected_date_clear",
5
+ DRAG_SELECT_DATE_END: "drag_select_date_end",
6
+ CALENDAR_CUSTOM_EVENT_CLICK: "calendar_custom_event_click"
7
+ };
8
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["event/type.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,2BAA2B,EAAE,6BAA6B;CACzC,CAAC","file":"type.js","sourcesContent":["import type { MousePointerCellEvent } from '@visactor/vtable';\nimport type { IEventData } from '../custom/custom-handler';\nimport type { SelectedCellEvent } from '@visactor/vtable/src/ts-types';\n\nexport interface CalendarEvents {\n /**\n * 日期点击事件\n */\n CALENDAR_DATE_CLICK: 'calendar_date_click';\n /**\n * 日期选中状态改变事件\n */\n SELECTED_DATE: 'selected_date';\n /**\n * 日期选中状态改变事件\n */\n SELECTED_DATE_CLEAR: 'selected_date_clear';\n /**\n * 拖拽框选日期鼠标松开事件\n */\n DRAG_SELECT_DATE_END: 'drag_select_date_end';\n /**\n * 自定义事件点击事件\n */\n CALENDAR_CUSTOM_EVENT_CLICK: 'calendar_custom_event_click';\n}\n\n/**\n * Calendar event types\n */\nexport const CALENDAR_EVENT_TYPE: CalendarEvents = {\n CALENDAR_DATE_CLICK: 'calendar_date_click',\n SELECTED_DATE: 'selected_date',\n SELECTED_DATE_CLEAR: 'selected_date_clear',\n DRAG_SELECT_DATE_END: 'drag_select_date_end',\n CALENDAR_CUSTOM_EVENT_CLICK: 'calendar_custom_event_click'\n} as CalendarEvents;\n\nexport interface CalendarEventHandlersEventArgumentMap {\n calendar_date_click: { date: Date; tableEvent: MousePointerCellEvent };\n selected_date: { date: Date; tableEvent: SelectedCellEvent };\n selected_date_clear: void;\n drag_select_date_end: { dates: Date[]; tableEvent: MousePointerCellEvent };\n calendar_custom_event_click: { date: Date; tableEvent: MousePointerCellEvent; customEvent: IEventData };\n}\n\nexport interface CalendarEventHandlersReturnMap {\n calendar_date_click: void;\n selected_date: void;\n selected_date_clear: void;\n drag_select_date_end: void;\n calendar_custom_event_click: void;\n}\n\nexport type CalendarEventListener<TYPE extends keyof CalendarEventHandlersEventArgumentMap> = (\n args: CalendarEventHandlersEventArgumentMap[TYPE]\n) => CalendarEventHandlersReturnMap[TYPE]; //AnyFunction;\n"]}
package/es/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './month-calendar';
2
+ export type { ICustomEvent } from './custom/custom-handler';
3
+ export { CALENDAR_EVENT_TYPE } from './event/type';
package/es/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./month-calendar";
2
+
3
+ export { CALENDAR_EVENT_TYPE } from "./event/type";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","file":"index.js","sourcesContent":["export * from './month-calendar';\nexport type { ICustomEvent } from './custom/custom-handler';\nexport { CALENDAR_EVENT_TYPE } from './event/type';\n"]}
@@ -0,0 +1,65 @@
1
+ import { ListTable, EventTarget } from '@visactor/vtable';
2
+ import type { DateRecord } from './date-util';
3
+ import type { TYPES, ListTableConstructorOptions } from '@visactor/vtable';
4
+ import type { ICustomEvent, ICustomEventOptions, IEventData } from './custom/custom-handler';
5
+ import { CustomEventHandler } from './custom/custom-handler';
6
+ import type { CalendarEventHandlersEventArgumentMap, CalendarEventHandlersReturnMap, CalendarEventListener } from './event/type';
7
+ import type { EventListenerId } from '@visactor/vtable/src/ts-types';
8
+ export interface CalendarConstructorOptions {
9
+ startDate?: Date;
10
+ endDate?: Date;
11
+ currentDate?: Date;
12
+ rangeDays?: number;
13
+ dayTitles?: [string, string, string, string, string, string, string];
14
+ tableOptions?: ListTableConstructorOptions;
15
+ customEvents?: ICustomEvent[];
16
+ customEventOptions?: ICustomEventOptions;
17
+ }
18
+ export declare class Calendar extends EventTarget {
19
+ container: HTMLElement;
20
+ options: CalendarConstructorOptions;
21
+ table: ListTable;
22
+ startDate: Date;
23
+ endDate: Date;
24
+ currentDate: Date;
25
+ rangeDays: number;
26
+ tableStartDate: Date;
27
+ records: DateRecord[];
28
+ currentMonthCellRanges: {
29
+ range: TYPES.CellRange;
30
+ }[];
31
+ currentMonth: number;
32
+ currentYear: number;
33
+ titleClickHandler: () => void;
34
+ maxCol: number;
35
+ minCol: number;
36
+ customHandler: CustomEventHandler;
37
+ constructor(container: HTMLElement, options?: CalendarConstructorOptions);
38
+ _createTable(): void;
39
+ getYearAndMonth(): any;
40
+ jumpToDate(date: Date, animation?: boolean | TYPES.ITableAnimationOption): void;
41
+ jumpToCurrentMonth(animation?: boolean | TYPES.ITableAnimationOption): void;
42
+ _updateMonthCustomStyle(year: number, month: number): void;
43
+ fireListeners<TYPE extends keyof CalendarEventHandlersEventArgumentMap>(type: TYPE, event: CalendarEventHandlersEventArgumentMap[TYPE]): CalendarEventHandlersReturnMap[TYPE][];
44
+ on<TYPE extends keyof CalendarEventHandlersEventArgumentMap>(type: TYPE, listener: CalendarEventListener<TYPE>): EventListenerId;
45
+ _bindEvent(): void;
46
+ release(): void;
47
+ getCellLocation(date: Date): {
48
+ row: number;
49
+ col: number;
50
+ };
51
+ getCellDate(col: number, row: number): Date;
52
+ get selectedDate(): {
53
+ date: Date;
54
+ col: number;
55
+ row: number;
56
+ }[];
57
+ addCustomEvent(event: ICustomEvent): void;
58
+ removeCustomEvent(id: string): void;
59
+ updateCustomEvent(event: ICustomEvent): void;
60
+ addCustomEvents(events: ICustomEvent[]): void;
61
+ removeCustomEvents(ids: string[]): void;
62
+ updateCustomEvents(events: ICustomEvent[]): void;
63
+ getCellCustomEventByDate(date: Date): IEventData[];
64
+ getCellCustomEventByLocation(col: number, row: number): IEventData[];
65
+ }