@new-vintage-labs/guest-prep 0.1.1 → 0.1.2

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.
@@ -1,51 +1,51 @@
1
- class ee extends Error {
1
+ class ne extends Error {
2
2
  constructor(t) {
3
3
  super(t.kind === "tool" ? t.message : t.kind), this.failure = t;
4
4
  }
5
5
  }
6
- const dn = ["New Vintage", "New Vintage Staging"];
7
- function Ft() {
6
+ const Sn = ["New Vintage", "New Vintage Staging"];
7
+ function Qt() {
8
8
  const e = globalThis.claude;
9
9
  return e && typeof e.use == "function" ? e : null;
10
10
  }
11
- function Zt() {
11
+ function Xt() {
12
12
  const e = globalThis.openai;
13
13
  return e && typeof e == "object" ? e : null;
14
14
  }
15
- function Se() {
16
- return Ft() ? "claude" : Zt() ? "chatgpt" : "browser";
15
+ function Ae() {
16
+ return Qt() ? "claude" : Xt() ? "chatgpt" : "browser";
17
17
  }
18
- function pn(e, t) {
18
+ function $n(e, t) {
19
19
  let n = t.length === 1 ? t[0] : null;
20
- return async (r, a) => {
21
- var c;
22
- if (n) return e.callTool(n, r, a);
23
- const s = [];
24
- for (const l of t)
20
+ return async (r, s) => {
21
+ var l;
22
+ if (n) return e.callTool(n, r, s);
23
+ const a = [];
24
+ for (const c of t)
25
25
  try {
26
- const d = await e.callTool(l, r, a);
27
- return n = l, d;
26
+ const d = await e.callTool(c, r, s);
27
+ return n = c, d;
28
28
  } catch (d) {
29
- s.push(d);
29
+ a.push(d);
30
30
  }
31
- throw (c = s.find((l) => de(l).kind !== "reconnect")) != null ? c : s[0];
31
+ throw (l = a.find((c) => ye(c).kind !== "reconnect")) != null ? l : a[0];
32
32
  };
33
33
  }
34
- async function gn(e) {
35
- const t = Ft();
34
+ async function Tn(e) {
35
+ const t = Qt();
36
36
  if (t != null && t.use)
37
37
  try {
38
38
  const n = await Promise.race([
39
39
  t.use("mcp"),
40
40
  new Promise((r) => setTimeout(() => r(null), 1e4))
41
41
  ]);
42
- return !n || typeof n.callTool != "function" ? null : pn(n, e ? [e] : dn);
42
+ return !n || typeof n.callTool != "function" ? null : $n(n, e ? [e] : Sn);
43
43
  } catch {
44
44
  return null;
45
45
  }
46
46
  return null;
47
47
  }
48
- function fn(e) {
48
+ function Nn(e) {
49
49
  const t = e.content;
50
50
  if (!Array.isArray(t)) return;
51
51
  const n = t.find((r) => r && typeof r == "object" && r.type === "text");
@@ -56,44 +56,44 @@ function fn(e) {
56
56
  return n.text;
57
57
  }
58
58
  }
59
- function wt(e) {
60
- var r, a, s;
61
- if (!e || typeof e != "object") throw new ee({ kind: "tool", message: "The connector returned nothing." });
62
- const t = e, n = (s = (a = (r = t.payload) != null ? r : t.structuredContent) != null ? a : fn(t)) != null ? s : t;
59
+ function Mt(e) {
60
+ var r, s, a;
61
+ if (!e || typeof e != "object") throw new ne({ kind: "tool", message: "The connector returned nothing." });
62
+ const t = e, n = (a = (s = (r = t.payload) != null ? r : t.structuredContent) != null ? s : Nn(t)) != null ? a : t;
63
63
  if (t.isError === !0 || n && typeof n == "object" && n.ok === !1) {
64
- const c = n.error, l = typeof (c == null ? void 0 : c.message) == "string" ? c.message : typeof n == "string" ? n : "The New Vintage tool returned an error.";
65
- throw new ee({ kind: "tool", message: l });
64
+ const l = n.error, c = typeof (l == null ? void 0 : l.message) == "string" ? l.message : typeof n == "string" ? n : "The New Vintage tool returned an error.";
65
+ throw new ne({ kind: "tool", message: c });
66
66
  }
67
- if (!n || typeof n != "object") throw new ee({ kind: "tool", message: String(n) });
67
+ if (!n || typeof n != "object") throw new ne({ kind: "tool", message: String(n) });
68
68
  return n;
69
69
  }
70
- function de(e) {
71
- var r, a, s;
72
- if (e instanceof ee) return e.failure;
73
- const t = String((r = e == null ? void 0 : e.code) != null ? r : ""), n = String((s = (a = e == null ? void 0 : e.message) != null ? a : e) != null ? s : "");
70
+ function ye(e) {
71
+ var r, s, a;
72
+ if (e instanceof ne) return e.failure;
73
+ const t = String((r = e == null ? void 0 : e.code) != null ? r : ""), n = String((a = (s = e == null ? void 0 : e.message) != null ? s : e) != null ? a : "");
74
74
  return /not_granted|consent|permission|denied/i.test(t) ? { kind: "approval" } : /server_not_connected|unauthori[sz]ed|auth|reconnect/i.test(t + " " + n) ? { kind: "reconnect" } : (e == null ? void 0 : e.retryable) === !0 || /timeout|unavailable|rate_limited|network|5\d\d/i.test(t + " " + n) ? { kind: "temporary" } : /cannot access|not in this session|tenant/i.test(n) ? { kind: "unavailable" } : { kind: "tool", message: n || "The New Vintage tool returned an error." };
75
75
  }
76
- function mn(e = Se()) {
76
+ function An(e = Ae()) {
77
77
  return e === "claude" ? "Reconnect New Vintage in claude.ai Settings → Connectors." : "Reconnect New Vintage in your chat's connector settings.";
78
78
  }
79
- async function hn(e, t = {}) {
80
- var a, s, c;
81
- const n = Zt(), r = (a = t.followUp) != null ? a : n && typeof n.sendFollowUpMessage == "function" ? (l) => n.sendFollowUpMessage({ prompt: l, ...t.title ? { title: t.title } : {} }) : null;
79
+ async function Mn(e, t = {}) {
80
+ var s, a, l;
81
+ const n = Xt(), r = (s = t.followUp) != null ? s : n && typeof n.sendFollowUpMessage == "function" ? (c) => n.sendFollowUpMessage({ prompt: c, ...t.title ? { title: t.title } : {} }) : null;
82
82
  if (r)
83
83
  try {
84
84
  return await r(e), { kind: "sent" };
85
- } catch (l) {
86
- return { kind: "failed", message: String((s = l == null ? void 0 : l.message) != null ? s : "The request was not sent.") };
85
+ } catch (c) {
86
+ return { kind: "failed", message: String((a = c == null ? void 0 : c.message) != null ? a : "The request was not sent.") };
87
87
  }
88
88
  try {
89
- const l = (c = globalThis.navigator) == null ? void 0 : c.clipboard;
90
- if (!l || typeof l.writeText != "function") throw new Error("no clipboard");
91
- return await l.writeText(e), { kind: "copied" };
89
+ const c = (l = globalThis.navigator) == null ? void 0 : l.clipboard;
90
+ if (!c || typeof c.writeText != "function") throw new Error("no clipboard");
91
+ return await c.writeText(e), { kind: "copied" };
92
92
  } catch {
93
93
  return { kind: "manual", text: e };
94
94
  }
95
95
  }
96
- const Bt = [
96
+ const en = [
97
97
  "America/Los_Angeles",
98
98
  "America/Denver",
99
99
  "America/Phoenix",
@@ -101,43 +101,43 @@ const Bt = [
101
101
  "America/New_York",
102
102
  "America/Anchorage",
103
103
  "Pacific/Honolulu"
104
- ], yn = /^\d{4}-\d{2}-\d{2}$/, bn = /^[A-Za-z0-9-]{1,100}$/, kt = /timestamptz '(\d{4}-\d{2}-\d{2}) 00:00:00 [^']*'/g, St = /(\bfocus as \(\s*(?:--[^\n]*\n\s*)?select \* from \(\s*values )\([^()]*\)(\s*\) focus_rows \()/;
105
- function te(e) {
104
+ ], _n = /^\d{4}-\d{2}-\d{2}$/, Cn = /^[A-Za-z0-9-]{1,100}$/, _t = /timestamptz '(\d{4}-\d{2}-\d{2}) 00:00:00 [^']*'/g, Ct = /(\bfocus as \(\s*(?:--[^\n]*\n\s*)?select \* from \(\s*values )\([^()]*\)(\s*\) focus_rows \()/;
105
+ function re(e) {
106
106
  throw new Error("fillGuestPrepQuery: " + e);
107
107
  }
108
- function vn(e) {
109
- (typeof e != "string" || !yn.test(e)) && te("day must be YYYY-MM-DD");
110
- const [t, n, r] = e.split("-").map(Number), a = new Date(Date.UTC(t, n - 1, r));
111
- return a.toISOString().slice(0, 10) !== e && te("bad date " + e), new Date(a.getTime() + 864e5).toISOString().slice(0, 10);
108
+ function En(e) {
109
+ (typeof e != "string" || !_n.test(e)) && re("day must be YYYY-MM-DD");
110
+ const [t, n, r] = e.split("-").map(Number), s = new Date(Date.UTC(t, n - 1, r));
111
+ return s.toISOString().slice(0, 10) !== e && re("bad date " + e), new Date(s.getTime() + 864e5).toISOString().slice(0, 10);
112
112
  }
113
- function xn(e) {
114
- return e == null ? "(null::text, null::text)" : (e.source !== "commerce7" && e.source !== "tock" && te("unexpected source " + String(e.source)), (typeof e.id != "string" || !bn.test(e.id)) && te("arrival id may only hold letters, digits and hyphens"), "('" + e.source + "'::text, '" + e.id + "'::text)");
113
+ function zn(e) {
114
+ return e == null ? "(null::text, null::text)" : (e.source !== "commerce7" && e.source !== "tock" && re("unexpected source " + String(e.source)), (typeof e.id != "string" || !Cn.test(e.id)) && re("arrival id may only hold letters, digits and hyphens"), "('" + e.source + "'::text, '" + e.id + "'::text)");
115
115
  }
116
- function wn(e, t) {
116
+ function Pn(e, t) {
117
117
  const n = t || {};
118
- Bt.indexOf(n.timeZone) < 0 && te("unsupported time zone");
119
- const r = vn(n.day);
120
- let a = String(e);
121
- const s = Array.from(new Set(Array.from(a.matchAll(kt), (l) => l[1]))).sort();
122
- s.length > 2 && te("expected at most two day literals"), a = a.replace(kt, (l, d) => "timestamptz '" + (s.length === 2 && d === s[1] ? r : n.day) + " 00:00:00 " + n.timeZone + "'"), a = a.replace(/at time zone '[^']*'/gi, (l) => l.slice(0, l.indexOf("'")) + "'" + n.timeZone + "'");
123
- const c = xn(n.arrival);
124
- return St.test(a) ? a = a.replace(St, (l, d, h) => d + c + h) : n.arrival && te("this query has no focus row"), a;
125
- }
126
- function E(e) {
118
+ en.indexOf(n.timeZone) < 0 && re("unsupported time zone");
119
+ const r = En(n.day);
120
+ let s = String(e);
121
+ const a = Array.from(new Set(Array.from(s.matchAll(_t), (c) => c[1]))).sort();
122
+ a.length > 2 && re("expected at most two day literals"), s = s.replace(_t, (c, d) => "timestamptz '" + (a.length === 2 && d === a[1] ? r : n.day) + " 00:00:00 " + n.timeZone + "'"), s = s.replace(/at time zone '[^']*'/gi, (c) => c.slice(0, c.indexOf("'")) + "'" + n.timeZone + "'");
123
+ const l = zn(n.arrival);
124
+ return Ct.test(s) ? s = s.replace(Ct, (c, d, m) => d + l + m) : n.arrival && re("this query has no focus row"), s;
125
+ }
126
+ function U(e) {
127
127
  if (e == null || e === "") return null;
128
128
  const t = typeof e == "number" ? e : Number(e);
129
129
  return Number.isFinite(t) ? t : null;
130
130
  }
131
- const kn = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", minimumFractionDigits: 2, maximumFractionDigits: 2 }), Sn = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 });
132
- function q(e) {
131
+ const Ln = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", minimumFractionDigits: 2, maximumFractionDigits: 2 }), In = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 });
132
+ function Y(e) {
133
133
  var n;
134
- const t = (n = E(e)) != null ? n : 0;
135
- return Number.isInteger(Math.round(t * 100) / 100) ? Sn.format(t) : kn.format(t);
134
+ const t = (n = U(e)) != null ? n : 0;
135
+ return Number.isInteger(Math.round(t * 100) / 100) ? In.format(t) : Ln.format(t);
136
136
  }
137
- function z(e, t, n = `${t}s`) {
137
+ function A(e, t, n = `${t}s`) {
138
138
  return `${e} ${e === 1 ? t : n}`;
139
139
  }
140
- function Tn(e) {
140
+ function On(e) {
141
141
  if (e) return e;
142
142
  try {
143
143
  return Intl.DateTimeFormat().resolvedOptions().timeZone || "America/Los_Angeles";
@@ -145,156 +145,156 @@ function Tn(e) {
145
145
  return "America/Los_Angeles";
146
146
  }
147
147
  }
148
- function Tt(e, t) {
149
- const n = new Intl.DateTimeFormat("en-CA", { timeZone: t, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).formatToParts(e), r = (a) => {
150
- var s, c;
151
- return (c = (s = n.find((l) => l.type === a)) == null ? void 0 : s.value) != null ? c : "00";
148
+ function Et(e, t) {
149
+ const n = new Intl.DateTimeFormat("en-CA", { timeZone: t, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).formatToParts(e), r = (s) => {
150
+ var a, l;
151
+ return (l = (a = n.find((c) => c.type === s)) == null ? void 0 : a.value) != null ? l : "00";
152
152
  };
153
153
  return { day: `${r("year")}-${r("month")}-${r("day")}`, minutes: Number(r("hour")) % 24 * 60 + Number(r("minute")) };
154
154
  }
155
- const Nn = /^(\d{4})-(\d{2})-(\d{2})$/;
156
- function Nt(e) {
157
- return typeof e != "string" || !Nn.test(e) ? !1 : pe(e).toISOString().slice(0, 10) === e;
155
+ const Rn = /^(\d{4})-(\d{2})-(\d{2})$/;
156
+ function zt(e) {
157
+ return typeof e != "string" || !Rn.test(e) ? !1 : be(e).toISOString().slice(0, 10) === e;
158
158
  }
159
- function pe(e) {
159
+ function be(e) {
160
160
  const [t, n, r] = e.split("-").map(Number);
161
161
  return new Date(Date.UTC(t, n - 1, r));
162
162
  }
163
- function U(e, t) {
164
- return new Date(pe(e).getTime() + t * 864e5).toISOString().slice(0, 10);
163
+ function W(e, t) {
164
+ return new Date(be(e).getTime() + t * 864e5).toISOString().slice(0, 10);
165
165
  }
166
- function ke(e, t) {
167
- const [n, r] = e.split("-").map(Number), a = n * 12 + r - 1 + t;
168
- return `${Math.floor(a / 12)}-${String(a % 12 + 1).padStart(2, "0")}`;
166
+ function Ne(e, t) {
167
+ const [n, r] = e.split("-").map(Number), s = n * 12 + r - 1 + t;
168
+ return `${Math.floor(s / 12)}-${String(s % 12 + 1).padStart(2, "0")}`;
169
169
  }
170
- function ve(e, t) {
171
- return Math.round((pe(t).getTime() - pe(e).getTime()) / 864e5);
170
+ function Se(e, t) {
171
+ return Math.round((be(t).getTime() - be(e).getTime()) / 864e5);
172
172
  }
173
- function ge(e) {
174
- return pe(e).getUTCDay();
173
+ function ve(e) {
174
+ return be(e).getUTCDay();
175
175
  }
176
- const Oe = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], Te = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], Ht = (e, t) => e.slice(0, 4) !== t.slice(0, 4) ? `, ${e.slice(0, 4)}` : "";
177
- function Yt(e, t) {
178
- return `${Te[Number(e.slice(5, 7)) - 1].slice(0, 3)} ${Number(e.slice(8, 10))}${Ht(e, t)}`;
176
+ const Ue = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], Me = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], tn = (e, t) => e.slice(0, 4) !== t.slice(0, 4) ? `, ${e.slice(0, 4)}` : "";
177
+ function nn(e, t) {
178
+ return `${Me[Number(e.slice(5, 7)) - 1].slice(0, 3)} ${Number(e.slice(8, 10))}${tn(e, t)}`;
179
179
  }
180
- function ne(e, t) {
181
- return `${Oe[ge(e)].slice(0, 3)}, ${Yt(e, t)}`;
180
+ function ae(e, t) {
181
+ return `${Ue[ve(e)].slice(0, 3)}, ${nn(e, t)}`;
182
182
  }
183
- function De(e, t) {
184
- return `${Oe[ge(e)]}, ${Te[Number(e.slice(5, 7)) - 1]} ${Number(e.slice(8, 10))}${Ht(e, t)}`;
183
+ function je(e, t) {
184
+ return `${Ue[ve(e)]}, ${Me[Number(e.slice(5, 7)) - 1]} ${Number(e.slice(8, 10))}${tn(e, t)}`;
185
185
  }
186
- function $t(e) {
187
- return `${Te[Number(e.slice(5, 7)) - 1]} ${e.slice(0, 4)}`;
186
+ function Pt(e) {
187
+ return `${Me[Number(e.slice(5, 7)) - 1]} ${e.slice(0, 4)}`;
188
188
  }
189
- function $n(e) {
189
+ function qn(e) {
190
190
  const t = /^(\d{1,2}):(\d{2})/.exec(String(e != null ? e : ""));
191
191
  return t ? Number(t[1]) * 60 + Number(t[2]) : null;
192
192
  }
193
- function oe(e) {
193
+ function J(e) {
194
194
  const t = Math.floor(e / 60) % 24;
195
195
  return `${t % 12 === 0 ? 12 : t % 12}:${String(e % 60).padStart(2, "0")} ${t < 12 ? "AM" : "PM"}`;
196
196
  }
197
- function me(e, t, n) {
198
- return `${ne(e, n)}, ${oe(t)}`;
197
+ function we(e, t, n) {
198
+ return `${ae(e, n)}, ${J(t)}`;
199
199
  }
200
- function Re(e) {
200
+ function Ge(e) {
201
201
  if (e <= 0) return "now";
202
202
  const t = Math.floor(e / 60), n = e % 60;
203
203
  return t ? n ? `in ${t} hr ${n} min` : `in ${t} hr` : `in ${n} min`;
204
204
  }
205
- function An(e, t) {
206
- const n = ve(e, t);
205
+ function Dn(e, t) {
206
+ const n = Se(e, t);
207
207
  if (n <= 0) return "today";
208
208
  if (n === 1) return "yesterday";
209
209
  if (n < 14) return `${n} days ago`;
210
210
  let r = (Number(t.slice(0, 4)) - Number(e.slice(0, 4))) * 12 + Number(t.slice(5, 7)) - Number(e.slice(5, 7));
211
- return Number(t.slice(8, 10)) < Number(e.slice(8, 10)) && (r -= 1), r < 2 ? `${Math.max(2, Math.floor(n / 7))} weeks ago` : r < 12 ? `${r} months ago` : `${z(Math.floor(r / 12), "year")} ago`;
211
+ return Number(t.slice(8, 10)) < Number(e.slice(8, 10)) && (r -= 1), r < 2 ? `${Math.max(2, Math.floor(n / 7))} weeks ago` : r < 12 ? `${r} months ago` : `${A(Math.floor(r / 12), "year")} ago`;
212
212
  }
213
- function _n(e, t) {
214
- var s;
215
- const n = ((s = E(e)) != null ? s : 0) - 1, r = Te[n], a = E(t);
216
- return r && a ? `${r} ${a}` : r != null ? r : a ? String(a) : "";
213
+ function Vn(e, t) {
214
+ var a;
215
+ const n = ((a = U(e)) != null ? a : 0) - 1, r = Me[n], s = U(t);
216
+ return r && s ? `${r} ${s}` : r != null ? r : s ? String(s) : "";
217
217
  }
218
- function At(e) {
218
+ function Lt(e) {
219
219
  const t = e.trim().toLowerCase();
220
220
  return t.charAt(0).toUpperCase() + t.slice(1);
221
221
  }
222
- const Mn = "guest-prep", Le = "guest-prep-day-arrivals";
223
- function Me(e, t) {
222
+ const Un = "guest-prep", De = "guest-prep-day-arrivals";
223
+ function Le(e, t) {
224
224
  return {
225
225
  call: async (n, r) => {
226
- const a = n === "get_analysis_guide" || !t ? r : { tenantId: t, ...r };
226
+ const s = n === "get_analysis_guide" || !t ? r : { tenantId: t, ...r };
227
227
  try {
228
- return wt(await e(n, a));
229
- } catch (s) {
230
- if (de(s).kind !== "temporary") throw s;
231
- return await new Promise((c) => setTimeout(c, 2e3)), wt(await e(n, a));
228
+ return Mt(await e(n, s));
229
+ } catch (a) {
230
+ if (ye(a).kind !== "temporary") throw a;
231
+ return await new Promise((l) => setTimeout(l, 2e3)), Mt(await e(n, s));
232
232
  }
233
233
  }
234
234
  };
235
235
  }
236
- async function _t(e, t) {
237
- var s, c, l;
236
+ async function It(e, t) {
237
+ var a, l, c;
238
238
  const n = await e.call("get_analysis_guide", {
239
239
  context: "Opening the Guest Prep briefing with the latest day query.",
240
- slug: Mn,
240
+ slug: Un,
241
241
  includeReferenceQueries: !0,
242
242
  ...t ? { pageSetup: t } : {}
243
- }), r = (s = n.item) != null ? s : n, a = {};
244
- for (const d of (c = r.referenceQueries) != null ? c : [])
245
- typeof d.slug == "string" && typeof d.sqlText == "string" && (a[d.slug] = d.sqlText);
246
- if (!a[Le]) throw new ee({ kind: "tool", message: `The guide is missing the ${Le} query.` });
247
- return { version: (l = E(r.version)) != null ? l : 0, queries: a };
243
+ }), r = (a = n.item) != null ? a : n, s = {};
244
+ for (const d of (l = r.referenceQueries) != null ? l : [])
245
+ typeof d.slug == "string" && typeof d.sqlText == "string" && (s[d.slug] = d.sqlText);
246
+ if (!s[De]) throw new ne({ kind: "tool", message: `The guide is missing the ${De} query.` });
247
+ return { version: (c = U(r.version)) != null ? c : 0, queries: s };
248
248
  }
249
- async function Wt(e, t, n) {
249
+ async function rn(e, t, n) {
250
250
  const r = await e.call("safe_tenant_sql", { context: n, sqlText: t });
251
251
  return { rows: Array.isArray(r.rows) ? r.rows : [], complete: r.resultMode === "complete" };
252
252
  }
253
- function Cn(e, t, n, r) {
253
+ function jn(e, t, n, r) {
254
254
  try {
255
- return wn(e.queries[Le], { timeZone: t, day: n, arrival: r });
255
+ return Pn(e.queries[De], { timeZone: t, day: n, arrival: r });
256
256
  } catch {
257
- throw new ee({ kind: "needs_update" });
257
+ throw new ne({ kind: "needs_update" });
258
258
  }
259
259
  }
260
- async function Mt(e, t, n) {
261
- var s;
262
- const r = Cn(t, n.timeZone, n.day, (s = n.arrival) != null ? s : null), a = n.arrival ? "Refreshing one guest's briefing for the Guest Prep page." : "Loading one day's arrivals for the Guest Prep briefing.";
263
- for (let c = 0; c < 2; c += 1) {
264
- const l = await Wt(e, r, a);
265
- if (l.complete) return l.rows;
260
+ async function Ot(e, t, n) {
261
+ var a;
262
+ const r = jn(t, n.timeZone, n.day, (a = n.arrival) != null ? a : null), s = n.arrival ? "Refreshing one guest's briefing for the Guest Prep page." : "Loading one day's arrivals for the Guest Prep briefing.";
263
+ for (let l = 0; l < 2; l += 1) {
264
+ const c = await rn(e, r, s);
265
+ if (c.complete) return c.rows;
266
266
  }
267
- throw new ee({ kind: "tool", message: "New Vintage returned only a preview of this day, so it wasn't loaded. Try again." });
267
+ throw new ne({ kind: "tool", message: "New Vintage returned only a preview of this day, so it wasn't loaded. Try again." });
268
268
  }
269
- async function En(e) {
269
+ async function Gn(e) {
270
270
  var t, n;
271
271
  try {
272
- const r = await e.call("discover_tenant_data_sources", { context: "Finding which wineries the Guest Prep page can load." }), a = (t = r.accessibleTenants) != null ? t : r.tenants;
273
- return Array.isArray(a) ? a.filter((s) => typeof (s == null ? void 0 : s.tenantId) == "string").map((s) => ({ tenantId: String(s.tenantId), name: typeof s.name == "string" && s.name ? s.name : String(s.tenantId) })) : typeof r.tenantId == "string" ? [{ tenantId: r.tenantId, name: typeof r.tenantName == "string" ? r.tenantName : r.tenantId }] : [];
272
+ const r = await e.call("discover_tenant_data_sources", { context: "Finding which wineries the Guest Prep page can load." }), s = (t = r.accessibleTenants) != null ? t : r.tenants;
273
+ return Array.isArray(s) ? s.filter((a) => typeof (a == null ? void 0 : a.tenantId) == "string").map((a) => ({ tenantId: String(a.tenantId), name: typeof a.name == "string" && a.name ? a.name : String(a.tenantId) })) : typeof r.tenantId == "string" ? [{ tenantId: r.tenantId, name: typeof r.tenantName == "string" ? r.tenantName : r.tenantId }] : [];
274
274
  } catch (r) {
275
- const a = String((n = r == null ? void 0 : r.message) != null ? n : ""), s = Array.from(a.matchAll(/(?:([^,:]+?) -> )?tenantId "([^"]+)"/g)).map((c) => {
276
- var l;
275
+ const s = String((n = r == null ? void 0 : r.message) != null ? n : ""), a = Array.from(s.matchAll(/(?:([^,:]+?) -> )?tenantId "([^"]+)"/g)).map((l) => {
276
+ var c;
277
277
  return {
278
- tenantId: c[2],
279
- name: ((l = c[1]) != null ? l : "").replace(/^.*(?:values|these)[^:]*:\s*/i, "").trim() || c[2]
278
+ tenantId: l[2],
279
+ name: ((c = l[1]) != null ? c : "").replace(/^.*(?:values|these)[^:]*:\s*/i, "").trim() || l[2]
280
280
  };
281
281
  });
282
- if (s.length) return s;
282
+ if (a.length) return a;
283
283
  throw r;
284
284
  }
285
285
  }
286
- const Pn = "Name not on file";
287
- function fe(e) {
286
+ const Fn = "Name not on file";
287
+ function xe(e) {
288
288
  var t;
289
- return (t = e.name) != null ? t : Pn;
289
+ return (t = e.name) != null ? t : Fn;
290
290
  }
291
- const zn = /[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\.[A-Z0-9-]+)*\.[A-Z]{2,}/gi, Ln = /(?:\+?\d{1,3}[\s.-]?)?(?:\(\d{3}\)\s?|\b\d{3}[\s.-]?)\d{3}[\s.-]?\d{4}\b|\b\d{3}[\s.-]\d{4}\b/g;
292
- function Ct(e) {
293
- const t = String(e != null ? e : "").replace(zn, "[email]").replace(Ln, "[phone]").replace(/\s{2,}/g, " ").replace(/\s+([,.;:!?])/g, "$1").replace(/([,;:])(?=[.!?]|$)/g, "").replace(/^[\s,;:.-]+|[\s,;:-]+$/g, "");
291
+ const Zn = /[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\.[A-Z0-9-]+)*\.[A-Z]{2,}/gi, Bn = /(?:\+?\d{1,3}[\s.-]?)?(?:\(\d{3}\)\s?|\b\d{3}[\s.-]?)\d{3}[\s.-]?\d{4}\b|\b\d{3}[\s.-]\d{4}\b/g;
292
+ function Rt(e) {
293
+ const t = String(e != null ? e : "").replace(Zn, "[email]").replace(Bn, "[phone]").replace(/\s{2,}/g, " ").replace(/\s+([,.;:!?])/g, "$1").replace(/([,;:])(?=[.!?]|$)/g, "").replace(/^[\s,;:.-]+|[\s,;:-]+$/g, "");
294
294
  return t || null;
295
295
  }
296
- const Ce = (e) => String(e != null ? e : "").trim().replace(/\s+/g, " ").toLowerCase();
297
- function In(e) {
296
+ const Ie = (e) => String(e != null ? e : "").trim().replace(/\s+/g, " ").toLowerCase();
297
+ function Hn(e) {
298
298
  const t = (n) => (n != null ? n : []).flatMap((r) => {
299
299
  try {
300
300
  return [new RegExp(r, "i")];
@@ -304,27 +304,27 @@ function In(e) {
304
304
  });
305
305
  return { hide: t(e.hide), interests: t(e.interests), vip: t(e.vip), club: t(e.club) };
306
306
  }
307
- function On(e, t) {
307
+ function Yn(e, t) {
308
308
  var r;
309
309
  const n = { vip: !1, interests: [], clubTags: [], accountTags: [] };
310
- for (const a of e) {
311
- const s = a.trim();
312
- if (!s || t.hide.some((l) => l.test(s))) continue;
313
- const c = t.interests.map((l) => l.exec(s)).find(Boolean);
314
- if (c) {
315
- n.interests.push(((r = c[1]) != null ? r : c[0]).trim());
310
+ for (const s of e) {
311
+ const a = s.trim();
312
+ if (!a || t.hide.some((c) => c.test(a))) continue;
313
+ const l = t.interests.map((c) => c.exec(a)).find(Boolean);
314
+ if (l) {
315
+ n.interests.push(((r = l[1]) != null ? r : l[0]).trim());
316
316
  continue;
317
317
  }
318
- t.vip.some((l) => l.test(s)) ? n.vip = !0 : t.club.some((l) => l.test(s)) ? n.clubTags.push(s) : n.accountTags.push(s);
318
+ t.vip.some((c) => c.test(a)) ? n.vip = !0 : t.club.some((c) => c.test(a)) ? n.clubTags.push(a) : n.accountTags.push(a);
319
319
  }
320
320
  return n;
321
321
  }
322
- function M(e) {
322
+ function R(e) {
323
323
  if (e == null) return null;
324
324
  const t = String(e).trim();
325
325
  return t || null;
326
326
  }
327
- function xe(e) {
327
+ function $e(e) {
328
328
  if (Array.isArray(e)) return e;
329
329
  if (typeof e == "string" && e.trim().startsWith("["))
330
330
  try {
@@ -335,152 +335,188 @@ function xe(e) {
335
335
  }
336
336
  return [];
337
337
  }
338
- function se(e) {
339
- return typeof e == "string" && !e.trim().startsWith("[") ? e.split(",").map((t) => t.trim()).filter(Boolean) : xe(e).map((t) => M(t)).filter((t) => !!t);
338
+ function ce(e) {
339
+ return typeof e == "string" && !e.trim().startsWith("[") ? e.split(",").map((t) => t.trim()).filter(Boolean) : $e(e).map((t) => R(t)).filter((t) => !!t);
340
340
  }
341
- const Dn = (e) => /^rose$/i.test(e) ? "Rosé" : e, Et = (e) => se(e).map((t) => t.toLowerCase());
342
- function Pt(e, t) {
341
+ const Wn = (e) => /^rose$/i.test(e) ? "Rosé" : e, qt = (e) => ce(e).map((t) => t.toLowerCase());
342
+ function Dt(e, t) {
343
343
  if (!/^\d{2}-\d{2}$/.test(e)) return null;
344
- const n = Number(t.slice(0, 4)), a = [n - 1, n, n + 1].map((s) => `${s}-${e}`).filter((s) => U(s, 0) === s).sort((s, c) => Math.abs(ve(t, s)) - Math.abs(ve(t, c)))[0];
345
- return a && Math.abs(ve(t, a)) <= 30 ? a : null;
346
- }
347
- function Rn(e, t, n) {
348
- const r = [], a = M(e.bday_md), s = a ? Pt(a, t) : null;
349
- s && r.push(s === t ? "Birthday on this day" : `Birthday ${ne(s, n)}`);
350
- const c = M(e.club_signup), l = c && /^\d{4}-\d{2}-\d{2}$/.test(c) ? Pt(c.slice(5), t) : null, d = l && c ? Number(l.slice(0, 4)) - Number(c.slice(0, 4)) : 0;
351
- return l && d > 0 && r.push(`${z(d, "year")} in the club ${l === t ? "on this day" : ne(l, n)}`), r;
352
- }
353
- function Vn(e, t) {
354
- var N, D, J;
355
- const n = e.source === "tock" ? "tock" : "commerce7", r = String((N = e.arr_id) != null ? N : ""), a = (D = E(e.party)) != null ? D : 0, s = e.visit === "First visit" ? "first" : e.visit === "Return" ? "return" : "unknown", c = On(se(e.tags), t.rules), l = M(e.club_titles), d = l !== null, h = M(e.signup_tier), T = M(e.churn_tier), m = !d && Et(h).some((p) => p === "high" || p === "very high"), b = d && Et(T).some((p) => p === "medium" || p === "high"), j = M(e.last_taste), C = j ? { title: j, day: M(e.last_taste_date) } : null, G = xe(e.last_taste_items).map((p) => p).map((p) => {
356
- var v, _;
357
- return { title: (v = M(p == null ? void 0 : p.title)) != null ? v : "", qty: (_ = E(p == null ? void 0 : p.qty)) != null ? _ : 0 };
358
- }).filter((p) => p.title), L = xe(e.notes).map((p) => p).map((p) => ({ content: Ct(p == null ? void 0 : p.content), when: _n(p == null ? void 0 : p.month, p == null ? void 0 : p.year), original: Ce(p == null ? void 0 : p.content) })).filter((p) => !!p.content).slice(0, 3), A = L.map(({ content: p, when: v }) => ({ content: p, when: v })), F = new Set(L.map((p) => p.original)), B = [];
359
- for (const p of xe(e.last_taste_notes)) {
360
- const v = Ct(p);
361
- if (!(!v || F.has(Ce(p))) && (F.add(Ce(p)), B.push(v), B.length === 3))
344
+ const n = Number(t.slice(0, 4)), s = [n - 1, n, n + 1].map((a) => `${a}-${e}`).filter((a) => W(a, 0) === a).sort((a, l) => Math.abs(Se(t, a)) - Math.abs(Se(t, l)))[0];
345
+ return s && Math.abs(Se(t, s)) <= 30 ? s : null;
346
+ }
347
+ function Kn(e, t, n) {
348
+ const r = [], s = R(e.bday_md), a = s ? Dt(s, t) : null;
349
+ a && r.push(a === t ? "Birthday on this day" : `Birthday ${ae(a, n)}`);
350
+ const l = R(e.club_signup), c = l && /^\d{4}-\d{2}-\d{2}$/.test(l) ? Dt(l.slice(5), t) : null, d = c && l ? Number(c.slice(0, 4)) - Number(l.slice(0, 4)) : 0;
351
+ return c && d > 0 && r.push(`${A(d, "year")} in the club ${c === t ? "on this day" : ae(c, n)}`), r;
352
+ }
353
+ function Jn(e, t) {
354
+ var Q, z, B;
355
+ const n = e.source === "tock" ? "tock" : "commerce7", r = String((Q = e.arr_id) != null ? Q : ""), s = (z = U(e.party)) != null ? z : 0, a = e.visit === "First visit" ? "first" : e.visit === "Return" ? "return" : "unknown", l = Yn(ce(e.tags), t.rules), c = R(e.club_titles), d = c !== null, m = R(e.signup_tier), M = R(e.churn_tier), k = !d && qt(m).some((g) => g === "high" || g === "very high"), h = d && qt(M).some((g) => g === "medium" || g === "high"), x = R(e.last_taste), y = x ? { title: x, day: R(e.last_taste_date) } : null, _ = $e(e.last_taste_items).map((g) => g).map((g) => {
356
+ var E, N;
357
+ return { title: (E = R(g == null ? void 0 : g.title)) != null ? E : "", qty: (N = U(g == null ? void 0 : g.qty)) != null ? N : 0 };
358
+ }).filter((g) => g.title), C = $e(e.notes).map((g) => g).map((g) => ({ content: Rt(g == null ? void 0 : g.content), when: Vn(g == null ? void 0 : g.month, g == null ? void 0 : g.year), original: Ie(g == null ? void 0 : g.content) })).filter((g) => !!g.content).slice(0, 3), L = C.map(({ content: g, when: E }) => ({ content: g, when: E })), T = new Set(C.map((g) => g.original)), q = [];
359
+ for (const g of $e(e.last_taste_notes)) {
360
+ const E = Rt(g);
361
+ if (!(!E || T.has(Ie(g))) && (T.add(Ie(g)), q.push(E), q.length === 3))
362
362
  break;
363
363
  }
364
- const P = E(e.price_floor), H = E(e.price_ceiling), Z = E(e.avg_unit_price), I = E(e.ltv_cents), O = E(e.order_count);
364
+ const F = U(e.price_floor), I = U(e.price_ceiling), O = U(e.avg_unit_price), Z = U(e.ltv_cents), j = U(e.order_count);
365
365
  return {
366
366
  key: `${n}:${r}`,
367
367
  source: n,
368
368
  id: r,
369
369
  row: e,
370
- minutes: (J = $n(e.t)) != null ? J : 0,
371
- party: a,
372
- experience: M(e.experience),
373
- name: M(e.name),
374
- visit: s,
375
- vip: c.vip,
370
+ minutes: (B = qn(e.t)) != null ? B : 0,
371
+ party: s,
372
+ experience: R(e.experience),
373
+ name: R(e.name),
374
+ visit: a,
375
+ vip: l.vip,
376
376
  clubMember: d,
377
- clubTitles: l,
378
- prospect: m,
379
- signupTier: h,
380
- atRisk: b,
381
- churnTier: T,
382
- clubPickup: M(e.next_ship) === t.day,
383
- large: a >= t.largeParty,
384
- occasions: Rn(e, t.day, t.today),
385
- interests: c.interests,
386
- clubTags: c.clubTags,
387
- accountTags: c.accountTags,
388
- varietals: se(e.top_varietals).slice(0, 3),
389
- wineTypes: se(e.top_wine_types).map(Dn).slice(0, 2),
390
- vintages: se(e.top_vintages).slice(0, 3),
391
- appellations: se(e.top_appellations).slice(0, 2),
392
- lastTaste: C,
393
- bought: C ? { items: G, total: E(e.last_taste_spend) } : null,
394
- orderNotes: B,
395
- personalNotes: A,
396
- price: P !== null || H !== null || Z !== null ? { floor: P, ceiling: H, avg: Z } : null,
397
- lifetime: I !== null && (I > 0 || (O != null ? O : 0) > 0) ? { spend: I / 100, orders: O } : null,
398
- since: M(e.since_year)
377
+ clubTitles: c,
378
+ prospect: k,
379
+ signupTier: m,
380
+ atRisk: h,
381
+ churnTier: M,
382
+ clubPickup: R(e.next_ship) === t.day,
383
+ large: s >= t.largeParty,
384
+ partlyRefunded: e.refund_state === "partial",
385
+ occasions: Kn(e, t.day, t.today),
386
+ interests: l.interests,
387
+ clubTags: l.clubTags,
388
+ accountTags: l.accountTags,
389
+ varietals: ce(e.top_varietals).slice(0, 3),
390
+ wineTypes: ce(e.top_wine_types).map(Wn).slice(0, 2),
391
+ vintages: ce(e.top_vintages).slice(0, 3),
392
+ appellations: ce(e.top_appellations).slice(0, 2),
393
+ lastTaste: y,
394
+ bought: y ? { items: _, total: U(e.last_taste_spend) } : null,
395
+ orderNotes: q,
396
+ personalNotes: L,
397
+ price: F !== null || I !== null || O !== null ? { floor: F, ceiling: I, avg: O } : null,
398
+ lifetime: Z !== null && (Z > 0 || (j != null ? j : 0) > 0) ? { spend: Z / 100, orders: j } : null,
399
+ since: R(e.since_year)
399
400
  };
400
401
  }
401
- function qn(e, t) {
402
- return e.map((n) => Vn(n, t)).map((n, r) => ({ arrival: n, index: r })).sort((n, r) => n.arrival.minutes - r.arrival.minutes || n.index - r.index).map(({ arrival: n }) => n);
402
+ function Qn(e, t) {
403
+ return e.map((n) => Jn(n, t)).map((n, r) => ({ arrival: n, index: r })).sort((n, r) => n.arrival.minutes - r.arrival.minutes || n.index - r.index).map(({ arrival: n }) => n);
404
+ }
405
+ function Xn(e, t) {
406
+ const n = [...e].sort((a, l) => a.minutes - l.minutes), r = [];
407
+ for (const a of n) {
408
+ const l = r[r.length - 1];
409
+ l && a.minutes - l[l.length - 1].minutes < t ? l.push(a) : r.push([a]);
410
+ }
411
+ return r.flatMap((a) => {
412
+ var c;
413
+ if (a[a.length - 1].minutes - a[0].minutes <= 120) return [a];
414
+ const l = /* @__PURE__ */ new Map();
415
+ for (const d of a) {
416
+ const m = Math.floor(d.minutes / 60);
417
+ l.set(m, [...(c = l.get(m)) != null ? c : [], d]);
418
+ }
419
+ return Array.from(l.values());
420
+ }).map((a) => ({ key: String(a[0].minutes), first: a[0].minutes, last: a[a.length - 1].minutes, arrivals: a }));
421
+ }
422
+ function er(e) {
423
+ const t = [], n = e.filter((a) => a.vip).length, r = e.filter((a) => a.large).length, s = e.filter((a) => a.clubPickup).length;
424
+ return n && t.push(A(n, "VIP")), r && t.push(A(r, "large party", "large parties")), s && t.push(A(s, "club pickup")), t.length ? t.join(", ") : null;
425
+ }
426
+ const an = [
427
+ { id: "vip", label: "VIP", test: (e) => e.vip },
428
+ { id: "first", label: "First visit", test: (e) => e.visit === "first" },
429
+ { id: "club", label: "Club member", test: (e) => e.clubMember },
430
+ { id: "large", label: "Large party", test: (e) => e.large }
431
+ ];
432
+ function Vt(e) {
433
+ return e.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim();
434
+ }
435
+ function Oe(e, t, n) {
436
+ var s;
437
+ const r = Vt(t);
438
+ return r && !Vt((s = e.name) != null ? s : "").includes(r) ? !1 : an.every((a) => !n.includes(a.id) || a.test(e));
403
439
  }
404
- function Ie(e, t) {
440
+ function Ve(e, t) {
405
441
  return e < t ? "past" : e > t ? "future" : "today";
406
442
  }
407
- function Ve(e, t, n) {
443
+ function sn(e, t, n) {
408
444
  return t !== "today" ? { upcoming: e, earlier: [] } : { upcoming: e.filter((r) => r.minutes >= n), earlier: e.filter((r) => r.minutes < n) };
409
445
  }
410
- function Un(e, t, n) {
446
+ function tr(e, t, n) {
411
447
  if (t !== "today") return null;
412
448
  const r = e.minutes - n;
413
- return r >= 0 && r <= 120 ? Re(r) : null;
449
+ return r >= 0 && r <= 120 ? Ge(r) : null;
414
450
  }
415
- function jn(e) {
416
- const t = e.slice(0, 2).map(fe).join(", ");
451
+ function nr(e) {
452
+ const t = e.slice(0, 2).map(xe).join(", ");
417
453
  return e.length > 2 ? `${t} and ${e.length - 2} more` : t;
418
454
  }
419
- function Ee(e, t, n, r, a) {
420
- return n.length ? n.length === 1 ? { label: e, value: fe(n[0]), detail: me(r, n[0].minutes, a) } : { label: t, value: z(n.length, "guest"), detail: jn(n) } : null;
455
+ function Re(e, t, n, r, s) {
456
+ return n.length ? n.length === 1 ? { label: e, value: xe(n[0]), detail: we(r, n[0].minutes, s) } : { label: t, value: A(n.length, "guest"), detail: nr(n) } : null;
421
457
  }
422
- function zt(e, t, n) {
458
+ function Ut(e, t, n) {
423
459
  const r = [];
424
- r.push(Ee("Club pickup", "Club pickups", e.filter((s) => s.clubPickup), t, n));
425
- const a = e.filter((s) => s.large);
426
- if (a.length === 1) r.push({ label: "Large party", value: `Party of ${a[0].party}`, detail: me(t, a[0].minutes, n) });
427
- else if (a.length > 1) {
428
- const s = a.reduce((l, d) => l + d.party, 0), c = a.slice(0, 2).map((l) => `${oe(l.minutes)} for ${l.party}`).join(", ");
460
+ r.push(Re("Club pickup", "Club pickups", e.filter((a) => a.clubPickup), t, n));
461
+ const s = e.filter((a) => a.large);
462
+ if (s.length === 1) r.push({ label: "Large party", value: `Party of ${s[0].party}`, detail: we(t, s[0].minutes, n) });
463
+ else if (s.length > 1) {
464
+ const a = s.reduce((c, d) => c + d.party, 0), l = s.slice(0, 2).map((c) => `${J(c.minutes)} for ${c.party}`).join(", ");
429
465
  r.push({
430
466
  label: "Large parties",
431
- value: `${z(a.length, "party", "parties")}, ${z(s, "guest")}`,
432
- detail: `${ne(t, n)}, ${c}${a.length > 2 ? ` and ${a.length - 2} more` : ""}`
467
+ value: `${A(s.length, "party", "parties")}, ${A(a, "guest")}`,
468
+ detail: `${ae(t, n)}, ${l}${s.length > 2 ? ` and ${s.length - 2} more` : ""}`
433
469
  });
434
470
  }
435
- return r.push(Ee("VIP", "VIPs", e.filter((s) => s.vip), t, n)), r.push(Ee("Club prospect", "Club prospects", e.filter((s) => s.prospect), t, n)), r.filter((s) => s !== null);
471
+ return r.push(Re("VIP", "VIPs", e.filter((a) => a.vip), t, n)), r.push(Re("Club prospect", "Club prospects", e.filter((a) => a.prospect), t, n)), r.filter((a) => a !== null);
436
472
  }
437
- function Gn(e, t, n) {
438
- var l;
473
+ function rr(e, t, n) {
474
+ var c;
439
475
  const r = /* @__PURE__ */ new Map();
440
476
  for (const d of e) {
441
- const h = Math.floor(d.minutes / 30) * 30, T = (l = r.get(h)) != null ? l : { parties: 0, guests: 0 };
442
- r.set(h, { parties: T.parties + 1, guests: T.guests + d.party });
477
+ const m = Math.floor(d.minutes / 30) * 30, M = (c = r.get(m)) != null ? c : { parties: 0, guests: 0 };
478
+ r.set(m, { parties: M.parties + 1, guests: M.guests + d.party });
443
479
  }
444
- const a = Array.from(r.entries()).sort((d, h) => h[1].guests - d[1].guests || h[1].parties - d[1].parties || d[0] - h[0])[0];
445
- if (!a) return null;
446
- const [s, c] = a;
480
+ const s = Array.from(r.entries()).sort((d, m) => m[1].guests - d[1].guests || m[1].parties - d[1].parties || d[0] - m[0])[0];
481
+ if (!s) return null;
482
+ const [a, l] = s;
447
483
  return {
448
484
  label: "Busiest half hour",
449
- value: `${oe(s)} to ${oe(s + 30)}`,
450
- detail: `${ne(t, n)}, ${z(c.parties, "party", "parties")}, ${z(c.guests, "guest")}`
485
+ value: `${J(a)} to ${J(a + 30)}`,
486
+ detail: `${ae(t, n)}, ${A(l.parties, "party", "parties")}, ${A(l.guests, "guest")}`
451
487
  };
452
488
  }
453
- function Fn(e, t, n, r) {
454
- const a = { reservations: e.length, guests: e.reduce((h, T) => h + T.party, 0) };
455
- if (!e.length) return { ...a, message: "No reservations on this day", facts: [] };
456
- const s = Ie(t, n);
457
- if (s === "past") return { ...a, message: "This day has passed", facts: [] };
458
- const { upcoming: c, earlier: l } = Ve(e, s, r);
459
- if (!c.length) return { ...a, message: "No more arrivals today", facts: [] };
460
- if (l.length) {
461
- const h = c[0];
489
+ function ar(e, t, n, r) {
490
+ const s = { reservations: e.length, guests: e.reduce((m, M) => m + M.party, 0) };
491
+ if (!e.length) return { ...s, message: "No reservations on this day", facts: [] };
492
+ const a = Ve(t, n);
493
+ if (a === "past") return { ...s, message: "This day has passed", facts: [] };
494
+ const { upcoming: l, earlier: c } = sn(e, a, r);
495
+ if (!l.length) return { ...s, message: "No more arrivals today", facts: [] };
496
+ if (c.length) {
497
+ const m = l[0];
462
498
  return {
463
- ...a,
499
+ ...s,
464
500
  message: null,
465
501
  facts: [
466
- { label: "Still to arrive", value: `${c.length} of ${e.length}` },
467
- { label: "Next arrival", value: me(t, h.minutes, n), detail: Re(h.minutes - r) },
468
- ...zt(c, t, n)
502
+ { label: "Still to arrive", value: `${l.length} of ${e.length}` },
503
+ { label: "Next arrival", value: we(t, m.minutes, n), detail: Ge(m.minutes - r) },
504
+ ...Ut(l, t, n)
469
505
  ]
470
506
  };
471
507
  }
472
- const d = zt(c, t, n);
508
+ const d = Ut(l, t, n);
473
509
  if (!d.length) {
474
- const h = Gn(c, t, n);
475
- h && d.push(h);
510
+ const m = rr(l, t, n);
511
+ m && d.push(m);
476
512
  }
477
- return { ...a, message: null, facts: d };
513
+ return { ...s, message: null, facts: d };
478
514
  }
479
- function Zn(e) {
515
+ function sr(e) {
480
516
  return new Set(e.map((n) => n.source)).size === 1 ? e[0].source : null;
481
517
  }
482
- const qe = { commerce7: "Commerce7", tock: "Tock" }, Bn = "Load Guest Prep day";
483
- function Hn(e) {
518
+ const Fe = { commerce7: "Commerce7", tock: "Tock" }, ir = "Load Guest Prep day";
519
+ function or(e) {
484
520
  var n;
485
521
  const t = ((n = e.wineryName) == null ? void 0 : n.trim()) || "this winery";
486
522
  return [
@@ -493,30 +529,30 @@ function Hn(e) {
493
529
  "Do not use exports or invent guests."
494
530
  ].join(" ");
495
531
  }
496
- const Yn = "0.1.1", ue = (e, t) => String(e != null ? e : "").replace(/\s+/g, " ").trim().slice(0, t);
497
- function Wn(e = {}, t = []) {
498
- var n, r, a, s, c, l;
532
+ const lr = "0.1.2", fe = (e, t) => String(e != null ? e : "").replace(/\s+/g, " ").trim().slice(0, t);
533
+ function cr(e = {}, t = []) {
534
+ var n, r, s, a, l, c;
499
535
  return {
500
- packageVersion: Yn,
501
- hiddenSections: ((n = e.hide) != null ? n : []).slice(0, 20).map((d) => ue(d, 40)),
536
+ packageVersion: lr,
537
+ hiddenSections: ((n = e.hide) != null ? n : []).slice(0, 20).map((d) => fe(d, 40)),
502
538
  // Guest Prep has one view and no reordering.
503
539
  reorderedViews: [],
504
- renamedSections: Object.keys((r = e.labels) != null ? r : {}).slice(0, 20).map((d) => ue(d, 40)),
505
- themeChanged: Object.keys((a = e.theme) != null ? a : {}).length + Object.keys((s = e.themeDark) != null ? s : {}).length > 0,
506
- fontsChanged: !!((c = e.fonts) != null && c.display || (l = e.fonts) != null && l.body),
540
+ renamedSections: Object.keys((r = e.labels) != null ? r : {}).slice(0, 20).map((d) => fe(d, 40)),
541
+ themeChanged: Object.keys((s = e.theme) != null ? s : {}).length + Object.keys((a = e.themeDark) != null ? a : {}).length > 0,
542
+ fontsChanged: !!((l = e.fonts) != null && l.display || (c = e.fonts) != null && c.body),
507
543
  titleChanged: !!e.title,
508
544
  customCards: t.slice(0, 10).map((d) => {
509
- var h;
510
- return { title: ue(d.title, 80), purpose: ue(d.purpose, 160), view: ue((h = d.after) != null ? h : "page", 20) };
545
+ var m;
546
+ return { title: fe(d.title, 80), purpose: fe(d.purpose, 160), view: fe((m = d.after) != null ? m : "page", 20) };
511
547
  })
512
548
  };
513
549
  }
514
- const Lt = "guest-prep.tenant", It = (e) => `guest-prep:${e}`;
515
- function Kn() {
550
+ const jt = "guest-prep.tenant", Gt = (e) => `guest-prep:${e}`;
551
+ function ur() {
516
552
  const e = globalThis.storage;
517
553
  return e && typeof e.get == "function" && typeof e.set == "function" ? e : null;
518
554
  }
519
- function Jn() {
555
+ function dr() {
520
556
  try {
521
557
  const e = globalThis.localStorage, t = "__nv_probe__";
522
558
  return e.setItem(t, "1"), e.removeItem(t), e;
@@ -524,29 +560,29 @@ function Jn() {
524
560
  return null;
525
561
  }
526
562
  }
527
- function Qn(e) {
563
+ function pr(e) {
528
564
  return typeof e == "string" ? e : e && typeof e == "object" && typeof e.value == "string" ? e.value : null;
529
565
  }
530
- function Xn(e) {
566
+ function gr(e) {
531
567
  if (e) return { adapter: e, mode: "artifact" };
532
- const t = Kn();
568
+ const t = ur();
533
569
  if (t)
534
570
  return {
535
571
  mode: "artifact",
536
572
  adapter: {
537
- get: async (r, a) => Qn(await t.get(r, a)),
538
- set: async (r, a, s) => {
539
- await t.set(r, a, s);
573
+ get: async (r, s) => pr(await t.get(r, s)),
574
+ set: async (r, s, a) => {
575
+ await t.set(r, s, a);
540
576
  }
541
577
  }
542
578
  };
543
- const n = Jn();
579
+ const n = dr();
544
580
  return n ? {
545
581
  mode: "browser",
546
- adapter: { get: async (r) => n.getItem(r), set: async (r, a) => n.setItem(r, a) }
582
+ adapter: { get: async (r) => n.getItem(r), set: async (r, s) => n.setItem(r, s) }
547
583
  } : { adapter: null, mode: "none" };
548
584
  }
549
- async function Ot(e, t) {
585
+ async function Ft(e, t) {
550
586
  if (!e) return null;
551
587
  try {
552
588
  return await e.get(t, !1);
@@ -554,14 +590,14 @@ async function Ot(e, t) {
554
590
  return null;
555
591
  }
556
592
  }
557
- async function Dt(e, t, n) {
593
+ async function Zt(e, t, n) {
558
594
  if (e)
559
595
  try {
560
596
  await e.set(t, n, !1);
561
597
  } catch {
562
598
  }
563
599
  }
564
- function er(e) {
600
+ function fr(e) {
565
601
  if (!e) return null;
566
602
  try {
567
603
  const t = JSON.parse(e);
@@ -570,7 +606,7 @@ function er(e) {
570
606
  return null;
571
607
  }
572
608
  }
573
- const tr = {
609
+ const mr = {
574
610
  "surface-base": "#f7f5f1",
575
611
  "surface-subtle": "#f2efea",
576
612
  "surface-raised": "#ffffff",
@@ -588,7 +624,7 @@ const tr = {
588
624
  "status-warning-bg": "#fff7e7",
589
625
  "font-display": "'Newsreader', Georgia, serif",
590
626
  "font-body": "'Be Vietnam Pro', system-ui, sans-serif"
591
- }, nr = {
627
+ }, hr = {
592
628
  "surface-base": "#171614",
593
629
  "surface-subtle": "#24211f",
594
630
  "surface-raised": "#34302d",
@@ -604,18 +640,18 @@ const tr = {
604
640
  "focus-ring-color": "#8cd0a0",
605
641
  "status-warning": "#f0c36a",
606
642
  "status-warning-bg": "rgba(240,195,106,.16)"
607
- }, rr = /^[a-z][a-z0-9-]{0,40}$/, ar = /^[^;{}<>\\]{1,120}$/;
608
- function Rt(e) {
609
- return Object.entries(e).filter(([t, n]) => rr.test(t) && typeof n == "string" && ar.test(n)).map(([t, n]) => `--${t}:${n};`).join("");
643
+ }, yr = /^[a-z][a-z0-9-]{0,40}$/, br = /^[^;{}<>\\]{1,120}$/;
644
+ function Bt(e) {
645
+ return Object.entries(e).filter(([t, n]) => yr.test(t) && typeof n == "string" && br.test(n)).map(([t, n]) => `--${t}:${n};`).join("");
610
646
  }
611
- function sr(e) {
647
+ function vr(e) {
612
648
  return `https://fonts.googleapis.com/css2?${e.map((n) => `family=${encodeURIComponent(n).replace(/%20/g, "+")}:wght@300;400;500;600`).join("&")}&display=swap`;
613
649
  }
614
- function or(e = {}, t = {}) {
615
- const n = Rt({ ...tr, ...e }), r = Rt({ ...nr, ...t });
650
+ function xr(e = {}, t = {}) {
651
+ const n = Bt({ ...mr, ...e }), r = Bt({ ...hr, ...t });
616
652
  return `:root,.nvgp{${n}}@media (prefers-color-scheme: dark){:root,.nvgp{${r}}}`;
617
653
  }
618
- const Pe = "120ms cubic-bezier(0.2,0,0.2,1)", ir = `
654
+ const me = "120ms cubic-bezier(0.2,0,0.2,1)", wr = `
619
655
  html,body{margin:0;background:var(--surface-base,#f7f5f1)}
620
656
  .nvgp{background:var(--surface-base);color:var(--text-primary);font:16px/1.5 var(--font-body);-webkit-font-smoothing:antialiased;min-height:100vh;overflow-x:clip}
621
657
  .nvgp *{box-sizing:border-box}
@@ -636,7 +672,7 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
636
672
  .nvgp .storage-note{font-size:13px;color:var(--text-tertiary);margin:0 0 8px}
637
673
  .nvgp .daybar{position:sticky;top:0;z-index:20;background:var(--surface-base);display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:12px 0;padding-top:max(12px,env(safe-area-inset-top))}
638
674
  .nvgp .day-wrap{position:relative;max-width:100%}
639
- .nvgp .day-button{display:inline-flex;align-items:center;gap:8px;min-height:40px;max-width:100%;padding:0 14px;border:1px solid var(--border-default);border-radius:10px;background:var(--surface-raised);font-size:15px;font-weight:600;cursor:pointer;transition:border-color ${Pe}}
675
+ .nvgp .day-button{display:inline-flex;align-items:center;gap:8px;min-height:40px;max-width:100%;padding:0 14px;border:1px solid var(--border-default);border-radius:10px;background:var(--surface-raised);font-size:15px;font-weight:600;cursor:pointer;transition:border-color ${me}}
640
676
  .nvgp .day-button:hover{border-color:var(--border-strong)}
641
677
  .nvgp .day-button svg{flex:none;color:var(--text-secondary)}
642
678
  .nvgp .day-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@@ -669,12 +705,34 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
669
705
  .nvgp .fact-detail{font-size:13px;color:var(--text-secondary);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
670
706
  .nvgp .fact-countdown .fact-detail,.nvgp .soon{color:var(--action-primary-bg);font-weight:500}
671
707
  .nvgp .layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);gap:16px;align-items:start}
672
- .nvgp .list-card{padding:0;overflow:hidden}
708
+ .nvgp .list-card{padding:0;overflow:clip}
673
709
  .nvgp .card-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:16px 24px;border-bottom:1px solid var(--border-subtle)}
674
710
  .nvgp h2{font:300 22px/1.3 var(--font-display);margin:0}
675
711
  .nvgp .card-aside{font-size:13px;color:var(--text-secondary)}
676
712
  .nvgp .rows{list-style:none;margin:0;padding:0}
677
- .nvgp .row{display:grid;grid-template-columns:88px minmax(0,1fr) auto;gap:12px;width:100%;padding:12px 24px;border:0;border-bottom:1px solid var(--border-subtle);border-left:3px solid transparent;background:none;text-align:left;cursor:pointer;transition:background ${Pe}}
713
+ .nvgp .finder{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:12px 24px;border-bottom:1px solid var(--border-subtle)}
714
+ .nvgp .search{display:flex;align-items:center;gap:8px;flex:1 1 200px;min-width:0;min-height:40px;padding:0 12px;border:1px solid var(--border-default);border-radius:10px;background:var(--surface-raised);color:var(--text-secondary)}
715
+ .nvgp .search:focus-within{outline:2px solid var(--focus-ring-color);outline-offset:2px}
716
+ .nvgp .search-input{flex:1;min-width:0;border:0;background:none;color:var(--text-primary);font:inherit;font-size:15px;outline:none}
717
+ .nvgp .filters{display:flex;flex-wrap:wrap;gap:8px}
718
+ .nvgp .filter-chip{display:inline-flex;align-items:center;min-height:32px;padding:0 12px;border:1px solid var(--border-default);border-radius:999px;background:var(--surface-raised);color:var(--text-primary);font:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:background ${me},border-color ${me}}
719
+ .nvgp .filter-chip:hover{border-color:var(--text-tertiary)}
720
+ .nvgp .filter-chip[aria-pressed="true"]{background:var(--action-primary-bg);border-color:var(--action-primary-bg);color:var(--action-primary-fg)}
721
+ .nvgp .filter-status{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 12px;padding:8px 24px;font-size:14px;color:var(--text-secondary);border-bottom:1px solid var(--border-subtle)}
722
+ .nvgp .link-button{min-height:32px;padding:0;border:0;background:none;color:var(--action-primary-bg);font:inherit;font-weight:500;cursor:pointer}
723
+ .nvgp .seatings{list-style:none;margin:0;padding:0}
724
+ .nvgp .seat-head{position:sticky;top:var(--seat-top,0px);z-index:5;display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:40px;padding:8px 24px;border:0;border-bottom:1px solid var(--border-subtle);background:var(--surface-raised);color:var(--text-primary);font:inherit;text-align:left}
725
+ .nvgp .seating:not(:first-child) .seat-head{border-top:1px solid var(--border-subtle)}
726
+ .nvgp .seat-label{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;min-width:0}
727
+ .nvgp .seat-time{margin:0;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
728
+ .nvgp .seat-counts{font-size:13px;color:var(--text-secondary);font-variant-numeric:tabular-nums}
729
+ .nvgp .seat-marker{flex:none;padding:0 8px;border-radius:999px;font-size:12px;font-weight:600;line-height:20px}
730
+ .nvgp .seat-now{background:var(--action-primary-bg);color:var(--action-primary-fg)}
731
+ .nvgp .seat-next{border:1px solid var(--action-primary-bg);color:var(--action-primary-bg)}
732
+ .nvgp .seat-toggle{justify-content:flex-start;background:var(--surface-subtle);color:var(--text-secondary);cursor:pointer}
733
+ .nvgp .seat-toggle .seat-time{font-weight:500}
734
+ .nvgp .seat-chevron{display:inline-flex;flex:none}
735
+ .nvgp .row{display:grid;grid-template-columns:88px minmax(0,1fr) auto;gap:12px;width:100%;padding:12px 24px;border:0;border-bottom:1px solid var(--border-subtle);border-left:3px solid transparent;background:none;text-align:left;cursor:pointer;transition:background ${me}}
678
736
  .nvgp .row:hover{background:var(--surface-subtle)}
679
737
  .nvgp .row[aria-current="true"]{border-left-color:var(--action-primary-bg);background:var(--surface-subtle)}
680
738
  .nvgp .row-time{font-weight:600;font-variant-numeric:tabular-nums}
@@ -695,7 +753,7 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
695
753
  .nvgp .empty-title{font:300 22px/1.3 var(--font-display);color:var(--text-primary);margin:0 0 8px}
696
754
  .nvgp .note{font-size:14px;color:var(--text-secondary);margin:8px 0 0}
697
755
  .nvgp .problem{color:var(--status-warning)}
698
- .nvgp .button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border:0;border-radius:8px;background:var(--action-primary-bg);color:var(--action-primary-fg);font-weight:500;cursor:pointer;transition:background ${Pe}}
756
+ .nvgp .button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border:0;border-radius:8px;background:var(--action-primary-bg);color:var(--action-primary-fg);font-weight:500;cursor:pointer;transition:background ${me}}
699
757
  .nvgp .button:hover{background:var(--action-primary-hover)}
700
758
  .nvgp .button:disabled{opacity:.55;cursor:default}
701
759
  .nvgp .button-quiet{background:transparent;color:var(--text-primary);border:1px solid var(--border-strong)}
@@ -766,15 +824,20 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
766
824
  .nvgp .card-head,.nvgp .panel-head{padding:12px 16px}
767
825
  .nvgp .row{grid-template-columns:72px minmax(0,1fr) auto;padding:12px 16px;min-height:44px}
768
826
  .nvgp .earlier-head{padding:8px 16px}
827
+ .nvgp .finder{padding:12px 16px}
828
+ .nvgp .search,.nvgp .filter-chip,.nvgp .link-button,.nvgp .seat-head{min-height:44px}
829
+ .nvgp .filter-status{padding:8px 16px}
830
+ .nvgp .seat-head{padding:8px 16px}
769
831
  .nvgp .panel-body{padding:0 16px 24px}
770
832
  .nvgp .fact-row{grid-template-columns:repeat(2,minmax(0,1fr))}
771
833
  .nvgp .fact-grid{grid-template-columns:minmax(0,1fr)}
772
834
  .nvgp .custom-card{padding:12px 16px}
773
835
  }
774
836
  @media (prefers-reduced-motion: reduce){.nvgp *{transition-duration:0ms!important;animation:none!important}}
775
- `, lr = ["summary", "guestList"], Kt = ["reservation", "talkAbout", "newVintageProfile", "relationship", "headsUp", "personalNotes"], Dr = [...lr, ...Kt], be = {
837
+ `, kr = ["summary", "guestList"], on = ["reservation", "talkAbout", "newVintageProfile", "relationship", "headsUp", "personalNotes"], ea = [...kr, ...on], he = {
776
838
  timeZone: "America/Los_Angeles",
777
839
  largeParty: 10,
840
+ seatingGapMinutes: 45,
778
841
  tagRules: {
779
842
  interests: ["^(?:client\\s+)?interest(?:ed)?(?:\\s+in)?\\s*[-–—:]\\s*(.+)$"],
780
843
  vip: ["\\bvip\\b"],
@@ -782,23 +845,23 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
782
845
  hide: ["^\\*+\\s*test\\s*\\*+$", "^test\\b"]
783
846
  }
784
847
  };
785
- function o(e, t = null, ...n) {
848
+ function i(e, t = null, ...n) {
786
849
  const r = document.createElement(e);
787
- for (const [a, s] of Object.entries(t != null ? t : {}))
788
- s == null || s === !1 || (typeof s == "function" ? r.addEventListener(a.replace(/^on/, "").toLowerCase(), s) : s === !0 ? r.setAttribute(a, "") : r.setAttribute(a, String(s)));
789
- return Jt(r, n), r;
850
+ for (const [s, a] of Object.entries(t != null ? t : {}))
851
+ a == null || a === !1 || (typeof a == "function" ? r.addEventListener(s.replace(/^on/, "").toLowerCase(), a) : a === !0 ? r.setAttribute(s, "") : r.setAttribute(s, String(a)));
852
+ return ln(r, n), r;
790
853
  }
791
- function Jt(e, t) {
854
+ function ln(e, t) {
792
855
  for (const n of t)
793
- n == null || n === !1 || (Array.isArray(n) ? Jt(e, n) : e.append(n instanceof Node ? n : String(n)));
856
+ n == null || n === !1 || (Array.isArray(n) ? ln(e, n) : e.append(n instanceof Node ? n : String(n)));
794
857
  }
795
- const cr = "http://www.w3.org/2000/svg";
796
- function Vt(e, t = {}, ...n) {
797
- const r = document.createElementNS(cr, e);
798
- for (const [a, s] of Object.entries(t)) r.setAttribute(a, String(s));
858
+ const Sr = "http://www.w3.org/2000/svg";
859
+ function Ht(e, t = {}, ...n) {
860
+ const r = document.createElementNS(Sr, e);
861
+ for (const [s, a] of Object.entries(t)) r.setAttribute(s, String(a));
799
862
  return r.append(...n), r;
800
863
  }
801
- const ur = {
864
+ const $r = {
802
865
  "chevron-left": ["M15 18l-6-6 6-6"],
803
866
  "chevron-right": ["M9 18l6-6-6-6"],
804
867
  "chevron-down": ["M6 9l6 6 6-6"],
@@ -808,115 +871,116 @@ const ur = {
808
871
  "triangle-alert": ["M21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3z", "M12 9v4", "M12 17h.01"],
809
872
  "sticky-note": ["M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8z", "M15 3v4a2 2 0 0 0 2 2h4"],
810
873
  wine: ["M8 22h8", "M7 10h10", "M12 15v7", "M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5z"],
874
+ search: ["M19 11a8 8 0 1 1-16 0 8 8 0 0 1 16 0z", "M21 21l-4.3-4.3"],
811
875
  x: ["M18 6L6 18", "M6 6l12 12"],
812
876
  "refresh-cw": ["M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", "M21 3v5h-5", "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", "M8 16H3v5"]
813
877
  };
814
878
  function K(e, t = 16) {
815
879
  var n;
816
- return Vt(
880
+ return Ht(
817
881
  "svg",
818
882
  { width: t, height: t, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" },
819
- ...((n = ur[e]) != null ? n : []).map((r) => Vt("path", { d: r }))
883
+ ...((n = $r[e]) != null ? n : []).map((r) => Ht("path", { d: r }))
820
884
  );
821
885
  }
822
- function $(e, t = "note") {
823
- return o("p", { class: t }, e);
886
+ function P(e, t = "note") {
887
+ return i("p", { class: t }, e);
824
888
  }
825
- function k(e, t, n, r = "") {
826
- return o(
889
+ function S(e, t, n, r = "") {
890
+ return i(
827
891
  "div",
828
892
  { class: `fact${r ? ` ${r}` : ""}` },
829
- o("div", { class: "fact-label" }, e),
830
- o("div", { class: "fact-value" }, t),
831
- n ? o("div", { class: "fact-detail" }, n) : null
893
+ i("div", { class: "fact-label" }, e),
894
+ i("div", { class: "fact-value" }, t),
895
+ n ? i("div", { class: "fact-detail" }, n) : null
832
896
  );
833
897
  }
834
- function we(e, t = "neutral") {
835
- return o("div", { class: "chips" }, e.map((n) => o("span", { class: `chip chip-${t}` }, n)));
898
+ function Te(e, t = "neutral") {
899
+ return i("div", { class: "chips" }, e.map((n) => i("span", { class: `chip chip-${t}` }, n)));
836
900
  }
837
- function Qt(e) {
838
- return o("span", { class: `badge${e === "VIP" ? " badge-vip" : ""}` }, e);
901
+ function cn(e) {
902
+ return i("span", { class: `badge${e === "VIP" ? " badge-vip" : ""}` }, e);
839
903
  }
840
- function Xt(e) {
841
- return Number(U(`${ke(e, 1)}-01`, -1).slice(8, 10));
904
+ function un(e) {
905
+ return Number(W(`${Ne(e, 1)}-01`, -1).slice(8, 10));
842
906
  }
843
- function qt(e, t) {
844
- const n = ke(e.slice(0, 7), t);
845
- return `${n}-${String(Math.min(Number(e.slice(8, 10)), Xt(n))).padStart(2, "0")}`;
907
+ function Yt(e, t) {
908
+ const n = Ne(e.slice(0, 7), t);
909
+ return `${n}-${String(Math.min(Number(e.slice(8, 10)), un(n))).padStart(2, "0")}`;
846
910
  }
847
- function dr(e) {
848
- const t = `${e}-01`, n = Array.from({ length: ge(t) }, () => null);
849
- for (let r = 0; r < Xt(e); r += 1) n.push(U(t, r));
911
+ function Tr(e) {
912
+ const t = `${e}-01`, n = Array.from({ length: ve(t) }, () => null);
913
+ for (let r = 0; r < un(e); r += 1) n.push(W(t, r));
850
914
  return n;
851
915
  }
852
- function pr(e, t) {
916
+ function Nr(e, t) {
853
917
  switch (t) {
854
918
  case "ArrowLeft":
855
- return U(e, -1);
919
+ return W(e, -1);
856
920
  case "ArrowRight":
857
- return U(e, 1);
921
+ return W(e, 1);
858
922
  case "ArrowUp":
859
- return U(e, -7);
923
+ return W(e, -7);
860
924
  case "ArrowDown":
861
- return U(e, 7);
925
+ return W(e, 7);
862
926
  case "PageUp":
863
- return qt(e, -1);
927
+ return Yt(e, -1);
864
928
  case "PageDown":
865
- return qt(e, 1);
929
+ return Yt(e, 1);
866
930
  case "Home":
867
- return U(e, -ge(e));
931
+ return W(e, -ve(e));
868
932
  case "End":
869
- return U(e, 6 - ge(e));
933
+ return W(e, 6 - ve(e));
870
934
  default:
871
935
  return null;
872
936
  }
873
937
  }
874
- function gr(e) {
875
- const { state: t } = e, n = dr(t.month).map((s, c) => {
876
- if (!s) return o("span", { "aria-hidden": "true", "data-blank": c });
877
- const l = s === t.focus;
878
- return o(
938
+ function Ar(e) {
939
+ const { state: t } = e, n = Tr(t.month).map((a, l) => {
940
+ if (!a) return i("span", { "aria-hidden": "true", "data-blank": l });
941
+ const c = a === t.focus;
942
+ return i(
879
943
  "button",
880
944
  {
881
945
  type: "button",
882
- class: `cal-day${s === e.today ? " is-today" : ""}`,
883
- "aria-label": De(s, e.today) + (s === e.today ? ", today" : ""),
884
- "aria-selected": s === e.selected ? "true" : "false",
885
- "aria-current": s === e.today ? "date" : null,
886
- tabindex: l ? 0 : -1,
887
- "data-day": s,
888
- "data-fid": l ? "cal-focus" : null,
889
- onclick: () => e.onPick(s)
946
+ class: `cal-day${a === e.today ? " is-today" : ""}`,
947
+ "aria-label": je(a, e.today) + (a === e.today ? ", today" : ""),
948
+ "aria-selected": a === e.selected ? "true" : "false",
949
+ "aria-current": a === e.today ? "date" : null,
950
+ tabindex: c ? 0 : -1,
951
+ "data-day": a,
952
+ "data-fid": c ? "cal-focus" : null,
953
+ onclick: () => e.onPick(a)
890
954
  },
891
- String(Number(s.slice(8, 10)))
955
+ String(Number(a.slice(8, 10)))
892
956
  );
893
- }), r = o(
957
+ }), r = i(
894
958
  "div",
895
- { class: "cal-grid", role: "group", "aria-label": $t(t.month) },
896
- Oe.map((s) => o("span", { class: "cal-dow", "aria-hidden": "true" }, s.slice(0, 2))),
959
+ { class: "cal-grid", role: "group", "aria-label": Pt(t.month) },
960
+ Ue.map((a) => i("span", { class: "cal-dow", "aria-hidden": "true" }, a.slice(0, 2))),
897
961
  n
898
962
  );
899
- r.addEventListener("keydown", (s) => {
900
- const c = s.key, l = pr(t.focus, c);
901
- l && (s.preventDefault(), e.onFocus(l));
963
+ r.addEventListener("keydown", (a) => {
964
+ const l = a.key, c = Nr(t.focus, l);
965
+ c && (a.preventDefault(), e.onFocus(c));
902
966
  });
903
- const a = o(
967
+ const s = i(
904
968
  "div",
905
969
  { class: "calendar", role: "dialog", "aria-label": "Choose a day" },
906
- o(
970
+ i(
907
971
  "div",
908
972
  { class: "cal-head" },
909
- o("button", { type: "button", class: "icon-button", "aria-label": "Previous month", onclick: () => e.onMonth(ke(t.month, -1)) }, K("chevron-left")),
910
- o("span", { class: "cal-title", "aria-live": "polite" }, $t(t.month)),
911
- o("button", { type: "button", class: "icon-button", "aria-label": "Next month", onclick: () => e.onMonth(ke(t.month, 1)) }, K("chevron-right"))
973
+ i("button", { type: "button", class: "icon-button", "aria-label": "Previous month", onclick: () => e.onMonth(Ne(t.month, -1)) }, K("chevron-left")),
974
+ i("span", { class: "cal-title", "aria-live": "polite" }, Pt(t.month)),
975
+ i("button", { type: "button", class: "icon-button", "aria-label": "Next month", onclick: () => e.onMonth(Ne(t.month, 1)) }, K("chevron-right"))
912
976
  ),
913
977
  r
914
978
  );
915
- return a.addEventListener("keydown", (s) => {
916
- s.key === "Escape" && (s.preventDefault(), s.stopPropagation(), e.onClose());
917
- }), a;
979
+ return s.addEventListener("keydown", (a) => {
980
+ a.key === "Escape" && (a.preventDefault(), a.stopPropagation(), e.onClose());
981
+ }), s;
918
982
  }
919
- const fr = "https://newvintage.ai/?utm_source=guest-prep&utm_medium=referral&utm_campaign=guest-prep&utm_content=season-bar-logo", mr = {
983
+ const Mr = "https://newvintage.ai/?utm_source=guest-prep&utm_medium=referral&utm_campaign=guest-prep&utm_content=season-bar-logo", _r = {
920
984
  summary: "Summary",
921
985
  guestList: "Everyone coming in",
922
986
  reservation: "Reservation",
@@ -925,60 +989,60 @@ const fr = "https://newvintage.ai/?utm_source=guest-prep&utm_medium=referral&utm
925
989
  relationship: "Relationship",
926
990
  headsUp: "Heads-up",
927
991
  personalNotes: "Personal notes"
928
- }, hr = {
992
+ }, Cr = {
929
993
  reservation: "calendar",
930
994
  talkAbout: "message-circle",
931
995
  newVintageProfile: "wine",
932
996
  relationship: "heart",
933
997
  headsUp: "triangle-alert",
934
998
  personalNotes: "sticky-note"
935
- }, Ut = {
999
+ }, Wt = {
936
1000
  newVintageProfile: "From New Vintage's analysis of their wine purchases."
937
1001
  };
938
- function Ue(e, t) {
939
- var r, a;
940
- const n = (a = (r = e.options.customize) == null ? void 0 : r.labels) == null ? void 0 : a[t];
941
- return typeof n == "string" && n.trim() ? n.trim() : mr[t];
1002
+ function Ze(e, t) {
1003
+ var r, s;
1004
+ const n = (s = (r = e.options.customize) == null ? void 0 : r.labels) == null ? void 0 : s[t];
1005
+ return typeof n == "string" && n.trim() ? n.trim() : _r[t];
942
1006
  }
943
- function je(e, t) {
1007
+ function Be(e, t) {
944
1008
  var n, r;
945
1009
  return ((r = (n = e.options.customize) == null ? void 0 : n.hide) != null ? r : []).includes(t);
946
1010
  }
947
- const yr = () => Se() === "claude";
948
- function br(e) {
1011
+ const Er = () => Ae() === "claude";
1012
+ function zr(e) {
949
1013
  const t = e.dayState;
950
- let n = "idle", r, a = null;
951
- return t.status === "choose" ? r = "Choose a winery to load reservations" : t.status === "loading" ? r = "Loading reservations" : t.status === "unloaded" ? r = "This day isn't loaded yet" : t.status === "failed" ? (n = "problem", r = "This day couldn't load") : t.arrivals.length ? (n = "loaded", r = "Commerce7 reservations and Tock orders", a = "Commerce7 and Tock") : r = "No arrivals on this day", o(
1014
+ let n = "idle", r, s = null;
1015
+ return t.status === "choose" ? r = "Choose a winery to load reservations" : t.status === "loading" ? r = "Loading reservations" : t.status === "unloaded" ? r = "This day isn't loaded yet" : t.status === "failed" ? (n = "problem", r = "This day couldn't load") : t.arrivals.length ? (n = "loaded", r = "Commerce7 reservations and Tock orders", s = "Commerce7 and Tock") : r = "No arrivals on this day", i(
952
1016
  "div",
953
1017
  { class: `status status-${n}`, role: "status", "aria-live": "polite" },
954
- o("span", { class: "dot", "aria-hidden": "true" }),
955
- a ? [o("span", { class: "status-long" }, r), o("span", { class: "status-short", "aria-hidden": "true" }, a)] : o("span", null, r)
1018
+ i("span", { class: "dot", "aria-hidden": "true" }),
1019
+ s ? [i("span", { class: "status-long" }, r), i("span", { class: "status-short", "aria-hidden": "true" }, s)] : i("span", null, r)
956
1020
  );
957
1021
  }
958
- function vr(e, t) {
1022
+ function Pr(e, t) {
959
1023
  if (!e.wineries || e.wineries.length < 2) return null;
960
- const n = o(
1024
+ const n = i(
961
1025
  "select",
962
1026
  { id: "winery-picker", "data-fid": "winery-picker", onchange: (r) => t.chooseWinery(r.target.value) },
963
- o("option", { value: "", disabled: !0, selected: !e.tenantId }, "Choose a winery"),
964
- e.wineries.map((r) => o("option", { value: r.tenantId, selected: r.tenantId === e.tenantId }, r.name))
1027
+ i("option", { value: "", disabled: !0, selected: !e.tenantId }, "Choose a winery"),
1028
+ e.wineries.map((r) => i("option", { value: r.tenantId, selected: r.tenantId === e.tenantId }, r.name))
965
1029
  );
966
- return o("label", { class: "picker", for: "winery-picker" }, "Winery", n);
1030
+ return i("label", { class: "picker", for: "winery-picker" }, "Winery", n);
967
1031
  }
968
- function xr(e, t) {
969
- return o(
1032
+ function Lr(e, t) {
1033
+ return i(
970
1034
  "header",
971
1035
  { class: "header" },
972
- o(
1036
+ i(
973
1037
  "a",
974
- { class: "logo", href: fr, target: "_blank", rel: "noopener", "aria-label": "New Vintage" },
975
- o("span", { class: "logo-mark", "aria-hidden": "true" }, "New Vintage")
1038
+ { class: "logo", href: Mr, target: "_blank", rel: "noopener", "aria-label": "New Vintage" },
1039
+ i("span", { class: "logo-mark", "aria-hidden": "true" }, "New Vintage")
976
1040
  ),
977
- o("div", { class: "heading" }, o("h1", null, e.title), br(e), vr(e, t))
1041
+ i("div", { class: "heading" }, i("h1", null, e.title), zr(e), Pr(e, t))
978
1042
  );
979
1043
  }
980
- function wr(e, t) {
981
- const n = e.day === e.today ? "Today" : e.day === U(e.today, 1) ? "Tomorrow" : null, r = o(
1044
+ function Ir(e, t) {
1045
+ const n = e.day === e.today ? "Today" : e.day === W(e.today, 1) ? "Tomorrow" : null, r = i(
982
1046
  "button",
983
1047
  {
984
1048
  type: "button",
@@ -989,281 +1053,365 @@ function wr(e, t) {
989
1053
  onclick: () => t.toggleCalendar()
990
1054
  },
991
1055
  K("calendar", 18),
992
- o("span", { class: "day-label" }, De(e.day, e.today)),
993
- n ? o("span", { class: "day-relative" }, n) : null,
1056
+ i("span", { class: "day-label" }, je(e.day, e.today)),
1057
+ n ? i("span", { class: "day-relative" }, n) : null,
994
1058
  K("chevron-down", 16)
995
- ), a = e.calendar.open ? gr({ state: e.calendar, selected: e.day, today: e.today, onPick: t.pickDay, onFocus: t.focusDay, onMonth: t.showMonth, onClose: t.closeCalendar }) : null;
996
- return o(
1059
+ ), s = e.calendar.open ? Ar({ state: e.calendar, selected: e.day, today: e.today, onPick: t.pickDay, onFocus: t.focusDay, onMonth: t.showMonth, onClose: t.closeCalendar }) : null;
1060
+ return i(
997
1061
  "div",
998
1062
  { class: "daybar" },
999
- o("div", { class: "day-wrap" }, r, a),
1000
- e.dayNote ? o("span", { class: `day-note${e.dayNote.problem ? " problem" : ""}`, "aria-live": "polite" }, e.dayNote.text) : null
1063
+ i("div", { class: "day-wrap" }, r, s),
1064
+ e.dayNote ? i("span", { class: `day-note${e.dayNote.problem ? " problem" : ""}`, "aria-live": "polite" }, e.dayNote.text) : null
1001
1065
  );
1002
1066
  }
1003
- function kr(e) {
1004
- if (e.dayState.status !== "ready" || je(e, "summary")) return null;
1005
- const t = Fn(e.dayState.arrivals, e.day, e.today, e.nowMinutes), n = (r, a, s) => o("div", { class: "number" }, o("div", { class: "number-value" }, String(r)), o("div", { class: "number-label" }, r === 1 ? a : s));
1006
- return o(
1067
+ function Or(e) {
1068
+ if (e.dayState.status !== "ready" || Be(e, "summary")) return null;
1069
+ const t = ar(e.dayState.arrivals, e.day, e.today, e.nowMinutes), n = (r, s, a) => i("div", { class: "number" }, i("div", { class: "number-value" }, String(r)), i("div", { class: "number-label" }, r === 1 ? s : a));
1070
+ return i(
1007
1071
  "section",
1008
- { class: "card summary", "data-section": "summary", "aria-label": Ue(e, "summary") },
1009
- o("div", { class: "numbers" }, n(t.reservations, "Reservation", "Reservations"), n(t.guests, "Guest", "Guests")),
1010
- o(
1072
+ { class: "card summary", "data-section": "summary", "aria-label": Ze(e, "summary") },
1073
+ i("div", { class: "numbers" }, n(t.reservations, "Reservation", "Reservations"), n(t.guests, "Guest", "Guests")),
1074
+ i(
1011
1075
  "div",
1012
1076
  { class: "facts" },
1013
- t.message ? o("div", { class: "summary-message" }, t.message) : t.facts.map((r) => k(r.label, r.value, r.detail, r.label === "Next arrival" ? "fact-countdown" : ""))
1077
+ t.message ? i("div", { class: "summary-message" }, t.message) : t.facts.map((r) => S(r.label, r.value, r.detail, r.label === "Next arrival" ? "fact-countdown" : ""))
1014
1078
  ),
1015
- k("Now", oe(e.nowMinutes), ne(e.today, e.today), "now")
1079
+ S("Now", J(e.nowMinutes), ae(e.today, e.today), "now")
1016
1080
  );
1017
1081
  }
1018
- function Sr(e) {
1082
+ function Rr(e) {
1019
1083
  const t = [];
1020
- return e.vip && t.push("VIP"), e.clubMember && t.push("Club member"), e.prospect && t.push("Club prospect"), e.atRisk && t.push("Membership at risk"), e.visit === "first" && t.push("First visit"), t.map(Qt);
1084
+ return e.vip && t.push("VIP"), e.clubMember && t.push("Club member"), e.prospect && t.push("Club prospect"), e.atRisk && t.push("Membership at risk"), e.visit === "first" && t.push("First visit"), e.partlyRefunded && t.push("Partly refunded"), t.map(cn);
1021
1085
  }
1022
- function jt(e, t, n, r, a) {
1023
- var l;
1024
- const s = a ? null : Un(n, e.kind, e.nowMinutes), c = [n.experience, r ? qe[n.source] : null].filter(Boolean).join(", ");
1025
- return o(
1086
+ function qr(e, t, n, r, s) {
1087
+ var c;
1088
+ const a = s ? null : tr(n, e.kind, e.nowMinutes), l = [n.experience, r ? Fe[n.source] : null].filter(Boolean).join(", ");
1089
+ return i(
1026
1090
  "li",
1027
1091
  null,
1028
- o(
1092
+ i(
1029
1093
  "button",
1030
1094
  {
1031
1095
  type: "button",
1032
- class: `row${a ? " row-earlier" : ""}`,
1096
+ class: `row${s ? " row-earlier" : ""}`,
1033
1097
  "data-key": n.key,
1034
1098
  "data-fid": `row-${n.key}`,
1035
- "aria-current": ((l = e.selected) == null ? void 0 : l.key) === n.key ? "true" : "false",
1099
+ "aria-current": ((c = e.selected) == null ? void 0 : c.key) === n.key ? "true" : "false",
1036
1100
  onclick: () => t.select(n.key)
1037
1101
  },
1038
- o(
1102
+ i(
1039
1103
  "span",
1040
1104
  { class: "row-when" },
1041
- o("span", { class: "row-time" }, oe(n.minutes)),
1042
- o("span", { class: "row-date", style: "display:block" }, ne(e.day, e.today)),
1043
- s ? o("span", { class: "row-soon soon", style: "display:block" }, s) : null
1105
+ i("span", { class: "row-time" }, J(n.minutes)),
1106
+ i("span", { class: "row-date", style: "display:block" }, ae(e.day, e.today)),
1107
+ a ? i("span", { class: "row-soon soon", style: "display:block" }, a) : null
1044
1108
  ),
1045
- o(
1109
+ i(
1046
1110
  "span",
1047
1111
  { style: "min-width:0" },
1048
- o("span", { class: "row-name" }, o("span", null, fe(n)), Sr(n)),
1049
- c ? o("span", { class: "row-experience", style: "display:block" }, c) : null
1112
+ i("span", { class: "row-name" }, i("span", null, xe(n)), Rr(n)),
1113
+ l ? i("span", { class: "row-experience", style: "display:block" }, l) : null
1050
1114
  ),
1051
- o("span", { class: "row-party" }, z(n.party, "guest"))
1115
+ i("span", { class: "row-party" }, A(n.party, "guest"))
1052
1116
  )
1053
1117
  );
1054
1118
  }
1055
- function Tr() {
1056
- return o(
1119
+ function Dr() {
1120
+ return i(
1057
1121
  "div",
1058
1122
  { "aria-hidden": "true" },
1059
- [0, 1, 2, 3].map(() => o("div", { class: "skeleton-row" }, o("span", { class: "skel", style: "flex:0 0 72px" }), o("span", { class: "skel", style: "flex:2" }), o("span", { class: "skel", style: "flex:0 0 56px" })))
1123
+ [0, 1, 2, 3].map(() => i("div", { class: "skeleton-row" }, i("span", { class: "skel", style: "flex:0 0 72px" }), i("span", { class: "skel", style: "flex:2" }), i("span", { class: "skel", style: "flex:0 0 56px" })))
1060
1124
  );
1061
1125
  }
1062
- function Nr(e) {
1063
- const t = e.request, n = De(e.day, e.today);
1064
- return (t == null ? void 0 : t.kind) === "sent" ? $(`Request sent. You may need to finish sending it in the chat. The briefing updates after the assistant loads ${n}.`) : (t == null ? void 0 : t.kind) === "copied" ? $(`Request copied. Paste it into this chat to load ${n}.`) : (t == null ? void 0 : t.kind) === "manual" ? o(
1126
+ function Vr(e) {
1127
+ const t = e.request, n = je(e.day, e.today);
1128
+ return (t == null ? void 0 : t.kind) === "sent" ? P(`Request sent. You may need to finish sending it in the chat. The briefing updates after the assistant loads ${n}.`) : (t == null ? void 0 : t.kind) === "copied" ? P(`Request copied. Paste it into this chat to load ${n}.`) : (t == null ? void 0 : t.kind) === "manual" ? i(
1065
1129
  "div",
1066
1130
  null,
1067
- $(`Copy this request into the chat to load ${n}.`),
1068
- o("textarea", { class: "request-text", readonly: !0, rows: 6, "aria-label": "Request to copy", onfocus: (r) => r.target.select() }, t.text)
1069
- ) : (t == null ? void 0 : t.kind) === "failed" ? $(`The request wasn't sent. ${t.message}`, "note problem") : null;
1131
+ P(`Copy this request into the chat to load ${n}.`),
1132
+ i("textarea", { class: "request-text", readonly: !0, rows: 6, "aria-label": "Request to copy", onfocus: (r) => r.target.select() }, t.text)
1133
+ ) : (t == null ? void 0 : t.kind) === "failed" ? P(`The request wasn't sent. ${t.message}`, "note problem") : null;
1070
1134
  }
1071
- function $r(e, t) {
1072
- var a;
1073
- const n = ((a = e.request) == null ? void 0 : a.kind) === "pending", r = yr() ? "This page holds the days loaded in this chat. Load this day asks the chat for it, or open the page where the New Vintage connector can run to load any day." : "This page holds the days loaded in this chat. Load this day asks the chat for it.";
1074
- return o(
1135
+ function Ur(e, t) {
1136
+ var s;
1137
+ const n = ((s = e.request) == null ? void 0 : s.kind) === "pending", r = Er() ? "This page holds the days loaded in this chat. Load this day asks the chat for it, or open the page where the New Vintage connector can run to load any day." : "This page holds the days loaded in this chat. Load this day asks the chat for it.";
1138
+ return i(
1075
1139
  "div",
1076
1140
  { class: "empty" },
1077
- o("p", { class: "empty-title" }, "This day isn't loaded yet"),
1078
- $(r),
1079
- o(
1141
+ i("p", { class: "empty-title" }, "This day isn't loaded yet"),
1142
+ P(r),
1143
+ i(
1080
1144
  "div",
1081
1145
  { class: "actions" },
1082
- o(
1146
+ i(
1083
1147
  "button",
1084
1148
  { type: "button", class: "button", "data-fid": "load-day", disabled: n, "aria-busy": n ? "true" : "false", onclick: () => t.requestDay() },
1085
1149
  n ? "Sending…" : "Load this day"
1086
1150
  )
1087
1151
  ),
1088
- Nr(e)
1152
+ Vr(e)
1089
1153
  );
1090
1154
  }
1091
- function Ar(e, t) {
1092
- if (je(e, "guestList")) return null;
1093
- const n = e.dayState, r = Ue(e, "guestList");
1094
- let a = null, s;
1095
- if (n.status === "loading") s = Tr();
1096
- else if (n.status === "choose") s = o("div", { class: "empty" }, o("p", { class: "empty-title" }, "Choose a winery"), n.message ? $(n.message) : null);
1097
- else if (n.status === "unloaded") s = $r(e, t);
1155
+ function jr(e, t) {
1156
+ if (Be(e, "guestList")) return null;
1157
+ const n = e.dayState, r = Ze(e, "guestList");
1158
+ let s = null, a;
1159
+ if (n.status === "loading") a = Dr();
1160
+ else if (n.status === "choose") a = i("div", { class: "empty" }, i("p", { class: "empty-title" }, "Choose a winery"), n.message ? P(n.message) : null);
1161
+ else if (n.status === "unloaded") a = Ur(e, t);
1098
1162
  else if (n.status === "failed")
1099
- s = o(
1163
+ a = i(
1100
1164
  "div",
1101
1165
  { class: "empty" },
1102
- o("p", { class: "empty-title" }, "This day couldn't load"),
1103
- $(n.message, "note problem"),
1104
- o("div", { class: "actions" }, o("button", { type: "button", class: "button", "data-fid": "retry", onclick: () => t.retry() }, "Try again"))
1166
+ i("p", { class: "empty-title" }, "This day couldn't load"),
1167
+ P(n.message, "note problem"),
1168
+ i("div", { class: "actions" }, i("button", { type: "button", class: "button", "data-fid": "retry", onclick: () => t.retry() }, "Try again"))
1105
1169
  );
1106
- else if (!n.arrivals.length) s = o("div", { class: "empty" }, o("p", { class: "empty-title" }, "No one is coming in on this day."));
1170
+ else if (!n.arrivals.length) a = i("div", { class: "empty" }, i("p", { class: "empty-title" }, "No one is coming in on this day."));
1107
1171
  else {
1108
- const c = Zn(n.arrivals);
1109
- c && (a = `All from ${qe[c]}`);
1110
- const { upcoming: l, earlier: d } = Ve(n.arrivals, e.kind, e.nowMinutes);
1111
- s = o(
1112
- "ul",
1113
- { class: "rows" },
1114
- l.map((h) => jt(e, t, h, !c, !1)),
1115
- d.length ? o("li", { class: "earlier-head" }, "Earlier today", o("span", { class: "count", "aria-label": z(d.length, "reservation") }, String(d.length))) : null,
1116
- d.map((h) => jt(e, t, h, !c, !0))
1117
- );
1172
+ const l = sr(n.arrivals);
1173
+ l && (s = `All from ${Fe[l]}`), a = i("div", null, Gr(e, t), dn(e, t, n.arrivals, !l));
1118
1174
  }
1119
- return o(
1175
+ return i(
1120
1176
  "section",
1121
1177
  { class: "card list-card", "data-section": "guestList", "aria-busy": n.status === "loading" ? "true" : "false" },
1122
- o("div", { class: "card-head" }, o("h2", null, r), a ? o("span", { class: "card-aside" }, a) : null),
1123
- s
1178
+ i("div", { class: "card-head" }, i("h2", null, r), s ? i("span", { class: "card-aside" }, s) : null),
1179
+ a
1180
+ );
1181
+ }
1182
+ function Gr(e, t) {
1183
+ return i(
1184
+ "div",
1185
+ { class: "finder" },
1186
+ i(
1187
+ "label",
1188
+ { class: "search" },
1189
+ K("search", 16),
1190
+ i("span", { class: "sr-only" }, "Search guests by name"),
1191
+ i("input", {
1192
+ type: "search",
1193
+ class: "search-input",
1194
+ placeholder: "Search guests",
1195
+ autocomplete: "off",
1196
+ spellcheck: "false",
1197
+ value: e.query,
1198
+ "data-fid": "search",
1199
+ oninput: (n) => t.search(n.target.value)
1200
+ })
1201
+ ),
1202
+ i(
1203
+ "div",
1204
+ { class: "filters", role: "group", "aria-label": "Show only" },
1205
+ an.map(
1206
+ (n) => i(
1207
+ "button",
1208
+ {
1209
+ type: "button",
1210
+ class: "filter-chip",
1211
+ "aria-pressed": e.filters.includes(n.id) ? "true" : "false",
1212
+ "data-filter": n.id,
1213
+ "data-fid": `filter-${n.id}`,
1214
+ onclick: () => t.toggleFilter(n.id)
1215
+ },
1216
+ n.label
1217
+ )
1218
+ )
1219
+ )
1220
+ );
1221
+ }
1222
+ function Kt(e) {
1223
+ return e.first === e.last ? J(e.first) : `${J(e.first)} to ${J(e.last)}`;
1224
+ }
1225
+ function Fr(e, t, n) {
1226
+ const r = t.reduce((a, l) => a + l.party, 0);
1227
+ return [n ? `${t.length} of ${A(e.arrivals.length, "party", "parties")}` : A(t.length, "party", "parties"), A(r, "guest"), er(t)].filter(Boolean).join(", ");
1228
+ }
1229
+ function dn(e, t, n, r) {
1230
+ const s = !!e.query.trim() || e.filters.length > 0, a = Xn(n, e.seatingGap), l = e.kind === "today", c = (y) => l && y.last < e.nowMinutes, d = l ? a.find((y) => !c(y)) : void 0, m = n.filter((y) => Oe(y, e.query, e.filters)).length, M = (y) => {
1231
+ const _ = y.arrivals.filter((O) => Oe(O, e.query, e.filters));
1232
+ if (!_.length) return null;
1233
+ const C = c(y), L = !C || e.openEarlier.includes(y.key), T = y === d ? y.first <= e.nowMinutes ? "Now" : "Next" : null, q = i("span", { class: "seat-time" }, Kt(y)), F = i("span", { class: "seat-counts" }, Fr(y, _, s)), I = C ? i(
1234
+ "button",
1235
+ {
1236
+ type: "button",
1237
+ class: "seat-head seat-toggle",
1238
+ "aria-expanded": L ? "true" : "false",
1239
+ "data-fid": `seating-${y.key}`,
1240
+ onclick: () => t.toggleSeating(y.key)
1241
+ },
1242
+ i("span", { class: "seat-chevron" }, K(L ? "chevron-down" : "chevron-right", 16)),
1243
+ i("span", { class: "seat-label" }, q, F)
1244
+ ) : i("div", { class: "seat-head" }, i("span", { class: "seat-label" }, i("h3", { class: "seat-time" }, Kt(y)), F), T ? i("span", { class: `seat-marker seat-${T.toLowerCase()}` }, T) : null);
1245
+ return i(
1246
+ "li",
1247
+ { class: `seating${C ? " seating-earlier" : ""}`, "data-seating": y.key, "data-state": C ? "earlier" : T ? T.toLowerCase() : "later" },
1248
+ I,
1249
+ L ? i(
1250
+ "ul",
1251
+ { class: "rows" },
1252
+ _.map((O) => qr(e, t, O, r, l && O.minutes < e.nowMinutes))
1253
+ ) : null
1254
+ );
1255
+ }, k = a.filter((y) => !c(y)).map(M).filter((y) => y !== null), h = a.filter(c).map(M).filter((y) => y !== null), x = a.filter(c).reduce((y, _) => y + _.arrivals.filter((C) => Oe(C, e.query, e.filters)).length, 0);
1256
+ return i(
1257
+ "div",
1258
+ { class: "list-results", "aria-live": "polite" },
1259
+ s ? i(
1260
+ "div",
1261
+ { class: "filter-status" },
1262
+ i("span", null, m ? `${m} of ${A(n.length, "party", "parties")}` : "No guests match."),
1263
+ i("button", { type: "button", class: "link-button", "data-fid": "clear-filters", onclick: () => t.clearFilters() }, "Clear filters")
1264
+ ) : null,
1265
+ k.length || h.length ? i(
1266
+ "ol",
1267
+ { class: "seatings" },
1268
+ k,
1269
+ h.length ? i("li", { class: "earlier-head" }, "Earlier today", i("span", { class: "count", "aria-label": A(x, "reservation") }, String(x))) : null,
1270
+ h
1271
+ ) : null
1124
1272
  );
1125
1273
  }
1126
- function _r(e) {
1127
- return e.map((t) => o("p", { class: "soft" }, t.text, t.when ? o("span", { class: "soft-when" }, t.when) : null));
1274
+ function Zr(e) {
1275
+ return e.map((t) => i("p", { class: "soft" }, t.text, t.when ? i("span", { class: "soft-when" }, t.when) : null));
1128
1276
  }
1129
- function Mr(e) {
1277
+ function Br(e) {
1130
1278
  const t = e.bought;
1131
- return t ? t.items.length ? o(
1279
+ return t ? t.items.length ? i(
1132
1280
  "ul",
1133
1281
  { class: "bought" },
1134
- t.items.map((n) => o("li", null, o("span", null, n.title), o("span", { class: "qty" }, `× ${n.qty}`))),
1135
- t.total !== null ? o("li", { class: "total" }, o("span", null, "Total"), o("span", null, q(t.total))) : null
1136
- ) : o("p", { class: "visit-muted" }, "Nothing beyond the tasting") : null;
1282
+ t.items.map((n) => i("li", null, i("span", null, n.title), i("span", { class: "qty" }, `× ${n.qty}`))),
1283
+ t.total !== null ? i("li", { class: "total" }, i("span", null, "Total"), i("span", null, Y(t.total))) : null
1284
+ ) : i("p", { class: "visit-muted" }, "Nothing beyond the tasting") : null;
1137
1285
  }
1138
- function Cr(e, t) {
1286
+ function Hr(e, t) {
1139
1287
  const n = t.lastTaste, r = [];
1140
1288
  if (n) {
1141
- const c = n.day ? `${Yt(n.day, e.today)}, ${An(n.day, e.today)}` : null;
1142
- r.push(o("div", { class: "visit-part visit-taste" }, o("p", { class: "visit-title" }, n.title), c ? o("p", { class: "visit-muted" }, c) : null));
1289
+ const l = n.day ? `${nn(n.day, e.today)}, ${Dn(n.day, e.today)}` : null;
1290
+ r.push(i("div", { class: "visit-part visit-taste" }, i("p", { class: "visit-title" }, n.title), l ? i("p", { class: "visit-muted" }, l) : null));
1143
1291
  }
1144
- const a = Mr(t);
1145
- if (a && r.push(o("div", { class: "visit-part visit-bought" }, a)), t.orderNotes.length && r.push(o("div", { class: "visit-part visit-notes" }, t.orderNotes.map((c) => o("p", { class: "visit-note" }, c)))), !r.length) return null;
1146
- const s = r.flatMap((c, l) => l ? [o("hr", { class: "visit-divider" }), c] : [c]);
1147
- return o("div", { class: "fact fact-visit" }, o("div", { class: "fact-label" }, "Last visit"), o("div", { class: "visit" }, s));
1292
+ const s = Br(t);
1293
+ if (s && r.push(i("div", { class: "visit-part visit-bought" }, s)), t.orderNotes.length && r.push(i("div", { class: "visit-part visit-notes" }, t.orderNotes.map((l) => i("p", { class: "visit-note" }, l)))), !r.length) return null;
1294
+ const a = r.flatMap((l, c) => c ? [i("hr", { class: "visit-divider" }), l] : [l]);
1295
+ return i("div", { class: "fact fact-visit" }, i("div", { class: "fact-label" }, "Last visit"), i("div", { class: "visit" }, a));
1148
1296
  }
1149
- function Er(e) {
1297
+ function Yr(e) {
1150
1298
  const { floor: t, ceiling: n } = e;
1151
- return t !== null && n !== null ? t === n ? q(t) : `${q(t)} to ${q(n)}` : t !== null ? `From ${q(t)}` : n !== null ? `Up to ${q(n)}` : e.avg !== null ? q(e.avg) : null;
1299
+ return t !== null && n !== null ? t === n ? Y(t) : `${Y(t)} to ${Y(n)}` : t !== null ? `From ${Y(t)}` : n !== null ? `Up to ${Y(n)}` : e.avg !== null ? Y(e.avg) : null;
1152
1300
  }
1153
- function Pr(e, t, n) {
1154
- var s, c;
1155
- const r = [], a = (l) => {
1156
- l && r.push(l);
1301
+ function Wr(e, t, n) {
1302
+ var a, l;
1303
+ const r = [], s = (c) => {
1304
+ c && r.push(c);
1157
1305
  };
1158
1306
  switch (n) {
1159
1307
  case "reservation": {
1160
- const l = e.kind === "today" && t.minutes >= e.nowMinutes;
1308
+ const c = e.kind === "today" && t.minutes >= e.nowMinutes;
1161
1309
  r.push(
1162
- o(
1310
+ i(
1163
1311
  "div",
1164
1312
  { class: "fact-row" },
1165
- k("Arrives", me(e.day, t.minutes, e.today), l ? Re(t.minutes - e.nowMinutes) : null, l ? "fact-countdown" : ""),
1166
- k("Party", z(t.party, "guest")),
1167
- k("Booked via", qe[t.source])
1313
+ S("Arrives", we(e.day, t.minutes, e.today), c ? Ge(t.minutes - e.nowMinutes) : null, c ? "fact-countdown" : ""),
1314
+ S("Party", A(t.party, "guest")),
1315
+ S("Booked via", Fe[t.source])
1168
1316
  )
1169
- ), a(t.experience ? k("Experience", t.experience) : null);
1317
+ ), s(t.experience ? S("Experience", t.experience) : null);
1170
1318
  break;
1171
1319
  }
1172
1320
  case "talkAbout": {
1173
- a(t.occasions.length ? k("Occasion", t.occasions.map((l, d) => o("div", { "data-line": d }, l))) : null), a(t.interests.length ? k("Interested in", we(t.interests)) : null), a(Cr(e, t));
1321
+ s(t.occasions.length ? S("Occasion", t.occasions.map((c, d) => i("div", { "data-line": d }, c))) : null), s(t.interests.length ? S("Interested in", Te(t.interests)) : null), s(Hr(e, t));
1174
1322
  break;
1175
1323
  }
1176
1324
  case "newVintageProfile": {
1177
- const l = t.price ? Er(t.price) : null, d = [
1178
- l ? k("Usual bottle price", l, ((s = t.price) == null ? void 0 : s.avg) !== null && ((c = t.price) == null ? void 0 : c.avg) !== void 0 ? `Average ${q(t.price.avg)}` : null) : null,
1179
- t.wineTypes.length ? k("Wine types", t.wineTypes.join(", ")) : null,
1180
- t.varietals.length ? k("Favorite varietals", t.varietals.join(", ")) : null,
1181
- t.vintages.length ? k("Vintages", t.vintages.join(", ")) : null,
1182
- t.appellations.length ? k("Appellations", t.appellations.join(", ")) : null
1183
- ].filter((h) => h !== null);
1184
- d.length && r.push(o("div", { class: "fact-grid" }, d));
1325
+ const c = t.price ? Yr(t.price) : null, d = [
1326
+ c ? S("Usual bottle price", c, ((a = t.price) == null ? void 0 : a.avg) !== null && ((l = t.price) == null ? void 0 : l.avg) !== void 0 ? `Average ${Y(t.price.avg)}` : null) : null,
1327
+ t.wineTypes.length ? S("Wine types", t.wineTypes.join(", ")) : null,
1328
+ t.varietals.length ? S("Favorite varietals", t.varietals.join(", ")) : null,
1329
+ t.vintages.length ? S("Vintages", t.vintages.join(", ")) : null,
1330
+ t.appellations.length ? S("Appellations", t.appellations.join(", ")) : null
1331
+ ].filter((m) => m !== null);
1332
+ d.length && r.push(i("div", { class: "fact-grid" }, d));
1185
1333
  break;
1186
1334
  }
1187
1335
  case "relationship":
1188
- a(t.since ? k("Customer since", t.since) : null), a(t.lifetime ? k("Lifetime spend", q(t.lifetime.spend), t.lifetime.orders !== null ? z(t.lifetime.orders, "order") : null) : null), a(t.clubTitles ? k("Club", t.clubTitles) : null), a(t.clubPickup ? k("Club pickup", "Shipment ready to hand over") : null), a(t.prospect && t.signupTier ? k("Likely to join the club", At(t.signupTier)) : null), a(t.atRisk && t.churnTier ? k("Membership at risk", At(t.churnTier)) : null), a(t.clubTags.length ? k("Club tags", we(t.clubTags)) : null);
1336
+ s(t.since ? S("Customer since", t.since) : null), s(t.lifetime ? S("Lifetime spend", Y(t.lifetime.spend), t.lifetime.orders !== null ? A(t.lifetime.orders, "order") : null) : null), s(t.clubTitles ? S("Club", t.clubTitles) : null), s(t.clubPickup ? S("Club pickup", "Shipment ready to hand over") : null), s(t.prospect && t.signupTier ? S("Likely to join the club", Lt(t.signupTier)) : null), s(t.atRisk && t.churnTier ? S("Membership at risk", Lt(t.churnTier)) : null), s(t.clubTags.length ? S("Club tags", Te(t.clubTags)) : null);
1189
1337
  break;
1190
1338
  case "headsUp":
1191
- a(t.accountTags.length ? k("Account tags", we(t.accountTags, "warning")) : null);
1339
+ s(t.accountTags.length ? S("Account tags", Te(t.accountTags, "warning")) : null);
1192
1340
  break;
1193
1341
  case "personalNotes":
1194
- r.push(..._r(t.personalNotes.map((l) => ({ text: l.content, when: l.when }))));
1342
+ r.push(...Zr(t.personalNotes.map((c) => ({ text: c.content, when: c.when }))));
1195
1343
  break;
1196
1344
  }
1197
1345
  return r;
1198
1346
  }
1199
- function zr(e) {
1347
+ function Kr(e) {
1200
1348
  const t = [];
1201
- return e.vip && t.push("VIP"), t.push(e.visit === "first" ? "First visit" : e.visit === "return" ? "Returning guest" : "Visit history unknown"), e.clubMember && t.push("Club member"), e.prospect && t.push("Club prospect"), e.atRisk && t.push("Membership at risk"), o("div", { class: "chips" }, t.map(Qt));
1349
+ return e.vip && t.push("VIP"), t.push(e.visit === "first" ? "First visit" : e.visit === "return" ? "Returning guest" : "Visit history unknown"), e.clubMember && t.push("Club member"), e.prospect && t.push("Club prospect"), e.atRisk && t.push("Membership at risk"), e.partlyRefunded && t.push("Partly refunded"), i("div", { class: "chips" }, t.map(cn));
1202
1350
  }
1203
- const Lr = ["reservation", "talkAbout", "newVintageProfile", "relationship", "headsUp", "personalNotes"];
1204
- function Ir(e, t, n) {
1205
- var d, h, T;
1351
+ const Jr = ["reservation", "talkAbout", "newVintageProfile", "relationship", "headsUp", "personalNotes"];
1352
+ function Qr(e, t, n) {
1353
+ var d, m, M;
1206
1354
  const r = e.selected;
1207
1355
  if (!r || e.dayState.status !== "ready") return null;
1208
- const a = [];
1209
- for (const m of Lr) {
1210
- if (!je(e, m)) {
1211
- const b = Pr(e, r, m);
1212
- b.length && a.push(
1213
- o(
1356
+ const s = [];
1357
+ for (const k of Jr) {
1358
+ if (!Be(e, k)) {
1359
+ const h = Wr(e, r, k);
1360
+ h.length && s.push(
1361
+ i(
1214
1362
  "section",
1215
- { class: "psec", "data-section": m },
1216
- o("h3", { class: "psec-title" }, o("span", { class: `tile${m === "headsUp" ? " tile-warning" : ""}` }, K((d = hr[m]) != null ? d : "", 16)), Ue(e, m)),
1217
- Ut[m] ? o("p", { class: "psec-source" }, Ut[m]) : null,
1218
- o("div", { class: "psec-facts" }, b)
1363
+ { class: "psec", "data-section": k },
1364
+ i("h3", { class: "psec-title" }, i("span", { class: `tile${k === "headsUp" ? " tile-warning" : ""}` }, K((d = Cr[k]) != null ? d : "", 16)), Ze(e, k)),
1365
+ Wt[k] ? i("p", { class: "psec-source" }, Wt[k]) : null,
1366
+ i("div", { class: "psec-facts" }, h)
1219
1367
  )
1220
1368
  );
1221
1369
  }
1222
- a.push(...n(m));
1370
+ s.push(...n(k));
1223
1371
  }
1224
- const s = ((h = e.research) == null ? void 0 : h.key) === r.key ? e.research : null, c = (s == null ? void 0 : s.status) === "pending", l = e.live ? o(
1372
+ const a = ((m = e.research) == null ? void 0 : m.key) === r.key ? e.research : null, l = (a == null ? void 0 : a.status) === "pending", c = e.live ? i(
1225
1373
  "div",
1226
1374
  { class: "research" },
1227
- o(
1375
+ i(
1228
1376
  "button",
1229
- { type: "button", class: "button button-quiet", "data-fid": "research", disabled: c, "aria-busy": c ? "true" : "false", onclick: () => t.research() },
1377
+ { type: "button", class: "button button-quiet", "data-fid": "research", disabled: l, "aria-busy": l ? "true" : "false", onclick: () => t.research() },
1230
1378
  K("refresh-cw", 16),
1231
- c ? "Researching…" : "Research this guest again"
1379
+ l ? "Researching…" : "Research this guest again"
1232
1380
  ),
1233
- (s == null ? void 0 : s.status) === "failed" ? $((T = s.message) != null ? T : "This guest couldn't refresh.", "note problem") : null
1234
- ) : o(
1381
+ (a == null ? void 0 : a.status) === "failed" ? P((M = a.message) != null ? M : "This guest couldn't refresh.", "note problem") : null
1382
+ ) : i(
1235
1383
  "div",
1236
1384
  { class: "research" },
1237
- o("button", { type: "button", class: "button button-quiet", disabled: !0, "aria-describedby": "research-reason" }, K("refresh-cw", 16), "Research this guest again"),
1238
- o("p", { class: "note", id: "research-reason" }, "Ask in this chat to refresh this guest.")
1385
+ i("button", { type: "button", class: "button button-quiet", disabled: !0, "aria-describedby": "research-reason" }, K("refresh-cw", 16), "Research this guest again"),
1386
+ i("p", { class: "note", id: "research-reason" }, "Ask in this chat to refresh this guest.")
1239
1387
  );
1240
- return o(
1388
+ return i(
1241
1389
  "aside",
1242
- { class: "card panel", "aria-label": `Guest: ${fe(r)}`, "data-key": r.key },
1243
- o(
1390
+ { class: "card panel", "aria-label": `Guest: ${xe(r)}`, "data-key": r.key },
1391
+ i(
1244
1392
  "div",
1245
1393
  { class: "panel-head" },
1246
- o("div", { class: "handle", "aria-hidden": "true" }),
1247
- o(
1394
+ i("div", { class: "handle", "aria-hidden": "true" }),
1395
+ i(
1248
1396
  "div",
1249
1397
  { class: "panel-head-row" },
1250
- o("h2", { class: "panel-name" }, fe(r)),
1251
- o("button", { type: "button", class: "icon-button close", "aria-label": "Close", "data-fid": "close-sheet", onclick: () => t.closeSheet() }, K("x", 20))
1398
+ i("h2", { class: "panel-name" }, xe(r)),
1399
+ i("button", { type: "button", class: "icon-button close", "aria-label": "Close", "data-fid": "close-sheet", onclick: () => t.closeSheet() }, K("x", 20))
1252
1400
  ),
1253
- zr(r)
1401
+ Kr(r)
1254
1402
  ),
1255
- o("div", { class: "panel-body" }, a, l)
1403
+ i("div", { class: "panel-body" }, s, c)
1256
1404
  );
1257
1405
  }
1258
- const Gt = 900 * 1e3;
1259
- function ze(e) {
1406
+ const Jt = 900 * 1e3;
1407
+ function qe(e) {
1260
1408
  switch (e.kind) {
1261
1409
  case "unavailable":
1262
- return Se() === "claude" ? "Loading a day needs the New Vintage connector with access to this winery. Add the connector in this chat, then try again." : "This page shows the days loaded in the chat. Ask in the chat to load another.";
1410
+ return Ae() === "claude" ? "Loading a day needs the New Vintage connector with access to this winery. Add the connector in this chat, then try again." : "This page shows the days loaded in the chat. Ask in the chat to load another.";
1263
1411
  case "approval":
1264
1412
  return "Loading a day needs your permission to use the New Vintage connector. Allow it for this page, then try again.";
1265
1413
  case "reconnect":
1266
- return mn();
1414
+ return An();
1267
1415
  case "temporary":
1268
1416
  return "New Vintage didn't answer. Try again in a moment.";
1269
1417
  case "needs_update":
@@ -1274,305 +1422,332 @@ function ze(e) {
1274
1422
  return e.message;
1275
1423
  }
1276
1424
  }
1277
- function Or(e, t) {
1278
- var tt, nt, rt, at, st, ot, it, lt, ct, ut, dt, pt, gt, ft, mt, ht, yt, bt, vt;
1279
- const n = (tt = t.now) != null ? tt : (() => /* @__PURE__ */ new Date()), r = {
1280
- ...be,
1281
- ...(nt = t.settings) != null ? nt : {},
1282
- tagRules: { ...be.tagRules, ...(at = (rt = t.settings) == null ? void 0 : rt.tagRules) != null ? at : {} }
1283
- }, a = Tn(t.settings ? t.settings.timeZone : be.timeZone), s = In(r.tagRules), c = Number(r.largeParty) > 0 ? Number(r.largeParty) : be.largeParty, l = Wn(t.customize, t.cards), d = Xn(t.storage), h = () => Tt(n(), a);
1284
- let T = h().day, m = T, b = (st = t.tenantId) != null ? st : null, j = (ot = t.wineryName) != null ? ot : null, C = null, G = null, L = !0, A = null, F = null, B = !1, P = 0;
1285
- const H = /* @__PURE__ */ new Map(), Z = /* @__PURE__ */ new Set(), I = /* @__PURE__ */ new Map();
1286
- let O = null, N = null, D = !1;
1287
- const J = /* @__PURE__ */ new Map();
1288
- let p = null, v = { open: !1, month: m.slice(0, 7), focus: m }, _ = null, Ne = null, he = null, ie = !1;
1289
- const Ge = /* @__PURE__ */ new Map();
1425
+ function Xr(e, t) {
1426
+ var st, it, ot, lt, ct, ut, dt, pt, gt, ft, mt, ht, yt, bt, vt, xt, wt, kt, St, $t;
1427
+ const n = (st = t.now) != null ? st : (() => /* @__PURE__ */ new Date()), r = {
1428
+ ...he,
1429
+ ...(it = t.settings) != null ? it : {},
1430
+ tagRules: { ...he.tagRules, ...(lt = (ot = t.settings) == null ? void 0 : ot.tagRules) != null ? lt : {} }
1431
+ }, s = On(t.settings ? t.settings.timeZone : he.timeZone), a = Hn(r.tagRules), l = Number(r.largeParty) > 0 ? Number(r.largeParty) : he.largeParty, c = Number(r.seatingGapMinutes) > 0 ? Number(r.seatingGapMinutes) : (ct = he.seatingGapMinutes) != null ? ct : 45, d = cr(t.customize, t.cards), m = gr(t.storage), M = () => Et(n(), s);
1432
+ let k = M().day, h = k, x = (ut = t.tenantId) != null ? ut : null, y = (dt = t.wineryName) != null ? dt : null, _ = null, C = null, L = !0, T = null, q = null, F = !1, I = 0;
1433
+ const O = /* @__PURE__ */ new Map(), Z = /* @__PURE__ */ new Set(), j = /* @__PURE__ */ new Map();
1434
+ let Q = null, z = null, B = !1;
1435
+ const g = /* @__PURE__ */ new Map();
1436
+ let E = null, N = { open: !1, month: h.slice(0, 7), focus: h }, D = null, _e = "", se = [], te = [], Ce = null, ke = null, ue = !1;
1437
+ const He = /* @__PURE__ */ new Map();
1290
1438
  e.innerHTML = "";
1291
- const en = [(ct = (lt = (it = t.customize) == null ? void 0 : it.fonts) == null ? void 0 : lt.display) != null ? ct : "Newsreader", (pt = (dt = (ut = t.customize) == null ? void 0 : ut.fonts) == null ? void 0 : dt.body) != null ? pt : "Be Vietnam Pro"], Fe = o("link", { rel: "stylesheet", href: sr(en.filter((i) => /^[A-Za-z0-9 ]{1,40}$/.test(i))) }), $e = {};
1292
- (ft = (gt = t.customize) == null ? void 0 : gt.fonts) != null && ft.display && ($e["font-display"] = `'${t.customize.fonts.display}', Georgia, serif`), (ht = (mt = t.customize) == null ? void 0 : mt.fonts) != null && ht.body && ($e["font-body"] = `'${t.customize.fonts.body}', system-ui, sans-serif`);
1293
- const Ze = o("style", null, or({ ...$e, ...(bt = (yt = t.customize) == null ? void 0 : yt.theme) != null ? bt : {} }, (vt = t.customize) == null ? void 0 : vt.themeDark) + ir);
1294
- document.head.append(Fe, Ze);
1295
- const R = o("div", { class: "nvgp" });
1296
- e.append(R);
1297
- const Be = () => We();
1298
- window.addEventListener("resize", Be);
1299
- const He = (i) => {
1300
- i.key === "Escape" && (v.open ? Q.closeCalendar() : D && Q.closeSheet());
1301
- }, Ye = (i) => {
1302
- var g;
1303
- if (!v.open) return;
1304
- const u = i.target;
1305
- (g = u == null ? void 0 : u.closest) != null && g.call(u, ".day-wrap") || (v = { ...v, open: !1 }, x());
1439
+ const pn = [(ft = (gt = (pt = t.customize) == null ? void 0 : pt.fonts) == null ? void 0 : gt.display) != null ? ft : "Newsreader", (yt = (ht = (mt = t.customize) == null ? void 0 : mt.fonts) == null ? void 0 : ht.body) != null ? yt : "Be Vietnam Pro"], Ye = i("link", { rel: "stylesheet", href: vr(pn.filter((o) => /^[A-Za-z0-9 ]{1,40}$/.test(o))) }), Ee = {};
1440
+ (vt = (bt = t.customize) == null ? void 0 : bt.fonts) != null && vt.display && (Ee["font-display"] = `'${t.customize.fonts.display}', Georgia, serif`), (wt = (xt = t.customize) == null ? void 0 : xt.fonts) != null && wt.body && (Ee["font-body"] = `'${t.customize.fonts.body}', system-ui, sans-serif`);
1441
+ const We = i("style", null, xr({ ...Ee, ...(St = (kt = t.customize) == null ? void 0 : kt.theme) != null ? St : {} }, ($t = t.customize) == null ? void 0 : $t.themeDark) + wr);
1442
+ document.head.append(Ye, We);
1443
+ const V = i("div", { class: "nvgp" });
1444
+ e.append(V);
1445
+ const Ke = () => Xe();
1446
+ window.addEventListener("resize", Ke);
1447
+ const Je = (o) => {
1448
+ o.key === "Escape" && (N.open ? ee.closeCalendar() : B && ee.closeSheet());
1449
+ }, Qe = (o) => {
1450
+ var p;
1451
+ if (!N.open) return;
1452
+ const u = o.target;
1453
+ (p = u == null ? void 0 : u.closest) != null && p.call(u, ".day-wrap") || (N = { ...N, open: !1 }, w());
1306
1454
  };
1307
- document.addEventListener("keydown", He), document.addEventListener("mousedown", Ye);
1308
- function We() {
1309
- const i = R.querySelector(".daybar");
1310
- i && R.style.setProperty("--daybar-h", `${i.offsetHeight}px`);
1311
- const u = R.querySelector(".summary");
1312
- R.style.setProperty("--summary-h", `${u ? u.offsetHeight + 16 : 0}px`);
1455
+ document.addEventListener("keydown", Je), document.addEventListener("mousedown", Qe);
1456
+ function Xe() {
1457
+ var f;
1458
+ const o = V.querySelector(".daybar");
1459
+ o && V.style.setProperty("--daybar-h", `${o.offsetHeight}px`);
1460
+ const u = V.querySelector(".summary");
1461
+ V.style.setProperty("--summary-h", `${u ? u.offsetHeight + 16 : 0}px`);
1462
+ const p = u && window.getComputedStyle(u).position === "sticky" ? u.offsetHeight : 0;
1463
+ V.style.setProperty("--seat-top", `${((f = o == null ? void 0 : o.offsetHeight) != null ? f : 0) + p}px`);
1313
1464
  }
1314
- const Y = () => !!(G && A && b);
1315
- function tn(i) {
1316
- var g, f;
1317
- const u = (g = t.days) == null ? void 0 : g[i];
1465
+ const X = () => !!(C && T && x);
1466
+ function gn(o) {
1467
+ var p, f;
1468
+ const u = (p = t.days) == null ? void 0 : p[o];
1318
1469
  return u && Array.isArray(u.arrivals) ? { rows: u.arrivals, loadedAt: String((f = u.loadedAt) != null ? f : ""), live: !1 } : null;
1319
1470
  }
1320
- function Ae(i) {
1471
+ function ze(o) {
1321
1472
  var u;
1322
- return (u = H.get(i)) != null ? u : tn(i);
1473
+ return (u = O.get(o)) != null ? u : gn(o);
1323
1474
  }
1324
- function Ke() {
1325
- if (!b) return L ? { status: "loading" } : { status: "choose", message: O };
1326
- const i = Ae(m);
1327
- if (i)
1328
- return { status: "ready", arrivals: qn(i.rows, { day: m, today: T, largeParty: c, rules: s }), rows: i.rows, loadedAt: i.loadedAt, live: i.live };
1329
- if (L || Z.has(m)) return { status: "loading" };
1330
- const u = I.get(m);
1331
- return u ? { status: "failed", message: u } : Y() ? { status: "loading" } : { status: "unloaded" };
1475
+ function et() {
1476
+ if (!x) return L ? { status: "loading" } : { status: "choose", message: Q };
1477
+ const o = ze(h);
1478
+ if (o)
1479
+ return { status: "ready", arrivals: Qn(o.rows, { day: h, today: k, largeParty: l, rules: a }), rows: o.rows, loadedAt: o.loadedAt, live: o.live };
1480
+ if (L || Z.has(h)) return { status: "loading" };
1481
+ const u = j.get(h);
1482
+ return u ? { status: "failed", message: u } : X() ? { status: "loading" } : { status: "unloaded" };
1332
1483
  }
1333
- function nn(i, u) {
1334
- var f, y;
1335
- const { upcoming: g } = Ve(i, Ie(m, T), u);
1336
- return (y = (f = g[0]) != null ? f : i[0]) != null ? y : null;
1484
+ function fn(o, u) {
1485
+ var f, v;
1486
+ const { upcoming: p } = sn(o, Ve(h, k), u);
1487
+ return (v = (f = p[0]) != null ? f : o[0]) != null ? v : null;
1337
1488
  }
1338
- function rn(i) {
1339
- const u = I.get(m);
1340
- if (i && u) return { text: u, problem: !0 };
1341
- if (!i) return null;
1342
- if (Z.has(m)) return { text: "Checking for changes", problem: !1 };
1343
- if (i.live) return { text: "Up to date", problem: !1 };
1344
- const g = new Date(i.loadedAt);
1345
- if (Number.isNaN(g.getTime())) return { text: "Loaded in the chat", problem: !1 };
1346
- const f = Tt(g, a);
1347
- return { text: `Loaded in the chat ${me(f.day, f.minutes, T)}`, problem: !1 };
1489
+ function mn(o) {
1490
+ const u = j.get(h);
1491
+ if (o && u) return { text: u, problem: !0 };
1492
+ if (!o) return null;
1493
+ if (Z.has(h)) return { text: "Checking for changes", problem: !1 };
1494
+ if (o.live) return { text: "Up to date", problem: !1 };
1495
+ const p = new Date(o.loadedAt);
1496
+ if (Number.isNaN(p.getTime())) return { text: "Loaded in the chat", problem: !1 };
1497
+ const f = Et(p, s);
1498
+ return { text: `Loaded in the chat ${we(f.day, f.minutes, k)}`, problem: !1 };
1348
1499
  }
1349
- function ye() {
1350
- var y, S, w, X;
1351
- const i = h(), u = Ke(), g = u.status === "ready" ? u.arrivals : [], f = (y = g.find((W) => W.key === N)) != null ? y : nn(g, i.minutes);
1500
+ function de() {
1501
+ var v, b, $, oe;
1502
+ const o = M(), u = et(), p = u.status === "ready" ? u.arrivals : [], f = (v = p.find((G) => G.key === z)) != null ? v : fn(p, o.minutes);
1352
1503
  return {
1353
1504
  options: t,
1354
- title: ((w = (S = t.customize) == null ? void 0 : S.title) == null ? void 0 : w.trim()) || (j ? `${j} Guest Prep` : "Guest Prep"),
1355
- timeZone: a,
1356
- today: T,
1357
- nowMinutes: i.minutes,
1358
- day: m,
1359
- kind: Ie(m, T),
1360
- live: Y(),
1505
+ title: (($ = (b = t.customize) == null ? void 0 : b.title) == null ? void 0 : $.trim()) || (y ? `${y} Guest Prep` : "Guest Prep"),
1506
+ timeZone: s,
1507
+ today: k,
1508
+ nowMinutes: o.minutes,
1509
+ day: h,
1510
+ kind: Ve(h, k),
1511
+ live: X(),
1361
1512
  dayState: u,
1362
1513
  selected: f,
1363
- sheetOpen: D,
1364
- request: (X = J.get(m)) != null ? X : null,
1365
- research: p,
1366
- calendar: v,
1367
- dayNote: rn(b ? Ae(m) : null),
1368
- wineries: C,
1369
- tenantId: b,
1370
- storageNote: d.mode === "none" ? "Changes won't be saved in this browser." : null
1514
+ sheetOpen: B,
1515
+ request: (oe = g.get(h)) != null ? oe : null,
1516
+ research: E,
1517
+ calendar: N,
1518
+ dayNote: mn(x ? ze(h) : null),
1519
+ wineries: _,
1520
+ tenantId: x,
1521
+ storageNote: m.mode === "none" ? "Changes won't be saved in this browser." : null,
1522
+ seatingGap: c,
1523
+ query: _e,
1524
+ filters: se,
1525
+ openEarlier: te
1371
1526
  };
1372
1527
  }
1373
- const an = () => typeof window.matchMedia == "function" && window.matchMedia("(max-width: 900px)").matches, Q = {
1528
+ const hn = () => typeof window.matchMedia == "function" && window.matchMedia("(max-width: 900px)").matches, ee = {
1374
1529
  toggleCalendar: () => {
1375
- v = v.open ? { ...v, open: !1 } : { open: !0, month: m.slice(0, 7), focus: m }, _ = v.open ? "cal-focus" : "day-button", x();
1530
+ N = N.open ? { ...N, open: !1 } : { open: !0, month: h.slice(0, 7), focus: h }, D = N.open ? "cal-focus" : "day-button", w();
1376
1531
  },
1377
1532
  closeCalendar: () => {
1378
- v = { ...v, open: !1 }, _ = "day-button", x();
1533
+ N = { ...N, open: !1 }, D = "day-button", w();
1379
1534
  },
1380
- pickDay: (i) => {
1381
- v = { open: !1, month: i.slice(0, 7), focus: i }, _ = "day-button", i !== m && (m = i, N = null, D = !1, p = null, Je()), x();
1382
- const u = H.get(m);
1383
- Y() && (!u || Date.parse(u.loadedAt) < n().getTime() - Gt) && re();
1535
+ pickDay: (o) => {
1536
+ N = { open: !1, month: o.slice(0, 7), focus: o }, D = "day-button", o !== h && (h = o, z = null, te = [], B = !1, E = null, tt()), w();
1537
+ const u = O.get(h);
1538
+ X() && (!u || Date.parse(u.loadedAt) < n().getTime() - Jt) && ie();
1384
1539
  },
1385
- focusDay: (i) => {
1386
- v = { ...v, focus: i, month: i.slice(0, 7) }, _ = "cal-focus", x();
1540
+ focusDay: (o) => {
1541
+ N = { ...N, focus: o, month: o.slice(0, 7) }, D = "cal-focus", w();
1387
1542
  },
1388
- showMonth: (i) => {
1543
+ showMonth: (o) => {
1389
1544
  var f;
1390
- const g = (f = [Number(v.focus.slice(8, 10)), 30, 29, 28].map((y) => `${i}-${String(y).padStart(2, "0")}`).find(Nt)) != null ? f : `${i}-01`;
1391
- v = { open: !0, month: i, focus: g }, x();
1545
+ const p = (f = [Number(N.focus.slice(8, 10)), 30, 29, 28].map((v) => `${o}-${String(v).padStart(2, "0")}`).find(zt)) != null ? f : `${o}-01`;
1546
+ N = { open: !0, month: o, focus: p }, w();
1392
1547
  },
1393
- select: (i) => {
1394
- N = i, D = !0, an() && (_ = "close-sheet"), Je(), x();
1548
+ select: (o) => {
1549
+ z = o, B = !0, hn() && (D = "close-sheet"), tt(), w();
1395
1550
  },
1396
1551
  closeSheet: () => {
1397
- D = !1, _ = N ? `row-${N}` : null, x();
1552
+ B = !1, D = z ? `row-${z}` : null, w();
1553
+ },
1554
+ retry: () => void (x ? ie() : rt()),
1555
+ requestDay: () => void wn(),
1556
+ research: () => void xn(),
1557
+ chooseWinery: (o) => void kn(o),
1558
+ // Typing updates only the list, so the search box keeps focus and its caret.
1559
+ search: (o) => {
1560
+ _e = o, yn();
1561
+ },
1562
+ toggleFilter: (o) => {
1563
+ se = se.includes(o) ? se.filter((u) => u !== o) : [...se, o], w();
1398
1564
  },
1399
- retry: () => void (b ? re() : Xe()),
1400
- requestDay: () => void cn(),
1401
- research: () => void ln(),
1402
- chooseWinery: (i) => void un(i)
1565
+ clearFilters: () => {
1566
+ _e = "", se = [], D = "search", w();
1567
+ },
1568
+ toggleSeating: (o) => {
1569
+ te = te.includes(o) ? te.filter((u) => u !== o) : [...te, o], w();
1570
+ }
1403
1571
  };
1404
- async function Je() {
1405
- b && await Dt(d.adapter, It(b), JSON.stringify({ day: m, guest: N, savedOn: T }));
1572
+ function yn() {
1573
+ const o = de(), u = V.querySelector(".list-results");
1574
+ if (!u || o.dayState.status !== "ready") return w();
1575
+ const p = new Set(o.dayState.arrivals.map((f) => f.source)).size === 1;
1576
+ u.replaceWith(dn(o, ee, o.dayState.arrivals, !p));
1406
1577
  }
1407
- async function Qe() {
1408
- if (!b) return;
1409
- const i = er(await Ot(d.adapter, It(b)));
1410
- !i || i.savedOn !== T || !Nt(i.day) || (m = i.day, N = i.guest, v = { open: !1, month: m.slice(0, 7), focus: m });
1578
+ async function tt() {
1579
+ x && await Zt(m.adapter, Gt(x), JSON.stringify({ day: h, guest: z, savedOn: k }));
1411
1580
  }
1412
- function sn(i) {
1413
- var g, f;
1414
- const u = ye();
1581
+ async function nt() {
1582
+ if (!x) return;
1583
+ const o = fr(await Ft(m.adapter, Gt(x)));
1584
+ !o || o.savedOn !== k || !zt(o.day) || (h = o.day, z = o.guest, N = { open: !1, month: h.slice(0, 7), focus: h });
1585
+ }
1586
+ function bn(o) {
1587
+ var p, f;
1588
+ const u = de();
1415
1589
  return {
1416
- day: m,
1417
- timeZone: a,
1418
- live: Y(),
1590
+ day: h,
1591
+ timeZone: s,
1592
+ live: X(),
1419
1593
  arrivals: u.dayState.status === "ready" ? u.dayState.rows : null,
1420
- selected: (f = (g = u.selected) == null ? void 0 : g.row) != null ? f : null,
1421
- ui: { h: o, money: q, note: (y) => $(y), fact: (y, S, w) => k(y, S, w), chips: we },
1422
- runSql: async (y) => {
1423
- if (!A || !Y()) throw new Error(`${i.title} needs the New Vintage connector.`);
1424
- const S = await Wt(A, y, "Loading a custom card on the Guest Prep page.");
1425
- if (!S.complete) throw new Error("New Vintage returned only a preview for this card.");
1426
- return S.rows;
1594
+ selected: (f = (p = u.selected) == null ? void 0 : p.row) != null ? f : null,
1595
+ ui: { h: i, money: Y, note: (v) => P(v), fact: (v, b, $) => S(v, b, $), chips: Te },
1596
+ runSql: async (v) => {
1597
+ if (!T || !X()) throw new Error(`${o.title} needs the New Vintage connector.`);
1598
+ const b = await rn(T, v, "Loading a custom card on the Guest Prep page.");
1599
+ if (!b.complete) throw new Error("New Vintage returned only a preview for this card.");
1600
+ return b.rows;
1427
1601
  }
1428
1602
  };
1429
1603
  }
1430
- function on(i) {
1431
- const u = Ke(), g = [m, N != null ? N : "", u.status, u.status === "ready" ? u.loadedAt + u.rows.length : ""].join("|"), f = Ge.get(i.id);
1432
- if (f && f.signature === g) return f.element;
1433
- const y = o("div", null, $("Loading…")), S = o("section", { class: "card custom-card", "data-card": i.id }, o("h2", null, i.title), o("p", { class: "card-purpose" }, i.purpose), y);
1434
- return Ge.set(i.id, { signature: g, element: S }), Promise.resolve().then(() => i.render(sn(i))).then((w) => y.replaceChildren(w == null ? $("Nothing to show yet.") : typeof w == "string" ? $(w) : w)).catch((w) => y.replaceChildren($(`This card couldn't load: ${w instanceof Error ? w.message : String(w)}`, "note problem"))), S;
1604
+ function vn(o) {
1605
+ const u = et(), p = [h, z != null ? z : "", u.status, u.status === "ready" ? u.loadedAt + u.rows.length : ""].join("|"), f = He.get(o.id);
1606
+ if (f && f.signature === p) return f.element;
1607
+ const v = i("div", null, P("Loading…")), b = i("section", { class: "card custom-card", "data-card": o.id }, i("h2", null, o.title), i("p", { class: "card-purpose" }, o.purpose), v);
1608
+ return He.set(o.id, { signature: p, element: b }), Promise.resolve().then(() => o.render(bn(o))).then(($) => v.replaceChildren($ == null ? P("Nothing to show yet.") : typeof $ == "string" ? P($) : $)).catch(($) => v.replaceChildren(P(`This card couldn't load: ${$ instanceof Error ? $.message : String($)}`, "note problem"))), b;
1435
1609
  }
1436
- function _e(i) {
1437
- var g;
1438
- return ((g = t.cards) != null ? g : []).filter((f) => i === null ? !f.after || !(f.after === "summary" || Kt.includes(f.after)) : f.after === i).map(on);
1610
+ function Pe(o) {
1611
+ var p;
1612
+ return ((p = t.cards) != null ? p : []).filter((f) => o === null ? !f.after || !(f.after === "summary" || on.includes(f.after)) : f.after === o).map(vn);
1439
1613
  }
1440
- function x() {
1441
- var w, X, W, le, V, ce, xt;
1442
- if (ie) return;
1443
- const i = (W = _ != null ? _ : (X = (w = document.activeElement) == null ? void 0 : w.getAttribute) == null ? void 0 : X.call(w, "data-fid")) != null ? W : null;
1444
- _ = null;
1445
- const u = R.querySelector(".panel"), g = u ? { key: u.getAttribute("data-key"), top: (V = (le = u.querySelector(".panel-body")) == null ? void 0 : le.scrollTop) != null ? V : 0 } : null, f = ye(), y = Ir(f, Q, (ae) => _e(ae)), S = o(
1614
+ function w() {
1615
+ var pe, H, ge, Tt, Nt, At;
1616
+ if (ue) return;
1617
+ const o = document.activeElement, u = (H = D != null ? D : (pe = o == null ? void 0 : o.getAttribute) == null ? void 0 : pe.call(o, "data-fid")) != null ? H : null, p = !D && o instanceof HTMLInputElement ? [o.selectionStart, o.selectionEnd] : null;
1618
+ D = null;
1619
+ const f = V.querySelector(".panel"), v = f ? { key: f.getAttribute("data-key"), top: (Tt = (ge = f.querySelector(".panel-body")) == null ? void 0 : ge.scrollTop) != null ? Tt : 0 } : null, b = de(), $ = Qr(b, ee, (le) => Pe(le)), oe = i(
1446
1620
  "div",
1447
- { class: `page${D && y ? " sheet-open" : ""}` },
1448
- xr(f, Q),
1449
- f.storageNote ? $(f.storageNote, "storage-note") : null,
1450
- wr(f, Q),
1451
- kr(f),
1452
- f.dayState.status === "ready" ? _e("summary") : null,
1453
- o("div", { class: "layout" }, o("div", { style: "min-width:0" }, Ar(f, Q), _e(null)), y),
1454
- D && y ? o("div", { class: "backdrop", "aria-hidden": "true", onclick: () => Q.closeSheet() }) : null
1621
+ { class: `page${B && $ ? " sheet-open" : ""}` },
1622
+ Lr(b, ee),
1623
+ b.storageNote ? P(b.storageNote, "storage-note") : null,
1624
+ Ir(b, ee),
1625
+ Or(b),
1626
+ b.dayState.status === "ready" ? Pe("summary") : null,
1627
+ i("div", { class: "layout" }, i("div", { style: "min-width:0" }, jr(b, ee), Pe(null)), $),
1628
+ B && $ ? i("div", { class: "backdrop", "aria-hidden": "true", onclick: () => ee.closeSheet() }) : null
1455
1629
  );
1456
- if (R.replaceChildren(S), g && g.key === ((ce = f.selected) == null ? void 0 : ce.key)) {
1457
- const ae = R.querySelector(".panel-body");
1458
- ae && (ae.scrollTop = g.top);
1630
+ if (V.replaceChildren(oe), v && v.key === ((Nt = b.selected) == null ? void 0 : Nt.key)) {
1631
+ const le = V.querySelector(".panel-body");
1632
+ le && (le.scrollTop = v.top);
1459
1633
  }
1460
- i && ((xt = Array.from(R.querySelectorAll("[data-fid]")).find((ae) => ae.getAttribute("data-fid") === i)) == null || xt.focus()), We();
1634
+ const G = u ? Array.from(V.querySelectorAll("[data-fid]")).find((le) => le.getAttribute("data-fid") === u) : null;
1635
+ G == null || G.focus(), p && G instanceof HTMLInputElement && p[0] !== null && G.setSelectionRange(p[0], (At = p[1]) != null ? At : p[0]), Xe();
1461
1636
  }
1462
- async function re(i = m) {
1463
- if (!A || !b || ie) return;
1464
- const u = P;
1465
- if (!Bt.includes(a)) {
1466
- I.set(i, `Guest Prep can't load days in the ${a} time zone yet. Ask in this chat to set the winery's time zone.`), x();
1637
+ async function ie(o = h) {
1638
+ if (!T || !x || ue) return;
1639
+ const u = I;
1640
+ if (!en.includes(s)) {
1641
+ j.set(o, `Guest Prep can't load days in the ${s} time zone yet. Ask in this chat to set the winery's time zone.`), w();
1467
1642
  return;
1468
1643
  }
1469
- Z.add(i), I.delete(i), x();
1644
+ Z.add(o), j.delete(o), w();
1470
1645
  try {
1471
- F || (F = await _t(A, B ? null : l), B = !0);
1472
- const g = await Mt(A, F, { timeZone: a, day: i });
1473
- if (u !== P) return;
1474
- H.set(i, { rows: g, loadedAt: n().toISOString(), live: !0 });
1475
- } catch (g) {
1476
- if (u !== P) return;
1477
- I.set(i, ze(de(g)));
1646
+ q || (q = await It(T, F ? null : d), F = !0);
1647
+ const p = await Ot(T, q, { timeZone: s, day: o });
1648
+ if (u !== I) return;
1649
+ O.set(o, { rows: p, loadedAt: n().toISOString(), live: !0 });
1650
+ } catch (p) {
1651
+ if (u !== I) return;
1652
+ j.set(o, qe(ye(p)));
1478
1653
  } finally {
1479
- u === P && Z.delete(i), x();
1654
+ u === I && Z.delete(o), w();
1480
1655
  }
1481
1656
  }
1482
- async function ln() {
1483
- const i = ye().selected;
1484
- if (!i || !A || !b || (p == null ? void 0 : p.status) === "pending") return;
1485
- const u = m, g = P;
1486
- p = { key: i.key, status: "pending" }, x();
1657
+ async function xn() {
1658
+ const o = de().selected;
1659
+ if (!o || !T || !x || (E == null ? void 0 : E.status) === "pending") return;
1660
+ const u = h, p = I;
1661
+ E = { key: o.key, status: "pending" }, w();
1487
1662
  try {
1488
- F || (F = await _t(A, B ? null : l), B = !0);
1489
- const f = i.id.replace(/[^A-Za-z0-9-]/g, ""), y = await Mt(A, F, { timeZone: a, day: u, arrival: { source: i.source, id: f } });
1490
- if (g !== P) return;
1491
- const S = Ae(u);
1492
- if (S) {
1493
- const w = (V) => {
1494
- var ce;
1495
- return `${V.source === "tock" ? "tock" : "commerce7"}:${String((ce = V.arr_id) != null ? ce : "")}`;
1496
- }, X = y.filter((V) => w(V) === i.key), W = [];
1497
- let le = !1;
1498
- for (const V of S.rows)
1499
- w(V) !== i.key ? W.push(V) : le || (W.push(...X), le = !0);
1500
- H.set(u, { rows: W, loadedAt: S.loadedAt, live: S.live });
1663
+ q || (q = await It(T, F ? null : d), F = !0);
1664
+ const f = o.id.replace(/[^A-Za-z0-9-]/g, ""), v = await Ot(T, q, { timeZone: s, day: u, arrival: { source: o.source, id: f } });
1665
+ if (p !== I) return;
1666
+ const b = ze(u);
1667
+ if (b) {
1668
+ const $ = (H) => {
1669
+ var ge;
1670
+ return `${H.source === "tock" ? "tock" : "commerce7"}:${String((ge = H.arr_id) != null ? ge : "")}`;
1671
+ }, oe = v.filter((H) => $(H) === o.key), G = [];
1672
+ let pe = !1;
1673
+ for (const H of b.rows)
1674
+ $(H) !== o.key ? G.push(H) : pe || (G.push(...oe), pe = !0);
1675
+ O.set(u, { rows: G, loadedAt: b.loadedAt, live: b.live });
1501
1676
  }
1502
- p = null;
1677
+ E = null;
1503
1678
  } catch (f) {
1504
- if (g !== P) return;
1505
- p = { key: i.key, status: "failed", message: ze(de(f)) };
1679
+ if (p !== I) return;
1680
+ E = { key: o.key, status: "failed", message: qe(ye(f)) };
1506
1681
  }
1507
- x();
1682
+ w();
1508
1683
  }
1509
- async function cn() {
1510
- var g;
1511
- if (!b || ((g = J.get(m)) == null ? void 0 : g.kind) === "pending") return;
1512
- const i = m;
1513
- J.set(i, { kind: "pending" }), x();
1514
- const u = await hn(Hn({ day: i, wineryName: j, tenantId: b, timeZone: a }), { title: Bn, followUp: t.followUp });
1515
- J.set(i, u), x();
1684
+ async function wn() {
1685
+ var p;
1686
+ if (!x || ((p = g.get(h)) == null ? void 0 : p.kind) === "pending") return;
1687
+ const o = h;
1688
+ g.set(o, { kind: "pending" }), w();
1689
+ const u = await Mn(or({ day: o, wineryName: y, tenantId: x, timeZone: s }), { title: ir, followUp: t.followUp });
1690
+ g.set(o, u), w();
1516
1691
  }
1517
- async function un(i) {
1518
- var u, g;
1519
- !G || !i || i === b || (P += 1, b = i, j = (g = (u = C == null ? void 0 : C.find((f) => f.tenantId === i)) == null ? void 0 : u.name) != null ? g : j, A = Me(G, i), H.clear(), I.clear(), Z.clear(), N = null, p = null, await Dt(d.adapter, Lt, i), x(), await re());
1692
+ async function kn(o) {
1693
+ var u, p;
1694
+ !C || !o || o === x || (I += 1, x = o, y = (p = (u = _ == null ? void 0 : _.find((f) => f.tenantId === o)) == null ? void 0 : u.name) != null ? p : y, T = Le(C, o), O.clear(), j.clear(), Z.clear(), z = null, E = null, te = [], await Zt(m.adapter, jt, o), w(), await ie());
1520
1695
  }
1521
- async function Xe() {
1522
- var u, g, f;
1523
- L = !0, O = null, x();
1524
- const i = t.tenantId ? null : await Ot(d.adapter, Lt);
1525
- if (G = (u = t.callTool) != null ? u : await gn(t.connectorName), !ie) {
1526
- if (!G) {
1527
- L = !1, b || (O = Se() === "claude" ? "Picking a winery needs the New Vintage connector. Add it in this chat, then reload the page." : "Ask in the chat which winery this page is for."), await Qe(), x();
1696
+ async function rt() {
1697
+ var u, p, f;
1698
+ L = !0, Q = null, w();
1699
+ const o = t.tenantId ? null : await Ft(m.adapter, jt);
1700
+ if (C = (u = t.callTool) != null ? u : await Tn(t.connectorName), !ue) {
1701
+ if (!C) {
1702
+ L = !1, x || (Q = Ae() === "claude" ? "Picking a winery needs the New Vintage connector. Add it in this chat, then reload the page." : "Ask in the chat which winery this page is for."), await nt(), w();
1528
1703
  return;
1529
1704
  }
1530
- if (!b) {
1705
+ if (!x) {
1531
1706
  try {
1532
- C = await En(Me(G, null));
1533
- } catch (S) {
1534
- L = !1, O = ze(de(S)), x();
1707
+ _ = await Gn(Le(C, null));
1708
+ } catch (b) {
1709
+ L = !1, Q = qe(ye(b)), w();
1535
1710
  return;
1536
1711
  }
1537
- const y = (g = C.find((S) => S.tenantId === i)) != null ? g : C.length === 1 ? C[0] : null;
1538
- if (!y) {
1539
- L = !1, O = C.length ? null : "The New Vintage connector can't reach any winery for this account.", x();
1712
+ const v = (p = _.find((b) => b.tenantId === o)) != null ? p : _.length === 1 ? _[0] : null;
1713
+ if (!v) {
1714
+ L = !1, Q = _.length ? null : "The New Vintage connector can't reach any winery for this account.", w();
1540
1715
  return;
1541
1716
  }
1542
- b = y.tenantId, j = (f = t.wineryName) != null ? f : y.name;
1717
+ x = v.tenantId, y = (f = t.wineryName) != null ? f : v.name;
1543
1718
  }
1544
- A = Me(G, b), await Qe(), L = !1, await re(), !ie && !he && (he = setInterval(() => void (Y() && !Z.has(m) ? re() : void 0), Gt));
1719
+ T = Le(C, x), await nt(), L = !1, await ie(), !ue && !ke && (ke = setInterval(() => void (X() && !Z.has(h) ? ie() : void 0), Jt));
1545
1720
  }
1546
1721
  }
1547
- function et() {
1548
- const i = 6e4 - n().getTime() % 6e4 + 50;
1549
- Ne = setTimeout(() => {
1550
- T = h().day, x(), et();
1551
- }, i);
1722
+ function at() {
1723
+ const o = 6e4 - n().getTime() % 6e4 + 50;
1724
+ Ce = setTimeout(() => {
1725
+ k = M().day, w(), at();
1726
+ }, o);
1552
1727
  }
1553
- return x(), et(), Xe(), {
1554
- refresh: () => Y() ? re() : Promise.resolve(),
1728
+ return w(), at(), rt(), {
1729
+ refresh: () => X() ? ie() : Promise.resolve(),
1555
1730
  destroy: () => {
1556
- ie = !0, Ne && clearTimeout(Ne), he && clearInterval(he), window.removeEventListener("resize", Be), document.removeEventListener("keydown", He), document.removeEventListener("mousedown", Ye), Ze.remove(), Fe.remove(), R.remove();
1731
+ ue = !0, Ce && clearTimeout(Ce), ke && clearInterval(ke), window.removeEventListener("resize", Ke), document.removeEventListener("keydown", Je), document.removeEventListener("mousedown", Qe), We.remove(), Ye.remove(), V.remove();
1557
1732
  },
1558
1733
  state: () => {
1559
- var u, g;
1560
- const i = ye();
1561
- return { day: m, tenantId: b, live: Y(), selected: (g = (u = i.selected) == null ? void 0 : u.key) != null ? g : null, status: i.dayState.status };
1734
+ var u, p;
1735
+ const o = de();
1736
+ return { day: h, tenantId: x, live: X(), selected: (p = (u = o.selected) == null ? void 0 : u.key) != null ? p : null, status: o.dayState.status };
1562
1737
  }
1563
1738
  };
1564
1739
  }
1565
- function Rr(e, t) {
1740
+ function ta(e, t) {
1566
1741
  const n = typeof e == "string" ? document.querySelector(e) : e;
1567
1742
  if (!n) throw new Error(`NVGuestPrep: no element matches ${String(e)}`);
1568
- return Or(n, t);
1743
+ return Xr(n, t);
1569
1744
  }
1570
1745
  export {
1571
- be as DEFAULT_SETTINGS,
1572
- Dr as SECTION_IDS,
1573
- Bt as SUPPORTED_TIME_ZONES,
1574
- Yn as VERSION,
1575
- wn as fillGuestPrepQuery,
1576
- Rr as mount,
1577
- Wn as pageSetup
1746
+ he as DEFAULT_SETTINGS,
1747
+ ea as SECTION_IDS,
1748
+ en as SUPPORTED_TIME_ZONES,
1749
+ lr as VERSION,
1750
+ Pn as fillGuestPrepQuery,
1751
+ ta as mount,
1752
+ cr as pageSetup
1578
1753
  };