react-big-schedule 8.1.0 → 9.0.1

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 (109) hide show
  1. package/README.md +24 -1129
  2. package/dist/calendar/Calendar.d.ts +28 -0
  3. package/dist/calendar/Calendar.js +95 -0
  4. package/dist/calendar/Toolbar.d.ts +18 -0
  5. package/dist/calendar/Toolbar.js +6 -0
  6. package/dist/calendar/recurrence.check.d.ts +1 -0
  7. package/dist/calendar/recurrence.check.js +49 -0
  8. package/dist/calendar/recurrence.d.ts +8 -0
  9. package/dist/calendar/recurrence.js +90 -0
  10. package/dist/calendar/timezone.d.ts +6 -0
  11. package/dist/calendar/timezone.js +14 -0
  12. package/dist/calendar/types.d.ts +187 -0
  13. package/dist/calendar/types.js +1 -0
  14. package/dist/calendar/useEventSources.d.ts +11 -0
  15. package/dist/calendar/useEventSources.js +89 -0
  16. package/dist/calendar/useRecurrence.d.ts +4 -0
  17. package/dist/calendar/useRecurrence.js +15 -0
  18. package/dist/calendar/utils.d.ts +38 -0
  19. package/dist/calendar/utils.js +143 -0
  20. package/dist/calendar/views/DayGridView.d.ts +3 -0
  21. package/dist/calendar/views/DayGridView.js +375 -0
  22. package/dist/calendar/views/ListView.d.ts +4 -0
  23. package/dist/calendar/views/ListView.js +56 -0
  24. package/dist/calendar/views/MultiMonthView.d.ts +4 -0
  25. package/dist/calendar/views/MultiMonthView.js +36 -0
  26. package/dist/calendar/views/TimeGridView.d.ts +3 -0
  27. package/dist/calendar/views/TimeGridView.js +334 -0
  28. package/dist/calendar/views/daygrid/DayCell.d.ts +19 -0
  29. package/dist/calendar/views/daygrid/DayCell.js +17 -0
  30. package/dist/calendar/views/daygrid/EventChip.d.ts +19 -0
  31. package/dist/calendar/views/daygrid/EventChip.js +40 -0
  32. package/dist/calendar/views/daygrid/layout.d.ts +30 -0
  33. package/dist/calendar/views/daygrid/layout.js +63 -0
  34. package/dist/calendar/views/list/bucket.d.ts +8 -0
  35. package/dist/calendar/views/list/bucket.js +37 -0
  36. package/dist/calendar/views/multimonth/Cell.d.ts +12 -0
  37. package/dist/calendar/views/multimonth/Cell.js +44 -0
  38. package/dist/calendar/views/multimonth/Continuous.d.ts +8 -0
  39. package/dist/calendar/views/multimonth/Continuous.js +28 -0
  40. package/dist/calendar/views/multimonth/MonthGrid.d.ts +10 -0
  41. package/dist/calendar/views/multimonth/MonthGrid.js +36 -0
  42. package/dist/calendar/views/multimonth/shared.d.ts +27 -0
  43. package/dist/calendar/views/multimonth/shared.js +40 -0
  44. package/dist/calendar/views/timegrid/DayColumn.d.ts +49 -0
  45. package/dist/calendar/views/timegrid/DayColumn.js +86 -0
  46. package/dist/calendar/views/timegrid/model.d.ts +55 -0
  47. package/dist/calendar/views/timegrid/model.js +102 -0
  48. package/dist/components/AddMore.d.ts +13 -0
  49. package/dist/components/AddMore.js +9 -42
  50. package/dist/components/AddMorePopover.d.ts +13 -0
  51. package/dist/components/AddMorePopover.js +24 -95
  52. package/dist/components/AgendaEventItem.d.ts +10 -0
  53. package/dist/components/AgendaEventItem.js +33 -81
  54. package/dist/components/AgendaResourceEvents.d.ts +10 -0
  55. package/dist/components/AgendaResourceEvents.js +37 -91
  56. package/dist/components/AgendaView.d.ts +9 -0
  57. package/dist/components/AgendaView.js +10 -69
  58. package/dist/components/BodyView.d.ts +11 -0
  59. package/dist/components/BodyView.js +36 -67
  60. package/dist/components/DnDContext.d.ts +48 -0
  61. package/dist/components/DnDContext.js +200 -221
  62. package/dist/components/DnDSource.d.ts +49 -0
  63. package/dist/components/DnDSource.js +125 -120
  64. package/dist/components/EventItem.d.ts +41 -0
  65. package/dist/components/EventItem.js +585 -787
  66. package/dist/components/EventItemPopover.d.ts +12 -0
  67. package/dist/components/EventItemPopover.js +19 -143
  68. package/dist/components/HeaderView.d.ts +14 -0
  69. package/dist/components/HeaderView.js +123 -186
  70. package/dist/components/ResourceEvents.d.ts +54 -0
  71. package/dist/components/ResourceEvents.js +534 -703
  72. package/dist/components/ResourceView.d.ts +26 -0
  73. package/dist/components/ResourceView.js +64 -184
  74. package/dist/components/SchedulerData.d.ts +136 -0
  75. package/dist/components/SchedulerData.js +1296 -1226
  76. package/dist/components/SchedulerHeader.d.ts +25 -0
  77. package/dist/components/SchedulerHeader.js +50 -150
  78. package/dist/components/SelectedArea.d.ts +8 -0
  79. package/dist/components/SelectedArea.js +11 -26
  80. package/dist/components/Summary.d.ts +11 -0
  81. package/dist/components/Summary.js +21 -50
  82. package/dist/components/WrapperFun.d.ts +2 -0
  83. package/dist/components/WrapperFun.js +5 -10
  84. package/dist/components/index.d.ts +44 -0
  85. package/dist/components/index.js +428 -654
  86. package/dist/components/ui/Icons.d.ts +8 -0
  87. package/dist/components/ui/Icons.js +7 -0
  88. package/dist/components/ui/MiniCalendar.d.ts +9 -0
  89. package/dist/components/ui/MiniCalendar.js +17 -0
  90. package/dist/components/ui/Popover.d.ts +13 -0
  91. package/dist/components/ui/Popover.js +80 -0
  92. package/dist/config/default.d.ts +36 -0
  93. package/dist/config/default.js +17 -26
  94. package/dist/config/i18n.d.ts +27 -0
  95. package/dist/config/i18n.js +21 -37
  96. package/dist/config/scheduler.d.ts +12 -0
  97. package/dist/config/scheduler.js +126 -119
  98. package/dist/css/style.css +2 -316
  99. package/dist/helper/behaviors.d.ts +14 -0
  100. package/dist/helper/behaviors.js +75 -75
  101. package/dist/helper/utility.d.ts +26 -0
  102. package/dist/helper/utility.js +23 -30
  103. package/dist/index.d.ts +6 -477
  104. package/dist/index.js +4 -2
  105. package/dist/sample-data/sample1.d.ts +11 -0
  106. package/dist/sample-data/sample1.js +427 -372
  107. package/dist/types.d.ts +267 -0
  108. package/dist/types.js +1 -0
  109. package/package.json +30 -27
@@ -0,0 +1,267 @@
1
+ import type dayjs from 'dayjs';
2
+ import type { Dayjs } from 'dayjs';
3
+ import type { CSSProperties, ReactNode } from 'react';
4
+ import type SchedulerData from './components/SchedulerData';
5
+ import type { CellUnit, SummaryPos, ViewType } from './config/default';
6
+ export type Id = string | number;
7
+ export interface SchedulerEvent {
8
+ id: Id;
9
+ title: string;
10
+ start: string;
11
+ end: string;
12
+ resourceId: Id;
13
+ bgColor?: string;
14
+ rrule?: string;
15
+ movable?: boolean;
16
+ resizable?: boolean;
17
+ startResizable?: boolean;
18
+ endResizable?: boolean;
19
+ showPopover?: boolean;
20
+ clickable1?: boolean;
21
+ clickable2?: boolean;
22
+ groupId?: Id;
23
+ groupName?: string;
24
+ /** Multi-resource event: shown on every listed resource row. */
25
+ resourceIds?: Id[];
26
+ exdates?: (string | Date)[];
27
+ exrule?: string;
28
+ recurringEventId?: Id;
29
+ recurringEventStart?: string;
30
+ recurringEventEnd?: string;
31
+ [extra: string]: unknown;
32
+ }
33
+ export interface Resource {
34
+ id: Id;
35
+ name: string;
36
+ title?: string;
37
+ parentId?: Id;
38
+ groupOnly?: boolean;
39
+ expanded?: boolean;
40
+ hidden?: boolean;
41
+ [extra: string]: unknown;
42
+ }
43
+ export interface ViewConfig {
44
+ viewName: string;
45
+ viewType: ViewType;
46
+ showAgenda: boolean;
47
+ isEventPerspective: boolean;
48
+ }
49
+ export type Size = number | string;
50
+ export interface SchedulerConfig {
51
+ schedulerWidth: Size;
52
+ underneathHeight: number;
53
+ schedulerMaxHeight: number;
54
+ tableHeaderHeight: number;
55
+ schedulerContentHeight: Size;
56
+ responsiveByParent: boolean;
57
+ agendaResourceTableWidth: Size;
58
+ agendaMaxEventWidth: number;
59
+ dayResourceTableWidth: Size;
60
+ weekResourceTableWidth: Size;
61
+ monthResourceTableWidth: Size;
62
+ quarterResourceTableWidth: Size;
63
+ yearResourceTableWidth: Size;
64
+ customResourceTableWidth: Size;
65
+ dayCellWidth: Size;
66
+ weekCellWidth: Size;
67
+ monthCellWidth: Size;
68
+ quarterCellWidth: Size;
69
+ yearCellWidth: Size;
70
+ customCellWidth: Size;
71
+ dayMaxEvents: number;
72
+ weekMaxEvents: number;
73
+ monthMaxEvents: number;
74
+ quarterMaxEvents: number;
75
+ yearMaxEvents: number;
76
+ customMaxEvents: number;
77
+ eventItemPopoverTrigger: 'hover' | 'click';
78
+ /** top|bottom + Left|Right, optionally suffixed with MousePosition. */
79
+ eventItemPopoverPlacement: string;
80
+ eventItemPopoverWidth: number;
81
+ eventItemHeight: number;
82
+ eventItemLineHeight: number;
83
+ nonAgendaSlotMinHeight: number;
84
+ dayStartFrom: number;
85
+ dayStopTo: number;
86
+ defaultEventBgColor: string;
87
+ selectedAreaColor: string;
88
+ nonWorkingTimeHeadColor: string;
89
+ nonWorkingTimeHeadBgColor: string;
90
+ nonWorkingTimeBodyBgColor: string;
91
+ summaryColor: string;
92
+ summaryPos: SummaryPos;
93
+ groupOnlySlotColor: string;
94
+ headerBorderColor: string;
95
+ selectedSlotBorderColor?: string;
96
+ selectedSlotShadowColor?: string;
97
+ selectedSlotColor?: string;
98
+ schedulerHeight?: Size;
99
+ weekNumberRowHeight: number;
100
+ showWeekNumber: boolean;
101
+ showMonthRow: boolean;
102
+ monthRowHeight: number;
103
+ dropPreviewEnabled: boolean;
104
+ dropPreviewClassName: string;
105
+ dropPreviewStyle?: CSSProperties;
106
+ /** Colour scheme: built-in 'default' (transparent, follows the page) | 'light' | 'dark', or any custom data-rbs-theme value. */
107
+ theme?: string;
108
+ /** Design language: 'material' | 'fluent' | 'tailwind' | 'minimal' | 'classic' (see css/style.css). Unset keeps the default look. */
109
+ look?: string;
110
+ /** Colour palette: blue, green, purple, red, amber, emerald, indigo or rose. */
111
+ palette?: string;
112
+ startResizable: boolean;
113
+ endResizable: boolean;
114
+ movable: boolean;
115
+ creatable: boolean;
116
+ crossResourceMove: boolean;
117
+ checkConflict: boolean;
118
+ scrollToSpecialDayjsEnabled: boolean;
119
+ eventItemPopoverEnabled: boolean;
120
+ eventItemPopoverShowColor: boolean;
121
+ calendarPopoverEnabled: boolean;
122
+ recurringEventsEnabled: boolean;
123
+ viewChangeSpinEnabled: boolean;
124
+ dateChangeSpinEnabled: boolean;
125
+ headerEnabled: boolean;
126
+ resourceViewEnabled: boolean;
127
+ displayWeekend: boolean;
128
+ relativeMove: boolean;
129
+ defaultExpanded: boolean;
130
+ dragAndDropEnabled: boolean;
131
+ schedulerHeaderEventsFuncsTimeoutMs: number;
132
+ resourceName: string;
133
+ taskName: string;
134
+ agendaViewHeader: string;
135
+ weekNumberLabel: string;
136
+ addMorePopoverHeaderFormat: string;
137
+ eventItemPopoverDateFormat: string;
138
+ nonAgendaDayCellHeaderFormat: string;
139
+ nonAgendaWeekCellHeaderFormat: string;
140
+ nonAgendaMonthCellHeaderFormat: string;
141
+ nonAgendaYearCellHeaderFormat: string;
142
+ nonAgendaQuarterCellHeaderFormat: string;
143
+ nonAgendaOtherCellHeaderFormat: string;
144
+ minuteStep: number;
145
+ views: ViewConfig[];
146
+ [extra: string]: unknown;
147
+ }
148
+ export interface SummaryResult {
149
+ text: ReactNode;
150
+ color: string;
151
+ fontSize: string;
152
+ }
153
+ export interface CustomDate {
154
+ startDate: DateInput;
155
+ endDate: DateInput;
156
+ cellUnit: CellUnit;
157
+ }
158
+ export interface HeaderCell {
159
+ time: string;
160
+ nonWorkingTime?: boolean;
161
+ [extra: string]: unknown;
162
+ }
163
+ export interface HeaderEvent {
164
+ render: boolean;
165
+ span: number;
166
+ eventItem: SchedulerEvent;
167
+ [extra: string]: unknown;
168
+ }
169
+ /** One timeline cell of a slot row (events falling in that cell). */
170
+ export interface HeaderItem {
171
+ time: string;
172
+ start: string;
173
+ end: string;
174
+ nonWorkingTime?: boolean;
175
+ id: Id;
176
+ style: CSSProperties;
177
+ count: number;
178
+ addMore: number;
179
+ addMoreIndex: number;
180
+ summary?: SummaryResult;
181
+ events: (HeaderEvent | undefined)[];
182
+ [extra: string]: unknown;
183
+ }
184
+ /** One rendered slot row (resource or event group). */
185
+ export interface RenderItem {
186
+ slotId: Id;
187
+ slotName: string;
188
+ slotTitle?: string;
189
+ parentId?: Id;
190
+ groupOnly?: boolean;
191
+ hasSummary: boolean;
192
+ rowMaxCount: number;
193
+ rowHeight: number;
194
+ headerItems: HeaderItem[];
195
+ indent: number;
196
+ hasChildren: boolean;
197
+ expanded: boolean;
198
+ render: boolean;
199
+ nonWorkingTime?: boolean;
200
+ [extra: string]: unknown;
201
+ }
202
+ /** Props shared by the event popover and the components that forward them to it. */
203
+ export interface EventPopoverCallbacks {
204
+ subtitleGetter?: (schedulerData: SchedulerData, eventItem: SchedulerEvent) => ReactNode;
205
+ eventItemClick?: (schedulerData: SchedulerData, eventItem: SchedulerEvent) => void;
206
+ viewEventClick?: (schedulerData: SchedulerData, eventItem: SchedulerEvent) => void;
207
+ viewEventText?: string;
208
+ viewEvent2Click?: (schedulerData: SchedulerData, eventItem: SchedulerEvent) => void;
209
+ viewEvent2Text?: string;
210
+ eventItemTemplateResolver?: (schedulerData: SchedulerData, eventItem: SchedulerEvent, bgColor: string, isStart: boolean, isEnd: boolean, mustAddCssClass: string, mustBeHeight: number, agendaMaxEventWidth?: number) => ReactNode;
211
+ eventItemPopoverTemplateResolver?: (schedulerData: SchedulerData, eventItem: SchedulerEvent, title: string, start: Dayjs, end: Dayjs, statusColor: string) => ReactNode;
212
+ }
213
+ export type SlotClickedFunc = (schedulerData: SchedulerData, slot: RenderItem) => void;
214
+ export type SlotItemTemplateResolver = (schedulerData: SchedulerData, slot: RenderItem, slotClickedFunc: SlotClickedFunc | undefined, width: number, className: string) => ReactNode;
215
+ /** Payload passed to conflictOccurred when a brand-new event (drag-select) conflicts. */
216
+ export interface NewEventDraft {
217
+ id: undefined;
218
+ start: string;
219
+ end: string;
220
+ resourceId: Id;
221
+ resourceIds: Id[];
222
+ slotId: Id;
223
+ slotName: string;
224
+ title: undefined;
225
+ }
226
+ /** Anything dayjs (and so localeDayjs) accepts as a date. */
227
+ export type DateInput = string | number | Date | Dayjs;
228
+ /** A dayjs locale name or locale object. */
229
+ export type LocalePreset = NonNullable<Parameters<typeof dayjs.locale>[0]>;
230
+ /** Per-instance dayjs factory (locale applied per created date, see SchedulerData). */
231
+ export interface LocaleDayjs {
232
+ (date?: DateInput, format?: string, strict?: boolean): Dayjs;
233
+ locale(): string;
234
+ locale(preset: LocalePreset): LocaleDayjs;
235
+ utc: (date?: DateInput) => Dayjs;
236
+ /** Interpret a wall-clock string in an IANA zone (or convert a Date / timestamp / Dayjs into it). */
237
+ tz: (date: DateInput, zone: string) => Dayjs;
238
+ }
239
+ /** Event group used by the event-perspective views. */
240
+ export interface EventGroup {
241
+ id: Id;
242
+ name: string;
243
+ title?: string;
244
+ parentId?: Id;
245
+ groupOnly?: boolean;
246
+ state?: SchedulerEvent;
247
+ [extra: string]: unknown;
248
+ }
249
+ export type Slot = Resource | EventGroup;
250
+ /** A column header of the timeline (or a resource in the vertical resource view). */
251
+ export interface Header {
252
+ time: string;
253
+ name?: string;
254
+ nonWorkingTime?: boolean;
255
+ style?: CSSProperties;
256
+ id?: Id;
257
+ [extra: string]: unknown;
258
+ }
259
+ export interface Behaviors {
260
+ getSummaryFunc?: (schedulerData: SchedulerData, headerEvents: SchedulerEvent[], slotId: Id, slotName: string, headerStart: string, headerEnd: string) => SummaryResult;
261
+ getCustomDateFunc?: (schedulerData: SchedulerData, num: number, date?: DateInput) => CustomDate;
262
+ getNonAgendaViewBodyCellBgColorFunc?: (schedulerData: SchedulerData, slotId: Id, header: HeaderCell) => string | undefined;
263
+ getScrollSpecialDayjsFunc: (schedulerData: SchedulerData, start?: Dayjs, end?: Dayjs) => Dayjs;
264
+ getDateLabelFunc: (schedulerData: SchedulerData, viewType: ViewType, startDate: DateInput, endDate: DateInput) => string;
265
+ getEventTextFunc: (schedulerData: SchedulerData, event: SchedulerEvent) => string;
266
+ isNonWorkingTimeFunc: (schedulerData: SchedulerData, time: string) => boolean;
267
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-big-schedule",
3
- "version": "8.1.0",
3
+ "version": "9.0.1",
4
4
  "description": "React Big Schedule is a powerful and intuitive scheduler and resource planning solution built with React. Seamlessly integrate this modern browser-compatible component into your applications to effectively manage time, appointments, and resources. With drag-and-drop functionality, interactive UI, and granular views, react-big-schedule empowers users to effortlessly schedule and allocate resources with precision. Enhance productivity and streamline your workflow with this React-based solution, designed to optimize time management and simplify calendar-based operations. Perfect for applications requiring advanced scheduling capabilities, react-big-schedule offers a seamless and intuitive experience for managing appointments, resource allocation, and time slots. Unlock the potential of your React projects with react-big-schedule and revolutionize the way you handle scheduling and resource planning. It is the updated version of react-big-scheduler",
5
5
  "keywords": [
6
6
  "react-big-schedule",
@@ -13,7 +13,6 @@
13
13
  "react",
14
14
  "react-big-schedulers",
15
15
  "react-component",
16
- "antd",
17
16
  "resource planning",
18
17
  "scheduler",
19
18
  "Resource planning",
@@ -29,8 +28,7 @@
29
28
  "Modern browser compatibility",
30
29
  "React-based solution",
31
30
  "Granular views",
32
- "Productivity enhancement",
33
- "antd"
31
+ "Productivity enhancement"
34
32
  ],
35
33
  "license": "MIT",
36
34
  "author": "Ansul Agrawal (https://github.com/ansulagrawal)",
@@ -40,7 +38,7 @@
40
38
  "LICENSE"
41
39
  ],
42
40
  "main": "dist/index.js",
43
- "homepage": "https://react-big-schedule.vercel.app",
41
+ "homepage": "https://react-big-schedule.ansulagrawal.com",
44
42
  "repository": {
45
43
  "type": "git",
46
44
  "url": "https://github.com/ansulagrawal/react-big-schedule"
@@ -53,39 +51,44 @@
53
51
  "registry": "https://registry.npmjs.org/"
54
52
  },
55
53
  "scripts": {
56
- "dev": "webpack serve --open",
57
- "build": "webpack --mode production",
58
- "build:lib": "node scripts/build.js",
54
+ "build:lib": "node scripts/build.cjs",
59
55
  "clean": "npx rimraf dist",
60
56
  "check": "biome check .",
61
- "fix": "biome check --write ."
57
+ "fix": "biome check --write .",
58
+ "typecheck": "tsc --noEmit"
62
59
  },
63
60
  "dependencies": {
64
- "@ant-design/icons": "^6.3.4",
65
- "antd": "^6.6.5",
66
61
  "dayjs": "^1.11.23",
67
- "prop-types": "^15.8.1",
68
- "react": "^19.3.0",
69
62
  "react-dnd": "^16.0.1",
70
63
  "react-dnd-html5-backend": "^16.0.1",
71
- "react-dom": "^19.3.0",
72
- "react-router-dom": "^7.18.4",
73
64
  "rrule": "^2.8.1"
74
65
  },
75
66
  "devDependencies": {
76
- "@babel/cli": "^8.0.6",
77
- "@babel/core": "^8.0.7",
78
- "@babel/preset-env": "^8.0.7",
79
- "@babel/preset-react": "^8.0.1",
80
67
  "@biomejs/biome": "^2.5.15",
81
- "babel-loader": "^10.1.1",
82
- "copy-webpack-plugin": "^14.0.0",
83
- "css-loader": "^7.1.5",
68
+ "@tailwindcss/cli": "^4.3.3",
69
+ "@types/react": "^19.3.0",
70
+ "@types/react-dom": "^19.3.0",
84
71
  "fs-extra": "^11.4.1",
85
- "html-webpack-plugin": "^5.6.8",
86
- "style-loader": "^4.0.0",
87
- "webpack": "^5.111.1",
88
- "webpack-cli": "^7.2.3",
89
- "webpack-dev-server": "^6.0.0"
72
+ "react": "latest",
73
+ "react-dom": "latest",
74
+ "tailwindcss": "^4.3.3",
75
+ "typescript": "^7.0.2"
76
+ },
77
+ "type": "module",
78
+ "types": "dist/index.d.ts",
79
+ "exports": {
80
+ ".": {
81
+ "types": "./dist/index.d.ts",
82
+ "import": "./dist/index.js"
83
+ },
84
+ "./dist/css/style.css": "./dist/css/style.css",
85
+ "./css": "./dist/css/style.css"
86
+ },
87
+ "sideEffects": [
88
+ "*.css"
89
+ ],
90
+ "peerDependencies": {
91
+ "react": ">=18",
92
+ "react-dom": ">=18"
90
93
  }
91
94
  }