@koine/react 2.0.0-beta.76 → 2.0.0-beta.78

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 (294) hide show
  1. package/FaviconTags.cjs.d.ts +2 -0
  2. package/FaviconTags.cjs.default.js +1 -0
  3. package/FaviconTags.cjs.js +12 -0
  4. package/FaviconTags.cjs.mjs +2 -0
  5. package/FaviconTags.esm.js +7 -0
  6. package/Meta.cjs.d.ts +2 -0
  7. package/Meta.cjs.default.js +1 -0
  8. package/Meta.cjs.js +12 -0
  9. package/Meta.cjs.mjs +2 -0
  10. package/Meta.esm.js +7 -0
  11. package/NoJs.cjs.d.ts +2 -0
  12. package/NoJs.cjs.default.js +1 -0
  13. package/NoJs.cjs.js +14 -0
  14. package/NoJs.cjs.mjs +2 -0
  15. package/NoJs.esm.js +9 -0
  16. package/Polymorphic.cjs.d.ts +1 -0
  17. package/Polymorphic.cjs.default.js +1 -0
  18. package/Polymorphic.cjs.js +2 -0
  19. package/Polymorphic.cjs.mjs +2 -0
  20. package/Polymorphic.esm.js +1 -0
  21. package/README.md +1 -0
  22. package/calendar.cjs.d.ts +1 -0
  23. package/calendar.cjs.default.js +1 -0
  24. package/calendar.cjs.js +588 -0
  25. package/calendar.cjs.mjs +2 -0
  26. package/calendar.esm.js +561 -0
  27. package/classed.cjs.d.ts +2 -0
  28. package/classed.cjs.default.js +1 -0
  29. package/classed.cjs.js +48 -0
  30. package/classed.cjs.mjs +2 -0
  31. package/classed.d.ts +1 -1
  32. package/classed.esm.js +43 -0
  33. package/createUseMediaQueryWidth.cjs.d.ts +2 -0
  34. package/createUseMediaQueryWidth.cjs.default.js +1 -0
  35. package/createUseMediaQueryWidth.cjs.js +45 -0
  36. package/createUseMediaQueryWidth.cjs.mjs +2 -0
  37. package/createUseMediaQueryWidth.esm.js +40 -0
  38. package/extendComponent.cjs.d.ts +2 -0
  39. package/extendComponent.cjs.default.js +1 -0
  40. package/extendComponent.cjs.js +16 -0
  41. package/extendComponent.cjs.mjs +2 -0
  42. package/extendComponent.esm.js +11 -0
  43. package/forms.cjs.d.ts +1 -0
  44. package/forms.cjs.default.js +1 -0
  45. package/forms.cjs.js +37 -0
  46. package/forms.cjs.mjs +2 -0
  47. package/forms.esm.js +32 -0
  48. package/index.cjs.d.ts +1 -0
  49. package/index.cjs.default.js +1 -0
  50. package/index.cjs.js +63 -0
  51. package/index.cjs.mjs +2 -0
  52. package/index.esm.js +30 -0
  53. package/mergeRefs.cjs.d.ts +2 -0
  54. package/mergeRefs.cjs.default.js +1 -0
  55. package/mergeRefs.cjs.js +19 -0
  56. package/mergeRefs.cjs.mjs +2 -0
  57. package/mergeRefs.esm.js +14 -0
  58. package/package.json +110 -122
  59. package/types.cjs.d.ts +1 -0
  60. package/types.cjs.default.js +1 -0
  61. package/types.cjs.js +2 -0
  62. package/types.cjs.mjs +2 -0
  63. package/types.esm.js +1 -0
  64. package/useAsyncFn.cjs.d.ts +2 -0
  65. package/useAsyncFn.cjs.default.js +1 -0
  66. package/useAsyncFn.cjs.js +33 -0
  67. package/useAsyncFn.cjs.mjs +2 -0
  68. package/useAsyncFn.esm.js +28 -0
  69. package/useFirstMountState.cjs.d.ts +2 -0
  70. package/useFirstMountState.cjs.default.js +1 -0
  71. package/useFirstMountState.cjs.js +17 -0
  72. package/useFirstMountState.cjs.mjs +2 -0
  73. package/useFirstMountState.esm.js +12 -0
  74. package/useFixedOffset.cjs.d.ts +2 -0
  75. package/useFixedOffset.cjs.default.js +1 -0
  76. package/useFixedOffset.cjs.js +49 -0
  77. package/useFixedOffset.cjs.mjs +2 -0
  78. package/useFixedOffset.esm.js +44 -0
  79. package/useFocus.cjs.d.ts +2 -0
  80. package/useFocus.cjs.default.js +1 -0
  81. package/useFocus.cjs.js +16 -0
  82. package/useFocus.cjs.mjs +2 -0
  83. package/useFocus.esm.js +11 -0
  84. package/useInterval.cjs.d.ts +2 -0
  85. package/useInterval.cjs.default.js +1 -0
  86. package/useInterval.cjs.js +27 -0
  87. package/useInterval.cjs.mjs +2 -0
  88. package/useInterval.esm.js +22 -0
  89. package/useIsomorphicLayoutEffect.cjs.d.ts +2 -0
  90. package/useIsomorphicLayoutEffect.cjs.default.js +1 -0
  91. package/useIsomorphicLayoutEffect.cjs.js +11 -0
  92. package/useIsomorphicLayoutEffect.cjs.mjs +2 -0
  93. package/useIsomorphicLayoutEffect.d.ts +2 -2
  94. package/useIsomorphicLayoutEffect.esm.js +6 -0
  95. package/useKeyUp.cjs.d.ts +2 -0
  96. package/useKeyUp.cjs.default.js +1 -0
  97. package/useKeyUp.cjs.js +23 -0
  98. package/useKeyUp.cjs.mjs +2 -0
  99. package/useKeyUp.esm.js +18 -0
  100. package/useMeasure.cjs.d.ts +2 -0
  101. package/useMeasure.cjs.default.js +1 -0
  102. package/useMeasure.cjs.js +126 -0
  103. package/useMeasure.cjs.mjs +2 -0
  104. package/useMeasure.esm.js +121 -0
  105. package/useMountedState.cjs.d.ts +2 -0
  106. package/useMountedState.cjs.default.js +1 -0
  107. package/useMountedState.cjs.js +20 -0
  108. package/useMountedState.cjs.mjs +2 -0
  109. package/useMountedState.esm.js +15 -0
  110. package/useNavigateAway.cjs.d.ts +2 -0
  111. package/useNavigateAway.cjs.default.js +1 -0
  112. package/useNavigateAway.cjs.js +32 -0
  113. package/useNavigateAway.cjs.mjs +2 -0
  114. package/useNavigateAway.esm.js +27 -0
  115. package/usePrevious.cjs.d.ts +2 -0
  116. package/usePrevious.cjs.default.js +1 -0
  117. package/usePrevious.cjs.js +16 -0
  118. package/usePrevious.cjs.mjs +2 -0
  119. package/usePrevious.esm.js +11 -0
  120. package/usePreviousRef.cjs.d.ts +2 -0
  121. package/usePreviousRef.cjs.default.js +1 -0
  122. package/usePreviousRef.cjs.js +16 -0
  123. package/usePreviousRef.cjs.mjs +2 -0
  124. package/usePreviousRef.esm.js +11 -0
  125. package/useScrollPosition.cjs.d.ts +2 -0
  126. package/useScrollPosition.cjs.default.js +1 -0
  127. package/useScrollPosition.cjs.js +65 -0
  128. package/useScrollPosition.cjs.mjs +2 -0
  129. package/useScrollPosition.esm.js +60 -0
  130. package/useScrollThreshold.cjs.d.ts +2 -0
  131. package/useScrollThreshold.cjs.default.js +1 -0
  132. package/useScrollThreshold.cjs.js +33 -0
  133. package/useScrollThreshold.cjs.mjs +2 -0
  134. package/useScrollThreshold.esm.js +28 -0
  135. package/useScrollTo.cjs.d.ts +2 -0
  136. package/useScrollTo.cjs.default.js +1 -0
  137. package/useScrollTo.cjs.js +25 -0
  138. package/useScrollTo.cjs.mjs +2 -0
  139. package/useScrollTo.esm.js +20 -0
  140. package/useSmoothScroll.cjs.d.ts +2 -0
  141. package/useSmoothScroll.cjs.default.js +1 -0
  142. package/useSmoothScroll.cjs.js +40 -0
  143. package/useSmoothScroll.cjs.mjs +2 -0
  144. package/useSmoothScroll.esm.js +35 -0
  145. package/useSpinDelay.cjs.d.ts +2 -0
  146. package/useSpinDelay.cjs.default.js +1 -0
  147. package/useSpinDelay.cjs.js +43 -0
  148. package/useSpinDelay.cjs.mjs +2 -0
  149. package/useSpinDelay.esm.js +38 -0
  150. package/useTraceUpdate.cjs.d.ts +2 -0
  151. package/useTraceUpdate.cjs.default.js +1 -0
  152. package/useTraceUpdate.cjs.js +24 -0
  153. package/useTraceUpdate.cjs.mjs +2 -0
  154. package/useTraceUpdate.esm.js +19 -0
  155. package/useUpdateEffect.cjs.d.ts +2 -0
  156. package/useUpdateEffect.cjs.default.js +1 -0
  157. package/useUpdateEffect.cjs.js +18 -0
  158. package/useUpdateEffect.cjs.mjs +2 -0
  159. package/useUpdateEffect.esm.js +13 -0
  160. package/useWindowSize.cjs.d.ts +2 -0
  161. package/useWindowSize.cjs.default.js +1 -0
  162. package/useWindowSize.cjs.js +27 -0
  163. package/useWindowSize.cjs.mjs +2 -0
  164. package/useWindowSize.esm.js +22 -0
  165. package/FaviconTags.js +0 -1
  166. package/Meta.js +0 -1
  167. package/NoJs.js +0 -1
  168. package/Polymorphic.js +0 -1
  169. package/calendar/CalendarDaygridCell.js +0 -1
  170. package/calendar/CalendarDaygridNav.js +0 -1
  171. package/calendar/CalendarDaygridTable.js +0 -1
  172. package/calendar/CalendarLegend.js +0 -1
  173. package/calendar/calendar-api-google.js +0 -1
  174. package/calendar/types.js +0 -1
  175. package/calendar/useCalendar.js +0 -1
  176. package/calendar/useDateLocale.js +0 -1
  177. package/calendar/utils.js +0 -1
  178. package/calendar.js +0 -1
  179. package/cjs/FaviconTags.d.ts +0 -9
  180. package/cjs/FaviconTags.js +0 -1
  181. package/cjs/Meta.d.ts +0 -5
  182. package/cjs/Meta.js +0 -1
  183. package/cjs/NoJs.d.ts +0 -3
  184. package/cjs/NoJs.js +0 -1
  185. package/cjs/Polymorphic.d.ts +0 -26
  186. package/cjs/Polymorphic.js +0 -1
  187. package/cjs/calendar/CalendarDaygridCell.d.ts +0 -35
  188. package/cjs/calendar/CalendarDaygridCell.js +0 -1
  189. package/cjs/calendar/CalendarDaygridNav.d.ts +0 -27
  190. package/cjs/calendar/CalendarDaygridNav.js +0 -1
  191. package/cjs/calendar/CalendarDaygridTable.d.ts +0 -25
  192. package/cjs/calendar/CalendarDaygridTable.js +0 -1
  193. package/cjs/calendar/CalendarLegend.d.ts +0 -18
  194. package/cjs/calendar/CalendarLegend.js +0 -1
  195. package/cjs/calendar/calendar-api-google.d.ts +0 -10
  196. package/cjs/calendar/calendar-api-google.js +0 -1
  197. package/cjs/calendar/types.d.ts +0 -62
  198. package/cjs/calendar/types.js +0 -1
  199. package/cjs/calendar/useCalendar.d.ts +0 -35
  200. package/cjs/calendar/useCalendar.js +0 -1
  201. package/cjs/calendar/useDateLocale.d.ts +0 -2
  202. package/cjs/calendar/useDateLocale.js +0 -1
  203. package/cjs/calendar/utils.d.ts +0 -11
  204. package/cjs/calendar/utils.js +0 -1
  205. package/cjs/calendar.d.ts +0 -7
  206. package/cjs/calendar.js +0 -1
  207. package/cjs/classed.d.ts +0 -8
  208. package/cjs/classed.js +0 -1
  209. package/cjs/createUseMediaQueryWidth.d.ts +0 -6
  210. package/cjs/createUseMediaQueryWidth.js +0 -1
  211. package/cjs/extendComponent.d.ts +0 -16
  212. package/cjs/extendComponent.js +0 -1
  213. package/cjs/forms/antispam.d.ts +0 -27
  214. package/cjs/forms/antispam.js +0 -1
  215. package/cjs/forms.d.ts +0 -1
  216. package/cjs/forms.js +0 -1
  217. package/cjs/index.d.ts +0 -28
  218. package/cjs/index.js +0 -1
  219. package/cjs/mergeRefs.d.ts +0 -2
  220. package/cjs/mergeRefs.js +0 -1
  221. package/cjs/package.json +0 -31
  222. package/cjs/types.d.ts +0 -2
  223. package/cjs/types.js +0 -1
  224. package/cjs/useAsyncFn.d.ts +0 -24
  225. package/cjs/useAsyncFn.js +0 -1
  226. package/cjs/useFirstMountState.d.ts +0 -2
  227. package/cjs/useFirstMountState.js +0 -1
  228. package/cjs/useFixedOffset.d.ts +0 -2
  229. package/cjs/useFixedOffset.js +0 -1
  230. package/cjs/useFocus.d.ts +0 -2
  231. package/cjs/useFocus.js +0 -1
  232. package/cjs/useInterval.d.ts +0 -2
  233. package/cjs/useInterval.js +0 -1
  234. package/cjs/useIsomorphicLayoutEffect.d.ts +0 -3
  235. package/cjs/useIsomorphicLayoutEffect.js +0 -1
  236. package/cjs/useKeyUp.d.ts +0 -2
  237. package/cjs/useKeyUp.js +0 -1
  238. package/cjs/useMeasure.d.ts +0 -22
  239. package/cjs/useMeasure.js +0 -1
  240. package/cjs/useMountedState.d.ts +0 -2
  241. package/cjs/useMountedState.js +0 -1
  242. package/cjs/useNavigateAway.d.ts +0 -3
  243. package/cjs/useNavigateAway.js +0 -1
  244. package/cjs/usePrevious.d.ts +0 -2
  245. package/cjs/usePrevious.js +0 -1
  246. package/cjs/usePreviousRef.d.ts +0 -2
  247. package/cjs/usePreviousRef.js +0 -1
  248. package/cjs/useReveal.d.ts +0 -13
  249. package/cjs/useReveal.js +0 -1
  250. package/cjs/useScrollPosition.d.ts +0 -7
  251. package/cjs/useScrollPosition.js +0 -1
  252. package/cjs/useScrollThreshold.d.ts +0 -2
  253. package/cjs/useScrollThreshold.js +0 -1
  254. package/cjs/useScrollTo.d.ts +0 -2
  255. package/cjs/useScrollTo.js +0 -1
  256. package/cjs/useSmoothScroll.d.ts +0 -2
  257. package/cjs/useSmoothScroll.js +0 -1
  258. package/cjs/useSpinDelay.d.ts +0 -2
  259. package/cjs/useSpinDelay.js +0 -1
  260. package/cjs/useTraceUpdate.d.ts +0 -2
  261. package/cjs/useTraceUpdate.js +0 -1
  262. package/cjs/useUpdateEffect.d.ts +0 -3
  263. package/cjs/useUpdateEffect.js +0 -1
  264. package/cjs/useWindowSize.d.ts +0 -3
  265. package/cjs/useWindowSize.js +0 -1
  266. package/classed.js +0 -1
  267. package/createUseMediaQueryWidth.js +0 -1
  268. package/extendComponent.js +0 -1
  269. package/forms/antispam.js +0 -1
  270. package/forms.js +0 -1
  271. package/index.js +0 -1
  272. package/mergeRefs.js +0 -1
  273. package/types.js +0 -1
  274. package/useAsyncFn.js +0 -1
  275. package/useFirstMountState.js +0 -1
  276. package/useFixedOffset.js +0 -1
  277. package/useFocus.js +0 -1
  278. package/useInterval.js +0 -1
  279. package/useIsomorphicLayoutEffect.js +0 -1
  280. package/useKeyUp.js +0 -1
  281. package/useMeasure.js +0 -1
  282. package/useMountedState.js +0 -1
  283. package/useNavigateAway.js +0 -1
  284. package/usePrevious.js +0 -1
  285. package/usePreviousRef.js +0 -1
  286. package/useReveal.js +0 -1
  287. package/useScrollPosition.js +0 -1
  288. package/useScrollThreshold.js +0 -1
  289. package/useScrollTo.js +0 -1
  290. package/useSmoothScroll.js +0 -1
  291. package/useSpinDelay.js +0 -1
  292. package/useTraceUpdate.js +0 -1
  293. package/useUpdateEffect.js +0 -1
  294. package/useWindowSize.js +0 -1
@@ -0,0 +1,588 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var addDays = require('date-fns/addDays');
8
+ var addMonths = require('date-fns/addMonths');
9
+ var addWeeks = require('date-fns/addWeeks');
10
+ var endOfMonth = require('date-fns/endOfMonth');
11
+ var endOfWeek = require('date-fns/endOfWeek');
12
+ var isWithinInterval = require('date-fns/isWithinInterval');
13
+ var startOfWeek = require('date-fns/startOfWeek');
14
+ var subMonths = require('date-fns/subMonths');
15
+ var subWeeks = require('date-fns/subWeeks');
16
+ var format = require('date-fns/format');
17
+ var eachWeekOfInterval = require('date-fns/eachWeekOfInterval');
18
+ var reactSwipeable = require('react-swipeable');
19
+ var differenceInDays = require('date-fns/differenceInDays');
20
+ var subDays = require('date-fns/subDays');
21
+ var utils = require('@koine/utils');
22
+
23
+ function _interopNamespace(e) {
24
+ if (e && e.__esModule) return e;
25
+ var n = Object.create(null);
26
+ if (e) {
27
+ Object.keys(e).forEach(function (k) {
28
+ if (k !== 'default') {
29
+ var d = Object.getOwnPropertyDescriptor(e, k);
30
+ Object.defineProperty(n, k, d.get ? d : {
31
+ enumerable: true,
32
+ get: function () { return e[k]; }
33
+ });
34
+ }
35
+ });
36
+ }
37
+ n["default"] = e;
38
+ return Object.freeze(n);
39
+ }
40
+
41
+ let getEventTimestamp = (dateLike) => {
42
+ const date = new Date(dateLike);
43
+ date.setHours(0, 0, 0, 0);
44
+ return date.valueOf() / 1000;
45
+ };
46
+ let getDisplayTime = (date) => date.getHours() +
47
+ ":" +
48
+ "0".repeat(2 - date.getMinutes().toString().length) +
49
+ date.getMinutes();
50
+ let getStartDate = (date, view) => {
51
+ date.setHours(0, 0, 0);
52
+ if (view === "month") {
53
+ date.setDate(1);
54
+ }
55
+ else if (view === "week") {
56
+ date = startOfWeek.startOfWeek(date, { weekStartsOn: 1 });
57
+ }
58
+ return date;
59
+ };
60
+ let getEndDate = (start, view) => {
61
+ let end = start;
62
+ if (view === "month") {
63
+ end = endOfMonth.endOfMonth(start);
64
+ }
65
+ else if (view === "week") {
66
+ end = endOfWeek.endOfWeek(start, { weekStartsOn: 1 });
67
+ }
68
+ end.setHours(23, 59, 59);
69
+ return end;
70
+ };
71
+ let getPrevDate = (date, view) => view === "month" ? subMonths.subMonths(date, 1) : subWeeks.subWeeks(date, 1);
72
+ let getNextDate = (date, view) => view === "month" ? addMonths.addMonths(date, 1) : addWeeks.addWeeks(date, 1);
73
+ let isTodayInView = (start, end) => isWithinInterval.isWithinInterval(new Date(), { start, end });
74
+ let addCalendarEvents = (toAdd, toExtend) => {
75
+ for (const id in toAdd) {
76
+ const event = toAdd[id];
77
+ toExtend[id] = event;
78
+ }
79
+ return toExtend;
80
+ };
81
+ let getEventsByTimestamp = (events) => {
82
+ const output = {};
83
+ for (const uid in events) {
84
+ const event = events[uid];
85
+ event.days.forEach((timestamp) => {
86
+ output[timestamp] = (output[timestamp] || {});
87
+ output[timestamp][uid] = event;
88
+ });
89
+ }
90
+ return output;
91
+ };
92
+ let getSortedEvents = (events) => {
93
+ const output = [];
94
+ for (const uid in events) {
95
+ output.push(events[uid]);
96
+ }
97
+ output.sort((a, b) => {
98
+ const multi = Number(b.multi) - Number(a.multi);
99
+ const allDay = Number(b.allDay) - Number(a.allDay);
100
+ const start = a.start.getTime() - b.start.getTime();
101
+ const created = a.created.getTime() - b.created.getTime();
102
+ return multi || allDay || start || created;
103
+ });
104
+ return output;
105
+ };
106
+ const FREE_SLOT = 0;
107
+ const BUSY_SLOT = 1;
108
+ let processEventsInView = (eventsMap, calendarView, month, weeks) => {
109
+ const eventsByTimestamp = getEventsByTimestamp(eventsMap);
110
+ const eventsList = getSortedEvents(eventsMap);
111
+ const todayDate = new Date();
112
+ const todayTimestamp = getEventTimestamp(todayDate);
113
+ const startedAtTopMap = {};
114
+ const viewWeeks = [];
115
+ for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {
116
+ const viewWeek = {
117
+ props: { key: `week.${weekIdx}` },
118
+ days: [],
119
+ };
120
+ const weekStartDate = weeks[weekIdx];
121
+ const weekStartDay = weekStartDate.getDate();
122
+ const weekStartTimestamp = getEventTimestamp(new Date(weekStartDate));
123
+ const weekEndTimestamp = getEventTimestamp(addDays.addDays(new Date(weekStartDate), 6));
124
+ for (let dayNumber = 0; dayNumber < 7; dayNumber++) {
125
+ const dayDate = new Date(new Date(weekStartDate).setDate(weekStartDay + dayNumber));
126
+ const dayTimestamp = getEventTimestamp(dayDate);
127
+ const $isToday = todayTimestamp === dayTimestamp;
128
+ const $isOutOfRange = calendarView === "month" && dayDate.getMonth() !== month;
129
+ const contextualProps = {
130
+ $isToday,
131
+ $isOutOfRange,
132
+ };
133
+ const viewDay = {
134
+ props: { key: `day.${dayTimestamp}`, ...contextualProps },
135
+ timestamp: dayTimestamp + "",
136
+ label: dayDate.getDate() + "",
137
+ events: [],
138
+ };
139
+ if (eventsByTimestamp?.[dayTimestamp]) {
140
+ const verticalSlots = Object.keys(eventsByTimestamp[dayTimestamp]).map(() => FREE_SLOT);
141
+ for (let eventIdx = 0; eventIdx < eventsList.length; eventIdx++) {
142
+ const event = eventsList[eventIdx];
143
+ let width = 1;
144
+ let top = 0;
145
+ let firstOfMulti;
146
+ if (!event.daysMap[dayTimestamp]) {
147
+ continue;
148
+ }
149
+ if (event.multi) {
150
+ width = event.days.filter((t) => t >= weekStartTimestamp && t <= weekEndTimestamp).length;
151
+ if (event.days.indexOf(dayTimestamp) === 0 || dayNumber === 0) {
152
+ firstOfMulti = true;
153
+ }
154
+ }
155
+ if (startedAtTopMap[event.uid]) {
156
+ top = startedAtTopMap[event.uid];
157
+ }
158
+ else {
159
+ for (let verticalIdx = 0; verticalIdx < verticalSlots.length; verticalIdx++) {
160
+ const freeOrBusy = verticalSlots[verticalIdx];
161
+ if (freeOrBusy !== BUSY_SLOT) {
162
+ top = verticalIdx;
163
+ break;
164
+ }
165
+ }
166
+ }
167
+ verticalSlots[top] = BUSY_SLOT;
168
+ if (firstOfMulti) {
169
+ startedAtTopMap[event.uid] = top;
170
+ }
171
+ viewDay.events.push({
172
+ key: `event.${dayTimestamp}-${top}`,
173
+ ...contextualProps,
174
+ ...event,
175
+ isPast: todayDate > event.end,
176
+ firstOfMulti,
177
+ top,
178
+ width,
179
+ });
180
+ }
181
+ for (let i = 0; i < verticalSlots.length; i++) {
182
+ if (verticalSlots[i] !== BUSY_SLOT) {
183
+ viewDay.events.push({
184
+ key: `event.${dayTimestamp}-${i}}`,
185
+ placeholder: true,
186
+ top: i,
187
+ });
188
+ }
189
+ }
190
+ viewDay.events.sort((a, b) => a.top - b.top);
191
+ }
192
+ viewWeek.days.push(viewDay);
193
+ }
194
+ viewWeeks.push(viewWeek);
195
+ }
196
+ return viewWeeks;
197
+ };
198
+
199
+ const IconExpand = (props) => {
200
+ return (jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "currentColor", stroke: "none", ...props, children: [jsxRuntime.jsx("path", { d: "M0 0h24v24H0z" }), jsxRuntime.jsx("path", { d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" })] }));
201
+ };
202
+ const styleBtn = {
203
+ overflow: "hidden",
204
+ whiteSpace: "nowrap",
205
+ textOverflow: "ellipsis",
206
+ };
207
+ let CalendarDaygridCell = ({ eventClicked, setEventClicked, setEventHovered, view, maxEvents, events, calendarsMap, Cell = "div", CellOverflow = "div", CellEvent = "div", CellEventBtn = "div", CellEventTitle = "span", CellEventStart = "span", }) => {
208
+ const [isExpanded, expand] = react.useState(false);
209
+ const eventsWithoutPlaceholders = events.filter((event) => !event.placeholder);
210
+ return (jsxRuntime.jsx(Cell, { children: events.map((event, i) => {
211
+ if (i === maxEvents && !isExpanded) {
212
+ return (jsxRuntime.jsxs(CellOverflow, { onClick: () => expand(true), children: [jsxRuntime.jsx(IconExpand, {}), eventsWithoutPlaceholders.length - maxEvents] }, "overflowMessage" + i));
213
+ }
214
+ if (i > maxEvents && !isExpanded)
215
+ return null;
216
+ if (event.placeholder) {
217
+ return (jsxRuntime.jsx(react.Fragment, { children: jsxRuntime.jsx(CellEvent, { "$placeholder": true, children: jsxRuntime.jsx(CellEventBtn, { "aria-hidden": "true", style: { visibility: "hidden" }, "$placeholder": true, children: jsxRuntime.jsx(CellEventTitle, { children: "\u00A0" }) }) }) }, event.key));
218
+ }
219
+ const styleEvent = {
220
+ zIndex: event.firstOfMulti ? 1 : 0,
221
+ position: "relative",
222
+ width: event.firstOfMulti ? `${100 * event.width}%` : "100%",
223
+ };
224
+ if (!calendarsMap[event.calendar.id].on) {
225
+ styleBtn.display = "none";
226
+ }
227
+ const styledProps = {
228
+ $view: view,
229
+ $selected: eventClicked?.uid === event.uid,
230
+ $past: event.isPast,
231
+ $color: event.color,
232
+ $isOutOfRange: event.$isOutOfRange,
233
+ $isToday: event.$isToday,
234
+ };
235
+ return (jsxRuntime.jsx(react.Fragment, { children: jsxRuntime.jsx(CellEvent, { style: styleEvent, ...styledProps, children: jsxRuntime.jsx(CellEventBtn, { role: "button", style: styleBtn, ...styledProps, onClick: () => setEventClicked((prev) => prev?.uid === event.uid ? null : event), onMouseEnter: () => setEventHovered(event), onMouseLeave: () => setEventHovered(null), children: event.allDay ? (jsxRuntime.jsx(CellEventTitle, { children: event.title })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(CellEventStart, { children: getDisplayTime(event.start) }), jsxRuntime.jsx(CellEventTitle, { children: event.title })] })) }) }) }, event.key));
236
+ }) }));
237
+ };
238
+
239
+ let useDateLocale = (locale, defaultLocale = "en") => {
240
+ const [data, setData] = react.useState();
241
+ const [current, setCurrent] = react.useState(defaultLocale);
242
+ react.useEffect(() => {
243
+ const importLocaleFile = async () => {
244
+ const localeToSet = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('date-fns/locale/en-US')); });
245
+ setCurrent(locale || current);
246
+ setData(localeToSet.enUS);
247
+ };
248
+ if (locale !== current) {
249
+ importLocaleFile();
250
+ }
251
+ }, [locale, current]);
252
+ return data;
253
+ };
254
+
255
+ let KoineCalendarDaygridNav = ({ range, view, todayInView, handlePrev, handleNext, handleToday, handleView, locale: localeCode, NavRoot = "nav", NavTitle = "div", NavBtns = "div", NavBtnPrev = "button", NavBtnNext = "button", NavBtnToday = "button", NavBtnViewMonth = "button", NavBtnViewWeek = "button", }) => {
256
+ const [start, end] = range;
257
+ const locale = useDateLocale(localeCode);
258
+ const opts = { locale };
259
+ let formatted = "";
260
+ if (view === "month") {
261
+ formatted = format.format(start, "MMMM yyyy", opts);
262
+ }
263
+ if (view === "week") {
264
+ const inSameMonth = start.getMonth() === end.getMonth();
265
+ if (inSameMonth) {
266
+ formatted = format.format(start, "# MMMM yyyy", opts).replace("#", `${start.getDate()}-${end.getDate()}`);
267
+ }
268
+ else {
269
+ formatted = `${format.format(start, "d MMMM", opts)} - ${format.format(end, "d MMMM yyyy", opts)}`;
270
+ }
271
+ }
272
+ return (jsxRuntime.jsxs(NavRoot, { children: [jsxRuntime.jsxs(NavBtns, { children: [jsxRuntime.jsx(NavBtnPrev, { onClick: handlePrev }), jsxRuntime.jsx(NavBtnNext, { onClick: handleNext }), jsxRuntime.jsx(NavBtnToday, { onClick: handleToday, disabled: todayInView }), jsxRuntime.jsx(NavBtnViewMonth, { onClick: () => handleView("month"), disabled: view === "month" }), jsxRuntime.jsx(NavBtnViewWeek, { onClick: () => handleView("week"), disabled: view === "week" })] }), jsxRuntime.jsx(NavTitle, { range: range, formatted: formatted })] }));
273
+ };
274
+
275
+ function getView(range) {
276
+ const [start, end] = range;
277
+ const weeks = eachWeekOfInterval.eachWeekOfInterval({ start, end }, { weekStartsOn: 1 });
278
+ return {
279
+ month: start.getMonth(),
280
+ weeks,
281
+ };
282
+ }
283
+ let KoineCalendarDaygridTable = ({ locale: localeCode, handlePrev, handleNext, events, dayLabels, view, range, eventClicked, setEventClicked, eventHovered, setEventHovered, calendarsMap = {}, maxEvents = 5, Table = "table", TableHead = "thead", TableHeadCell = "th", TableBody = "tbody", TableBodyRow = "tr", TableBodyCell = "td", TableBodyCellDate = "div", Cell, CellOverflow, CellEvent, CellEventBtn, CellEventTitle, CellEventStart, }) => {
284
+ const restKoine = {
285
+ Cell,
286
+ CellOverflow,
287
+ CellEvent,
288
+ CellEventBtn,
289
+ CellEventTitle,
290
+ CellEventStart,
291
+ };
292
+ const [days, setDays] = react.useState(dayLabels || [0, 1, 2, 3, 4, 5, 6]);
293
+ const [weeksEvents, setWeeksEvents] = react.useState([]);
294
+ const locale = useDateLocale(localeCode);
295
+ const { month, weeks } = react.useMemo(() => getView(range), [range]);
296
+ const swipeableHandlers = reactSwipeable.useSwipeable({
297
+ onSwipedLeft: handleNext,
298
+ onSwipedRight: handlePrev,
299
+ });
300
+ react.useEffect(() => {
301
+ setWeeksEvents(processEventsInView(events, view, month, weeks));
302
+ }, [events, view, month, weeks]);
303
+ react.useEffect(() => {
304
+ if (locale && locale.localize && !dayLabels) {
305
+ setDays([1, 2, 3, 4, 5, 6, 0].map((i) => locale.localize.day(i, { width: "abbreviated" })));
306
+ }
307
+ }, [locale, dayLabels]);
308
+ return (jsxRuntime.jsxs(Table, { ...swipeableHandlers, children: [jsxRuntime.jsx(TableHead, { children: jsxRuntime.jsx("tr", { children: days.map((day) => (jsxRuntime.jsx(TableHeadCell, { scope: "column", children: day }, day))) }) }), jsxRuntime.jsx(TableBody, { children: weeksEvents.map((week, i) => (jsxRuntime.jsx(TableBodyRow, { ...week.props, children: week.days.map((day) => (jsxRuntime.jsxs(TableBodyCell, { ...day.props, children: [jsxRuntime.jsx(TableBodyCellDate, { ...day.props, children: day.label }), day.events.length > 0 && (jsxRuntime.jsx(CalendarDaygridCell, { eventClicked,
309
+ setEventClicked,
310
+ eventHovered,
311
+ setEventHovered,
312
+ view,
313
+ maxEvents,
314
+ events: day.events,
315
+ timestamp: day.timestamp,
316
+ calendarsMap, ...restKoine }))] }))) }))) })] }));
317
+ };
318
+
319
+ let KoineCalendarLegend = ({ calendarsMap = {}, toggleCalendarVisibility, LegendItem = "div", LegendItemStatus = "span", LegendItemLabel = "span", LegendItemEvents = "span", }) => {
320
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: Object.entries(calendarsMap).map(([id, calendar]) => (jsxRuntime.jsxs(LegendItem, { onClick: () => toggleCalendarVisibility(id), "$color": calendar.color, "$empty": calendar.events === 0, disabled: calendar.events === 0, children: [jsxRuntime.jsx(LegendItemStatus, { children: calendar.on ? "\u2b24" : "\u2b58" }), jsxRuntime.jsx(LegendItemLabel, { children: calendar.name }), jsxRuntime.jsx(LegendItemEvents, { children: calendar.events })] }, "CalendarLegend." + id))) }));
321
+ };
322
+
323
+ const baseURL = "https://www.googleapis.com/calendar/v3/calendars/";
324
+ let getCalendarsEventsFromGoogle = async ({ calendars, ...options }) => {
325
+ const allEvents = {};
326
+ await Promise.all(calendars.map(async (calendar) => {
327
+ const events = await getCalendarEventsFromGoogle({
328
+ calendar,
329
+ ...options,
330
+ });
331
+ addCalendarEvents(events, allEvents);
332
+ }));
333
+ return allEvents;
334
+ };
335
+ async function getCalendarEventsFromGoogle({ apiKey, calendar, timeZone = "", start, end, }) {
336
+ const events = {};
337
+ const params = new URLSearchParams({
338
+ calendarId: calendar.id,
339
+ timeZone,
340
+ singleEvents: "true",
341
+ maxAttendees: "1",
342
+ maxResults: "9999",
343
+ sanitizeHtml: "true",
344
+ timeMin: start.toISOString(),
345
+ timeMax: end.toISOString(),
346
+ key: apiKey || process.env["GOOGLE_CALENDAR_API_KEY"] || "",
347
+ }).toString();
348
+ const url = baseURL + calendar.id + "/events?" + params;
349
+ try {
350
+ const response = await fetch(url, { method: "GET" });
351
+ const data = (await response.json());
352
+ calendar.name = calendar.name || data.summary;
353
+ data.items.forEach((googleEvent) => {
354
+ const event = transformCalendarEventFromGoogle(googleEvent, calendar);
355
+ events[event.uid] = event;
356
+ });
357
+ }
358
+ catch (e) {
359
+ }
360
+ return events;
361
+ }
362
+ function transformCalendarEventFromGoogle(event, calendar) {
363
+ const created = new Date(event.created);
364
+ const link = event.htmlLink;
365
+ const title = event.summary;
366
+ const status = event.status;
367
+ const start = new Date(event.start.date || event.start.dateTime);
368
+ let end = new Date(event.end.date || event.end.dateTime);
369
+ const color = calendar.color;
370
+ const allDay = utils.isUndefined(event.end.dateTime) && utils.isString(event.end.date);
371
+ const location = event.location || "";
372
+ const description = event.description || "";
373
+ const uid = created.getTime() + "" + start.getTime();
374
+ if (allDay && end > start) {
375
+ end = subDays.subDays(end, 1);
376
+ end.setHours(23, 59, 59);
377
+ }
378
+ const days = getDays();
379
+ const daysMap = utils.arrayToLookup(days);
380
+ const multi = days.length > 1;
381
+ function getDays() {
382
+ const from = new Date(start);
383
+ const to = new Date(end);
384
+ const days = [getEventTimestamp(from)];
385
+ while (differenceInDays.differenceInDays(to, from)) {
386
+ from.setDate(from.getDate() + 1);
387
+ days.push(getEventTimestamp(from));
388
+ }
389
+ return days;
390
+ }
391
+ return {
392
+ calendar,
393
+ created,
394
+ link,
395
+ title,
396
+ status,
397
+ start,
398
+ end,
399
+ days,
400
+ daysMap,
401
+ multi,
402
+ color,
403
+ allDay,
404
+ location,
405
+ description,
406
+ uid,
407
+ };
408
+ }
409
+
410
+ let useCalendar = ({ locale, apiKey, calendars, events: initialEvents, start: initialStart, end: initialEnd, view: initialView = "month", timeZone = "", onError, }) => {
411
+ const [view, setView] = react.useState(initialView);
412
+ const start = initialStart || getStartDate(new Date(), view);
413
+ const end = initialEnd || getEndDate(start, view);
414
+ const [range, setRange] = react.useState([start, end]);
415
+ const [todayInView, setTodayInView] = react.useState(isTodayInView(start, end));
416
+ const [events, setEvents] = react.useState(initialEvents || {});
417
+ const [eventHovered, setEventHovered] = react.useState(null);
418
+ const [eventClicked, setEventClicked] = react.useState(null);
419
+ const [calendarsMap, updateCalendars] = react.useReducer((state, action) => {
420
+ const { type } = action;
421
+ switch (type) {
422
+ case "events": {
423
+ const events = action.payload;
424
+ return Object.entries(state).reduce((map, [id, calendar]) => {
425
+ map[id] = {
426
+ ...calendar,
427
+ events: events[id] || 0,
428
+ };
429
+ return map;
430
+ }, {});
431
+ }
432
+ case "visibility": {
433
+ const visible = action.payload;
434
+ if (typeof visible === "string") {
435
+ return {
436
+ ...state,
437
+ [visible]: {
438
+ ...state[visible],
439
+ on: !state[visible].on,
440
+ },
441
+ };
442
+ }
443
+ else {
444
+ return Object.entries(state).reduce((map, [id, calendar]) => {
445
+ map[id] = {
446
+ ...calendar,
447
+ on: visible.indexOf(id) > -1,
448
+ };
449
+ return map;
450
+ }, {});
451
+ }
452
+ }
453
+ default:
454
+ return state;
455
+ }
456
+ }, calendars.reduce((map, calendar) => {
457
+ map[calendar.id] = {
458
+ ...calendar,
459
+ name: calendar.name || "",
460
+ on: true,
461
+ events: 0,
462
+ };
463
+ return map;
464
+ }, {}));
465
+ const toggleCalendarVisibility = react.useCallback((idOrIds) => {
466
+ updateCalendars({ type: "visibility", payload: idOrIds });
467
+ }, [updateCalendars]);
468
+ const updateCalendarsBasedOnEvents = react.useCallback((events) => {
469
+ const payload = {};
470
+ for (const uid in events) {
471
+ const { id } = events[uid].calendar;
472
+ payload[id] = payload[id] || 0;
473
+ payload[id]++;
474
+ }
475
+ updateCalendars({ type: "events", payload });
476
+ }, []);
477
+ const loadCalendars = react.useCallback(async (calendars, start, end) => {
478
+ try {
479
+ const newEvents = await getCalendarsEventsFromGoogle({
480
+ apiKey,
481
+ calendars,
482
+ timeZone,
483
+ start,
484
+ end,
485
+ });
486
+ setEvents(newEvents);
487
+ }
488
+ catch (e) {
489
+ if (onError)
490
+ onError(e);
491
+ }
492
+ }, [setEvents, apiKey, timeZone, onError]);
493
+ const handleToday = react.useCallback(() => {
494
+ const [start, end] = range;
495
+ const newStart = getStartDate(new Date(), view);
496
+ const newEnd = getEndDate(newStart, view);
497
+ setRange([newStart, newEnd]);
498
+ if (start.getTime() !== newStart.getTime() ||
499
+ end.getTime() !== newEnd.getTime()) {
500
+ setEventClicked(null);
501
+ setEventHovered(null);
502
+ }
503
+ }, [view, range]);
504
+ const handlePrev = react.useCallback(() => {
505
+ setRange(([start]) => {
506
+ const newStart = getPrevDate(start, view);
507
+ const newEnd = getEndDate(newStart, view);
508
+ return [newStart, newEnd];
509
+ });
510
+ setEventClicked(null);
511
+ setEventHovered(null);
512
+ }, [view]);
513
+ const handleNext = react.useCallback(() => {
514
+ setRange(([start]) => {
515
+ const newStart = getNextDate(start, view);
516
+ const newEnd = getEndDate(newStart, view);
517
+ return [newStart, newEnd];
518
+ });
519
+ setEventClicked(null);
520
+ setEventHovered(null);
521
+ }, [view]);
522
+ const handleView = react.useCallback((newView) => {
523
+ const newStart = getStartDate(start, newView);
524
+ const newEnd = getEndDate(newStart, newView);
525
+ setRange([newStart, newEnd]);
526
+ setView(newView);
527
+ setEventClicked(null);
528
+ setEventHovered(null);
529
+ }, [start]);
530
+ react.useEffect(() => {
531
+ const [start, end] = range;
532
+ loadCalendars(calendars, start, end);
533
+ setTodayInView(isTodayInView(start, end));
534
+ }, [range]);
535
+ react.useEffect(() => {
536
+ if (events) {
537
+ updateCalendarsBasedOnEvents(events);
538
+ }
539
+ }, [events, updateCalendarsBasedOnEvents]);
540
+ react.useEffect(() => {
541
+ if (eventClicked) {
542
+ if (!calendarsMap[eventClicked.calendar.id].on) {
543
+ setEventClicked(null);
544
+ }
545
+ }
546
+ }, [calendarsMap, eventClicked, setEventClicked]);
547
+ return {
548
+ view,
549
+ eventClicked,
550
+ setEventClicked,
551
+ eventHovered,
552
+ setEventHovered,
553
+ getDaygridNavProps: () => ({
554
+ locale,
555
+ handlePrev,
556
+ handleNext,
557
+ handleToday,
558
+ handleView,
559
+ todayInView,
560
+ range,
561
+ view,
562
+ }),
563
+ getDaygridTableProps: () => ({
564
+ locale,
565
+ events,
566
+ eventClicked,
567
+ setEventClicked,
568
+ eventHovered,
569
+ setEventHovered,
570
+ handlePrev,
571
+ handleNext,
572
+ calendarsMap,
573
+ range,
574
+ view,
575
+ }),
576
+ getLegendProps: () => ({
577
+ calendarsMap,
578
+ toggleCalendarVisibility,
579
+ }),
580
+ };
581
+ };
582
+
583
+ exports.CalendarDaygridCell = CalendarDaygridCell;
584
+ exports.KoineCalendarDaygridNav = KoineCalendarDaygridNav;
585
+ exports.KoineCalendarDaygridTable = KoineCalendarDaygridTable;
586
+ exports.KoineCalendarLegend = KoineCalendarLegend;
587
+ exports.useCalendar = useCalendar;
588
+ exports.useDateLocale = useDateLocale;
@@ -0,0 +1,2 @@
1
+ export * from './calendar.cjs.js';
2
+ export { _default as default } from './calendar.cjs.default.js';