@hanzo/booker 0.1.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 (124) hide show
  1. package/README.md +78 -0
  2. package/dist/cjs/Booker.cjs +153 -0
  3. package/dist/cjs/Booker.native.js +158 -0
  4. package/dist/cjs/Booker.native.js.map +1 -0
  5. package/dist/cjs/BookingForm.cjs +197 -0
  6. package/dist/cjs/BookingForm.native.js +203 -0
  7. package/dist/cjs/BookingForm.native.js.map +1 -0
  8. package/dist/cjs/CalendarEmbed.cjs +121 -0
  9. package/dist/cjs/CalendarEmbed.native.js +125 -0
  10. package/dist/cjs/CalendarEmbed.native.js.map +1 -0
  11. package/dist/cjs/Confirmation.cjs +177 -0
  12. package/dist/cjs/Confirmation.native.js +185 -0
  13. package/dist/cjs/Confirmation.native.js.map +1 -0
  14. package/dist/cjs/EventHeader.cjs +112 -0
  15. package/dist/cjs/EventHeader.native.js +118 -0
  16. package/dist/cjs/EventHeader.native.js.map +1 -0
  17. package/dist/cjs/MonthCalendar.cjs +177 -0
  18. package/dist/cjs/MonthCalendar.native.js +191 -0
  19. package/dist/cjs/MonthCalendar.native.js.map +1 -0
  20. package/dist/cjs/TimeSlots.cjs +119 -0
  21. package/dist/cjs/TimeSlots.native.js +126 -0
  22. package/dist/cjs/TimeSlots.native.js.map +1 -0
  23. package/dist/cjs/client.cjs +136 -0
  24. package/dist/cjs/client.native.js +267 -0
  25. package/dist/cjs/client.native.js.map +1 -0
  26. package/dist/cjs/hooks.cjs +193 -0
  27. package/dist/cjs/hooks.native.js +221 -0
  28. package/dist/cjs/hooks.native.js.map +1 -0
  29. package/dist/cjs/index.cjs +71 -0
  30. package/dist/cjs/index.native.js +74 -0
  31. package/dist/cjs/index.native.js.map +1 -0
  32. package/dist/cjs/time.cjs +145 -0
  33. package/dist/cjs/time.native.js +150 -0
  34. package/dist/cjs/time.native.js.map +1 -0
  35. package/dist/cjs/useBooker.cjs +151 -0
  36. package/dist/cjs/useBooker.native.js +173 -0
  37. package/dist/cjs/useBooker.native.js.map +1 -0
  38. package/dist/esm/Booker.mjs +128 -0
  39. package/dist/esm/Booker.mjs.map +1 -0
  40. package/dist/esm/Booker.native.js +130 -0
  41. package/dist/esm/Booker.native.js.map +1 -0
  42. package/dist/esm/BookingForm.mjs +172 -0
  43. package/dist/esm/BookingForm.mjs.map +1 -0
  44. package/dist/esm/BookingForm.native.js +175 -0
  45. package/dist/esm/BookingForm.native.js.map +1 -0
  46. package/dist/esm/CalendarEmbed.mjs +96 -0
  47. package/dist/esm/CalendarEmbed.mjs.map +1 -0
  48. package/dist/esm/CalendarEmbed.native.js +97 -0
  49. package/dist/esm/CalendarEmbed.native.js.map +1 -0
  50. package/dist/esm/Confirmation.mjs +152 -0
  51. package/dist/esm/Confirmation.mjs.map +1 -0
  52. package/dist/esm/Confirmation.native.js +157 -0
  53. package/dist/esm/Confirmation.native.js.map +1 -0
  54. package/dist/esm/EventHeader.mjs +87 -0
  55. package/dist/esm/EventHeader.mjs.map +1 -0
  56. package/dist/esm/EventHeader.native.js +90 -0
  57. package/dist/esm/EventHeader.native.js.map +1 -0
  58. package/dist/esm/MonthCalendar.mjs +152 -0
  59. package/dist/esm/MonthCalendar.mjs.map +1 -0
  60. package/dist/esm/MonthCalendar.native.js +163 -0
  61. package/dist/esm/MonthCalendar.native.js.map +1 -0
  62. package/dist/esm/TimeSlots.mjs +94 -0
  63. package/dist/esm/TimeSlots.mjs.map +1 -0
  64. package/dist/esm/TimeSlots.native.js +98 -0
  65. package/dist/esm/TimeSlots.native.js.map +1 -0
  66. package/dist/esm/client.mjs +104 -0
  67. package/dist/esm/client.mjs.map +1 -0
  68. package/dist/esm/client.native.js +232 -0
  69. package/dist/esm/client.native.js.map +1 -0
  70. package/dist/esm/hooks.mjs +165 -0
  71. package/dist/esm/hooks.mjs.map +1 -0
  72. package/dist/esm/hooks.native.js +190 -0
  73. package/dist/esm/hooks.native.js.map +1 -0
  74. package/dist/esm/index.js +13 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/index.mjs +13 -0
  77. package/dist/esm/index.mjs.map +1 -0
  78. package/dist/esm/index.native.js +13 -0
  79. package/dist/esm/index.native.js.map +1 -0
  80. package/dist/esm/time.mjs +107 -0
  81. package/dist/esm/time.mjs.map +1 -0
  82. package/dist/esm/time.native.js +109 -0
  83. package/dist/esm/time.native.js.map +1 -0
  84. package/dist/esm/useBooker.mjs +126 -0
  85. package/dist/esm/useBooker.mjs.map +1 -0
  86. package/dist/esm/useBooker.native.js +145 -0
  87. package/dist/esm/useBooker.native.js.map +1 -0
  88. package/package.json +61 -0
  89. package/src/Booker.tsx +152 -0
  90. package/src/BookingForm.tsx +180 -0
  91. package/src/CalendarEmbed.tsx +111 -0
  92. package/src/Confirmation.tsx +145 -0
  93. package/src/EventHeader.tsx +85 -0
  94. package/src/MonthCalendar.tsx +179 -0
  95. package/src/TimeSlots.tsx +102 -0
  96. package/src/client.ts +218 -0
  97. package/src/hooks.ts +180 -0
  98. package/src/index.ts +72 -0
  99. package/src/time.ts +131 -0
  100. package/src/useBooker.ts +187 -0
  101. package/types/Booker.d.ts +16 -0
  102. package/types/Booker.d.ts.map +1 -0
  103. package/types/BookingForm.d.ts +13 -0
  104. package/types/BookingForm.d.ts.map +1 -0
  105. package/types/CalendarEmbed.d.ts +15 -0
  106. package/types/CalendarEmbed.d.ts.map +1 -0
  107. package/types/Confirmation.d.ts +12 -0
  108. package/types/Confirmation.d.ts.map +1 -0
  109. package/types/EventHeader.d.ts +10 -0
  110. package/types/EventHeader.d.ts.map +1 -0
  111. package/types/MonthCalendar.d.ts +14 -0
  112. package/types/MonthCalendar.d.ts.map +1 -0
  113. package/types/TimeSlots.d.ts +15 -0
  114. package/types/TimeSlots.d.ts.map +1 -0
  115. package/types/client.d.ts +77 -0
  116. package/types/client.d.ts.map +1 -0
  117. package/types/hooks.d.ts +43 -0
  118. package/types/hooks.d.ts.map +1 -0
  119. package/types/index.d.ts +12 -0
  120. package/types/index.d.ts.map +1 -0
  121. package/types/time.d.ts +38 -0
  122. package/types/time.d.ts.map +1 -0
  123. package/types/useBooker.d.ts +41 -0
  124. package/types/useBooker.d.ts.map +1 -0
@@ -0,0 +1,165 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { createBooking, fetchBooking, fetchEventType, fetchSlots, CalendarError } from "./client.mjs";
3
+ function useEventType(api, eventSlug, username) {
4
+ const [state, setState] = useState({
5
+ data: null,
6
+ loading: true,
7
+ error: null
8
+ });
9
+ useEffect(() => {
10
+ const ctrl = new AbortController();
11
+ setState({
12
+ data: null,
13
+ loading: true,
14
+ error: null
15
+ });
16
+ fetchEventType(api, eventSlug, username, ctrl.signal).then(data => setState({
17
+ data,
18
+ loading: false,
19
+ error: null
20
+ })).catch(err => {
21
+ if (ctrl.signal.aborted) return;
22
+ setState({
23
+ data: null,
24
+ loading: false,
25
+ error: errorText(err)
26
+ });
27
+ });
28
+ return () => ctrl.abort();
29
+ }, [api, eventSlug, username]);
30
+ return state;
31
+ }
32
+ function useAvailableSlots(api, query) {
33
+ const {
34
+ eventTypeSlug,
35
+ username,
36
+ startTime,
37
+ endTime,
38
+ timeZone,
39
+ enabled = true
40
+ } = query;
41
+ const [state, setState] = useState({
42
+ data: null,
43
+ loading: enabled,
44
+ error: null
45
+ });
46
+ const [nonce, setNonce] = useState(0);
47
+ const refetch = useCallback(() => setNonce(n => n + 1), []);
48
+ useEffect(() => {
49
+ if (!enabled) return;
50
+ const ctrl = new AbortController();
51
+ setState(s => ({
52
+ data: s.data,
53
+ loading: true,
54
+ error: null
55
+ }));
56
+ fetchSlots(api, {
57
+ eventTypeSlug,
58
+ username,
59
+ startTime,
60
+ endTime,
61
+ timeZone
62
+ }, ctrl.signal).then(data => setState({
63
+ data,
64
+ loading: false,
65
+ error: null
66
+ })).catch(err => {
67
+ if (ctrl.signal.aborted) return;
68
+ setState({
69
+ data: null,
70
+ loading: false,
71
+ error: errorText(err)
72
+ });
73
+ });
74
+ return () => ctrl.abort();
75
+ }, [api, eventTypeSlug, username, startTime, endTime, timeZone, enabled, nonce]);
76
+ return {
77
+ ...state,
78
+ refetch
79
+ };
80
+ }
81
+ function useCreateBooking(api) {
82
+ const [submitting, setSubmitting] = useState(false);
83
+ const [error, setError] = useState(null);
84
+ const [conflict, setConflict] = useState(false);
85
+ const mounted = useRef(true);
86
+ useEffect(() => {
87
+ mounted.current = true;
88
+ return () => {
89
+ mounted.current = false;
90
+ };
91
+ }, []);
92
+ const reset = useCallback(() => {
93
+ setError(null);
94
+ setConflict(false);
95
+ }, []);
96
+ const submit = useCallback(async input => {
97
+ setSubmitting(true);
98
+ setError(null);
99
+ setConflict(false);
100
+ try {
101
+ const booking = await createBooking(api, input);
102
+ return {
103
+ ok: true,
104
+ booking
105
+ };
106
+ } catch (err) {
107
+ const isConflict = err instanceof CalendarError && err.conflict;
108
+ const message = errorText(err);
109
+ if (mounted.current) {
110
+ setError(message);
111
+ setConflict(isConflict);
112
+ }
113
+ return {
114
+ ok: false,
115
+ conflict: isConflict,
116
+ message
117
+ };
118
+ } finally {
119
+ if (mounted.current) setSubmitting(false);
120
+ }
121
+ }, [api]);
122
+ return {
123
+ submit,
124
+ submitting,
125
+ error,
126
+ conflict,
127
+ reset
128
+ };
129
+ }
130
+ function useBooking(api, uid) {
131
+ const [state, setState] = useState({
132
+ data: null,
133
+ loading: !!uid,
134
+ error: null
135
+ });
136
+ useEffect(() => {
137
+ if (!uid) return;
138
+ const ctrl = new AbortController();
139
+ setState({
140
+ data: null,
141
+ loading: true,
142
+ error: null
143
+ });
144
+ fetchBooking(api, uid, ctrl.signal).then(data => setState({
145
+ data,
146
+ loading: false,
147
+ error: null
148
+ })).catch(err => {
149
+ if (ctrl.signal.aborted) return;
150
+ setState({
151
+ data: null,
152
+ loading: false,
153
+ error: errorText(err)
154
+ });
155
+ });
156
+ return () => ctrl.abort();
157
+ }, [api, uid]);
158
+ return state;
159
+ }
160
+ function errorText(err) {
161
+ if (err instanceof Error) return err.message;
162
+ return "Something went wrong";
163
+ }
164
+ export { useAvailableSlots, useBooking, useCreateBooking, useEventType };
165
+ //# sourceMappingURL=hooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","createBooking","fetchBooking","fetchEventType","fetchSlots","CalendarError","useEventType","api","eventSlug","username","state","setState","data","loading","error","ctrl","AbortController","signal","then","catch","err","aborted","errorText","abort","useAvailableSlots","query","eventTypeSlug","startTime","endTime","timeZone","enabled","nonce","setNonce","refetch","n","s","useCreateBooking","submitting","setSubmitting","setError","conflict","setConflict","mounted","current","reset","submit","input","booking","ok","isConflict","message","useBooking","uid","Error"],"sources":["../../src/hooks.ts"],"sourcesContent":[null],"mappings":"AAEA,SAASA,WAAA,EAAaC,SAAA,EAAWC,MAAA,EAAQC,QAAA,QAAgB;AACzD,SACEC,aAAA,EACAC,YAAA,EACAC,cAAA,EACAC,UAAA,EACAC,aAAA,QAKK;AAQA,SAASC,aACdC,GAAA,EACAC,SAAA,EACAC,QAAA,EACuB;EACvB,MAAM,CAACC,KAAA,EAAOC,QAAQ,IAAIX,QAAA,CAAgC;IACxDY,IAAA,EAAM;IACNC,OAAA,EAAS;IACTC,KAAA,EAAO;EACT,CAAC;EACDhB,SAAA,CAAU,MAAM;IACd,MAAMiB,IAAA,GAAO,IAAIC,eAAA,CAAgB;IACjCL,QAAA,CAAS;MAAEC,IAAA,EAAM;MAAMC,OAAA,EAAS;MAAMC,KAAA,EAAO;IAAK,CAAC;IACnDX,cAAA,CAAeI,GAAA,EAAKC,SAAA,EAAWC,QAAA,EAAUM,IAAA,CAAKE,MAAM,EACjDC,IAAA,CAAMN,IAAA,IAASD,QAAA,CAAS;MAAEC,IAAA;MAAMC,OAAA,EAAS;MAAOC,KAAA,EAAO;IAAK,CAAC,CAAC,EAC9DK,KAAA,CAAOC,GAAA,IAAiB;MACvB,IAAIL,IAAA,CAAKE,MAAA,CAAOI,OAAA,EAAS;MACzBV,QAAA,CAAS;QAAEC,IAAA,EAAM;QAAMC,OAAA,EAAS;QAAOC,KAAA,EAAOQ,SAAA,CAAUF,GAAG;MAAE,CAAC;IAChE,CAAC;IACH,OAAO,MAAML,IAAA,CAAKQ,KAAA,CAAM;EAC1B,GAAG,CAAChB,GAAA,EAAKC,SAAA,EAAWC,QAAQ,CAAC;EAC7B,OAAOC,KAAA;AACT;AAeO,SAASc,kBAAkBjB,GAAA,EAAakB,KAAA,EAA+B;EAC5E,MAAM;IAAEC,aAAA;IAAejB,QAAA;IAAUkB,SAAA;IAAWC,OAAA;IAASC,QAAA;IAAUC,OAAA,GAAU;EAAK,IAAIL,KAAA;EAClF,MAAM,CAACf,KAAA,EAAOC,QAAQ,IAAIX,QAAA,CAAiC;IACzDY,IAAA,EAAM;IACNC,OAAA,EAASiB,OAAA;IACThB,KAAA,EAAO;EACT,CAAC;EACD,MAAM,CAACiB,KAAA,EAAOC,QAAQ,IAAIhC,QAAA,CAAS,CAAC;EACpC,MAAMiC,OAAA,GAAUpC,WAAA,CAAY,MAAMmC,QAAA,CAAUE,CAAA,IAAMA,CAAA,GAAI,CAAC,GAAG,EAAE;EAE5DpC,SAAA,CAAU,MAAM;IACd,IAAI,CAACgC,OAAA,EAAS;IACd,MAAMf,IAAA,GAAO,IAAIC,eAAA,CAAgB;IACjCL,QAAA,CAAUwB,CAAA,KAAO;MAAEvB,IAAA,EAAMuB,CAAA,CAAEvB,IAAA;MAAMC,OAAA,EAAS;MAAMC,KAAA,EAAO;IAAK,EAAE;IAC9DV,UAAA,CACEG,GAAA,EACA;MAAEmB,aAAA;MAAejB,QAAA;MAAUkB,SAAA;MAAWC,OAAA;MAASC;IAAS,GACxDd,IAAA,CAAKE,MACP,EACGC,IAAA,CAAMN,IAAA,IAASD,QAAA,CAAS;MAAEC,IAAA;MAAMC,OAAA,EAAS;MAAOC,KAAA,EAAO;IAAK,CAAC,CAAC,EAC9DK,KAAA,CAAOC,GAAA,IAAiB;MACvB,IAAIL,IAAA,CAAKE,MAAA,CAAOI,OAAA,EAAS;MACzBV,QAAA,CAAS;QAAEC,IAAA,EAAM;QAAMC,OAAA,EAAS;QAAOC,KAAA,EAAOQ,SAAA,CAAUF,GAAG;MAAE,CAAC;IAChE,CAAC;IACH,OAAO,MAAML,IAAA,CAAKQ,KAAA,CAAM;EAC1B,GAAG,CAAChB,GAAA,EAAKmB,aAAA,EAAejB,QAAA,EAAUkB,SAAA,EAAWC,OAAA,EAASC,QAAA,EAAUC,OAAA,EAASC,KAAK,CAAC;EAE/E,OAAO;IAAE,GAAGrB,KAAA;IAAOuB;EAAQ;AAC7B;AAoBO,SAASG,iBAAiB7B,GAAA,EAAiC;EAChE,MAAM,CAAC8B,UAAA,EAAYC,aAAa,IAAItC,QAAA,CAAS,KAAK;EAClD,MAAM,CAACc,KAAA,EAAOyB,QAAQ,IAAIvC,QAAA,CAAwB,IAAI;EACtD,MAAM,CAACwC,QAAA,EAAUC,WAAW,IAAIzC,QAAA,CAAS,KAAK;EAC9C,MAAM0C,OAAA,GAAU3C,MAAA,CAAO,IAAI;EAC3BD,SAAA,CAAU,MAAM;IACd4C,OAAA,CAAQC,OAAA,GAAU;IAClB,OAAO,MAAM;MACXD,OAAA,CAAQC,OAAA,GAAU;IACpB;EACF,GAAG,EAAE;EAEL,MAAMC,KAAA,GAAQ/C,WAAA,CAAY,MAAM;IAC9B0C,QAAA,CAAS,IAAI;IACbE,WAAA,CAAY,KAAK;EACnB,GAAG,EAAE;EAEL,MAAMI,MAAA,GAAShD,WAAA,CACb,MAAOiD,KAAA,IAMsB;IAC3BR,aAAA,CAAc,IAAI;IAClBC,QAAA,CAAS,IAAI;IACbE,WAAA,CAAY,KAAK;IACjB,IAAI;MACF,MAAMM,OAAA,GAAU,MAAM9C,aAAA,CAAcM,GAAA,EAAKuC,KAAK;MAC9C,OAAO;QAAEE,EAAA,EAAI;QAAMD;MAAQ;IAC7B,SAAS3B,GAAA,EAAc;MACrB,MAAM6B,UAAA,GAAa7B,GAAA,YAAef,aAAA,IAAiBe,GAAA,CAAIoB,QAAA;MACvD,MAAMU,OAAA,GAAU5B,SAAA,CAAUF,GAAG;MAC7B,IAAIsB,OAAA,CAAQC,OAAA,EAAS;QACnBJ,QAAA,CAASW,OAAO;QAChBT,WAAA,CAAYQ,UAAU;MACxB;MACA,OAAO;QAAED,EAAA,EAAI;QAAOR,QAAA,EAAUS,UAAA;QAAYC;MAAQ;IACpD,UAAE;MACA,IAAIR,OAAA,CAAQC,OAAA,EAASL,aAAA,CAAc,KAAK;IAC1C;EACF,GACA,CAAC/B,GAAG,CACN;EAEA,OAAO;IAAEsC,MAAA;IAAQR,UAAA;IAAYvB,KAAA;IAAO0B,QAAA;IAAUI;EAAM;AACtD;AAEO,SAASO,WAAW5C,GAAA,EAAa6C,GAAA,EAA8C;EACpF,MAAM,CAAC1C,KAAA,EAAOC,QAAQ,IAAIX,QAAA,CAA8B;IACtDY,IAAA,EAAM;IACNC,OAAA,EAAS,CAAC,CAACuC,GAAA;IACXtC,KAAA,EAAO;EACT,CAAC;EACDhB,SAAA,CAAU,MAAM;IACd,IAAI,CAACsD,GAAA,EAAK;IACV,MAAMrC,IAAA,GAAO,IAAIC,eAAA,CAAgB;IACjCL,QAAA,CAAS;MAAEC,IAAA,EAAM;MAAMC,OAAA,EAAS;MAAMC,KAAA,EAAO;IAAK,CAAC;IACnDZ,YAAA,CAAaK,GAAA,EAAK6C,GAAA,EAAKrC,IAAA,CAAKE,MAAM,EAC/BC,IAAA,CAAMN,IAAA,IAASD,QAAA,CAAS;MAAEC,IAAA;MAAMC,OAAA,EAAS;MAAOC,KAAA,EAAO;IAAK,CAAC,CAAC,EAC9DK,KAAA,CAAOC,GAAA,IAAiB;MACvB,IAAIL,IAAA,CAAKE,MAAA,CAAOI,OAAA,EAAS;MACzBV,QAAA,CAAS;QAAEC,IAAA,EAAM;QAAMC,OAAA,EAAS;QAAOC,KAAA,EAAOQ,SAAA,CAAUF,GAAG;MAAE,CAAC;IAChE,CAAC;IACH,OAAO,MAAML,IAAA,CAAKQ,KAAA,CAAM;EAC1B,GAAG,CAAChB,GAAA,EAAK6C,GAAG,CAAC;EACb,OAAO1C,KAAA;AACT;AAEA,SAASY,UAAUF,GAAA,EAAsB;EACvC,IAAIA,GAAA,YAAeiC,KAAA,EAAO,OAAOjC,GAAA,CAAI8B,OAAA;EACrC,OAAO;AACT","ignoreList":[]}
@@ -0,0 +1,190 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { createBooking, fetchBooking, fetchEventType, fetchSlots, CalendarError } from "./client.native.js";
3
+ function _instanceof(left, right) {
4
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
5
+ return !!right[Symbol.hasInstance](left);
6
+ } else {
7
+ return left instanceof right;
8
+ }
9
+ }
10
+ function useEventType(api, eventSlug, username) {
11
+ var [state, setState] = useState({
12
+ data: null,
13
+ loading: true,
14
+ error: null
15
+ });
16
+ useEffect(function () {
17
+ var ctrl = new AbortController();
18
+ setState({
19
+ data: null,
20
+ loading: true,
21
+ error: null
22
+ });
23
+ fetchEventType(api, eventSlug, username, ctrl.signal).then(function (data) {
24
+ return setState({
25
+ data,
26
+ loading: false,
27
+ error: null
28
+ });
29
+ }).catch(function (err) {
30
+ if (ctrl.signal.aborted) return;
31
+ setState({
32
+ data: null,
33
+ loading: false,
34
+ error: errorText(err)
35
+ });
36
+ });
37
+ return function () {
38
+ return ctrl.abort();
39
+ };
40
+ }, [api, eventSlug, username]);
41
+ return state;
42
+ }
43
+ function useAvailableSlots(api, query) {
44
+ var {
45
+ eventTypeSlug,
46
+ username,
47
+ startTime,
48
+ endTime,
49
+ timeZone,
50
+ enabled = true
51
+ } = query;
52
+ var [state, setState] = useState({
53
+ data: null,
54
+ loading: enabled,
55
+ error: null
56
+ });
57
+ var [nonce, setNonce] = useState(0);
58
+ var refetch = useCallback(function () {
59
+ return setNonce(function (n) {
60
+ return n + 1;
61
+ });
62
+ }, []);
63
+ useEffect(function () {
64
+ if (!enabled) return;
65
+ var ctrl = new AbortController();
66
+ setState(function (s) {
67
+ return {
68
+ data: s.data,
69
+ loading: true,
70
+ error: null
71
+ };
72
+ });
73
+ fetchSlots(api, {
74
+ eventTypeSlug,
75
+ username,
76
+ startTime,
77
+ endTime,
78
+ timeZone
79
+ }, ctrl.signal).then(function (data) {
80
+ return setState({
81
+ data,
82
+ loading: false,
83
+ error: null
84
+ });
85
+ }).catch(function (err) {
86
+ if (ctrl.signal.aborted) return;
87
+ setState({
88
+ data: null,
89
+ loading: false,
90
+ error: errorText(err)
91
+ });
92
+ });
93
+ return function () {
94
+ return ctrl.abort();
95
+ };
96
+ }, [api, eventTypeSlug, username, startTime, endTime, timeZone, enabled, nonce]);
97
+ return {
98
+ ...state,
99
+ refetch
100
+ };
101
+ }
102
+ function useCreateBooking(api) {
103
+ var [submitting, setSubmitting] = useState(false);
104
+ var [error, setError] = useState(null);
105
+ var [conflict, setConflict] = useState(false);
106
+ var mounted = useRef(true);
107
+ useEffect(function () {
108
+ mounted.current = true;
109
+ return function () {
110
+ mounted.current = false;
111
+ };
112
+ }, []);
113
+ var reset = useCallback(function () {
114
+ setError(null);
115
+ setConflict(false);
116
+ }, []);
117
+ var submit = useCallback(async function (input) {
118
+ setSubmitting(true);
119
+ setError(null);
120
+ setConflict(false);
121
+ try {
122
+ var booking = await createBooking(api, input);
123
+ return {
124
+ ok: true,
125
+ booking
126
+ };
127
+ } catch (err) {
128
+ var isConflict = _instanceof(err, CalendarError) && err.conflict;
129
+ var message = errorText(err);
130
+ if (mounted.current) {
131
+ setError(message);
132
+ setConflict(isConflict);
133
+ }
134
+ return {
135
+ ok: false,
136
+ conflict: isConflict,
137
+ message
138
+ };
139
+ } finally {
140
+ if (mounted.current) setSubmitting(false);
141
+ }
142
+ }, [api]);
143
+ return {
144
+ submit,
145
+ submitting,
146
+ error,
147
+ conflict,
148
+ reset
149
+ };
150
+ }
151
+ function useBooking(api, uid) {
152
+ var [state, setState] = useState({
153
+ data: null,
154
+ loading: !!uid,
155
+ error: null
156
+ });
157
+ useEffect(function () {
158
+ if (!uid) return;
159
+ var ctrl = new AbortController();
160
+ setState({
161
+ data: null,
162
+ loading: true,
163
+ error: null
164
+ });
165
+ fetchBooking(api, uid, ctrl.signal).then(function (data) {
166
+ return setState({
167
+ data,
168
+ loading: false,
169
+ error: null
170
+ });
171
+ }).catch(function (err) {
172
+ if (ctrl.signal.aborted) return;
173
+ setState({
174
+ data: null,
175
+ loading: false,
176
+ error: errorText(err)
177
+ });
178
+ });
179
+ return function () {
180
+ return ctrl.abort();
181
+ };
182
+ }, [api, uid]);
183
+ return state;
184
+ }
185
+ function errorText(err) {
186
+ if (_instanceof(err, Error)) return err.message;
187
+ return "Something went wrong";
188
+ }
189
+ export { useAvailableSlots, useBooking, useCreateBooking, useEventType };
190
+ //# sourceMappingURL=hooks.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","createBooking","fetchBooking","fetchEventType","fetchSlots","CalendarError","_instanceof","left","right","Symbol","hasInstance","useEventType","api","eventSlug","username","state","setState","data","loading","error","ctrl","AbortController","signal","then","catch","err","aborted","errorText","abort","useAvailableSlots","query","eventTypeSlug","startTime","endTime","timeZone","enabled","nonce","setNonce","refetch","n","s","useCreateBooking","submitting","setSubmitting","setError","conflict","setConflict"],"sources":["../../src/hooks.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { Booker } from "./Booker.mjs";
2
+ import { CalendarEmbed } from "./CalendarEmbed.mjs";
3
+ import { Confirmation } from "./Confirmation.mjs";
4
+ import { EventHeader } from "./EventHeader.mjs";
5
+ import { MonthCalendar } from "./MonthCalendar.mjs";
6
+ import { TimeSlots } from "./TimeSlots.mjs";
7
+ import { BookingForm } from "./BookingForm.mjs";
8
+ import { useBooker } from "./useBooker.mjs";
9
+ import { useEventType, useAvailableSlots, useCreateBooking, useBooking } from "./hooks.mjs";
10
+ import { DEFAULT_API_URL, CAL_API_VERSION, CalendarError, fetchEventType, fetchSlots, createBooking, fetchBooking, cancelBooking } from "./client.mjs";
11
+ import { visitorTimeZone, ymd, monthMatrix, monthRange, weekdayLabels, formatMonthLabel, formatDayLong, formatSlotTime, formatBookingWhen, dateFromKey, startOfMonth, addMonths, sameMonth, isBeforeToday } from "./time.mjs";
12
+ export { Booker, BookingForm, CAL_API_VERSION, CalendarEmbed, CalendarError, Confirmation, DEFAULT_API_URL, EventHeader, MonthCalendar, TimeSlots, addMonths, cancelBooking, createBooking, dateFromKey, fetchBooking, fetchEventType, fetchSlots, formatBookingWhen, formatDayLong, formatMonthLabel, formatSlotTime, isBeforeToday, monthMatrix, monthRange, sameMonth, startOfMonth, useAvailableSlots, useBooker, useBooking, useCreateBooking, useEventType, visitorTimeZone, weekdayLabels, ymd };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Booker","CalendarEmbed","Confirmation","EventHeader","MonthCalendar","TimeSlots","BookingForm","useBooker","useEventType","useAvailableSlots","useCreateBooking","useBooking","DEFAULT_API_URL","CAL_API_VERSION","CalendarError","fetchEventType","fetchSlots","createBooking","fetchBooking","cancelBooking","visitorTimeZone","ymd","monthMatrix","monthRange","weekdayLabels","formatMonthLabel","formatDayLong","formatSlotTime","formatBookingWhen","dateFromKey","startOfMonth","addMonths","sameMonth","isBeforeToday"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAGA,SAASA,MAAA,QAAgC;AACzC,SAASC,aAAA,QAA8C;AACvD,SAASC,YAAA,QAA4C;AAGrD,SAASC,WAAA,QAA0C;AACnD,SAASC,aAAA,QAA8C;AACvD,SAASC,SAAA,QAAsC;AAC/C,SAASC,WAAA,QAA0C;AAGnD,SACEC,SAAA,QAIK;AACP,SACEC,YAAA,EACAC,iBAAA,EACAC,gBAAA,EACAC,UAAA,QAMK;AAGP,SACEC,eAAA,EACAC,eAAA,EACAC,aAAA,EACAC,cAAA,EACAC,UAAA,EACAC,aAAA,EACAC,YAAA,EACAC,aAAA,QAWK;AAGP,SACEC,eAAA,EACAC,GAAA,EACAC,WAAA,EACAC,UAAA,EACAC,aAAA,EACAC,gBAAA,EACAC,aAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,WAAA,EACAC,YAAA,EACAC,SAAA,EACAC,SAAA,EACAC,aAAA,QAEK","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { Booker } from "./Booker.mjs";
2
+ import { CalendarEmbed } from "./CalendarEmbed.mjs";
3
+ import { Confirmation } from "./Confirmation.mjs";
4
+ import { EventHeader } from "./EventHeader.mjs";
5
+ import { MonthCalendar } from "./MonthCalendar.mjs";
6
+ import { TimeSlots } from "./TimeSlots.mjs";
7
+ import { BookingForm } from "./BookingForm.mjs";
8
+ import { useBooker } from "./useBooker.mjs";
9
+ import { useEventType, useAvailableSlots, useCreateBooking, useBooking } from "./hooks.mjs";
10
+ import { DEFAULT_API_URL, CAL_API_VERSION, CalendarError, fetchEventType, fetchSlots, createBooking, fetchBooking, cancelBooking } from "./client.mjs";
11
+ import { visitorTimeZone, ymd, monthMatrix, monthRange, weekdayLabels, formatMonthLabel, formatDayLong, formatSlotTime, formatBookingWhen, dateFromKey, startOfMonth, addMonths, sameMonth, isBeforeToday } from "./time.mjs";
12
+ export { Booker, BookingForm, CAL_API_VERSION, CalendarEmbed, CalendarError, Confirmation, DEFAULT_API_URL, EventHeader, MonthCalendar, TimeSlots, addMonths, cancelBooking, createBooking, dateFromKey, fetchBooking, fetchEventType, fetchSlots, formatBookingWhen, formatDayLong, formatMonthLabel, formatSlotTime, isBeforeToday, monthMatrix, monthRange, sameMonth, startOfMonth, useAvailableSlots, useBooker, useBooking, useCreateBooking, useEventType, visitorTimeZone, weekdayLabels, ymd };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Booker","CalendarEmbed","Confirmation","EventHeader","MonthCalendar","TimeSlots","BookingForm","useBooker","useEventType","useAvailableSlots","useCreateBooking","useBooking","DEFAULT_API_URL","CAL_API_VERSION","CalendarError","fetchEventType","fetchSlots","createBooking","fetchBooking","cancelBooking","visitorTimeZone","ymd","monthMatrix","monthRange","weekdayLabels","formatMonthLabel","formatDayLong","formatSlotTime","formatBookingWhen","dateFromKey","startOfMonth","addMonths","sameMonth","isBeforeToday"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAGA,SAASA,MAAA,QAAgC;AACzC,SAASC,aAAA,QAA8C;AACvD,SAASC,YAAA,QAA4C;AAGrD,SAASC,WAAA,QAA0C;AACnD,SAASC,aAAA,QAA8C;AACvD,SAASC,SAAA,QAAsC;AAC/C,SAASC,WAAA,QAA0C;AAGnD,SACEC,SAAA,QAIK;AACP,SACEC,YAAA,EACAC,iBAAA,EACAC,gBAAA,EACAC,UAAA,QAMK;AAGP,SACEC,eAAA,EACAC,eAAA,EACAC,aAAA,EACAC,cAAA,EACAC,UAAA,EACAC,aAAA,EACAC,YAAA,EACAC,aAAA,QAWK;AAGP,SACEC,eAAA,EACAC,GAAA,EACAC,WAAA,EACAC,UAAA,EACAC,aAAA,EACAC,gBAAA,EACAC,aAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,WAAA,EACAC,YAAA,EACAC,SAAA,EACAC,SAAA,EACAC,aAAA,QAEK","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { Booker } from "./Booker.native.js";
2
+ import { CalendarEmbed } from "./CalendarEmbed.native.js";
3
+ import { Confirmation } from "./Confirmation.native.js";
4
+ import { EventHeader } from "./EventHeader.native.js";
5
+ import { MonthCalendar } from "./MonthCalendar.native.js";
6
+ import { TimeSlots } from "./TimeSlots.native.js";
7
+ import { BookingForm } from "./BookingForm.native.js";
8
+ import { useBooker } from "./useBooker.native.js";
9
+ import { useEventType, useAvailableSlots, useCreateBooking, useBooking } from "./hooks.native.js";
10
+ import { DEFAULT_API_URL, CAL_API_VERSION, CalendarError, fetchEventType, fetchSlots, createBooking, fetchBooking, cancelBooking } from "./client.native.js";
11
+ import { visitorTimeZone, ymd, monthMatrix, monthRange, weekdayLabels, formatMonthLabel, formatDayLong, formatSlotTime, formatBookingWhen, dateFromKey, startOfMonth, addMonths, sameMonth, isBeforeToday } from "./time.native.js";
12
+ export { Booker, BookingForm, CAL_API_VERSION, CalendarEmbed, CalendarError, Confirmation, DEFAULT_API_URL, EventHeader, MonthCalendar, TimeSlots, addMonths, cancelBooking, createBooking, dateFromKey, fetchBooking, fetchEventType, fetchSlots, formatBookingWhen, formatDayLong, formatMonthLabel, formatSlotTime, isBeforeToday, monthMatrix, monthRange, sameMonth, startOfMonth, useAvailableSlots, useBooker, useBooking, useCreateBooking, useEventType, visitorTimeZone, weekdayLabels, ymd };
13
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Booker","CalendarEmbed","Confirmation","EventHeader","MonthCalendar","TimeSlots","BookingForm","useBooker","useEventType","useAvailableSlots","useCreateBooking","useBooking","DEFAULT_API_URL","CAL_API_VERSION","CalendarError","fetchEventType","fetchSlots","createBooking","fetchBooking","cancelBooking","visitorTimeZone","ymd","monthMatrix","monthRange","weekdayLabels","formatMonthLabel","formatDayLong","formatSlotTime","formatBookingWhen","dateFromKey","startOfMonth","addMonths","sameMonth","isBeforeToday"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAGA,SAASA,MAAA,QAAgC;AACzC,SAASC,aAAA,QAA8C;AACvD,SAASC,YAAA,QAA4C;AAGrD,SAASC,WAAA,QAA0C;AACnD,SAASC,aAAA,QAA8C;AACvD,SAASC,SAAA,QAAsC;AAC/C,SAASC,WAAA,QAA0C;AAGnD,SAAAC,SAAA;AAAA,SACEC,YAAA,EAAAC,iBAAA,EAAAC,gBAAA,EAAAC,UAAA;AAAA,SAIKC,eAAA,EAAAC,eAAA,EAAAC,aAAA,EAAAC,cAAA,EAAAC,UAAA,EAAAC,aAAA,EAAAC,YAAA,EAAAC,aAAA;AACP,SAAAC,eAAA,EAAAC,GAAA,EAAAC,WAAA,EAAAC,UAAA,EAAAC,aAAA,EAAAC,gBAAA,EAAAC,aAAA,EAAAC,cAAA,EAAAC,iBAAA,EAAAC,WAAA,EAAAC,YAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,aAAA;AAAA,SAEEjC,MAAA,EACAM,WAAA,EACAO,eAAA,EAAAZ,aAMK,EAGPa,aAAA,EACEZ,YAAA,EACAU,eAAA,EACAT,WAAA,EACAC,aAAA,EACAC,SAAA,EACA0B,SAAA,EACAZ,aAAA,EACAF,aAAA,EAAAY,WAWK,EAGPX,YAAA,EACEH,cAAA,EACAC,UAAA,EACAY,iBAAA,EACAF,aAAA,EACAD,gBAAA,EACAE,cAAA,EACAM,aAAA,EACAX,WAAA,EACAC,UAAA,EACAS,SAAA,EACAF,YAAA,EACArB,iBAAA,EACAF,SAAA,EACAI,UAAA,EAAAD,gBAEK,E","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ function visitorTimeZone() {
2
+ try {
3
+ return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
4
+ } catch {
5
+ return "UTC";
6
+ }
7
+ }
8
+ function ymd(d) {
9
+ const y = d.getFullYear();
10
+ const m = String(d.getMonth() + 1).padStart(2, "0");
11
+ const day = String(d.getDate()).padStart(2, "0");
12
+ return `${y}-${m}-${day}`;
13
+ }
14
+ function startOfMonth(d) {
15
+ return new Date(d.getFullYear(), d.getMonth(), 1);
16
+ }
17
+ function addMonths(d, n) {
18
+ return new Date(d.getFullYear(), d.getMonth() + n, 1);
19
+ }
20
+ function sameMonth(a, b) {
21
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
22
+ }
23
+ function isBeforeToday(key) {
24
+ return key < ymd(/* @__PURE__ */new Date());
25
+ }
26
+ function monthMatrix(viewDate, weekStartsOn = 0) {
27
+ const year = viewDate.getFullYear();
28
+ const month = viewDate.getMonth();
29
+ const firstWeekday = new Date(year, month, 1).getDay();
30
+ const startOffset = (firstWeekday - weekStartsOn + 7) % 7;
31
+ const cells = [];
32
+ for (let i = 0; i < 42; i++) {
33
+ const date = new Date(year, month, 1 - startOffset + i);
34
+ cells.push({
35
+ date,
36
+ key: ymd(date),
37
+ inMonth: date.getMonth() === month
38
+ });
39
+ }
40
+ return cells;
41
+ }
42
+ function monthRange(viewDate) {
43
+ const year = viewDate.getFullYear();
44
+ const month = viewDate.getMonth();
45
+ const startOfView = new Date(year, month, 1, 0, 0, 0, 0);
46
+ const now = /* @__PURE__ */new Date();
47
+ const start = startOfView.getTime() > now.getTime() ? startOfView : now;
48
+ const endOfView = new Date(year, month + 1, 0, 23, 59, 59, 999);
49
+ return {
50
+ startTime: start.toISOString(),
51
+ endTime: endOfView.toISOString()
52
+ };
53
+ }
54
+ function weekdayLabels(weekStartsOn = 0) {
55
+ const fmt = new Intl.DateTimeFormat(void 0, {
56
+ weekday: "short"
57
+ });
58
+ const out = [];
59
+ for (let i = 0; i < 7; i++) {
60
+ const d = new Date(2023, 0, 1 + (i + weekStartsOn) % 7);
61
+ out.push(fmt.format(d));
62
+ }
63
+ return out;
64
+ }
65
+ function formatMonthLabel(d) {
66
+ return new Intl.DateTimeFormat(void 0, {
67
+ month: "long",
68
+ year: "numeric"
69
+ }).format(d);
70
+ }
71
+ function formatDayLong(d) {
72
+ return new Intl.DateTimeFormat(void 0, {
73
+ weekday: "long",
74
+ month: "long",
75
+ day: "numeric"
76
+ }).format(d);
77
+ }
78
+ function formatSlotTime(iso, timeZone) {
79
+ return new Intl.DateTimeFormat(void 0, {
80
+ hour: "numeric",
81
+ minute: "2-digit",
82
+ timeZone
83
+ }).format(new Date(iso));
84
+ }
85
+ function formatBookingWhen(iso, timeZone) {
86
+ const at = new Date(iso);
87
+ const date = new Intl.DateTimeFormat(void 0, {
88
+ weekday: "long",
89
+ month: "long",
90
+ day: "numeric",
91
+ year: "numeric",
92
+ timeZone
93
+ }).format(at);
94
+ const time = new Intl.DateTimeFormat(void 0, {
95
+ hour: "numeric",
96
+ minute: "2-digit",
97
+ timeZoneName: "short",
98
+ timeZone
99
+ }).format(at);
100
+ return `${date} at ${time}`;
101
+ }
102
+ function dateFromKey(key) {
103
+ const [y, m, d] = key.split("-").map(Number);
104
+ return new Date(y, (m ?? 1) - 1, d ?? 1, 12, 0, 0, 0);
105
+ }
106
+ export { addMonths, dateFromKey, formatBookingWhen, formatDayLong, formatMonthLabel, formatSlotTime, isBeforeToday, monthMatrix, monthRange, sameMonth, startOfMonth, visitorTimeZone, weekdayLabels, ymd };
107
+ //# sourceMappingURL=time.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["visitorTimeZone","Intl","DateTimeFormat","resolvedOptions","timeZone","ymd","d","y","getFullYear","m","String","getMonth","padStart","day","getDate","startOfMonth","Date","addMonths","n","sameMonth","a","b","isBeforeToday","key","monthMatrix","viewDate","weekStartsOn","year","month","firstWeekday","getDay","startOffset","cells","i","date","push","inMonth","monthRange","startOfView","now","start","getTime","endOfView","startTime","toISOString","endTime","weekdayLabels","fmt","weekday","out","format","formatMonthLabel","formatDayLong","formatSlotTime","iso","hour","minute","formatBookingWhen","at","time","timeZoneName","dateFromKey","split","map","Number"],"sources":["../../src/time.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,109 @@
1
+ function visitorTimeZone() {
2
+ try {
3
+ return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC";
4
+ } catch (e) {
5
+ return "UTC";
6
+ }
7
+ }
8
+ function ymd(d) {
9
+ var y = d.getFullYear();
10
+ var m = String(d.getMonth() + 1).padStart(2, "0");
11
+ var day = String(d.getDate()).padStart(2, "0");
12
+ return `${y}-${m}-${day}`;
13
+ }
14
+ function startOfMonth(d) {
15
+ return new Date(d.getFullYear(), d.getMonth(), 1);
16
+ }
17
+ function addMonths(d, n) {
18
+ return new Date(d.getFullYear(), d.getMonth() + n, 1);
19
+ }
20
+ function sameMonth(a, b) {
21
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
22
+ }
23
+ function isBeforeToday(key) {
24
+ return key < ymd(/* @__PURE__ */new Date());
25
+ }
26
+ function monthMatrix(viewDate) {
27
+ var weekStartsOn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
28
+ var year = viewDate.getFullYear();
29
+ var month = viewDate.getMonth();
30
+ var firstWeekday = new Date(year, month, 1).getDay();
31
+ var startOffset = (firstWeekday - weekStartsOn + 7) % 7;
32
+ var cells = [];
33
+ for (var i = 0; i < 42; i++) {
34
+ var date = new Date(year, month, 1 - startOffset + i);
35
+ cells.push({
36
+ date,
37
+ key: ymd(date),
38
+ inMonth: date.getMonth() === month
39
+ });
40
+ }
41
+ return cells;
42
+ }
43
+ function monthRange(viewDate) {
44
+ var year = viewDate.getFullYear();
45
+ var month = viewDate.getMonth();
46
+ var startOfView = new Date(year, month, 1, 0, 0, 0, 0);
47
+ var now = /* @__PURE__ */new Date();
48
+ var start = startOfView.getTime() > now.getTime() ? startOfView : now;
49
+ var endOfView = new Date(year, month + 1, 0, 23, 59, 59, 999);
50
+ return {
51
+ startTime: start.toISOString(),
52
+ endTime: endOfView.toISOString()
53
+ };
54
+ }
55
+ function weekdayLabels() {
56
+ var weekStartsOn = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
57
+ var fmt = new Intl.DateTimeFormat(void 0, {
58
+ weekday: "short"
59
+ });
60
+ var out = [];
61
+ for (var i = 0; i < 7; i++) {
62
+ var d = new Date(2023, 0, 1 + (i + weekStartsOn) % 7);
63
+ out.push(fmt.format(d));
64
+ }
65
+ return out;
66
+ }
67
+ function formatMonthLabel(d) {
68
+ return new Intl.DateTimeFormat(void 0, {
69
+ month: "long",
70
+ year: "numeric"
71
+ }).format(d);
72
+ }
73
+ function formatDayLong(d) {
74
+ return new Intl.DateTimeFormat(void 0, {
75
+ weekday: "long",
76
+ month: "long",
77
+ day: "numeric"
78
+ }).format(d);
79
+ }
80
+ function formatSlotTime(iso, timeZone) {
81
+ return new Intl.DateTimeFormat(void 0, {
82
+ hour: "numeric",
83
+ minute: "2-digit",
84
+ timeZone
85
+ }).format(new Date(iso));
86
+ }
87
+ function formatBookingWhen(iso, timeZone) {
88
+ var at = new Date(iso);
89
+ var date = new Intl.DateTimeFormat(void 0, {
90
+ weekday: "long",
91
+ month: "long",
92
+ day: "numeric",
93
+ year: "numeric",
94
+ timeZone
95
+ }).format(at);
96
+ var time = new Intl.DateTimeFormat(void 0, {
97
+ hour: "numeric",
98
+ minute: "2-digit",
99
+ timeZoneName: "short",
100
+ timeZone
101
+ }).format(at);
102
+ return `${date} at ${time}`;
103
+ }
104
+ function dateFromKey(key) {
105
+ var [y, m, d] = key.split("-").map(Number);
106
+ return new Date(y, (m !== null && m !== void 0 ? m : 1) - 1, d !== null && d !== void 0 ? d : 1, 12, 0, 0, 0);
107
+ }
108
+ export { addMonths, dateFromKey, formatBookingWhen, formatDayLong, formatMonthLabel, formatSlotTime, isBeforeToday, monthMatrix, monthRange, sameMonth, startOfMonth, visitorTimeZone, weekdayLabels, ymd };
109
+ //# sourceMappingURL=time.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["visitorTimeZone","Intl","DateTimeFormat","resolvedOptions","timeZone","e","ymd","d","y","getFullYear","m","String","getMonth","padStart","day","getDate","startOfMonth","Date","addMonths","n","sameMonth","a","b","isBeforeToday","key","monthMatrix","viewDate","weekStartsOn","arguments","length","year","month","firstWeekday","getDay","startOffset","cells","i","date","push","inMonth","monthRange","startOfView","now","start","getTime","endOfView","startTime","toISOString","endTime","weekdayLabels","fmt","weekday","out","format","formatMonthLabel","formatDayLong","formatSlotTime","iso","hour","minute","formatBookingWhen","at"],"sources":["../../src/time.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}