@new-vintage-labs/guest-prep 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/guest-prep.js +29 -22
- package/dist/guest-prep.mjs +741 -708
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ The New Vintage Guest Prep briefing as one script. Claude (in an artifact) or Ch
|
|
|
4
4
|
|
|
5
5
|
```html
|
|
6
6
|
<div id="app"></div>
|
|
7
|
-
<script src="https://cdn.jsdelivr.net/npm/@new-vintage-labs/guest-prep@0.1.
|
|
7
|
+
<script src="https://cdn.jsdelivr.net/npm/@new-vintage-labs/guest-prep@0.1.3/dist/guest-prep.js"></script>
|
|
8
8
|
<script>
|
|
9
9
|
NVGuestPrep.mount("#app", { tenantId, wineryName, guideVersion, connectorName, settings, days, customize, cards })
|
|
10
10
|
</script>
|
|
@@ -12,7 +12,7 @@ The New Vintage Guest Prep briefing as one script. Claude (in an artifact) or Ch
|
|
|
12
12
|
|
|
13
13
|
- **Settings.** `settings` is the spec's CONFIG: `timeZone` (null uses the viewer's device), `largeParty`, `seatingGapMinutes` (a gap this long between arrival times starts a new seating; default 45), and `tagRules` (case-insensitive regular expressions, checked hide, interests, VIP, club; the rest are heads-up tags). `NVGuestPrep.DEFAULT_SETTINGS` holds the defaults.
|
|
14
14
|
- **Data.** The page never writes SQL. It fetches the guide's `guest-prep-day-arrivals` query with `get_analysis_guide` and fills it with `fillGuestPrepQuery` (the day, the time zone, and one arrival for **Research this guest again**), the same function the library's PGlite tests run. Live days come through the viewer's own New Vintage connector (`claude.use("mcp")` in a Claude artifact, or a `callTool` the page passes, such as a ChatGPT Site's server-side New Vintage connection), and count only when `safe_tenant_sql` returns `resultMode: "complete"`. With `tenantId: null` the viewer picks a winery from the ones their connector can reach. Without the connector, the page shows the complete days written into `days`, and **Load this day** asks the chat for the rest (follow-up message, then clipboard, then a text box to copy). Finding the connector and asking the chat live in `packages/page-bridge`, which this package bundles.
|
|
15
|
-
- **Guest list.** Arrivals are grouped into seatings
|
|
15
|
+
- **Guest list.** Arrivals are grouped into seatings, each its own group under a sticky header band (time range, parties, guests and heads-up counts). A run longer than two hours splits at the clock hours inside it. Every seating opens and closes from its header, and Expand all or Collapse all sits at the top of the list; choices last for the page session. On today, passed seatings sit under Earlier today and start closed, and the seating with the next arrival is marked Now or Next. While searching or filtering, seatings with matches open. A name search (case and accents ignored) and VIP, First visit, Club member and Large party chips narrow the list, not the summary, and are not saved.
|
|
16
16
|
- **Clock.** Today's clock, countdowns and Earlier today move on the minute without SQL; a live page reloads the day every 15 minutes.
|
|
17
17
|
- **Saving.** The last view is saved under `guest-prep:{tenantId}` (the winery picker under `guest-prep.tenant`) in `window.storage`, then `localStorage`. It comes back only on the day it was saved, so the page still opens on today.
|
|
18
18
|
- **Customizing.** `customize` hides and renames sections (`summary`, `guestList`, `reservation`, `talkAbout`, `newVintageProfile`, `relationship`, `headsUp`, `personalNotes`), sets the title, and overrides theme tokens and fonts. `cards` adds custom cards after a section; a card after a guest panel section sits in the panel.
|
package/dist/guest-prep.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var NVGuestPrep=(function(J){"use strict";class ne extends Error{constructor(t){super(t.kind==="tool"?t.message:t.kind),this.failure=t}}const hn=["New Vintage","New Vintage Staging"];function We(){const e=globalThis.claude;return e&&typeof e.use=="function"?e:null}function Ke(){const e=globalThis.openai;return e&&typeof e=="object"?e:null}function Se(){return We()?"claude":Ke()?"chatgpt":"browser"}function yn(e,t){let n=t.length===1?t[0]:null;return async(r,s)=>{var l;if(n)return e.callTool(n,r,s);const a=[];for(const c of t)try{const d=await e.callTool(c,r,s);return n=c,d}catch(d){a.push(d)}throw(l=a.find(c=>pe(c).kind!=="reconnect"))!=null?l:a[0]}}async function bn(e){const t=We();if(t!=null&&t.use)try{const n=await Promise.race([t.use("mcp"),new Promise(r=>setTimeout(()=>r(null),1e4))]);return!n||typeof n.callTool!="function"?null:yn(n,e?[e]:hn)}catch{return null}return null}function vn(e){const t=e.content;if(!Array.isArray(t))return;const n=t.find(r=>r&&typeof r=="object"&&r.type==="text");if(typeof(n==null?void 0:n.text)=="string")try{return JSON.parse(n.text)}catch{return n.text}}function Je(e){var r,s,a;if(!e||typeof e!="object")throw new ne({kind:"tool",message:"The connector returned nothing."});const t=e,n=(a=(s=(r=t.payload)!=null?r:t.structuredContent)!=null?s:vn(t))!=null?a:t;if(t.isError===!0||n&&typeof n=="object"&&n.ok===!1){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.";throw new ne({kind:"tool",message:c})}if(!n||typeof n!="object")throw new ne({kind:"tool",message:String(n)});return n}function pe(e){var r,s,a;if(e instanceof ne)return e.failure;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:"");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."}}function xn(e=Se()){return e==="claude"?"Reconnect New Vintage in claude.ai Settings → Connectors.":"Reconnect New Vintage in your chat's connector settings."}async function wn(e,t={}){var s,a,l;const n=Ke(),r=(s=t.followUp)!=null?s:n&&typeof n.sendFollowUpMessage=="function"?c=>n.sendFollowUpMessage({prompt:c,...t.title?{title:t.title}:{}}):null;if(r)try{return await r(e),{kind:"sent"}}catch(c){return{kind:"failed",message:String((a=c==null?void 0:c.message)!=null?a:"The request was not sent.")}}try{const c=(l=globalThis.navigator)==null?void 0:l.clipboard;if(!c||typeof c.writeText!="function")throw new Error("no clipboard");return await c.writeText(e),{kind:"copied"}}catch{return{kind:"manual",text:e}}}const Ee=["America/Los_Angeles","America/Denver","America/Phoenix","America/Chicago","America/New_York","America/Anchorage","Pacific/Honolulu"],kn=/^\d{4}-\d{2}-\d{2}$/,Sn=/^[A-Za-z0-9-]{1,100}$/,Qe=/timestamptz '(\d{4}-\d{2}-\d{2}) 00:00:00 [^']*'/g,Xe=/(\bfocus as \(\s*(?:--[^\n]*\n\s*)?select \* from \(\s*values )\([^()]*\)(\s*\) focus_rows \()/;function re(e){throw new Error("fillGuestPrepQuery: "+e)}function Tn(e){(typeof e!="string"||!kn.test(e))&&re("day must be YYYY-MM-DD");const[t,n,r]=e.split("-").map(Number),s=new Date(Date.UTC(t,n-1,r));return s.toISOString().slice(0,10)!==e&&re("bad date "+e),new Date(s.getTime()+864e5).toISOString().slice(0,10)}function Nn(e){return e==null?"(null::text, null::text)":(e.source!=="commerce7"&&e.source!=="tock"&&re("unexpected source "+String(e.source)),(typeof e.id!="string"||!Sn.test(e.id))&&re("arrival id may only hold letters, digits and hyphens"),"('"+e.source+"'::text, '"+e.id+"'::text)")}function et(e,t){const n=t||{};Ee.indexOf(n.timeZone)<0&&re("unsupported time zone");const r=Tn(n.day);let s=String(e);const a=Array.from(new Set(Array.from(s.matchAll(Qe),c=>c[1]))).sort();a.length>2&&re("expected at most two day literals"),s=s.replace(Qe,(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+"'");const l=Nn(n.arrival);return Xe.test(s)?s=s.replace(Xe,(c,d,m)=>d+l+m):n.arrival&&re("this query has no focus row"),s}function D(e){if(e==null||e==="")return null;const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:null}const $n=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}),An=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0});function F(e){var n;const t=(n=D(e))!=null?n:0;return Number.isInteger(Math.round(t*100)/100)?An.format(t):$n.format(t)}function A(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}function Mn(e){if(e)return e;try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"America/Los_Angeles"}catch{return"America/Los_Angeles"}}function tt(e,t){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=>{var a,l;return(l=(a=n.find(c=>c.type===s))==null?void 0:a.value)!=null?l:"00"};return{day:`${r("year")}-${r("month")}-${r("day")}`,minutes:Number(r("hour"))%24*60+Number(r("minute"))}}const _n=/^(\d{4})-(\d{2})-(\d{2})$/;function nt(e){return typeof e!="string"||!_n.test(e)?!1:ge(e).toISOString().slice(0,10)===e}function ge(e){const[t,n,r]=e.split("-").map(Number);return new Date(Date.UTC(t,n-1,r))}function Z(e,t){return new Date(ge(e).getTime()+t*864e5).toISOString().slice(0,10)}function Te(e,t){const[n,r]=e.split("-").map(Number),s=n*12+r-1+t;return`${Math.floor(s/12)}-${String(s%12+1).padStart(2,"0")}`}function Ne(e,t){return Math.round((ge(t).getTime()-ge(e).getTime())/864e5)}function fe(e){return ge(e).getUTCDay()}const Ce=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],$e=["January","February","March","April","May","June","July","August","September","October","November","December"],rt=(e,t)=>e.slice(0,4)!==t.slice(0,4)?`, ${e.slice(0,4)}`:"";function at(e,t){return`${$e[Number(e.slice(5,7))-1].slice(0,3)} ${Number(e.slice(8,10))}${rt(e,t)}`}function ae(e,t){return`${Ce[fe(e)].slice(0,3)}, ${at(e,t)}`}function Pe(e,t){return`${Ce[fe(e)]}, ${$e[Number(e.slice(5,7))-1]} ${Number(e.slice(8,10))}${rt(e,t)}`}function st(e){return`${$e[Number(e.slice(5,7))-1]} ${e.slice(0,4)}`}function En(e){const t=/^(\d{1,2}):(\d{2})/.exec(String(e!=null?e:""));return t?Number(t[1])*60+Number(t[2]):null}function Q(e){const t=Math.floor(e/60)%24;return`${t%12===0?12:t%12}:${String(e%60).padStart(2,"0")} ${t<12?"AM":"PM"}`}function me(e,t,n){return`${ae(e,n)}, ${Q(t)}`}function ze(e){if(e<=0)return"now";const t=Math.floor(e/60),n=e%60;return t?n?`in ${t} hr ${n} min`:`in ${t} hr`:`in ${n} min`}function Cn(e,t){const n=Ne(e,t);if(n<=0)return"today";if(n===1)return"yesterday";if(n<14)return`${n} days ago`;let r=(Number(t.slice(0,4))-Number(e.slice(0,4)))*12+Number(t.slice(5,7))-Number(e.slice(5,7));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`}function Pn(e,t){var a;const n=((a=D(e))!=null?a:0)-1,r=$e[n],s=D(t);return r&&s?`${r} ${s}`:r!=null?r:s?String(s):""}function it(e){const t=e.trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}const zn="guest-prep",Le="guest-prep-day-arrivals";function Ie(e,t){return{call:async(n,r)=>{const s=n==="get_analysis_guide"||!t?r:{tenantId:t,...r};try{return Je(await e(n,s))}catch(a){if(pe(a).kind!=="temporary")throw a;return await new Promise(l=>setTimeout(l,2e3)),Je(await e(n,s))}}}}async function ot(e,t){var a,l,c;const n=await e.call("get_analysis_guide",{context:"Opening the Guest Prep briefing with the latest day query.",slug:zn,includeReferenceQueries:!0,...t?{pageSetup:t}:{}}),r=(a=n.item)!=null?a:n,s={};for(const d of(l=r.referenceQueries)!=null?l:[])typeof d.slug=="string"&&typeof d.sqlText=="string"&&(s[d.slug]=d.sqlText);if(!s[Le])throw new ne({kind:"tool",message:`The guide is missing the ${Le} query.`});return{version:(c=D(r.version))!=null?c:0,queries:s}}async function lt(e,t,n){const r=await e.call("safe_tenant_sql",{context:n,sqlText:t});return{rows:Array.isArray(r.rows)?r.rows:[],complete:r.resultMode==="complete"}}function Ln(e,t,n,r){try{return et(e.queries[Le],{timeZone:t,day:n,arrival:r})}catch{throw new ne({kind:"needs_update"})}}async function ct(e,t,n){var a;const r=Ln(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.";for(let l=0;l<2;l+=1){const c=await lt(e,r,s);if(c.complete)return c.rows}throw new ne({kind:"tool",message:"New Vintage returned only a preview of this day, so it wasn't loaded. Try again."})}async function In(e){var t,n;try{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;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}]:[]}catch(r){const s=String((n=r==null?void 0:r.message)!=null?n:""),a=Array.from(s.matchAll(/(?:([^,:]+?) -> )?tenantId "([^"]+)"/g)).map(l=>{var c;return{tenantId:l[2],name:((c=l[1])!=null?c:"").replace(/^.*(?:values|these)[^:]*:\s*/i,"").trim()||l[2]}});if(a.length)return a;throw r}}const On="Name not on file";function he(e){var t;return(t=e.name)!=null?t:On}const Rn=/[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\.[A-Z0-9-]+)*\.[A-Z]{2,}/gi,Dn=/(?:\+?\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;function ut(e){const t=String(e!=null?e:"").replace(Rn,"[email]").replace(Dn,"[phone]").replace(/\s{2,}/g," ").replace(/\s+([,.;:!?])/g,"$1").replace(/([,;:])(?=[.!?]|$)/g,"").replace(/^[\s,;:.-]+|[\s,;:-]+$/g,"");return t||null}const Oe=e=>String(e!=null?e:"").trim().replace(/\s+/g," ").toLowerCase();function qn(e){const t=n=>(n!=null?n:[]).flatMap(r=>{try{return[new RegExp(r,"i")]}catch{return[]}});return{hide:t(e.hide),interests:t(e.interests),vip:t(e.vip),club:t(e.club)}}function Vn(e,t){var r;const n={vip:!1,interests:[],clubTags:[],accountTags:[]};for(const s of e){const a=s.trim();if(!a||t.hide.some(c=>c.test(a)))continue;const l=t.interests.map(c=>c.exec(a)).find(Boolean);if(l){n.interests.push(((r=l[1])!=null?r:l[0]).trim());continue}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)}return n}function L(e){if(e==null)return null;const t=String(e).trim();return t||null}function Ae(e){if(Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("["))try{const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]}function ie(e){return typeof e=="string"&&!e.trim().startsWith("[")?e.split(",").map(t=>t.trim()).filter(Boolean):Ae(e).map(t=>L(t)).filter(t=>!!t)}const Un=e=>/^rose$/i.test(e)?"Rosé":e,dt=e=>ie(e).map(t=>t.toLowerCase());function pt(e,t){if(!/^\d{2}-\d{2}$/.test(e))return null;const n=Number(t.slice(0,4)),s=[n-1,n,n+1].map(a=>`${a}-${e}`).filter(a=>Z(a,0)===a).sort((a,l)=>Math.abs(Ne(t,a))-Math.abs(Ne(t,l)))[0];return s&&Math.abs(Ne(t,s))<=30?s:null}function Gn(e,t,n){const r=[],s=L(e.bday_md),a=s?pt(s,t):null;a&&r.push(a===t?"Birthday on this day":`Birthday ${ae(a,n)}`);const l=L(e.club_signup),c=l&&/^\d{4}-\d{2}-\d{2}$/.test(l)?pt(l.slice(5),t):null,d=c&&l?Number(c.slice(0,4))-Number(l.slice(0,4)):0;return c&&d>0&&r.push(`${A(d,"year")} in the club ${c===t?"on this day":ae(c,n)}`),r}function jn(e,t){var X,z,W;const n=e.source==="tock"?"tock":"commerce7",r=String((X=e.arr_id)!=null?X:""),s=(z=D(e.party))!=null?z:0,a=e.visit==="First visit"?"first":e.visit==="Return"?"return":"unknown",l=Vn(ie(e.tags),t.rules),c=L(e.club_titles),d=c!==null,m=L(e.signup_tier),M=L(e.churn_tier),k=!d&&dt(m).some(g=>g==="high"||g==="very high"),h=d&&dt(M).some(g=>g==="medium"||g==="high"),x=L(e.last_taste),y=x?{title:x,day:L(e.last_taste_date)}:null,_=Ae(e.last_taste_items).map(g=>g).map(g=>{var C,$;return{title:(C=L(g==null?void 0:g.title))!=null?C:"",qty:($=D(g==null?void 0:g.qty))!=null?$:0}}).filter(g=>g.title),E=Ae(e.notes).map(g=>g).map(g=>({content:ut(g==null?void 0:g.content),when:Pn(g==null?void 0:g.month,g==null?void 0:g.year),original:Oe(g==null?void 0:g.content)})).filter(g=>!!g.content).slice(0,3),I=E.map(({content:g,when:C})=>({content:g,when:C})),N=new Set(E.map(g=>g.original)),q=[];for(const g of Ae(e.last_taste_notes)){const C=ut(g);if(!(!C||N.has(Oe(g)))&&(N.add(Oe(g)),q.push(C),q.length===3))break}const H=D(e.price_floor),O=D(e.price_ceiling),R=D(e.avg_unit_price),Y=D(e.ltv_cents),G=D(e.order_count);return{key:`${n}:${r}`,source:n,id:r,row:e,minutes:(W=En(e.t))!=null?W:0,party:s,experience:L(e.experience),name:L(e.name),visit:a,vip:l.vip,clubMember:d,clubTitles:c,prospect:k,signupTier:m,atRisk:h,churnTier:M,clubPickup:L(e.next_ship)===t.day,large:s>=t.largeParty,partlyRefunded:e.refund_state==="partial",occasions:Gn(e,t.day,t.today),interests:l.interests,clubTags:l.clubTags,accountTags:l.accountTags,varietals:ie(e.top_varietals).slice(0,3),wineTypes:ie(e.top_wine_types).map(Un).slice(0,2),vintages:ie(e.top_vintages).slice(0,3),appellations:ie(e.top_appellations).slice(0,2),lastTaste:y,bought:y?{items:_,total:D(e.last_taste_spend)}:null,orderNotes:q,personalNotes:I,price:H!==null||O!==null||R!==null?{floor:H,ceiling:O,avg:R}:null,lifetime:Y!==null&&(Y>0||(G!=null?G:0)>0)?{spend:Y/100,orders:G}:null,since:L(e.since_year)}}function Fn(e,t){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)}function Zn(e,t){const n=[...e].sort((a,l)=>a.minutes-l.minutes),r=[];for(const a of n){const l=r[r.length-1];l&&a.minutes-l[l.length-1].minutes<t?l.push(a):r.push([a])}return r.flatMap(a=>{var c;if(a[a.length-1].minutes-a[0].minutes<=120)return[a];const l=new Map;for(const d of a){const m=Math.floor(d.minutes/60);l.set(m,[...(c=l.get(m))!=null?c:[],d])}return Array.from(l.values())}).map(a=>({key:String(a[0].minutes),first:a[0].minutes,last:a[a.length-1].minutes,arrivals:a}))}function Bn(e){const t=[],n=e.filter(a=>a.vip).length,r=e.filter(a=>a.large).length,s=e.filter(a=>a.clubPickup).length;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}const gt=[{id:"vip",label:"VIP",test:e=>e.vip},{id:"first",label:"First visit",test:e=>e.visit==="first"},{id:"club",label:"Club member",test:e=>e.clubMember},{id:"large",label:"Large party",test:e=>e.large}];function ft(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().trim()}function Re(e,t,n){var s;const r=ft(t);return r&&!ft((s=e.name)!=null?s:"").includes(r)?!1:gt.every(a=>!n.includes(a.id)||a.test(e))}function De(e,t){return e<t?"past":e>t?"future":"today"}function mt(e,t,n){return t!=="today"?{upcoming:e,earlier:[]}:{upcoming:e.filter(r=>r.minutes>=n),earlier:e.filter(r=>r.minutes<n)}}function Hn(e,t,n){if(t!=="today")return null;const r=e.minutes-n;return r>=0&&r<=120?ze(r):null}function Yn(e){const t=e.slice(0,2).map(he).join(", ");return e.length>2?`${t} and ${e.length-2} more`:t}function qe(e,t,n,r,s){return n.length?n.length===1?{label:e,value:he(n[0]),detail:me(r,n[0].minutes,s)}:{label:t,value:A(n.length,"guest"),detail:Yn(n)}:null}function ht(e,t,n){const r=[];r.push(qe("Club pickup","Club pickups",e.filter(a=>a.clubPickup),t,n));const s=e.filter(a=>a.large);if(s.length===1)r.push({label:"Large party",value:`Party of ${s[0].party}`,detail:me(t,s[0].minutes,n)});else if(s.length>1){const a=s.reduce((c,d)=>c+d.party,0),l=s.slice(0,2).map(c=>`${Q(c.minutes)} for ${c.party}`).join(", ");r.push({label:"Large parties",value:`${A(s.length,"party","parties")}, ${A(a,"guest")}`,detail:`${ae(t,n)}, ${l}${s.length>2?` and ${s.length-2} more`:""}`})}return r.push(qe("VIP","VIPs",e.filter(a=>a.vip),t,n)),r.push(qe("Club prospect","Club prospects",e.filter(a=>a.prospect),t,n)),r.filter(a=>a!==null)}function Wn(e,t,n){var c;const r=new Map;for(const d of e){const m=Math.floor(d.minutes/30)*30,M=(c=r.get(m))!=null?c:{parties:0,guests:0};r.set(m,{parties:M.parties+1,guests:M.guests+d.party})}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];if(!s)return null;const[a,l]=s;return{label:"Busiest half hour",value:`${Q(a)} to ${Q(a+30)}`,detail:`${ae(t,n)}, ${A(l.parties,"party","parties")}, ${A(l.guests,"guest")}`}}function Kn(e,t,n,r){const s={reservations:e.length,guests:e.reduce((m,M)=>m+M.party,0)};if(!e.length)return{...s,message:"No reservations on this day",facts:[]};const a=De(t,n);if(a==="past")return{...s,message:"This day has passed",facts:[]};const{upcoming:l,earlier:c}=mt(e,a,r);if(!l.length)return{...s,message:"No more arrivals today",facts:[]};if(c.length){const m=l[0];return{...s,message:null,facts:[{label:"Still to arrive",value:`${l.length} of ${e.length}`},{label:"Next arrival",value:me(t,m.minutes,n),detail:ze(m.minutes-r)},...ht(l,t,n)]}}const d=ht(l,t,n);if(!d.length){const m=Wn(l,t,n);m&&d.push(m)}return{...s,message:null,facts:d}}function Jn(e){return new Set(e.map(n=>n.source)).size===1?e[0].source:null}const Ve={commerce7:"Commerce7",tock:"Tock"},Qn="Load Guest Prep day";function Xn(e){var n;const t=((n=e.wineryName)==null?void 0:n.trim())||"this winery";return[`Load Guest Prep for ${e.day} for ${t} (tenantId ${e.tenantId}) through the New Vintage connector in ${e.timeZone}.`,"Use the specification's read-only day query and add only complete safe_tenant_sql results to this existing Guest Prep.","Narrow or split sampled results until every piece is complete.","Select the requested service day, preserve every previously loaded date, and return the updated interactive briefing.","Update both the in-chat and standalone versions when both exist in this conversation.","Preserve the design, confirmed tag rules, read-only access and privacy filtering.","Do not use exports or invent guests."].join(" ")}const yt="0.1.2",ye=(e,t)=>String(e!=null?e:"").replace(/\s+/g," ").trim().slice(0,t);function bt(e={},t=[]){var n,r,s,a,l,c;return{packageVersion:yt,hiddenSections:((n=e.hide)!=null?n:[]).slice(0,20).map(d=>ye(d,40)),reorderedViews:[],renamedSections:Object.keys((r=e.labels)!=null?r:{}).slice(0,20).map(d=>ye(d,40)),themeChanged:Object.keys((s=e.theme)!=null?s:{}).length+Object.keys((a=e.themeDark)!=null?a:{}).length>0,fontsChanged:!!((l=e.fonts)!=null&&l.display||(c=e.fonts)!=null&&c.body),titleChanged:!!e.title,customCards:t.slice(0,10).map(d=>{var m;return{title:ye(d.title,80),purpose:ye(d.purpose,160),view:ye((m=d.after)!=null?m:"page",20)}})}}const vt="guest-prep.tenant",xt=e=>`guest-prep:${e}`;function er(){const e=globalThis.storage;return e&&typeof e.get=="function"&&typeof e.set=="function"?e:null}function tr(){try{const e=globalThis.localStorage,t="__nv_probe__";return e.setItem(t,"1"),e.removeItem(t),e}catch{return null}}function nr(e){return typeof e=="string"?e:e&&typeof e=="object"&&typeof e.value=="string"?e.value:null}function rr(e){if(e)return{adapter:e,mode:"artifact"};const t=er();if(t)return{mode:"artifact",adapter:{get:async(r,s)=>nr(await t.get(r,s)),set:async(r,s,a)=>{await t.set(r,s,a)}}};const n=tr();return n?{mode:"browser",adapter:{get:async r=>n.getItem(r),set:async(r,s)=>n.setItem(r,s)}}:{adapter:null,mode:"none"}}async function wt(e,t){if(!e)return null;try{return await e.get(t,!1)}catch{return null}}async function kt(e,t,n){if(e)try{await e.set(t,n,!1)}catch{}}function ar(e){if(!e)return null;try{const t=JSON.parse(e);return typeof t.day!="string"||typeof t.savedOn!="string"?null:{day:t.day,guest:typeof t.guest=="string"?t.guest:null,savedOn:t.savedOn}}catch{return null}}const sr={"surface-base":"#f7f5f1","surface-subtle":"#f2efea","surface-raised":"#ffffff","text-primary":"#1a1917","text-secondary":"#4f4a43","text-tertiary":"#6b655d","border-subtle":"#ebe7df","border-default":"#ddd8ce","border-strong":"#8d877f","action-primary-bg":"#0b6623","action-primary-fg":"#ffffff","action-primary-hover":"#155826","focus-ring-color":"#1a6b30","status-warning":"#9c6110","status-warning-bg":"#fff7e7","font-display":"'Newsreader', Georgia, serif","font-body":"'Be Vietnam Pro', system-ui, sans-serif"},ir={"surface-base":"#171614","surface-subtle":"#24211f","surface-raised":"#34302d","text-primary":"#f5f3ef","text-secondary":"#d0c8bd","text-tertiary":"#b4aba0","border-subtle":"#3b3632","border-default":"#4c4742","border-strong":"#8a8279","action-primary-bg":"#57bd76","action-primary-fg":"#06210d","action-primary-hover":"#7ecb93","focus-ring-color":"#8cd0a0","status-warning":"#f0c36a","status-warning-bg":"rgba(240,195,106,.16)"},or=/^[a-z][a-z0-9-]{0,40}$/,lr=/^[^;{}<>\\]{1,120}$/;function St(e){return Object.entries(e).filter(([t,n])=>or.test(t)&&typeof n=="string"&&lr.test(n)).map(([t,n])=>`--${t}:${n};`).join("")}function cr(e){return`https://fonts.googleapis.com/css2?${e.map(n=>`family=${encodeURIComponent(n).replace(/%20/g,"+")}:wght@300;400;500;600`).join("&")}&display=swap`}function ur(e={},t={}){const n=St({...sr,...e}),r=St({...ir,...t});return`:root,.nvgp{${n}}@media (prefers-color-scheme: dark){:root,.nvgp{${r}}}`}const be="120ms cubic-bezier(0.2,0,0.2,1)",dr=`
|
|
1
|
+
var NVGuestPrep=(function(Q){"use strict";class ne extends Error{constructor(t){super(t.kind==="tool"?t.message:t.kind),this.failure=t}}const yn=["New Vintage","New Vintage Staging"];function Ke(){const e=globalThis.claude;return e&&typeof e.use=="function"?e:null}function Je(){const e=globalThis.openai;return e&&typeof e=="object"?e:null}function Te(){return Ke()?"claude":Je()?"chatgpt":"browser"}function bn(e,t){let n=t.length===1?t[0]:null;return async(r,s)=>{var l;if(n)return e.callTool(n,r,s);const a=[];for(const c of t)try{const d=await e.callTool(c,r,s);return n=c,d}catch(d){a.push(d)}throw(l=a.find(c=>ge(c).kind!=="reconnect"))!=null?l:a[0]}}async function vn(e){const t=Ke();if(t!=null&&t.use)try{const n=await Promise.race([t.use("mcp"),new Promise(r=>setTimeout(()=>r(null),1e4))]);return!n||typeof n.callTool!="function"?null:bn(n,e?[e]:yn)}catch{return null}return null}function xn(e){const t=e.content;if(!Array.isArray(t))return;const n=t.find(r=>r&&typeof r=="object"&&r.type==="text");if(typeof(n==null?void 0:n.text)=="string")try{return JSON.parse(n.text)}catch{return n.text}}function Qe(e){var r,s,a;if(!e||typeof e!="object")throw new ne({kind:"tool",message:"The connector returned nothing."});const t=e,n=(a=(s=(r=t.payload)!=null?r:t.structuredContent)!=null?s:xn(t))!=null?a:t;if(t.isError===!0||n&&typeof n=="object"&&n.ok===!1){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.";throw new ne({kind:"tool",message:c})}if(!n||typeof n!="object")throw new ne({kind:"tool",message:String(n)});return n}function ge(e){var r,s,a;if(e instanceof ne)return e.failure;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:"");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."}}function wn(e=Te()){return e==="claude"?"Reconnect New Vintage in claude.ai Settings → Connectors.":"Reconnect New Vintage in your chat's connector settings."}async function kn(e,t={}){var s,a,l;const n=Je(),r=(s=t.followUp)!=null?s:n&&typeof n.sendFollowUpMessage=="function"?c=>n.sendFollowUpMessage({prompt:c,...t.title?{title:t.title}:{}}):null;if(r)try{return await r(e),{kind:"sent"}}catch(c){return{kind:"failed",message:String((a=c==null?void 0:c.message)!=null?a:"The request was not sent.")}}try{const c=(l=globalThis.navigator)==null?void 0:l.clipboard;if(!c||typeof c.writeText!="function")throw new Error("no clipboard");return await c.writeText(e),{kind:"copied"}}catch{return{kind:"manual",text:e}}}const ze=["America/Los_Angeles","America/Denver","America/Phoenix","America/Chicago","America/New_York","America/Anchorage","Pacific/Honolulu"],Sn=/^\d{4}-\d{2}-\d{2}$/,$n=/^[A-Za-z0-9-]{1,100}$/,Xe=/timestamptz '(\d{4}-\d{2}-\d{2}) 00:00:00 [^']*'/g,et=/(\bfocus as \(\s*(?:--[^\n]*\n\s*)?select \* from \(\s*values )\([^()]*\)(\s*\) focus_rows \()/;function re(e){throw new Error("fillGuestPrepQuery: "+e)}function Tn(e){(typeof e!="string"||!Sn.test(e))&&re("day must be YYYY-MM-DD");const[t,n,r]=e.split("-").map(Number),s=new Date(Date.UTC(t,n-1,r));return s.toISOString().slice(0,10)!==e&&re("bad date "+e),new Date(s.getTime()+864e5).toISOString().slice(0,10)}function Nn(e){return e==null?"(null::text, null::text)":(e.source!=="commerce7"&&e.source!=="tock"&&re("unexpected source "+String(e.source)),(typeof e.id!="string"||!$n.test(e.id))&&re("arrival id may only hold letters, digits and hyphens"),"('"+e.source+"'::text, '"+e.id+"'::text)")}function tt(e,t){const n=t||{};ze.indexOf(n.timeZone)<0&&re("unsupported time zone");const r=Tn(n.day);let s=String(e);const a=Array.from(new Set(Array.from(s.matchAll(Xe),c=>c[1]))).sort();a.length>2&&re("expected at most two day literals"),s=s.replace(Xe,(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+"'");const l=Nn(n.arrival);return et.test(s)?s=s.replace(et,(c,d,m)=>d+l+m):n.arrival&&re("this query has no focus row"),s}function U(e){if(e==null||e==="")return null;const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:null}const An=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}),Mn=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0});function H(e){var n;const t=(n=U(e))!=null?n:0;return Number.isInteger(Math.round(t*100)/100)?Mn.format(t):An.format(t)}function A(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}function _n(e){if(e)return e;try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"America/Los_Angeles"}catch{return"America/Los_Angeles"}}function nt(e,t){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=>{var a,l;return(l=(a=n.find(c=>c.type===s))==null?void 0:a.value)!=null?l:"00"};return{day:`${r("year")}-${r("month")}-${r("day")}`,minutes:Number(r("hour"))%24*60+Number(r("minute"))}}const Cn=/^(\d{4})-(\d{2})-(\d{2})$/;function rt(e){return typeof e!="string"||!Cn.test(e)?!1:fe(e).toISOString().slice(0,10)===e}function fe(e){const[t,n,r]=e.split("-").map(Number);return new Date(Date.UTC(t,n-1,r))}function Y(e,t){return new Date(fe(e).getTime()+t*864e5).toISOString().slice(0,10)}function Ne(e,t){const[n,r]=e.split("-").map(Number),s=n*12+r-1+t;return`${Math.floor(s/12)}-${String(s%12+1).padStart(2,"0")}`}function Ae(e,t){return Math.round((fe(t).getTime()-fe(e).getTime())/864e5)}function me(e){return fe(e).getUTCDay()}const Le=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Me=["January","February","March","April","May","June","July","August","September","October","November","December"],at=(e,t)=>e.slice(0,4)!==t.slice(0,4)?`, ${e.slice(0,4)}`:"";function st(e,t){return`${Me[Number(e.slice(5,7))-1].slice(0,3)} ${Number(e.slice(8,10))}${at(e,t)}`}function ae(e,t){return`${Le[me(e)].slice(0,3)}, ${st(e,t)}`}function Ie(e,t){return`${Le[me(e)]}, ${Me[Number(e.slice(5,7))-1]} ${Number(e.slice(8,10))}${at(e,t)}`}function ot(e){return`${Me[Number(e.slice(5,7))-1]} ${e.slice(0,4)}`}function En(e){const t=/^(\d{1,2}):(\d{2})/.exec(String(e!=null?e:""));return t?Number(t[1])*60+Number(t[2]):null}function X(e){const t=Math.floor(e/60)%24;return`${t%12===0?12:t%12}:${String(e%60).padStart(2,"0")} ${t<12?"AM":"PM"}`}function he(e,t,n){return`${ae(e,n)}, ${X(t)}`}function Oe(e){if(e<=0)return"now";const t=Math.floor(e/60),n=e%60;return t?n?`in ${t} hr ${n} min`:`in ${t} hr`:`in ${n} min`}function Pn(e,t){const n=Ae(e,t);if(n<=0)return"today";if(n===1)return"yesterday";if(n<14)return`${n} days ago`;let r=(Number(t.slice(0,4))-Number(e.slice(0,4)))*12+Number(t.slice(5,7))-Number(e.slice(5,7));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`}function zn(e,t){var a;const n=((a=U(e))!=null?a:0)-1,r=Me[n],s=U(t);return r&&s?`${r} ${s}`:r!=null?r:s?String(s):""}function it(e){const t=e.trim().toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)}const Ln="guest-prep",Re="guest-prep-day-arrivals";function De(e,t){return{call:async(n,r)=>{const s=n==="get_analysis_guide"||!t?r:{tenantId:t,...r};try{return Qe(await e(n,s))}catch(a){if(ge(a).kind!=="temporary")throw a;return await new Promise(l=>setTimeout(l,2e3)),Qe(await e(n,s))}}}}async function lt(e,t){var a,l,c;const n=await e.call("get_analysis_guide",{context:"Opening the Guest Prep briefing with the latest day query.",slug:Ln,includeReferenceQueries:!0,...t?{pageSetup:t}:{}}),r=(a=n.item)!=null?a:n,s={};for(const d of(l=r.referenceQueries)!=null?l:[])typeof d.slug=="string"&&typeof d.sqlText=="string"&&(s[d.slug]=d.sqlText);if(!s[Re])throw new ne({kind:"tool",message:`The guide is missing the ${Re} query.`});return{version:(c=U(r.version))!=null?c:0,queries:s}}async function ct(e,t,n){const r=await e.call("safe_tenant_sql",{context:n,sqlText:t});return{rows:Array.isArray(r.rows)?r.rows:[],complete:r.resultMode==="complete"}}function In(e,t,n,r){try{return tt(e.queries[Re],{timeZone:t,day:n,arrival:r})}catch{throw new ne({kind:"needs_update"})}}async function ut(e,t,n){var a;const r=In(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.";for(let l=0;l<2;l+=1){const c=await ct(e,r,s);if(c.complete)return c.rows}throw new ne({kind:"tool",message:"New Vintage returned only a preview of this day, so it wasn't loaded. Try again."})}async function On(e){var t,n;try{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;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}]:[]}catch(r){const s=String((n=r==null?void 0:r.message)!=null?n:""),a=Array.from(s.matchAll(/(?:([^,:]+?) -> )?tenantId "([^"]+)"/g)).map(l=>{var c;return{tenantId:l[2],name:((c=l[1])!=null?c:"").replace(/^.*(?:values|these)[^:]*:\s*/i,"").trim()||l[2]}});if(a.length)return a;throw r}}const Rn="Name not on file";function ye(e){var t;return(t=e.name)!=null?t:Rn}const Dn=/[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\.[A-Z0-9-]+)*\.[A-Z]{2,}/gi,qn=/(?:\+?\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;function dt(e){const t=String(e!=null?e:"").replace(Dn,"[email]").replace(qn,"[phone]").replace(/\s{2,}/g," ").replace(/\s+([,.;:!?])/g,"$1").replace(/([,;:])(?=[.!?]|$)/g,"").replace(/^[\s,;:.-]+|[\s,;:-]+$/g,"");return t||null}const qe=e=>String(e!=null?e:"").trim().replace(/\s+/g," ").toLowerCase();function Vn(e){const t=n=>(n!=null?n:[]).flatMap(r=>{try{return[new RegExp(r,"i")]}catch{return[]}});return{hide:t(e.hide),interests:t(e.interests),vip:t(e.vip),club:t(e.club)}}function Un(e,t){var r;const n={vip:!1,interests:[],clubTags:[],accountTags:[]};for(const s of e){const a=s.trim();if(!a||t.hide.some(c=>c.test(a)))continue;const l=t.interests.map(c=>c.exec(a)).find(Boolean);if(l){n.interests.push(((r=l[1])!=null?r:l[0]).trim());continue}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)}return n}function D(e){if(e==null)return null;const t=String(e).trim();return t||null}function _e(e){if(Array.isArray(e))return e;if(typeof e=="string"&&e.trim().startsWith("["))try{const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]}function le(e){return typeof e=="string"&&!e.trim().startsWith("[")?e.split(",").map(t=>t.trim()).filter(Boolean):_e(e).map(t=>D(t)).filter(t=>!!t)}const Gn=e=>/^rose$/i.test(e)?"Rosé":e,pt=e=>le(e).map(t=>t.toLowerCase());function gt(e,t){if(!/^\d{2}-\d{2}$/.test(e))return null;const n=Number(t.slice(0,4)),s=[n-1,n,n+1].map(a=>`${a}-${e}`).filter(a=>Y(a,0)===a).sort((a,l)=>Math.abs(Ae(t,a))-Math.abs(Ae(t,l)))[0];return s&&Math.abs(Ae(t,s))<=30?s:null}function jn(e,t,n){const r=[],s=D(e.bday_md),a=s?gt(s,t):null;a&&r.push(a===t?"Birthday on this day":`Birthday ${ae(a,n)}`);const l=D(e.club_signup),c=l&&/^\d{4}-\d{2}-\d{2}$/.test(l)?gt(l.slice(5),t):null,d=c&&l?Number(c.slice(0,4))-Number(l.slice(0,4)):0;return c&&d>0&&r.push(`${A(d,"year")} in the club ${c===t?"on this day":ae(c,n)}`),r}function Fn(e,t){var Z,R,K;const n=e.source==="tock"?"tock":"commerce7",r=String((Z=e.arr_id)!=null?Z:""),s=(R=U(e.party))!=null?R:0,a=e.visit==="First visit"?"first":e.visit==="Return"?"return":"unknown",l=Un(le(e.tags),t.rules),c=D(e.club_titles),d=c!==null,m=D(e.signup_tier),$=D(e.churn_tier),w=!d&&pt(m).some(f=>f==="high"||f==="very high"),y=d&&pt($).some(f=>f==="medium"||f==="high"),k=D(e.last_taste),G=k?{title:k,day:D(e.last_taste_date)}:null,q=_e(e.last_taste_items).map(f=>f).map(f=>{var C,N;return{title:(C=D(f==null?void 0:f.title))!=null?C:"",qty:(N=U(f==null?void 0:f.qty))!=null?N:0}}).filter(f=>f.title),z=_e(e.notes).map(f=>f).map(f=>({content:dt(f==null?void 0:f.content),when:zn(f==null?void 0:f.month,f==null?void 0:f.year),original:qe(f==null?void 0:f.content)})).filter(f=>!!f.content).slice(0,3),j=z.map(({content:f,when:C})=>({content:f,when:C})),M=new Set(z.map(f=>f.original)),h=[];for(const f of _e(e.last_taste_notes)){const C=dt(f);if(!(!C||M.has(qe(f)))&&(M.add(qe(f)),h.push(C),h.length===3))break}const _=U(e.price_floor),L=U(e.price_ceiling),I=U(e.avg_unit_price),E=U(e.ltv_cents),O=U(e.order_count);return{key:`${n}:${r}`,source:n,id:r,row:e,minutes:(K=En(e.t))!=null?K:0,party:s,experience:D(e.experience),name:D(e.name),visit:a,vip:l.vip,clubMember:d,clubTitles:c,prospect:w,signupTier:m,atRisk:y,churnTier:$,clubPickup:D(e.next_ship)===t.day,large:s>=t.largeParty,partlyRefunded:e.refund_state==="partial",occasions:jn(e,t.day,t.today),interests:l.interests,clubTags:l.clubTags,accountTags:l.accountTags,varietals:le(e.top_varietals).slice(0,3),wineTypes:le(e.top_wine_types).map(Gn).slice(0,2),vintages:le(e.top_vintages).slice(0,3),appellations:le(e.top_appellations).slice(0,2),lastTaste:G,bought:G?{items:q,total:U(e.last_taste_spend)}:null,orderNotes:h,personalNotes:j,price:_!==null||L!==null||I!==null?{floor:_,ceiling:L,avg:I}:null,lifetime:E!==null&&(E>0||(O!=null?O:0)>0)?{spend:E/100,orders:O}:null,since:D(e.since_year)}}function Zn(e,t){return e.map(n=>Fn(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)}function Bn(e,t){const n=[...e].sort((a,l)=>a.minutes-l.minutes),r=[];for(const a of n){const l=r[r.length-1];l&&a.minutes-l[l.length-1].minutes<t?l.push(a):r.push([a])}return r.flatMap(a=>{var c;if(a[a.length-1].minutes-a[0].minutes<=120)return[a];const l=new Map;for(const d of a){const m=Math.floor(d.minutes/60);l.set(m,[...(c=l.get(m))!=null?c:[],d])}return Array.from(l.values())}).map(a=>({key:String(a[0].minutes),first:a[0].minutes,last:a[a.length-1].minutes,arrivals:a}))}function Hn(e){const t=[],n=e.filter(a=>a.vip).length,r=e.filter(a=>a.large).length,s=e.filter(a=>a.clubPickup).length;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}const ft=[{id:"vip",label:"VIP",test:e=>e.vip},{id:"first",label:"First visit",test:e=>e.visit==="first"},{id:"club",label:"Club member",test:e=>e.clubMember},{id:"large",label:"Large party",test:e=>e.large}];function mt(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().trim()}function ht(e,t,n){var s;const r=mt(t);return r&&!mt((s=e.name)!=null?s:"").includes(r)?!1:ft.every(a=>!n.includes(a.id)||a.test(e))}function Ve(e,t){return e<t?"past":e>t?"future":"today"}function yt(e,t,n){return t!=="today"?{upcoming:e,earlier:[]}:{upcoming:e.filter(r=>r.minutes>=n),earlier:e.filter(r=>r.minutes<n)}}function Yn(e,t,n){if(t!=="today")return null;const r=e.minutes-n;return r>=0&&r<=120?Oe(r):null}function Wn(e){const t=e.slice(0,2).map(ye).join(", ");return e.length>2?`${t} and ${e.length-2} more`:t}function Ue(e,t,n,r,s){return n.length?n.length===1?{label:e,value:ye(n[0]),detail:he(r,n[0].minutes,s)}:{label:t,value:A(n.length,"guest"),detail:Wn(n)}:null}function bt(e,t,n){const r=[];r.push(Ue("Club pickup","Club pickups",e.filter(a=>a.clubPickup),t,n));const s=e.filter(a=>a.large);if(s.length===1)r.push({label:"Large party",value:`Party of ${s[0].party}`,detail:he(t,s[0].minutes,n)});else if(s.length>1){const a=s.reduce((c,d)=>c+d.party,0),l=s.slice(0,2).map(c=>`${X(c.minutes)} for ${c.party}`).join(", ");r.push({label:"Large parties",value:`${A(s.length,"party","parties")}, ${A(a,"guest")}`,detail:`${ae(t,n)}, ${l}${s.length>2?` and ${s.length-2} more`:""}`})}return r.push(Ue("VIP","VIPs",e.filter(a=>a.vip),t,n)),r.push(Ue("Club prospect","Club prospects",e.filter(a=>a.prospect),t,n)),r.filter(a=>a!==null)}function Kn(e,t,n){var c;const r=new Map;for(const d of e){const m=Math.floor(d.minutes/30)*30,$=(c=r.get(m))!=null?c:{parties:0,guests:0};r.set(m,{parties:$.parties+1,guests:$.guests+d.party})}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];if(!s)return null;const[a,l]=s;return{label:"Busiest half hour",value:`${X(a)} to ${X(a+30)}`,detail:`${ae(t,n)}, ${A(l.parties,"party","parties")}, ${A(l.guests,"guest")}`}}function Jn(e,t,n,r){const s={reservations:e.length,guests:e.reduce((m,$)=>m+$.party,0)};if(!e.length)return{...s,message:"No reservations on this day",facts:[]};const a=Ve(t,n);if(a==="past")return{...s,message:"This day has passed",facts:[]};const{upcoming:l,earlier:c}=yt(e,a,r);if(!l.length)return{...s,message:"No more arrivals today",facts:[]};if(c.length){const m=l[0];return{...s,message:null,facts:[{label:"Still to arrive",value:`${l.length} of ${e.length}`},{label:"Next arrival",value:he(t,m.minutes,n),detail:Oe(m.minutes-r)},...bt(l,t,n)]}}const d=bt(l,t,n);if(!d.length){const m=Kn(l,t,n);m&&d.push(m)}return{...s,message:null,facts:d}}function Qn(e){return new Set(e.map(n=>n.source)).size===1?e[0].source:null}const Ge={commerce7:"Commerce7",tock:"Tock"},Xn="Load Guest Prep day";function er(e){var n;const t=((n=e.wineryName)==null?void 0:n.trim())||"this winery";return[`Load Guest Prep for ${e.day} for ${t} (tenantId ${e.tenantId}) through the New Vintage connector in ${e.timeZone}.`,"Use the specification's read-only day query and add only complete safe_tenant_sql results to this existing Guest Prep.","Narrow or split sampled results until every piece is complete.","Select the requested service day, preserve every previously loaded date, and return the updated interactive briefing.","Update both the in-chat and standalone versions when both exist in this conversation.","Preserve the design, confirmed tag rules, read-only access and privacy filtering.","Do not use exports or invent guests."].join(" ")}const vt="0.1.3",be=(e,t)=>String(e!=null?e:"").replace(/\s+/g," ").trim().slice(0,t);function xt(e={},t=[]){var n,r,s,a,l,c;return{packageVersion:vt,hiddenSections:((n=e.hide)!=null?n:[]).slice(0,20).map(d=>be(d,40)),reorderedViews:[],renamedSections:Object.keys((r=e.labels)!=null?r:{}).slice(0,20).map(d=>be(d,40)),themeChanged:Object.keys((s=e.theme)!=null?s:{}).length+Object.keys((a=e.themeDark)!=null?a:{}).length>0,fontsChanged:!!((l=e.fonts)!=null&&l.display||(c=e.fonts)!=null&&c.body),titleChanged:!!e.title,customCards:t.slice(0,10).map(d=>{var m;return{title:be(d.title,80),purpose:be(d.purpose,160),view:be((m=d.after)!=null?m:"page",20)}})}}const wt="guest-prep.tenant",kt=e=>`guest-prep:${e}`;function tr(){const e=globalThis.storage;return e&&typeof e.get=="function"&&typeof e.set=="function"?e:null}function nr(){try{const e=globalThis.localStorage,t="__nv_probe__";return e.setItem(t,"1"),e.removeItem(t),e}catch{return null}}function rr(e){return typeof e=="string"?e:e&&typeof e=="object"&&typeof e.value=="string"?e.value:null}function ar(e){if(e)return{adapter:e,mode:"artifact"};const t=tr();if(t)return{mode:"artifact",adapter:{get:async(r,s)=>rr(await t.get(r,s)),set:async(r,s,a)=>{await t.set(r,s,a)}}};const n=nr();return n?{mode:"browser",adapter:{get:async r=>n.getItem(r),set:async(r,s)=>n.setItem(r,s)}}:{adapter:null,mode:"none"}}async function St(e,t){if(!e)return null;try{return await e.get(t,!1)}catch{return null}}async function $t(e,t,n){if(e)try{await e.set(t,n,!1)}catch{}}function sr(e){if(!e)return null;try{const t=JSON.parse(e);return typeof t.day!="string"||typeof t.savedOn!="string"?null:{day:t.day,guest:typeof t.guest=="string"?t.guest:null,savedOn:t.savedOn}}catch{return null}}const or={"surface-base":"#f7f5f1","surface-subtle":"#f2efea","surface-raised":"#ffffff","text-primary":"#1a1917","text-secondary":"#4f4a43","text-tertiary":"#6b655d","border-subtle":"#ebe7df","border-default":"#ddd8ce","border-strong":"#8d877f","action-primary-bg":"#0b6623","action-primary-fg":"#ffffff","action-primary-hover":"#155826","focus-ring-color":"#1a6b30","status-warning":"#9c6110","status-warning-bg":"#fff7e7","font-display":"'Newsreader', Georgia, serif","font-body":"'Be Vietnam Pro', system-ui, sans-serif"},ir={"surface-base":"#171614","surface-subtle":"#24211f","surface-raised":"#34302d","text-primary":"#f5f3ef","text-secondary":"#d0c8bd","text-tertiary":"#b4aba0","border-subtle":"#3b3632","border-default":"#4c4742","border-strong":"#8a8279","action-primary-bg":"#57bd76","action-primary-fg":"#06210d","action-primary-hover":"#7ecb93","focus-ring-color":"#8cd0a0","status-warning":"#f0c36a","status-warning-bg":"rgba(240,195,106,.16)"},lr=/^[a-z][a-z0-9-]{0,40}$/,cr=/^[^;{}<>\\]{1,120}$/;function Tt(e){return Object.entries(e).filter(([t,n])=>lr.test(t)&&typeof n=="string"&&cr.test(n)).map(([t,n])=>`--${t}:${n};`).join("")}function ur(e){return`https://fonts.googleapis.com/css2?${e.map(n=>`family=${encodeURIComponent(n).replace(/%20/g,"+")}:wght@300;400;500;600`).join("&")}&display=swap`}function dr(e={},t={}){const n=Tt({...or,...e}),r=Tt({...ir,...t});return`:root,.nvgp{${n}}@media (prefers-color-scheme: dark){:root,.nvgp{${r}}}`}const se="120ms cubic-bezier(0.2,0,0.2,1)",pr=`
|
|
2
2
|
html,body{margin:0;background:var(--surface-base,#f7f5f1)}
|
|
3
3
|
.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}
|
|
4
4
|
.nvgp *{box-sizing:border-box}
|
|
@@ -19,7 +19,7 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
|
|
|
19
19
|
.nvgp .storage-note{font-size:13px;color:var(--text-tertiary);margin:0 0 8px}
|
|
20
20
|
.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))}
|
|
21
21
|
.nvgp .day-wrap{position:relative;max-width:100%}
|
|
22
|
-
.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 ${
|
|
22
|
+
.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 ${se}}
|
|
23
23
|
.nvgp .day-button:hover{border-color:var(--border-strong)}
|
|
24
24
|
.nvgp .day-button svg{flex:none;color:var(--text-secondary)}
|
|
25
25
|
.nvgp .day-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
@@ -62,24 +62,29 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
|
|
|
62
62
|
.nvgp .search:focus-within{outline:2px solid var(--focus-ring-color);outline-offset:2px}
|
|
63
63
|
.nvgp .search-input{flex:1;min-width:0;border:0;background:none;color:var(--text-primary);font:inherit;font-size:15px;outline:none}
|
|
64
64
|
.nvgp .filters{display:flex;flex-wrap:wrap;gap:8px}
|
|
65
|
-
.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 ${
|
|
65
|
+
.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 ${se},border-color ${se}}
|
|
66
66
|
.nvgp .filter-chip:hover{border-color:var(--text-tertiary)}
|
|
67
67
|
.nvgp .filter-chip[aria-pressed="true"]{background:var(--action-primary-bg);border-color:var(--action-primary-bg);color:var(--action-primary-fg)}
|
|
68
|
-
.nvgp .
|
|
69
|
-
.nvgp .
|
|
70
|
-
.nvgp .
|
|
71
|
-
.nvgp .
|
|
72
|
-
.nvgp .
|
|
73
|
-
.nvgp .
|
|
74
|
-
.nvgp .seat-
|
|
75
|
-
.nvgp .seat-
|
|
76
|
-
.nvgp .seat-
|
|
68
|
+
.nvgp .list-results{padding:12px 16px 16px}
|
|
69
|
+
.nvgp .list-tools{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 16px;min-height:32px;padding:0 4px 8px;font-size:14px;color:var(--text-secondary)}
|
|
70
|
+
.nvgp .list-tools-actions{display:flex;gap:16px;margin-left:auto}
|
|
71
|
+
.nvgp .link-button{min-height:32px;padding:0;border:0;background:none;color:var(--action-primary-bg);font:inherit;font-size:14px;font-weight:500;cursor:pointer}
|
|
72
|
+
.nvgp .seatings{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
|
|
73
|
+
.nvgp .seating{border:1px solid var(--border-default);border-radius:12px;background:var(--surface-raised);overflow:clip}
|
|
74
|
+
.nvgp .seat-head{position:sticky;top:var(--seat-top,0px);z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;width:100%;min-height:52px;padding:10px 16px;border:0;background:var(--surface-subtle);color:var(--text-primary);font:inherit;text-align:left;cursor:pointer;transition:background ${se}}
|
|
75
|
+
.nvgp .seat-head:hover{background:var(--border-subtle)}
|
|
76
|
+
.nvgp .seating[data-open="true"] .seat-head{border-bottom:1px solid var(--border-default)}
|
|
77
|
+
.nvgp .seating[data-open="false"] .seat-head{position:static}
|
|
78
|
+
.nvgp .seat-chevron{display:inline-flex;flex:none;color:var(--text-secondary);transition:transform ${se}}
|
|
79
|
+
.nvgp .seating[data-open="false"] .seat-chevron{transform:rotate(-90deg)}
|
|
80
|
+
.nvgp .seat-time{font:400 20px/1.25 var(--font-display);font-variant-numeric:tabular-nums}
|
|
81
|
+
.nvgp .seat-counts{margin-left:auto;font-size:13px;color:var(--text-secondary);text-align:right;font-variant-numeric:tabular-nums}
|
|
82
|
+
.nvgp .seat-marker{flex:none;padding:0 10px;border-radius:999px;font-size:12px;font-weight:600;line-height:22px}
|
|
77
83
|
.nvgp .seat-now{background:var(--action-primary-bg);color:var(--action-primary-fg)}
|
|
78
|
-
.nvgp .seat-next{border:1px solid var(--action-primary-bg);color:var(--action-primary-bg)}
|
|
79
|
-
.nvgp .
|
|
80
|
-
.nvgp .
|
|
81
|
-
.nvgp .
|
|
82
|
-
.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 ${be}}
|
|
84
|
+
.nvgp .seat-next{border:1px solid var(--action-primary-bg);color:var(--action-primary-bg);line-height:20px}
|
|
85
|
+
.nvgp .seating .rows li:last-child .row{border-bottom:0}
|
|
86
|
+
.nvgp .seatings .earlier-head{padding:8px 4px 0;background:none;border:0}
|
|
87
|
+
.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 ${se}}
|
|
83
88
|
.nvgp .row:hover{background:var(--surface-subtle)}
|
|
84
89
|
.nvgp .row[aria-current="true"]{border-left-color:var(--action-primary-bg);background:var(--surface-subtle)}
|
|
85
90
|
.nvgp .row-time{font-weight:600;font-variant-numeric:tabular-nums}
|
|
@@ -100,7 +105,7 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
|
|
|
100
105
|
.nvgp .empty-title{font:300 22px/1.3 var(--font-display);color:var(--text-primary);margin:0 0 8px}
|
|
101
106
|
.nvgp .note{font-size:14px;color:var(--text-secondary);margin:8px 0 0}
|
|
102
107
|
.nvgp .problem{color:var(--status-warning)}
|
|
103
|
-
.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 ${
|
|
108
|
+
.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 ${se}}
|
|
104
109
|
.nvgp .button:hover{background:var(--action-primary-hover)}
|
|
105
110
|
.nvgp .button:disabled{opacity:.55;cursor:default}
|
|
106
111
|
.nvgp .button-quiet{background:transparent;color:var(--text-primary);border:1px solid var(--border-strong)}
|
|
@@ -172,13 +177,15 @@ html,body{margin:0;background:var(--surface-base,#f7f5f1)}
|
|
|
172
177
|
.nvgp .row{grid-template-columns:72px minmax(0,1fr) auto;padding:12px 16px;min-height:44px}
|
|
173
178
|
.nvgp .earlier-head{padding:8px 16px}
|
|
174
179
|
.nvgp .finder{padding:12px 16px}
|
|
175
|
-
.nvgp .search,.nvgp .filter-chip,.nvgp .link-button
|
|
176
|
-
.nvgp .
|
|
177
|
-
.nvgp .seat-head{padding:8px
|
|
180
|
+
.nvgp .search,.nvgp .filter-chip,.nvgp .link-button{min-height:44px}
|
|
181
|
+
.nvgp .list-results{padding:8px 8px 12px}
|
|
182
|
+
.nvgp .seat-head{padding:8px 12px}
|
|
183
|
+
.nvgp .seating .row{grid-template-columns:76px minmax(0,1fr) auto;gap:8px;padding:12px}
|
|
184
|
+
.nvgp .seat-counts{flex-basis:100%;margin-left:28px;text-align:left}
|
|
178
185
|
.nvgp .panel-body{padding:0 16px 24px}
|
|
179
186
|
.nvgp .fact-row{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
180
187
|
.nvgp .fact-grid{grid-template-columns:minmax(0,1fr)}
|
|
181
188
|
.nvgp .custom-card{padding:12px 16px}
|
|
182
189
|
}
|
|
183
190
|
@media (prefers-reduced-motion: reduce){.nvgp *{transition-duration:0ms!important;animation:none!important}}
|
|
184
|
-
`,pr=["summary","guestList"],Tt=["reservation","talkAbout","newVintageProfile","relationship","headsUp","personalNotes"],gr=[...pr,...Tt],oe={timeZone:"America/Los_Angeles",largeParty:10,seatingGapMinutes:45,tagRules:{interests:["^(?:client\\s+)?interest(?:ed)?(?:\\s+in)?\\s*[-–—:]\\s*(.+)$"],vip:["\\bvip\\b"],club:["(?:member|membership|club)"],hide:["^\\*+\\s*test\\s*\\*+$","^test\\b"]}};function i(e,t=null,...n){const r=document.createElement(e);for(const[s,a]of Object.entries(t!=null?t:{}))a==null||a===!1||(typeof a=="function"?r.addEventListener(s.replace(/^on/,"").toLowerCase(),a):a===!0?r.setAttribute(s,""):r.setAttribute(s,String(a)));return Nt(r,n),r}function Nt(e,t){for(const n of t)n==null||n===!1||(Array.isArray(n)?Nt(e,n):e.append(n instanceof Node?n:String(n)))}const fr="http://www.w3.org/2000/svg";function $t(e,t={},...n){const r=document.createElementNS(fr,e);for(const[s,a]of Object.entries(t))r.setAttribute(s,String(a));return r.append(...n),r}const mr={"chevron-left":["M15 18l-6-6 6-6"],"chevron-right":["M9 18l6-6-6-6"],"chevron-down":["M6 9l6 6 6-6"],calendar:["M8 2v4","M16 2v4","M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z","M3 10h18"],"message-circle":["M7.9 20A9 9 0 1 0 4 16.1L2 22z"],heart:["M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7z"],"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"],"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"],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"],search:["M19 11a8 8 0 1 1-16 0 8 8 0 0 1 16 0z","M21 21l-4.3-4.3"],x:["M18 6L6 18","M6 6l12 12"],"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"]};function B(e,t=16){var n;return $t("svg",{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"},...((n=mr[e])!=null?n:[]).map(r=>$t("path",{d:r})))}function P(e,t="note"){return i("p",{class:t},e)}function S(e,t,n,r=""){return i("div",{class:`fact${r?` ${r}`:""}`},i("div",{class:"fact-label"},e),i("div",{class:"fact-value"},t),n?i("div",{class:"fact-detail"},n):null)}function Me(e,t="neutral"){return i("div",{class:"chips"},e.map(n=>i("span",{class:`chip chip-${t}`},n)))}function At(e){return i("span",{class:`badge${e==="VIP"?" badge-vip":""}`},e)}function Mt(e){return Number(Z(`${Te(e,1)}-01`,-1).slice(8,10))}function _t(e,t){const n=Te(e.slice(0,7),t);return`${n}-${String(Math.min(Number(e.slice(8,10)),Mt(n))).padStart(2,"0")}`}function hr(e){const t=`${e}-01`,n=Array.from({length:fe(t)},()=>null);for(let r=0;r<Mt(e);r+=1)n.push(Z(t,r));return n}function yr(e,t){switch(t){case"ArrowLeft":return Z(e,-1);case"ArrowRight":return Z(e,1);case"ArrowUp":return Z(e,-7);case"ArrowDown":return Z(e,7);case"PageUp":return _t(e,-1);case"PageDown":return _t(e,1);case"Home":return Z(e,-fe(e));case"End":return Z(e,6-fe(e));default:return null}}function br(e){const{state:t}=e,n=hr(t.month).map((a,l)=>{if(!a)return i("span",{"aria-hidden":"true","data-blank":l});const c=a===t.focus;return i("button",{type:"button",class:`cal-day${a===e.today?" is-today":""}`,"aria-label":Pe(a,e.today)+(a===e.today?", today":""),"aria-selected":a===e.selected?"true":"false","aria-current":a===e.today?"date":null,tabindex:c?0:-1,"data-day":a,"data-fid":c?"cal-focus":null,onclick:()=>e.onPick(a)},String(Number(a.slice(8,10))))}),r=i("div",{class:"cal-grid",role:"group","aria-label":st(t.month)},Ce.map(a=>i("span",{class:"cal-dow","aria-hidden":"true"},a.slice(0,2))),n);r.addEventListener("keydown",a=>{const l=a.key,c=yr(t.focus,l);c&&(a.preventDefault(),e.onFocus(c))});const s=i("div",{class:"calendar",role:"dialog","aria-label":"Choose a day"},i("div",{class:"cal-head"},i("button",{type:"button",class:"icon-button","aria-label":"Previous month",onclick:()=>e.onMonth(Te(t.month,-1))},B("chevron-left")),i("span",{class:"cal-title","aria-live":"polite"},st(t.month)),i("button",{type:"button",class:"icon-button","aria-label":"Next month",onclick:()=>e.onMonth(Te(t.month,1))},B("chevron-right"))),r);return s.addEventListener("keydown",a=>{a.key==="Escape"&&(a.preventDefault(),a.stopPropagation(),e.onClose())}),s}const vr="https://newvintage.ai/?utm_source=guest-prep&utm_medium=referral&utm_campaign=guest-prep&utm_content=season-bar-logo",xr={summary:"Summary",guestList:"Everyone coming in",reservation:"Reservation",talkAbout:"Talk about",newVintageProfile:"New Vintage profile",relationship:"Relationship",headsUp:"Heads-up",personalNotes:"Personal notes"},wr={reservation:"calendar",talkAbout:"message-circle",newVintageProfile:"wine",relationship:"heart",headsUp:"triangle-alert",personalNotes:"sticky-note"},Et={newVintageProfile:"From New Vintage's analysis of their wine purchases."};function Ue(e,t){var r,s;const n=(s=(r=e.options.customize)==null?void 0:r.labels)==null?void 0:s[t];return typeof n=="string"&&n.trim()?n.trim():xr[t]}function Ge(e,t){var n,r;return((r=(n=e.options.customize)==null?void 0:n.hide)!=null?r:[]).includes(t)}const kr=()=>Se()==="claude";function Sr(e){const t=e.dayState;let n="idle",r,s=null;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("div",{class:`status status-${n}`,role:"status","aria-live":"polite"},i("span",{class:"dot","aria-hidden":"true"}),s?[i("span",{class:"status-long"},r),i("span",{class:"status-short","aria-hidden":"true"},s)]:i("span",null,r))}function Tr(e,t){if(!e.wineries||e.wineries.length<2)return null;const n=i("select",{id:"winery-picker","data-fid":"winery-picker",onchange:r=>t.chooseWinery(r.target.value)},i("option",{value:"",disabled:!0,selected:!e.tenantId},"Choose a winery"),e.wineries.map(r=>i("option",{value:r.tenantId,selected:r.tenantId===e.tenantId},r.name)));return i("label",{class:"picker",for:"winery-picker"},"Winery",n)}function Nr(e,t){return i("header",{class:"header"},i("a",{class:"logo",href:vr,target:"_blank",rel:"noopener","aria-label":"New Vintage"},i("span",{class:"logo-mark","aria-hidden":"true"},"New Vintage")),i("div",{class:"heading"},i("h1",null,e.title),Sr(e),Tr(e,t)))}function $r(e,t){const n=e.day===e.today?"Today":e.day===Z(e.today,1)?"Tomorrow":null,r=i("button",{type:"button",class:"day-button","data-fid":"day-button","aria-haspopup":"dialog","aria-expanded":e.calendar.open?"true":"false",onclick:()=>t.toggleCalendar()},B("calendar",18),i("span",{class:"day-label"},Pe(e.day,e.today)),n?i("span",{class:"day-relative"},n):null,B("chevron-down",16)),s=e.calendar.open?br({state:e.calendar,selected:e.day,today:e.today,onPick:t.pickDay,onFocus:t.focusDay,onMonth:t.showMonth,onClose:t.closeCalendar}):null;return i("div",{class:"daybar"},i("div",{class:"day-wrap"},r,s),e.dayNote?i("span",{class:`day-note${e.dayNote.problem?" problem":""}`,"aria-live":"polite"},e.dayNote.text):null)}function Ar(e){if(e.dayState.status!=="ready"||Ge(e,"summary"))return null;const t=Kn(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));return i("section",{class:"card summary","data-section":"summary","aria-label":Ue(e,"summary")},i("div",{class:"numbers"},n(t.reservations,"Reservation","Reservations"),n(t.guests,"Guest","Guests")),i("div",{class:"facts"},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":""))),S("Now",Q(e.nowMinutes),ae(e.today,e.today),"now"))}function Mr(e){const t=[];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(At)}function _r(e,t,n,r,s){var c;const a=s?null:Hn(n,e.kind,e.nowMinutes),l=[n.experience,r?Ve[n.source]:null].filter(Boolean).join(", ");return i("li",null,i("button",{type:"button",class:`row${s?" row-earlier":""}`,"data-key":n.key,"data-fid":`row-${n.key}`,"aria-current":((c=e.selected)==null?void 0:c.key)===n.key?"true":"false",onclick:()=>t.select(n.key)},i("span",{class:"row-when"},i("span",{class:"row-time"},Q(n.minutes)),i("span",{class:"row-date",style:"display:block"},ae(e.day,e.today)),a?i("span",{class:"row-soon soon",style:"display:block"},a):null),i("span",{style:"min-width:0"},i("span",{class:"row-name"},i("span",null,he(n)),Mr(n)),l?i("span",{class:"row-experience",style:"display:block"},l):null),i("span",{class:"row-party"},A(n.party,"guest"))))}function Er(){return i("div",{"aria-hidden":"true"},[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"}))))}function Cr(e){const t=e.request,n=Pe(e.day,e.today);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("div",null,P(`Copy this request into the chat to load ${n}.`),i("textarea",{class:"request-text",readonly:!0,rows:6,"aria-label":"Request to copy",onfocus:r=>r.target.select()},t.text)):(t==null?void 0:t.kind)==="failed"?P(`The request wasn't sent. ${t.message}`,"note problem"):null}function Pr(e,t){var s;const n=((s=e.request)==null?void 0:s.kind)==="pending",r=kr()?"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.";return i("div",{class:"empty"},i("p",{class:"empty-title"},"This day isn't loaded yet"),P(r),i("div",{class:"actions"},i("button",{type:"button",class:"button","data-fid":"load-day",disabled:n,"aria-busy":n?"true":"false",onclick:()=>t.requestDay()},n?"Sending…":"Load this day")),Cr(e))}function zr(e,t){if(Ge(e,"guestList"))return null;const n=e.dayState,r=Ue(e,"guestList");let s=null,a;if(n.status==="loading")a=Er();else if(n.status==="choose")a=i("div",{class:"empty"},i("p",{class:"empty-title"},"Choose a winery"),n.message?P(n.message):null);else if(n.status==="unloaded")a=Pr(e,t);else if(n.status==="failed")a=i("div",{class:"empty"},i("p",{class:"empty-title"},"This day couldn't load"),P(n.message,"note problem"),i("div",{class:"actions"},i("button",{type:"button",class:"button","data-fid":"retry",onclick:()=>t.retry()},"Try again")));else if(!n.arrivals.length)a=i("div",{class:"empty"},i("p",{class:"empty-title"},"No one is coming in on this day."));else{const l=Jn(n.arrivals);l&&(s=`All from ${Ve[l]}`),a=i("div",null,Lr(e,t),Pt(e,t,n.arrivals,!l))}return i("section",{class:"card list-card","data-section":"guestList","aria-busy":n.status==="loading"?"true":"false"},i("div",{class:"card-head"},i("h2",null,r),s?i("span",{class:"card-aside"},s):null),a)}function Lr(e,t){return i("div",{class:"finder"},i("label",{class:"search"},B("search",16),i("span",{class:"sr-only"},"Search guests by name"),i("input",{type:"search",class:"search-input",placeholder:"Search guests",autocomplete:"off",spellcheck:"false",value:e.query,"data-fid":"search",oninput:n=>t.search(n.target.value)})),i("div",{class:"filters",role:"group","aria-label":"Show only"},gt.map(n=>i("button",{type:"button",class:"filter-chip","aria-pressed":e.filters.includes(n.id)?"true":"false","data-filter":n.id,"data-fid":`filter-${n.id}`,onclick:()=>t.toggleFilter(n.id)},n.label))))}function Ct(e){return e.first===e.last?Q(e.first):`${Q(e.first)} to ${Q(e.last)}`}function Ir(e,t,n){const r=t.reduce((a,l)=>a+l.party,0);return[n?`${t.length} of ${A(e.arrivals.length,"party","parties")}`:A(t.length,"party","parties"),A(r,"guest"),Bn(t)].filter(Boolean).join(", ")}function Pt(e,t,n,r){const s=!!e.query.trim()||e.filters.length>0,a=Zn(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=>Re(y,e.query,e.filters)).length,M=y=>{const _=y.arrivals.filter(R=>Re(R,e.query,e.filters));if(!_.length)return null;const E=c(y),I=!E||e.openEarlier.includes(y.key),N=y===d?y.first<=e.nowMinutes?"Now":"Next":null,q=i("span",{class:"seat-time"},Ct(y)),H=i("span",{class:"seat-counts"},Ir(y,_,s)),O=E?i("button",{type:"button",class:"seat-head seat-toggle","aria-expanded":I?"true":"false","data-fid":`seating-${y.key}`,onclick:()=>t.toggleSeating(y.key)},i("span",{class:"seat-chevron"},B(I?"chevron-down":"chevron-right",16)),i("span",{class:"seat-label"},q,H)):i("div",{class:"seat-head"},i("span",{class:"seat-label"},i("h3",{class:"seat-time"},Ct(y)),H),N?i("span",{class:`seat-marker seat-${N.toLowerCase()}`},N):null);return i("li",{class:`seating${E?" seating-earlier":""}`,"data-seating":y.key,"data-state":E?"earlier":N?N.toLowerCase():"later"},O,I?i("ul",{class:"rows"},_.map(R=>_r(e,t,R,r,l&&R.minutes<e.nowMinutes))):null)},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(E=>Re(E,e.query,e.filters)).length,0);return i("div",{class:"list-results","aria-live":"polite"},s?i("div",{class:"filter-status"},i("span",null,m?`${m} of ${A(n.length,"party","parties")}`:"No guests match."),i("button",{type:"button",class:"link-button","data-fid":"clear-filters",onclick:()=>t.clearFilters()},"Clear filters")):null,k.length||h.length?i("ol",{class:"seatings"},k,h.length?i("li",{class:"earlier-head"},"Earlier today",i("span",{class:"count","aria-label":A(x,"reservation")},String(x))):null,h):null)}function Or(e){return e.map(t=>i("p",{class:"soft"},t.text,t.when?i("span",{class:"soft-when"},t.when):null))}function Rr(e){const t=e.bought;return t?t.items.length?i("ul",{class:"bought"},t.items.map(n=>i("li",null,i("span",null,n.title),i("span",{class:"qty"},`× ${n.qty}`))),t.total!==null?i("li",{class:"total"},i("span",null,"Total"),i("span",null,F(t.total))):null):i("p",{class:"visit-muted"},"Nothing beyond the tasting"):null}function Dr(e,t){const n=t.lastTaste,r=[];if(n){const l=n.day?`${at(n.day,e.today)}, ${Cn(n.day,e.today)}`:null;r.push(i("div",{class:"visit-part visit-taste"},i("p",{class:"visit-title"},n.title),l?i("p",{class:"visit-muted"},l):null))}const s=Rr(t);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;const a=r.flatMap((l,c)=>c?[i("hr",{class:"visit-divider"}),l]:[l]);return i("div",{class:"fact fact-visit"},i("div",{class:"fact-label"},"Last visit"),i("div",{class:"visit"},a))}function qr(e){const{floor:t,ceiling:n}=e;return t!==null&&n!==null?t===n?F(t):`${F(t)} to ${F(n)}`:t!==null?`From ${F(t)}`:n!==null?`Up to ${F(n)}`:e.avg!==null?F(e.avg):null}function Vr(e,t,n){var a,l;const r=[],s=c=>{c&&r.push(c)};switch(n){case"reservation":{const c=e.kind==="today"&&t.minutes>=e.nowMinutes;r.push(i("div",{class:"fact-row"},S("Arrives",me(e.day,t.minutes,e.today),c?ze(t.minutes-e.nowMinutes):null,c?"fact-countdown":""),S("Party",A(t.party,"guest")),S("Booked via",Ve[t.source]))),s(t.experience?S("Experience",t.experience):null);break}case"talkAbout":{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",Me(t.interests)):null),s(Dr(e,t));break}case"newVintageProfile":{const c=t.price?qr(t.price):null,d=[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 ${F(t.price.avg)}`:null):null,t.wineTypes.length?S("Wine types",t.wineTypes.join(", ")):null,t.varietals.length?S("Favorite varietals",t.varietals.join(", ")):null,t.vintages.length?S("Vintages",t.vintages.join(", ")):null,t.appellations.length?S("Appellations",t.appellations.join(", ")):null].filter(m=>m!==null);d.length&&r.push(i("div",{class:"fact-grid"},d));break}case"relationship":s(t.since?S("Customer since",t.since):null),s(t.lifetime?S("Lifetime spend",F(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",it(t.signupTier)):null),s(t.atRisk&&t.churnTier?S("Membership at risk",it(t.churnTier)):null),s(t.clubTags.length?S("Club tags",Me(t.clubTags)):null);break;case"headsUp":s(t.accountTags.length?S("Account tags",Me(t.accountTags,"warning")):null);break;case"personalNotes":r.push(...Or(t.personalNotes.map(c=>({text:c.content,when:c.when}))));break}return r}function Ur(e){const t=[];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(At))}const Gr=["reservation","talkAbout","newVintageProfile","relationship","headsUp","personalNotes"];function jr(e,t,n){var d,m,M;const r=e.selected;if(!r||e.dayState.status!=="ready")return null;const s=[];for(const k of Gr){if(!Ge(e,k)){const h=Vr(e,r,k);h.length&&s.push(i("section",{class:"psec","data-section":k},i("h3",{class:"psec-title"},i("span",{class:`tile${k==="headsUp"?" tile-warning":""}`},B((d=wr[k])!=null?d:"",16)),Ue(e,k)),Et[k]?i("p",{class:"psec-source"},Et[k]):null,i("div",{class:"psec-facts"},h)))}s.push(...n(k))}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("div",{class:"research"},i("button",{type:"button",class:"button button-quiet","data-fid":"research",disabled:l,"aria-busy":l?"true":"false",onclick:()=>t.research()},B("refresh-cw",16),l?"Researching…":"Research this guest again"),(a==null?void 0:a.status)==="failed"?P((M=a.message)!=null?M:"This guest couldn't refresh.","note problem"):null):i("div",{class:"research"},i("button",{type:"button",class:"button button-quiet",disabled:!0,"aria-describedby":"research-reason"},B("refresh-cw",16),"Research this guest again"),i("p",{class:"note",id:"research-reason"},"Ask in this chat to refresh this guest."));return i("aside",{class:"card panel","aria-label":`Guest: ${he(r)}`,"data-key":r.key},i("div",{class:"panel-head"},i("div",{class:"handle","aria-hidden":"true"}),i("div",{class:"panel-head-row"},i("h2",{class:"panel-name"},he(r)),i("button",{type:"button",class:"icon-button close","aria-label":"Close","data-fid":"close-sheet",onclick:()=>t.closeSheet()},B("x",20))),Ur(r)),i("div",{class:"panel-body"},s,c))}const zt=900*1e3;function je(e){switch(e.kind){case"unavailable":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.";case"approval":return"Loading a day needs your permission to use the New Vintage connector. Allow it for this page, then try again.";case"reconnect":return xn();case"temporary":return"New Vintage didn't answer. Try again in a moment.";case"needs_update":return"This page needs an update. Ask in this chat to update it.";case"not_reconciled":return"This day didn't load completely. Try again.";case"tool":return e.message}}function Fr(e,t){var Bt,Ht,Yt,Wt,Kt,Jt,Qt,Xt,en,tn,nn,rn,an,sn,on,ln,cn,un,dn,pn;const n=(Bt=t.now)!=null?Bt:(()=>new Date),r={...oe,...(Ht=t.settings)!=null?Ht:{},tagRules:{...oe.tagRules,...(Wt=(Yt=t.settings)==null?void 0:Yt.tagRules)!=null?Wt:{}}},s=Mn(t.settings?t.settings.timeZone:oe.timeZone),a=qn(r.tagRules),l=Number(r.largeParty)>0?Number(r.largeParty):oe.largeParty,c=Number(r.seatingGapMinutes)>0?Number(r.seatingGapMinutes):(Kt=oe.seatingGapMinutes)!=null?Kt:45,d=bt(t.customize,t.cards),m=rr(t.storage),M=()=>tt(n(),s);let k=M().day,h=k,x=(Jt=t.tenantId)!=null?Jt:null,y=(Qt=t.wineryName)!=null?Qt:null,_=null,E=null,I=!0,N=null,q=null,H=!1,O=0;const R=new Map,Y=new Set,G=new Map;let X=null,z=null,W=!1;const g=new Map;let C=null,$={open:!1,month:h.slice(0,7),focus:h},V=null,Fe="",le=[],se=[],Ze=null,_e=null,ve=!1;const Lt=new Map;e.innerHTML="";const Br=[(tn=(en=(Xt=t.customize)==null?void 0:Xt.fonts)==null?void 0:en.display)!=null?tn:"Newsreader",(an=(rn=(nn=t.customize)==null?void 0:nn.fonts)==null?void 0:rn.body)!=null?an:"Be Vietnam Pro"],It=i("link",{rel:"stylesheet",href:cr(Br.filter(o=>/^[A-Za-z0-9 ]{1,40}$/.test(o)))}),Be={};(on=(sn=t.customize)==null?void 0:sn.fonts)!=null&&on.display&&(Be["font-display"]=`'${t.customize.fonts.display}', Georgia, serif`),(cn=(ln=t.customize)==null?void 0:ln.fonts)!=null&&cn.body&&(Be["font-body"]=`'${t.customize.fonts.body}', system-ui, sans-serif`);const Ot=i("style",null,ur({...Be,...(dn=(un=t.customize)==null?void 0:un.theme)!=null?dn:{}},(pn=t.customize)==null?void 0:pn.themeDark)+dr);document.head.append(It,Ot);const U=i("div",{class:"nvgp"});e.append(U);const Rt=()=>Vt();window.addEventListener("resize",Rt);const Dt=o=>{o.key==="Escape"&&($.open?te.closeCalendar():W&&te.closeSheet())},qt=o=>{var p;if(!$.open)return;const u=o.target;(p=u==null?void 0:u.closest)!=null&&p.call(u,".day-wrap")||($={...$,open:!1},w())};document.addEventListener("keydown",Dt),document.addEventListener("mousedown",qt);function Vt(){var f;const o=U.querySelector(".daybar");o&&U.style.setProperty("--daybar-h",`${o.offsetHeight}px`);const u=U.querySelector(".summary");U.style.setProperty("--summary-h",`${u?u.offsetHeight+16:0}px`);const p=u&&window.getComputedStyle(u).position==="sticky"?u.offsetHeight:0;U.style.setProperty("--seat-top",`${((f=o==null?void 0:o.offsetHeight)!=null?f:0)+p}px`)}const ee=()=>!!(E&&N&&x);function Hr(o){var p,f;const u=(p=t.days)==null?void 0:p[o];return u&&Array.isArray(u.arrivals)?{rows:u.arrivals,loadedAt:String((f=u.loadedAt)!=null?f:""),live:!1}:null}function He(o){var u;return(u=R.get(o))!=null?u:Hr(o)}function Ut(){if(!x)return I?{status:"loading"}:{status:"choose",message:X};const o=He(h);if(o)return{status:"ready",arrivals:Fn(o.rows,{day:h,today:k,largeParty:l,rules:a}),rows:o.rows,loadedAt:o.loadedAt,live:o.live};if(I||Y.has(h))return{status:"loading"};const u=G.get(h);return u?{status:"failed",message:u}:ee()?{status:"loading"}:{status:"unloaded"}}function Yr(o,u){var f,v;const{upcoming:p}=mt(o,De(h,k),u);return(v=(f=p[0])!=null?f:o[0])!=null?v:null}function Wr(o){const u=G.get(h);if(o&&u)return{text:u,problem:!0};if(!o)return null;if(Y.has(h))return{text:"Checking for changes",problem:!1};if(o.live)return{text:"Up to date",problem:!1};const p=new Date(o.loadedAt);if(Number.isNaN(p.getTime()))return{text:"Loaded in the chat",problem:!1};const f=tt(p,s);return{text:`Loaded in the chat ${me(f.day,f.minutes,k)}`,problem:!1}}function xe(){var v,b,T,ue;const o=M(),u=Ut(),p=u.status==="ready"?u.arrivals:[],f=(v=p.find(j=>j.key===z))!=null?v:Yr(p,o.minutes);return{options:t,title:((T=(b=t.customize)==null?void 0:b.title)==null?void 0:T.trim())||(y?`${y} Guest Prep`:"Guest Prep"),timeZone:s,today:k,nowMinutes:o.minutes,day:h,kind:De(h,k),live:ee(),dayState:u,selected:f,sheetOpen:W,request:(ue=g.get(h))!=null?ue:null,research:C,calendar:$,dayNote:Wr(x?He(h):null),wineries:_,tenantId:x,storageNote:m.mode==="none"?"Changes won't be saved in this browser.":null,seatingGap:c,query:Fe,filters:le,openEarlier:se}}const Kr=()=>typeof window.matchMedia=="function"&&window.matchMedia("(max-width: 900px)").matches,te={toggleCalendar:()=>{$=$.open?{...$,open:!1}:{open:!0,month:h.slice(0,7),focus:h},V=$.open?"cal-focus":"day-button",w()},closeCalendar:()=>{$={...$,open:!1},V="day-button",w()},pickDay:o=>{$={open:!1,month:o.slice(0,7),focus:o},V="day-button",o!==h&&(h=o,z=null,se=[],W=!1,C=null,Gt()),w();const u=R.get(h);ee()&&(!u||Date.parse(u.loadedAt)<n().getTime()-zt)&&ce()},focusDay:o=>{$={...$,focus:o,month:o.slice(0,7)},V="cal-focus",w()},showMonth:o=>{var f;const p=(f=[Number($.focus.slice(8,10)),30,29,28].map(v=>`${o}-${String(v).padStart(2,"0")}`).find(nt))!=null?f:`${o}-01`;$={open:!0,month:o,focus:p},w()},select:o=>{z=o,W=!0,Kr()&&(V="close-sheet"),Gt(),w()},closeSheet:()=>{W=!1,V=z?`row-${z}`:null,w()},retry:()=>void(x?ce():Ft()),requestDay:()=>void ta(),research:()=>void ea(),chooseWinery:o=>void na(o),search:o=>{Fe=o,Jr()},toggleFilter:o=>{le=le.includes(o)?le.filter(u=>u!==o):[...le,o],w()},clearFilters:()=>{Fe="",le=[],V="search",w()},toggleSeating:o=>{se=se.includes(o)?se.filter(u=>u!==o):[...se,o],w()}};function Jr(){const o=xe(),u=U.querySelector(".list-results");if(!u||o.dayState.status!=="ready")return w();const p=new Set(o.dayState.arrivals.map(f=>f.source)).size===1;u.replaceWith(Pt(o,te,o.dayState.arrivals,!p))}async function Gt(){x&&await kt(m.adapter,xt(x),JSON.stringify({day:h,guest:z,savedOn:k}))}async function jt(){if(!x)return;const o=ar(await wt(m.adapter,xt(x)));!o||o.savedOn!==k||!nt(o.day)||(h=o.day,z=o.guest,$={open:!1,month:h.slice(0,7),focus:h})}function Qr(o){var p,f;const u=xe();return{day:h,timeZone:s,live:ee(),arrivals:u.dayState.status==="ready"?u.dayState.rows:null,selected:(f=(p=u.selected)==null?void 0:p.row)!=null?f:null,ui:{h:i,money:F,note:v=>P(v),fact:(v,b,T)=>S(v,b,T),chips:Me},runSql:async v=>{if(!N||!ee())throw new Error(`${o.title} needs the New Vintage connector.`);const b=await lt(N,v,"Loading a custom card on the Guest Prep page.");if(!b.complete)throw new Error("New Vintage returned only a preview for this card.");return b.rows}}}function Xr(o){const u=Ut(),p=[h,z!=null?z:"",u.status,u.status==="ready"?u.loadedAt+u.rows.length:""].join("|"),f=Lt.get(o.id);if(f&&f.signature===p)return f.element;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);return Lt.set(o.id,{signature:p,element:b}),Promise.resolve().then(()=>o.render(Qr(o))).then(T=>v.replaceChildren(T==null?P("Nothing to show yet."):typeof T=="string"?P(T):T)).catch(T=>v.replaceChildren(P(`This card couldn't load: ${T instanceof Error?T.message:String(T)}`,"note problem"))),b}function Ye(o){var p;return((p=t.cards)!=null?p:[]).filter(f=>o===null?!f.after||!(f.after==="summary"||Tt.includes(f.after)):f.after===o).map(Xr)}function w(){var we,K,ke,gn,fn,mn;if(ve)return;const o=document.activeElement,u=(K=V!=null?V:(we=o==null?void 0:o.getAttribute)==null?void 0:we.call(o,"data-fid"))!=null?K:null,p=!V&&o instanceof HTMLInputElement?[o.selectionStart,o.selectionEnd]:null;V=null;const f=U.querySelector(".panel"),v=f?{key:f.getAttribute("data-key"),top:(gn=(ke=f.querySelector(".panel-body"))==null?void 0:ke.scrollTop)!=null?gn:0}:null,b=xe(),T=jr(b,te,de=>Ye(de)),ue=i("div",{class:`page${W&&T?" sheet-open":""}`},Nr(b,te),b.storageNote?P(b.storageNote,"storage-note"):null,$r(b,te),Ar(b),b.dayState.status==="ready"?Ye("summary"):null,i("div",{class:"layout"},i("div",{style:"min-width:0"},zr(b,te),Ye(null)),T),W&&T?i("div",{class:"backdrop","aria-hidden":"true",onclick:()=>te.closeSheet()}):null);if(U.replaceChildren(ue),v&&v.key===((fn=b.selected)==null?void 0:fn.key)){const de=U.querySelector(".panel-body");de&&(de.scrollTop=v.top)}const j=u?Array.from(U.querySelectorAll("[data-fid]")).find(de=>de.getAttribute("data-fid")===u):null;j==null||j.focus(),p&&j instanceof HTMLInputElement&&p[0]!==null&&j.setSelectionRange(p[0],(mn=p[1])!=null?mn:p[0]),Vt()}async function ce(o=h){if(!N||!x||ve)return;const u=O;if(!Ee.includes(s)){G.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();return}Y.add(o),G.delete(o),w();try{q||(q=await ot(N,H?null:d),H=!0);const p=await ct(N,q,{timeZone:s,day:o});if(u!==O)return;R.set(o,{rows:p,loadedAt:n().toISOString(),live:!0})}catch(p){if(u!==O)return;G.set(o,je(pe(p)))}finally{u===O&&Y.delete(o),w()}}async function ea(){const o=xe().selected;if(!o||!N||!x||(C==null?void 0:C.status)==="pending")return;const u=h,p=O;C={key:o.key,status:"pending"},w();try{q||(q=await ot(N,H?null:d),H=!0);const f=o.id.replace(/[^A-Za-z0-9-]/g,""),v=await ct(N,q,{timeZone:s,day:u,arrival:{source:o.source,id:f}});if(p!==O)return;const b=He(u);if(b){const T=K=>{var ke;return`${K.source==="tock"?"tock":"commerce7"}:${String((ke=K.arr_id)!=null?ke:"")}`},ue=v.filter(K=>T(K)===o.key),j=[];let we=!1;for(const K of b.rows)T(K)!==o.key?j.push(K):we||(j.push(...ue),we=!0);R.set(u,{rows:j,loadedAt:b.loadedAt,live:b.live})}C=null}catch(f){if(p!==O)return;C={key:o.key,status:"failed",message:je(pe(f))}}w()}async function ta(){var p;if(!x||((p=g.get(h))==null?void 0:p.kind)==="pending")return;const o=h;g.set(o,{kind:"pending"}),w();const u=await wn(Xn({day:o,wineryName:y,tenantId:x,timeZone:s}),{title:Qn,followUp:t.followUp});g.set(o,u),w()}async function na(o){var u,p;!E||!o||o===x||(O+=1,x=o,y=(p=(u=_==null?void 0:_.find(f=>f.tenantId===o))==null?void 0:u.name)!=null?p:y,N=Ie(E,o),R.clear(),G.clear(),Y.clear(),z=null,C=null,se=[],await kt(m.adapter,vt,o),w(),await ce())}async function Ft(){var u,p,f;I=!0,X=null,w();const o=t.tenantId?null:await wt(m.adapter,vt);if(E=(u=t.callTool)!=null?u:await bn(t.connectorName),!ve){if(!E){I=!1,x||(X=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 jt(),w();return}if(!x){try{_=await In(Ie(E,null))}catch(b){I=!1,X=je(pe(b)),w();return}const v=(p=_.find(b=>b.tenantId===o))!=null?p:_.length===1?_[0]:null;if(!v){I=!1,X=_.length?null:"The New Vintage connector can't reach any winery for this account.",w();return}x=v.tenantId,y=(f=t.wineryName)!=null?f:v.name}N=Ie(E,x),await jt(),I=!1,await ce(),!ve&&!_e&&(_e=setInterval(()=>void(ee()&&!Y.has(h)?ce():void 0),zt))}}function Zt(){const o=6e4-n().getTime()%6e4+50;Ze=setTimeout(()=>{k=M().day,w(),Zt()},o)}return w(),Zt(),Ft(),{refresh:()=>ee()?ce():Promise.resolve(),destroy:()=>{ve=!0,Ze&&clearTimeout(Ze),_e&&clearInterval(_e),window.removeEventListener("resize",Rt),document.removeEventListener("keydown",Dt),document.removeEventListener("mousedown",qt),Ot.remove(),It.remove(),U.remove()},state:()=>{var u,p;const o=xe();return{day:h,tenantId:x,live:ee(),selected:(p=(u=o.selected)==null?void 0:u.key)!=null?p:null,status:o.dayState.status}}}}function Zr(e,t){const n=typeof e=="string"?document.querySelector(e):e;if(!n)throw new Error(`NVGuestPrep: no element matches ${String(e)}`);return Fr(n,t)}return J.DEFAULT_SETTINGS=oe,J.SECTION_IDS=gr,J.SUPPORTED_TIME_ZONES=Ee,J.VERSION=yt,J.fillGuestPrepQuery=et,J.mount=Zr,J.pageSetup=bt,Object.defineProperty(J,Symbol.toStringTag,{value:"Module"}),J})({});
|
|
191
|
+
`,gr=["summary","guestList"],Nt=["reservation","talkAbout","newVintageProfile","relationship","headsUp","personalNotes"],fr=[...gr,...Nt],ce={timeZone:"America/Los_Angeles",largeParty:10,seatingGapMinutes:45,tagRules:{interests:["^(?:client\\s+)?interest(?:ed)?(?:\\s+in)?\\s*[-–—:]\\s*(.+)$"],vip:["\\bvip\\b"],club:["(?:member|membership|club)"],hide:["^\\*+\\s*test\\s*\\*+$","^test\\b"]}};function o(e,t=null,...n){const r=document.createElement(e);for(const[s,a]of Object.entries(t!=null?t:{}))a==null||a===!1||(typeof a=="function"?r.addEventListener(s.replace(/^on/,"").toLowerCase(),a):a===!0?r.setAttribute(s,""):r.setAttribute(s,String(a)));return At(r,n),r}function At(e,t){for(const n of t)n==null||n===!1||(Array.isArray(n)?At(e,n):e.append(n instanceof Node?n:String(n)))}const mr="http://www.w3.org/2000/svg";function Mt(e,t={},...n){const r=document.createElementNS(mr,e);for(const[s,a]of Object.entries(t))r.setAttribute(s,String(a));return r.append(...n),r}const hr={"chevron-left":["M15 18l-6-6 6-6"],"chevron-right":["M9 18l6-6-6-6"],"chevron-down":["M6 9l6 6 6-6"],calendar:["M8 2v4","M16 2v4","M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z","M3 10h18"],"message-circle":["M7.9 20A9 9 0 1 0 4 16.1L2 22z"],heart:["M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7z"],"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"],"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"],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"],search:["M19 11a8 8 0 1 1-16 0 8 8 0 0 1 16 0z","M21 21l-4.3-4.3"],x:["M18 6L6 18","M6 6l12 12"],"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"]};function W(e,t=16){var n;return Mt("svg",{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"},...((n=hr[e])!=null?n:[]).map(r=>Mt("path",{d:r})))}function P(e,t="note"){return o("p",{class:t},e)}function S(e,t,n,r=""){return o("div",{class:`fact${r?` ${r}`:""}`},o("div",{class:"fact-label"},e),o("div",{class:"fact-value"},t),n?o("div",{class:"fact-detail"},n):null)}function Ce(e,t="neutral"){return o("div",{class:"chips"},e.map(n=>o("span",{class:`chip chip-${t}`},n)))}function _t(e){return o("span",{class:`badge${e==="VIP"?" badge-vip":""}`},e)}function Ct(e){return Number(Y(`${Ne(e,1)}-01`,-1).slice(8,10))}function Et(e,t){const n=Ne(e.slice(0,7),t);return`${n}-${String(Math.min(Number(e.slice(8,10)),Ct(n))).padStart(2,"0")}`}function yr(e){const t=`${e}-01`,n=Array.from({length:me(t)},()=>null);for(let r=0;r<Ct(e);r+=1)n.push(Y(t,r));return n}function br(e,t){switch(t){case"ArrowLeft":return Y(e,-1);case"ArrowRight":return Y(e,1);case"ArrowUp":return Y(e,-7);case"ArrowDown":return Y(e,7);case"PageUp":return Et(e,-1);case"PageDown":return Et(e,1);case"Home":return Y(e,-me(e));case"End":return Y(e,6-me(e));default:return null}}function vr(e){const{state:t}=e,n=yr(t.month).map((a,l)=>{if(!a)return o("span",{"aria-hidden":"true","data-blank":l});const c=a===t.focus;return o("button",{type:"button",class:`cal-day${a===e.today?" is-today":""}`,"aria-label":Ie(a,e.today)+(a===e.today?", today":""),"aria-selected":a===e.selected?"true":"false","aria-current":a===e.today?"date":null,tabindex:c?0:-1,"data-day":a,"data-fid":c?"cal-focus":null,onclick:()=>e.onPick(a)},String(Number(a.slice(8,10))))}),r=o("div",{class:"cal-grid",role:"group","aria-label":ot(t.month)},Le.map(a=>o("span",{class:"cal-dow","aria-hidden":"true"},a.slice(0,2))),n);r.addEventListener("keydown",a=>{const l=a.key,c=br(t.focus,l);c&&(a.preventDefault(),e.onFocus(c))});const s=o("div",{class:"calendar",role:"dialog","aria-label":"Choose a day"},o("div",{class:"cal-head"},o("button",{type:"button",class:"icon-button","aria-label":"Previous month",onclick:()=>e.onMonth(Ne(t.month,-1))},W("chevron-left")),o("span",{class:"cal-title","aria-live":"polite"},ot(t.month)),o("button",{type:"button",class:"icon-button","aria-label":"Next month",onclick:()=>e.onMonth(Ne(t.month,1))},W("chevron-right"))),r);return s.addEventListener("keydown",a=>{a.key==="Escape"&&(a.preventDefault(),a.stopPropagation(),e.onClose())}),s}const xr="https://newvintage.ai/?utm_source=guest-prep&utm_medium=referral&utm_campaign=guest-prep&utm_content=season-bar-logo",wr={summary:"Summary",guestList:"Everyone coming in",reservation:"Reservation",talkAbout:"Talk about",newVintageProfile:"New Vintage profile",relationship:"Relationship",headsUp:"Heads-up",personalNotes:"Personal notes"},kr={reservation:"calendar",talkAbout:"message-circle",newVintageProfile:"wine",relationship:"heart",headsUp:"triangle-alert",personalNotes:"sticky-note"},Pt={newVintageProfile:"From New Vintage's analysis of their wine purchases."};function je(e,t){var r,s;const n=(s=(r=e.options.customize)==null?void 0:r.labels)==null?void 0:s[t];return typeof n=="string"&&n.trim()?n.trim():wr[t]}function Fe(e,t){var n,r;return((r=(n=e.options.customize)==null?void 0:n.hide)!=null?r:[]).includes(t)}const Sr=()=>Te()==="claude";function $r(e){const t=e.dayState;let n="idle",r,s=null;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",o("div",{class:`status status-${n}`,role:"status","aria-live":"polite"},o("span",{class:"dot","aria-hidden":"true"}),s?[o("span",{class:"status-long"},r),o("span",{class:"status-short","aria-hidden":"true"},s)]:o("span",null,r))}function Tr(e,t){if(!e.wineries||e.wineries.length<2)return null;const n=o("select",{id:"winery-picker","data-fid":"winery-picker",onchange:r=>t.chooseWinery(r.target.value)},o("option",{value:"",disabled:!0,selected:!e.tenantId},"Choose a winery"),e.wineries.map(r=>o("option",{value:r.tenantId,selected:r.tenantId===e.tenantId},r.name)));return o("label",{class:"picker",for:"winery-picker"},"Winery",n)}function Nr(e,t){return o("header",{class:"header"},o("a",{class:"logo",href:xr,target:"_blank",rel:"noopener","aria-label":"New Vintage"},o("span",{class:"logo-mark","aria-hidden":"true"},"New Vintage")),o("div",{class:"heading"},o("h1",null,e.title),$r(e),Tr(e,t)))}function Ar(e,t){const n=e.day===e.today?"Today":e.day===Y(e.today,1)?"Tomorrow":null,r=o("button",{type:"button",class:"day-button","data-fid":"day-button","aria-haspopup":"dialog","aria-expanded":e.calendar.open?"true":"false",onclick:()=>t.toggleCalendar()},W("calendar",18),o("span",{class:"day-label"},Ie(e.day,e.today)),n?o("span",{class:"day-relative"},n):null,W("chevron-down",16)),s=e.calendar.open?vr({state:e.calendar,selected:e.day,today:e.today,onPick:t.pickDay,onFocus:t.focusDay,onMonth:t.showMonth,onClose:t.closeCalendar}):null;return o("div",{class:"daybar"},o("div",{class:"day-wrap"},r,s),e.dayNote?o("span",{class:`day-note${e.dayNote.problem?" problem":""}`,"aria-live":"polite"},e.dayNote.text):null)}function Mr(e){if(e.dayState.status!=="ready"||Fe(e,"summary"))return null;const t=Jn(e.dayState.arrivals,e.day,e.today,e.nowMinutes),n=(r,s,a)=>o("div",{class:"number"},o("div",{class:"number-value"},String(r)),o("div",{class:"number-label"},r===1?s:a));return o("section",{class:"card summary","data-section":"summary","aria-label":je(e,"summary")},o("div",{class:"numbers"},n(t.reservations,"Reservation","Reservations"),n(t.guests,"Guest","Guests")),o("div",{class:"facts"},t.message?o("div",{class:"summary-message"},t.message):t.facts.map(r=>S(r.label,r.value,r.detail,r.label==="Next arrival"?"fact-countdown":""))),S("Now",X(e.nowMinutes),ae(e.today,e.today),"now"))}function _r(e){const t=[];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(_t)}function Cr(e,t,n,r,s){var c;const a=s?null:Yn(n,e.kind,e.nowMinutes),l=[n.experience,r?Ge[n.source]:null].filter(Boolean).join(", ");return o("li",null,o("button",{type:"button",class:`row${s?" row-earlier":""}`,"data-key":n.key,"data-fid":`row-${n.key}`,"aria-current":((c=e.selected)==null?void 0:c.key)===n.key?"true":"false",onclick:()=>t.select(n.key)},o("span",{class:"row-when"},o("span",{class:"row-time"},X(n.minutes)),o("span",{class:"row-date",style:"display:block"},ae(e.day,e.today)),a?o("span",{class:"row-soon soon",style:"display:block"},a):null),o("span",{style:"min-width:0"},o("span",{class:"row-name"},o("span",null,ye(n)),_r(n)),l?o("span",{class:"row-experience",style:"display:block"},l):null),o("span",{class:"row-party"},A(n.party,"guest"))))}function Er(){return o("div",{"aria-hidden":"true"},[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"}))))}function Pr(e){const t=e.request,n=Ie(e.day,e.today);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"?o("div",null,P(`Copy this request into the chat to load ${n}.`),o("textarea",{class:"request-text",readonly:!0,rows:6,"aria-label":"Request to copy",onfocus:r=>r.target.select()},t.text)):(t==null?void 0:t.kind)==="failed"?P(`The request wasn't sent. ${t.message}`,"note problem"):null}function zr(e,t){var s;const n=((s=e.request)==null?void 0:s.kind)==="pending",r=Sr()?"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.";return o("div",{class:"empty"},o("p",{class:"empty-title"},"This day isn't loaded yet"),P(r),o("div",{class:"actions"},o("button",{type:"button",class:"button","data-fid":"load-day",disabled:n,"aria-busy":n?"true":"false",onclick:()=>t.requestDay()},n?"Sending…":"Load this day")),Pr(e))}function Lr(e,t){if(Fe(e,"guestList"))return null;const n=e.dayState,r=je(e,"guestList");let s=null,a;if(n.status==="loading")a=Er();else if(n.status==="choose")a=o("div",{class:"empty"},o("p",{class:"empty-title"},"Choose a winery"),n.message?P(n.message):null);else if(n.status==="unloaded")a=zr(e,t);else if(n.status==="failed")a=o("div",{class:"empty"},o("p",{class:"empty-title"},"This day couldn't load"),P(n.message,"note problem"),o("div",{class:"actions"},o("button",{type:"button",class:"button","data-fid":"retry",onclick:()=>t.retry()},"Try again")));else if(!n.arrivals.length)a=o("div",{class:"empty"},o("p",{class:"empty-title"},"No one is coming in on this day."));else{const l=Qn(n.arrivals);l&&(s=`All from ${Ge[l]}`),a=o("div",null,Ir(e,t),zt(e,t,n.arrivals,!l))}return o("section",{class:"card list-card","data-section":"guestList","aria-busy":n.status==="loading"?"true":"false"},o("div",{class:"card-head"},o("h2",null,r),s?o("span",{class:"card-aside"},s):null),a)}function Ir(e,t){return o("div",{class:"finder"},o("label",{class:"search"},W("search",16),o("span",{class:"sr-only"},"Search guests by name"),o("input",{type:"search",class:"search-input",placeholder:"Search guests",autocomplete:"off",spellcheck:"false",value:e.query,"data-fid":"search",oninput:n=>t.search(n.target.value)})),o("div",{class:"filters",role:"group","aria-label":"Show only"},ft.map(n=>o("button",{type:"button",class:"filter-chip","aria-pressed":e.filters.includes(n.id)?"true":"false","data-filter":n.id,"data-fid":`filter-${n.id}`,onclick:()=>t.toggleFilter(n.id)},n.label))))}function Or(e){return e.first===e.last?X(e.first):`${X(e.first)} to ${X(e.last)}`}function Rr(e,t,n){const r=t.reduce((a,l)=>a+l.party,0);return[n?`${t.length} of ${A(e.arrivals.length,"party","parties")}`:A(t.length,"party","parties"),A(r,"guest"),Hn(t)].filter(Boolean).join(", ")}function zt(e,t,n,r){const s=!!e.query.trim()||e.filters.length>0,a=Bn(n,e.seatingGap),l=e.kind==="today",c=h=>l&&h.last<e.nowMinutes,d=l?a.find(h=>!c(h)):void 0,m=h=>h.arrivals.filter(_=>ht(_,e.query,e.filters)),$=a.filter(h=>m(h).length>0),w=h=>`${e.day}-${h.key}`,y=h=>{var _;return(_=e.seatingChoices[w(h)])!=null?_:s||!c(h)},k=n.filter(h=>ht(h,e.query,e.filters)).length,G=h=>{const _=m(h),L=c(h),I=y(h),E=h===d?h.first<=e.nowMinutes?"Now":"Next":null,O=`nvgp-seating-${w(h)}`;return o("li",{class:`seating${L?" seating-earlier":""}`,"data-seating":h.key,"data-state":L?"earlier":E?E.toLowerCase():"later","data-open":I?"true":"false"},o("button",{type:"button",class:"seat-head","aria-expanded":I?"true":"false","aria-controls":O,"data-fid":`seating-${h.key}`,onclick:()=>t.toggleSeating(w(h),!I)},o("span",{class:"seat-chevron"},W("chevron-down",18)),o("span",{class:"seat-time"},Or(h)),E?o("span",{class:`seat-marker seat-${E.toLowerCase()}`},E):null,o("span",{class:"seat-counts"},Rr(h,_,s))),o("ul",{class:"rows",id:O,hidden:!I},I?_.map(Z=>Cr(e,t,Z,r,l&&Z.minutes<e.nowMinutes)):null))},q=$.filter(h=>!c(h)).map(G),z=$.filter(c),j=z.reduce((h,_)=>h+m(_).length,0),M=$.length>0&&$.every(y);return o("div",{class:"list-results"},o("div",{class:"list-tools"},o("span",{class:"filter-status","aria-live":"polite"},s?k?`${k} of ${A(n.length,"party","parties")}`:"No guests match.":null),o("span",{class:"list-tools-actions"},s?o("button",{type:"button",class:"link-button","data-fid":"clear-filters",onclick:()=>t.clearFilters()},"Clear filters"):null,$.length?o("button",{type:"button",class:"link-button","data-fid":"toggle-all",onclick:()=>t.setSeatings($.map(w),!M)},M?"Collapse all":"Expand all"):null)),$.length?o("ol",{class:"seatings"},q,z.length?o("li",{class:"earlier-head"},"Earlier today",o("span",{class:"count","aria-label":A(j,"reservation")},String(j))):null,z.map(G)):null)}function Dr(e){return e.map(t=>o("p",{class:"soft"},t.text,t.when?o("span",{class:"soft-when"},t.when):null))}function qr(e){const t=e.bought;return t?t.items.length?o("ul",{class:"bought"},t.items.map(n=>o("li",null,o("span",null,n.title),o("span",{class:"qty"},`× ${n.qty}`))),t.total!==null?o("li",{class:"total"},o("span",null,"Total"),o("span",null,H(t.total))):null):o("p",{class:"visit-muted"},"Nothing beyond the tasting"):null}function Vr(e,t){const n=t.lastTaste,r=[];if(n){const l=n.day?`${st(n.day,e.today)}, ${Pn(n.day,e.today)}`:null;r.push(o("div",{class:"visit-part visit-taste"},o("p",{class:"visit-title"},n.title),l?o("p",{class:"visit-muted"},l):null))}const s=qr(t);if(s&&r.push(o("div",{class:"visit-part visit-bought"},s)),t.orderNotes.length&&r.push(o("div",{class:"visit-part visit-notes"},t.orderNotes.map(l=>o("p",{class:"visit-note"},l)))),!r.length)return null;const a=r.flatMap((l,c)=>c?[o("hr",{class:"visit-divider"}),l]:[l]);return o("div",{class:"fact fact-visit"},o("div",{class:"fact-label"},"Last visit"),o("div",{class:"visit"},a))}function Ur(e){const{floor:t,ceiling:n}=e;return t!==null&&n!==null?t===n?H(t):`${H(t)} to ${H(n)}`:t!==null?`From ${H(t)}`:n!==null?`Up to ${H(n)}`:e.avg!==null?H(e.avg):null}function Gr(e,t,n){var a,l;const r=[],s=c=>{c&&r.push(c)};switch(n){case"reservation":{const c=e.kind==="today"&&t.minutes>=e.nowMinutes;r.push(o("div",{class:"fact-row"},S("Arrives",he(e.day,t.minutes,e.today),c?Oe(t.minutes-e.nowMinutes):null,c?"fact-countdown":""),S("Party",A(t.party,"guest")),S("Booked via",Ge[t.source]))),s(t.experience?S("Experience",t.experience):null);break}case"talkAbout":{s(t.occasions.length?S("Occasion",t.occasions.map((c,d)=>o("div",{"data-line":d},c))):null),s(t.interests.length?S("Interested in",Ce(t.interests)):null),s(Vr(e,t));break}case"newVintageProfile":{const c=t.price?Ur(t.price):null,d=[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 ${H(t.price.avg)}`:null):null,t.wineTypes.length?S("Wine types",t.wineTypes.join(", ")):null,t.varietals.length?S("Favorite varietals",t.varietals.join(", ")):null,t.vintages.length?S("Vintages",t.vintages.join(", ")):null,t.appellations.length?S("Appellations",t.appellations.join(", ")):null].filter(m=>m!==null);d.length&&r.push(o("div",{class:"fact-grid"},d));break}case"relationship":s(t.since?S("Customer since",t.since):null),s(t.lifetime?S("Lifetime spend",H(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",it(t.signupTier)):null),s(t.atRisk&&t.churnTier?S("Membership at risk",it(t.churnTier)):null),s(t.clubTags.length?S("Club tags",Ce(t.clubTags)):null);break;case"headsUp":s(t.accountTags.length?S("Account tags",Ce(t.accountTags,"warning")):null);break;case"personalNotes":r.push(...Dr(t.personalNotes.map(c=>({text:c.content,when:c.when}))));break}return r}function jr(e){const t=[];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"),o("div",{class:"chips"},t.map(_t))}const Fr=["reservation","talkAbout","newVintageProfile","relationship","headsUp","personalNotes"];function Zr(e,t,n){var d,m,$;const r=e.selected;if(!r||e.dayState.status!=="ready")return null;const s=[];for(const w of Fr){if(!Fe(e,w)){const y=Gr(e,r,w);y.length&&s.push(o("section",{class:"psec","data-section":w},o("h3",{class:"psec-title"},o("span",{class:`tile${w==="headsUp"?" tile-warning":""}`},W((d=kr[w])!=null?d:"",16)),je(e,w)),Pt[w]?o("p",{class:"psec-source"},Pt[w]):null,o("div",{class:"psec-facts"},y)))}s.push(...n(w))}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?o("div",{class:"research"},o("button",{type:"button",class:"button button-quiet","data-fid":"research",disabled:l,"aria-busy":l?"true":"false",onclick:()=>t.research()},W("refresh-cw",16),l?"Researching…":"Research this guest again"),(a==null?void 0:a.status)==="failed"?P(($=a.message)!=null?$:"This guest couldn't refresh.","note problem"):null):o("div",{class:"research"},o("button",{type:"button",class:"button button-quiet",disabled:!0,"aria-describedby":"research-reason"},W("refresh-cw",16),"Research this guest again"),o("p",{class:"note",id:"research-reason"},"Ask in this chat to refresh this guest."));return o("aside",{class:"card panel","aria-label":`Guest: ${ye(r)}`,"data-key":r.key},o("div",{class:"panel-head"},o("div",{class:"handle","aria-hidden":"true"}),o("div",{class:"panel-head-row"},o("h2",{class:"panel-name"},ye(r)),o("button",{type:"button",class:"icon-button close","aria-label":"Close","data-fid":"close-sheet",onclick:()=>t.closeSheet()},W("x",20))),jr(r)),o("div",{class:"panel-body"},s,c))}const Lt=900*1e3;function Ze(e){switch(e.kind){case"unavailable":return Te()==="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.";case"approval":return"Loading a day needs your permission to use the New Vintage connector. Allow it for this page, then try again.";case"reconnect":return wn();case"temporary":return"New Vintage didn't answer. Try again in a moment.";case"needs_update":return"This page needs an update. Ask in this chat to update it.";case"not_reconciled":return"This day didn't load completely. Try again.";case"tool":return e.message}}function Br(e,t){var Ht,Yt,Wt,Kt,Jt,Qt,Xt,en,tn,nn,rn,an,sn,on,ln,cn,un,dn,pn,gn;const n=(Ht=t.now)!=null?Ht:(()=>new Date),r={...ce,...(Yt=t.settings)!=null?Yt:{},tagRules:{...ce.tagRules,...(Kt=(Wt=t.settings)==null?void 0:Wt.tagRules)!=null?Kt:{}}},s=_n(t.settings?t.settings.timeZone:ce.timeZone),a=Vn(r.tagRules),l=Number(r.largeParty)>0?Number(r.largeParty):ce.largeParty,c=Number(r.seatingGapMinutes)>0?Number(r.seatingGapMinutes):(Jt=ce.seatingGapMinutes)!=null?Jt:45,d=xt(t.customize,t.cards),m=ar(t.storage),$=()=>nt(n(),s);let w=$().day,y=w,k=(Qt=t.tenantId)!=null?Qt:null,G=(Xt=t.wineryName)!=null?Xt:null,q=null,z=null,j=!0,M=null,h=null,_=!1,L=0;const I=new Map,E=new Set,O=new Map;let Z=null,R=null,K=!1;const f=new Map;let C=null,N={open:!1,month:y.slice(0,7),focus:y},V=null,Ee="",oe=[];const ve={};let ie={};const xe=()=>!!Ee.trim()||oe.length>0;let Be=null,Pe=null,we=!1;const It=new Map;e.innerHTML="";const Yr=[(nn=(tn=(en=t.customize)==null?void 0:en.fonts)==null?void 0:tn.display)!=null?nn:"Newsreader",(sn=(an=(rn=t.customize)==null?void 0:rn.fonts)==null?void 0:an.body)!=null?sn:"Be Vietnam Pro"],Ot=o("link",{rel:"stylesheet",href:ur(Yr.filter(i=>/^[A-Za-z0-9 ]{1,40}$/.test(i)))}),He={};(ln=(on=t.customize)==null?void 0:on.fonts)!=null&&ln.display&&(He["font-display"]=`'${t.customize.fonts.display}', Georgia, serif`),(un=(cn=t.customize)==null?void 0:cn.fonts)!=null&&un.body&&(He["font-body"]=`'${t.customize.fonts.body}', system-ui, sans-serif`);const Rt=o("style",null,dr({...He,...(pn=(dn=t.customize)==null?void 0:dn.theme)!=null?pn:{}},(gn=t.customize)==null?void 0:gn.themeDark)+pr);document.head.append(Ot,Rt);const F=o("div",{class:"nvgp"});e.append(F);const Dt=()=>Ut();window.addEventListener("resize",Dt);const qt=i=>{i.key==="Escape"&&(N.open?te.closeCalendar():K&&te.closeSheet())},Vt=i=>{var p;if(!N.open)return;const u=i.target;(p=u==null?void 0:u.closest)!=null&&p.call(u,".day-wrap")||(N={...N,open:!1},v())};document.addEventListener("keydown",qt),document.addEventListener("mousedown",Vt);function Ut(){var g;const i=F.querySelector(".daybar");i&&F.style.setProperty("--daybar-h",`${i.offsetHeight}px`);const u=F.querySelector(".summary");F.style.setProperty("--summary-h",`${u?u.offsetHeight+16:0}px`);const p=u&&window.getComputedStyle(u).position==="sticky"?u.offsetHeight:0;F.style.setProperty("--seat-top",`${((g=i==null?void 0:i.offsetHeight)!=null?g:0)+p}px`)}const ee=()=>!!(z&&M&&k);function Wr(i){var p,g;const u=(p=t.days)==null?void 0:p[i];return u&&Array.isArray(u.arrivals)?{rows:u.arrivals,loadedAt:String((g=u.loadedAt)!=null?g:""),live:!1}:null}function Ye(i){var u;return(u=I.get(i))!=null?u:Wr(i)}function Gt(){if(!k)return j?{status:"loading"}:{status:"choose",message:Z};const i=Ye(y);if(i)return{status:"ready",arrivals:Zn(i.rows,{day:y,today:w,largeParty:l,rules:a}),rows:i.rows,loadedAt:i.loadedAt,live:i.live};if(j||E.has(y))return{status:"loading"};const u=O.get(y);return u?{status:"failed",message:u}:ee()?{status:"loading"}:{status:"unloaded"}}function Kr(i,u){var g,x;const{upcoming:p}=yt(i,Ve(y,w),u);return(x=(g=p[0])!=null?g:i[0])!=null?x:null}function Jr(i){const u=O.get(y);if(i&&u)return{text:u,problem:!0};if(!i)return null;if(E.has(y))return{text:"Checking for changes",problem:!1};if(i.live)return{text:"Up to date",problem:!1};const p=new Date(i.loadedAt);if(Number.isNaN(p.getTime()))return{text:"Loaded in the chat",problem:!1};const g=nt(p,s);return{text:`Loaded in the chat ${he(g.day,g.minutes,w)}`,problem:!1}}function ke(){var x,b,T,de;const i=$(),u=Gt(),p=u.status==="ready"?u.arrivals:[],g=(x=p.find(B=>B.key===R))!=null?x:Kr(p,i.minutes);return{options:t,title:((T=(b=t.customize)==null?void 0:b.title)==null?void 0:T.trim())||(G?`${G} Guest Prep`:"Guest Prep"),timeZone:s,today:w,nowMinutes:i.minutes,day:y,kind:Ve(y,w),live:ee(),dayState:u,selected:g,sheetOpen:K,request:(de=f.get(y))!=null?de:null,research:C,calendar:N,dayNote:Jr(k?Ye(y):null),wineries:q,tenantId:k,storageNote:m.mode==="none"?"Changes won't be saved in this browser.":null,seatingGap:c,query:Ee,filters:oe,seatingChoices:xe()?ie:ve}}const Qr=()=>typeof window.matchMedia=="function"&&window.matchMedia("(max-width: 900px)").matches,te={toggleCalendar:()=>{N=N.open?{...N,open:!1}:{open:!0,month:y.slice(0,7),focus:y},V=N.open?"cal-focus":"day-button",v()},closeCalendar:()=>{N={...N,open:!1},V="day-button",v()},pickDay:i=>{N={open:!1,month:i.slice(0,7),focus:i},V="day-button",i!==y&&(y=i,R=null,K=!1,C=null,jt()),v();const u=I.get(y);ee()&&(!u||Date.parse(u.loadedAt)<n().getTime()-Lt)&&ue()},focusDay:i=>{N={...N,focus:i,month:i.slice(0,7)},V="cal-focus",v()},showMonth:i=>{var g;const p=(g=[Number(N.focus.slice(8,10)),30,29,28].map(x=>`${i}-${String(x).padStart(2,"0")}`).find(rt))!=null?g:`${i}-01`;N={open:!0,month:i,focus:p},v()},select:i=>{R=i,K=!0,Qr()&&(V="close-sheet"),jt(),v()},closeSheet:()=>{K=!1,V=R?`row-${R}`:null,v()},retry:()=>void(k?ue():Zt()),requestDay:()=>void ra(),research:()=>void na(),chooseWinery:i=>void aa(i),search:i=>{Ee=i,xe()||(ie={}),Xr()},toggleFilter:i=>{oe=oe.includes(i)?oe.filter(u=>u!==i):[...oe,i],xe()||(ie={}),v()},clearFilters:()=>{Ee="",oe=[],ie={},V="search",v()},toggleSeating:(i,u)=>{(xe()?ie:ve)[i]=u,v()},setSeatings:(i,u)=>{const p=xe()?ie:ve;for(const g of i)p[g]=u;V="toggle-all",v()}};function Xr(){const i=ke(),u=F.querySelector(".list-results");if(!u||i.dayState.status!=="ready")return v();const p=new Set(i.dayState.arrivals.map(g=>g.source)).size===1;u.replaceWith(zt(i,te,i.dayState.arrivals,!p))}async function jt(){k&&await $t(m.adapter,kt(k),JSON.stringify({day:y,guest:R,savedOn:w}))}async function Ft(){if(!k)return;const i=sr(await St(m.adapter,kt(k)));!i||i.savedOn!==w||!rt(i.day)||(y=i.day,R=i.guest,N={open:!1,month:y.slice(0,7),focus:y})}function ea(i){var p,g;const u=ke();return{day:y,timeZone:s,live:ee(),arrivals:u.dayState.status==="ready"?u.dayState.rows:null,selected:(g=(p=u.selected)==null?void 0:p.row)!=null?g:null,ui:{h:o,money:H,note:x=>P(x),fact:(x,b,T)=>S(x,b,T),chips:Ce},runSql:async x=>{if(!M||!ee())throw new Error(`${i.title} needs the New Vintage connector.`);const b=await ct(M,x,"Loading a custom card on the Guest Prep page.");if(!b.complete)throw new Error("New Vintage returned only a preview for this card.");return b.rows}}}function ta(i){const u=Gt(),p=[y,R!=null?R:"",u.status,u.status==="ready"?u.loadedAt+u.rows.length:""].join("|"),g=It.get(i.id);if(g&&g.signature===p)return g.element;const x=o("div",null,P("Loading…")),b=o("section",{class:"card custom-card","data-card":i.id},o("h2",null,i.title),o("p",{class:"card-purpose"},i.purpose),x);return It.set(i.id,{signature:p,element:b}),Promise.resolve().then(()=>i.render(ea(i))).then(T=>x.replaceChildren(T==null?P("Nothing to show yet."):typeof T=="string"?P(T):T)).catch(T=>x.replaceChildren(P(`This card couldn't load: ${T instanceof Error?T.message:String(T)}`,"note problem"))),b}function We(i){var p;return((p=t.cards)!=null?p:[]).filter(g=>i===null?!g.after||!(g.after==="summary"||Nt.includes(g.after)):g.after===i).map(ta)}function v(){var Se,J,$e,fn,mn,hn;if(we)return;const i=document.activeElement,u=(J=V!=null?V:(Se=i==null?void 0:i.getAttribute)==null?void 0:Se.call(i,"data-fid"))!=null?J:null,p=!V&&i instanceof HTMLInputElement?[i.selectionStart,i.selectionEnd]:null;V=null;const g=F.querySelector(".panel"),x=g?{key:g.getAttribute("data-key"),top:(fn=($e=g.querySelector(".panel-body"))==null?void 0:$e.scrollTop)!=null?fn:0}:null,b=ke(),T=Zr(b,te,pe=>We(pe)),de=o("div",{class:`page${K&&T?" sheet-open":""}`},Nr(b,te),b.storageNote?P(b.storageNote,"storage-note"):null,Ar(b,te),Mr(b),b.dayState.status==="ready"?We("summary"):null,o("div",{class:"layout"},o("div",{style:"min-width:0"},Lr(b,te),We(null)),T),K&&T?o("div",{class:"backdrop","aria-hidden":"true",onclick:()=>te.closeSheet()}):null);if(F.replaceChildren(de),x&&x.key===((mn=b.selected)==null?void 0:mn.key)){const pe=F.querySelector(".panel-body");pe&&(pe.scrollTop=x.top)}const B=u?Array.from(F.querySelectorAll("[data-fid]")).find(pe=>pe.getAttribute("data-fid")===u):null;B==null||B.focus(),p&&B instanceof HTMLInputElement&&p[0]!==null&&B.setSelectionRange(p[0],(hn=p[1])!=null?hn:p[0]),Ut()}async function ue(i=y){if(!M||!k||we)return;const u=L;if(!ze.includes(s)){O.set(i,`Guest Prep can't load days in the ${s} time zone yet. Ask in this chat to set the winery's time zone.`),v();return}E.add(i),O.delete(i),v();try{h||(h=await lt(M,_?null:d),_=!0);const p=await ut(M,h,{timeZone:s,day:i});if(u!==L)return;I.set(i,{rows:p,loadedAt:n().toISOString(),live:!0})}catch(p){if(u!==L)return;O.set(i,Ze(ge(p)))}finally{u===L&&E.delete(i),v()}}async function na(){const i=ke().selected;if(!i||!M||!k||(C==null?void 0:C.status)==="pending")return;const u=y,p=L;C={key:i.key,status:"pending"},v();try{h||(h=await lt(M,_?null:d),_=!0);const g=i.id.replace(/[^A-Za-z0-9-]/g,""),x=await ut(M,h,{timeZone:s,day:u,arrival:{source:i.source,id:g}});if(p!==L)return;const b=Ye(u);if(b){const T=J=>{var $e;return`${J.source==="tock"?"tock":"commerce7"}:${String(($e=J.arr_id)!=null?$e:"")}`},de=x.filter(J=>T(J)===i.key),B=[];let Se=!1;for(const J of b.rows)T(J)!==i.key?B.push(J):Se||(B.push(...de),Se=!0);I.set(u,{rows:B,loadedAt:b.loadedAt,live:b.live})}C=null}catch(g){if(p!==L)return;C={key:i.key,status:"failed",message:Ze(ge(g))}}v()}async function ra(){var p;if(!k||((p=f.get(y))==null?void 0:p.kind)==="pending")return;const i=y;f.set(i,{kind:"pending"}),v();const u=await kn(er({day:i,wineryName:G,tenantId:k,timeZone:s}),{title:Xn,followUp:t.followUp});f.set(i,u),v()}async function aa(i){var u,p;if(!(!z||!i||i===k)){L+=1,k=i,G=(p=(u=q==null?void 0:q.find(g=>g.tenantId===i))==null?void 0:u.name)!=null?p:G,M=De(z,i),I.clear(),O.clear(),E.clear(),R=null,C=null;for(const g of Object.keys(ve))delete ve[g];ie={},await $t(m.adapter,wt,i),v(),await ue()}}async function Zt(){var u,p,g;j=!0,Z=null,v();const i=t.tenantId?null:await St(m.adapter,wt);if(z=(u=t.callTool)!=null?u:await vn(t.connectorName),!we){if(!z){j=!1,k||(Z=Te()==="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 Ft(),v();return}if(!k){try{q=await On(De(z,null))}catch(b){j=!1,Z=Ze(ge(b)),v();return}const x=(p=q.find(b=>b.tenantId===i))!=null?p:q.length===1?q[0]:null;if(!x){j=!1,Z=q.length?null:"The New Vintage connector can't reach any winery for this account.",v();return}k=x.tenantId,G=(g=t.wineryName)!=null?g:x.name}M=De(z,k),await Ft(),j=!1,await ue(),!we&&!Pe&&(Pe=setInterval(()=>void(ee()&&!E.has(y)?ue():void 0),Lt))}}function Bt(){const i=6e4-n().getTime()%6e4+50;Be=setTimeout(()=>{w=$().day,v(),Bt()},i)}return v(),Bt(),Zt(),{refresh:()=>ee()?ue():Promise.resolve(),destroy:()=>{we=!0,Be&&clearTimeout(Be),Pe&&clearInterval(Pe),window.removeEventListener("resize",Dt),document.removeEventListener("keydown",qt),document.removeEventListener("mousedown",Vt),Rt.remove(),Ot.remove(),F.remove()},state:()=>{var u,p;const i=ke();return{day:y,tenantId:k,live:ee(),selected:(p=(u=i.selected)==null?void 0:u.key)!=null?p:null,status:i.dayState.status}}}}function Hr(e,t){const n=typeof e=="string"?document.querySelector(e):e;if(!n)throw new Error(`NVGuestPrep: no element matches ${String(e)}`);return Br(n,t)}return Q.DEFAULT_SETTINGS=ce,Q.SECTION_IDS=fr,Q.SUPPORTED_TIME_ZONES=ze,Q.VERSION=vt,Q.fillGuestPrepQuery=tt,Q.mount=Hr,Q.pageSetup=xt,Object.defineProperty(Q,Symbol.toStringTag,{value:"Module"}),Q})({});
|