@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,191 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
+ value: true
24
+ }), mod);
25
+ var MonthCalendar_exports = {};
26
+ __export(MonthCalendar_exports, {
27
+ MonthCalendar: () => MonthCalendar
28
+ });
29
+ module.exports = __toCommonJS(MonthCalendar_exports);
30
+ var import_jsx_runtime = require("react/jsx-runtime");
31
+ var import_hanzogui = require("hanzogui");
32
+ var import_time = require("./time.native.js");
33
+ function MonthCalendar(param) {
34
+ var {
35
+ viewDate,
36
+ availableKeys,
37
+ selectedDay,
38
+ onSelectDay,
39
+ onPrev,
40
+ onNext,
41
+ atFirstMonth,
42
+ weekStartsOn = 0,
43
+ loading
44
+ } = param;
45
+ var cells = (0, import_time.monthMatrix)(viewDate, weekStartsOn);
46
+ var rows = [];
47
+ for (var i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));
48
+ var labels = (0, import_time.weekdayLabels)(weekStartsOn);
49
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.YStack, {
50
+ gap: "$2",
51
+ flex: 1,
52
+ minWidth: 260,
53
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.XStack, {
54
+ alignItems: "center",
55
+ justifyContent: "space-between",
56
+ paddingVertical: "$1",
57
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(NavArrow, {
58
+ label: "Previous month",
59
+ disabled: atFirstMonth,
60
+ onPress: onPrev,
61
+ children: "\u2039"
62
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.XStack, {
63
+ alignItems: "center",
64
+ gap: "$2",
65
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
66
+ size: "$5",
67
+ fontWeight: "700",
68
+ color: "$color12",
69
+ children: (0, import_time.formatMonthLabel)(viewDate)
70
+ }), loading ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.Spinner, {
71
+ size: "small",
72
+ color: "$color9"
73
+ }) : null]
74
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(NavArrow, {
75
+ label: "Next month",
76
+ onPress: onNext,
77
+ children: "\u203A"
78
+ })]
79
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.XStack, {
80
+ children: labels.map(function (l) {
81
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
82
+ flexBasis: 0,
83
+ flexGrow: 1,
84
+ alignItems: "center",
85
+ paddingVertical: "$1",
86
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
87
+ size: "$1",
88
+ color: "$color10",
89
+ children: l
90
+ })
91
+ }, l);
92
+ })
93
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
94
+ gap: "$1.5",
95
+ children: rows.map(function (row, r) {
96
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.XStack, {
97
+ gap: "$1.5",
98
+ children: row.map(function (cell) {
99
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(DayCell, {
100
+ cell,
101
+ available: availableKeys.has(cell.key),
102
+ past: (0, import_time.isBeforeToday)(cell.key),
103
+ selected: selectedDay === cell.key,
104
+ onSelectDay
105
+ }, cell.key);
106
+ })
107
+ }, r);
108
+ })
109
+ })]
110
+ });
111
+ }
112
+ function DayCell(param) {
113
+ var {
114
+ cell,
115
+ available,
116
+ past,
117
+ selected,
118
+ onSelectDay
119
+ } = param;
120
+ var selectable = cell.inMonth && available && !past;
121
+ var dayNum = cell.date.getDate();
122
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.YStack, {
123
+ flexBasis: 0,
124
+ flexGrow: 1,
125
+ aspectRatio: 1,
126
+ alignItems: "center",
127
+ justifyContent: "center",
128
+ borderRadius: "$4",
129
+ borderWidth: 1,
130
+ borderColor: selected ? "$color12" : selectable ? "$color5" : "transparent",
131
+ backgroundColor: selected ? "$color12" : selectable ? "$color2" : "transparent",
132
+ opacity: cell.inMonth ? 1 : 0,
133
+ cursor: selectable ? "pointer" : "default",
134
+ hoverStyle: selectable && !selected ? {
135
+ backgroundColor: "$color4"
136
+ } : void 0,
137
+ pressStyle: selectable ? {
138
+ backgroundColor: "$color6"
139
+ } : void 0,
140
+ onPress: selectable ? function () {
141
+ return onSelectDay(cell.key);
142
+ } : void 0,
143
+ "aria-label": selectable ? `Select ${cell.key}` : void 0,
144
+ role: selectable ? "button" : void 0,
145
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
146
+ size: "$3",
147
+ fontWeight: selectable ? "600" : "400",
148
+ color: selected ? "$color1" : selectable ? "$color12" : "$color8",
149
+ children: dayNum
150
+ }), selectable && !selected ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
151
+ position: "absolute",
152
+ bottom: 4,
153
+ width: 4,
154
+ height: 4,
155
+ borderRadius: 9999,
156
+ backgroundColor: "$color10"
157
+ }) : null]
158
+ });
159
+ }
160
+ function NavArrow(param) {
161
+ var {
162
+ children,
163
+ onPress,
164
+ disabled,
165
+ label
166
+ } = param;
167
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
168
+ width: 34,
169
+ height: 34,
170
+ alignItems: "center",
171
+ justifyContent: "center",
172
+ borderRadius: "$4",
173
+ opacity: disabled ? 0.35 : 1,
174
+ cursor: disabled ? "default" : "pointer",
175
+ hoverStyle: disabled ? void 0 : {
176
+ backgroundColor: "$color4"
177
+ },
178
+ pressStyle: disabled ? void 0 : {
179
+ backgroundColor: "$color6"
180
+ },
181
+ onPress: disabled ? void 0 : onPress,
182
+ "aria-label": label,
183
+ role: "button",
184
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
185
+ size: "$6",
186
+ color: "$color11",
187
+ children
188
+ })
189
+ });
190
+ }
191
+ //# sourceMappingURL=MonthCalendar.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","MonthCalendar_exports","__export","MonthCalendar","module","exports","import_jsx_runtime","require","import_hanzogui","import_time","param","viewDate","availableKeys","selectedDay","onSelectDay","onPrev","onNext","atFirstMonth","weekStartsOn","loading","cells","monthMatrix","rows","i","length","push","slice","labels","weekdayLabels","jsxs","YStack","gap","flex","minWidth","children","XStack","alignItems","justifyContent","paddingVertical","jsx","NavArrow","label","disabled","onPress","SizableText","size","fontWeight","color","formatMonthLabel","Spinner","map","l","flexBasis","flexGrow","row","r","cell","DayCell","available","has","key","past","isBeforeToday","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,119 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var TimeSlots_exports = {};
24
+ __export(TimeSlots_exports, {
25
+ TimeSlots: () => TimeSlots
26
+ });
27
+ module.exports = __toCommonJS(TimeSlots_exports);
28
+ var import_hanzogui = require("hanzogui");
29
+ var import_time = require("./time.cjs");
30
+ var import_jsx_runtime = require("react/jsx-runtime");
31
+ function TimeSlots({
32
+ dayKey,
33
+ slots,
34
+ timeZone,
35
+ onPick,
36
+ selectedIso,
37
+ loading,
38
+ compact,
39
+ maxHeight = 360
40
+ }) {
41
+ if (!dayKey) {
42
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
43
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
44
+ size: "$3",
45
+ color: "$color10",
46
+ textAlign: "center",
47
+ children: "Select a day to see available times."
48
+ })
49
+ });
50
+ }
51
+ const heading = (0, import_time.formatDayLong)((0, import_time.dateFromKey)(dayKey));
52
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.YStack, {
53
+ gap: "$2",
54
+ flex: 1,
55
+ minWidth: 200,
56
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
57
+ size: "$4",
58
+ fontWeight: "600",
59
+ color: "$color12",
60
+ children: heading
61
+ }), loading ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
62
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
63
+ size: "$2",
64
+ color: "$color10",
65
+ children: "Loading times\u2026"
66
+ })
67
+ }) : slots.length === 0 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
68
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
69
+ size: "$3",
70
+ color: "$color10",
71
+ textAlign: "center",
72
+ children: "No times left on this day. Try another."
73
+ })
74
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.ScrollView, {
75
+ maxHeight,
76
+ showsVerticalScrollIndicator: false,
77
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.XStack, {
78
+ flexWrap: "wrap",
79
+ gap: "$2",
80
+ flexDirection: compact ? "row" : "column",
81
+ children: slots.map(slot => {
82
+ const active = selectedIso === slot.time;
83
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.Button, {
84
+ size: "$3",
85
+ theme: active ? "blue" : void 0,
86
+ chromeless: !active,
87
+ borderWidth: 1,
88
+ borderColor: active ? "$color8" : "$color6",
89
+ backgroundColor: active ? void 0 : "$color1",
90
+ hoverStyle: {
91
+ borderColor: "$color10"
92
+ },
93
+ pressStyle: {
94
+ backgroundColor: "$color4"
95
+ },
96
+ onPress: () => onPick(slot.time),
97
+ "aria-label": `Book ${(0, import_time.formatSlotTime)(slot.time, timeZone)}`,
98
+ ...(compact ? {} : {
99
+ alignSelf: "stretch"
100
+ }),
101
+ children: (0, import_time.formatSlotTime)(slot.time, timeZone)
102
+ }, slot.time);
103
+ })
104
+ })
105
+ })]
106
+ });
107
+ }
108
+ function Centered({
109
+ children
110
+ }) {
111
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
112
+ flex: 1,
113
+ minHeight: 120,
114
+ alignItems: "center",
115
+ justifyContent: "center",
116
+ padding: "$4",
117
+ children
118
+ });
119
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
+ value: true
24
+ }), mod);
25
+ var TimeSlots_exports = {};
26
+ __export(TimeSlots_exports, {
27
+ TimeSlots: () => TimeSlots
28
+ });
29
+ module.exports = __toCommonJS(TimeSlots_exports);
30
+ var import_jsx_runtime = require("react/jsx-runtime");
31
+ var import_hanzogui = require("hanzogui");
32
+ var import_time = require("./time.native.js");
33
+ function TimeSlots(param) {
34
+ var {
35
+ dayKey,
36
+ slots,
37
+ timeZone,
38
+ onPick,
39
+ selectedIso,
40
+ loading,
41
+ compact,
42
+ maxHeight = 360
43
+ } = param;
44
+ if (!dayKey) {
45
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
46
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
47
+ size: "$3",
48
+ color: "$color10",
49
+ textAlign: "center",
50
+ children: "Select a day to see available times."
51
+ })
52
+ });
53
+ }
54
+ var heading = (0, import_time.formatDayLong)((0, import_time.dateFromKey)(dayKey));
55
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_hanzogui.YStack, {
56
+ gap: "$2",
57
+ flex: 1,
58
+ minWidth: 200,
59
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
60
+ size: "$4",
61
+ fontWeight: "600",
62
+ color: "$color12",
63
+ children: heading
64
+ }), loading ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
65
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
66
+ size: "$2",
67
+ color: "$color10",
68
+ children: "Loading times\u2026"
69
+ })
70
+ }) : slots.length === 0 ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(Centered, {
71
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.SizableText, {
72
+ size: "$3",
73
+ color: "$color10",
74
+ textAlign: "center",
75
+ children: "No times left on this day. Try another."
76
+ })
77
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.ScrollView, {
78
+ maxHeight,
79
+ showsVerticalScrollIndicator: false,
80
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.XStack, {
81
+ flexWrap: "wrap",
82
+ gap: "$2",
83
+ flexDirection: compact ? "row" : "column",
84
+ children: slots.map(function (slot) {
85
+ var active = selectedIso === slot.time;
86
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.Button, {
87
+ size: "$3",
88
+ theme: active ? "blue" : void 0,
89
+ chromeless: !active,
90
+ borderWidth: 1,
91
+ borderColor: active ? "$color8" : "$color6",
92
+ backgroundColor: active ? void 0 : "$color1",
93
+ hoverStyle: {
94
+ borderColor: "$color10"
95
+ },
96
+ pressStyle: {
97
+ backgroundColor: "$color4"
98
+ },
99
+ onPress: function () {
100
+ return onPick(slot.time);
101
+ },
102
+ "aria-label": `Book ${(0, import_time.formatSlotTime)(slot.time, timeZone)}`,
103
+ ...(compact ? {} : {
104
+ alignSelf: "stretch"
105
+ }),
106
+ children: (0, import_time.formatSlotTime)(slot.time, timeZone)
107
+ }, slot.time);
108
+ })
109
+ })
110
+ })]
111
+ });
112
+ }
113
+ function Centered(param) {
114
+ var {
115
+ children
116
+ } = param;
117
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_hanzogui.YStack, {
118
+ flex: 1,
119
+ minHeight: 120,
120
+ alignItems: "center",
121
+ justifyContent: "center",
122
+ padding: "$4",
123
+ children
124
+ });
125
+ }
126
+ //# sourceMappingURL=TimeSlots.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","TimeSlots_exports","__export","TimeSlots","module","exports","import_jsx_runtime","require","import_hanzogui","import_time","param","dayKey","slots","timeZone","onPick","selectedIso","loading","compact","maxHeight","jsx","Centered","children","SizableText","size","color","textAlign","heading","formatDayLong","dateFromKey","jsxs","YStack","gap","flex","minWidth","fontWeight","length","ScrollView","showsVerticalScrollIndicator","XStack","flexWrap","flexDirection","map","slot","active","time","Button","theme","chromeless","borderWidth"],"sources":["../../src/TimeSlots.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,iBAAA;AAAAC,QAAA,CAAAD,iBAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAA;AAAA;AACAC,MAAA,CAAAC,OAAA,GAAAT,YAAgE,CAAAK,iBAAA;AAEhE,IAAAK,kBAA2D,GAAAC,OAAA;AA4BnD,IAAAC,eAAA,GAAAD,OAAA;AAbD,IAAAE,WAAS,GAAAF,OAAU;AAAA,SACxBJ,UAAAO,KAAA;EACA;IAAAC,MAAA;IAAAC,KAAA;IAAAC,QAAA;IAAAC,MAAA;IAAAC,WAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,SAAA;EAAA,IAAAR,KAAA;EACA,KAAAC,MAAA;IACA,0BAAAL,kBAAA,CAAAa,GAAA,EAAAC,QAAA;MACAC,QAAA,qBAAAf,kBAAA,CAAAa,GAAA,EAAAX,eAAA,CAAAc,WAAA;QACAC,IAAA;QACAC,KAAA;QACAC,SAAY;QACKJ,QAAA;MACb,CAAC;IACH;EAOF;EAEA,IAAAK,OAAM,OAAAjB,WAAU,CAAAkB,aAAA,MAAAlB,WAAc,CAAAmB,WAAA,EAAAjB,MAAY,EAAM;EAEhD,OACE,mBAAAL,kBAAA,CAAAuB,IAAA,EAACrB,eAAA,CAAAsB,MAAA;IACCC,GAAA;IAICC,IAAA;IAgBOC,QAAM;IACNZ,QAAA,EACE,gBAAC,IAAAf,kBAAA,CAAAa,GAAA,EAAAX,eAAA,CAAAc,WAAA;MAAAC,IAAA;MAAAW,UAEM;MAAAV,KACL,YAAO;MAAkBH,QACzB,EAAAK;IAAa,IACAV,OACb,kBAAsB,IAAAV,kBAAY,CAAAa,GAAA,EAAAC,QAAA;MAAAC,QAClC,iBAAiB,EAAS,EAAAf,kBAAY,CAAAa,GAAA,EAAAX,eAAA,CAAAc,WAAA;QACtCC,IAAA;QACAC,KAAA,YAAc;QACdH,QAAA,EAAS;MAAsB;IACwB,KACtDT,KAAI,CAAAuB,MAAU,KAAK,IAAE,eAAW,IAAU7B,kBAAA,CAAAa,GAAA,EAAAC,QAAA;MAAAC,QAE1C,qBAAAf,kBAAe,CAAKa,GAAA,EAAAX,eAAc,CAAAc,WAAA;QAAAC,IAAA;QAb9BC,KAAK;QAcZC,SAAA;QAGNJ,QACF;MAEJ;IAEJ,wBAAAf,kBAAA,CAAAa,GAAA,EAAAX,eAAA,CAAA4B,UAAA;MAEAlB,SAAS;MACPmB,4BACE;MAAChB,QAAA,qBAAAf,kBAAA,CAAAa,GAAA,EAAAX,eAAA,CAAA8B,MAAA;QAAAC,QAAA;QACCR,GAAM;QACNS,aAAW,EAAAvB,OAAA;QACXI,QAAW,EAAAT,KAAA,CAAA6B,GAAA,WAAAC,IAAA;UACX,IAAAC,MAAe,GAAA5B,WAAA,KAAA2B,IAAA,CAAAE,IAAA;UACf,OAAQ,mBAAAtC,kBAAA,CAAAa,GAAA,EAAAX,eAAA,CAAAqC,MAAA;YAEPtB,IAAA;YAAAuB,KAAA,EAAAH,MAAA;YACHI,UAAA,GAAAJ,MAAA;YAEJK,WAAA","ignoreList":[]}
@@ -0,0 +1,136 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var client_exports = {};
24
+ __export(client_exports, {
25
+ CAL_API_VERSION: () => CAL_API_VERSION,
26
+ CalendarError: () => CalendarError,
27
+ DEFAULT_API_URL: () => DEFAULT_API_URL,
28
+ cancelBooking: () => cancelBooking,
29
+ createBooking: () => createBooking,
30
+ fetchBooking: () => fetchBooking,
31
+ fetchEventType: () => fetchEventType,
32
+ fetchSlots: () => fetchSlots
33
+ });
34
+ module.exports = __toCommonJS(client_exports);
35
+ const DEFAULT_API_URL = "https://api.hanzo.ai/v1/calendar";
36
+ const CAL_API_VERSION = "2024-08-13";
37
+ class CalendarError extends Error {
38
+ status;
39
+ conflict;
40
+ constructor(message, status) {
41
+ super(message);
42
+ this.name = "CalendarError";
43
+ this.status = status;
44
+ this.conflict = status === 409;
45
+ }
46
+ }
47
+ function messageOf(body, status) {
48
+ const b = body;
49
+ return b?.error?.message || b?.message || `Request failed (${status})`;
50
+ }
51
+ async function readJson(res) {
52
+ return res.json().catch(() => null);
53
+ }
54
+ async function getJson(url, signal) {
55
+ const res = await fetch(url, {
56
+ headers: {
57
+ Accept: "application/json"
58
+ },
59
+ signal
60
+ });
61
+ const body = await readJson(res);
62
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
63
+ return body.data;
64
+ }
65
+ function normalizeEventType(raw) {
66
+ const length = raw.length ?? raw.lengthInMinutes ?? raw.durationMinutes ?? 30;
67
+ return {
68
+ id: Number(raw.id ?? 0),
69
+ slug: String(raw.slug ?? ""),
70
+ title: String(raw.title ?? ""),
71
+ description: String(raw.description ?? ""),
72
+ length,
73
+ locations: raw.locations ?? [],
74
+ price: Number(raw.price ?? 0),
75
+ currency: String(raw.currency ?? "usd"),
76
+ profile: raw.profile
77
+ };
78
+ }
79
+ async function fetchEventType(api, eventSlug, username, signal) {
80
+ const url = `${api}/atoms/event-types/${encodeURIComponent(eventSlug)}/public?username=${encodeURIComponent(username)}`;
81
+ const raw = await getJson(url, signal);
82
+ return normalizeEventType(raw);
83
+ }
84
+ async function fetchSlots(api, input, signal) {
85
+ const q = new URLSearchParams({
86
+ eventTypeSlug: input.eventTypeSlug,
87
+ usernameList: input.username,
88
+ startTime: input.startTime,
89
+ endTime: input.endTime,
90
+ timeZone: input.timeZone
91
+ });
92
+ const data = await getJson(`${api}/slots/available?${q.toString()}`, signal);
93
+ const slots = data.slots ?? data;
94
+ return slots ?? {};
95
+ }
96
+ async function createBooking(api, input, signal) {
97
+ const res = await fetch(`${api}/bookings`, {
98
+ method: "POST",
99
+ headers: {
100
+ "Content-Type": "application/json",
101
+ Accept: "application/json",
102
+ "cal-api-version": CAL_API_VERSION
103
+ },
104
+ body: JSON.stringify({
105
+ eventTypeSlug: input.eventTypeSlug,
106
+ user: input.username,
107
+ start: input.start,
108
+ timeZone: input.timeZone,
109
+ responses: input.responses
110
+ }),
111
+ signal
112
+ });
113
+ const body = await readJson(res);
114
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
115
+ return body.data;
116
+ }
117
+ async function fetchBooking(api, uid, signal) {
118
+ return getJson(`${api}/bookings/${encodeURIComponent(uid)}`, signal);
119
+ }
120
+ async function cancelBooking(api, uid, reason, signal) {
121
+ const res = await fetch(`${api}/bookings/${encodeURIComponent(uid)}/cancel`, {
122
+ method: "POST",
123
+ headers: {
124
+ "Content-Type": "application/json",
125
+ Accept: "application/json",
126
+ "cal-api-version": CAL_API_VERSION
127
+ },
128
+ body: JSON.stringify({
129
+ reason: reason ?? ""
130
+ }),
131
+ signal
132
+ });
133
+ const body = await readJson(res);
134
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
135
+ return body.data;
136
+ }