@koine/react 1.0.11 → 1.0.14

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 (323) hide show
  1. package/Alert/Alert.js +7 -13
  2. package/Animations/Reveal.js +12 -10
  3. package/Animations/Underline.js +3 -13
  4. package/Animations/useReveal.js +18 -17
  5. package/Autocomplete/AutocompleteDownshift.js +1 -1
  6. package/Autocomplete/AutocompleteDownshiftMultiselect.js +1 -1
  7. package/Autocomplete/AutocompleteMui.js +61 -56
  8. package/Autocomplete/AutocompleteReach.js +1 -1
  9. package/Autocomplete/components.js +17 -72
  10. package/Autocomplete/helpers.js +1 -1
  11. package/Bg/BgColor.js +14 -24
  12. package/Bg/BgPhoto.js +11 -54
  13. package/Bg/BgSvg.js +6 -9
  14. package/Breadcrumbs/Breadcrumbs.js +14 -54
  15. package/Buttons/Button.js +8 -73
  16. package/Buttons/ButtonComposite.js +20 -41
  17. package/Buttons/ButtonFab.js +4 -6
  18. package/Buttons/ButtonLink.js +7 -6
  19. package/Buttons/IconButton.js +5 -17
  20. package/Calendar/CalendarDaygridCell.js +20 -14
  21. package/Calendar/CalendarDaygridNav.js +10 -9
  22. package/Calendar/CalendarDaygridTable.js +32 -30
  23. package/Calendar/CalendarLegend.js +7 -2
  24. package/Calendar/calendar-api-google.js +101 -68
  25. package/Calendar/useCalendar.js +114 -113
  26. package/Calendar/utils.js +73 -74
  27. package/Carousel/Carousel.js +1 -1
  28. package/Carousel/CarouselCss.js +12 -26
  29. package/Collapsable/Collapsable.js +1 -1
  30. package/Debug/Debug.js +5 -17
  31. package/Details/Details.js +30 -27
  32. package/Dialog/DialogMui.js +22 -20
  33. package/Dialog/css/bare.js +17 -15
  34. package/Dialog/m/bare.js +17 -13
  35. package/Dialog/m/basic.js +2 -2
  36. package/Dialog/m/index.js +4 -4
  37. package/Dialog/sc/bare.js +25 -43
  38. package/Dialog/sc/framer.js +6 -6
  39. package/Dialog/sc/framerMaterial.js +6 -6
  40. package/Dialog/sc/material.js +17 -37
  41. package/Dialog/tw/bare.js +25 -19
  42. package/Dialog/tw/elegant.js +17 -15
  43. package/Dialog/tw/framer.js +6 -6
  44. package/Dialog/tw/framerMaterial.js +6 -6
  45. package/Dialog/tw/material.js +17 -15
  46. package/Editor/Editor--tiptap.js +14 -11
  47. package/Editor/components.js +6 -24
  48. package/Favicon/FaviconTags.js +2 -1
  49. package/Form/Form.js +30 -28
  50. package/Form/sc/bare.js +9 -18
  51. package/Forms/Checkbox/Checkbox.js +9 -15
  52. package/Forms/Feedback/Feedback.js +6 -7
  53. package/Forms/Field/Field.js +15 -26
  54. package/Forms/Field/FieldControl.js +19 -15
  55. package/Forms/Field/FieldHint.js +3 -5
  56. package/Forms/Input/Input.js +10 -16
  57. package/Forms/InputGroup/InputGroup.js +9 -36
  58. package/Forms/Label/Label.js +5 -23
  59. package/Forms/Password/Password.js +10 -23
  60. package/Forms/Radio/Radio.js +15 -18
  61. package/Forms/Switch/Switch.js +9 -39
  62. package/Forms/Textarea/Textarea.js +6 -7
  63. package/Forms/Textarea/TextareaRich.js +10 -24
  64. package/Forms/Toggle/Toggle.js +19 -67
  65. package/Forms/Toggle/useToggle.d.ts +1 -1
  66. package/Forms/Toggle/useToggle.js +30 -30
  67. package/Forms/antispam.js +12 -12
  68. package/Forms/helpers.js +7 -6
  69. package/Forms/styles.js +12 -43
  70. package/Gauge/Gauge.js +1 -1
  71. package/Grid/Grid.js +25 -51
  72. package/Hamburger/Hamburger.js +35 -47
  73. package/Header/useHeader.js +12 -12
  74. package/Hidden/Hidden.js +9 -13
  75. package/Img/sc/bare.js +3 -1
  76. package/Link/Link.js +3 -1
  77. package/Link/LinkBlank.js +8 -17
  78. package/Menu/Menu.js +3 -10
  79. package/MenuItem/MenuItem.js +3 -19
  80. package/Meta/Meta.js +3 -2
  81. package/NoJs/NoJs.js +2 -2
  82. package/Pagination/PaginationNav.js +26 -48
  83. package/Pagination/PaginationResults.js +7 -6
  84. package/Pill/Pill.js +6 -36
  85. package/Progress/ProgressCircular.js +9 -30
  86. package/Progress/ProgressLinear.js +8 -16
  87. package/Progress/ProgressOverlay.js +11 -27
  88. package/Rating/Rating.js +24 -44
  89. package/Rating/index.js +19 -15
  90. package/Select/SelectDownshift.js +1 -1
  91. package/Select/components.js +6 -12
  92. package/Sidebar/Sidebar.js +13 -38
  93. package/Spacing/Spacing.js +12 -12
  94. package/Sticky/Sticky.js +1 -1
  95. package/Sticky/StickyCss.js +4 -2
  96. package/Tabs/TabsMui.js +19 -16
  97. package/Tabs/tw/bare.js +13 -11
  98. package/Tabs/tw/material.js +15 -11
  99. package/Tabs/useTabs.js +16 -16
  100. package/Typography/CopyPasteVisible.js +3 -5
  101. package/Typography/Native.js +12 -45
  102. package/Typography/ReadMore.js +25 -51
  103. package/Typography/TextLoop.js +19 -22
  104. package/Typography/TypeStairs.js +20 -16
  105. package/helpers/classed.js +21 -18
  106. package/helpers/extend-component.js +6 -6
  107. package/hooks/useAsyncFn.js +18 -11
  108. package/hooks/useDateLocale.js +22 -13
  109. package/hooks/useEffectOnce.js +1 -1
  110. package/hooks/useFirstMountState.js +1 -1
  111. package/hooks/useFocus.js +3 -3
  112. package/hooks/useId.js +3 -2
  113. package/hooks/useIsomorphicLayoutEffect.js +1 -1
  114. package/hooks/useMount.js +2 -2
  115. package/hooks/useMountedState.js +4 -4
  116. package/hooks/usePrevious.js +2 -2
  117. package/hooks/useScrollPosition.js +20 -15
  118. package/hooks/useScrollTo.js +7 -5
  119. package/hooks/useTraceUpdate.js +4 -3
  120. package/hooks/useUpdateEffect.js +3 -3
  121. package/hooks/useWindowSize.js +3 -3
  122. package/m/MotionProvider.js +4 -2
  123. package/package.json +8 -7
  124. package/styles/Body.js +4 -8
  125. package/styles/Global.js +4 -36
  126. package/styles/media.js +41 -36
  127. package/styles/spacing.js +15 -16
  128. package/styles/styled.js +7 -21
  129. package/styles/theme--vanilla.js +20 -18
  130. package/styles/theme.js +11 -11
  131. package/node/Alert/Alert.js +0 -21
  132. package/node/Alert/index.js +0 -4
  133. package/node/Animations/Reveal.js +0 -19
  134. package/node/Animations/Underline.js +0 -19
  135. package/node/Animations/index.js +0 -6
  136. package/node/Animations/useReveal.js +0 -74
  137. package/node/Autocomplete/AutocompleteDownshift.js +0 -161
  138. package/node/Autocomplete/AutocompleteDownshiftMultiselect.js +0 -356
  139. package/node/Autocomplete/AutocompleteMui.js +0 -175
  140. package/node/Autocomplete/AutocompleteReach.js +0 -115
  141. package/node/Autocomplete/components.js +0 -93
  142. package/node/Autocomplete/helpers.js +0 -32
  143. package/node/Autocomplete/index.js +0 -7
  144. package/node/Bg/BgColor.js +0 -36
  145. package/node/Bg/BgPhoto.js +0 -64
  146. package/node/Bg/BgSvg.js +0 -20
  147. package/node/Bg/index.js +0 -6
  148. package/node/Breadcrumbs/Breadcrumbs.js +0 -72
  149. package/node/Breadcrumbs/index.js +0 -4
  150. package/node/Buttons/Button.js +0 -83
  151. package/node/Buttons/ButtonComposite.js +0 -54
  152. package/node/Buttons/ButtonFab.js +0 -12
  153. package/node/Buttons/ButtonLink.js +0 -15
  154. package/node/Buttons/IconButton.js +0 -23
  155. package/node/Buttons/index.js +0 -8
  156. package/node/Calendar/CalendarDaygridCell.js +0 -55
  157. package/node/Calendar/CalendarDaygridNav.js +0 -27
  158. package/node/Calendar/CalendarDaygridTable.js +0 -60
  159. package/node/Calendar/CalendarLegend.js +0 -15
  160. package/node/Calendar/calendar-api-google.js +0 -99
  161. package/node/Calendar/index.js +0 -9
  162. package/node/Calendar/types.js +0 -2
  163. package/node/Calendar/useCalendar.js +0 -186
  164. package/node/Calendar/utils.js +0 -217
  165. package/node/Carousel/Carousel.js +0 -381
  166. package/node/Carousel/CarouselCss.js +0 -42
  167. package/node/Carousel/index.js +0 -4
  168. package/node/Collapsable/Collapsable.js +0 -4
  169. package/node/Collapsable/CollapsableReach.js +0 -253
  170. package/node/Collapsable/index.js +0 -5
  171. package/node/Debug/Debug.js +0 -26
  172. package/node/Debug/index.js +0 -4
  173. package/node/Details/Details.js +0 -65
  174. package/node/Details/index.js +0 -4
  175. package/node/Dialog/DialogMui.js +0 -82
  176. package/node/Dialog/css/bare.js +0 -23
  177. package/node/Dialog/index.js +0 -5
  178. package/node/Dialog/m/bare.js +0 -51
  179. package/node/Dialog/m/basic.js +0 -35
  180. package/node/Dialog/m/index.js +0 -8
  181. package/node/Dialog/sc/bare.js +0 -65
  182. package/node/Dialog/sc/framer.js +0 -19
  183. package/node/Dialog/sc/framerMaterial.js +0 -19
  184. package/node/Dialog/sc/material.js +0 -45
  185. package/node/Dialog/tw/bare.js +0 -40
  186. package/node/Dialog/tw/elegant.js +0 -21
  187. package/node/Dialog/tw/framer.js +0 -19
  188. package/node/Dialog/tw/framerMaterial.js +0 -19
  189. package/node/Dialog/tw/material.js +0 -21
  190. package/node/Editor/Editor--tiptap.js +0 -29
  191. package/node/Editor/components.js +0 -34
  192. package/node/Editor/index.js +0 -4
  193. package/node/Favicon/FaviconTags.js +0 -18
  194. package/node/Favicon/index.js +0 -4
  195. package/node/Form/Form.js +0 -63
  196. package/node/Form/index.js +0 -4
  197. package/node/Form/sc/bare.js +0 -33
  198. package/node/Forms/Checkbox/Checkbox.js +0 -28
  199. package/node/Forms/Checkbox/index.js +0 -4
  200. package/node/Forms/Feedback/Feedback.js +0 -15
  201. package/node/Forms/Feedback/index.js +0 -4
  202. package/node/Forms/Field/Field.js +0 -64
  203. package/node/Forms/Field/FieldControl.js +0 -47
  204. package/node/Forms/Field/FieldHint.js +0 -10
  205. package/node/Forms/Field/index.js +0 -5
  206. package/node/Forms/Input/Input.js +0 -27
  207. package/node/Forms/Input/index.js +0 -4
  208. package/node/Forms/InputGroup/InputGroup.js +0 -47
  209. package/node/Forms/InputGroup/index.js +0 -4
  210. package/node/Forms/Label/Label.js +0 -28
  211. package/node/Forms/Label/index.js +0 -4
  212. package/node/Forms/Password/Password.js +0 -34
  213. package/node/Forms/Password/index.js +0 -4
  214. package/node/Forms/Radio/Radio.js +0 -32
  215. package/node/Forms/Radio/index.js +0 -4
  216. package/node/Forms/Switch/Switch.js +0 -54
  217. package/node/Forms/Switch/index.js +0 -4
  218. package/node/Forms/Textarea/Textarea.js +0 -17
  219. package/node/Forms/Textarea/TextareaRich.js +0 -46
  220. package/node/Forms/Textarea/index.js +0 -5
  221. package/node/Forms/Toggle/Toggle.js +0 -86
  222. package/node/Forms/Toggle/index.js +0 -4
  223. package/node/Forms/Toggle/useToggle.js +0 -149
  224. package/node/Forms/antispam.js +0 -61
  225. package/node/Forms/helpers.js +0 -51
  226. package/node/Forms/index.js +0 -19
  227. package/node/Forms/styles.js +0 -64
  228. package/node/Gauge/Gauge.js +0 -106
  229. package/node/Grid/Grid.js +0 -83
  230. package/node/Grid/index.js +0 -4
  231. package/node/Hamburger/Hamburger.js +0 -69
  232. package/node/Hamburger/index.js +0 -4
  233. package/node/Header/index.js +0 -4
  234. package/node/Header/useHeader.js +0 -34
  235. package/node/Hidden/Hidden.js +0 -18
  236. package/node/Hidden/index.js +0 -4
  237. package/node/Img/index.js +0 -4
  238. package/node/Img/sc/bare.js +0 -41
  239. package/node/Img/types.js +0 -2
  240. package/node/Link/Link.js +0 -6
  241. package/node/Link/LinkBlank.js +0 -31
  242. package/node/Link/index.js +0 -5
  243. package/node/Menu/Menu.js +0 -15
  244. package/node/Menu/index.js +0 -4
  245. package/node/MenuItem/MenuItem.js +0 -24
  246. package/node/MenuItem/index.js +0 -4
  247. package/node/Meta/Meta.js +0 -8
  248. package/node/Meta/index.js +0 -4
  249. package/node/NoJs/NoJs.js +0 -10
  250. package/node/NoJs/index.js +0 -4
  251. package/node/Pagination/PaginationNav.js +0 -88
  252. package/node/Pagination/PaginationResults.js +0 -15
  253. package/node/Pagination/index.js +0 -5
  254. package/node/Pill/Pill.js +0 -41
  255. package/node/Pill/index.js +0 -4
  256. package/node/Progress/ProgressCircular.js +0 -41
  257. package/node/Progress/ProgressLinear.js +0 -37
  258. package/node/Progress/ProgressOverlay.js +0 -45
  259. package/node/Progress/index.js +0 -6
  260. package/node/Rating/Rating.js +0 -97
  261. package/node/Rating/index.js +0 -53
  262. package/node/Select/SelectDownshift.js +0 -41
  263. package/node/Select/components.js +0 -22
  264. package/node/Select/index.js +0 -7
  265. package/node/Sidebar/Sidebar.js +0 -53
  266. package/node/Sidebar/index.js +0 -4
  267. package/node/Spacing/Spacing.js +0 -50
  268. package/node/Spacing/index.js +0 -4
  269. package/node/Sticky/Sticky.js +0 -222
  270. package/node/Sticky/StickyCss.js +0 -8
  271. package/node/Sticky/index.js +0 -4
  272. package/node/Tabs/TabsMui.js +0 -47
  273. package/node/Tabs/index.js +0 -4
  274. package/node/Tabs/sc/bare.js +0 -87
  275. package/node/Tabs/tw/bare.js +0 -19
  276. package/node/Tabs/tw/material.js +0 -17
  277. package/node/Tabs/useTabs.js +0 -48
  278. package/node/Typography/CopyPasteVisible.js +0 -10
  279. package/node/Typography/Native.js +0 -51
  280. package/node/Typography/ReadMore.js +0 -74
  281. package/node/Typography/TextLoop.js +0 -54
  282. package/node/Typography/TypeStairs.js +0 -49
  283. package/node/Typography/index.js +0 -8
  284. package/node/css/index.js +0 -36
  285. package/node/helpers/classed.js +0 -69
  286. package/node/helpers/extend-component.js +0 -16
  287. package/node/helpers/index.js +0 -5
  288. package/node/hooks/index.js +0 -18
  289. package/node/hooks/types.js +0 -2
  290. package/node/hooks/useAsyncFn.js +0 -33
  291. package/node/hooks/useDateLocale.js +0 -56
  292. package/node/hooks/useEffectOnce.js +0 -12
  293. package/node/hooks/useFirstMountState.js +0 -16
  294. package/node/hooks/useFocus.js +0 -15
  295. package/node/hooks/useId.js +0 -11
  296. package/node/hooks/useIsomorphicLayoutEffect.js +0 -11
  297. package/node/hooks/useMount.js +0 -13
  298. package/node/hooks/useMountedState.js +0 -19
  299. package/node/hooks/usePrevious.js +0 -12
  300. package/node/hooks/useScrollPosition.js +0 -79
  301. package/node/hooks/useScrollTo.js +0 -23
  302. package/node/hooks/useTraceUpdate.js +0 -24
  303. package/node/hooks/useUpdateEffect.js +0 -18
  304. package/node/hooks/useWindowSize.js +0 -17
  305. package/node/index.js +0 -8
  306. package/node/m/MotionProvider.js +0 -41
  307. package/node/m/index.js +0 -9
  308. package/node/m/lite.js +0 -4
  309. package/node/m/max.js +0 -4
  310. package/node/sc/index.js +0 -37
  311. package/node/scm/index.js +0 -36
  312. package/node/shared/index.js +0 -11
  313. package/node/styles/Body.js +0 -21
  314. package/node/styles/Global.js +0 -53
  315. package/node/styles/index.js +0 -10
  316. package/node/styles/media.js +0 -156
  317. package/node/styles/spacing.js +0 -53
  318. package/node/styles/styled.js +0 -31
  319. package/node/styles/theme--vanilla.js +0 -59
  320. package/node/styles/theme.js +0 -45
  321. package/node/tw/index.js +0 -36
  322. package/node/twm/index.js +0 -36
  323. package/node/types.js +0 -2
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KoineCalendarDaygridTable = void 0;
4
- const tslib_1 = require("tslib");
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- const react_1 = require("react");
7
- const eachWeekOfInterval_1 = tslib_1.__importDefault(require("date-fns/eachWeekOfInterval"));
8
- const react_swipeable_1 = require("react-swipeable");
9
- const hooks_1 = require("../hooks");
10
- const utils_1 = require("./utils");
11
- const CalendarDaygridCell_1 = require("./CalendarDaygridCell");
12
- function getView(range) {
13
- const [start, end] = range;
14
- const weeks = (0, eachWeekOfInterval_1.default)({ start, end }, { weekStartsOn: 1 });
15
- return {
16
- month: start.getMonth(),
17
- weeks,
18
- };
19
- }
20
- const 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, }) => {
21
- const restKoine = {
22
- Cell,
23
- CellOverflow,
24
- CellEvent,
25
- CellEventBtn,
26
- CellEventTitle,
27
- CellEventStart,
28
- };
29
- const [days, setDays] = (0, react_1.useState)(dayLabels || [0, 1, 2, 3, 4, 5, 6]);
30
- const [weeksEvents, setWeeksEvents] = (0, react_1.useState)([]);
31
- // const [days, setDays] = useState(dayLabels || [...Array(7).keys()]);
32
- const locale = (0, hooks_1.useDateLocale)(localeCode);
33
- const { month, weeks } = (0, react_1.useMemo)(() => getView(range), [range]);
34
- const swipeableHandlers = (0, react_swipeable_1.useSwipeable)({
35
- onSwipedLeft: handleNext,
36
- onSwipedRight: handlePrev,
37
- });
38
- (0, react_1.useEffect)(() => {
39
- setWeeksEvents((0, utils_1.processEventsInView)(events, view, month, weeks));
40
- }, [events, view, month, weeks]);
41
- (0, react_1.useEffect)(() => {
42
- if (locale && locale.localize && !dayLabels) {
43
- setDays([1, 2, 3, 4, 5, 6, 0].map(
44
- // @ts-expect-error nevermind
45
- (i) => locale.localize.day(i, { width: "abbreviated" })));
46
- }
47
- }, [locale, dayLabels]);
48
- return ((0, jsx_runtime_1.jsxs)(Table, { ...swipeableHandlers, children: [(0, jsx_runtime_1.jsx)(TableHead, { children: (0, jsx_runtime_1.jsx)("tr", { children: days.map((day) => ((0, jsx_runtime_1.jsx)(TableHeadCell, { scope: "column", children: day }, day))) }) }), (0, jsx_runtime_1.jsx)(TableBody, { children: weeksEvents.map((week, i) => ((0, jsx_runtime_1.jsx)(TableBodyRow, { ...week.props, children: week.days.map((day) => ((0, jsx_runtime_1.jsxs)(TableBodyCell, { ...day.props, children: [(0, jsx_runtime_1.jsx)(TableBodyCellDate, { ...day.props, children: day.label }), day.events.length > 0 && ((0, jsx_runtime_1.jsx)(CalendarDaygridCell_1.CalendarDaygridCell, { ...{
49
- eventClicked,
50
- setEventClicked,
51
- eventHovered,
52
- setEventHovered,
53
- view,
54
- maxEvents,
55
- events: day.events,
56
- timestamp: day.timestamp,
57
- calendarsMap,
58
- }, ...restKoine }))] }))) }))) })] }));
59
- };
60
- exports.KoineCalendarDaygridTable = KoineCalendarDaygridTable;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KoineCalendarLegend = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const KoineCalendarLegend = ({ calendarsMap = {}, toggleCalendarVisibility, LegendItem = "div", LegendItemStatus = "span", LegendItemLabel = "span", LegendItemEvents = "span", }) => {
6
- // const sorted = Object.entries(calendarsMap).sort((a, b) => {
7
- // const { name: nameA } = a[1];
8
- // const { name: nameB } = b[1];
9
- // if (nameA < nameB) return -1;
10
- // else if (nameA > nameB) return 1;
11
- // else return 0;
12
- // });
13
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: Object.entries(calendarsMap).map(([id, calendar]) => ((0, jsx_runtime_1.jsxs)(LegendItem, { onClick: () => toggleCalendarVisibility(id), "$color": calendar.color, "$empty": calendar.events === 0, disabled: calendar.events === 0, children: [(0, jsx_runtime_1.jsx)(LegendItemStatus, { children: calendar.on ? "\u2b24" : "\u2b58" }), (0, jsx_runtime_1.jsx)(LegendItemLabel, { children: calendar.name }), (0, jsx_runtime_1.jsx)(LegendItemEvents, { children: calendar.events })] }, "CalendarLegend." + id))) }));
14
- };
15
- exports.KoineCalendarLegend = KoineCalendarLegend;
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCalendarsEventsFromGoogle = void 0;
4
- const tslib_1 = require("tslib");
5
- const utils_1 = require("@koine/utils");
6
- const differenceInDays_1 = tslib_1.__importDefault(require("date-fns/differenceInDays"));
7
- const subDays_1 = tslib_1.__importDefault(require("date-fns/subDays"));
8
- const utils_2 = require("./utils");
9
- const baseURL = "https://www.googleapis.com/calendar/v3/calendars/";
10
- async function getCalendarsEventsFromGoogle({ calendars, ...options }) {
11
- const allEvents = {};
12
- await Promise.all(calendars.map(async (calendar) => {
13
- const events = await getCalendarEventsFromGoogle({
14
- calendar,
15
- ...options,
16
- });
17
- (0, utils_2.addCalendarEvents)(events, allEvents);
18
- }));
19
- return allEvents;
20
- }
21
- exports.getCalendarsEventsFromGoogle = getCalendarsEventsFromGoogle;
22
- async function getCalendarEventsFromGoogle({ apiKey, calendar, timeZone = "", start, end, }) {
23
- const events = {};
24
- const params = new URLSearchParams({
25
- calendarId: calendar.id,
26
- timeZone,
27
- singleEvents: "true",
28
- maxAttendees: "1",
29
- maxResults: "9999",
30
- sanitizeHtml: "true",
31
- timeMin: start.toISOString(),
32
- timeMax: end.toISOString(),
33
- key: apiKey || process.env["GOOGLE_CALENDAR_API_KEY"] || "",
34
- }).toString();
35
- const url = baseURL + calendar.id + "/events?" + params;
36
- try {
37
- const response = await fetch(url, { method: "GET" });
38
- const data = (await response.json());
39
- calendar.name = calendar.name || data.summary;
40
- data.items.forEach((googleEvent) => {
41
- const event = transformCalendarEventFromGoogle(googleEvent, calendar);
42
- events[event.uid] = event;
43
- });
44
- }
45
- catch (e) {
46
- // if (onError) onError(e);
47
- }
48
- return events;
49
- }
50
- function transformCalendarEventFromGoogle(event, calendar) {
51
- const created = new Date(event.created);
52
- const link = event.htmlLink;
53
- const title = event.summary;
54
- const status = event.status;
55
- const start = new Date(event.start.date || event.start.dateTime);
56
- let end = new Date(event.end.date || event.end.dateTime);
57
- const color = calendar.color;
58
- const allDay = (0, utils_1.isUndefined)(event.end.dateTime) && (0, utils_1.isString)(event.end.date);
59
- const location = event.location || "";
60
- const description = event.description || ""; // FIXME: he.decode(event.description || '');
61
- const uid = created.getTime() + "" + start.getTime();
62
- // multi-days all day events has as end date the date after to what we actually
63
- // mean, hence we subtract one day. @see https://support.google.com/calendar/thread/10074544/google-calendar-all-day-events-are-showing-up-as-a-24-hr-event-across-time-zones?hl=en
64
- if (allDay && end > start) {
65
- end = (0, subDays_1.default)(end, 1);
66
- end.setHours(23, 59, 59);
67
- }
68
- const days = getDays();
69
- const daysMap = (0, utils_1.arrayToLookup)(days);
70
- const multi = days.length > 1;
71
- function getDays() {
72
- const from = new Date(start);
73
- const to = new Date(end);
74
- const days = [(0, utils_2.getEventTimestamp)(from)];
75
- while ((0, differenceInDays_1.default)(to, from)) {
76
- // console.log(title, differenceInDays(to, from))
77
- from.setDate(from.getDate() + 1);
78
- days.push((0, utils_2.getEventTimestamp)(from));
79
- }
80
- return days;
81
- }
82
- return {
83
- calendar,
84
- created,
85
- link,
86
- title,
87
- status,
88
- start,
89
- end,
90
- days,
91
- daysMap,
92
- multi,
93
- color,
94
- allDay,
95
- location,
96
- description,
97
- uid,
98
- };
99
- }
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./CalendarDaygridCell"), exports);
5
- tslib_1.__exportStar(require("./CalendarDaygridNav"), exports);
6
- tslib_1.__exportStar(require("./CalendarDaygridTable"), exports);
7
- tslib_1.__exportStar(require("./CalendarLegend"), exports);
8
- tslib_1.__exportStar(require("./useCalendar"), exports);
9
- tslib_1.__exportStar(require("./types"), exports);
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,186 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useCalendar = void 0;
4
- const react_1 = require("react");
5
- const calendar_api_google_1 = require("./calendar-api-google");
6
- const utils_1 = require("./utils");
7
- function useCalendar({ locale, apiKey, calendars, events: initialEvents, start: initialStart, end: initialEnd, view: initialView = "month", timeZone = "", onError, }) {
8
- const [view, setView] = (0, react_1.useState)(initialView);
9
- const start = initialStart || (0, utils_1.getStartDate)(new Date(), view);
10
- const end = initialEnd || (0, utils_1.getEndDate)(start, view);
11
- const [range, setRange] = (0, react_1.useState)([start, end]);
12
- const [todayInView, setTodayInView] = (0, react_1.useState)((0, utils_1.isTodayInView)(start, end));
13
- const [events, setEvents] = (0, react_1.useState)(initialEvents || {});
14
- const [eventHovered, setEventHovered] = (0, react_1.useState)(null);
15
- const [eventClicked, setEventClicked] = (0, react_1.useState)(null);
16
- const [calendarsMap, updateCalendars] = (0, react_1.useReducer)((state, action) => {
17
- const { type } = action;
18
- switch (type) {
19
- case "events": {
20
- const events = action.payload;
21
- return Object.entries(state).reduce((map, [id, calendar]) => {
22
- map[id] = {
23
- ...calendar,
24
- events: events[id] || 0,
25
- };
26
- return map;
27
- }, {});
28
- }
29
- case "visibility": {
30
- const visible = action.payload;
31
- if (typeof visible === "string") {
32
- return {
33
- ...state,
34
- [visible]: {
35
- ...state[visible],
36
- on: !state[visible].on,
37
- },
38
- };
39
- }
40
- else {
41
- return Object.entries(state).reduce((map, [id, calendar]) => {
42
- map[id] = {
43
- ...calendar,
44
- on: visible.indexOf(id) > -1,
45
- };
46
- return map;
47
- }, {});
48
- }
49
- }
50
- default:
51
- return state;
52
- }
53
- },
54
- // initial state
55
- calendars.reduce((map, calendar) => {
56
- map[calendar.id] = {
57
- ...calendar,
58
- name: calendar.name || "",
59
- on: true,
60
- events: 0,
61
- };
62
- return map;
63
- }, {}));
64
- const toggleCalendarVisibility = (0, react_1.useCallback)((idOrIds) => {
65
- updateCalendars({ type: "visibility", payload: idOrIds });
66
- }, [updateCalendars]);
67
- const updateCalendarsBasedOnEvents = (0, react_1.useCallback)((events) => {
68
- const payload = {};
69
- for (const uid in events) {
70
- const { id } = events[uid].calendar;
71
- payload[id] = payload[id] || 0;
72
- payload[id]++;
73
- }
74
- updateCalendars({ type: "events", payload });
75
- }, []);
76
- const loadCalendars = (0, react_1.useCallback)(async (calendars, start, end) => {
77
- try {
78
- const newEvents = await (0, calendar_api_google_1.getCalendarsEventsFromGoogle)({
79
- apiKey,
80
- calendars,
81
- timeZone,
82
- start,
83
- end,
84
- });
85
- // setEvents(mergeCalendarEvents(events, newEvents));
86
- setEvents(newEvents);
87
- }
88
- catch (e) {
89
- if (onError)
90
- onError(e);
91
- }
92
- }, [setEvents, apiKey, timeZone, onError]);
93
- const handleToday = (0, react_1.useCallback)(() => {
94
- const [start, end] = range;
95
- const newStart = (0, utils_1.getStartDate)(new Date(), view);
96
- const newEnd = (0, utils_1.getEndDate)(newStart, view);
97
- setRange([newStart, newEnd]);
98
- // reset event only if we are not on the current view already
99
- if (start.getTime() !== newStart.getTime() ||
100
- end.getTime() !== newEnd.getTime()) {
101
- setEventClicked(null);
102
- setEventHovered(null);
103
- }
104
- }, [view, range]);
105
- const handlePrev = (0, react_1.useCallback)(() => {
106
- setRange(([start]) => {
107
- const newStart = (0, utils_1.getPrevDate)(start, view);
108
- const newEnd = (0, utils_1.getEndDate)(newStart, view);
109
- return [newStart, newEnd];
110
- });
111
- setEventClicked(null);
112
- setEventHovered(null);
113
- }, [view]);
114
- const handleNext = (0, react_1.useCallback)(() => {
115
- setRange(([start]) => {
116
- const newStart = (0, utils_1.getNextDate)(start, view);
117
- const newEnd = (0, utils_1.getEndDate)(newStart, view);
118
- return [newStart, newEnd];
119
- });
120
- setEventClicked(null);
121
- setEventHovered(null);
122
- }, [view]);
123
- const handleView = (0, react_1.useCallback)((newView) => {
124
- const newStart = (0, utils_1.getStartDate)(start, newView);
125
- const newEnd = (0, utils_1.getEndDate)(newStart, newView);
126
- setRange([newStart, newEnd]);
127
- setView(newView);
128
- setEventClicked(null);
129
- setEventHovered(null);
130
- }, [start]);
131
- (0, react_1.useEffect)(() => {
132
- const [start, end] = range;
133
- loadCalendars(calendars, start, end);
134
- setTodayInView((0, utils_1.isTodayInView)(start, end));
135
- // eslint-disable-next-line react-hooks/exhaustive-deps
136
- }, [range]);
137
- (0, react_1.useEffect)(() => {
138
- if (events) {
139
- updateCalendarsBasedOnEvents(events);
140
- }
141
- }, [events, updateCalendarsBasedOnEvents]);
142
- // when toggling a calendar we also remove the clicked event if that belongs
143
- // to a now hidden calendar
144
- (0, react_1.useEffect)(() => {
145
- if (eventClicked) {
146
- if (!calendarsMap[eventClicked.calendar.id].on) {
147
- setEventClicked(null);
148
- }
149
- }
150
- }, [calendarsMap, eventClicked, setEventClicked]);
151
- return {
152
- view,
153
- eventClicked,
154
- setEventClicked,
155
- eventHovered,
156
- setEventHovered,
157
- getDaygridNavProps: () => ({
158
- locale,
159
- handlePrev,
160
- handleNext,
161
- handleToday,
162
- handleView,
163
- todayInView,
164
- range,
165
- view,
166
- }),
167
- getDaygridTableProps: () => ({
168
- locale,
169
- events,
170
- eventClicked,
171
- setEventClicked,
172
- eventHovered,
173
- setEventHovered,
174
- handlePrev,
175
- handleNext,
176
- calendarsMap,
177
- range,
178
- view,
179
- }),
180
- getLegendProps: () => ({
181
- calendarsMap,
182
- toggleCalendarVisibility,
183
- }),
184
- };
185
- }
186
- exports.useCalendar = useCalendar;
@@ -1,217 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processEventsInView = exports.addCalendarEvents = exports.mergeCalendarEvents = exports.isTodayInView = exports.getNextDate = exports.getPrevDate = exports.getEndDate = exports.getStartDate = exports.getDisplayTime = exports.getEventTimestamp = void 0;
4
- const tslib_1 = require("tslib");
5
- const isWithinInterval_1 = tslib_1.__importDefault(require("date-fns/isWithinInterval"));
6
- const endOfMonth_1 = tslib_1.__importDefault(require("date-fns/endOfMonth"));
7
- const startOfWeek_1 = tslib_1.__importDefault(require("date-fns/startOfWeek"));
8
- const endOfWeek_1 = tslib_1.__importDefault(require("date-fns/endOfWeek"));
9
- const subMonths_1 = tslib_1.__importDefault(require("date-fns/subMonths"));
10
- const addMonths_1 = tslib_1.__importDefault(require("date-fns/addMonths"));
11
- const subWeeks_1 = tslib_1.__importDefault(require("date-fns/subWeeks"));
12
- const addWeeks_1 = tslib_1.__importDefault(require("date-fns/addWeeks"));
13
- const addDays_1 = tslib_1.__importDefault(require("date-fns/addDays"));
14
- function getEventTimestamp(dateLike) {
15
- const date = new Date(dateLike);
16
- date.setHours(0, 0, 0, 0);
17
- return date.valueOf() / 1000;
18
- }
19
- exports.getEventTimestamp = getEventTimestamp;
20
- function getDisplayTime(date) {
21
- return (date.getHours() +
22
- ":" +
23
- "0".repeat(2 - date.getMinutes().toString().length) +
24
- date.getMinutes());
25
- }
26
- exports.getDisplayTime = getDisplayTime;
27
- function getStartDate(date, view) {
28
- date.setHours(0, 0, 0);
29
- if (view === "month") {
30
- date.setDate(1);
31
- }
32
- else if (view === "week") {
33
- date = (0, startOfWeek_1.default)(date, { weekStartsOn: 1 });
34
- }
35
- return date;
36
- }
37
- exports.getStartDate = getStartDate;
38
- function getEndDate(start, view) {
39
- let end = start;
40
- if (view === "month") {
41
- end = (0, endOfMonth_1.default)(start);
42
- }
43
- else if (view === "week") {
44
- end = (0, endOfWeek_1.default)(start, { weekStartsOn: 1 });
45
- }
46
- end.setHours(23, 59, 59);
47
- return end;
48
- }
49
- exports.getEndDate = getEndDate;
50
- function getPrevDate(date, view) {
51
- if (view === "month") {
52
- return (0, subMonths_1.default)(date, 1);
53
- }
54
- return (0, subWeeks_1.default)(date, 1);
55
- }
56
- exports.getPrevDate = getPrevDate;
57
- function getNextDate(date, view) {
58
- if (view === "month") {
59
- return (0, addMonths_1.default)(date, 1);
60
- }
61
- return (0, addWeeks_1.default)(date, 1);
62
- }
63
- exports.getNextDate = getNextDate;
64
- function isTodayInView(start, end) {
65
- return (0, isWithinInterval_1.default)(new Date(), { start, end });
66
- }
67
- exports.isTodayInView = isTodayInView;
68
- function mergeCalendarEvents(first, second) {
69
- const all = {};
70
- addCalendarEvents(first, all);
71
- addCalendarEvents(second, all);
72
- return all;
73
- }
74
- exports.mergeCalendarEvents = mergeCalendarEvents;
75
- function addCalendarEvents(toAdd, toExtend) {
76
- for (const id in toAdd) {
77
- const event = toAdd[id];
78
- toExtend[id] = event;
79
- }
80
- return toExtend;
81
- }
82
- exports.addCalendarEvents = addCalendarEvents;
83
- function getEventsByTimestamp(events) {
84
- const output = {};
85
- for (const uid in events) {
86
- const event = events[uid];
87
- event.days.forEach((timestamp) => {
88
- output[timestamp] = (output[timestamp] || {});
89
- output[timestamp][uid] = event;
90
- });
91
- }
92
- return output;
93
- }
94
- function getSortedEvents(events) {
95
- const output = [];
96
- for (const uid in events) {
97
- output.push(events[uid]);
98
- }
99
- // sort events first multi, then all day then by start then by created date
100
- output.sort((a, b) => {
101
- const multi = Number(b.multi) - Number(a.multi);
102
- const allDay = Number(b.allDay) - Number(a.allDay);
103
- const start = a.start.getTime() - b.start.getTime();
104
- const created = a.created.getTime() - b.created.getTime();
105
- return multi || allDay || start || created;
106
- });
107
- return output;
108
- }
109
- const FREE_SLOT = 0;
110
- const BUSY_SLOT = 1;
111
- function processEventsInView(eventsMap, calendarView, month, weeks) {
112
- const eventsByTimestamp = getEventsByTimestamp(eventsMap);
113
- const eventsList = getSortedEvents(eventsMap);
114
- const todayDate = new Date();
115
- const todayTimestamp = getEventTimestamp(todayDate);
116
- const startedAtTopMap = {};
117
- const viewWeeks = [];
118
- for (let weekIdx = 0; weekIdx < weeks.length; weekIdx++) {
119
- const viewWeek = {
120
- props: { key: `week.${weekIdx}` },
121
- days: [],
122
- };
123
- const weekStartDate = weeks[weekIdx];
124
- const weekStartDay = weekStartDate.getDate();
125
- const weekStartTimestamp = getEventTimestamp(new Date(weekStartDate));
126
- const weekEndTimestamp = getEventTimestamp((0, addDays_1.default)(new Date(weekStartDate), 6));
127
- for (let dayNumber = 0; dayNumber < 7; dayNumber++) {
128
- const dayDate = new Date(new Date(weekStartDate).setDate(weekStartDay + dayNumber));
129
- const dayTimestamp = getEventTimestamp(dayDate);
130
- const $isToday = todayTimestamp === dayTimestamp;
131
- const $isOutOfRange = calendarView === "month" && dayDate.getMonth() !== month;
132
- const contextualProps = {
133
- $isToday,
134
- $isOutOfRange,
135
- };
136
- const viewDay = {
137
- props: { key: `day.${dayTimestamp}`, ...contextualProps },
138
- timestamp: dayTimestamp + "",
139
- label: dayDate.getDate() + "",
140
- events: [],
141
- };
142
- // check that we have events in this day
143
- if (eventsByTimestamp?.[dayTimestamp]) {
144
- const verticalSlots = Object.keys(eventsByTimestamp[dayTimestamp]).map(() => FREE_SLOT);
145
- for (let eventIdx = 0; eventIdx < eventsList.length; eventIdx++) {
146
- const event = eventsList[eventIdx];
147
- let width = 1;
148
- let top = 0;
149
- let firstOfMulti;
150
- if (!event.daysMap[dayTimestamp]) {
151
- continue;
152
- }
153
- // only for multi days events:
154
- if (event.multi) {
155
- // filter out the days outside of the current week view to avoid
156
- // making a multi-days event chip wider than the week row or shorter
157
- // than it should be (when event spans across weeks)
158
- width = event.days.filter((t) => t >= weekStartTimestamp && t <= weekEndTimestamp).length;
159
- // flag the first day of multi-days events, consider that an event
160
- // might start in a day earlier (hence outside) of the current
161
- // week/month view, so we always check for Mondays (dayNumber === 0)
162
- if (event.days.indexOf(dayTimestamp) === 0 || dayNumber === 0) {
163
- firstOfMulti = true;
164
- }
165
- }
166
- // if we already have the information on when the event has been
167
- // vertically positioned use that index
168
- if (startedAtTopMap[event.uid]) {
169
- top = startedAtTopMap[event.uid];
170
- }
171
- else {
172
- // now look for a free slot and use its index as `top`
173
- for (let verticalIdx = 0; verticalIdx < verticalSlots.length; verticalIdx++) {
174
- const freeOrBusy = verticalSlots[verticalIdx];
175
- if (freeOrBusy !== BUSY_SLOT) {
176
- top = verticalIdx;
177
- break;
178
- }
179
- }
180
- }
181
- // now mark the slot as busy
182
- verticalSlots[top] = BUSY_SLOT;
183
- // store the slot vertical position consistently for multi-days events
184
- if (firstOfMulti) {
185
- startedAtTopMap[event.uid] = top;
186
- }
187
- // push the event, they will be sorted later
188
- viewDay.events.push({
189
- key: `event.${dayTimestamp}-${top}`,
190
- ...contextualProps,
191
- ...event,
192
- isPast: todayDate > event.end,
193
- firstOfMulti,
194
- top,
195
- width,
196
- });
197
- }
198
- // fill the empty slots with events' placeholders
199
- for (let i = 0; i < verticalSlots.length; i++) {
200
- if (verticalSlots[i] !== BUSY_SLOT) {
201
- viewDay.events.push({
202
- key: `event.${dayTimestamp}-${i}}`,
203
- placeholder: true,
204
- top: i,
205
- });
206
- }
207
- }
208
- // sort events and events placeholders by top position
209
- viewDay.events.sort((a, b) => a.top - b.top);
210
- }
211
- viewWeek.days.push(viewDay);
212
- }
213
- viewWeeks.push(viewWeek);
214
- }
215
- return viewWeeks;
216
- }
217
- exports.processEventsInView = processEventsInView;