@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
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ <div align="center">
2
+ <a href="" target="_blank">
3
+ <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/500_200.svg"/>
4
+ </a>
5
+ </div>
6
+
7
+ <div align="center">
8
+ <h1>VTable-Calendar</h1>
9
+ </div>
10
+
11
+ <div align="center">
12
+
13
+ vtable-calendar is a calendar component built on VTable. It provides a calendar component that can be used to display and custom with calendar data.
14
+
15
+ [![npm Version](https://img.shields.io/npm/v/@visactor/vtable.svg)](https://www.npmjs.com/package/@visactor/react-vtable)
16
+ [![npm Download](https://img.shields.io/npm/dm/@visactor/vtable.svg)](https://www.npmjs.com/package/@visactor/react-vvtable)
17
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/visactor/vtable/blob/main/LICENSE)
18
+
19
+ </div>
20
+
21
+ # Usage
22
+
23
+ ## Installation
24
+
25
+ [npm package](https://www.npmjs.com/package/@visactor/vtable-calendar)
26
+
27
+ ```bash
28
+ // npm
29
+ npm install @visactor/vtable-calendar
30
+
31
+ // yarn
32
+ yarn add @visactor/vtable-calendar
33
+ ```
34
+
35
+ ## Quick Start
36
+
37
+ ```jsx
38
+ import { Calendar } from '@visactor/vtable-calendar';
39
+
40
+ const calendar = new Calendar(document.getElementById(CONTAINER_ID));
41
+ ```
42
+
43
+ ##
44
+
45
+ [More demos and detailed tutorials](https://visactor.io/vtable)
46
+
47
+ # Related Links
48
+
49
+ - [Official website](https://visactor.io/vtable)
50
+
51
+ # Ecosystem
52
+
53
+ | Project | Description |
54
+ | ----------------------------------------------------------- | -------------------------------------------------------------------------------------- |
55
+ | [AI-generated Components](https://visactor.io/ai-vtable) | AI-generated table component. |
56
+
57
+ # Contribution
58
+
59
+ If you would like to contribute, please read the [Code of Conduct ](./CODE_OF_CONDUCT.md) 和 [ Guide](./CONTRIBUTING.zh-CN.md) first。
60
+
61
+ Small streams converge to make great rivers and seas!
62
+
63
+ <a href="https://github.com/visactor/vtable/graphs/contributors"><img src="https://contrib.rocks/image?repo=visactor/vtable" /></a>
64
+
65
+ # License
66
+
67
+ [MIT License](./LICENSE)
@@ -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,147 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.CustomEventHandler = void 0;
6
+
7
+ const date_fns_1 = require("date-fns"), vutils_1 = require("@visactor/vutils"), CUSTOM_CONTAINER_NAME = "custom-container";
8
+
9
+ class CustomEventHandler {
10
+ constructor(calendar, customEventOptions) {
11
+ this.cellEvents = new Map, this.events = [], this.calendar = calendar, this.customEventOptions = (0,
12
+ vutils_1.merge)({
13
+ contentHeight: 24,
14
+ barHeight: 18,
15
+ fontSize: 14,
16
+ contentPadding: 5,
17
+ barCornerRadius: 5,
18
+ circleRadius: 5
19
+ }, customEventOptions);
20
+ }
21
+ getCellCustomEvent(col, row) {
22
+ return this.cellEvents.get(`${col}-${row}`);
23
+ }
24
+ setCellCustomEvent(col, row, events) {
25
+ this.cellEvents.set(`${col}-${row}`, events);
26
+ }
27
+ addEvent(event) {
28
+ const {date: date, startDate: startDate, endDate: endDate} = event;
29
+ if (date || startDate && endDate) {
30
+ if ("list" === event.type) {
31
+ const location = this.calendar.getCellLocation(date);
32
+ if (!location) return;
33
+ const {col: col, row: row} = location, eventData = Object.assign(Object.assign({}, event), {
34
+ col: col,
35
+ row: row,
36
+ index: 0
37
+ }), cellCustomEvent = this.getCellCustomEvent(col, row);
38
+ if (!cellCustomEvent) {
39
+ const events = {
40
+ keys: [ 0 ],
41
+ values: {
42
+ 0: eventData
43
+ }
44
+ };
45
+ return this.setCellCustomEvent(col, row, events), this.calendar.table.scenegraph.updateCellContent(col, row),
46
+ void this.events.push(event);
47
+ }
48
+ const keys = cellCustomEvent.keys;
49
+ if (0 === keys.length) return cellCustomEvent.keys.push(0), cellCustomEvent.values[0] = eventData,
50
+ this.calendar.table.scenegraph.updateCellContent(col, row), void this.events.push(event);
51
+ let isInsert = !1;
52
+ for (let i = 0; i < keys[keys.length - 1]; i++) if (!cellCustomEvent.values[i]) {
53
+ eventData.index = i, keys.push(i), keys.sort(((a, b) => a - b)), cellCustomEvent.values[i] = eventData,
54
+ isInsert = !0;
55
+ break;
56
+ }
57
+ if (!isInsert) {
58
+ const index = keys[keys.length - 1] + 1;
59
+ eventData.index = index, cellCustomEvent.keys.push(index), cellCustomEvent.values[index] = eventData;
60
+ }
61
+ this.calendar.table.scenegraph.updateCellContent(col, row);
62
+ } else {
63
+ const startLocation = this.calendar.getCellLocation((0, date_fns_1.max)([ startDate, this.calendar.startDate ])), endLocation = this.calendar.getCellLocation((0,
64
+ date_fns_1.min)([ endDate, this.calendar.endDate ]));
65
+ if (!startLocation || !endLocation) return;
66
+ let col = startLocation.col, row = startLocation.row, maxIndex = -1;
67
+ for (;row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
68
+ const cellCustomEvent = this.getCellCustomEvent(col, row);
69
+ if (cellCustomEvent) {
70
+ const keys = cellCustomEvent.keys, maxKey = keys[keys.length - 1];
71
+ maxKey > maxIndex && (maxIndex = maxKey);
72
+ }
73
+ col++, col > this.calendar.maxCol && (col = this.calendar.minCol, row++);
74
+ }
75
+ for (col = startLocation.col, row = startLocation.row; row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
76
+ const cellCustomEvent = this.getCellCustomEvent(col, row), eventData = Object.assign(Object.assign({}, event), {
77
+ col: col,
78
+ row: row,
79
+ index: maxIndex + 1
80
+ });
81
+ if (cellCustomEvent) {
82
+ const keys = cellCustomEvent.keys;
83
+ keys.push(maxIndex + 1), keys.sort(((a, b) => a - b)), cellCustomEvent.values[maxIndex + 1] = eventData;
84
+ } else {
85
+ const events = {
86
+ keys: [ maxIndex + 1 ],
87
+ values: {
88
+ [maxIndex + 1]: eventData
89
+ }
90
+ };
91
+ this.setCellCustomEvent(col, row, events);
92
+ }
93
+ this.calendar.table.scenegraph.updateCellContent(col, row), col++, col > this.calendar.maxCol && (col = this.calendar.minCol,
94
+ row++);
95
+ }
96
+ }
97
+ this.events.push(event);
98
+ }
99
+ }
100
+ addEvents(events) {
101
+ events.forEach((event => {
102
+ this.addEvent(event);
103
+ }));
104
+ }
105
+ removeEvents(ids) {
106
+ ids.forEach((id => {
107
+ this._removeEvent(id);
108
+ }));
109
+ const newEvents = this.events.filter((event => !event.id || !ids.includes(event.id)));
110
+ this.events.length = 0, this.cellEvents.clear(), newEvents.forEach((event => {
111
+ this.addEvent(event);
112
+ }));
113
+ }
114
+ _removeEvent(id) {
115
+ if (!id) return;
116
+ const event = this.events.find((event => event.id === id));
117
+ if (!event) return;
118
+ const {date: date, startDate: startDate, endDate: endDate} = event;
119
+ if ("list" === event.type) {
120
+ const {col: col, row: row} = this.calendar.getCellLocation(date), cellGroup = this.calendar.table.scenegraph.getCell(col, row), customGroup = cellGroup.getChildByName("custom-container");
121
+ customGroup && cellGroup.removeChild(customGroup);
122
+ } else {
123
+ const startLocation = this.calendar.getCellLocation((0, date_fns_1.max)([ startDate, this.calendar.startDate ])), endLocation = this.calendar.getCellLocation((0,
124
+ date_fns_1.min)([ endDate, this.calendar.endDate ]));
125
+ let col = startLocation.col, row = startLocation.row;
126
+ for (;row < endLocation.row || col <= endLocation.col && row === endLocation.row; ) {
127
+ const cellGroup = this.calendar.table.scenegraph.getCell(col, row), customGroup = cellGroup.getChildByName("custom-container");
128
+ customGroup && cellGroup.removeChild(customGroup), col++, col > this.calendar.maxCol && (col = this.calendar.minCol,
129
+ row++);
130
+ }
131
+ }
132
+ }
133
+ updateEvents(events) {
134
+ events.forEach((event => {
135
+ this._removeEvent(event.id);
136
+ const oldEvent = this.events.find((e => e.id === event.id));
137
+ (0, vutils_1.merge)(oldEvent, event);
138
+ }));
139
+ const oldEvents = this.events;
140
+ this.events = [], this.cellEvents.clear(), oldEvents.forEach((event => {
141
+ this.addEvent(event);
142
+ }));
143
+ }
144
+ }
145
+
146
+ exports.CustomEventHandler = CustomEventHandler;
147
+ //# 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,112 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.calendarCustomLayout = void 0;
6
+
7
+ const vrender_1 = require("@visactor/vtable/es/vrender"), date_fns_1 = require("date-fns");
8
+
9
+ function calendarCustomLayout(args) {
10
+ 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;
11
+ if (!customEvents) return;
12
+ const textHeight = table.theme.bodyStyle.fontSize + 10, container = new vrender_1.Group({
13
+ x: 0,
14
+ y: textHeight,
15
+ height: height - textHeight,
16
+ width: width
17
+ }), {keys: keys, values: values} = customEvents, lastKey = keys[keys.length - 1];
18
+ let y = 0;
19
+ for (let i = 0; i <= lastKey; i++) {
20
+ const event = values[i];
21
+ if (event) if ("list" === event.type) {
22
+ const listGroup = new vrender_1.Group({
23
+ x: 0,
24
+ y: y,
25
+ width: width,
26
+ height: contentHeight,
27
+ fill: !1,
28
+ stroke: !1,
29
+ clip: !0,
30
+ cursor: "pointer"
31
+ });
32
+ container.add(listGroup), listGroup._role = "calendar-custom-event", listGroup._customEvent = event;
33
+ const circle = new vrender_1.Circle({
34
+ radius: circleRadius,
35
+ fill: event.color,
36
+ x: contentPadding + circleRadius,
37
+ y: contentHeight / 2,
38
+ pickable: !1
39
+ });
40
+ listGroup.add(circle);
41
+ const text = new vrender_1.Text({
42
+ x: contentPadding + 2 * circleRadius + contentPadding,
43
+ y: contentHeight / 2,
44
+ text: event.text,
45
+ fontSize: fontSize,
46
+ fill: event.color,
47
+ textAlign: "left",
48
+ textBaseline: "middle",
49
+ pickable: !1
50
+ });
51
+ listGroup.add(text);
52
+ } else {
53
+ const {startDate: startDate, endDate: endDate} = event, barGroup = new vrender_1.Group({
54
+ x: 0,
55
+ y: y,
56
+ width: width,
57
+ height: contentHeight,
58
+ fill: !1,
59
+ stroke: !1,
60
+ clip: !0,
61
+ cursor: "pointer"
62
+ });
63
+ container.add(barGroup), barGroup._role = "calendar-custom-event", barGroup._customEvent = event;
64
+ const rect = new vrender_1.Rect({
65
+ x: 0,
66
+ y: (contentHeight - barHeight) / 2,
67
+ width: width,
68
+ height: barHeight,
69
+ fill: event.bgColor,
70
+ cornerRadius: getRectCornerRadius(startDate, endDate, cellDate, barCornerRadius),
71
+ pickable: !1
72
+ });
73
+ barGroup.add(rect);
74
+ const days = (0, date_fns_1.differenceInDays)((0, date_fns_1.startOfDay)(startDate), (0,
75
+ date_fns_1.startOfDay)(cellDate)), text = new vrender_1.Text({
76
+ x: contentPadding,
77
+ y: contentHeight / 2,
78
+ dx: days * width,
79
+ text: event.text,
80
+ fontSize: fontSize,
81
+ fill: event.color,
82
+ textAlign: "left",
83
+ textBaseline: "middle",
84
+ pickable: !1
85
+ });
86
+ barGroup.add(text);
87
+ } else {
88
+ const emptyGroup = new vrender_1.Group({
89
+ x: 0,
90
+ y: y,
91
+ width: width,
92
+ height: contentHeight,
93
+ fill: !1,
94
+ stroke: !1,
95
+ clip: !0
96
+ });
97
+ container.add(emptyGroup);
98
+ }
99
+ y += contentHeight;
100
+ }
101
+ return {
102
+ rootContainer: container,
103
+ renderDefault: !0
104
+ };
105
+ }
106
+
107
+ function getRectCornerRadius(startDate, endDate, cellDate, cornerRadius) {
108
+ return startDate.getDate() === endDate.getDate() ? cornerRadius : startDate.getDate() === cellDate.getDate() ? [ cornerRadius, 0, 0, cornerRadius ] : endDate.getDate() === cellDate.getDate() ? [ 0, cornerRadius, cornerRadius, 0 ] : 0;
109
+ }
110
+
111
+ //# sourceMappingURL=custom-layout.js.map
112
+ exports.calendarCustomLayout = calendarCustomLayout;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["custom/custom-layout.ts"],"names":[],"mappings":"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","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,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.getWeekdayString = exports.getMonthString = exports.getRecords = exports.defaultDayTitles = exports.getStartAndEndDate = void 0;
6
+
7
+ const date_fns_1 = require("date-fns");
8
+
9
+ function getStartAndEndDate(today, daltaDays) {
10
+ const startDate = (0, date_fns_1.addDays)(today, -daltaDays);
11
+ startDate.setDate(1);
12
+ return {
13
+ startDate: startDate,
14
+ endDate: (0, date_fns_1.lastDayOfMonth)((0, date_fns_1.addDays)(today, daltaDays))
15
+ };
16
+ }
17
+
18
+ function getRecords(startDate, endDate) {
19
+ const records = [];
20
+ if ((0, date_fns_1.isAfter)(startDate, endDate)) {
21
+ const temp = startDate;
22
+ startDate = endDate, endDate = temp;
23
+ }
24
+ const startYear = startDate.getFullYear(), startMonth = startDate.getMonth(), endYear = endDate.getFullYear(), endMonth = endDate.getMonth();
25
+ let year = startYear, month = startMonth;
26
+ for (;year !== endYear || month <= endMonth; ) {
27
+ const monthStartDate = new Date(year, month, 1), daysInMonth = (0, date_fns_1.getDaysInMonth)(monthStartDate);
28
+ let record, week = monthStartDate.getDay();
29
+ 0 === records.length ? 0 === week ? (record = {
30
+ year: year,
31
+ month: month
32
+ }, records.push(record)) : 0 === month ? (record = {
33
+ year: year - 1,
34
+ month: 11
35
+ }, records.push(record)) : (record = {
36
+ year: year,
37
+ month: month - 1
38
+ }, records.push(record)) : 0 === week ? (record = {
39
+ year: year,
40
+ month: month
41
+ }, records.push(record)) : record = records[records.length - 1];
42
+ for (let day = 1; day <= daysInMonth; day++) 7 === week && (week = 0, record = {
43
+ year: year,
44
+ month: month
45
+ }, records.push(record)), setDate(record, week, day), week += 1;
46
+ month += 1, 12 === month && (month = 0, year += 1);
47
+ }
48
+ return records;
49
+ }
50
+
51
+ function setDate(record, day, date) {
52
+ switch (day) {
53
+ case 0:
54
+ record.Sun = date;
55
+ break;
56
+
57
+ case 1:
58
+ record.Mon = date;
59
+ break;
60
+
61
+ case 2:
62
+ record.Tue = date;
63
+ break;
64
+
65
+ case 3:
66
+ record.Wed = date;
67
+ break;
68
+
69
+ case 4:
70
+ record.Thu = date;
71
+ break;
72
+
73
+ case 5:
74
+ record.Fri = date;
75
+ break;
76
+
77
+ case 6:
78
+ record.Sat = date;
79
+ }
80
+ }
81
+
82
+ exports.getStartAndEndDate = getStartAndEndDate, exports.defaultDayTitles = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
83
+ exports.getRecords = getRecords;
84
+
85
+ const monthStrings = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
86
+
87
+ function getMonthString(monthIndex) {
88
+ return monthStrings[monthIndex % monthStrings.length];
89
+ }
90
+
91
+ exports.getMonthString = getMonthString;
92
+
93
+ const weekdayStrings = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];
94
+
95
+ function getWeekdayString(weekdayIndex) {
96
+ return weekdayStrings[weekdayIndex % weekdayStrings.length];
97
+ }
98
+
99
+ exports.getWeekdayString = getWeekdayString;
@@ -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,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.CALENDAR_EVENT_TYPE = void 0, exports.CALENDAR_EVENT_TYPE = {
6
+ CALENDAR_DATE_CLICK: "calendar_date_click",
7
+ SELECTED_DATE: "selected_date",
8
+ SELECTED_DATE_CLEAR: "selected_date_clear",
9
+ DRAG_SELECT_DATE_END: "drag_select_date_end",
10
+ CALENDAR_CUSTOM_EVENT_CLICK: "calendar_custom_event_click"
11
+ };
12
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["event/type.ts"],"names":[],"mappings":";;;AA8Ba,QAAA,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/cjs/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';