@isma91/react-scheduler 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.github/workflows/publish.yml +29 -0
  2. package/.github/workflows/tests.yml +35 -0
  3. package/.gitignore +32 -0
  4. package/.husky/pre-commit +2 -0
  5. package/.prettierignore +1 -0
  6. package/.prettierrc.json +7 -0
  7. package/.yarnrc.yml +1 -0
  8. package/LICENSE +24 -0
  9. package/README.md +172 -0
  10. package/dist/LICENSE +24 -0
  11. package/dist/README.md +172 -0
  12. package/dist/SchedulerComponent.d.ts +3 -0
  13. package/dist/components/common/Cell.d.ts +13 -0
  14. package/dist/components/common/LocaleArrow.d.ts +8 -0
  15. package/dist/components/common/ResourceHeader.d.ts +6 -0
  16. package/dist/components/common/Tabs.d.ts +16 -0
  17. package/dist/components/common/TodayTypo.d.ts +8 -0
  18. package/dist/components/common/WithResources.d.ts +6 -0
  19. package/dist/components/events/Actions.d.ts +8 -0
  20. package/dist/components/events/AgendaEventsList.d.ts +7 -0
  21. package/dist/components/events/CurrentTimeBar.d.ts +11 -0
  22. package/dist/components/events/EmptyAgenda.d.ts +2 -0
  23. package/dist/components/events/EventItem.d.ts +10 -0
  24. package/dist/components/events/EventItemPopover.d.ts +9 -0
  25. package/dist/components/events/MonthEvents.d.ts +13 -0
  26. package/dist/components/events/TodayEvents.d.ts +16 -0
  27. package/dist/components/hoc/DateProvider.d.ts +5 -0
  28. package/dist/components/inputs/DatePicker.d.ts +14 -0
  29. package/dist/components/inputs/Input.d.ts +19 -0
  30. package/dist/components/inputs/SelectInput.d.ts +22 -0
  31. package/dist/components/month/MonthTable.d.ts +8 -0
  32. package/dist/components/nav/DayDateBtn.d.ts +6 -0
  33. package/dist/components/nav/MonthDateBtn.d.ts +6 -0
  34. package/dist/components/nav/Navigation.d.ts +3 -0
  35. package/dist/components/nav/WeekDateBtn.d.ts +8 -0
  36. package/dist/components/week/WeekTable.d.ts +11 -0
  37. package/dist/helpers/constants.d.ts +4 -0
  38. package/dist/helpers/generals.d.ts +78 -0
  39. package/dist/hooks/useArrowDisable.d.ts +5 -0
  40. package/dist/hooks/useCellAttributes.d.ts +18 -0
  41. package/dist/hooks/useDragAttributes.d.ts +10 -0
  42. package/dist/hooks/useEventPermissions.d.ts +7 -0
  43. package/dist/hooks/useStore.d.ts +2 -0
  44. package/dist/hooks/useSyncScroll.d.ts +8 -0
  45. package/dist/hooks/useWindowResize.d.ts +4 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.js +2853 -0
  48. package/dist/package.json +65 -0
  49. package/dist/positionManger/context.d.ts +14 -0
  50. package/dist/positionManger/provider.d.ts +5 -0
  51. package/dist/positionManger/usePosition.d.ts +4 -0
  52. package/dist/store/context.d.ts +2 -0
  53. package/dist/store/default.d.ts +245 -0
  54. package/dist/store/provider.d.ts +7 -0
  55. package/dist/store/types.d.ts +27 -0
  56. package/dist/styles/styles.d.ts +30 -0
  57. package/dist/types.d.ts +372 -0
  58. package/dist/views/Day.d.ts +2 -0
  59. package/dist/views/DayAgenda.d.ts +7 -0
  60. package/dist/views/Editor.d.ts +11 -0
  61. package/dist/views/Month.d.ts +2 -0
  62. package/dist/views/MonthAgenda.d.ts +7 -0
  63. package/dist/views/Week.d.ts +2 -0
  64. package/dist/views/WeekAgenda.d.ts +8 -0
  65. package/eslint.config.js +79 -0
  66. package/index.html +41 -0
  67. package/jest.config.ts +194 -0
  68. package/package.json +137 -0
  69. package/public/favicon.ico +0 -0
  70. package/public/logo192.png +0 -0
  71. package/public/logo512.png +0 -0
  72. package/public/manifest.json +25 -0
  73. package/public/robots.txt +3 -0
  74. package/scripts/post-pack.js +34 -0
  75. package/src/App.tsx +25 -0
  76. package/src/Page1.tsx +67 -0
  77. package/src/events.tsx +227 -0
  78. package/src/index.tsx +21 -0
  79. package/src/lib/SchedulerComponent.tsx +78 -0
  80. package/src/lib/__tests__/index.test.tsx +24 -0
  81. package/src/lib/components/common/Cell.tsx +52 -0
  82. package/src/lib/components/common/LocaleArrow.tsx +38 -0
  83. package/src/lib/components/common/ResourceHeader.tsx +73 -0
  84. package/src/lib/components/common/Tabs.tsx +119 -0
  85. package/src/lib/components/common/TodayTypo.tsx +44 -0
  86. package/src/lib/components/common/WithResources.tsx +98 -0
  87. package/src/lib/components/events/Actions.tsx +65 -0
  88. package/src/lib/components/events/AgendaEventsList.tsx +115 -0
  89. package/src/lib/components/events/CurrentTimeBar.tsx +59 -0
  90. package/src/lib/components/events/EmptyAgenda.tsx +27 -0
  91. package/src/lib/components/events/EventItem.tsx +180 -0
  92. package/src/lib/components/events/EventItemPopover.tsx +179 -0
  93. package/src/lib/components/events/MonthEvents.tsx +141 -0
  94. package/src/lib/components/events/TodayEvents.tsx +99 -0
  95. package/src/lib/components/hoc/DateProvider.tsx +19 -0
  96. package/src/lib/components/inputs/DatePicker.tsx +95 -0
  97. package/src/lib/components/inputs/Input.tsx +113 -0
  98. package/src/lib/components/inputs/SelectInput.tsx +164 -0
  99. package/src/lib/components/month/MonthTable.tsx +207 -0
  100. package/src/lib/components/nav/DayDateBtn.tsx +77 -0
  101. package/src/lib/components/nav/MonthDateBtn.tsx +80 -0
  102. package/src/lib/components/nav/Navigation.tsx +201 -0
  103. package/src/lib/components/nav/WeekDateBtn.tsx +89 -0
  104. package/src/lib/components/week/WeekTable.tsx +229 -0
  105. package/src/lib/helpers/constants.ts +4 -0
  106. package/src/lib/helpers/generals.tsx +354 -0
  107. package/src/lib/hooks/useArrowDisable.ts +26 -0
  108. package/src/lib/hooks/useCellAttributes.ts +67 -0
  109. package/src/lib/hooks/useDragAttributes.ts +31 -0
  110. package/src/lib/hooks/useEventPermissions.ts +42 -0
  111. package/src/lib/hooks/useStore.ts +8 -0
  112. package/src/lib/hooks/useSyncScroll.ts +31 -0
  113. package/src/lib/hooks/useWindowResize.ts +37 -0
  114. package/src/lib/index.tsx +14 -0
  115. package/src/lib/positionManger/context.ts +14 -0
  116. package/src/lib/positionManger/provider.tsx +113 -0
  117. package/src/lib/positionManger/usePosition.ts +8 -0
  118. package/src/lib/store/context.ts +5 -0
  119. package/src/lib/store/default.ts +157 -0
  120. package/src/lib/store/provider.tsx +211 -0
  121. package/src/lib/store/types.ts +33 -0
  122. package/src/lib/styles/styles.ts +256 -0
  123. package/src/lib/types.ts +423 -0
  124. package/src/lib/views/Day.tsx +265 -0
  125. package/src/lib/views/DayAgenda.tsx +57 -0
  126. package/src/lib/views/Editor.tsx +258 -0
  127. package/src/lib/views/Month.tsx +82 -0
  128. package/src/lib/views/MonthAgenda.tsx +84 -0
  129. package/src/lib/views/Week.tsx +92 -0
  130. package/src/lib/views/WeekAgenda.tsx +81 -0
  131. package/src/vite-env.d.ts +3 -0
  132. package/tsconfig.build.json +5 -0
  133. package/tsconfig.json +27 -0
  134. package/vite.config.js +40 -0
@@ -0,0 +1,9 @@
1
+ import { MouseEvent } from 'react';
2
+ import { ProcessedEvent } from '../../types';
3
+ type Props = {
4
+ event: ProcessedEvent;
5
+ anchorEl: Element | null;
6
+ onTriggerViewer: (el?: MouseEvent<Element>) => void;
7
+ };
8
+ declare const EventItemPopover: ({ anchorEl, event, onTriggerViewer }: Props) => import("react/jsx-runtime").JSX.Element;
9
+ export default EventItemPopover;
@@ -0,0 +1,13 @@
1
+ import { ProcessedEvent } from '../../types';
2
+ interface MonthEventProps {
3
+ events: ProcessedEvent[];
4
+ resourceId?: string;
5
+ today: Date;
6
+ eachWeekStart: Date[];
7
+ eachFirstDayInCalcRow: Date | null;
8
+ daysList: Date[];
9
+ onViewMore(day: Date): void;
10
+ cellHeight: number;
11
+ }
12
+ declare const MonthEvents: ({ events, resourceId, today, eachWeekStart, eachFirstDayInCalcRow, daysList, onViewMore, cellHeight, }: MonthEventProps) => import("react/jsx-runtime").JSX.Element;
13
+ export default MonthEvents;
@@ -0,0 +1,16 @@
1
+ import { ProcessedEvent } from '../../types';
2
+ interface TodayEventsProps {
3
+ todayEvents: ProcessedEvent[];
4
+ today: Date;
5
+ startHour: number;
6
+ endHour: number;
7
+ step: number;
8
+ minuteHeight: number;
9
+ direction: "rtl" | "ltr";
10
+ timeZone?: string;
11
+ currentTime?: Date;
12
+ showCurrentTimeBar?: boolean;
13
+ currentTimeBarColor?: string;
14
+ }
15
+ declare const TodayEvents: ({ todayEvents, today, startHour, endHour, step, minuteHeight, direction, timeZone, currentTime, showCurrentTimeBar, currentTimeBarColor, }: TodayEventsProps) => import("react/jsx-runtime").JSX.Element;
16
+ export default TodayEvents;
@@ -0,0 +1,5 @@
1
+ interface AuxProps {
2
+ children: React.ReactNode;
3
+ }
4
+ declare const DateProvider: ({ children }: AuxProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default DateProvider;
@@ -0,0 +1,14 @@
1
+ interface EditorDatePickerProps {
2
+ type?: "date" | "datetime";
3
+ label?: string;
4
+ variant?: "standard" | "filled" | "outlined";
5
+ value: Date | string;
6
+ name: string;
7
+ onChange(name: string, date: Date): void;
8
+ error?: boolean;
9
+ errMsg?: string;
10
+ touched?: boolean;
11
+ required?: boolean;
12
+ }
13
+ declare const EditorDatePicker: ({ type, value, label, name, onChange, variant, error, errMsg, touched, required, }: EditorDatePickerProps) => import("react/jsx-runtime").JSX.Element;
14
+ export { EditorDatePicker };
@@ -0,0 +1,19 @@
1
+ interface EditorInputProps {
2
+ variant?: "standard" | "filled" | "outlined";
3
+ label?: string;
4
+ placeholder?: string;
5
+ required?: boolean;
6
+ min?: number;
7
+ max?: number;
8
+ email?: boolean;
9
+ decimal?: boolean;
10
+ disabled?: boolean;
11
+ multiline?: boolean;
12
+ rows?: number;
13
+ value: string;
14
+ name: string;
15
+ onChange(name: string, value: string, isValid: boolean): void;
16
+ touched?: boolean;
17
+ }
18
+ declare const EditorInput: ({ variant, label, placeholder, value, name, required, min, max, email, decimal, onChange, disabled, multiline, rows, touched, }: EditorInputProps) => import("react/jsx-runtime").JSX.Element;
19
+ export { EditorInput };
@@ -0,0 +1,22 @@
1
+ export type SelectOption = {
2
+ id: string | number;
3
+ text: string;
4
+ value: any;
5
+ };
6
+ interface EditorSelectProps {
7
+ options: Array<SelectOption>;
8
+ value: string;
9
+ name: string;
10
+ onChange(name: string, value: string, isValid: boolean): void;
11
+ variant?: "standard" | "filled" | "outlined";
12
+ label?: string;
13
+ placeholder?: string;
14
+ required?: boolean;
15
+ disabled?: boolean;
16
+ touched?: boolean;
17
+ loading?: boolean;
18
+ multiple?: "default" | "chips";
19
+ errMsg?: string;
20
+ }
21
+ declare const EditorSelect: ({ options, value, name, required, onChange, label, disabled, touched, variant, loading, multiple, placeholder, errMsg, }: EditorSelectProps) => import("react/jsx-runtime").JSX.Element;
22
+ export { EditorSelect };
@@ -0,0 +1,8 @@
1
+ import { DefaultResource } from '../../types';
2
+ type Props = {
3
+ daysList: Date[];
4
+ resource?: DefaultResource;
5
+ eachWeekStart: Date[];
6
+ };
7
+ declare const MonthTable: ({ daysList, resource, eachWeekStart }: Props) => import("react/jsx-runtime").JSX.Element;
8
+ export default MonthTable;
@@ -0,0 +1,6 @@
1
+ interface DayDateBtnProps {
2
+ selectedDate: Date;
3
+ onChange(value: Date): void;
4
+ }
5
+ declare const DayDateBtn: ({ selectedDate, onChange }: DayDateBtnProps) => import("react/jsx-runtime").JSX.Element;
6
+ export { DayDateBtn };
@@ -0,0 +1,6 @@
1
+ interface MonthDateBtnProps {
2
+ selectedDate: Date;
3
+ onChange(value: Date): void;
4
+ }
5
+ declare const MonthDateBtn: ({ selectedDate, onChange }: MonthDateBtnProps) => import("react/jsx-runtime").JSX.Element;
6
+ export { MonthDateBtn };
@@ -0,0 +1,3 @@
1
+ export type View = "month" | "week" | "day";
2
+ declare const Navigation: () => import("react/jsx-runtime").JSX.Element | null;
3
+ export { Navigation };
@@ -0,0 +1,8 @@
1
+ import { WeekProps } from '../../types';
2
+ interface WeekDateBtnProps {
3
+ selectedDate: Date;
4
+ onChange(value: Date): void;
5
+ weekProps: WeekProps;
6
+ }
7
+ declare const WeekDateBtn: ({ selectedDate, onChange, weekProps }: WeekDateBtnProps) => import("react/jsx-runtime").JSX.Element;
8
+ export { WeekDateBtn };
@@ -0,0 +1,11 @@
1
+ import { DefaultResource, ProcessedEvent } from '../../types';
2
+ type Props = {
3
+ daysList: Date[];
4
+ hours: Date[];
5
+ cellHeight: number;
6
+ minutesHeight: number;
7
+ resource?: DefaultResource;
8
+ resourcedEvents: ProcessedEvent[];
9
+ };
10
+ declare const WeekTable: ({ daysList, hours, cellHeight, minutesHeight, resourcedEvents, resource, }: Props) => import("react/jsx-runtime").JSX.Element;
11
+ export default WeekTable;
@@ -0,0 +1,4 @@
1
+ export declare const BORDER_HEIGHT = 1;
2
+ export declare const MULTI_DAY_EVENT_HEIGHT = 28;
3
+ export declare const MONTH_NUMBER_HEIGHT = 27;
4
+ export declare const MONTH_BAR_HEIGHT = 23;
@@ -0,0 +1,78 @@
1
+ import { View } from '../components/nav/Navigation';
2
+ import { DefaultResource, FieldProps, ProcessedEvent, ResourceFields, SchedulerProps } from '../types';
3
+ import { StateEvent } from '../views/Editor';
4
+ export declare const getOneView: (state: Partial<SchedulerProps>) => View;
5
+ export declare const getAvailableViews: (state: SchedulerProps) => View[];
6
+ export declare const arraytizeFieldVal: (field: FieldProps, val: any, event?: StateEvent) => {
7
+ value: any;
8
+ validity: any;
9
+ };
10
+ export declare const getResourcedEvents: (events: ProcessedEvent[], resource: DefaultResource, resourceFields: ResourceFields, fields: FieldProps[]) => ProcessedEvent[];
11
+ export declare const traversCrossingEvents: (todayEvents: ProcessedEvent[], event: ProcessedEvent) => ProcessedEvent[];
12
+ export declare const calcMinuteHeight: (cellHeight: number, step: number) => number;
13
+ export declare const calcCellHeight: (tableHeight: number, hoursLength: number) => number;
14
+ export declare const differenceInDaysOmitTime: (start: Date, end: Date) => number;
15
+ export declare const convertRRuleDateToDate: (rruleDate: Date) => Date;
16
+ export declare const getRecurrencesForDate: (event: ProcessedEvent, today: Date, timeZone?: string) => {
17
+ start: Date;
18
+ end: Date;
19
+ convertedTz: boolean;
20
+ event_id: number | string;
21
+ title: React.ReactNode;
22
+ subtitle?: React.ReactNode;
23
+ recurring?: import('rrule').RRule;
24
+ disabled?: boolean;
25
+ color?: string;
26
+ textColor?: string;
27
+ editable?: boolean;
28
+ deletable?: boolean;
29
+ draggable?: boolean;
30
+ allDay?: boolean;
31
+ agendaAvatar?: React.ReactElement | string;
32
+ _originalStart?: Date;
33
+ _originalEnd?: Date;
34
+ _hasPrev?: boolean;
35
+ _hasNext?: boolean;
36
+ }[];
37
+ export declare const filterTodayEvents: (events: ProcessedEvent[], today: Date, timeZone?: string, forceInlineMultiDay?: boolean) => ProcessedEvent[];
38
+ export declare const filterTodayAgendaEvents: (events: ProcessedEvent[], today: Date) => ProcessedEvent[];
39
+ export declare const sortEventsByTheLengthest: (events: ProcessedEvent[]) => ProcessedEvent[];
40
+ export declare const sortEventsByTheEarliest: (events: ProcessedEvent[]) => ProcessedEvent[];
41
+ export declare const filterMultiDaySlot: (events: ProcessedEvent[], date: Date | Date[], timeZone?: string, lengthOnly?: boolean, forceInlineMultiDay?: boolean) => ProcessedEvent[];
42
+ export declare const convertEventTimeZone: (event: ProcessedEvent, timeZone?: string) => {
43
+ start: Date;
44
+ end: Date;
45
+ convertedTz: boolean;
46
+ event_id: number | string;
47
+ title: React.ReactNode;
48
+ subtitle?: React.ReactNode;
49
+ recurring?: import('rrule').RRule;
50
+ disabled?: boolean;
51
+ color?: string;
52
+ textColor?: string;
53
+ editable?: boolean;
54
+ deletable?: boolean;
55
+ draggable?: boolean;
56
+ allDay?: boolean;
57
+ agendaAvatar?: React.ReactElement | string;
58
+ _originalStart?: Date;
59
+ _originalEnd?: Date;
60
+ _hasPrev?: boolean;
61
+ _hasNext?: boolean;
62
+ };
63
+ export declare const getTimeZonedDate: (date: Date, timeZone?: string) => Date;
64
+ /**
65
+ * Performs the reverse of getTimeZonedDate, IE: the given date is assumed
66
+ * to already be in the provided timeZone and is reverted to the local
67
+ * browser's timeZone.
68
+ * @param date The date to convert.
69
+ * @param timeZone The timeZone to convert from.
70
+ * @returns A new date reverted from the given timeZone to local time.
71
+ */
72
+ export declare const revertTimeZonedDate: (date: Date, timeZone?: string) => Date;
73
+ export declare const isTimeZonedToday: ({ dateLeft, dateRight, timeZone, }: {
74
+ dateLeft: Date;
75
+ dateRight?: Date;
76
+ timeZone?: string;
77
+ }) => boolean;
78
+ export declare const getHourFormat: (hourFormat: "12" | "24") => "hh:mm a" | "HH:mm";
@@ -0,0 +1,5 @@
1
+ declare const useArrowDisable: () => {
2
+ prevDisabled: boolean;
3
+ nextDisabled: boolean;
4
+ };
5
+ export default useArrowDisable;
@@ -0,0 +1,18 @@
1
+ import { DragEvent } from 'react';
2
+ interface Props {
3
+ start: Date;
4
+ end: Date;
5
+ resourceKey: string;
6
+ resourceVal: string | number;
7
+ }
8
+ export declare const useCellAttributes: ({ start, end, resourceKey, resourceVal }: Props) => {
9
+ [x: string]: string | number | boolean | ((e: DragEvent<HTMLButtonElement>) => void);
10
+ tabIndex: number;
11
+ disableRipple: boolean;
12
+ onClick: () => void;
13
+ onDragOver: (e: DragEvent<HTMLButtonElement>) => void;
14
+ onDragEnter: (e: DragEvent<HTMLButtonElement>) => void;
15
+ onDragLeave: (e: DragEvent<HTMLButtonElement>) => void;
16
+ onDrop: (e: DragEvent<HTMLButtonElement>) => void;
17
+ };
18
+ export {};
@@ -0,0 +1,10 @@
1
+ import { DragEvent } from 'react';
2
+ import { ProcessedEvent } from '../types';
3
+ declare const useDragAttributes: (event: ProcessedEvent) => {
4
+ draggable: boolean;
5
+ onDragStart: (e: DragEvent<HTMLElement>) => void;
6
+ onDragEnd: (e: DragEvent<HTMLElement>) => void;
7
+ onDragOver: (e: DragEvent<HTMLElement>) => void;
8
+ onDragEnter: (e: DragEvent<HTMLElement>) => void;
9
+ };
10
+ export default useDragAttributes;
@@ -0,0 +1,7 @@
1
+ import { ProcessedEvent } from '../types';
2
+ declare const useEventPermissions: (event: ProcessedEvent) => {
3
+ canEdit: boolean | undefined;
4
+ canDelete: boolean | undefined;
5
+ canDrag: boolean | undefined;
6
+ };
7
+ export default useEventPermissions;
@@ -0,0 +1,2 @@
1
+ declare const useStore: () => import('../store/types').Store;
2
+ export default useStore;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The solution to make headers sticky with overflow
3
+ */
4
+ declare const useSyncScroll: () => {
5
+ headersRef: import('react').RefObject<HTMLDivElement | null>;
6
+ bodyRef: import('react').RefObject<HTMLDivElement | null>;
7
+ };
8
+ export default useSyncScroll;
@@ -0,0 +1,4 @@
1
+ export declare function useWindowResize(): {
2
+ width: number;
3
+ height: number;
4
+ };
@@ -0,0 +1,3 @@
1
+ import { Scheduler as SchedulerProps, SchedulerRef } from './types';
2
+ declare const Scheduler: import('react').ForwardRefExoticComponent<SchedulerProps & import('react').RefAttributes<SchedulerRef>>;
3
+ export { Scheduler };