@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.
- package/README.md +78 -0
- package/dist/cjs/Booker.cjs +153 -0
- package/dist/cjs/Booker.native.js +158 -0
- package/dist/cjs/Booker.native.js.map +1 -0
- package/dist/cjs/BookingForm.cjs +197 -0
- package/dist/cjs/BookingForm.native.js +203 -0
- package/dist/cjs/BookingForm.native.js.map +1 -0
- package/dist/cjs/CalendarEmbed.cjs +121 -0
- package/dist/cjs/CalendarEmbed.native.js +125 -0
- package/dist/cjs/CalendarEmbed.native.js.map +1 -0
- package/dist/cjs/Confirmation.cjs +177 -0
- package/dist/cjs/Confirmation.native.js +185 -0
- package/dist/cjs/Confirmation.native.js.map +1 -0
- package/dist/cjs/EventHeader.cjs +112 -0
- package/dist/cjs/EventHeader.native.js +118 -0
- package/dist/cjs/EventHeader.native.js.map +1 -0
- package/dist/cjs/MonthCalendar.cjs +177 -0
- package/dist/cjs/MonthCalendar.native.js +191 -0
- package/dist/cjs/MonthCalendar.native.js.map +1 -0
- package/dist/cjs/TimeSlots.cjs +119 -0
- package/dist/cjs/TimeSlots.native.js +126 -0
- package/dist/cjs/TimeSlots.native.js.map +1 -0
- package/dist/cjs/client.cjs +136 -0
- package/dist/cjs/client.native.js +267 -0
- package/dist/cjs/client.native.js.map +1 -0
- package/dist/cjs/hooks.cjs +193 -0
- package/dist/cjs/hooks.native.js +221 -0
- package/dist/cjs/hooks.native.js.map +1 -0
- package/dist/cjs/index.cjs +71 -0
- package/dist/cjs/index.native.js +74 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/time.cjs +145 -0
- package/dist/cjs/time.native.js +150 -0
- package/dist/cjs/time.native.js.map +1 -0
- package/dist/cjs/useBooker.cjs +151 -0
- package/dist/cjs/useBooker.native.js +173 -0
- package/dist/cjs/useBooker.native.js.map +1 -0
- package/dist/esm/Booker.mjs +128 -0
- package/dist/esm/Booker.mjs.map +1 -0
- package/dist/esm/Booker.native.js +130 -0
- package/dist/esm/Booker.native.js.map +1 -0
- package/dist/esm/BookingForm.mjs +172 -0
- package/dist/esm/BookingForm.mjs.map +1 -0
- package/dist/esm/BookingForm.native.js +175 -0
- package/dist/esm/BookingForm.native.js.map +1 -0
- package/dist/esm/CalendarEmbed.mjs +96 -0
- package/dist/esm/CalendarEmbed.mjs.map +1 -0
- package/dist/esm/CalendarEmbed.native.js +97 -0
- package/dist/esm/CalendarEmbed.native.js.map +1 -0
- package/dist/esm/Confirmation.mjs +152 -0
- package/dist/esm/Confirmation.mjs.map +1 -0
- package/dist/esm/Confirmation.native.js +157 -0
- package/dist/esm/Confirmation.native.js.map +1 -0
- package/dist/esm/EventHeader.mjs +87 -0
- package/dist/esm/EventHeader.mjs.map +1 -0
- package/dist/esm/EventHeader.native.js +90 -0
- package/dist/esm/EventHeader.native.js.map +1 -0
- package/dist/esm/MonthCalendar.mjs +152 -0
- package/dist/esm/MonthCalendar.mjs.map +1 -0
- package/dist/esm/MonthCalendar.native.js +163 -0
- package/dist/esm/MonthCalendar.native.js.map +1 -0
- package/dist/esm/TimeSlots.mjs +94 -0
- package/dist/esm/TimeSlots.mjs.map +1 -0
- package/dist/esm/TimeSlots.native.js +98 -0
- package/dist/esm/TimeSlots.native.js.map +1 -0
- package/dist/esm/client.mjs +104 -0
- package/dist/esm/client.mjs.map +1 -0
- package/dist/esm/client.native.js +232 -0
- package/dist/esm/client.native.js.map +1 -0
- package/dist/esm/hooks.mjs +165 -0
- package/dist/esm/hooks.mjs.map +1 -0
- package/dist/esm/hooks.native.js +190 -0
- package/dist/esm/hooks.native.js.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +13 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +13 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/time.mjs +107 -0
- package/dist/esm/time.mjs.map +1 -0
- package/dist/esm/time.native.js +109 -0
- package/dist/esm/time.native.js.map +1 -0
- package/dist/esm/useBooker.mjs +126 -0
- package/dist/esm/useBooker.mjs.map +1 -0
- package/dist/esm/useBooker.native.js +145 -0
- package/dist/esm/useBooker.native.js.map +1 -0
- package/package.json +61 -0
- package/src/Booker.tsx +152 -0
- package/src/BookingForm.tsx +180 -0
- package/src/CalendarEmbed.tsx +111 -0
- package/src/Confirmation.tsx +145 -0
- package/src/EventHeader.tsx +85 -0
- package/src/MonthCalendar.tsx +179 -0
- package/src/TimeSlots.tsx +102 -0
- package/src/client.ts +218 -0
- package/src/hooks.ts +180 -0
- package/src/index.ts +72 -0
- package/src/time.ts +131 -0
- package/src/useBooker.ts +187 -0
- package/types/Booker.d.ts +16 -0
- package/types/Booker.d.ts.map +1 -0
- package/types/BookingForm.d.ts +13 -0
- package/types/BookingForm.d.ts.map +1 -0
- package/types/CalendarEmbed.d.ts +15 -0
- package/types/CalendarEmbed.d.ts.map +1 -0
- package/types/Confirmation.d.ts +12 -0
- package/types/Confirmation.d.ts.map +1 -0
- package/types/EventHeader.d.ts +10 -0
- package/types/EventHeader.d.ts.map +1 -0
- package/types/MonthCalendar.d.ts +14 -0
- package/types/MonthCalendar.d.ts.map +1 -0
- package/types/TimeSlots.d.ts +15 -0
- package/types/TimeSlots.d.ts.map +1 -0
- package/types/client.d.ts +77 -0
- package/types/client.d.ts.map +1 -0
- package/types/hooks.d.ts +43 -0
- package/types/hooks.d.ts.map +1 -0
- package/types/index.d.ts +12 -0
- package/types/index.d.ts.map +1 -0
- package/types/time.d.ts +38 -0
- package/types/time.d.ts.map +1 -0
- package/types/useBooker.d.ts +41 -0
- package/types/useBooker.d.ts.map +1 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Paragraph, Separator, SizableText, Spinner, XStack, YStack } from "hanzogui";
|
|
3
|
+
import { DEFAULT_API_URL } from "./client.native.js";
|
|
4
|
+
import { useBooking } from "./hooks.native.js";
|
|
5
|
+
import { visitorTimeZone } from "./time.native.js";
|
|
6
|
+
import { formatBookingWhen } from "./time.native.js";
|
|
7
|
+
function Confirmation(param) {
|
|
8
|
+
var {
|
|
9
|
+
booking,
|
|
10
|
+
uid,
|
|
11
|
+
apiUrl,
|
|
12
|
+
timeZone,
|
|
13
|
+
onDone
|
|
14
|
+
} = param;
|
|
15
|
+
var _data_attendees;
|
|
16
|
+
var api = apiUrl !== null && apiUrl !== void 0 ? apiUrl : DEFAULT_API_URL;
|
|
17
|
+
var tz = timeZone !== null && timeZone !== void 0 ? timeZone : visitorTimeZone();
|
|
18
|
+
var fetched = useBooking(api, booking ? void 0 : uid);
|
|
19
|
+
var data = booking !== null && booking !== void 0 ? booking : fetched.data;
|
|
20
|
+
if (!data && fetched.loading) {
|
|
21
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
22
|
+
alignItems: "center",
|
|
23
|
+
justifyContent: "center",
|
|
24
|
+
padding: "$6",
|
|
25
|
+
gap: "$3",
|
|
26
|
+
minHeight: 200,
|
|
27
|
+
children: [/* @__PURE__ */_jsx(Spinner, {
|
|
28
|
+
size: "large",
|
|
29
|
+
color: "$color9"
|
|
30
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
31
|
+
size: "$3",
|
|
32
|
+
color: "$color10",
|
|
33
|
+
children: "Loading your booking\u2026"
|
|
34
|
+
})]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (!data) {
|
|
38
|
+
var _fetched_error;
|
|
39
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
40
|
+
alignItems: "center",
|
|
41
|
+
justifyContent: "center",
|
|
42
|
+
padding: "$6",
|
|
43
|
+
gap: "$2",
|
|
44
|
+
minHeight: 200,
|
|
45
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
46
|
+
size: "$4",
|
|
47
|
+
fontWeight: "600",
|
|
48
|
+
color: "$color12",
|
|
49
|
+
children: "Booking not found"
|
|
50
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
51
|
+
size: "$3",
|
|
52
|
+
color: "$color10",
|
|
53
|
+
textAlign: "center",
|
|
54
|
+
children: (_fetched_error = fetched.error) !== null && _fetched_error !== void 0 ? _fetched_error : "We could not load this booking."
|
|
55
|
+
})]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
var attendee = (_data_attendees = data.attendees) === null || _data_attendees === void 0 ? void 0 : _data_attendees[0];
|
|
59
|
+
var location = data.location;
|
|
60
|
+
var _attendee_email;
|
|
61
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
62
|
+
gap: "$3",
|
|
63
|
+
padding: "$1",
|
|
64
|
+
alignItems: "center",
|
|
65
|
+
children: [/* @__PURE__ */_jsx(YStack, {
|
|
66
|
+
width: 52,
|
|
67
|
+
height: 52,
|
|
68
|
+
borderRadius: 9999,
|
|
69
|
+
backgroundColor: "$green4",
|
|
70
|
+
alignItems: "center",
|
|
71
|
+
justifyContent: "center",
|
|
72
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
73
|
+
size: "$8",
|
|
74
|
+
color: "$green11",
|
|
75
|
+
children: "\u2713"
|
|
76
|
+
})
|
|
77
|
+
}), /* @__PURE__ */_jsxs(YStack, {
|
|
78
|
+
gap: "$1",
|
|
79
|
+
alignItems: "center",
|
|
80
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
81
|
+
size: "$7",
|
|
82
|
+
fontWeight: "700",
|
|
83
|
+
color: "$color12",
|
|
84
|
+
textAlign: "center",
|
|
85
|
+
children: "You're booked"
|
|
86
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
87
|
+
size: "$4",
|
|
88
|
+
color: "$color11",
|
|
89
|
+
textAlign: "center",
|
|
90
|
+
children: data.title
|
|
91
|
+
})]
|
|
92
|
+
}), /* @__PURE__ */_jsx(Separator, {
|
|
93
|
+
width: "100%"
|
|
94
|
+
}), /* @__PURE__ */_jsxs(YStack, {
|
|
95
|
+
gap: "$2.5",
|
|
96
|
+
width: "100%",
|
|
97
|
+
maxWidth: 420,
|
|
98
|
+
children: [/* @__PURE__ */_jsx(Row, {
|
|
99
|
+
label: "When",
|
|
100
|
+
value: formatBookingWhen(data.start, tz)
|
|
101
|
+
}), location ? /* @__PURE__ */_jsx(Row, {
|
|
102
|
+
label: "Where",
|
|
103
|
+
value: location
|
|
104
|
+
}) : null, (attendee === null || attendee === void 0 ? void 0 : attendee.email) ? /* @__PURE__ */_jsx(Row, {
|
|
105
|
+
label: "Guest",
|
|
106
|
+
value: attendee.email
|
|
107
|
+
}) : null, /* @__PURE__ */_jsx(Row, {
|
|
108
|
+
label: "Status",
|
|
109
|
+
value: titleCase(data.status)
|
|
110
|
+
}), /* @__PURE__ */_jsx(Row, {
|
|
111
|
+
label: "Reference",
|
|
112
|
+
value: data.uid
|
|
113
|
+
})]
|
|
114
|
+
}), /* @__PURE__ */_jsxs(Paragraph, {
|
|
115
|
+
size: "$2",
|
|
116
|
+
color: "$color10",
|
|
117
|
+
textAlign: "center",
|
|
118
|
+
marginTop: "$1",
|
|
119
|
+
children: ["A calendar invite is on its way to ", (_attendee_email = attendee === null || attendee === void 0 ? void 0 : attendee.email) !== null && _attendee_email !== void 0 ? _attendee_email : "your inbox", "."]
|
|
120
|
+
}), onDone ? /* @__PURE__ */_jsx(Button, {
|
|
121
|
+
size: "$3",
|
|
122
|
+
chromeless: true,
|
|
123
|
+
onPress: onDone,
|
|
124
|
+
marginTop: "$1",
|
|
125
|
+
children: "Book another time"
|
|
126
|
+
}) : null]
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function Row(param) {
|
|
130
|
+
var {
|
|
131
|
+
label,
|
|
132
|
+
value
|
|
133
|
+
} = param;
|
|
134
|
+
return /* @__PURE__ */_jsxs(XStack, {
|
|
135
|
+
justifyContent: "space-between",
|
|
136
|
+
gap: "$3",
|
|
137
|
+
alignItems: "flex-start",
|
|
138
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
139
|
+
size: "$3",
|
|
140
|
+
color: "$color10",
|
|
141
|
+
children: label
|
|
142
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
143
|
+
size: "$3",
|
|
144
|
+
color: "$color12",
|
|
145
|
+
fontWeight: "500",
|
|
146
|
+
textAlign: "right",
|
|
147
|
+
flexShrink: 1,
|
|
148
|
+
children: value
|
|
149
|
+
})]
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function titleCase(s) {
|
|
153
|
+
if (!s) return "";
|
|
154
|
+
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
|
|
155
|
+
}
|
|
156
|
+
export { Confirmation };
|
|
157
|
+
//# sourceMappingURL=Confirmation.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Button","Paragraph","Separator","SizableText","Spinner","XStack","YStack","DEFAULT_API_URL","useBooking","visitorTimeZone","formatBookingWhen","Confirmation","param","booking","uid","apiUrl","timeZone","onDone","_data_attendees","api","tz","fetched","data","loading","alignItems","justifyContent","padding","gap","minHeight","children","size","color","_fetched_error","fontWeight","textAlign","error","attendee","attendees","location","_attendee_email","width","height","borderRadius","backgroundColor","title","maxWidth","Row","label","value","start"],"sources":["../../src/Confirmation.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Paragraph, SizableText, XStack, YStack } from "hanzogui";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
function EventHeader({
|
|
4
|
+
event,
|
|
5
|
+
host,
|
|
6
|
+
timeZone,
|
|
7
|
+
compact
|
|
8
|
+
}) {
|
|
9
|
+
const name = event.profile?.name || host;
|
|
10
|
+
const initial = (name?.[0] || "H").toUpperCase();
|
|
11
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
12
|
+
gap: "$2",
|
|
13
|
+
children: [/* @__PURE__ */jsxs(XStack, {
|
|
14
|
+
alignItems: "center",
|
|
15
|
+
gap: "$2.5",
|
|
16
|
+
children: [/* @__PURE__ */jsx(YStack, {
|
|
17
|
+
width: 28,
|
|
18
|
+
height: 28,
|
|
19
|
+
borderRadius: 9999,
|
|
20
|
+
backgroundColor: "$color5",
|
|
21
|
+
alignItems: "center",
|
|
22
|
+
justifyContent: "center",
|
|
23
|
+
children: /* @__PURE__ */jsx(SizableText, {
|
|
24
|
+
size: "$2",
|
|
25
|
+
color: "$color11",
|
|
26
|
+
fontWeight: "600",
|
|
27
|
+
children: initial
|
|
28
|
+
})
|
|
29
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
30
|
+
size: "$3",
|
|
31
|
+
color: "$color10",
|
|
32
|
+
children: name
|
|
33
|
+
})]
|
|
34
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
35
|
+
size: compact ? "$6" : "$8",
|
|
36
|
+
fontWeight: "700",
|
|
37
|
+
color: "$color12",
|
|
38
|
+
children: event.title
|
|
39
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
40
|
+
gap: "$2",
|
|
41
|
+
alignItems: "center",
|
|
42
|
+
flexWrap: "wrap",
|
|
43
|
+
children: [/* @__PURE__ */jsxs(Pill, {
|
|
44
|
+
children: [event.length, " min"]
|
|
45
|
+
}), /* @__PURE__ */jsx(Pill, {
|
|
46
|
+
children: shortZone(timeZone)
|
|
47
|
+
}), event.locations?.[0]?.type ? /* @__PURE__ */jsx(Pill, {
|
|
48
|
+
children: prettyLocation(event.locations[0].type)
|
|
49
|
+
}) : null]
|
|
50
|
+
}), !compact && event.description ? /* @__PURE__ */jsx(Paragraph, {
|
|
51
|
+
size: "$3",
|
|
52
|
+
color: "$color11",
|
|
53
|
+
marginTop: "$1",
|
|
54
|
+
children: event.description
|
|
55
|
+
}) : null]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function Pill({
|
|
59
|
+
children
|
|
60
|
+
}) {
|
|
61
|
+
return /* @__PURE__ */jsx(XStack, {
|
|
62
|
+
backgroundColor: "$color3",
|
|
63
|
+
paddingHorizontal: "$2.5",
|
|
64
|
+
paddingVertical: "$1",
|
|
65
|
+
borderRadius: "$10",
|
|
66
|
+
alignItems: "center",
|
|
67
|
+
children: /* @__PURE__ */jsx(SizableText, {
|
|
68
|
+
size: "$1",
|
|
69
|
+
color: "$color11",
|
|
70
|
+
children
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function shortZone(tz) {
|
|
75
|
+
const city = tz.split("/").pop() || tz;
|
|
76
|
+
return city.replace(/_/g, " ");
|
|
77
|
+
}
|
|
78
|
+
function prettyLocation(type) {
|
|
79
|
+
const t = type.toLowerCase();
|
|
80
|
+
if (t.includes("google")) return "Google Meet";
|
|
81
|
+
if (t.includes("zoom")) return "Zoom";
|
|
82
|
+
if (t.includes("phone")) return "Phone";
|
|
83
|
+
if (t.includes("person")) return "In person";
|
|
84
|
+
return "Video call";
|
|
85
|
+
}
|
|
86
|
+
export { EventHeader };
|
|
87
|
+
//# sourceMappingURL=EventHeader.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Paragraph","SizableText","XStack","YStack","jsx","jsxs","EventHeader","event","host","timeZone","compact","name","profile","initial","toUpperCase","gap","children","alignItems","width","height","borderRadius","backgroundColor","justifyContent","size","color","fontWeight","title","flexWrap","Pill","length","shortZone","locations","type","prettyLocation","description","marginTop","paddingHorizontal","paddingVertical","tz","city","split","pop","replace","t","toLowerCase","includes"],"sources":["../../src/EventHeader.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Paragraph, SizableText, XStack, YStack } from "hanzogui";
|
|
3
|
+
function EventHeader(param) {
|
|
4
|
+
var {
|
|
5
|
+
event,
|
|
6
|
+
host,
|
|
7
|
+
timeZone,
|
|
8
|
+
compact
|
|
9
|
+
} = param;
|
|
10
|
+
var _event_profile, _event_locations_, _event_locations;
|
|
11
|
+
var name = ((_event_profile = event.profile) === null || _event_profile === void 0 ? void 0 : _event_profile.name) || host;
|
|
12
|
+
var initial = ((name === null || name === void 0 ? void 0 : name[0]) || "H").toUpperCase();
|
|
13
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
14
|
+
gap: "$2",
|
|
15
|
+
children: [/* @__PURE__ */_jsxs(XStack, {
|
|
16
|
+
alignItems: "center",
|
|
17
|
+
gap: "$2.5",
|
|
18
|
+
children: [/* @__PURE__ */_jsx(YStack, {
|
|
19
|
+
width: 28,
|
|
20
|
+
height: 28,
|
|
21
|
+
borderRadius: 9999,
|
|
22
|
+
backgroundColor: "$color5",
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
justifyContent: "center",
|
|
25
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
26
|
+
size: "$2",
|
|
27
|
+
color: "$color11",
|
|
28
|
+
fontWeight: "600",
|
|
29
|
+
children: initial
|
|
30
|
+
})
|
|
31
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
32
|
+
size: "$3",
|
|
33
|
+
color: "$color10",
|
|
34
|
+
children: name
|
|
35
|
+
})]
|
|
36
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
37
|
+
size: compact ? "$6" : "$8",
|
|
38
|
+
fontWeight: "700",
|
|
39
|
+
color: "$color12",
|
|
40
|
+
children: event.title
|
|
41
|
+
}), /* @__PURE__ */_jsxs(XStack, {
|
|
42
|
+
gap: "$2",
|
|
43
|
+
alignItems: "center",
|
|
44
|
+
flexWrap: "wrap",
|
|
45
|
+
children: [/* @__PURE__ */_jsxs(Pill, {
|
|
46
|
+
children: [event.length, " min"]
|
|
47
|
+
}), /* @__PURE__ */_jsx(Pill, {
|
|
48
|
+
children: shortZone(timeZone)
|
|
49
|
+
}), ((_event_locations = event.locations) === null || _event_locations === void 0 ? void 0 : (_event_locations_ = _event_locations[0]) === null || _event_locations_ === void 0 ? void 0 : _event_locations_.type) ? /* @__PURE__ */_jsx(Pill, {
|
|
50
|
+
children: prettyLocation(event.locations[0].type)
|
|
51
|
+
}) : null]
|
|
52
|
+
}), !compact && event.description ? /* @__PURE__ */_jsx(Paragraph, {
|
|
53
|
+
size: "$3",
|
|
54
|
+
color: "$color11",
|
|
55
|
+
marginTop: "$1",
|
|
56
|
+
children: event.description
|
|
57
|
+
}) : null]
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function Pill(param) {
|
|
61
|
+
var {
|
|
62
|
+
children
|
|
63
|
+
} = param;
|
|
64
|
+
return /* @__PURE__ */_jsx(XStack, {
|
|
65
|
+
backgroundColor: "$color3",
|
|
66
|
+
paddingHorizontal: "$2.5",
|
|
67
|
+
paddingVertical: "$1",
|
|
68
|
+
borderRadius: "$10",
|
|
69
|
+
alignItems: "center",
|
|
70
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
71
|
+
size: "$1",
|
|
72
|
+
color: "$color11",
|
|
73
|
+
children
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function shortZone(tz) {
|
|
78
|
+
var city = tz.split("/").pop() || tz;
|
|
79
|
+
return city.replace(/_/g, " ");
|
|
80
|
+
}
|
|
81
|
+
function prettyLocation(type) {
|
|
82
|
+
var t = type.toLowerCase();
|
|
83
|
+
if (t.includes("google")) return "Google Meet";
|
|
84
|
+
if (t.includes("zoom")) return "Zoom";
|
|
85
|
+
if (t.includes("phone")) return "Phone";
|
|
86
|
+
if (t.includes("person")) return "In person";
|
|
87
|
+
return "Video call";
|
|
88
|
+
}
|
|
89
|
+
export { EventHeader };
|
|
90
|
+
//# sourceMappingURL=EventHeader.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Paragraph","SizableText","XStack","YStack","EventHeader","param","event","host","timeZone","compact","_event_profile","_event_locations_","_event_locations","name","profile","initial","toUpperCase","gap","children","alignItems","width","height","borderRadius","backgroundColor","justifyContent","size","color","fontWeight","title","flexWrap","Pill","length","shortZone","locations","type","prettyLocation"],"sources":["../../src/EventHeader.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAW,EAAAC,IAAA,IAAAC,KAAa,QAAQ,mBAAc;AAgBjD,SASIC,SATJ,EAAAC,WAAA,EAAAC,MAAA,EAAAC,MAAA;AALC,SAASC,YAAYC,KAAE;EAC5B;IAAMC,KAAA;IAAOC,IAAA;IAAMC,QAAA;IAASC;EAAQ,IAAAJ,KAAA;EACpC,IAAAK,cAAiB,EAAAC,iBAAkB,EAAAC,gBAAY;EAC/C,IAAAC,IACE,KAAAH,cAAA,GAACJ,KAAA,CAAAQ,OAAW,MACV,QAAAJ,cAAA,uBAAAA,cAAA,CAAAG,IAAA,KAAAN,IAAA;EAAA,IAAAQ,OAAA,KAAAF,IAAA,KAAC,QAAOA,IAAA,UAAW,SAAS,IAAIA,IAAA,QAC9B,KAAAG,WAAA;EAAA,sBAAAjB,KAAA,CAAAI,MAAA;IAAAc,GAAA,EAAC;IAAAC,QAAA,kBACQnB,KAAA,CAAAG,MAAA;MAAAiB,UACC;MAAAF,GACR;MAAcC,QACd,GACA,eAAWrB,IAAA,CAAAM,MAAA;QACXiB,KAAA;QAEAC,MAAA;QAEAC,YAAA;QACFC,eAAA;QACAJ,UAAA,UAAC;QAGHK,cAAA;QAEAN,QAAA,iBAACrB,IAAY,CAAAI,WAAM,EAAU;UAI7BwB,IAAA;UACEC,KAAA,YAAC;UAAYC,UAAA;UAAOT,QAAA,EAAAH;QAAI;MACxB,IACC,eAAmBlB,IAAG,CAAAI,WACrB;QAEJwB,IAAA;QAEEC,KAAW,YAAM;QAKrBR,QAAA,EAAAL;MAEJ;IAGE,IACG,eAAAhB,IAAA,CAAAI,WAAA;MAAAwB,IAAA,EAAAhB,OAAA;MACCkB,UAAA,OAAgB;MAChBD,KAAA,YAAkB;MAClBR,QAAA,EAAAZ,KAAgB,CAAAsB;IAChB,IACA,eAAW7B,KAAA,CAAAG,MAAA;MAEXe,GAAA;MAEAE,UAAA;MACFU,QAAA;MAEJX,QAAA,GAES,eAA8BnB,KAAA,CAAA+B,IAAA;QAC/BZ,QAAU,GACJZ,KAAA,CAAAyB,MAAQ,EACtB;MAGQ,EAAI,EACJ,eAAiBlC,IAAG,CAAAiC,IAAO;QAC3BZ,QAAS,EAAAc,SAAS,CAAAxB,QAAO;MACzB,IACA,EAAAI,gBAAoB,GAAAN,KAAO,CAAA2B,SAAA,cAAArB,gBAAA,wBAAAD,iBAAA,GAAAC,gBAAA,iBAAAD,iBAAA,uBAAAA,iBAAA,CAAAuB,IAAA,mBAAArC,IAAA,CAAAiC,IAAA;QAC1BZ,QAAA,EAAAiB,cAAA,CAAA7B,KAAA,CAAA2B,SAAA,IAAAC,IAAA;MACT","ignoreList":[]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { SizableText, Spinner, XStack, YStack } from "hanzogui";
|
|
2
|
+
import { formatMonthLabel, isBeforeToday, monthMatrix, weekdayLabels } from "./time.mjs";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
function MonthCalendar({
|
|
5
|
+
viewDate,
|
|
6
|
+
availableKeys,
|
|
7
|
+
selectedDay,
|
|
8
|
+
onSelectDay,
|
|
9
|
+
onPrev,
|
|
10
|
+
onNext,
|
|
11
|
+
atFirstMonth,
|
|
12
|
+
weekStartsOn = 0,
|
|
13
|
+
loading
|
|
14
|
+
}) {
|
|
15
|
+
const cells = monthMatrix(viewDate, weekStartsOn);
|
|
16
|
+
const rows = [];
|
|
17
|
+
for (let i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));
|
|
18
|
+
const labels = weekdayLabels(weekStartsOn);
|
|
19
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
20
|
+
gap: "$2",
|
|
21
|
+
flex: 1,
|
|
22
|
+
minWidth: 260,
|
|
23
|
+
children: [/* @__PURE__ */jsxs(XStack, {
|
|
24
|
+
alignItems: "center",
|
|
25
|
+
justifyContent: "space-between",
|
|
26
|
+
paddingVertical: "$1",
|
|
27
|
+
children: [/* @__PURE__ */jsx(NavArrow, {
|
|
28
|
+
label: "Previous month",
|
|
29
|
+
disabled: atFirstMonth,
|
|
30
|
+
onPress: onPrev,
|
|
31
|
+
children: "\u2039"
|
|
32
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
33
|
+
alignItems: "center",
|
|
34
|
+
gap: "$2",
|
|
35
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
36
|
+
size: "$5",
|
|
37
|
+
fontWeight: "700",
|
|
38
|
+
color: "$color12",
|
|
39
|
+
children: formatMonthLabel(viewDate)
|
|
40
|
+
}), loading ? /* @__PURE__ */jsx(Spinner, {
|
|
41
|
+
size: "small",
|
|
42
|
+
color: "$color9"
|
|
43
|
+
}) : null]
|
|
44
|
+
}), /* @__PURE__ */jsx(NavArrow, {
|
|
45
|
+
label: "Next month",
|
|
46
|
+
onPress: onNext,
|
|
47
|
+
children: "\u203A"
|
|
48
|
+
})]
|
|
49
|
+
}), /* @__PURE__ */jsx(XStack, {
|
|
50
|
+
children: labels.map(l => /* @__PURE__ */jsx(YStack, {
|
|
51
|
+
flexBasis: 0,
|
|
52
|
+
flexGrow: 1,
|
|
53
|
+
alignItems: "center",
|
|
54
|
+
paddingVertical: "$1",
|
|
55
|
+
children: /* @__PURE__ */jsx(SizableText, {
|
|
56
|
+
size: "$1",
|
|
57
|
+
color: "$color10",
|
|
58
|
+
children: l
|
|
59
|
+
})
|
|
60
|
+
}, l))
|
|
61
|
+
}), /* @__PURE__ */jsx(YStack, {
|
|
62
|
+
gap: "$1.5",
|
|
63
|
+
children: rows.map((row, r) => /* @__PURE__ */jsx(XStack, {
|
|
64
|
+
gap: "$1.5",
|
|
65
|
+
children: row.map(cell => /* @__PURE__ */jsx(DayCell, {
|
|
66
|
+
cell,
|
|
67
|
+
available: availableKeys.has(cell.key),
|
|
68
|
+
past: isBeforeToday(cell.key),
|
|
69
|
+
selected: selectedDay === cell.key,
|
|
70
|
+
onSelectDay
|
|
71
|
+
}, cell.key))
|
|
72
|
+
}, r))
|
|
73
|
+
})]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function DayCell({
|
|
77
|
+
cell,
|
|
78
|
+
available,
|
|
79
|
+
past,
|
|
80
|
+
selected,
|
|
81
|
+
onSelectDay
|
|
82
|
+
}) {
|
|
83
|
+
const selectable = cell.inMonth && available && !past;
|
|
84
|
+
const dayNum = cell.date.getDate();
|
|
85
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
86
|
+
flexBasis: 0,
|
|
87
|
+
flexGrow: 1,
|
|
88
|
+
aspectRatio: 1,
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
justifyContent: "center",
|
|
91
|
+
borderRadius: "$4",
|
|
92
|
+
borderWidth: 1,
|
|
93
|
+
borderColor: selected ? "$color12" : selectable ? "$color5" : "transparent",
|
|
94
|
+
backgroundColor: selected ? "$color12" : selectable ? "$color2" : "transparent",
|
|
95
|
+
opacity: cell.inMonth ? 1 : 0,
|
|
96
|
+
cursor: selectable ? "pointer" : "default",
|
|
97
|
+
hoverStyle: selectable && !selected ? {
|
|
98
|
+
backgroundColor: "$color4"
|
|
99
|
+
} : void 0,
|
|
100
|
+
pressStyle: selectable ? {
|
|
101
|
+
backgroundColor: "$color6"
|
|
102
|
+
} : void 0,
|
|
103
|
+
onPress: selectable ? () => onSelectDay(cell.key) : void 0,
|
|
104
|
+
"aria-label": selectable ? `Select ${cell.key}` : void 0,
|
|
105
|
+
role: selectable ? "button" : void 0,
|
|
106
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
107
|
+
size: "$3",
|
|
108
|
+
fontWeight: selectable ? "600" : "400",
|
|
109
|
+
color: selected ? "$color1" : selectable ? "$color12" : "$color8",
|
|
110
|
+
children: dayNum
|
|
111
|
+
}), selectable && !selected ? /* @__PURE__ */jsx(YStack, {
|
|
112
|
+
position: "absolute",
|
|
113
|
+
bottom: 4,
|
|
114
|
+
width: 4,
|
|
115
|
+
height: 4,
|
|
116
|
+
borderRadius: 9999,
|
|
117
|
+
backgroundColor: "$color10"
|
|
118
|
+
}) : null]
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function NavArrow({
|
|
122
|
+
children,
|
|
123
|
+
onPress,
|
|
124
|
+
disabled,
|
|
125
|
+
label
|
|
126
|
+
}) {
|
|
127
|
+
return /* @__PURE__ */jsx(YStack, {
|
|
128
|
+
width: 34,
|
|
129
|
+
height: 34,
|
|
130
|
+
alignItems: "center",
|
|
131
|
+
justifyContent: "center",
|
|
132
|
+
borderRadius: "$4",
|
|
133
|
+
opacity: disabled ? 0.35 : 1,
|
|
134
|
+
cursor: disabled ? "default" : "pointer",
|
|
135
|
+
hoverStyle: disabled ? void 0 : {
|
|
136
|
+
backgroundColor: "$color4"
|
|
137
|
+
},
|
|
138
|
+
pressStyle: disabled ? void 0 : {
|
|
139
|
+
backgroundColor: "$color6"
|
|
140
|
+
},
|
|
141
|
+
onPress: disabled ? void 0 : onPress,
|
|
142
|
+
"aria-label": label,
|
|
143
|
+
role: "button",
|
|
144
|
+
children: /* @__PURE__ */jsx(SizableText, {
|
|
145
|
+
size: "$6",
|
|
146
|
+
color: "$color11",
|
|
147
|
+
children
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export { MonthCalendar };
|
|
152
|
+
//# sourceMappingURL=MonthCalendar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SizableText","Spinner","XStack","YStack","formatMonthLabel","isBeforeToday","monthMatrix","weekdayLabels","jsx","jsxs","MonthCalendar","viewDate","availableKeys","selectedDay","onSelectDay","onPrev","onNext","atFirstMonth","weekStartsOn","loading","cells","rows","i","length","push","slice","labels","gap","flex","minWidth","children","alignItems","justifyContent","paddingVertical","NavArrow","label","disabled","onPress","size","fontWeight","color","map","l","flexBasis","flexGrow","row","r","cell","DayCell","available","has","key","past","selected","selectable","inMonth","dayNum","date","getDate","aspectRatio","borderRadius","borderWidth","borderColor","backgroundColor","opacity","cursor","hoverStyle","pressStyle","role","position","bottom","width","height"],"sources":["../../src/MonthCalendar.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SizableText, Spinner, XStack, YStack } from "hanzogui";
|
|
3
|
+
import { formatMonthLabel, isBeforeToday, monthMatrix, weekdayLabels } from "./time.native.js";
|
|
4
|
+
function MonthCalendar(param) {
|
|
5
|
+
var {
|
|
6
|
+
viewDate,
|
|
7
|
+
availableKeys,
|
|
8
|
+
selectedDay,
|
|
9
|
+
onSelectDay,
|
|
10
|
+
onPrev,
|
|
11
|
+
onNext,
|
|
12
|
+
atFirstMonth,
|
|
13
|
+
weekStartsOn = 0,
|
|
14
|
+
loading
|
|
15
|
+
} = param;
|
|
16
|
+
var cells = monthMatrix(viewDate, weekStartsOn);
|
|
17
|
+
var rows = [];
|
|
18
|
+
for (var i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));
|
|
19
|
+
var labels = weekdayLabels(weekStartsOn);
|
|
20
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
21
|
+
gap: "$2",
|
|
22
|
+
flex: 1,
|
|
23
|
+
minWidth: 260,
|
|
24
|
+
children: [/* @__PURE__ */_jsxs(XStack, {
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
justifyContent: "space-between",
|
|
27
|
+
paddingVertical: "$1",
|
|
28
|
+
children: [/* @__PURE__ */_jsx(NavArrow, {
|
|
29
|
+
label: "Previous month",
|
|
30
|
+
disabled: atFirstMonth,
|
|
31
|
+
onPress: onPrev,
|
|
32
|
+
children: "\u2039"
|
|
33
|
+
}), /* @__PURE__ */_jsxs(XStack, {
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
gap: "$2",
|
|
36
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
37
|
+
size: "$5",
|
|
38
|
+
fontWeight: "700",
|
|
39
|
+
color: "$color12",
|
|
40
|
+
children: formatMonthLabel(viewDate)
|
|
41
|
+
}), loading ? /* @__PURE__ */_jsx(Spinner, {
|
|
42
|
+
size: "small",
|
|
43
|
+
color: "$color9"
|
|
44
|
+
}) : null]
|
|
45
|
+
}), /* @__PURE__ */_jsx(NavArrow, {
|
|
46
|
+
label: "Next month",
|
|
47
|
+
onPress: onNext,
|
|
48
|
+
children: "\u203A"
|
|
49
|
+
})]
|
|
50
|
+
}), /* @__PURE__ */_jsx(XStack, {
|
|
51
|
+
children: labels.map(function (l) {
|
|
52
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
53
|
+
flexBasis: 0,
|
|
54
|
+
flexGrow: 1,
|
|
55
|
+
alignItems: "center",
|
|
56
|
+
paddingVertical: "$1",
|
|
57
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
58
|
+
size: "$1",
|
|
59
|
+
color: "$color10",
|
|
60
|
+
children: l
|
|
61
|
+
})
|
|
62
|
+
}, l);
|
|
63
|
+
})
|
|
64
|
+
}), /* @__PURE__ */_jsx(YStack, {
|
|
65
|
+
gap: "$1.5",
|
|
66
|
+
children: rows.map(function (row, r) {
|
|
67
|
+
return /* @__PURE__ */_jsx(XStack, {
|
|
68
|
+
gap: "$1.5",
|
|
69
|
+
children: row.map(function (cell) {
|
|
70
|
+
return /* @__PURE__ */_jsx(DayCell, {
|
|
71
|
+
cell,
|
|
72
|
+
available: availableKeys.has(cell.key),
|
|
73
|
+
past: isBeforeToday(cell.key),
|
|
74
|
+
selected: selectedDay === cell.key,
|
|
75
|
+
onSelectDay
|
|
76
|
+
}, cell.key);
|
|
77
|
+
})
|
|
78
|
+
}, r);
|
|
79
|
+
})
|
|
80
|
+
})]
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function DayCell(param) {
|
|
84
|
+
var {
|
|
85
|
+
cell,
|
|
86
|
+
available,
|
|
87
|
+
past,
|
|
88
|
+
selected,
|
|
89
|
+
onSelectDay
|
|
90
|
+
} = param;
|
|
91
|
+
var selectable = cell.inMonth && available && !past;
|
|
92
|
+
var dayNum = cell.date.getDate();
|
|
93
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
94
|
+
flexBasis: 0,
|
|
95
|
+
flexGrow: 1,
|
|
96
|
+
aspectRatio: 1,
|
|
97
|
+
alignItems: "center",
|
|
98
|
+
justifyContent: "center",
|
|
99
|
+
borderRadius: "$4",
|
|
100
|
+
borderWidth: 1,
|
|
101
|
+
borderColor: selected ? "$color12" : selectable ? "$color5" : "transparent",
|
|
102
|
+
backgroundColor: selected ? "$color12" : selectable ? "$color2" : "transparent",
|
|
103
|
+
opacity: cell.inMonth ? 1 : 0,
|
|
104
|
+
cursor: selectable ? "pointer" : "default",
|
|
105
|
+
hoverStyle: selectable && !selected ? {
|
|
106
|
+
backgroundColor: "$color4"
|
|
107
|
+
} : void 0,
|
|
108
|
+
pressStyle: selectable ? {
|
|
109
|
+
backgroundColor: "$color6"
|
|
110
|
+
} : void 0,
|
|
111
|
+
onPress: selectable ? function () {
|
|
112
|
+
return onSelectDay(cell.key);
|
|
113
|
+
} : void 0,
|
|
114
|
+
"aria-label": selectable ? `Select ${cell.key}` : void 0,
|
|
115
|
+
role: selectable ? "button" : void 0,
|
|
116
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
117
|
+
size: "$3",
|
|
118
|
+
fontWeight: selectable ? "600" : "400",
|
|
119
|
+
color: selected ? "$color1" : selectable ? "$color12" : "$color8",
|
|
120
|
+
children: dayNum
|
|
121
|
+
}), selectable && !selected ? /* @__PURE__ */_jsx(YStack, {
|
|
122
|
+
position: "absolute",
|
|
123
|
+
bottom: 4,
|
|
124
|
+
width: 4,
|
|
125
|
+
height: 4,
|
|
126
|
+
borderRadius: 9999,
|
|
127
|
+
backgroundColor: "$color10"
|
|
128
|
+
}) : null]
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function NavArrow(param) {
|
|
132
|
+
var {
|
|
133
|
+
children,
|
|
134
|
+
onPress,
|
|
135
|
+
disabled,
|
|
136
|
+
label
|
|
137
|
+
} = param;
|
|
138
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
139
|
+
width: 34,
|
|
140
|
+
height: 34,
|
|
141
|
+
alignItems: "center",
|
|
142
|
+
justifyContent: "center",
|
|
143
|
+
borderRadius: "$4",
|
|
144
|
+
opacity: disabled ? 0.35 : 1,
|
|
145
|
+
cursor: disabled ? "default" : "pointer",
|
|
146
|
+
hoverStyle: disabled ? void 0 : {
|
|
147
|
+
backgroundColor: "$color4"
|
|
148
|
+
},
|
|
149
|
+
pressStyle: disabled ? void 0 : {
|
|
150
|
+
backgroundColor: "$color6"
|
|
151
|
+
},
|
|
152
|
+
onPress: disabled ? void 0 : onPress,
|
|
153
|
+
"aria-label": label,
|
|
154
|
+
role: "button",
|
|
155
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
156
|
+
size: "$6",
|
|
157
|
+
color: "$color11",
|
|
158
|
+
children
|
|
159
|
+
})
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
export { MonthCalendar };
|
|
163
|
+
//# sourceMappingURL=MonthCalendar.native.js.map
|