@everfur/sdk 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +350 -0
- package/README.md +24 -16
- package/dist/{Chat-DQOsAumH.d.cts → Chat-Cb3Y8VwS.d.cts} +3 -3
- package/dist/{Chat-CFi5cNUF.d.ts → Chat-ClhB_8sp.d.ts} +3 -3
- package/dist/{DepthViews-D81c95Ra.d.cts → DepthViews-BSkuUGBB.d.ts} +1 -1
- package/dist/{DepthViews-C409ubw-.d.cts → DepthViews-CSCS-tZg.d.ts} +1 -1
- package/dist/{DepthViews-es8mIK0w.d.ts → DepthViews-CW1z8pnl.d.cts} +1 -1
- package/dist/{DepthViews-uilL1NJZ.d.ts → DepthViews-DDiPxyzg.d.cts} +1 -1
- package/dist/{ErrorPolicyPort-D22LUVrK.d.ts → ErrorPolicyPort-DwSnmGcX.d.ts} +1 -1
- package/dist/{ErrorPolicyPort-D6CybiqJ.d.cts → ErrorPolicyPort-NFDPe-5w.d.cts} +1 -1
- package/dist/{EverfurError-DmELDpXp.d.cts → EverfurError-pEXDbUJ1.d.cts} +9 -1
- package/dist/{EverfurError-DmELDpXp.d.ts → EverfurError-pEXDbUJ1.d.ts} +9 -1
- package/dist/{EverfurResult-ZtH-YV1h.d.cts → EverfurResult-dtl8ERAw.d.cts} +1 -1
- package/dist/{EverfurResult-SGvHKsCB.d.ts → EverfurResult-sKkoXew0.d.ts} +1 -1
- package/dist/IntakeMedia-BFZfBLjB.d.cts +116 -0
- package/dist/{IntakeMedia-BcjjUizr.d.ts → IntakeMedia-BH0fYDT2.d.cts} +19 -2
- package/dist/{IntakeMedia-CL_S2tZE.d.cts → IntakeMedia-Bavl7E4Z.d.ts} +19 -2
- package/dist/IntakeMedia-C8GlN_GK.d.ts +116 -0
- package/dist/animations/index.cjs +109 -1
- package/dist/animations/index.d.cts +6 -6
- package/dist/animations/index.d.ts +6 -6
- package/dist/animations/index.js +109 -1
- package/dist/{attachments-B2GjBgvF.d.cts → attachments-BD70jZZL.d.cts} +3 -3
- package/dist/{attachments-SF88N654.d.ts → attachments-CC7aHpwZ.d.ts} +7 -7
- package/dist/{attachments-DNaSbmA3.d.ts → attachments-DAUy3vPR.d.ts} +3 -3
- package/dist/{attachments-DI710no4.d.cts → attachments-DaOaIBNf.d.cts} +7 -7
- package/dist/{bookingCopy-D2N3RhsV.d.ts → bookingCopy-CUW9Gdzc.d.ts} +15 -7
- package/dist/{bookingCopy-xlXxORCA.d.cts → bookingCopy-oEjqkiNA.d.cts} +15 -7
- package/dist/{branding-Bio5MM6g.d.cts → branding-aGleD_ki.d.ts} +99 -6
- package/dist/{branding-ytH4jJq1.d.ts → branding-ctD0B2Th.d.cts} +99 -6
- package/dist/{callRoom-7wrE3RP2.d.ts → callRoom-B1qq_D-4.d.ts} +1 -1
- package/dist/{callRoom-B_EqaUzx.d.cts → callRoom-DfZTWFXh.d.cts} +1 -1
- package/dist/{casesRepository-B-md8h1S.d.cts → casesRepository-Bzs7aw4t.d.cts} +2 -2
- package/dist/{casesRepository-CC6951TK.d.ts → casesRepository-CywqL6mj.d.ts} +2 -2
- package/dist/chat/index.cjs +335 -1
- package/dist/chat/index.d.cts +12 -12
- package/dist/chat/index.d.ts +12 -12
- package/dist/chat/index.js +335 -1
- package/dist/client/index.cjs +115 -11
- package/dist/client/index.d.cts +14 -14
- package/dist/client/index.d.ts +14 -14
- package/dist/client/index.js +115 -11
- package/dist/{config-BM0sv5jx.d.ts → config-BysLVhku.d.ts} +3 -3
- package/dist/{config-Daa1plhQ.d.cts → config-EZzEyS-c.d.cts} +3 -3
- package/dist/consent/index.cjs +112 -1
- package/dist/consent/index.d.cts +9 -9
- package/dist/consent/index.d.ts +9 -9
- package/dist/consent/index.js +112 -1
- package/dist/{context-DQHtwcHN.d.cts → context-DUwYArkM.d.cts} +9 -9
- package/dist/{context-CDV2pwGI.d.ts → context-DpfgbnOU.d.ts} +9 -9
- package/dist/{copy-BEx5F71o.d.cts → copy-DK4r9oGz.d.cts} +5 -5
- package/dist/{copy-Cl1l-qmY.d.ts → copy-LxZGnFXJ.d.ts} +5 -5
- package/dist/core/index.cjs +140 -13
- package/dist/core/index.d.cts +19 -19
- package/dist/core/index.d.ts +19 -19
- package/dist/core/index.js +140 -13
- package/dist/{depth-CAAwiStc.d.cts → depth-DAd77kRe.d.cts} +7 -6
- package/dist/{depth-DfNRVtrV.d.ts → depth-Mk7quUNa.d.ts} +7 -6
- package/dist/{entitlementRepository-CVWvND1P.d.ts → entitlementRepository-CrD0O7VR.d.ts} +4 -4
- package/dist/{entitlementRepository-DPvWjV-N.d.cts → entitlementRepository-Dra_4FU_.d.cts} +4 -4
- package/dist/{identity-DUlshgow.d.cts → identity-75whJXyP.d.cts} +2 -2
- package/dist/{identity-BhT7oJDS.d.ts → identity-BiyMDMrR.d.ts} +2 -2
- package/dist/index.cjs +365 -12
- package/dist/index.d.cts +19 -19
- package/dist/index.d.ts +19 -19
- package/dist/index.js +365 -12
- package/dist/{models-DSqA5Ahs.d.ts → models-CrbUwbuS.d.ts} +1 -1
- package/dist/{models-Bn2z0NNo.d.cts → models-DzvqEjMm.d.cts} +1 -1
- package/dist/notifications/index.cjs +94 -2
- package/dist/notifications/index.d.cts +5 -5
- package/dist/notifications/index.d.ts +5 -5
- package/dist/notifications/index.js +94 -2
- package/dist/{pets-Bneph9m1.d.cts → pets-DoXxTw4x.d.cts} +2 -2
- package/dist/{pets-DjcLmRrW.d.ts → pets-W2BuLYko.d.ts} +2 -2
- package/dist/{petsRepository-BwxmfX_s.d.ts → petsRepository-ByMzq1Z9.d.ts} +2 -2
- package/dist/{petsRepository-BnVre3q7.d.cts → petsRepository-yyoo0k2I.d.cts} +2 -2
- package/dist/photo/index.cjs +131 -1
- package/dist/photo/index.d.cts +3 -3
- package/dist/photo/index.d.ts +3 -3
- package/dist/photo/index.js +131 -1
- package/dist/{ports-BPKxFOSe.d.cts → ports-BeVJYP0_.d.cts} +7 -7
- package/dist/{ports-Di9rdLO9.d.ts → ports-zYl8S_lI.d.ts} +7 -7
- package/dist/records/depth/index.cjs +200 -2
- package/dist/records/depth/index.d.cts +11 -11
- package/dist/records/depth/index.d.ts +11 -11
- package/dist/records/depth/index.js +200 -2
- package/dist/records/index.cjs +742 -4
- package/dist/records/index.d.cts +22 -14
- package/dist/records/index.d.ts +22 -14
- package/dist/records/index.js +742 -4
- package/dist/{requestFunnel-CiSX2pun.d.ts → requestFunnel-BPeBZdKp.d.ts} +5 -5
- package/dist/{requestFunnel-DMR_1T3O.d.cts → requestFunnel-DHeSzCT6.d.cts} +5 -5
- package/dist/{runtimeTypes-CkMFCbHW.d.ts → runtimeTypes-Cc207nbn.d.ts} +7 -7
- package/dist/{runtimeTypes-2gJ5hYoE.d.cts → runtimeTypes-DgMizQKz.d.cts} +7 -7
- package/dist/server/events/index.cjs +92 -2
- package/dist/server/events/index.d.cts +4 -4
- package/dist/server/events/index.d.ts +4 -4
- package/dist/server/events/index.js +92 -2
- package/dist/server/index.cjs +95 -2
- package/dist/server/index.d.cts +5 -5
- package/dist/server/index.d.ts +5 -5
- package/dist/server/index.js +95 -2
- package/dist/televet/booking/index.cjs +396 -4
- package/dist/televet/booking/index.d.cts +24 -127
- package/dist/televet/booking/index.d.ts +24 -127
- package/dist/televet/booking/index.js +396 -4
- package/dist/televet/call/index.cjs +71 -1
- package/dist/televet/call/index.d.cts +3 -3
- package/dist/televet/call/index.d.ts +3 -3
- package/dist/televet/call/index.js +71 -1
- package/dist/televet/index.cjs +101 -1
- package/dist/televet/index.d.cts +25 -8
- package/dist/televet/index.d.ts +25 -8
- package/dist/televet/index.js +101 -1
- package/dist/{bookingTypes-D4pD3tHs.d.ts → televetGlobal-C5dTUACe.d.cts} +34 -1
- package/dist/{bookingTypes-D4pD3tHs.d.cts → televetGlobal-CnjrfhT4.d.ts} +34 -1
- package/dist/testing/index.cjs +98 -7
- package/dist/testing/index.d.cts +3 -3
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +98 -7
- package/dist/testing/rn/index.cjs +101 -1
- package/dist/testing/rn/index.d.cts +13 -13
- package/dist/testing/rn/index.d.ts +13 -13
- package/dist/testing/rn/index.js +101 -1
- package/dist/testing/web/index.cjs +95 -1
- package/dist/testing/web/index.d.cts +14 -14
- package/dist/testing/web/index.d.ts +14 -14
- package/dist/testing/web/index.js +95 -1
- package/dist/{timelineRows-D3171ksh.d.ts → timelineRows-D22vGN9t.d.ts} +1 -1
- package/dist/{timelineRows-DDnz4gx2.d.cts → timelineRows-DUQIWSjc.d.cts} +1 -1
- package/dist/{tokens-BYtbKwFh.d.cts → tokens-RAKZj7M8.d.cts} +89 -5
- package/dist/{tokens-BYtbKwFh.d.ts → tokens-RAKZj7M8.d.ts} +89 -5
- package/dist/{typeStyle-BqfwxZH4.d.cts → typeStyle-DVj8iCC1.d.ts} +30 -3
- package/dist/{typeStyle-DKz02DGU.d.ts → typeStyle-Nt7w0rhE.d.cts} +30 -3
- package/dist/{useRecordsDepth-Z9FF5X4E.d.ts → useRecordsDepth-C0Qfoghi.d.ts} +7 -6
- package/dist/{useRecordsDepth-COJ0wSYK.d.cts → useRecordsDepth-Mbysp548.d.cts} +7 -6
- package/dist/{useVetVisit-Ds8f1peV.d.cts → useVetVisit-BQX_aTJs.d.cts} +2 -2
- package/dist/{useVetVisit-BsjoDO-n.d.ts → useVetVisit-RPBOabl8.d.ts} +2 -2
- package/dist/video/index.cjs +122 -1
- package/dist/video/index.d.cts +3 -3
- package/dist/video/index.d.ts +3 -3
- package/dist/video/index.js +122 -1
- package/dist/{view-nRy6SitU.d.cts → view-CskIgOFV.d.cts} +5 -5
- package/dist/{view-DoQEHXJR.d.ts → view-DqKXtxEZ.d.ts} +5 -5
- package/dist/web/consent/index.cjs +111 -1
- package/dist/web/consent/index.d.cts +9 -9
- package/dist/web/consent/index.d.ts +9 -9
- package/dist/web/consent/index.js +111 -1
- package/dist/web/index.cjs +326 -14
- package/dist/web/index.d.cts +29 -23
- package/dist/web/index.d.ts +29 -23
- package/dist/web/index.js +326 -14
- package/dist/web/notifications/index.cjs +95 -2
- package/dist/web/notifications/index.d.cts +7 -7
- package/dist/web/notifications/index.d.ts +7 -7
- package/dist/web/notifications/index.js +95 -2
- package/dist/web/records/depth/index.cjs +170 -2
- package/dist/web/records/depth/index.d.cts +11 -11
- package/dist/web/records/depth/index.d.ts +11 -11
- package/dist/web/records/depth/index.js +170 -2
- package/dist/web/records/index.cjs +691 -4
- package/dist/web/records/index.d.cts +34 -37
- package/dist/web/records/index.d.ts +34 -37
- package/dist/web/records/index.js +691 -4
- package/dist/web/records/upload/index.cjs +3 -0
- package/dist/web/records/upload/index.d.cts +23 -0
- package/dist/web/records/upload/index.d.ts +23 -0
- package/dist/web/records/upload/index.js +3 -0
- package/dist/web/televet/booking/index.cjs +425 -4
- package/dist/web/televet/booking/index.d.cts +25 -39
- package/dist/web/televet/booking/index.d.ts +25 -39
- package/dist/web/televet/booking/index.js +425 -4
- package/dist/web/televet/call/index.cjs +28 -1
- package/dist/web/televet/call/index.d.cts +2 -2
- package/dist/web/televet/call/index.d.ts +2 -2
- package/dist/web/televet/call/index.js +28 -1
- package/dist/web/televet/index.cjs +102 -4
- package/dist/web/televet/index.d.cts +22 -11
- package/dist/web/televet/index.d.ts +22 -11
- package/dist/web/televet/index.js +102 -4
- package/package.json +20 -4
- package/web/records/upload/native-blocked.cjs +12 -0
- package/web/records/upload/package.json +8 -0
- package/dist/televetGlobal-CEk0_cW9.d.cts +0 -34
- package/dist/televetGlobal-Cs9Wbqsy.d.ts +0 -34
|
@@ -1,4 +1,425 @@
|
|
|
1
|
-
'use strict';var react=require('react'),zod=require('zod'),jsxRuntime=require('react/jsx-runtime');var ju=Object.defineProperty;var o=(e,t)=>ju(e,"name",{value:t,configurable:true});function ir(e){throw new Error(`assertNever: unhandled discriminated-union member ${JSON.stringify(e)}`)}o(ir,"assertNever");function $l(e){return Object.freeze({kind:"error",terminal:true,code:e.code,retryable:e.retryable,wireMessage:e.wireMessage,synthesized:e.synthesized,lastEventId:e.lastEventId,serverRequestId:e.serverRequestId??null})}o($l,"errorFrame");function to(e){let t=globalThis.console;try{t?.error?.("[everfur] A host callback threw; the SDK ignored it.",e);}catch{}}o(to,"reportHostFailure");function Uu(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&typeof e.then=="function"}o(Uu,"isThenable");function lr(e,...t){if(typeof e=="function")try{let n=e(...t);return Uu(n)&&Promise.resolve(n).then(void 0,to),n}catch(n){to(n);return}}o(lr,"callHost");var Kl=new WeakMap;function $u(e){if(typeof e!="function")return;let t=Kl.get(e);if(t!==void 0)return t;let n=o((...r)=>{lr(e,...r);},"guarded");return Kl.set(e,n),n}o($u,"guardHost");function Kt(e,t){let n=null;for(let r of t){let i=e[r];typeof i=="function"&&(n??={...e},n[r]=$u(i));}return n??e}o(Kt,"guardHostProps");function ar(e,...t){let n;try{n=e(...t);}catch(r){return to(r),Promise.resolve({ok:false,error:r})}return Promise.resolve(n).then(r=>({ok:true,value:r}),r=>({ok:false,error:r}))}o(ar,"callHostAsync");var g=o(e=>e,"DRAFT"),Ku=["[PLACEHOLDER","[PLAN NAME]","[LINK]","[Last]","TODO","TBD"];function qu(e){return Ku.some(t=>e.toUpperCase().includes(t.toUpperCase()))}o(qu,"isPlaceholderCopy");function H(e,t){let n=e;for(let[r,i]of Object.entries(t))n=n.split(`{${r}}`).join(i);return n}o(H,"fill");var Q=Object.freeze({stateBlockedTitle:g("Not available in this state yet"),noCliniciansTitle:g("No vets available right now"),noCliniciansBody:g("Nobody is free in your area at the moment. This changes through the day."),noCliniciansRetryCta:g("Check again"),noCliniciansRegionBody:g("Video visits have to be with a vet licensed in your state, and we don\u2019t have one there yet."),yourVetTitle:g("Your vet"),licensedPillTemplate:g("Licensed in {state}"),reviewsLabel:g("reviews"),rescheduleFromTemplate:g("Moving your visit on {when}"),rescheduleFailed:g("That did not move. Your original time is unchanged."),rescheduleStepLabel:g("Reschedule"),rescheduleTitleTemplate:g("Pick a new time for {pet}"),rescheduleNowLabel:g("Now"),rescheduleMoveTemplate:g("Move to {when}"),rescheduleMoving:g("Moving\u2026"),rescheduleKeepLabel:g("Keep the visit as it is"),keepExistingCta:g("Keep my current time"),bookingPausedTitle:g("Booking is not available right now."),slotsErrorTitle:g("Could not load times"),noSlotsTitle:g("No times available"),nextOpeningTemplate:g("Next opening across our vets: {when}"),seeOtherVetsCta:g("See other vets"),retryCta:g("Try again"),holdExpired:g("That time is no longer held. Pick another."),slotTaken:g("That time was just taken. Pick another."),reasonPlaceholder:g("What is going on with your pet?"),reasonTooLong:g("That is too long. Please shorten it."),shareRecordsOff:g("Share health records with this vet"),confirmNotEntitled:g("A Pro membership is needed to book a video visit."),confirmFailed:g("That did not book. Try again."),checkAvailabilityCta:g("Check availability"),stateInterest:Object.freeze({cta:g("Add me to the list"),submitting:g("Adding you to the list\u2026"),joinedTitle:g("You are on the list"),joinedBody:g("We will let you know when this changes."),failed:g("That did not save. Try again.")}),media:Object.freeze({droppedTemplate:g("{n} attachment did not upload."),droppedPluralTemplate:g("{n} attachments did not upload."),refusedSizeTemplate:g("{n} attachment was too large to send."),refusedSizePluralTemplate:g("{n} attachments were too large to send."),refusedTypeTemplate:g("{n} attachment is a file type that cannot be sent."),refusedTypePluralTemplate:g("{n} attachments are file types that cannot be sent."),refusedUnreadableTemplate:g("{n} attachment could not be read."),refusedUnreadablePluralTemplate:g("{n} attachments could not be read.")}),navTitle:g("Book a visit"),petFallback:"your pet",whereTitleTemplate:g("Where will {pet} be during the visit?"),whereLeadTemplate:g("Pick where {pronoun} be for the call, not where you live. It decides what the vet can do."),wherePronounFallback:"they\u2019ll",whereFormLabelTemplate:g("Where {pet} will be"),whereLegend:g("State"),wherePrescribeMetaTemplate:g("Video visit, and prescriptions if {pet} needs them"),whereWellnessMeta:g("Wellness visit: advice and a care plan, no prescriptions yet"),whereAnotherState:g("Another state"),whereWhichState:g("Which state?"),whereLicensedTemplate:g("{vet} is licensed in {state}, so a prescription can be part of {pet}\u2019s plan."),whereAskEveryTime:g("We ask every time: state rules require it."),issuesTitleTemplate:g("What\u2019s going on with {pet}?"),issuesHint:g("Pick as many as you like."),issuesFormLabel:g("What\u2019s going on"),issuesLegend:g("Main issues"),issuesPickOne:g("Pick at least one. Not sure? Choose Something else."),otherIssue:g("Something else"),describeHeadingTemplate:g("Tell {vet} what you\u2019re seeing"),describeFieldLabel:g("What you\u2019re seeing"),emergencyCheck:Object.freeze({titleTemplate:g("Is {pet} doing any of these right now?"),lead:g("A scheduled video visit isn\u2019t the right place for an emergency."),signs:Object.freeze([g("Trouble breathing, or blue, grey or very pale gums"),g("Collapsed, or can\u2019t stand up"),g("A seizure"),g("Ate something toxic, like grapes, chocolate, xylitol or medicine"),g("A swollen, hard belly, or retching with nothing coming up"),g("Bleeding that won\u2019t stop"),g("Straining to pee with nothing coming out")]),formLabel:g("Emergency check"),legend:g("Any of these now?"),noneCta:g("No, none of these"),someCta:g("Yes, at least one")}),timeHeading:g("Pick a time"),timeMorning:g("Morning"),timeAfternoon:g("Afternoon"),timeEvening:g("Evening"),timeLegendTemplate:g("Time on {day}"),dayLegend:g("Day"),reviewHeading:g("Does this look right?"),summaryWhere:g("Where"),changeCta:g("Change"),whereAttestTemplate:g("{pet} and I will be in {state} during the visit."),attestBoth:g("Check both boxes to book the visit."),bookedStepLabel:g("Booked"),bookedTitleTemplate:g("You\u2019re booked with {vet}"),bookedLeadTemplate:g("{when}, for {pet}."),footnote:g("Video visits are with a licensed veterinarian. Prescriptions where allowed, starting with California. In an emergency, go to the nearest emergency animal hospital."),rescheduleNavTitle:g("Change your visit"),close:g("Close"),continueCta:g("Continue"),petSelectTitle:g("Who is this visit for?"),addPetCta:g("Add a pet"),addAnotherPetCta:g("Add another pet"),locationUnknownTitle:g("We need your location to find a vet"),locationUnknownBody:g("Turn on location for Everfur, then try again."),locationUnknownCta:g("Allow location"),locationBlockedTitle:g("Location is turned off"),locationBlockedBody:g("Everfur needs your location to match you with a vet in your area."),locationBlockedCta:g("Open Settings"),locationUnavailableTitle:g("We could not read your location"),locationUnavailableBody:g("Try again in a moment."),stateAttestTemplate:g("I confirm my pet and I are in {state} right now."),describeHeading:g("Tell the vet what you are seeing"),describeHelpLong:g("When it started, what\u2019s changed, what you\u2019ve tried. Anything helps."),addPhotoCta:g("Add photos or videos"),addPhotoMeta:g("Optional. A close-up in good light helps."),removePhotoLabel:g("Remove photo"),summaryPet:g("Pet"),summaryVet:g("Vet"),summaryWhen:g("When"),summaryLength:g("Length"),summaryReason:g("About"),summaryLengthTemplate:g("{n} minutes"),confirmCta:g("Book the visit"),confirmBusy:g("Booking\u2026"),bookedTitle:g("You are booked."),addToCalendarCta:g("Add to calendar"),doneCta:g("Done"),booked:Object.freeze({remindPromise:g("We will notify you 30 minutes before."),summaryPromise:g("{pet}'s summary goes to the vet ahead of the call."),recordsPromiseTemplate:g("{pet}\u2019s records and your notes go to {vet} ahead of the call."),recordsPhotoPromiseTemplate:g("{pet}\u2019s records, your notes and the photo go to {vet} ahead of the call."),stepsLabel:g("What happens next"),joinPromise:g("Join right here in the app. No links to hunt for."),backToPet:g("Back to {pet}"),calendarAdded:g("Added to your calendar"),calendarFailedBody:g("That did not save to your calendar.")}),chrome:Object.freeze({closeHint:g("Closes without saving"),discardTitle:g("Leave without booking?"),discardBody:g("Your answers will not be saved."),discardConfirmCta:g("Leave"),discardKeepCta:g("Keep going"),noPetsTitle:g("No pets on this account"),loadFailedTitle:g("Could not load"),retryCta:g("Try again")}),emergency:Object.freeze({bannerTitle:g("This can\u2019t wait for a scheduled visit."),keepBookingCta:g("I\u2019ve handled this, continue booking"),lede:g("What you\u2019re describing is the kind of thing vets want to see in person, now. Call one of these first."),ledeWithoutExits:g("What you\u2019re describing is the kind of thing vets want to see in person, now."),exitPrimaryVetTitle:g("Call {petName}\u2019s regular vet"),exitFindErTitle:g("Find an emergency vet near you"),startCallHint:g("Starts a phone call"),poisonControl:g("ASPCA Animal Poison Control"),poisonControlDetail:g("(888) 426-4435 \xB7 a fee may apply"),poisonControlTel:"tel:+18884264435"}),visit:Object.freeze({title:g("Your visit")}),loading:Object.freeze({pets:"Loading pets. Nothing to read yet.",clinicians:"Loading vets. Nothing to read yet.",slots:"Loading times. Nothing to read yet.",consult:"Loading your visit. Nothing to read yet.",progressTemplate:"Step {step} of {total}"})});function ql(e=Q){return typeof e=="string"?[e]:typeof e!="object"||e===null?[]:Object.values(e).flatMap(t=>ql(t))}o(ql,"televetBookingCopyValues");function at(){return ql().every(e=>e.trim().length>0&&!qu(e))}o(at,"isTelevetBookingCopyReady");var qt=Object.freeze({findEmergencyVet:Q.emergency.exitFindErTitle,poisonControl:Q.emergency.poisonControl,poisonControlDetail:Q.emergency.poisonControlDetail,poisonControlTel:Q.emergency.poisonControlTel}),m=Object.freeze({...Q,close:"Close booking",reasonPlaceholder:"She's been scratching her left ear a lot this week...",backLabel:"Back"});var no=Object.freeze([Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);Object.freeze(no.map(e=>e.wireCode));var Gu=Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),Gl=Object.freeze(no.map(e=>Object.freeze({wireCode:e.wireCode,envelope:e.envelope,retryable:e.retryable,normalized:Gu[e.wireCode]}))),Ju=new Map(Gl.map(e=>[e.envelope+e.wireCode.toUpperCase(),e])),Xu=Object.freeze(["http_envelope",...[...new Set(Gl.map(e=>e.envelope))].filter(e=>e!=="http_envelope").sort()]);function sr(e,t){if(typeof e!="string")return;let n=e.trim().toUpperCase();if(n.length!==0)for(let r of [t??"http_envelope",...Xu]){let i=Ju.get(r+n);if(i)return i}}o(sr,"contractErrorFor");function Qu(e){return e.envelope==="sse_frame"?`/errors#sse-${e.wireCode}`:e.envelope==="oauth_error"?`/errors#oauth-${e.wireCode}`:`/errors#${e.wireCode}`}o(Qu,"contractDocUrl");function Jl(e){return null}o(Jl,"publishedDocUrl");var Zu=Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function Xl(e){return Zu[e]}o(Xl,"categoryFor");function Ql(e){let t=sr(e);if(t)return t.normalized;let n=(e??"").trim().toUpperCase(),r=n.replace(/[^A-Z0-9]/g,"");if(r==="AUTHREJECTED")return "authRejected";if(n.startsWith("AUTH"))return "authExpired";switch(r){case "DAILYQUOTAEXCEEDED":case "QUOTAEXCEEDED":return "quotaExceeded";case "RATELIMITED":case "TOOMANYREQUESTS":case "TELEVETRATELIMITED":return "rateLimited";case "IDEMPOTENCYKEYCONFLICT":case "IDEMPOTENCYCONFLICT":return "idempotencyConflict";case "ACCESSDENIED":case "FORBIDDEN":return "accessDenied";case "NOTFOUND":case "CONVERSATIONNOTFOUND":return "conversationNotFound";case "PETNOTFOUND":return "petNotFound";case "TIMEOUT":case "STREAMTIMEOUT":return "streamTimeout";case "MEDIAUPLOADFAILED":case "UNRECOGNIZEDVIDEOFORMAT":case "FILETOOSMALL":return "mediaUploadFailed";case "MODERATIONBLOCKED":return "moderationBlocked";case "UPSTREAMLLMTIMEOUT":return "upstreamLlmTimeout";case "INTERNALERROR":case "INTERNALSERVERERROR":return "internalError";case "STREAMINCOMPLETE":case "CHATSTREAMINCOMPLETE":return "streamIncomplete";case "INVALIDANALYSISTYPE":case "INVALIDUPLOADPURPOSE":return "unknown";default:return "unknown"}}o(Ql,"fromWire");var ec=new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function ro(e){return ec.has(e)}o(ro,"isAutoRetryable");var tc=new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function Zl(e){return ro(e)||tc.has(e)}o(Zl,"isRetryableCode");var nc=500,oo=8e3,ea=4;function ta(e,t=Math.random){let n=Math.max(0,e),r=Math.min(nc*2**n,oo);return Math.floor(t()*r)}o(ta,"backoffDelayMs");var rc=Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:"This feature isn't available on your account right now.",paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",unknown:"Something went wrong. Please try again."});function io(e){return rc[e]}o(io,"userFacingError");function na(e,t,n){Object.defineProperty(e,t,{value:n,enumerable:false,writable:false,configurable:false});}o(na,"defineHidden");var oc=/^[a-z][a-z0-9_]{0,63}$/;function pe(e,t){let n=sr(t?.wireCode,t?.wireEnvelope),r={code:e,category:Xl(e),retryable:t?.retryable??Zl(e),displayMessage:io(e)};if(t?.httpStatus!==void 0&&(r.httpStatus=t.httpStatus),t?.requestId&&(r.requestId=t.requestId),typeof t?.reasonCode=="string"&&oc.test(t.reasonCode)&&(r.reasonCode=t.reasonCode),n);return t?.wireMessage&&na(r,"wireMessage",t.wireMessage),t?.raw!==void 0&&t.raw!==null&&na(r,"raw",t.raw),Object.freeze(r)}o(pe,"makeEverfurError");function W(e,t){return Object.freeze(t===void 0?{ok:true,value:e}:{ok:true,value:e,warning:t})}o(W,"ok");function N(e){return Object.freeze({ok:false,error:e})}o(N,"err");var dr=class dr extends Error{constructor(t,n){super(n),this.name="EverfurConfigError",this.kind=t,Object.setPrototypeOf(this,dr.prototype);}};o(dr,"EverfurConfigError");var bn=dr;function ic(e){let t={};return e.mode==="personalized"?t.authorization=`Bearer ${e.token}`:t["x-everfur-partner-key"]=e.publishableKey,e.userRef&&(t["x-everfur-user-ref"]=e.userRef),e.sessionId&&(t["x-everfur-session-id"]=e.sessionId),t}o(ic,"authHeaders");function hn(e,t){return {...e,headers:{...lc(e.headers),...ic(t)}}}o(hn,"withAuthHeaders");function lc(e){if(!e)return {};let t={};for(let[n,r]of Object.entries(e)){let i=n.toLowerCase();i==="authorization"||i==="x-everfur-partner-key"||(t[n]=r);}return t}o(lc,"stripAuthHeaders");async function ra(e,t){if(t.mode==="anonymous")return t.transport.request(hn(e,{mode:"anonymous",publishableKey:t.publishableKey,userRef:t.userRef,...t.sessionId?{sessionId:t.sessionId}:{}}));let n;try{n=await t.identity.currentToken();}catch{return N(lo())}let r=await t.transport.request(hn(e,{mode:"personalized",token:n,userRef:t.userRef,...t.sessionId?{sessionId:t.sessionId}:{}}));if(r.ok||r.error.httpStatus!==401)return r;let i;try{i=await t.identity.currentToken({forceRefresh:!0});}catch{return N(lo())}let l=await t.transport.request(hn(e,{mode:"personalized",token:i,userRef:t.userRef,...t.sessionId?{sessionId:t.sessionId}:{}}));return !l.ok&&l.error.httpStatus===401?N(lo(l.error.httpStatus)):l}o(ra,"authedSend");function lo(e){return pe("authRejected",{retryable:false,...e!==void 0?{httpStatus:e}:{}})}o(lo,"authRejectedError");function oa(e){return pe("internalError",{retryable:true,wireMessage:ac(e)})}o(oa,"networkError");function ac(e){return e instanceof Error?e.message:typeof e=="string"?e:"network request failed"}o(ac,"describeCause");var ao=3e4,sc=oo*2,dc="idempotency-key",uc=new Set(["POST","PUT","PATCH","DELETE"]),cc=Object.freeze({onEvent(){}}),pc=Object.freeze({setTimeout:o((e,t)=>setTimeout(e,t),"setTimeout"),clearTimeout:o(e=>clearTimeout(e),"clearTimeout"),now:o(()=>Date.now(),"now")});function fc(e){let t=e.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return t.length===0?null:`efs_${t}`.slice(0,128)}o(fc,"seededIdempotencyKey");function Ot(e){let t=e.observer??cc,n=e.timers??pc,r=e.rng??Math.random,i=e.sleep??((p,c)=>Pc(p,n,c)),l=e.maxAttempts??ea,s=e.unaryTimeoutMs??ao,a=e.newIdempotencyKey??so(),d=o(p=>{try{t.onEvent(p);}catch{}},"emit");async function u(p,c,v){let b=v?.maxAttempts,C=Math.max(1,b??l),E=v?.idempotent??uc.has(c.method),h=v?.idempotencyKey===void 0?null:fc(v.idempotencyKey),S=E?h??a():null,w=mc(c,S),R=0;for(;;){let x=o(j=>Object.freeze({call:p,method:c.method,path:c.path,attempt:R,...S?{idempotencyKey:S}:{},...j}),"stamp");d(x({phase:"attempt"}));let T=kc(s,n),I=xc(T.signal,c.signal),_;try{_=await ra({...w,signal:I.signal},e.auth);}catch(j){_=N(oa(j));}finally{I.dispose(),T.cancel();}if(_.ok)return d(x({phase:"settled",ok:true,reason:"ok"})),_;let P=_.error,A=gc(P,R,{maxAttempts:C,rng:r,now:n.now(),aborted:c.signal?.aborted===true,...b!==void 0?{perCallMaxAttempts:b}:{},...e.errorPolicy!==void 0?{policy:e.errorPolicy}:{}}),V={ok:false,code:P.code,reason:A.reason,...P.httpStatus!==void 0?{httpStatus:P.httpStatus}:{},...P.requestId!==void 0?{requestId:P.requestId}:{}};if(!A.retry)return d(x({phase:"settled",...V})),N(P);if(d(x({phase:"retry",...V,delayMs:A.delayMs})),await i(A.delayMs,c.signal),c.signal?.aborted===true)return d(x({phase:"settled",...V,reason:"aborted"})),N(P);R+=1;}}o(u,"send");async function f(p){return hn(p,await Ec(e.auth))}o(f,"authorize");async function*y(p,c,v){d(Object.freeze({call:p,phase:"stream.open",method:c.method,path:c.path,attempt:0}));try{yield*e.auth.transport.stream(c,v);}catch{yield $l({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:null});}}return o(y,"stream"),Object.freeze({send:u,authorize:f,stream:y})}o(Ot,"createRequestFunnel");function mc(e,t){let n={};for(let[r,i]of Object.entries(e.headers??{}))r.toLowerCase()!==dc&&(n[r]=i);return t!==null&&(n["Idempotency-Key"]=t),{...e,headers:n}}o(mc,"assembleHeaders");function so(){let e=0;return ()=>`efk_${Date.now().toString(36)}_${(e++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}o(so,"defaultIdempotencyKeyFactory");var yc=10;function gc(e,t,n){if(n.aborted)return {retry:false,reason:"aborted"};let r=vc(e);if(r==="quota")return {retry:false,reason:"daily-quota-exhausted"};if(r!=="burst"&&!ro(e.code))return {retry:false,reason:"terminal-code"};let i=r==="burst"?"burst-throttle":"retryable-code";if(o(()=>{if(n.policy===void 0)return false;try{return !n.policy.shouldRetry(e.code,t)}catch{return false}},"policyVetoedRetry")())return {retry:false,reason:"terminal-code"};let s=o(()=>{if(n.policy===void 0)return null;let u;try{u=n.policy.maxAttempts(e.code);}catch{return null}return typeof u!="number"||!Number.isFinite(u)?null:Math.max(1,Math.min(yc,Math.floor(u)))},"policyCeiling"),a=n.perCallMaxAttempts??s()??n.maxAttempts;if(t+1>=a)return {retry:false,reason:"attempts-exhausted"};let d=bc(e,n.now);return d!==null?d>sc?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:i,delayMs:d}:{retry:true,reason:i,delayMs:ta(t,n.rng)}}o(gc,"decideRetry");function vc(e){let t=e.code==="unknown"?Ql(Cc(e.raw)):e.code;return t==="quotaExceeded"?"quota":t==="rateLimited"||e.httpStatus===429?"burst":null}o(vc,"throttleKind");function bc(e,t){let n=Tc(e.raw);if(n!==null){let i=n-t;return i>0?i:0}let r=hc(e.raw);return r===null?null:Math.round(r*1e3)}o(bc,"retryOverrideMs");function hc(e){for(let t of uo(e)){let n=t.retry_after_seconds;if(typeof n=="number"&&Number.isFinite(n)&&n>=0)return n}return null}o(hc,"findRetryAfterSeconds");function Tc(e){for(let t of uo(e)){let n=t.resets_at,r=Sc(n);if(r!==null)return r}return null}o(Tc,"findResetsAt");function uo(e){if(!ia(e))return [];let t=[e];for(let n of ["error","detail"]){let r=e[n];ia(r)&&t.push(r);}return t}o(uo,"candidateScopes");function Sc(e){if(typeof e=="number"&&Number.isFinite(e))return e<1e11?Math.round(e*1e3):Math.round(e);if(typeof e=="string"&&e.trim().length>0){let t=Date.parse(e);return Number.isFinite(t)?t:null}return null}o(Sc,"parseInstantMs");function Cc(e){for(let t of uo(e)){let n=t.code;if(typeof n=="string"&&n.length>0)return n}return null}o(Cc,"rawWireCode");function ia(e){return typeof e=="object"&&e!==null}o(ia,"isRecord");async function Ec(e){return e.mode==="anonymous"?{mode:"anonymous",publishableKey:e.publishableKey,userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}:{mode:"personalized",token:await e.identity.currentToken(),userRef:e.userRef,...e.sessionId?{sessionId:e.sessionId}:{}}}o(Ec,"resolveDeviceAuth");function kc(e,t){let n=new AbortController,r=t.setTimeout(()=>n.abort(),e);return {signal:n.signal,cancel:o(()=>t.clearTimeout(r),"cancel")}}o(kc,"boundedSignal");function xc(e,t){let n=o(()=>{},"noop");if(!t)return {signal:e,dispose:n};let r=new AbortController;if(e.aborted||t.aborted)return r.abort(),{signal:r.signal,dispose:n};let i=o(()=>r.abort(),"onAbort");return e.addEventListener("abort",i,{once:true}),t.addEventListener("abort",i,{once:true}),{signal:r.signal,dispose:o(()=>{e.removeEventListener("abort",i),t.removeEventListener("abort",i);},"dispose")}}o(xc,"mergeSignals");function Pc(e,t,n){return e<=0||n?.aborted===true?Promise.resolve():new Promise(r=>{let i=t.setTimeout(()=>{n?.removeEventListener("abort",l),r();},e),l=o(()=>{t.clearTimeout(i),r();},"onAbort");n?.addEventListener("abort",l,{once:true});})}o(Pc,"delayAbortable");var Rc=Object.freeze(["image/jpeg","image/png","image/webp","image/heic","image/heif","application/pdf","text/csv","video/mp4","video/quicktime"]),la=25*1024*1024,_c=200*1024*1024,wc=[[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".png","image/png"],[".webp","image/webp"],[".heic","image/heic"],[".heif","image/heif"],[".pdf","application/pdf"],[".csv","text/csv"],[".mp4","video/mp4"],[".mov","video/quicktime"]];function ur(e,t){let n=(t??"").trim().toLowerCase();if(n==="image/jpg")return "image/jpeg";if(Rc.includes(n))return n;if(n.length>0)return null;let r=e.toLowerCase();return wc.find(([i])=>r.endsWith(i))?.[1]??null}o(ur,"televetAttachmentContentType");function aa(e){let t=ur(e.filename,e.mimeType);if(t===null)return "type";if(!Number.isFinite(e.fileSize)||e.fileSize<=0)return "unreadable";let n=t.startsWith("video/")?_c:la;return e.fileSize<=n?null:"size"}o(aa,"televetAttachmentRefusal");function sa(e){if(typeof e!="object"||e===null)return null;let t=e,n=o(d=>typeof d=="string"&&d.length>0?d:null,"str"),r=o(d=>typeof d=="number"&&Number.isFinite(d)?d:null,"num"),i=n(t.upload_url),l=n(t.s3_key);if(i===null||l===null)return null;let s={},a=t.upload_fields;if(typeof a=="object"&&a!==null)for(let[d,u]of Object.entries(a))typeof u=="string"&&(s[d]=u);return Object.freeze({upload_id:n(t.upload_id)??"",upload_url:i,upload_fields:Object.freeze(s),expires_in_seconds:r(t.expires_in_seconds)??0,max_content_length:r(t.max_content_length)??la,s3_key:l,purpose:n(t.purpose)})}o(sa,"parseTelevetAttachmentPolicy");function Ic(e){if(typeof e!="object"||e===null)return null;let t=[e,e.detail,e.error];for(let n of t)if(!(typeof n!="object"||n===null))for(let r of ["error","code"]){let i=n[r];if(typeof i=="string"&&i.length>0)return i}return null}o(Ic,"wireCodeOf");function da(e){if(e.httpStatus===404)return "dark";if(e.httpStatus===400){let t=Ic(e.raw);if(t==="FILE_TOO_LARGE")return "size";if(t==="INVALID_CONTENT_TYPE")return "type"}return "failed"}o(da,"televetAttachmentInitiateFailure");var fa="televet_booking_not_live";function cr(e){return pe("conflict",{retryable:false,reasonCode:fa,wireMessage:`the booking was answered with a consult whose status is ${e}, which is not a live visit`})}o(cr,"televetBookingNotLiveError");var co="televet_booking_key_reused",ua="IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST";function pr(e){return e.httpStatus!==409||e.reasonCode===co||Tn(e)?.code!==ua?e:pe(e.code,{retryable:false,httpStatus:409,...e.requestId!==void 0?{requestId:e.requestId}:{},wireCode:ua,reasonCode:co,...e.wireMessage!==void 0?{wireMessage:e.wireMessage}:{},raw:e.raw})}o(pr,"foldTelevetBookingKeyReused");function Tn(e){let t=e.raw;if(typeof t!="object"||t===null)return null;let n=t,r=n.detail??n.error;return typeof r=="object"&&r!==null?r:n}o(Tn,"details");function Ac(e){let t=Tn(e)?.categories;return Array.isArray(t)?Object.freeze(t.filter(n=>typeof n=="string")):Object.freeze([])}o(Ac,"categoriesOf");function ca(e){let t=Tn(e)?.retry_after_seconds;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:null}o(ca,"retryAfterOf");function pa(e){let t=e.wireMessage;if(typeof t=="string"&&t.trim().length>0)return t.trim();let n=Tn(e)?.message;return typeof n=="string"&&n.trim().length>0?n.trim():null}o(pa,"messageOf");function Oc(e){let t=e.reasonCode;if(typeof t=="string"&&t.length>0)return t;let n=Tn(e),r=n?.code??n?.error_code;return typeof r=="string"&&r.length>0?r:null}o(Oc,"codeOf");function yt(e){let t=e.httpStatus;if(t===402)return Object.freeze({kind:"not_entitled"});if(t===429||e.code==="rateLimited"||e.code==="quotaExceeded")return Object.freeze({kind:"rate_limited",retryAfterSeconds:ca(e),message:pa(e)});if(t===404)return Object.freeze({kind:"unavailable"});switch(Oc(e)){case "televet_rate_limited":return Object.freeze({kind:"rate_limited",retryAfterSeconds:ca(e),message:pa(e)});case "televet_emergency_ack_required":return Object.freeze({kind:"emergency",categories:Ac(e)});case "televet_not_entitled":return Object.freeze({kind:"not_entitled"});case "televet_slot_conflict":return Object.freeze({kind:"slot_taken"});case "televet_hold_invalid":return Object.freeze({kind:"slot_taken"});case fa:return Object.freeze({kind:"slot_taken"});case co:return Object.freeze({kind:"slot_taken"});case "televet_clinician_cannot_prescribe":case "televet_clinician_unavailable":case "televet_clinician_not_bookable":return Object.freeze({kind:"clinician_unavailable"});case "televet_membership_conflict":return Object.freeze({kind:"not_entitled"});case "televet_registry_unavailable":return Object.freeze({kind:"failed"});}return Object.freeze({kind:"failed"})}o(yt,"televetBookingRefusal");function Bc(e){try{return new URL(e.trim()).protocol==="https:"}catch{return false}}o(Bc,"isSafeRoomUrl");function Lc(e,t){return Bc(e)&&t.trim().length>0}o(Lc,"isUsableRoomCredential");function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(fr,"isRecord");function po(e,t){return typeof e=="number"&&Number.isInteger(e)&&e>=t?e:null}o(po,"wholeNumber");function Nc(e){if(!fr(e))return null;let t=po(e.consult_minutes,1),n=po(e.auto_end_minutes,0),r=po(e.warn_before_seconds,0);return t===null||n===null||r===null?null:Object.freeze({consultMinutes:t,autoEndMinutes:n,warnBeforeSeconds:r})}o(Nc,"parseCallLimits");function fo(e){if(!fr(e))return null;let t=e.room_url??e.url,n=e.token;if(typeof t!="string"||typeof n!="string"||!Lc(t,n))return null;let r=e.recording_notice;return Object.freeze({roomUrl:t.trim(),token:n,recordingNotice:typeof r=="boolean"?r:true,callLimits:Nc(e.call_limits)})}o(fo,"parseVetCallCredential");function mo(e){let t=ma(e.raw);return t!==null&&t.length>0?t:null}o(mo,"vetCallJoinReason");function ma(e){if(!fr(e))return null;let t=e.detail??e.error,r=(fr(t)?t:e).reason;return typeof r=="string"?r:null}o(ma,"reasonOf");function yo(e){if(e.httpStatus===404)return "unavailable";let t=ma(e.raw);return t==="too_early"||t==="too_late"||t==="room_not_ready"?t:t!==null&&t.startsWith("status_")?"not_joinable":"unknown"}o(yo,"vetCallJoinRefusal");var ga=["scheduled","in_progress","awaiting_summary","completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"],Sn=new Set(["completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"]),Fc=new Set(["scheduled","in_progress","awaiting_summary"]);function mr(e){return Fc.has(e.status)}o(mr,"isLiveConsult");var va=["wellness","prescription"],Mc=60;function vo(e){let t=Date.parse(e.startsAt),n=Date.parse(e.endsAt);if(Number.isNaN(t)||Number.isNaN(n))return null;let r=Math.round((n-t)/6e4);return r>0?Math.min(r,Mc):null}o(vo,"televetSlotMinutes");var yr=64,vt=2e3,gr=10;function Ne(e){return typeof e=="string"&&/^[A-Za-z]{2}$/.test(e.trim())}o(Ne,"isWellFormedStateCode");function Ze(e){return typeof e=="object"&&e!==null?e:null}o(Ze,"row");function he(e){return typeof e=="string"&&e.length>0?e:null}o(he,"str");function gt(e){return typeof e=="string"&&e.trim().length>0?e.trim():null}o(gt,"trimmedOrNull");function Yt(e,t){return typeof e=="boolean"?e:t}o(Yt,"bool");function go(e){return typeof e=="number"&&Number.isFinite(e)?e:null}o(go,"num");function ya(e,t){return typeof t=="string"&&e.includes(t)?t:"unknown"}o(ya,"closed");function Gt(e,t){if(!Array.isArray(e))return Object.freeze([]);let n=[];for(let r of e){let i=t(r);i!==null&&n.push(i);}return Object.freeze(n)}o(Gt,"parseList");function ba(e,t){let n=Ze(e);return n===null?null:Object.freeze({state:he(n.state)??t,wellnessAvailable:Yt(n.wellness_available,false),prescriptionsAvailable:Yt(n.prescriptions_available,false),cancellationPolicyText:gt(n.cancellation_policy_text)})}o(ba,"parseStatePolicy");function ha(e){let t=Ze(e);if(t===null)return null;let n=gt(t.summary),r=gt(t.version);return n===null||r===null?null:Object.freeze({summary:n,version:r})}o(ha,"parseCancellationPolicy");function Ta(e){let t=Ze(e);if(t===null)return null;let n=he(t.clinician_id),r=he(t.display_name);return n===null||r===null?null:Object.freeze({clinicianId:n,displayName:r,credentials:gt(t.credentials_text),rating:go(t.rating),ratingCount:go(t.rating_count),bio:gt(t.bio),photoRef:he(t.photo_ref),licensedStates:Gt(t.licensed_states,i=>{let l=Ze(i),s=l===null?null:he(l.state);return s===null?null:Object.freeze({state:s,canPrescribe:Yt(l?.can_prescribe,false)})})})}o(Ta,"parseClinician");function bo(e){let t=Ze(e);if(t===null)return null;let n=he(t.slot_id),r=he(t.starts_at);return n===null||r===null?null:Object.freeze({slotId:n,startsAt:r,endsAt:he(t.ends_at)??r})}o(bo,"parseSlot");function Sa(e){let t=Ze(e);if(t===null)return null;let n=t.is_emergency===true,r=t.fallback===true;return n||r?Object.freeze({isEmergency:n,fallback:r}):t.is_emergency===false&&t.fallback===false?Object.freeze({isEmergency:false,fallback:false}):null}o(Sa,"parseTriageVerdict");function Ca(e){let t=Ze(e);if(t===null)return null;let n=he(t.slot_id),r=he(t.hold_expires_at);return n===null||r===null?null:Object.freeze({slotId:n,expiresAt:r})}o(Ca,"parseSlotHold");function Cn(e){let t=Ze(e);if(t===null)return null;let n=he(t.consult_id),r=he(t.scheduled_at);return n===null||r===null?null:Object.freeze({consultId:n,petId:he(t.pet_id)??"",clinicianId:he(t.clinician_id)??"",clinicianName:gt(t.display_name),reasonText:gt(t.reason_text),mediaRefs:Gt(t.media_refs,i=>he(i)),status:ya(ga,t.status),kind:ya(va,t.kind),scheduledAt:r,emergencyFlagged:Yt(t.emergency_flagged,false),hasRoom:he(t.meeting_url)!==null})}o(Cn,"parseConsult");function Ea(e){let t=Ze(e);return Object.freeze({active:Yt(t?.active,false)})}o(Ea,"parseBookingEntitlement");var vr=240;function ka(e){let t=Ze(e);if(t===null)return null;let n=go(t.fee_cents);return n===null||n<0?null:Object.freeze({feeCents:n,currency:he(t.currency)??"usd",feeRecorded:Yt(t.fee_recorded,n>0),summary:gt(t.summary)})}o(ka,"parseCancelReceipt");var Pa="/widget/v1/televet",hr=`${Pa}/messages/threads`;function ho(e){return `${hr}/${encodeURIComponent(e)}/messages`}o(ho,"televetThreadMessagesCall");function Ra(e){return `${hr}/${encodeURIComponent(e)}/read`}o(Ra,"televetThreadReadCall");function _a(e){return `${Pa}/consults/${encodeURIComponent(e)}/summary`}o(_a,"televetVisitSummaryCall");var To=4e3,En=50,wa=100,So=zod.z.string().min(1).refine(e=>!Number.isNaN(Date.parse(e))),ht=zod.z.string().nullish(),Co=zod.z.object({message_id:zod.z.string().min(1),pet_ref:zod.z.string().min(1),role:zod.z.enum(["owner","vet","system"]),content:zod.z.string(),created_at:So,sender:zod.z.object({display_name:ht,specialty:ht}).nullish(),sender_display_name:ht,attachment_count:zod.z.number().int().nonnegative().nullish()}),Dc=zod.z.object({pet_ref:zod.z.string().min(1),last_message_at:So,unread_count:zod.z.number().int().nonnegative().nullish(),owner_can_start:zod.z.boolean().nullish(),last_message:Co.nullish()}),Vc=zod.z.object({drug:zod.z.string().nullish(),strength:ht,form:ht,sig:ht,quantity:zod.z.union([zod.z.string(),zod.z.number()]).nullish(),refills:zod.z.number().int().nonnegative().nullish()}).passthrough(),zc=zod.z.object({consult_id:zod.z.string().min(1),findings_text:zod.z.string().nullish(),next_steps_text:zod.z.string().nullish(),medications:zod.z.array(zod.z.unknown()).nullish(),product_refs:zod.z.array(zod.z.string()).nullish(),action_items:zod.z.array(zod.z.string()).nullish(),approved_at:So,approved_by_display_name:ht,credentials_text:ht});function et(e){let t=e?.trim()??"";return t.length>0?t:null}o(et,"nonBlank");function Eo(e){let t=e.role==="vet";return Object.freeze({messageId:e.message_id,petRef:e.pet_ref,role:e.role,content:e.content,createdAt:e.created_at,senderName:t?et(e.sender?.display_name)??et(e.sender_display_name):null,senderSpecialty:t?et(e.sender?.specialty):null,attachmentCount:e.attachment_count??0})}o(Eo,"toMessage");function jc(e){let t=Co.safeParse(e);return t.success?Eo(t.data):null}o(jc,"mapVetMessage");function Hc(e){let t=zod.z.array(Co).safeParse(e);return t.success?Object.freeze(t.data.map(Eo)):null}o(Hc,"mapVetMessages");function Wc(e){let t=zod.z.array(Dc).safeParse(e);return t.success?Object.freeze(t.data.map(n=>Object.freeze({petRef:n.pet_ref,lastMessageAt:n.last_message_at,unreadCount:n.unread_count??0,ownerCanStart:n.owner_can_start??true,lastMessage:n.last_message?Eo(n.last_message):null}))):null}o(Wc,"mapVetThreads");function Uc(e){let t=Vc.safeParse(e);if(!t.success)return null;let n=et(t.data.drug);if(n===null)return null;let r=t.data.quantity;return Object.freeze({drug:n,strength:et(t.data.strength),form:et(t.data.form),sig:et(t.data.sig),quantity:r==null?null:et(String(r)),refills:t.data.refills??null})}o(Uc,"toMedication");function $c(e){let t=zc.safeParse(e);if(!t.success)return null;let n=t.data;return Object.freeze({consultId:n.consult_id,findingsText:n.findings_text??"",nextStepsText:n.next_steps_text??"",medications:Object.freeze((n.medications??[]).map(Uc).filter(r=>r!==null)),productRefs:Object.freeze([...n.product_refs??[]]),actionItems:Object.freeze((n.action_items??[]).filter(r=>r.trim().length>0)),approvedAt:n.approved_at,approvedByName:et(n.approved_by_display_name),credentialsText:et(n.credentials_text)})}o($c,"mapVisitSummary");function kn(e){return e.httpStatus===404}o(kn,"isVetMessagesDark");function ko(e){return e.httpStatus===409}o(ko,"isVetThreadVetFirst");function bt(e){return N(pe("validationFailed",{retryable:false,wireMessage:e}))}o(bt,"invalid");function br(e){return N(pe("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}o(br,"unusable");function Kc(e){return e===void 0||!Number.isFinite(e)?En:Math.min(wa,Math.max(1,Math.trunc(e)))}o(Kc,"clampLimit");function xa(e){return e.trim().length>0&&!Number.isNaN(Date.parse(e))}o(xa,"isStamp");function qc(e,t,n){try{e?.track(t,n);}catch{}}o(qc,"safeTrack");function Ia(e,t){return {async listVetThreads(n){let r=await e.send("televet.messages.threads",{method:"GET",path:hr,...n?{signal:n}:{}});if(!r.ok)return N(r.error);let i=Wc(r.value);return i===null?br("the vet thread list was unreadable"):W(i)},async listVetMessages(n,r={},i){let l=n.trim();if(l.length===0)return bt("petRef is required");let s=r.before?.trim();if(s!==void 0&&s.length>0&&!xa(s))return bt("before must be an ISO date-time");let a=await e.send("televet.messages.thread",{method:"GET",path:ho(l),query:{...s?{before:s}:{},limit:Kc(r.limit)},...i?{signal:i}:{}});if(!a.ok)return N(a.error);let d=Hc(a.value);return d===null?br("the vet thread page was unreadable"):W(d)},async sendVetMessage(n,r){let i=n.trim();if(i.length===0)return bt("petRef is required");if(r.trim().length===0)return bt("content must not be blank");if(r.length>To)return bt(`content must be at most ${To} characters`);let l=await e.send("televet.messages.send",{method:"POST",path:ho(i),body:{content:r}},{idempotent:false,maxAttempts:1});if(!l.ok)return qc(t,"televet.messages.send_failed",{status:l.error.httpStatus??null}),N(l.error);let s=jc(l.value);return s===null?br("the sent message was unreadable"):W(s)},async markVetThreadRead(n,r){let i=n.trim();if(i.length===0)return bt("petRef is required");if(!xa(r))return bt("readAt must be an ISO date-time");let l=await e.send("televet.messages.read",{method:"PUT",path:Ra(i),body:{read_at:r}});return l.ok?W(void 0):N(l.error)},async visitSummary(n,r){let i=n.trim();if(i.length===0)return bt("consultId is required");let l=await e.send("televet.messages.summary",{method:"GET",path:_a(i),...r?{signal:r}:{}});if(!l.ok)return N(l.error);let s=$c(l.value);return s===null?br("the visit summary was unreadable"):W(s)}}}o(Ia,"createTelevetMessagesMethods");var st="/widget/v1/televet",Yc=`${st}/state-policy`,Gc=`${st}/vets`,Aa=`${st}/slots`,Jc=`${st}/slots/next`,xn=`${st}/consults`,Xc=`${st}/entitlement`,Qc=`${st}/cancellation-policy`,Zc=`${st}/attachments/initiate`,ep=`${xn}/triage`;function Oa(e){return `${Aa}/${encodeURIComponent(e)}/hold`}o(Oa,"televetHoldCall");function Ba(e){return `${xn}/${encodeURIComponent(e)}/reschedule`}o(Ba,"televetRescheduleCall");function Tr(e){return `${xn}/${encodeURIComponent(e)}`}o(Tr,"televetConsultCall");function La(e){return `${Tr(e)}/join`}o(La,"televetJoinCall");function Na(e){return `${Tr(e)}/cancel`}o(Na,"televetCancelCall");var Fa=100;function Fe(e){return N(pe("validationFailed",{retryable:false,wireMessage:e}))}o(Fe,"invalid");function Tt(e){return N(pe("internalError",{retryable:false,httpStatus:502,wireMessage:e}))}o(Tt,"unusable");function xo(e){return e.httpStatus===404}o(xo,"isDark");function Bt(e,t,n){try{e?.track(t,n);}catch{}}o(Bt,"safeTrack");function Ma(e){if(e.pet_id.trim().length===0)return "pet_id is required";if(e.clinician_id.trim().length===0)return "clinician_id is required";if(e.slot_id.trim().length===0)return "slot_id is required";if(!Ne(e.state))return "state must be a two-letter US state code";let t=e.reason_text.trim();return t.length===0?"reason_text is required":t.length>vt?`reason_text must be at most ${vt} characters`:tp(e)}o(Ma,"validateBookingBody");function tp(e){let t=e.state_attested===true,n=e.cancellation_policy_version?.trim()??"";return t!==n.length>0?"state_attested and cancellation_policy_version must be sent together or omitted together":n.length>yr?`cancellation_policy_version must be at most ${yr} characters`:null}o(tp,"attestationRefusal");function Ro(e){let t=e.funnel??Ot({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),n=e.telemetry;return {...Ia(t,n),async statePolicy(r,i){let l=r.trim();if(!Ne(l))return Fe("state must be a two-letter US state code");let s=await t.send("televet.booking.state_policy",{method:"GET",path:`${Yc}/${encodeURIComponent(l)}`,...i?{signal:i}:{}});if(!s.ok)return N(s.error);let a=ba(s.value,l);return a===null?Tt("the state policy response was unreadable"):W(a)},async entitlement(r){let i=await t.send("televet.booking.entitlement",{method:"GET",path:Xc,...r?{signal:r}:{}});return i.ok?W(Ea(i.value)):N(i.error)},async cancellationPolicy(r){let i=await t.send("televet.booking.cancellation_policy",{method:"GET",path:Qc,...r?{signal:r}:{}});return i.ok?W(ha(i.value)):W(null)},async clinicians(r,i){let l=r.trim();if(!Ne(l))return Fe("state must be a two-letter US state code");let s=await t.send("televet.booking.clinicians",{method:"GET",path:Gc,query:{state:l},...i?{signal:i}:{}});return s.ok?W(Gt(Po(s.value,"vets"),Ta)):xo(s.error)?W(Object.freeze([])):N(s.error)},async slots(r,i){let l=r.trim();if(l.length===0)return Fe("clinicianId is required");let s=await t.send("televet.booking.slots",{method:"GET",path:Aa,query:{clinician_id:l},...i?{signal:i}:{}});return s.ok?W(Gt(Po(s.value,"slots"),bo)):xo(s.error)?W(Object.freeze([])):N(s.error)},async nextSlot(r){let i=await t.send("televet.booking.next_slot",{method:"GET",path:Jc,...r?{signal:r}:{}});return i.ok?W(bo(rp(i.value,"slot"))):W(null)},async holdSlot(r){let i=r.trim();if(i.length===0)return Fe("slotId is required");let l=await t.send("televet.booking.hold",{method:"POST",path:Oa(i)},{idempotent:false,maxAttempts:1});if(!l.ok)return Bt(n,"televet.booking.hold_failed",{status:l.error.httpStatus??null}),N(l.error);let s=Ca(l.value);return s===null?Tt("the hold response carried no usable expiry"):W(s)},async book(r,i){let l=Ma(r);if(l!==null)return Fe(l);let s=i.trim();if(s.length===0)return Fe("idempotencyKey is required");let a=await t.send("televet.booking.book",{method:"POST",path:xn,body:np(r)},{idempotent:true,idempotencyKey:s,maxAttempts:1});if(!a.ok)return Bt(n,"televet.booking.book_failed",{status:a.error.httpStatus??null}),N(pr(a.error));let d=Cn(a.value);return d===null?Tt("the booking response was unreadable"):mr(d)?W(d):(Bt(n,"televet.booking.book_failed",{status:null,consult_status:d.status}),N(cr(d.status)))},async reschedule(r,i){let l=r.trim(),s=i.trim();if(l.length===0)return Fe("consultId is required");if(s.length===0)return Fe("slotId is required");let a=await t.send("televet.booking.reschedule",{method:"POST",path:Ba(l),body:{new_slot_id:s}},{idempotent:false,maxAttempts:1});if(!a.ok)return Bt(n,"televet.booking.reschedule_failed",{status:a.error.httpStatus??null}),N(a.error);let d=Cn(a.value);return d===null?Tt("the reschedule response was unreadable"):W(d)},async triage(r,i){let l=r.trim();if(l.length===0)return W(null);let s=await t.send("televet.booking.triage",{method:"POST",path:ep,body:{reason_text:l},...i?{signal:i}:{}},{idempotent:false,maxAttempts:1});return s.ok?W(Sa(s.value)):(Bt(n,"televet.booking.triage_unavailable",{status:s.error.httpStatus??null}),W(null))},async listConsults(r){let i=await t.send("televet.booking.consults",{method:"GET",path:xn,query:{limit:String(Fa)},...r?{signal:r}:{}});return i.ok?W(Gt(Po(i.value,"consults"),Cn)):xo(i.error)?W(Object.freeze([])):N(i.error)},async getConsult(r,i){let l=r.trim();if(l.length===0)return Fe("consultId is required");let s=await t.send("televet.booking.consult",{method:"GET",path:Tr(l),...i?{signal:i}:{}});if(!s.ok)return N(s.error);let a=Cn(s.value);return a===null?Tt("the consult response was unreadable"):W(a)},async joinConsult(r){let i=r.trim();if(i.length===0)return Fe("consultId is required");let l=await t.send("televet.booking.join",{method:"POST",path:La(i)},{idempotent:false,maxAttempts:1});if(!l.ok)return Bt(n,"televet.booking.join_failed",{status:l.error.httpStatus??null}),N(l.error);let s=fo(l.value);return s===null?Tt("the join response carried no usable room credential"):W(s)},async cancelConsult(r,i){let l=r.trim(),s=i.trim();if(l.length===0)return Fe("consultId is required");if(s.length===0)return Fe("reason is required");if(s.length>vr)return Fe(`reason must be at most ${vr} characters`);let a=await t.send("televet.booking.cancel",{method:"POST",path:Na(l),body:{reason:s}},{idempotent:false,maxAttempts:1});if(!a.ok)return Bt(n,"televet.booking.cancel_failed",{status:a.error.httpStatus??null}),N(a.error);let d=ka(a.value);return d===null?Tt("the cancel response was unreadable"):W(d)},async initiateAttachment(r,i){let l=await t.send("televet.booking.attachment_initiate",{method:"POST",path:Zc,body:{filename:r.filename,content_type:r.contentType,file_size:r.fileSize},...i?{signal:i}:{}});if(!l.ok)return N(l.error);let s=sa(l.value);return s===null?Tt("the attachment presign was unreadable"):W(s)}}}o(Ro,"createTelevetBookingController");function np(e){let t=e.cancellation_policy_version?.trim()??"",n=e.state_attested===true&&t.length>0;return {pet_id:e.pet_id,clinician_id:e.clinician_id,slot_id:e.slot_id,state:e.state,reason_text:e.reason_text.trim(),species:e.species,media_refs:[...e.media_refs],emergency_acknowledged:e.emergency_acknowledged,share_health_records:e.share_health_records,...n?{state_attested:true,cancellation_policy_version:t}:{}}}o(np,"bookingWireBody");function Po(e,t){if(Array.isArray(e))return e;if(typeof e=="object"&&e!==null){let n=e,r=n[t]??n.items??n.data;if(Array.isArray(r))return r}return e}o(Po,"rows");function rp(e,t){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){let n=e,r=n[t]??n.data;if(typeof r=="object"&&r!==null)return r}return e}o(rp,"unwrap");var Da=Symbol.for("@everfur/sdk#EverfurContext@v1"),Va=globalThis,za=Va[Da]??(Va[Da]=react.createContext(null));za.displayName??="EverfurContext";function Ye(){let e=react.useContext(za);if(e===null)throw new bn("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return e}o(Ye,"useEverfurContext");var lp=Object.freeze({chat:Object.freeze(["chat.message.create"]),records:Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:Object.freeze(["records.clinic.create"]),video:Object.freeze(["video.gait.execute"]),photo:Object.freeze(["photo.checkup.execute"]),animations:Object.freeze(["animations.state.read"]),televet:Object.freeze(["televet.visit.create"])});function ap(e){return lp[e]}o(ap,"requires");function ja(e,t,n){let r=ap(e),i=new Map;for(let a of t)i.set(a.resource,a);if(n?.isPending===true&&r.some(a=>!i.has(a)))return _o({name:e,enabled:false,isPending:true,limits:{}});let l=sp(r,i);return r.filter(a=>i.get(a)?.granted!==true).length===0?_o({name:e,enabled:true,isPending:false,limits:l}):_o({name:e,enabled:false,isPending:false,limits:l,disabled:dp(r,i)})}o(ja,"decideCapability");function sp(e,t){let n={};for(let r of e){let i=t.get(r)?.limits;if(i)for(let[l,s]of Object.entries(i)){let a=n[l];n[l]=a===void 0?s:Math.min(a,s);}}return n}o(sp,"mergeLimits");function dp(e,t){for(let n of e){let r=t.get(n)?.disabled;if(r)return Object.freeze({reason:r.reason,level:r.level,recoverable:r.recoverable})}return Object.freeze({reason:io("accessDenied"),level:"user_entitlement",recoverable:false})}o(dp,"disabledFor");function _o(e){let t={name:e.name,enabled:e.enabled,isPending:e.isPending,limits:Object.freeze({...e.limits})};return e.disabled!==void 0&&(t.disabled=e.disabled),Object.freeze(t)}o(_o,"freezeDecision");function Pn(e){let{runtime:t}=Ye(),n=t.entitlements,r=react.useSyncExternalStore(n.subscribe,n.getSnapshot,n.getSnapshot);return react.useMemo(()=>ja(e,r.decisions,{isPending:r.isPending}),[e,r])}o(Pn,"useCapability");function ke(e){let{runtime:t,userRef:n,scopeEpoch:r}=Ye();return react.useMemo(()=>{if(e)return e;if(n===null)return null;let{services:i}=t.registry;return Ro({auth:i.authFor(n),telemetry:i.telemetry,...i.errorPolicy?{errorPolicy:i.errorPolicy}:{}})},[t,n,r,e])}o(ke,"useTelevetBookingController");function pp(){let{userRef:e}=Ye(),t=Pn("televet");return react.useMemo(()=>({available:t.enabled&&e!==null,isPending:t.isPending}),[t.enabled,t.isPending,e])}o(pp,"useTelevetBookingAvailable");function Lt(e,t,n){let[r,i]=react.useState(()=>({key:e,data:null,isPending:t&&n!==null,error:null})),[l,s]=react.useState(0),a=react.useRef(n);a.current=n,react.useEffect(()=>{let f=a.current;if(!t||f===null){i({key:e,data:null,isPending:false,error:null});return}let y=new AbortController,p=true;return i(c=>c.key===e?{...c,isPending:true,error:null}:{key:e,data:null,isPending:true,error:null}),(async()=>{let c;try{c=await f(y.signal);}catch{p&&i({key:e,data:null,isPending:false,error:null});return}p&&(c.ok?i({key:e,data:c.value,isPending:false,error:null}):i({key:e,data:null,isPending:false,error:c.error}));})(),()=>{p=false,y.abort();}},[e,t,l]);let d=react.useCallback(()=>s(f=>f+1),[]),u=r.key===e;return react.useMemo(()=>({enabled:t,data:u?r.data:null,isPending:t&&(!u||r.isPending),isError:u&&r.error!==null,error:u?r.error:null,refetch:d}),[t,u,r.data,r.isPending,r.error,d])}o(Lt,"useTelevetRead");function Rn(e,t){let n=e?.trim()??"",r=t?.statePolicy!==void 0&&Ne(n),i=t?.statePolicy;return Lt(`state-policy:${n}`,r,r&&i?l=>i.call(t,n,l):null)}o(Rn,"useTelevetStatePolicy");function Io(e){let t=e?.entitlement!==void 0,n=e?.entitlement;return Lt("entitlement",t,t&&n?r=>n.call(e,r):null)}o(Io,"useTelevetBookingEntitlement");function _n(e){let t=e?.cancellationPolicy!==void 0,n=e?.cancellationPolicy;return Lt("cancellation-policy",t,t&&n?r=>n.call(e,r):null)}o(_n,"useTelevetCancellationPolicy");function Ao(e,t){let n=e?.trim()??"",r=t?.clinicians!==void 0&&Ne(n),i=t?.clinicians;return Lt(`clinicians:${n}`,r,r&&i?l=>i.call(t,n,l):null)}o(Ao,"useTelevetClinicians");function wn(e,t){let n=e?.trim()??"",r=t!==null&&n.length>0;return Lt(`slots:${n}`,r,r&&t?i=>t.slots(n,i):null)}o(wn,"useTelevetSlots");function Oo(e){let t=e?.nextSlot!==void 0,n=e?.nextSlot;return Lt("next-slot",t,t&&n?r=>n.call(e,r):null)}o(Oo,"useTelevetNextSlot");function Bo(e){let[t,n]=react.useState(null),r=react.useRef(true),i=react.useRef(false),l=react.useRef(e);l.current=e,react.useEffect(()=>(r.current=true,()=>{r.current=false;}),[]);let s=react.useCallback((...a)=>{let d=l.current;if(d===null||i.current)return;let u=a[a.length-1],f=typeof u=="object"&&u!==null&&("onSuccess"in u||"onError"in u),y=f?u:void 0,p=f?a.slice(0,-1):a;i.current=true,n({variables:p[0]??null}),(async()=>{let c=null;try{c=await d(...p);}catch{c=null;}i.current=false,r.current&&n(null),c!==null&&(c.ok?y?.onSuccess?.(c.value):y?.onError?.(c.error));})();},[]);return react.useMemo(()=>({isPending:t!==null,variables:t?.variables??null,mutate:s}),[t,s])}o(Bo,"useTelevetWrite");function In(e){return Bo(e?t=>e.holdSlot(t):null)}o(In,"useTelevetHoldSlot");function Lo(e){return Bo(e?(t,n)=>e.book(t,n):null)}o(Lo,"useTelevetBookConsult");function No(e,t){return Bo(t&&e?n=>t.reschedule(e,n):null)}o(No,"useTelevetRescheduleConsult");function Er(e,t=0){let n=e?.listConsults!==void 0,r=e?.listConsults;return Lt(`consults:${t}`,n,n&&r?i=>r.call(e,i):null)}o(Er,"useTelevetConsults");function An(e){return e.error!==null&&e.error.httpStatus===404}o(An,"televetReadIsDark");var Fo=15,Mo=250,Ua=new Set(["scheduled","in_progress"]);function Nt(e){let t=Date.parse(e.scheduledAt);return Number.isNaN(t)?null:t}o(Nt,"startsAtMs");function Do(e){let t=Nt(e);return t===null?null:t-Fo*6e4}o(Do,"televetJoinOpensAtMs");function Vo(e,t){if(!Ua.has(e.status))return {joinable:false,reason:`status_${e.status}`};if(!e.hasRoom)return {joinable:false,reason:"room_not_ready"};let n=Nt(e);return n===null||t<n-Fo*6e4?{joinable:false,reason:"too_early"}:t>n+Mo*6e4?{joinable:false,reason:"too_late"}:{joinable:true}}o(Vo,"televetJoinDecision");function On(e,t){let n=[],r=[];for(let i of e){let l=Nt(i);(Ua.has(i.status)&&l!==null&&l+Mo*6e4>t?n:r).push(i);}return n.sort((i,l)=>(Nt(i)??0)-(Nt(l)??0)),r.sort((i,l)=>(Nt(l)??0)-(Nt(i)??0)),Object.freeze({upcoming:Object.freeze(n),past:Object.freeze(r)})}o(On,"splitTelevetVisits");function zo(e){return e==="scheduled"}o(zo,"canManageTelevetVisit");function $a(e){let t=Er(e);return t.enabled?t.isPending?"pending":t.isError||On(t.data??[],Date.now()).upcoming.length>0?"visits":"booking":"booking"}o($a,"useTelevetLanding");var F=Object.freeze({pageTitle:"Video visits",bookCardTitle:"Book a video visit",bookCardCta:"Find a time",bookAnotherTitle:"Book another visit",upcomingTitle:"Next video visit",bookedPill:"Booked",pastTitle:"Past video visits",visitTitleTemplate:"{pet} with {vet}",minutesTemplate:"{n} minutes",emptyTitle:"No visits yet",emptyBody:"When you book a video visit, it will appear here.",loading:"Loading your visits\u2026",loadErrorTitle:"Could not load your visits",loadErrorBody:"Check your connection and try again.",retry:"Try again",joinCta:"Join the visit",joining:"Joining\u2026",addToCalendarCta:"Add to calendar",calendarAdded:"Added to your calendar",rescheduleCta:"Reschedule",cancelCta:"Cancel",cancelConfirmTitleTemplate:"Cancel {pet}\u2019s visit?",cancelConfirmTitle:"Cancel this visit?",cancellationReasonLabel:"What changed?",cancellationReasonOptional:"Optional",cancelWhyBetterTemplate:"{pet} is better",cancelWhyTime:"The time doesn\u2019t work",cancelWhyRegularVet:"We\u2019ll see our regular vet",cancelWhyOther:"Something else",cancelWhyTimeHint:"Another time might be easier.",cancelMoveInstead:"Move the visit instead",summaryWhen:"When",summaryVet:"Vet",summaryAbout:"About",cancelConfirmCta:"Cancel the visit",cancellingVisit:"Canceling\u2026",cancelDismissCta:"Keep the visit",cancelledTemplate:"{pet}\u2019s visit is canceled. {vet} knows.",cancelledTitle:"Visit cancelled",cancellationFeeRecorded:"A late cancellation fee was recorded for this visit.",cancellationFeeNotRecorded:"No late cancellation fee was recorded for this visit.",loadingCancellationTerms:"Loading cancellation terms\u2026",cancellationTermsUnavailable:"We could not confirm the current cancellation terms. Try again before continuing.",cancelReason:"Cancelled by the pet parent in the app.",cancelTermsFirst:"We could not confirm the cancellation terms. Please try again before cancelling.",cancelFailed:"We could not cancel this visit. Refresh your visits to confirm its status before trying again."});function jo(e){switch(e){case "scheduled":return "Scheduled";case "in_progress":return "In progress";case "awaiting_summary":return "Summary on its way";case "completed":return "Completed";case "cancelled_owner":return "Cancelled by you";case "cancelled_ops":return "Cancelled by Everfur";case "no_show_owner":return "Missed";case "no_show_vet":return "Vet couldn't attend";default:return null}}o(jo,"televetVisitStatusWeb");function Ka(e,t){if(e==="too_early")return t?`This visit opens at ${t}. You can join from then.`:"This visit has not opened yet.";if(e==="too_late")return "This visit has ended.";if(e==="room_not_ready")return "We are still setting up the video room. Try again in a moment.";switch(e){case "status_cancelled_owner":return "You cancelled this visit.";case "status_cancelled_ops":return "This visit was cancelled. Please book another time.";case "status_no_show_owner":return "This visit was missed.";case "status_no_show_vet":return "The vet could not make this visit. Please book another time.";case "status_awaiting_summary":return "This visit has ended. Your summary is on its way.";case "status_completed":return "This visit has ended.";default:return "This visit cannot be joined right now."}}o(Ka,"televetJoinBlockWeb");var Uo=class Uo extends react.Component{constructor(){super(...arguments);this.state={failed:false,key:this.props.resetKey};}static getDerivedStateFromError(){return {failed:true}}static getDerivedStateFromProps(n,r){return Object.is(n.resetKey,r.key)?null:{failed:false,key:n.resetKey}}render(){return this.state.failed?this.props.fallback:this.props.children}};o(Uo,"HostRenderBoundary");var Ho=Uo;function mp({render:e}){return e()}o(mp,"RenderHost");function Wo({render:e,fallback:t,resetKey:n}){return react.createElement(Ho,{fallback:t,resetKey:n,children:react.createElement(mp,{render:e})})}o(Wo,"HostRender");function qo(e){if(e!==null&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.keys(e))qo(e[t]);}return e}o(qo,"deepFreeze");var yp=Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),Ga={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},Ja={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},Ya={nano:8,small:9,micro:10,tiny:11,caption:13,bodyTight:15,body:17,subtitle:20,heading:22,verdict:24},gp={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},vp={regular:"400",medium:"500",bold:"700"},bp={eyebrow:1,monoWide:.9,headerBrand:-0.42,tight:-0.35},hp=0,kr="System",xr="monospace",Tp=["content","heading","control","compact","badge"];function Sp(e){let t={};for(let n of Tp)t[n]=e;return t}o(Sp,"authoredTierSizes");function Xa(){return {family:kr,mono:xr,fontUrl:null,families:{regular:kr,medium:kr,bold:kr,mono:xr,monoMedium:xr,monoBold:xr},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:Ya,tierSizes:Sp(Ya),lineHeight:gp,weight:vp,letterSpacing:bp,scale:1,maxScale:hp,scaleCaps:yp}}o(Xa,"baseType");var Qa={},$o=Object.freeze({standard:Object.freeze([.2,0,0,1]),emphasized:Object.freeze([.2,.8,.2,1]),exit:Object.freeze([.4,0,1,1])});function Ko(e){return `cubic-bezier(${e.join(", ")})`}o(Ko,"cssCubicBezier");var Za={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:Ko($o.standard),emphasized:Ko($o.emphasized),exit:Ko($o.exit)},reducedMotion:false},Cp={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FFFFFF",surfaceSubtle:"#F1F5F2",background:"#FFFFFF",borderRingCream:"#E4E4E4",chatGround:"#FFFFFF",composerFill:"#FFFFFF",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#000000",secondary:"#0E462E",muted:"#6B6B6B",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#C03410",onDanger:"#FFFFFF",errorRed:"#C03410",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(192,52,16,0.06)",badgeBgNeutral:"rgba(107,107,107,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",skeleton:"#E9F1E9",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)"},es=qo({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:Cp,space:Ga,radius:Ja,type:Xa(),motion:Za,slots:Qa}),Ep={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A9A9A",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",onDanger:"#0E1F17",errorRed:"#FF6B5B",warningStrong:"#F0A35E",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.18)",badgeBgCaution:"rgba(217,130,29,0.20)",badgeBgCritical:"rgba(185,28,28,0.22)",badgeBgNeutral:"rgba(255,255,255,0.10)",bubbleUser:"#6BD39A",bubbleAssistant:"#1C1F23",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",skeleton:"#23272C",scanButtonPink:"#FFC3BC",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)"};qo({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false},color:Ep,space:Ga,radius:Ja,type:Xa(),motion:Za,slots:Qa});var ts=Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),ns=globalThis,Yo=ns[ts]??(ns[ts]=react.createContext(es));Yo.displayName??="EverfurThemeContext";function M(){return react.useContext(Yo)}o(M,"useEverfurTheme");var rs=Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});function os(e,t){let{scale:n,scaleCaps:r}=e.type,i=r[t];return i>0?Math.min(n,i):n}o(os,"tierScale");function Ge(e,t,n){return Math.round(n*os(e,t)*10)/10}o(Ge,"tierPx");var is='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',Pp="System";function Rp(e){let t=e.trim();return t.length===0||t===Pp?is:`${ls(t)}, ${is}`}o(Rp,"cssFontFamily");function _p(e){let t=e.trim();return t.length===0||t==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${ls(t)}, ui-monospace, Menlo, Consolas, monospace`}o(_p,"cssMonoFamily");function ls(e){return `"${e.replace(/[\\"]/g,"\\$&")}"`}o(ls,"quote");function k(e,t){let n=e.type,r=n.families[t];return {fontFamily:t==="mono"||t==="monoMedium"||t==="monoBold"?_p(r):Rp(r),fontWeight:n.namedFaces[t]?n.weight.regular:n.weight[rs[t]]}}o(k,"faceCss");var Jt=Object.freeze({textAlign:"start"});var wp=48;function Ip(e){return e.isPending?"pending":e.enabled?"enabled":"disabled"}o(Ip,"selectView");function ds(e){let{capability:t,children:n,renderDisabled:r,renderPending:i,style:l,className:s}=e,a=Pn(t),d=react.useMemo(()=>Ip(a),[a]);switch(d){case "enabled":return n;case "pending":return i?jsxRuntime.jsx(Wo,{render:i,fallback:jsxRuntime.jsx(as,{capability:t,style:l,className:s})}):jsxRuntime.jsx(as,{capability:t,style:l,className:s});case "disabled":return r?jsxRuntime.jsx(Wo,{render:()=>r(a),fallback:jsxRuntime.jsx(ss,{decision:a,style:l,className:s}),resetKey:a}):jsxRuntime.jsx(ss,{decision:a,style:l,className:s});default:return ir(d)}}o(ds,"CapabilityGate");function as({capability:e,style:t,className:n}){let r=M(),i=react.useMemo(()=>us(r),[r]);return jsxRuntime.jsx("div",{role:"status","aria-busy":"true","aria-label":`Loading ${e}`,className:n,style:{...i.offstate,...t},children:jsxRuntime.jsx("div",{style:i.skeletonBar})})}o(as,"PendingSkeleton");function ss({decision:e,style:t,className:n}){let r=M(),i=react.useMemo(()=>us(r),[r]),l=e.disabled?.reason??"";return jsxRuntime.jsx("div",{className:n,style:{...i.offstate,...t},children:l.length>0?jsxRuntime.jsx("p",{style:i.offstateText,children:l}):null})}o(ss,"OffState");function us(e){let{color:t,space:n,radius:r,type:i}=e;return {offstate:{...Jt,boxSizing:"border-box",minHeight:wp,display:"flex",flexDirection:"column",justifyContent:"center",padding:`${n.md}px ${n.lg}px`,backgroundColor:t.surfaceCream,borderRadius:r.md,border:`1px solid ${t.brandBorder}`},offstateText:{margin:0,...k(e,"regular"),fontSize:i.size.body,lineHeight:`${Math.round(i.size.body*i.lineHeight.normal)}px`,color:t.text.muted},skeletonBar:{height:n.md,borderRadius:r.xs,backgroundColor:t.brandSofter}}}o(us,"makeStyles");function Xt(e){for(let t=0;t<e.length;t+=1){let n=e.charCodeAt(t);if(n>=55296&&n<=56319){let r=e.charCodeAt(t+1);if(!(r>=56320&&r<=57343))return true;t+=1;}else if(n>=56320&&n<=57343)return true}return false}o(Xt,"hasLoneSurrogate");function Qt(e){return [...e].length}o(Qt,"serverLength");var cs=Object.freeze({dog:"dog",canine:"dog",k9:"dog",puppy:"dog",cat:"cat",feline:"cat",kitten:"cat"});function ps(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return Object.prototype.hasOwnProperty.call(cs,t)?cs[t]:null}o(ps,"canonicalPetSpecies");var fs=50,Ap=128,Jo=120,ms=120,Op=2e3,ys=120,Bp=80,bs=new Set(["male","female","unknown"]),hs=new Set(["day","month","year"]),Ts=new Set(["low","medium","high","athletic"]),Ss=new Set(["indoor","outdoor","both"]),Cs=new Set(["mild","moderate","severe"]),Lp=/^(\d{4})-(\d{2})-(\d{2})$/,Es=[["sex","sex"],["spayedNeutered","spayed_neutered"],["birthDate","birth_date"],["birthDatePrecision","birth_date_precision"],["activityLevel","activity_level"],["indoorOutdoor","indoor_outdoor"],["foodBrand","food_brand"],["foodType","food_type"],["microchipId","microchip_id"]],ks=[["allergies","allergies"],["medications","medications"],["supplements","supplements"],["conditions","conditions"]];Object.freeze([...Es,...ks].map(([e])=>e));function Np(e){let t=Lp.exec(e);if(t===null)return false;let[n,r,i]=[Number(t[1]),Number(t[2]),Number(t[3])],l=new Date(Date.UTC(n,r-1,i));return l.getUTCFullYear()===n&&l.getUTCMonth()===r-1&&l.getUTCDate()===i}o(Np,"isRealDate");var Ln=o(e=>(t,n)=>typeof n=="string"&&e.has(n)?null:`${t} must be one of ${[...e].join(", ")}`,"oneOf"),Fp=o((e,t)=>typeof t=="boolean"?null:`${e} must be true or false`,"boolean"),Rr=o((e,t)=>typeof t=="string"&&Np(t)?null:`${e} must be a real date written YYYY-MM-DD`,"date"),nt=o((e,t={})=>(n,r)=>{if(typeof r!="string")return `${n} must be a string`;if(Xt(r))return `${n} contains an unpaired surrogate and cannot be encoded`;let i=t.trimmed?r.trim():r;if(t.required&&i.length===0)return `${n} is required and must not be blank`;let l=Qt(i);return l<=e?null:`${n} is ${l} characters; the server accepts at most ${e}`},"text"),Mp={sex:Ln(bs),spayedNeutered:Fp,birthDate:Rr,birthDatePrecision:Ln(hs),activityLevel:Ln(Ts),indoorOutdoor:Ln(Ss),foodBrand:nt(ys),foodType:nt(ys),microchipId:nt(Bp)},Xo=["ref","ref",false,nt(Ap,{required:true,trimmed:true})],Qo=["notes","notes",false,nt(Op,{trimmed:true})],gs=[Xo,["name","name",true,nt(Jo,{required:true,trimmed:true})],["dose","dose",false,nt(ms,{trimmed:true})],["frequency","frequency",false,nt(ms,{trimmed:true})],["startDate","start_date",false,Rr],["endDate","end_date",false,Rr],Qo],Dp={allergies:[Xo,["allergen","allergen",true,nt(Jo,{required:true,trimmed:true})],["severity","severity",false,Ln(Cs)],Qo],medications:gs,supplements:gs,conditions:[Xo,["conditionName","condition_name",true,nt(Jo,{required:true,trimmed:true})],["diagnosedDate","diagnosed_date",false,Rr],Qo]};function Vp(e,t,n){let r=`${e}[${t}]`;if(typeof n!="object"||n===null||Array.isArray(n))return {error:`${r} must be an object`};let i=n,l={};for(let[d,u,f,y]of Dp[e]){let p=i[d];if(p==null){if(f)return {error:`${r}.${d} is required`};p===null&&(l[u]=null);continue}let c=y(`${r}.${d}`,p);if(c!==null)return {error:c};l[u]=p;}let s=l.start_date,a=l.end_date;return typeof s=="string"&&typeof a=="string"&&a<s?{error:`${r}.endDate must not be before startDate`}:{item:l}}o(Vp,"itemToWire");function zp(e,t){if(!Array.isArray(t))return {error:`${e} must be an array (send [] to clear it)`};if(t.length>fs)return {error:`${e} has ${t.length} items; the server accepts at most ${fs}`};let n=[],r=new Set;for(let i=0;i<t.length;i+=1){let l=Vp(e,i,t[i]);if("error"in l)return l;let s=l.item.ref;if(typeof s=="string"){let a=s.trim();if(r.has(a))return {error:`${e}: ref ${JSON.stringify(a)} is used twice; a ref names one item`};r.add(a);}n.push(l.item);}return {items:n}}o(zp,"listToWire");function xs(e,t){let n=e,r={};for(let[s,a]of Es){let d=n[s];if(d!==void 0){if(d!==null){let u=Mp[s](s,d);if(u!==null)return {error:u}}r[a]=d;}}let i=n.birthDate!==void 0,l=n.birthDatePrecision!==void 0;if(i!==l||i&&n.birthDate===null!=(n.birthDatePrecision===null))return {error:"birthDate and birthDatePrecision must be sent together, both set or both null"};for(let[s,a]of ks){let d=n[s];if(d===void 0)continue;let u=zp(s,d);if("error"in u)return u;r[a]=u.items;}return Object.keys(r).length>0&&t!==void 0&&ps(t)===null?{error:"health fields need a pet Everfur reads as a dog or a cat (dog, canine, k9, puppy, cat, feline, kitten)"}:{body:r}}o(xs,"petHealthToWire");var ye=o(e=>typeof e=="string"?e:null,"str"),Bn=o((e,t)=>typeof t=="string"&&e.has(t)?t:null,"pick"),jp=o(e=>typeof e=="boolean"?e:null,"bool");function Pr(e,t){return Array.isArray(e)?Object.freeze(e.flatMap(n=>{if(typeof n!="object"||n===null||Array.isArray(n))return [];let r=t(n);return r===null?[]:[r]})):Object.freeze([])}o(Pr,"itemsFromWire");function vs(e){let t=ye(e.name);return t===null||t.length===0?null:Object.freeze({ref:ye(e.ref),name:t,dose:ye(e.dose),frequency:ye(e.frequency),startDate:ye(e.start_date),endDate:ye(e.end_date),notes:ye(e.notes)})}o(vs,"medicationFromWire");function Ps(e){let t=e.profile_version;return Object.freeze({profileVersion:typeof t=="number"&&Number.isInteger(t)&&t>=0?t:0,sex:Bn(bs,e.sex),spayedNeutered:jp(e.spayed_neutered),birthDate:ye(e.birth_date),birthDatePrecision:Bn(hs,e.birth_date_precision),activityLevel:Bn(Ts,e.activity_level),indoorOutdoor:Bn(Ss,e.indoor_outdoor),foodBrand:ye(e.food_brand),foodType:ye(e.food_type),microchipId:ye(e.microchip_id),allergies:Pr(e.allergies,n=>{let r=ye(n.allergen);return r===null||r.length===0?null:Object.freeze({ref:ye(n.ref),allergen:r,severity:Bn(Cs,n.severity),notes:ye(n.notes)})}),medications:Pr(e.medications,vs),supplements:Pr(e.supplements,vs),conditions:Pr(e.conditions,n=>{let r=ye(n.condition_name);return r===null||r.length===0?null:Object.freeze({ref:ye(n.ref),conditionName:r,diagnosedDate:ye(n.diagnosed_date),notes:ye(n.notes)})})})}o(Ps,"petHealthFromWire");var ws=100,Is=50,As=100,Os=50,Bs=500,Hp=128,Wp=6e4;function ot(e){return pe("validationFailed",{retryable:false,wireMessage:e})}o(ot,"invalid");function Ft(e,t,n){if(typeof t!="string")return ot(`${e} must be a string`);let r=Qt(t);return r<=n?null:ot(`${e} is ${r} characters; the server accepts at most ${n}`)}o(Ft,"checkString");function _r(e,t,n){return typeof t=="number"&&Number.isFinite(t)&&t>=0&&t<=n?null:ot(`${e} must be a finite number between 0 and ${n}`)}o(_r,"outOfRange");function Rs(e,t){if(typeof e!="string")return ot("pet_ref must be a string");if(e.trim().length===0)return ot("pet_ref must not be blank");if(Xt(e))return ot("pet_ref contains an unpaired surrogate and cannot be encoded");if(t!=null&&typeof t!="object")return ot("profile must be an object");let n=[Ft("pet_ref",e,Hp)];return t?.name!==void 0&&n.push(Ft("name",t.name,ws)),t?.species!==void 0&&n.push(Ft("species",t.species,Is)),t?.breed!==void 0&&n.push(Ft("breed",t.breed,As)),t?.ageYears!==void 0&&n.push(_r("age_years",t.ageYears,Os)),t?.weightKg!==void 0&&n.push(_r("weight_kg",t.weightKg,Bs)),n.find(r=>r!==null)??null}o(Rs,"validate");function Ls(e,t){let n=xs(e,t);return "error"in n?{error:ot(n.error)}:n}o(Ls,"healthToWire");function Up(e){if(typeof e!="object"||e===null)return {error:ot("patch must be an object")};let t=e,n=[["name","name",l=>Ft("name",l,ws)],["species","species",l=>Ft("species",l,Is)],["breed","breed",l=>Ft("breed",l,As)],["ageYears","age_years",l=>_r("age_years",l,Os)],["weightKg","weight_kg",l=>_r("weight_kg",l,Bs)]],r={};for(let[l,s,a]of n){let d=t[l];if(d!==void 0){if(d!==null){let u=a(d);if(u!==null)return {error:u}}r[s]=d;}}let i=Ls(t,t.species);return "error"in i?i:(Object.assign(r,i.body),Object.keys(r).length===0?{error:ot("patch must change at least one field")}:{body:r})}o(Up,"patchToWire");function $p(e){if(e==null)return {body:{}};let t=Ls(e,e.species);return "error"in t?t:{body:{...e.name!==void 0?{name:e.name}:{},...e.species!==void 0?{species:e.species}:{},...e.breed!==void 0?{breed:e.breed}:{},...e.ageYears!==void 0?{age_years:e.ageYears}:{},...e.weightKg!==void 0?{weight_kg:e.weightKg}:{},...t.body}}}o($p,"toWire");var rt=o(e=>typeof e=="string"?e:null,"str"),wr=o(e=>typeof e=="number"&&Number.isFinite(e)?e:null,"num");function _s(e,t){let n=typeof e=="object"&&e!==null?e:{};return Object.freeze({petRef:rt(n.pet_ref)??t,name:rt(n.name),species:rt(n.species),breed:rt(n.breed),ageYears:wr(n.age_years),weightKg:wr(n.weight_kg)})}o(_s,"fromWire");function Ns(e){if(typeof e!="object"||e===null)return null;let t=e,n=rt(t.pet_ref);return n===null||n.length===0?null:Object.freeze({petId:rt(t.pet_id),petRef:n,name:rt(t.name),species:rt(t.species),breed:rt(t.breed),ageYears:wr(t.age_years),weightKg:wr(t.weight_kg),updatedAt:rt(t.updated_at)})}o(Ns,"widgetPetFromWire");function Kp(e){let t=Ns(e);return t===null?null:Object.freeze({...t,...Ps(e)})}o(Kp,"widgetPetProfileFromWire");function qp(e){let t=Array.isArray(e)?e:typeof e=="object"&&e!==null&&Array.isArray(e.pets)?e.pets:[];return Object.freeze(t.flatMap(n=>{let r=Ns(n);return r===null?[]:[r]}))}o(qp,"petListFromWire");function Fs(e){return Yp(Ot({auth:e}),Ot({auth:e,unaryTimeoutMs:Wp}))}o(Fs,"createPetsRepository");function Yp(e,t=e){let n=o((i,l)=>l?{...i,signal:l}:i,"withSignal"),r=o(i=>Rs(i,void 0)??`/widget/v1/pets/${encodeURIComponent(i)}`,"petPath");return {async list(i){let l=await e.send("pets.list",n({method:"GET",path:"/widget/v1/pets"},i?.signal));return l.ok?W(qp(l.value)):N(l.error)},async registerPet(i,l,s){let a=Rs(i,l);if(a!==null)return N(a);let d=$p(l);if("error"in d)return N(d.error);let f={method:"POST",path:`/widget/v1/pets/${encodeURIComponent(i)}`,body:d.body},y=await e.send("pets.registerPet",s?.signal?{...f,signal:s.signal}:f);return y.ok?W(_s(y.value,i)):N(y.error)},async updatePet(i,l,s){let a=r(i);if(typeof a!="string")return N(a);let d=Up(l);if("error"in d)return N(d.error);let u=await e.send("pets.updatePet",n({method:"PATCH",path:a,body:d.body},s?.signal));return u.ok?W(_s(u.value,i)):N(u.error)},async getPetProfile(i,l){let s=r(i);if(typeof s!="string")return N(s);let a=await e.send("pets.getPetProfile",n({method:"GET",path:`${s}/profile`},l?.signal));if(!a.ok)return N(a.error);let d=Kp(a.value);return d===null?N(pe("internalError",{retryable:false,httpStatus:502,wireMessage:"the pet profile response carried no pet_ref"})):W(d)},async deletePet(i,l){let s=r(i);if(typeof s!="string")return N(s);let a=await e.send("pets.deletePet",n({method:"DELETE",path:s},l?.signal));return a.ok?W(void 0):N(a.error)},async eraseUserData(i){let l=await t.send("pets.eraseUserData",n({method:"DELETE",path:"/widget/v1/me"},i?.signal),{maxAttempts:1});return l.ok?W(void 0):N(l.error)}}}o(Yp,"createPetsRepositoryOver");function St(){let{runtime:e,userRef:t,activePet:n,scopeEpoch:r}=Ye(),i=react.useMemo(()=>Fs(e.registry.services.authFor(t)),[e,t,r]),[l,s]=react.useState({repository:i,pets:[],loading:true,error:null}),a=l.repository===i?l:{pets:[],loading:true,error:null},d=react.useRef(0),u=react.useCallback(async()=>{let y=++d.current;s(c=>({...c,repository:i,loading:true,error:null,pets:c.repository===i?c.pets:[]}));let p=await i.list();y===d.current&&s(p.ok?{repository:i,pets:p.value,loading:false,error:null}:c=>({repository:i,pets:c.repository===i?c.pets:[],loading:false,error:p.error}));},[i]);react.useEffect(()=>(u(),()=>{d.current+=1;}),[u]);let f=react.useMemo(()=>n===null?null:a.pets.find(y=>y.petRef===n)??null,[n,a.pets]);return react.useMemo(()=>({pets:a.pets,activePet:f,loading:a.loading,error:a.error,refresh:u}),[a.pets,a.loading,a.error,f,u])}o(St,"useEverfurPets");var Zt=Object.freeze(["pet","where","issues","reason","emergency","clinician","time","review","booked"]),Ms=Object.freeze({petId:null,state:null,clinicianId:null,slot:null,holdExpiresAt:null,shareHealthRecords:false,idempotencyKey:null});function ti(e,t={}){let n=Object.freeze({...Ms,...t}),r=ei(0,e);return Object.freeze({index:r,draft:n,furthestIndex:r})}o(ti,"initialTelevetBookingState");function Nn(e,t){return e==="pet"?t.ownedPetCount<=1:e==="issues"?t.withIssues!==true:false}o(Nn,"isSkipped");function Ir(e){return Zt[e]}o(Ir,"stepAt");function ei(e,t){for(let n=e;n<Zt.length;n+=1){let r=Ir(n);if(r&&!Nn(r,t))return n}return Zt.length-1}o(ei,"nextVisible");function Ds(e,t){for(let n=e;n>=0;n-=1){let r=Ir(n);if(r&&!Nn(r,t))return n}return null}o(Ds,"previousVisible");function ni(e,t){return Ds(e.index-1,t)!==null}o(ni,"hasPreviousStep");function ri(e,t,n){switch(t.type){case "patch":{let r={...e.draft,...t.patch};return ("petId"in t.patch&&t.patch.petId!==e.draft.petId||"state"in t.patch&&t.patch.state!==e.draft.state||"clinicianId"in t.patch&&t.patch.clinicianId!==e.draft.clinicianId)&&e.draft.slot?Object.freeze({...e,draft:Object.freeze({...r,slot:null,holdExpiresAt:null,idempotencyKey:null})}):Object.freeze({...e,draft:Object.freeze(r)})}case "next":{let r=ei(e.index+1,n);return Object.freeze({...e,index:r,furthestIndex:Math.max(e.furthestIndex,r)})}case "back":{if(Ir(e.index)==="booked")return e;let r=Ds(e.index-1,n);return r===null?e:Object.freeze({...e,index:r})}case "goTo":{let r=Zt.indexOf(t.step);if(r<0)return e;let i=Nn(t.step,n)?ei(r,n):r;return Object.freeze({...e,index:i,furthestIndex:Math.max(e.furthestIndex,i)})}default:return e}}o(ri,"televetBookingReducer");function oi(e){return Zt.filter(t=>t!=="booked"&&(e===void 0||!Nn(t,e)))}o(oi,"televetBarSteps");function Vs(e,t,n=false){let r=e==="reason"&&n?"emergency":e,i=r==="booked"||t.includes(r)?t:oi();return {current:r==="booked"?i.length:i.indexOf(r)+1,total:i.length,steps:i}}o(Vs,"televetBarPosition");function ii(e){return Ir(e.index)??"pet"}o(ii,"currentStep");function Fn(e,t){let n=t.trim();return !!e.petId&&!!e.clinicianId&&!!e.slot&&Ne(e.state)&&n.length>0&&n.length<=vt}o(Fn,"canConfirm");function Ar(e,t){if(!e.holdExpiresAt)return false;let n=Date.parse(e.holdExpiresAt);return Number.isNaN(n)?false:n<=t}o(Ar,"isHoldExpired");function zs(e,t,n){return e.slot?.slotId!==t||e.holdExpiresAt===null||e.idempotencyKey===null?false:!Ar(e,n)}o(zs,"holdsSlot");var js=Object.freeze({slot:null,holdExpiresAt:null,idempotencyKey:null}),Zp=so();function li(e){return `televet.book.${Zp()}.${e}`}o(li,"televetBookingKey");function ai(e,t,n){let r=n?.version?.trim()??"";return !e||!t||r.length===0?Object.freeze({}):Object.freeze({state_attested:true,cancellation_policy_version:r})}o(ai,"attestation");function Me(e){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}o(Me,"parse");function dt(e){let t=Me(e);return t?t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"}):""}o(dt,"formatClock");function si(e){let t=Me(e);return t?t.toLocaleDateString(void 0,{month:"long",day:"numeric"}):""}o(si,"formatDate");function di(e){let t=Me(e);return t?t.toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"}):""}o(di,"formatDayLong");var Mt=10;function Mn(e){let t=Me(e);return t?new Intl.DateTimeFormat(void 0,{timeZoneName:"short"}).formatToParts(t).find(r=>r.type==="timeZoneName")?.value??"":""}o(Mn,"formatZone");function ef(e){let t=Me(e);if(!t)return "";let n=new Date(t.getTime()+Mt*6e4).toISOString(),r=Mn(e),i=`${dt(e)} - ${dt(n)}`;return r&&r!==""?`${i} ${r}`:i}o(ef,"formatVisitRange");function Hs(e){let t=si(e),n=[dt(e),Mn(e)].filter(Boolean).join(" ");return [t,n].filter(Boolean).join(", ")}o(Hs,"formatWhen");function Dn(e){let t=Me(e);return t?[t.toLocaleDateString(void 0,{weekday:"short"}),Hs(e)].filter(Boolean).join(", "):""}o(Dn,"formatWhenWithDay");function Vn(e){return [dt(e),Mn(e)].filter(Boolean).join(" ")}o(Vn,"formatClockWithZone");function zn(e){let t=Me(e);return t?`${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()}`:"unknown"}o(zn,"localDayKey");function Ws(e){let t=Me(e);return t===null?"":t.toLocaleDateString(void 0,{month:"long"})}o(Ws,"formatMonthLabel");function jn(e){let t=Me(e);return t===null?"":t.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric"})}o(jn,"formatFullDayLabel");function Us(e){return e.toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})}o(Us,"shortDay");function en(e){let t=Me(e);return t?[Us(t),Vn(e)].filter(Boolean).join(" \xB7 "):""}o(en,"formatVisitDayTime");function ui(e){return Me(e)?`${jn(e)} at ${Vn(e)}`:""}o(ui,"formatBookedWhen");function $s(e,t=false){let n=Me(e);return n?`${Us(n)} at ${t?Vn(e):dt(e)}`:""}o($s,"formatMoveTo");function Ks(e){let t=Me(e),n=t===null?0:t.getHours();return n<12?"morning":n<17?"afternoon":"evening"}o(Ks,"televetDayPeriod");function Ys(e){let{draft:t,reasonText:n,book:r,stateAttested:i,termsAttested:l,cancellationPolicy:s,triage:a,goTo:d,releaseSlot:u,setFailure:f,setEmergency:y,setBookedConsult:p,onBooked:c,media:v}=e,b=react.useCallback(E=>{let h=t.idempotencyKey;if(!Fn(t,n)||!h||v?.sending)return;if(Ar(t,Date.now())){f("expired"),d("time");return}let S=o(R=>{let x=yt(R);if(x.kind==="emergency"){y(x.categories);return}if(x.kind==="rate_limited"){f("rate_limited");return}f(x.kind==="not_entitled"?"not_entitled":x.kind==="slot_taken"?"taken":x.kind==="clinician_unavailable"?"clinician_unavailable":x.kind==="unavailable"?"unavailable":"failed"),x.kind==="slot_taken"&&(u(),d("time"));},"refuse");f(null),y(null);let w=o(R=>r.mutate({pet_id:t.petId,clinician_id:t.clinicianId,slot_id:t.slot.slotId,state:t.state,reason_text:n.trim(),species:null,media_refs:R,emergency_acknowledged:E||a.isAcknowledged(n),share_health_records:t.shareHealthRecords,...ai(i,l,s)},h,{onSuccess:o(x=>{if(!mr(x)){S(cr(x.status));return}p(x),d("booked"),c?.(x);},"onSuccess"),onError:o(x=>S(pr(x)),"onError")}),"bookWith");if(!v){w([]);return}v.send().then(w,()=>w([]));},[t,n,r,i,l,s,a,d,u,f,y,p,c,v]),C=react.useCallback(()=>b(false),[b]);return {submitBooking:b,confirm:C}}o(Ys,"useBookingSubmit");function nf(e){if(e.httpStatus===409)return Object.freeze({failure:"taken"});switch(yt(e).kind){case "slot_taken":return Object.freeze({failure:"taken"});case "rate_limited":return Object.freeze({failure:"rate_limited"});case "not_entitled":return Object.freeze({failure:"not_entitled"});case "unavailable":return Object.freeze({failure:"unavailable"});default:return Object.freeze({failure:"failed"})}}o(nf,"televetHoldFailure");function Gs(e){let{draft:t,hold:n,dispatch:r,setFailure:i,refetchSlots:l}=e;return react.useCallback(s=>{if(i(null),zs(t,s.slotId,Date.now())){r({type:"next"});return}n.mutate(s.slotId,{onSuccess:o(a=>{r({type:"patch",patch:{slot:s,holdExpiresAt:a.expiresAt,idempotencyKey:li(s.slotId)}}),r({type:"next"});},"onSuccess"),onError:o(a=>{let d=nf(a);i(d.failure),d.failure==="taken"&&l();},"onError")});},[t,n,r,i,l])}o(Gs,"useSlotHold");function ci(e){return Object.freeze(e==="dark"?{title:Q.noCliniciansTitle,message:Q.noCliniciansBody,retryLabel:Q.noCliniciansRetryCta,interestReason:null}:{title:Q.noCliniciansTitle,message:Q.noCliniciansRegionBody,retryLabel:null,interestReason:"no_licensed_vet"})}o(ci,"televetEmptyRosterView");function pi(e){return e?"roster":"dark"}o(pi,"televetEmptyRosterCause");var rf=o(e=>Object.freeze({ok:true,value:e}),"ok"),fi=o(e=>Object.freeze({ok:false,error:e}),"err");function mi(e,t,n,r){return Object.freeze({code:e,retryable:t,filename:n,...r??{}})}o(mi,"failure");async function Js(e,t,n,r){let i=o(()=>r?.signal?.aborted===true,"cancelled");if(i())return fi(mi("cancelled",true,n.filename));try{return await e.postMultipart(t,n.file,{...r?.signal?{signal:r.signal}:{},...r?.onProgress?{onProgress:r.onProgress}:{}}),rf(void 0)}catch{return i()?fi(mi("cancelled",true,n.filename)):fi(mi("server",true,n.filename))}}o(Js,"uploadAttachmentBytes");var Ct=Object.freeze({failed:0,refused:Object.freeze({size:0,type:0,unreadable:0})});function yi(e){let{failed:t,refused:n}=e;return t<=0&&n.size<=0&&n.type<=0&&n.unreadable<=0}o(yi,"isMediaShortfallEmpty");function gi(e){let t=o(r=>Number.isFinite(r)&&r>0?Math.floor(r):0,"count"),n=Q.media;return [{n:t(e.failed),one:n.droppedTemplate,many:n.droppedPluralTemplate},{n:t(e.refused.size),one:n.refusedSizeTemplate,many:n.refusedSizePluralTemplate},{n:t(e.refused.type),one:n.refusedTypeTemplate,many:n.refusedTypePluralTemplate},{n:t(e.refused.unreadable),one:n.refusedUnreadableTemplate,many:n.refusedUnreadablePluralTemplate}].filter(r=>r.n>0).map(r=>H(r.n===1?r.one:r.many,{n:String(r.n)}))}o(gi,"televetMediaShortfallLines");function Or(e){let t=Number.isFinite(e)&&e>0?Math.floor(e):0;return t===0?Ct:Object.freeze({failed:t,refused:Ct.refused})}o(Or,"mediaShortfallFromUnsentPicks");function of(e,t){let n=Or(t);return n.failed===0?e:Object.freeze({failed:e.failed+n.failed,refused:e.refused})}o(of,"withUnsentPicks");var lf=6e4;function Qs(e){let t=ur(e.filename,e.mimeType);return t===null?null:{file:{uri:e.uri,name:e.filename,mimeType:t,sizeBytes:e.fileSize},filename:e.filename,contentType:t,sizeBytes:e.fileSize}}o(Qs,"validated");function af(e,t){if(e?.kind!=="ready")return null;let n=e.policy.expires_in_seconds*1e3;return t-e.at<n-lf?e.policy:null}o(af,"fresh");function Zs({media:e,controller:t,transport:n}){let[r,i]=react.useState(()=>new Map),[l,s]=react.useState(false),[a,d]=react.useState(false),u=react.useRef(r),f=react.useRef(e);f.current=e;let y=react.useRef(false),p=react.useRef(false),c=react.useRef(new AbortController);react.useEffect(()=>{let _=new AbortController;return c.current=_,()=>_.abort()},[]);let v=t?.initiateAttachment?.bind(t),b=l||v===void 0,C=react.useCallback((_,P)=>{let A=new Map(u.current);A.set(_,P),u.current=A,i(A);},[]),E=react.useCallback(()=>{y.current=true,s(true);},[]),h=react.useCallback(async(_,P)=>{if(v===void 0)return "dark";let A=await v({filename:P.filename,contentType:P.contentType,fileSize:P.sizeBytes},c.current.signal);if(c.current.signal.aborted)return null;if(A.ok)return C(_.uri,{kind:"ready",policy:A.value,at:Date.now()}),A.value;let V=da(A.error);return V==="dark"?"dark":(C(_.uri,V==="failed"?{kind:"retry"}:{kind:"refused",cause:V}),null)},[v,C]);react.useEffect(()=>{if(!b)for(let _ of e){if(u.current.has(_.uri))continue;let P=aa(_),A=Qs(_);if(P!==null||A===null){C(_.uri,{kind:"refused",cause:P??"type"});continue}C(_.uri,{kind:"checking"}),h(_,A).then(V=>{V==="dark"&&E();});}},[e,b,h,C,E]);let S=react.useCallback(async()=>{if(y.current||v===void 0||p.current)return [];p.current=true,d(true);let _=[];try{for(let P of f.current){let A=u.current.get(P.uri);if(A?.kind==="sent"){_.push(A.s3Key);continue}if(A?.kind==="refused")continue;let V=Qs(P);if(V===null)continue;let j=af(A,Date.now());if(j===null){let G=await h(P,V);if(G==="dark")return E(),[];if(G===null){u.current.get(P.uri)?.kind==="retry"&&C(P.uri,{kind:"failed"});continue}j=G;}if(c.current.signal.aborted)return [];let ee=await Js(n,j,V,{signal:c.current.signal});if(c.current.signal.aborted)return [];ee.ok?(C(P.uri,{kind:"sent",s3Key:j.s3_key}),_.push(j.s3_key)):C(P.uri,{kind:"failed"});}return _}catch{return _}finally{p.current=false,c.current.signal.aborted||d(false);}},[v,h,C,E,n]),w=react.useMemo(()=>{if(e.length===0)return Ct;if(b)return Or(e.length);let _={size:0,type:0,unreadable:0},P=0;for(let A of e){let V=r.get(A.uri);V?.kind==="refused"?_[V.cause]+=1:V?.kind==="failed"&&(P+=1);}return P===0&&_.size+_.type+_.unreadable===0?Ct:Object.freeze({failed:P,refused:Object.freeze(_)})},[e,b,r]),R=react.useMemo(()=>e.flatMap(_=>{let P=r.get(_.uri);return P?.kind==="sent"?[{key:P.s3Key,pick:_}]:[]}),[e,r]),x=react.useCallback(_=>{if(b)return w;let P=new Set(_.mediaRefs),A=R.filter(V=>!P.has(V.key)).length;return A===0?w:Object.freeze({failed:w.failed+A,refused:w.refused})},[b,w,R]),T=react.useCallback(_=>{if(b||R.length!==1)return false;let[P]=R;return P===void 0||!_.mediaRefs.includes(P.key)?false:(ur(P.pick.filename,P.pick.mimeType)??"").startsWith("image/")},[b,R]),I=!b&&[...r.values()].some(_=>_.kind==="ready"||_.kind==="sent");return react.useMemo(()=>({shortfall:w,sending:a,live:I,send:S,bookedShortfall:x,sentOnePhoto:T}),[w,a,I,S,x,T])}o(Zs,"useTelevetBookingMedia");var sf="file",df="chat attachment upload: the file handle carries no bytes",hi="chat attachment upload failed";function ed(e={}){let t=e.fetch??((n,r)=>fetch(n,r));return Object.freeze({postMultipart(n,r,i){let l=r.blob;if(l===void 0)return Promise.reject(new Error(df));if(i.signal?.aborted===true)return Promise.reject(new Error(hi));let s=new FormData;for(let[a,d]of Object.entries(n.upload_fields))s.append(a,d);return s.append(sf,l,"image"),t(n.upload_url,{method:"POST",body:s,mode:"cors",credentials:"omit",...i.signal?{signal:i.signal}:{}}).then(a=>{if(!(a.status>=200&&a.status<300))return Promise.reject(new Error(hi));i.onProgress?.(1);},()=>Promise.reject(new Error(hi)))}})}o(ed,"createWebAttachmentTransport");var uf="booking attachment upload: the picked file could not be read";function td(e={}){let t=e.fetch??((r,i)=>fetch(r,i)),n=ed({fetch:t});return Object.freeze({postMultipart(r,i,l){return i.blob!==void 0?n.postMultipart(r,i,l):t(i.uri,l.signal?{signal:l.signal}:void 0).then(s=>s.blob()).then(s=>n.postMultipart(r,{...i,blob:new Blob([s],{type:i.mimeType})},l),()=>Promise.reject(new Error(uf)))}})}o(td,"createWebTelevetMediaTransport");var De=Object.freeze({title:"Vet test mode (sandbox tenants)",create:"Create a simulated visit for this pet",createLabel:"Create",visitTemplate:"Visit {visitRef}: {status}, scheduled {scheduledAt}.",eventsNote:"Raise one of the visit events that is not a status change, to see what a tap on it opens:",advance:Object.freeze({completed:"Complete it",cancelled:"Cancel it",no_show:"Mark no-show"}),events:Object.freeze({rescheduled:"Rescheduled",reminder:"Reminder (24h)",followup_sent:"Follow-up sent",message_received:"Vet replied",ended:"Ended"}),resultTemplate:"{label}: {result}.",errorTemplate:"{label}: {message}"});var Ti="/widget/v1/televet/sandbox/visits",cf=128,nd=64,id=new Set(["booked","cancelled","completed","no_show"]),pf=new Set(["applied","already_applied","not_applicable"]),rd=new Set(["rescheduled","reminder","followup_sent","message_received","ended"]),od=new Set(["24h","30m"]);function Dt(e){return pe("validationFailed",{retryable:false,wireMessage:e})}o(Dt,"invalid");function Si(e,t,n){return typeof t!="string"||t.length===0?Dt(`${e} is required and must be a non-empty string`):Xt(t)?Dt(`${e} contains an unpaired surrogate and cannot be encoded`):Qt(t)>n?Dt(`${e} is longer than ${n} characters`):null}o(Si,"textError");function ff(e){if(typeof e!="object"||e===null)return null;let{result:t,visit:n}=e;if(typeof t!="string"||!pf.has(t)||typeof n!="object"||n===null)return null;let{visit_ref:r,pet_ref:i,status:l,scheduled_at:s}=n;return typeof r!="string"||r.length===0||typeof i!="string"||i.length===0||typeof l!="string"||!id.has(l)||typeof s!="string"||s.length===0?null:Object.freeze({result:t,visit:Object.freeze({visitRef:r,petRef:i,status:l,scheduledAt:s})})}o(ff,"mapActionResult");function ld(e){let t=e.funnel??Ot({auth:e.auth,...e.errorPolicy?{errorPolicy:e.errorPolicy}:{}}),n=o(async(r,i,l)=>{let s=await t.send(r,{method:"POST",path:i,body:l},{idempotent:false,maxAttempts:1});if(!s.ok)return N(s.error);let a=ff(s.value);return a===null?N(pe("internalError",{retryable:false})):W(a)},"run");return {createVisit(r){let i=Si("pet_ref",r,cf);return i!==null?Promise.resolve(N(i)):n("televet.sandbox.createVisit",Ti,{pet_ref:r})},advanceVisit(r,i){let l=Si("visit_ref",r,nd);if(l!==null)return Promise.resolve(N(l));if(typeof i!="string"||!id.has(i))return Promise.resolve(N(Dt("to must be booked, cancelled, completed or no_show")));let s=`${Ti}/${encodeURIComponent(r)}/advance`;return n("televet.sandbox.advanceVisit",s,{to:i})},simulateVisitEvent(r,i,l){let s=Si("visit_ref",r,nd);if(s!==null)return Promise.resolve(N(s));if(typeof i!="string"||!rd.has(i))return Promise.resolve(N(Dt(`event must be one of ${[...rd].join(", ")}`)));if(i==="reminder"){if(typeof l!="string"||!od.has(l))return Promise.resolve(N(Dt(`stage must be one of ${[...od].join(", ")} for a reminder`)))}else if(l!==void 0)return Promise.resolve(N(Dt("stage is only for a reminder")));let a=`${Ti}/${encodeURIComponent(r)}/simulate`;return n("televet.sandbox.simulateVisitEvent",a,l===void 0?{event:i}:{event:i,stage:l})}}}o(ld,"createVetVisitSandboxController");function ad(){let{runtime:e,userRef:t,scopeEpoch:n}=Ye();return react.useMemo(()=>{let{services:r}=e.registry;return ld({auth:r.authFor(t),...r.errorPolicy?{errorPolicy:r.errorPolicy}:{}})},[e,t,n])}o(ad,"useEverfurVetVisitSandbox");function vf(e,t){return !e||!t.enabled?false:t.data!==null&&t.data.active===false||An({error:t.error??null})}o(vf,"televetOpensSimulator");var bf=o(e=>e.livemode===false,"isSandbox");function hf(){let e=Ye().runtime.entitlements,t=react.useCallback(()=>bf(e.getSnapshot()),[e]);return react.useSyncExternalStore(e.subscribe,t,t)}o(hf,"useTelevetSandboxTenant");function dd(e,t){let n=vf(hf(),e);return {simulate:n,fundingRefused:t&&!n}}o(dd,"useTelevetSimulatorRoute");function ud(e){let t=ad(),[n,r]=react.useState(null),[i,l]=react.useState(null),[s,a]=react.useState(false),d=react.useRef(false),u=react.useRef(true);react.useEffect(()=>(u.current=true,()=>{u.current=false;}),[]);let f=react.useCallback((b,C,E)=>{d.current||(d.current=true,a(true),C().then(h=>{if(d.current=false,!!u.current){if(a(false),!h.ok){l({tone:"danger",text:H(De.errorTemplate,{label:b,message:h.error.displayMessage})});return}E&&r(h.value.visit),l({tone:"ok",text:H(De.resultTemplate,{label:b,result:h.value.result})});}}));},[]),y=react.useCallback(()=>{f(De.createLabel,()=>t.createVisit(e),true);},[e,f,t]),p=react.useCallback(b=>{n!==null&&f(De.advance[b],()=>t.advanceVisit(n.visitRef,b),true);},[f,t,n]),c=react.useCallback(b=>{if(n===null)return;let C=b==="reminder"?"24h":void 0;f(De.events[b],()=>t.simulateVisitEvent(n.visitRef,b,C),false);},[f,t,n]),v=n===null?null:H(De.visitTemplate,{visitRef:n.visitRef,status:n.status,scheduledAt:n.scheduledAt});return {visit:n,visitLine:v,line:i,busy:s,create:y,advance:p,raise:c}}o(ud,"useTelevetVisitSimulator");var cd=Object.freeze(["completed","cancelled","no_show"]),pd=Object.freeze(["rescheduled","reminder","followup_sent","message_received","ended"]);function fd(e){let t=e?.triage;return !e||!t?null:async(n,r)=>{let i=await t.call(e,n,r);return i.ok?i.value:null}}o(fd,"televetTriageReadFrom");function xi(e){let[t,n]=react.useState(false),[r,i]=react.useState(false),[l,s]=react.useState(null),a=react.useRef(null),d=react.useRef(null),u=react.useRef(true);react.useEffect(()=>(u.current=true,()=>{u.current=false,d.current?.abort(),d.current=null;}),[]);let f=react.useCallback(()=>{d.current?.abort(),d.current=null,u.current&&i(false);},[]),y=react.useCallback(async C=>{if(d.current!==null)return false;let E=C.trim();if(l!==null&&l===E||!e)return true;let h=a.current!==null&&a.current.reason===E?a.current.emergency:null;if(h===null){let S=new AbortController;d.current=S,i(true);try{let w=await e(E,S.signal);if(S.signal.aborted||!u.current)return !1;w===null?h=!1:(h=w.isEmergency||w.fallback,a.current=Object.freeze({reason:E,emergency:h}));}catch{if(S.signal.aborted||!u.current)return false;h=false;}finally{d.current===S&&(d.current=null,u.current&&i(false));}}return h===true?(n(true),false):true},[l,e]),p=react.useCallback(C=>{s(C.trim()),n(false);},[]),c=react.useCallback(()=>n(false),[]),v=react.useCallback(()=>{f(),a.current=null,s(null),n(false);},[f]),b=react.useCallback(C=>l!==null&&l===C.trim(),[l]);return {open:t,checking:r,check:y,acknowledge:p,close:c,cancel:f,reset:v,isAcknowledged:b}}o(xi,"useEarlyTriage");function kf(e){let t=e?.trim().toUpperCase()??"";return /^[A-Z]{2}$/.test(t)?t:null}o(kf,"normalizeStateCode");function Pi(e,t){let n=kf(e),[r,i]=react.useState(()=>Object.freeze({})),l=react.useRef(0),s=react.useRef(null),a=react.useCallback(d=>{if(!t||n===null)return null;let u=`${n}:${d}`;s.current!==null&&s.current!==u&&(l.current+=1),s.current=u;let f=r[u]??"idle";return {joined:f==="joined",pending:f==="pending",failed:f==="failed",onPress:o(()=>{if(f==="pending"||f==="joined")return;let y=l.current+=1;i(p=>Object.freeze({...p,[u]:"pending"})),(async()=>{let p=false;try{p=await t(n,d);}catch{p=false;}l.current===y&&i(c=>Object.freeze({...c,[u]:p?"joined":"failed"}));})();},"onPress")}},[n,r,t]);return react.useMemo(()=>({actionFor:a}),[a])}o(Pi,"useStateInterest");var xf=Object.freeze([{id:"itchy-skin",label:"Itchy skin and allergies"},{id:"ear-infections",label:"Ear problems"},{id:"upset-stomach",label:"Upset stomach"},{id:"anxiety",label:"Anxiety and behavior"},{id:"parasites",label:"Fleas, ticks and heartworm"},{id:"joint-pain",label:"Joints and mobility"},{id:"eye-issues",label:"Eyes"},{id:"urinary",label:"Peeing and urinary"},{id:"surgery-aftercare",label:"Surgery aftercare"},{id:"senior-care",label:"Senior care"},{id:"wellness",label:"A wellness check-in"}].map(e=>Object.freeze(e))),Pf="other";function yd(e){return Object.freeze([...xf,Object.freeze({id:Pf,label:Q.otherIssue})])}o(yd,"televetIssueChips");function gd(e,t){let n=e.filter(i=>i.trim().length>0),r=t.trim();return n.length===0?r:r.length===0?n.join(", "):`${n.join(", ")}
|
|
2
|
-
${r}`}o(gd,"composeTelevetReason");var Ri=Object.freeze([["AL","Alabama"],["AK","Alaska"],["AZ","Arizona"],["AR","Arkansas"],["CA","California"],["CO","Colorado"],["CT","Connecticut"],["DE","Delaware"],["DC","District of Columbia"],["FL","Florida"],["GA","Georgia"],["HI","Hawaii"],["ID","Idaho"],["IL","Illinois"],["IN","Indiana"],["IA","Iowa"],["KS","Kansas"],["KY","Kentucky"],["LA","Louisiana"],["ME","Maine"],["MD","Maryland"],["MA","Massachusetts"],["MI","Michigan"],["MN","Minnesota"],["MS","Mississippi"],["MO","Missouri"],["MT","Montana"],["NE","Nebraska"],["NV","Nevada"],["NH","New Hampshire"],["NJ","New Jersey"],["NM","New Mexico"],["NY","New York"],["NC","North Carolina"],["ND","North Dakota"],["OH","Ohio"],["OK","Oklahoma"],["OR","Oregon"],["PA","Pennsylvania"],["RI","Rhode Island"],["SC","South Carolina"],["SD","South Dakota"],["TN","Tennessee"],["TX","Texas"],["UT","Utah"],["VT","Vermont"],["VA","Virginia"],["WA","Washington"],["WV","West Virginia"],["WI","Wisconsin"],["WY","Wyoming"]].map(([e,t])=>Object.freeze({code:e,name:t})));function Un(e){let t=e?.trim().toUpperCase()??"";return Ri.find(n=>n.code===t)?.name??t}o(Un,"televetStateName");function vd(e,t){return e?e.wellnessAvailable?e.prescriptionsAvailable?H(Q.wherePrescribeMetaTemplate,{pet:t}):Q.whereWellnessMeta:Q.stateBlockedTitle:null}o(vd,"televetWhereMeta");function _f(e,t,n,r){if(!e||!t||!n||!t.prescriptionsAvailable)return null;let i=n.trim().toUpperCase();return e.licensedStates.some(s=>s.state.trim().toUpperCase()===i&&s.canPrescribe)?H(Q.whereLicensedTemplate,{vet:e.displayName,state:Un(i),pet:r}):null}o(_f,"televetWhereLicensedLine");function bd(e){let{hostState:t,state:n,policy:r,clinician:i,petName:l,controller:s,onState:a}=e,d=t&&Ne(t)?t.trim().toUpperCase():null,u=n&&Ne(n)?n.trim().toUpperCase():null,f=Rn(d,s),[y,p]=react.useState(d===null||u!==null&&u!==d),c=d===null||y,v=react.useCallback(()=>{d!==null&&(p(false),a(d));},[d,a]),b=react.useCallback(()=>{p(true),u===d&&a(null);},[u,d,a]),C=react.useCallback(w=>{p(true),a(w.trim().toUpperCase());},[a]),E=d===null?null:{code:d,name:Un(d),meta:vd(f.data,l)},h=c&&u!==null&&(d===null||u!==d||y)?u:null,S=h===null?null:{code:h,name:Un(h),meta:vd(r.data,l)};return {hostPlace:E,otherSelected:c,otherPlace:S,licensedLine:_f(i,r.data,u,l),stateName:u===null?null:Un(u),canContinue:u!==null,pickHost:v,pickOther:b,pickState:C}}o(bd,"useTelevetWhere");function Sd(e){let{reasonText:t,state:n,hostState:r,clinicianId:i,clinicians:l,policy:s,petName:a,controller:d,dispatch:u}=e,[f,y]=react.useState([]),[p,c]=react.useState(null),v=react.useRef(false),b=react.useMemo(()=>yd(),[]),C=f.map(x=>b.find(T=>T.id===x)?.label??"").filter(Boolean),E=gd(C,t),h=C.length>0?C.join(", "):t.trim(),S=react.useCallback(x=>y(T=>T.includes(x)?T.filter(I=>I!==x):[...T,x]),[]),w=l?.find(x=>x.clinicianId===i)??l?.[0]??null,R=bd({hostState:r,state:n,policy:s,clinician:w,petName:a??Q.petFallback,controller:d,onState:react.useCallback(x=>{v.current=true,u({type:"patch",patch:{state:x,clinicianId:null}});},[u])});return {issueChips:b,concernIds:f,toggleConcern:S,composedReason:E,aboutLine:h,emergencyAnswer:p,setEmergencyAnswer:c,where:R,matchedClinician:w,whereTouched:v}}o(Sd,"useTelevetBookingIntake");var rn=2;function Cd(e){return typeof e!="number"||!Number.isInteger(e)?rn:e<1?1:e>6?6:e}o(Cd,"headingLevel");function ut(e){return e>=6?6:e+1}o(ut,"nextHeadingLevel");function ie(e){return `h${String(e)}`}o(ie,"headingTag");var Bf=ut(rn),wi=react.createContext(Bf);function ge(){return react.useContext(wi)}o(ge,"useNestedHeadingLevel");function Lf(e,t){if(e===void 0)return {};let n={};return e.backgroundColor!==void 0&&(n.backgroundColor=e.backgroundColor),e.borderColor!==void 0&&(n.borderColor=e.borderColor,n.borderWidth=t??1),e.borderRadius!==void 0&&(n.borderRadius=e.borderRadius),n}o(Lf,"slotBox");function Ed(e){return e?.textColor===void 0?{}:{color:e.textColor}}o(Ed,"slotText");function kd(e,t){let n=Lf(e,t),r={};return n.backgroundColor!==void 0&&(r.backgroundColor=n.backgroundColor),n.borderColor!==void 0&&(r.border=`${n.borderWidth??1}px solid ${n.borderColor}`),n.borderRadius!==void 0&&(r.borderRadius=n.borderRadius),r}o(kd,"slotBoxCss");var xe=44;function Y(){let e=M();return react.useMemo(()=>Df(e),[e])}o(Y,"useBookingStyles");function B({label:e,onPress:t,kind:n="primary",size:r="md",disabled:i=false,loading:l=false,fullWidth:s=true,accessibilityLabel:a,describedBy:d,testID:u,style:f}){let y=Y(),p=i||l,c=Br(p);return jsxRuntime.jsx("button",{type:"button",onClick:t,...c.handlers,disabled:p,"aria-busy":l||void 0,...a&&a!==e?{"aria-label":a}:{},...d?{"aria-describedby":d}:{},"data-testid":u,style:{...y.button,...n==="primary"?y.buttonPrimary:n==="danger"?y.buttonDanger:n==="quiet"?y.buttonQuiet:y.buttonSecondary,...r==="lg"?y.buttonLarge:null,...s?y.buttonFull:y.buttonAuto,...p?y.buttonDisabled:null,...c.style,...f},children:e})}o(B,"TelevetButton");function le({title:e,message:t,actionLabel:n,onAction:r,testID:i}){let l=Y(),s=ie(ge()),a=typeof n=="string"&&n.length>0&&typeof r=="function";return jsxRuntime.jsxs("div",{style:l.stateCard,"data-testid":i,children:[jsxRuntime.jsx(s,{style:l.stateTitle,children:e}),t?jsxRuntime.jsx("p",{style:l.stateMessage,children:t}):null,a?jsxRuntime.jsx(B,{label:n,onPress:r,kind:"secondary",fullWidth:false}):null]})}o(le,"TelevetStateCard");function Br(e=false,t=.97){let n=M(),[r,i]=react.useState(false);if(n.motion.reducedMotion||e)return {handlers:{},style:{}};let s=o(()=>i(false),"up");return {handlers:{onPointerDown:o(()=>i(true),"onPointerDown"),onPointerUp:s,onPointerLeave:s,onPointerCancel:s},style:{transform:r?`scale(${String(t)})`:void 0,transition:`transform ${String(Mf)}ms ${n.motion.easing.emphasized}, background-color ${String(n.motion.duration.normal)}ms ease, border-color ${String(n.motion.duration.normal)}ms ease`}}}o(Br,"useTelevetPress");var Mf=160;function ve({height:e,width:t="100%",testID:n}){let r=Y();return jsxRuntime.jsx("span",{"aria-hidden":"true","data-testid":n,style:{...r.skeleton,height:e,width:t}})}o(ve,"TelevetSkeletonBlock");function ae({message:e,assertive:t=false,testID:n,style:r}){let i=Y();return jsxRuntime.jsx("p",{role:t?"alert":"status","data-testid":n,style:{...i.failure,...r},children:e})}o(ae,"TelevetFailureLine");function Df(e){let{color:t,space:n,radius:r,type:i,slots:l}=e,{size:s,lineHeight:a}=i,d=o(u=>`${String(u)}px`,"rem");return {screen:{...Jt,display:"flex",flexDirection:"column",minHeight:0,flex:"1 1 auto",gap:d(n.md),paddingLeft:d(n.xl),paddingRight:d(n.xl),boxSizing:"border-box"},stepFill:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,gap:d(n.md)},list:{display:"flex",flexDirection:"column",gap:d(n.sm)},button:{minHeight:xe,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:d(n.sm),paddingLeft:d(20),paddingRight:d(20),paddingTop:d(n.xs),paddingBottom:d(n.xs),borderRadius:d(r.pill),borderStyle:"solid",borderWidth:1.5,borderColor:"transparent",cursor:"pointer",textAlign:"center",...k(e,"bold"),fontSize:d(s.bodyTight),lineHeight:String(a.snug),boxSizing:"border-box"},buttonLarge:{minHeight:52,paddingLeft:d(26),paddingRight:d(26),fontSize:d(16)},buttonFull:{alignSelf:"stretch",width:"100%"},buttonAuto:{alignSelf:"flex-start",minWidth:xe},buttonPrimary:{backgroundColor:t.primary,borderColor:t.primary,color:t.onPrimary,...kd(l.primaryButton),...Ed(l.primaryButton)},buttonSecondary:{borderColor:t.brandInk,backgroundColor:t.surface,color:t.brandInk,...l.primaryButton?.borderRadius===void 0?null:{borderRadius:d(l.primaryButton.borderRadius)},...l.primaryButton?.borderColor===void 0?null:{borderColor:l.primaryButton.borderColor}},buttonDanger:{backgroundColor:t.danger,borderColor:t.danger,color:t.onDanger},buttonQuiet:{backgroundColor:"transparent",borderColor:"transparent",color:t.brandInk,paddingLeft:d(n.sm),paddingRight:d(n.sm)},buttonDisabled:{opacity:.45,cursor:"not-allowed"},stateCard:{minHeight:140,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",gap:d(n.sm),padding:d(n.lg),borderRadius:d(r.lg),borderStyle:"solid",borderWidth:1,borderColor:t.brandBorder,boxSizing:"border-box"},stateTitle:{margin:0,...k(e,"medium"),color:t.brandInk,fontSize:d(s.subtitle),lineHeight:String(a.snug)},stateMessage:{margin:0,...k(e,"regular"),color:t.text.metaCool,fontSize:d(s.body),lineHeight:String(a.normal)},skeleton:{display:"block",borderRadius:d(r.md),backgroundColor:t.skeleton,flexShrink:0},failure:{margin:0,...k(e,"regular"),color:t.danger,fontSize:d(s.caption),lineHeight:String(a.normal)},stepTitle:{margin:0,...k(e,"medium"),color:t.brandInk,fontSize:d(Ge(e,"heading",30)),lineHeight:"1.1",letterSpacing:"-0.03em",textAlign:"left",textWrap:"balance"},stepHelp:{margin:0,...k(e,"regular"),color:t.text.primary,fontSize:d(s.body),lineHeight:String(a.relaxed),textAlign:"left",maxWidth:"62ch"},divider:{height:1,backgroundColor:t.brandBorder,flexShrink:0},scrollRoot:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0},scrollBody:{flex:"1 1 auto",minHeight:0,overflowY:"auto",overscrollBehavior:"contain"},scrollFooter:{flexShrink:0,paddingTop:d(n.md),paddingBottom:d(n.lg)}}}o(Df,"makeBookingStyles");function an({petName:e,primaryVet:t,onFindEmergencyVet:n}){return true}o(an,"hasTelevetEmergencyExit");function Vt({petName:e,primaryVet:t,onFindEmergencyVet:n,testIDPrefix:r}){let i=M(),l=react.useMemo(()=>Uf(i),[i]),s=e?.trim()??"",a=`${react.useId()}-primary-vet-hint`;return jsxRuntime.jsxs("div",{style:l.exits,"data-testid":`${r}-exits`,children:[n?jsxRuntime.jsxs("button",{type:"button",onClick:()=>{lr(n);},style:{...l.card,...l.cardButton},"data-testid":`${r}-find-vet`,children:[jsxRuntime.jsx("span",{style:l.text,children:jsxRuntime.jsx("span",{style:l.title,children:qt.findEmergencyVet})}),jsxRuntime.jsx(Ii,{})]}):null,jsxRuntime.jsxs("a",{href:qt.poisonControlTel,style:l.card,"data-testid":`${r}-poison-control`,children:[jsxRuntime.jsxs("span",{style:l.text,children:[jsxRuntime.jsx("span",{style:l.title,children:qt.poisonControl}),jsxRuntime.jsx("span",{style:l.detail,children:qt.poisonControlDetail})]}),jsxRuntime.jsx(Ii,{})]}),t!=null&&s.length>0?jsxRuntime.jsx(Hf,{petName:s,vet:t,hintId:a,local:l,testIDPrefix:r}):null]})}o(Vt,"TelevetEmergencyExits");function Hf({petName:e,vet:t,hintId:n,local:r,testIDPrefix:i}){let l=H(m.emergency.exitPrimaryVetTitle,{petName:e}),s=t.detail?.trim()??"",a=jsxRuntime.jsxs("span",{style:r.text,children:[jsxRuntime.jsx("span",{style:r.title,children:l}),s.length>0?jsxRuntime.jsx("span",{style:r.detail,children:s}):null]});if(!t.dial)return jsxRuntime.jsx("div",{style:r.card,"data-testid":`${i}-primary-vet`,children:a});let d=t.dial;return jsxRuntime.jsxs("button",{type:"button",onClick:()=>{lr(d);},"aria-label":s.length>0?`${l}, ${s}`:l,"aria-describedby":n,style:{...r.card,...r.cardButton},"data-testid":`${i}-primary-vet-call`,children:[a,jsxRuntime.jsx(Ii,{}),jsxRuntime.jsx("span",{id:n,style:Wf,children:m.emergency.startCallHint})]})}o(Hf,"PrimaryVetCard");function Ii(){return jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 19.358 19.358",fill:"none",style:{marginLeft:"auto",flexShrink:0},children:jsxRuntime.jsx("path",{d:"M7.25918 14.5191L12.0987 9.67957L7.25918 4.84007",stroke:"currentColor",strokeWidth:"1.61317",strokeLinecap:"round",strokeLinejoin:"round"})})}o(Ii,"Chevron");var Wf=Object.freeze({position:"absolute",width:1,height:1,margin:-1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0});function Uf(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i;return {exits:{display:"flex",flexDirection:"column",borderRadius:r.md,backgroundColor:t.surface,paddingLeft:14,paddingRight:14,overflow:"hidden"},card:{display:"flex",alignItems:"center",gap:14,minHeight:xe,paddingTop:n.md,paddingBottom:n.md,paddingLeft:0,paddingRight:0,borderWidth:0,borderBottomWidth:1,marginBottom:-1,borderStyle:"solid",borderColor:t.borderRingCream,background:"transparent",color:t.brandInk,textAlign:"start",textDecoration:"none",boxSizing:"border-box"},cardButton:{width:"100%",cursor:"pointer",font:"inherit",position:"relative"},text:{display:"flex",flexDirection:"column",gap:2,flexShrink:1,minWidth:0},title:{...k(e,"bold"),color:t.brandInk,fontSize:l.body,lineHeight:String(s.snug)},detail:{...k(e,"regular"),color:t.text.muted,fontSize:14,lineHeight:String(s.normal)}}}o(Uf,"makeExitStyles");function Pd({petName:e,primaryVet:t,onFindEmergencyVet:n,onContinue:r}){let i=M(),l=Y(),s=react.useMemo(()=>Li(i),[i]),a=ie(ge()),d=m.emergency.lede;return jsxRuntime.jsxs("section",{role:"alert",style:{...l.stepFill,...s.emergencyPanel},"data-testid":"televet-early-emergency",children:[jsxRuntime.jsx(a,{style:s.emergencyTitle,children:m.emergency.bannerTitle}),jsxRuntime.jsx("p",{style:s.emergencyLede,children:d}),jsxRuntime.jsx(Vt,{petName:e,primaryVet:t,onFindEmergencyVet:n,testIDPrefix:"televet-early-emergency"}),jsxRuntime.jsx(B,{label:m.emergency.keepBookingCta,kind:"secondary",onPress:r,testID:"televet-early-emergency-continue"})]})}o(Pd,"TelevetEarlyEmergency");function Oi({action:e,testIDPrefix:t}){let n=M(),r=react.useMemo(()=>Li(n),[n]),i=ie(ge());return e===null?null:e.joined?jsxRuntime.jsxs("div",{role:"status","data-testid":`${t}-joined`,style:r.interestFeedback,children:[jsxRuntime.jsx(i,{style:r.interestJoinedTitle,children:m.stateInterest.joinedTitle}),jsxRuntime.jsx("p",{style:r.interestBody,children:m.stateInterest.joinedBody})]}):jsxRuntime.jsxs("div",{"data-testid":t,style:r.interestAction,children:[jsxRuntime.jsx(B,{label:e.pending?m.stateInterest.submitting:m.stateInterest.cta,kind:"secondary",loading:e.pending,disabled:e.pending,onPress:e.onPress,testID:`${t}-submit`}),e.failed?jsxRuntime.jsx(ae,{message:m.stateInterest.failed,assertive:true,testID:`${t}-error`}):null]})}o(Oi,"TelevetStateInterestAction");function Rd({cause:e,onRetry:t,stateInterest:n=null}){let r=ci(e);return jsxRuntime.jsxs("div",{"data-testid":"televet-clinicians-empty",children:[jsxRuntime.jsx(le,{title:r.title,message:r.message,...r.retryLabel!==null&&t?{actionLabel:r.retryLabel,onAction:t}:{}}),r.interestReason!==null?jsxRuntime.jsx(Oi,{action:n??null,testIDPrefix:"televet-state-interest-no-licensed-vet"}):null]})}o(Rd,"TelevetClinicianEmptyState");function $f({onCheckAvailability:e}){return jsxRuntime.jsx(Bi,{...e?{onCheckAvailability:e}:{}})}o($f,"TelevetEntitlementInterestState");function Bi({onCheckAvailability:e,renderUnavailable:t}){let n=Y();return jsxRuntime.jsxs("div",{"data-testid":"televet-booking-not-entitled",style:n.list,children:[t?t():jsxRuntime.jsx(le,{title:m.bookingPausedTitle}),e?jsxRuntime.jsx(B,{label:m.checkAvailabilityCta,kind:"secondary",onPress:e,testID:"televet-check-state-availability"}):null]})}o(Bi,"EntitlementPausedState");function $n({shortfall:e,testIDPrefix:t}){let n=M(),r=react.useMemo(()=>Li(n),[n]);if(yi(e))return null;let i=gi(e);return i.length===0?null:jsxRuntime.jsx("ul",{role:"status",style:r.mediaNotice,"data-testid":`${t}-media-notice`,children:i.map((l,s)=>jsxRuntime.jsx("li",{style:r.mediaLine,"data-testid":`${t}-media-line-${String(s)}`,children:l},l))})}o($n,"TelevetMediaDropNotice");function Li(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i;return {emergencyPanel:{display:"flex",flexDirection:"column",gap:n.sm,padding:n.lg,borderRadius:r.lg,border:`2px solid ${t.danger}`,background:t.surface},emergencyTitle:{...k(e,"medium"),margin:0,color:t.danger,fontSize:l.heading,lineHeight:`${String(l.heading*s.snug)}px`},emergencyLede:{...k(e,"regular"),margin:0,color:t.text.primary,fontSize:l.subtitle,lineHeight:`${String(l.subtitle*s.normal)}px`},interestAction:{display:"flex",flexDirection:"column",gap:n.sm,marginTop:n.sm},interestFeedback:{display:"flex",flexDirection:"column",gap:n.xs,marginTop:n.sm},interestJoinedTitle:{...k(e,"medium"),margin:0,color:t.brandInk,fontSize:l.body,lineHeight:`${String(l.body*s.snug)}px`},interestBody:{...k(e,"regular"),margin:0,color:t.text.metaCool,fontSize:l.body,lineHeight:`${String(l.body*s.normal)}px`},mediaNotice:{display:"flex",flexDirection:"column",gap:n.xs,margin:0,padding:0,listStyle:"none"},mediaLine:{...k(e,"regular"),color:t.text.metaCool,fontSize:l.caption,lineHeight:`${String(l.caption*s.normal)}px`}}}o(Li,"makeEdgeStyles");function _d(e){let{surfaceUnavailable:t,notEntitled:n,policyBlocked:r,triageOpen:i,step:l}=e;return t||n&&l!=="clinician"||r?true:l==="reason"&&i}o(_d,"televetBookingGateApplies");function wd({state:e,petName:t,primaryVet:n,onFindEmergencyVet:r,stateInterest:i=null,onCheckAvailability:l,onAcknowledgeEmergency:s,renderUnavailable:a}){let d=Y(),{surfaceUnavailable:u,notEntitled:f,policyBlocked:y,triageOpen:p,step:c}=e;return u?jsxRuntime.jsx("div",{style:d.stepFill,"data-testid":"televet-booking-unavailable",children:a?a():jsxRuntime.jsx(le,{title:m.bookingPausedTitle})}):f&&c!=="clinician"?jsxRuntime.jsx(Bi,{...l?{onCheckAvailability:l}:{},...a?{renderUnavailable:a}:{}}):y?jsxRuntime.jsxs("div",{"data-testid":"televet-booking-state-blocked",children:[jsxRuntime.jsx(le,{title:m.stateBlockedTitle}),jsxRuntime.jsx(Oi,{action:i,testIDPrefix:"televet-state-interest-state-blocked"})]}):c==="reason"&&p?jsxRuntime.jsx(Pd,{...t!==void 0?{petName:t}:{},...n?{primaryVet:n}:{},onFindEmergencyVet:r,onContinue:s}):null}o(wd,"TelevetBookingGate");function Id(e){return e.noState?true:e.isPending||e.isError?false:e.isEmpty||e.notEntitled}o(Id,"televetClinicianOutcomeApplies");function Ad({state:e,cause:t,locationStatus:n,onRequestLocation:r,onRetry:i,stateInterest:l=null,renderUnavailable:s}){return e.noState?jsxRuntime.jsx("div",{"data-testid":"televet-booking-location-unknown",children:jsxRuntime.jsx(le,{title:n==="blocked"?m.locationBlockedTitle:n==="unavailable"?m.locationUnavailableTitle:m.locationUnknownTitle,message:n==="blocked"?m.locationBlockedBody:n==="unavailable"?m.locationUnavailableBody:m.locationUnknownBody,actionLabel:r&&n!=="blocked"?m.locationUnknownCta:void 0,onAction:n==="blocked"?void 0:r})}):e.isEmpty?jsxRuntime.jsx(Rd,{cause:t,onRetry:i,stateInterest:l}):jsxRuntime.jsx(Bi,{...s?{renderUnavailable:s}:{}})}o(Ad,"TelevetClinicianOutcome");function Vi(e){if(typeof e=="number")return Od(e);if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;if(t.startsWith("#"))return Ni(t.slice(1));if(t.toLowerCase().startsWith("0x"))return Ni(t.slice(2));if(t.toLowerCase().startsWith("rgb"))return Kf(t);if(/^[0-9a-fA-F]+$/.test(t)){let n=Ni(t);if(n!==null)return n}return /^\d+$/.test(t)?Od(Number.parseInt(t,10)):null}o(Vi,"toRgba");function Ni(e){let t=e.trim();if(!/^[0-9a-fA-F]+$/.test(t))return null;if(t.length===3)return {r:Fi(t[0]),g:Fi(t[1]),b:Fi(t[2]),a:1};if(t.length===6)return {r:zt(t,0),g:zt(t,2),b:zt(t,4),a:1};if(t.length===8){let n=zt(t,0);return {r:zt(t,2),g:zt(t,4),b:zt(t,6),a:n/255}}return null}o(Ni,"fromHex");function Kf(e){let t=e.indexOf("("),n=e.indexOf(")");if(t<0||n<0||n<t)return null;let r=e.slice(t+1,n).split(",").map(d=>d.trim());if(r.length<3)return null;let i=Mi(Number(r[0])),l=Mi(Number(r[1])),s=Mi(Number(r[2]));if(i===null||l===null||s===null)return null;let a=1;if(r.length>=4){let d=Number(r[3]);if(!Number.isFinite(d))return null;a=Math.min(1,Math.max(0,d));}return {r:i,g:l,b:s,a}}o(Kf,"fromRgbFunc");function Od(e){if(!Number.isFinite(e))return null;let t=Math.trunc(e)>>>0,n=t>>>24&255;return {r:t>>>16&255,g:t>>>8&255,b:t&255,a:n===0?1:n/255}}o(Od,"argbIntToRgba");function zt(e,t){return Number.parseInt(e.slice(t,t+2),16)}o(zt,"byte");function Fi(e){return Number.parseInt(`${e??"0"}${e??"0"}`,16)}o(Fi,"dup");function Mi(e){return Number.isFinite(e)?Math.min(255,Math.max(0,Math.round(e))):null}o(Mi,"clampByte");function qf(e,t,n){return `#${Di(e)}${Di(t)}${Di(n)}`.toUpperCase()}o(qf,"rgbToHex");function Di(e){return e.toString(16).padStart(2,"0")}o(Di,"hex2");function Yf(e,t){let n=e.a,r=o((i,l)=>Math.round(i*n+l*(1-n)),"mix");return {r:r(e.r,t.r),g:r(e.g,t.g),b:r(e.b,t.b),a:1}}o(Yf,"composite");function Bd(e,t){let n=Vi(e),r=Vi(t);if(n===null||r===null)return null;let i=n.a>=1?n:Yf(n,{...r});return qf(i.r,i.g,i.b)}o(Bd,"flattenOnto");function Ld(e,t){let n=Vi(e);if(n===null)return null;let r=Math.min(1,Math.max(0,t));return `rgba(${n.r}, ${n.g}, ${n.b}, ${r})`}o(Ld,"withAlpha");var Gf=.22;function Jf(e){let t=e.color;return {ink:t.brandInk,text:t.text.primary,muted:t.text.muted,line:t.borderRingCream,mist:t.surfaceSubtle,surface:t.surface,pink:t.scanButtonPink,onPink:t.onBubbleVet,go:t.success,alert:t.danger,alertWash:t.badgeBgCritical}}o(Jf,"televetPlainLook");function Ie(e){let t=e.color,n=Ld(t.scanButtonPink,Gf);return {...Jf(e),pinkSoft:(n===null?null:Bd(n,t.surface))??t.surface}}o(Ie,"televetLook");function Nd(e){return `televet-consult-${e}`}o(Nd,"televetConsultCalendarKey");function zi({consult:e,petName:t,onDone:n,onAddToCalendar:r,canJoinInApp:i=false,lengthMinutes:l,sharedRecords:s=false,sentPhoto:a=false}){let d=M(),u=Y(),f=react.useMemo(()=>em(d),[d]),y=`${react.useId()}-booked-title`,p=ie(ge()),[c,v]=react.useState("idle"),b=o(async()=>{if(!r)return;v("saving");let h=new Date(e.scheduledAt);if(Number.isNaN(h.getTime())){v("failed");return}let S=typeof l=="number"&&Number.isFinite(l)&&l>0?l:Mt,w=await ar(r,{key:Nd(e.consultId),title:m.visit.title,startDate:h,endDate:new Date(h.getTime()+S*6e4),alarmOffsetMinutes:-30});if(!w.ok){v("failed");return}v(w.value===true?"saved":w.value==="handed-off"?"idle":"failed");},"addToCalendar"),C=[m.booked.remindPromise,s&&e.clinicianName?H(a?m.booked.recordsPhotoPromiseTemplate:m.booked.recordsPromiseTemplate,{pet:t??m.petFallback,vet:e.clinicianName}):H(m.booked.summaryPromise,{pet:t??""}),...i?[m.booked.joinPromise]:[]];if(!at())return jsxRuntime.jsx("div",{style:f.screen,"data-testid":"televet-booked-copy-unapproved"});let E=e.clinicianName?.trim()??"";return jsxRuntime.jsxs("section",{style:f.screen,"aria-labelledby":y,"data-testid":"televet-booked",children:[jsxRuntime.jsx("div",{"aria-hidden":"true",style:f.avatar,children:E.length>0?E.replace(/^dr\.?\s+/i,"").slice(0,1).toUpperCase():null}),jsxRuntime.jsx(p,{id:y,style:f.title,children:E.length>0?H(m.bookedTitleTemplate,{vet:E}):m.bookedTitle}),jsxRuntime.jsx("p",{style:f.when,children:t?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("time",{dateTime:e.scheduledAt,children:ui(e.scheduledAt)}),H(m.bookedLeadTemplate,{when:"",pet:t})]}):jsxRuntime.jsx("time",{dateTime:e.scheduledAt,children:ui(e.scheduledAt)})}),jsxRuntime.jsx("section",{"aria-label":m.booked.stepsLabel,style:f.card,children:jsxRuntime.jsx("ol",{style:f.steps,"data-testid":"televet-booked-steps",children:C.map((h,S)=>jsxRuntime.jsxs("li",{style:{...f.step,...S===C.length-1?f.stepLast:null},children:[jsxRuntime.jsx("span",{"aria-hidden":"true",style:f.stepNumber,children:String(S+1).padStart(2,"0")}),jsxRuntime.jsx("span",{style:f.stepText,children:h.trim()})]},h))})}),jsxRuntime.jsxs("div",{style:f.actions,children:[r?jsxRuntime.jsx(B,{label:c==="saved"?m.booked.calendarAdded:m.addToCalendarCta,kind:"secondary",size:"lg",fullWidth:false,loading:c==="saving",disabled:c==="saving"||c==="saved",onPress:()=>{b();},testID:"televet-booked-calendar"}):null,jsxRuntime.jsx(B,{label:m.doneCta,kind:"primary",size:"lg",fullWidth:false,onPress:n,testID:"televet-booked-done"})]}),c==="failed"?jsxRuntime.jsx("p",{role:"status",style:{...u.failure,...f.calendarNote},"data-testid":"televet-booked-calendar-failed",children:m.booked.calendarFailedBody}):null]})}o(zi,"TelevetBookedScreen");function em(e){let{space:t,radius:n,type:r}=e,{size:i,lineHeight:l}=r,s=Ie(e),a=o(d=>`${String(d)}px`,"rem");return {screen:{display:"flex",flexDirection:"column",alignItems:"center",flex:"1 1 auto",minHeight:0,gap:a(t.md),paddingTop:a(t.xl),paddingBottom:a(t.xl),boxSizing:"border-box",textAlign:"center"},avatar:{width:112,height:112,flexShrink:0,borderRadius:"50%",backgroundColor:s.mist,boxShadow:`0 0 0 6px ${s.surface}, 0 0 0 10px ${s.go}`,margin:a(10),display:"inline-flex",alignItems:"center",justifyContent:"center",...k(e,"medium"),color:s.ink,fontSize:a(40),lineHeight:"1"},title:{margin:0,...k(e,"medium"),color:s.ink,fontSize:a(Ge(e,"heading",30)),lineHeight:"1.1",letterSpacing:"-0.03em",textWrap:"balance",paddingTop:a(t.md)},when:{margin:0,...k(e,"regular"),color:s.text,fontSize:a(i.body),lineHeight:String(l.relaxed)},card:{width:"min(560px, 100%)",marginTop:a(t.md),padding:`${a(t.sm)} ${a(t.xl)}`,borderRadius:a(n.lg),borderStyle:"solid",borderWidth:1,borderColor:s.line,backgroundColor:s.surface,boxSizing:"border-box",textAlign:"left"},steps:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column"},step:{display:"grid",gridTemplateColumns:"44px 1fr",gap:a(10),paddingTop:a(14),paddingBottom:a(14),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:s.line},stepLast:{borderBottomWidth:0},stepNumber:{...k(e,"monoBold"),color:s.ink,fontSize:a(13),lineHeight:String(l.relaxed),paddingTop:2},stepText:{minWidth:0,...k(e,"regular"),color:s.text,fontSize:a(i.body),lineHeight:String(l.relaxed)},actions:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"center",gap:a(t.md),marginTop:a(t.lg)},calendarNote:{textAlign:"center"}}}o(em,"makeStyles");function Fd(){let e=[];return {register(t){return e=[...e,t],()=>{e=e.filter(n=>n!==t);}},dispatch(){for(let t of [...e].reverse())try{if(t())return !0}catch{}return false}}}o(Fd,"createTelevetBackChannel");var ji=react.createContext(null);function Kn(e,t=true){let n=react.useContext(ji),r=react.useRef(e);r.current=e,react.useEffect(()=>{if(!(n===null||!t))return n.register(()=>r.current())},[n,t]);}o(Kn,"useTelevetBackChannel");var qn=Object.freeze({position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0});var Md='button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])';function Ui(e){return e.tagName==="DIALOG"}o(Ui,"isDialogElement");function lm(e,t){if(t.isDefaultPrevented()||t.nativeEvent.isComposing)return false;let n=t.target;return !(n instanceof Element)||n.closest("dialog")===e}o(lm,"ownsEscape");function Fr(e,t,n,r){let i=r?.escapeAtKeyDown===true,l=react.useRef(null),s=react.useRef(false),a=react.useRef(null),d=react.useRef(n);d.current=n;let u=react.useCallback(()=>{if(!s.current)return;s.current=false;let p=d.current===void 0?a.current:d.current.current;p&&p.isConnected&&p.focus(),(!p||!p.isConnected||document.activeElement===p)&&(a.current=null);},[]);react.useEffect(()=>{if(!e){u();return}let p=l.current;if(!s.current){let v=typeof document>"u"?null:document.activeElement;v!==null&&p!==null&&p.contains(v)||(a.current=v instanceof HTMLElement?v:null);}if(s.current=true,p===null)return;if(!Ui(p)){p.contains(document.activeElement)||(p.querySelector(Md)??p).focus();return}let c=p;typeof c.showModal=="function"?c.open||c.showModal():c.setAttribute("open","");},[e,u]),react.useEffect(()=>u,[u]),react.useEffect(()=>{let p=l.current;if(!e||p===null||!Ui(p))return;let c=p;if(typeof c.showModal!="function")return;let v=null,b=o(E=>{E.target instanceof HTMLElement&&(v=E.target);},"onFocusIn"),C=o(()=>{if(!c.isConnected||c.open)return;let E=v;c.showModal(),E!==null&&E.isConnected&&c.contains(E)&&document.activeElement!==E&&E.focus();},"onNativeClose");return c.addEventListener("focusin",b),c.addEventListener("close",C),()=>{c.removeEventListener("focusin",b),c.removeEventListener("close",C);}},[e]);let f=react.useCallback(p=>{let c=l.current;if(c===null)return;if(p.key==="Escape"&&!Ui(c)){p.preventDefault(),p.stopPropagation(),t();return}if(p.key==="Escape"&&i&&lm(c,p)){p.preventDefault(),t();return}if(p.key!=="Tab")return;let v=Array.from(c.querySelectorAll(Md)),b=v[0],C=v[v.length-1];if(!b||!C){p.preventDefault();return}let E=document.activeElement;p.shiftKey&&(E===b||!c.contains(E))?(p.preventDefault(),C.focus()):!p.shiftKey&&(E===C||!c.contains(E))&&(p.preventDefault(),b.focus());},[t,i]),y=react.useCallback(p=>{p.target===p.currentTarget&&(p.preventDefault(),t());},[t]);return {dialogRef:l,onKeyDown:f,onCancel:y}}o(Fr,"useModalDialog");var am="cubic-bezier(0.23, 1, 0.32, 1)",Dd="cubic-bezier(0.77, 0, 0.175, 1)";function Pe(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=Ie(e),d=e.motion.reducedMotion,u=o(y=>`${String(y)}px`,"rem"),f=d?"none":"border-color 200ms ease, background-color 200ms ease";return {marker:{minHeight:1},visuallyHiddenHeading:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},stepBody:{display:"flex",flexDirection:"column",gap:u(n.xl),paddingTop:u(n.xs),paddingBottom:u(n.xl)},head:{display:"flex",flexDirection:"column",gap:u(n.sm)},footer:{display:"flex",flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:u(n.lg),paddingTop:u(n.lg),paddingBottom:u(n.lg),flexShrink:0},footerMain:{marginLeft:"auto",flex:"1 1 200px",maxWidth:360,display:"flex"},fieldLabel:{margin:0,...k(e,"monoBold"),color:a.ink,fontSize:u(12),letterSpacing:"0.08em",textTransform:"uppercase",lineHeight:String(s.snug)},note:{margin:0,...k(e,"regular"),color:a.muted,fontSize:u(l.bodyTight),lineHeight:String(s.relaxed)},alertLine:{margin:0,...k(e,"bold"),color:a.alert,fontSize:u(l.bodyTight),lineHeight:String(s.relaxed)},options:{listStyle:"none",margin:0,padding:0,display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:u(n.md)},optionsStack:{gridTemplateColumns:"minmax(0, 1fr)"},option:{width:"100%",display:"flex",flexDirection:"row",alignItems:"center",gap:u(n.lg),padding:`${u(18)} ${u(20)}`,minHeight:64,borderRadius:u(r.lg),borderStyle:"solid",borderWidth:1.5,borderColor:a.line,backgroundColor:a.surface,color:a.text,textAlign:"left",cursor:"pointer",boxSizing:"border-box",transition:f},optionSelected:{borderColor:a.ink,backgroundColor:a.pinkSoft},optionDot:{width:22,height:22,flexShrink:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:a.ink,display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box"},optionDotFill:{width:12,height:12,borderRadius:"50%",backgroundColor:a.ink,transform:"scale(0)",transition:d?"none":`transform 320ms ${am}`},optionDotFillOn:{transform:"scale(1)"},optionText:{display:"flex",flexDirection:"column",minWidth:0,gap:2,flex:"1 1 auto"},optionTitle:{...k(e,"bold"),color:a.ink,fontSize:u(18),lineHeight:String(s.snug),overflowWrap:"anywhere"},optionMeta:{...k(e,"regular"),color:a.muted,fontSize:u(l.bodyTight),lineHeight:String(s.normal),overflowWrap:"anywhere"},optionAvatar:{width:56,height:56,flexShrink:0,borderRadius:"50%",backgroundColor:a.mist,display:"inline-flex",alignItems:"center",justifyContent:"center",...k(e,"medium"),color:a.ink,fontSize:u(l.subtitle),lineHeight:"1"},select:{width:"100%",minHeight:52,padding:`0 ${u(n.lg)}`,borderRadius:u(r.md),borderStyle:"solid",borderWidth:1.5,borderColor:a.line,backgroundColor:a.surface,color:a.text,...k(e,"regular"),fontSize:u(l.body),boxSizing:"border-box"},callout:{margin:0,padding:`${u(n.md)} ${u(n.lg)}`,borderRadius:u(r.md),backgroundColor:a.mist,...k(e,"regular"),color:a.text,fontSize:u(l.bodyTight),lineHeight:String(s.relaxed)},chipRow:{display:"flex",flexWrap:"wrap",gap:u(10)},chip:{minHeight:44,display:"inline-flex",alignItems:"center",gap:u(n.sm),padding:`0 ${u(n.lg)}`,borderRadius:u(r.pill),borderStyle:"solid",borderWidth:1.5,borderColor:a.ink,backgroundColor:a.surface,color:a.ink,cursor:"pointer",...k(e,"bold"),fontSize:u(l.bodyTight),lineHeight:String(s.snug),transition:f},chipOn:{backgroundColor:a.pink,color:a.onPink},field:{display:"flex",flexDirection:"column",gap:u(10)},reasonInput:{width:"100%",minHeight:150,resize:"vertical",borderStyle:"solid",borderWidth:1.5,borderColor:a.line,borderRadius:u(r.lg),padding:`${u(n.lg)} ${u(18)}`,backgroundColor:a.surface,...k(e,"regular"),color:a.text,fontSize:u(l.body),lineHeight:String(s.relaxed),boxSizing:"border-box",transition:d?"none":"border-color 200ms ease"},reasonInputFocus:{borderColor:a.ink,outline:"none"},signs:{margin:0,paddingLeft:u(22),display:"flex",flexDirection:"column",gap:u(n.sm),...k(e,"regular"),color:a.text,fontSize:u(l.body),lineHeight:String(s.relaxed)},emergencyBanner:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:u(n.md),padding:u(20),borderRadius:u(r.lg),borderStyle:"solid",borderWidth:1.5,borderColor:a.alert,backgroundColor:a.alertWash,boxSizing:"border-box"},emergencyTitle:{margin:0,...k(e,"bold"),color:t.errorRed,fontSize:u(l.subtitle),lineHeight:String(s.snug)},emergencyLede:{margin:0,...k(e,"regular"),color:a.text,fontSize:u(l.body),lineHeight:String(s.relaxed)},linkButton:{alignSelf:"flex-start",minHeight:44,padding:0,borderStyle:"none",background:"transparent",cursor:"pointer",textAlign:"left",...k(e,"bold"),color:a.ink,fontSize:u(l.body),lineHeight:String(s.snug),textDecorationLine:"underline",textUnderlineOffset:3},meet:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gap:u(6),padding:`${u(n.xxl)} ${u(n.xl)}`,borderRadius:u(r.lg),borderStyle:"solid",borderWidth:1,borderColor:a.line,backgroundColor:a.surface},vetAvatar:{width:112,height:112,flexShrink:0,borderRadius:"50%",backgroundColor:a.mist,boxShadow:`0 0 0 4px ${a.surface}, 0 0 0 6px ${a.go}`,display:"inline-flex",alignItems:"center",justifyContent:"center",...k(e,"medium"),color:a.ink,fontSize:u(Ge(e,"heading",40)),lineHeight:"1",marginBottom:u(n.sm)},vetName:{margin:0,...k(e,"medium"),color:a.ink,fontSize:u(l.heading),lineHeight:String(s.snug)},vetCredentials:{margin:0,...k(e,"regular"),color:a.muted,fontSize:u(l.bodyTight),lineHeight:String(s.normal)},pills:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:u(n.sm),margin:`${u(n.sm)} 0`},pill:{display:"inline-flex",alignItems:"center",height:24,padding:`0 ${u(10)}`,borderRadius:u(r.pill),borderStyle:"solid",borderWidth:1.5,borderColor:a.line,backgroundColor:a.surface,...k(e,"monoBold"),color:a.muted,fontSize:u(11.5),letterSpacing:"0.08em",textTransform:"uppercase",whiteSpace:"nowrap"},vetRating:{margin:0,...k(e,"regular"),color:a.muted,fontSize:u(l.caption),lineHeight:String(s.normal)},vetBio:{margin:0,maxWidth:"52ch",...k(e,"regular"),color:a.text,fontSize:u(l.body),lineHeight:String(s.relaxed)}}}o(Pe,"makeLocalStyles");function Ki({step:e,furthestIndex:t,title:n,canGoBack:r,showBack:i=true,isDirty:l,onBack:s,onClose:a,onConfirmDiscard:d,headingLevel:u=rn,triageOpen:f=false,stepContext:y}){let p=M(),c=react.useMemo(()=>zd(p),[p]),[v,b]=react.useState(false),C=react.useRef(null),h=`${react.useId()}-close-hint`,S=ie(u);react.useEffect(()=>{if(!l||typeof window>"u")return;let P=o(A=>{A.preventDefault(),A.returnValue="";},"onBeforeUnload");return window.addEventListener("beforeunload",P),()=>window.removeEventListener("beforeunload",P)},[l]);let w=react.useCallback(()=>{if(!l){a();return}let P={title:m.chrome.discardTitle,body:m.chrome.discardBody,confirmLabel:m.chrome.discardConfirmCta,keepLabel:m.chrome.discardKeepCta};if(d){Promise.resolve(d(P)).then(A=>{A&&a();},()=>{});return}b(true);},[l,a,d]);Kn(()=>(w(),true));let R=react.useMemo(()=>oi(y),[y]),{current:x,total:T}=Vs(e,R,f),_=e==="booked"?m.bookedStepLabel:H(m.loading.progressTemplate,{step:String(x),total:String(T)});return jsxRuntime.jsxs("div",{style:c.wrap,children:[jsxRuntime.jsxs("header",{style:c.bar,children:[jsxRuntime.jsx("button",{type:"button",ref:C,onClick:w,"aria-label":m.close,"aria-describedby":h,"data-testid":"televet-booking-close",style:c.ring,children:jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}),jsxRuntime.jsx("span",{id:h,style:qn,children:m.chrome.closeHint}),jsxRuntime.jsx(S,{style:qn,children:n??m.navTitle}),i&&r?jsxRuntime.jsx("button",{type:"button",onClick:s,"data-testid":"televet-booking-back",style:c.back,children:m.backLabel}):null,jsxRuntime.jsx("div",{"aria-hidden":"true",style:c.track,"data-testid":"televet-booking-rail",children:jsxRuntime.jsx("span",{"data-step":String(x),style:{...c.fill,transform:`scaleX(${String(x/T)})`}})}),jsxRuntime.jsx("p",{style:c.stepLabel,"data-testid":"televet-booking-progress-label",children:_})]}),v?jsxRuntime.jsx(pm,{onKeep:()=>b(false),onLeave:()=>{b(false),a();},returnFocusTo:C}):null]})}o(Ki,"TelevetBookingChrome");function pm({onKeep:e,onLeave:t,returnFocusTo:n}){let r=M(),i=react.useMemo(()=>zd(r),[r]),{dialogRef:l,onKeyDown:s,onCancel:a}=Fr(true,e,n),d=react.useId(),u=`${d}-discard-title`,f=`${d}-discard-body`;return jsxRuntime.jsxs("dialog",{ref:l,onKeyDown:s,onCancel:a,"aria-labelledby":u,"aria-describedby":f,"data-testid":"televet-booking-discard",style:i.dialog,children:[jsxRuntime.jsx("h2",{id:u,style:i.dialogTitle,children:m.chrome.discardTitle}),jsxRuntime.jsx("p",{id:f,style:i.dialogBody,children:m.chrome.discardBody}),jsxRuntime.jsxs("div",{style:i.dialogActions,children:[jsxRuntime.jsx(B,{label:m.chrome.discardKeepCta,onPress:e,kind:"primary",fullWidth:false,testID:"televet-booking-discard-keep"}),jsxRuntime.jsx(B,{label:m.chrome.discardConfirmCta,onPress:t,kind:"secondary",fullWidth:false,testID:"televet-booking-discard-leave"})]})]})}o(pm,"DiscardDialog");var fm="Back";function zd(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=o(u=>`${String(u)}px`,"rem"),d=e.motion.reducedMotion;return {wrap:{flexShrink:0},bar:{display:"flex",flexDirection:"row",alignItems:"center",gap:a(14),paddingTop:a(n.xs),paddingBottom:a(n.xl),minHeight:56,boxSizing:"border-box"},ring:{width:xe,height:xe,flexShrink:0,display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:t.borderRingCream,backgroundColor:t.surface,color:t.brandInk,cursor:"pointer",boxSizing:"border-box"},back:{flexShrink:0,minHeight:xe,padding:`0 ${a(n.sm)}`,background:"transparent",borderStyle:"none",cursor:"pointer",...k(e,"bold"),color:t.brandInk,fontSize:a(l.bodyTight)},track:{flex:"1 1 auto",minWidth:0,height:6,borderRadius:a(6),backgroundColor:t.surfaceSubtle,overflow:"hidden"},fill:{display:"block",height:"100%",borderRadius:a(6),backgroundColor:t.brandInk,transformOrigin:"0 50%",transition:d?"none":`transform 600ms ${Dd}`},stepLabel:{margin:0,flexShrink:0,...k(e,"monoBold"),color:t.brandInk,fontSize:a(12),letterSpacing:"0.1em",textTransform:"uppercase",whiteSpace:"nowrap",lineHeight:String(s.snug)},dialog:{margin:"auto",maxWidth:420,width:"calc(100% - 32px)",boxSizing:"border-box",padding:a(n.lg),borderRadius:a(r.lg),borderStyle:"solid",borderWidth:1,borderColor:t.brandBorder,backgroundColor:t.surface,color:t.text.primary},dialogTitle:{margin:0,...k(e,"medium"),color:t.brandInk,fontSize:a(l.subtitle),lineHeight:String(s.snug)},dialogBody:{margin:0,paddingTop:a(n.sm),...k(e,"regular"),color:t.text.metaCool,fontSize:a(l.body),lineHeight:String(s.normal)},dialogActions:{display:"flex",flexDirection:"row",flexWrap:"wrap",gap:a(n.sm),paddingTop:a(n.lg)}}}o(zd,"makeStyles");function jd(e){let t=[],n=e.breed?.trim();n&&t.push(n);let r=mm(e.ageYears);r!==null&&t.push(`${String(r)} year${r===1?"":"s"}`);let i=e.weightKg;return typeof i=="number"&&Number.isFinite(i)&&i>0&&t.push(`${String(Math.round(i))} kg`),t.join(" \xB7 ")}o(jd,"formatTelevetPetMetaLine");function mm(e){if(typeof e!="number"||!Number.isFinite(e))return null;let t=Math.floor(e);return t>=0?t:null}o(mm,"wholeYears");function Yi({media:e,onChange:t,onPickMedia:n,listLabel:r,meta:i}){let l=M(),s=react.useMemo(()=>hm(l),[l]),a=gr-e.length,[d,u]=react.useState(false);if(!n)return null;let f=o(async()=>{if(!(d||a<=0)){u(true);try{let y=await ar(n,a);if(!y.ok||y.value===null||y.value.length===0)return;let p=new Set(e.map(v=>v.uri)),c=y.value.filter(v=>typeof v?.uri=="string"&&v.uri.length>0&&!p.has(v.uri));if(c.length===0)return;t([...e,...c].slice(0,gr));}finally{u(false);}}},"pick");return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("ul",{role:"list","aria-label":r,style:s.row,children:[e.map((y,p)=>jsxRuntime.jsxs("li",{style:s.thumb,children:[jsxRuntime.jsx("img",{src:y.uri,alt:y.filename,style:s.thumbImage}),y.mimeType.startsWith("video/")?jsxRuntime.jsx("span",{"aria-hidden":"true",style:s.videoBadge,"data-testid":`televet-intake-media-video-${String(p)}`,children:bm}):null,jsxRuntime.jsx("button",{type:"button",onClick:()=>t(e.filter((c,v)=>v!==p)),"aria-label":`${m.removePhotoLabel}: ${y.filename}`,"data-testid":`televet-intake-media-remove-${String(p)}`,style:s.remove,children:jsxRuntime.jsx("span",{"aria-hidden":"true",style:s.removeGlyph,children:vm})})]},`${y.uri}-${String(p)}`)),a>0?jsxRuntime.jsx("li",{style:s.addItem,children:jsxRuntime.jsx("button",{type:"button",onClick:()=>{f();},disabled:d,"aria-busy":d||void 0,"data-testid":"televet-intake-add-media",style:{...s.dropzone,...d?s.dropzoneBusy:null},children:jsxRuntime.jsx("span",{style:s.dropzoneText,children:m.addPhotoCta})})}):null]}),i?jsxRuntime.jsx("p",{style:s.meta,"data-testid":"televet-intake-media-meta",children:i}):null]})}o(Yi,"TelevetIntakeMedia");var vm="\xD7",bm="\u25B6",Dr=92;function hm(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=o(d=>`${String(d)}px`,"rem");return {row:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"row",flexWrap:"wrap",gap:a(n.md),paddingTop:a(n.sm)},thumb:{position:"relative",width:Dr,height:Dr,borderRadius:a(r.md),backgroundColor:t.surfaceSubtle},thumbImage:{width:"100%",height:"100%",objectFit:"cover",borderRadius:a(r.md),display:"block"},videoBadge:{position:"absolute",left:6,bottom:6,paddingLeft:6,paddingRight:6,paddingTop:2,paddingBottom:2,borderRadius:a(r.sm),backgroundColor:t.shadow,color:t.text.onBrand,fontSize:a(l.nano),lineHeight:"1"},addItem:{display:"flex"},remove:{position:"absolute",top:-8,right:-8,width:xe-16,height:xe-16,borderRadius:"50%",borderStyle:"none",backgroundColor:t.text.metaCool,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:0},removeGlyph:{...k(e,"medium"),color:t.surface,fontSize:a(l.subtitle),lineHeight:"1"},dropzone:{width:Dr,height:Dr,borderRadius:a(r.md),borderWidth:1,borderStyle:"dashed",borderColor:t.brandBorder,backgroundColor:"transparent",display:"inline-flex",alignItems:"center",justifyContent:"center",paddingLeft:a(n.sm),paddingRight:a(n.sm),cursor:"pointer",boxSizing:"border-box"},dropzoneBusy:{opacity:.6,cursor:"progress"},meta:{...k(e,"regular"),margin:0,paddingTop:a(n.sm),color:t.text.metaCool,fontSize:a(l.caption),lineHeight:String(s.normal)},dropzoneText:{...k(e,"mono"),color:t.text.metaCool,fontSize:a(l.nano),lineHeight:String(s.normal),letterSpacing:"0.3px",textAlign:"center"}}}o(hm,"makeStyles");function Ji({slots:e,selectedDayKey:t,onSelectDay:n,groupLabel:r}){let i=M(),l=react.useMemo(()=>Em(i),[i]),s=react.useMemo(()=>zr(e),[e]),a=react.useRef(new Map),d=s[0],u=t??d?.key??null,f=react.useRef(null),y=react.useRef(false);react.useEffect(()=>{if(y.current)return;let c=f.current,v=u===null?void 0:a.current.get(u);if(!c||!v||(y.current=true,u===d?.key))return;let b=v.getBoundingClientRect().left-c.getBoundingClientRect().left;c.scrollLeft+=b-(c.clientWidth-v.clientWidth)/2;},[u,d]);let p=react.useCallback(c=>{let v=c.key==="ArrowRight"||c.key==="ArrowDown"?1:c.key==="ArrowLeft"||c.key==="ArrowUp"?-1:0,b=c.key==="Home"?0:c.key==="End"?s.length-1:null;if(v===0&&b===null)return;let C=s.findIndex(S=>S.key===u);if(C<0)return;let E=b??Math.min(s.length-1,Math.max(0,C+v)),h=s[E];h===void 0||h.key===u||(c.preventDefault(),n(h),a.current.get(h.key)?.focus());},[s,u,n]);return d===void 0?null:jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("p",{"aria-hidden":"true",style:l.month,"data-testid":"televet-day-strip-month",children:Ws(d.iso)}),jsxRuntime.jsx("div",{ref:f,role:"radiogroup","aria-label":r,onKeyDown:p,style:l.strip,"data-testid":"televet-day-strip",children:s.map(c=>{let v=c.key===u;return jsxRuntime.jsxs("button",{ref:b=>{b?a.current.set(c.key,b):a.current.delete(c.key);},type:"button",role:"radio","aria-checked":v,tabIndex:v?0:-1,onClick:()=>n(c),"aria-label":jn(c.iso),"data-testid":`televet-day-${c.key}`,style:{...l.day,...v?l.daySelected:null},children:[jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...l.dayWeekday,...v?l.dayTextSelected:null},children:c.weekday}),jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...l.dayNumber,...v?l.dayTextSelected:null},children:c.dayNumber})]},c.key)})})]})}o(Ji,"TelevetDayStrip");function zr(e){let t=new Map;for(let n of e){let r=zn(n.startsAt);if(t.has(r))continue;let i=new Date(n.startsAt);Number.isNaN(i.getTime())||t.set(r,Object.freeze({key:r,iso:n.startsAt,weekday:i.toLocaleDateString(void 0,{weekday:"short"}),dayNumber:String(i.getDate())}));}return Object.freeze([...t.values()])}o(zr,"televetDaysFromSlots");function Em(e){let{space:t,type:n}=e,{size:r,lineHeight:i}=n,l=Ie(e),s=o(a=>`${String(a)}px`,"rem");return {month:{margin:0,...k(e,"bold"),color:l.ink,fontSize:s(19),lineHeight:String(i.snug),paddingBottom:s(14)},strip:{display:"flex",flexDirection:"row",gap:s(t.sm),padding:2,margin:"0 -2px",overflowX:"auto",overscrollBehaviorX:"contain",scrollSnapType:"x proximity",scrollbarWidth:"none"},day:{width:64,height:72,flexShrink:0,scrollSnapAlign:"center",minHeight:xe,padding:0,borderRadius:s(14),borderStyle:"solid",borderWidth:1.5,borderColor:l.line,backgroundColor:l.surface,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:2,cursor:"pointer",boxSizing:"border-box",transition:e.motion.reducedMotion?"none":"border-color 180ms ease, background-color 180ms ease"},daySelected:{backgroundColor:l.pink,borderColor:l.ink},dayWeekday:{...k(e,"monoBold"),color:l.ink,fontSize:s(11),letterSpacing:"0.08em",textTransform:"uppercase",lineHeight:String(i.tight)},dayNumber:{...k(e,"medium"),color:l.ink,fontSize:s(r.heading),letterSpacing:"-0.02em",lineHeight:String(i.tight)},dayTextSelected:{color:l.onPink}}}o(Em,"makeStyles");function Yn({slots:e,busySlotId:t,onPick:n,selectedSlot:r=null,header:i,dayGroupLabel:l,timeGroupLabel:s,rowTestIdPrefix:a="televet-slot",testID:d="televet-slot-list",periodLabels:u,timeLegendTemplate:f}){let y=M(),p=react.useMemo(()=>_m(y),[y]),c=react.useMemo(()=>zr(e),[e]),v=`${react.useId()}-zone`,[b,C]=react.useState(null),E=r?zn(r.startsAt):null,h=Rm(c,[b,E])??c[0]?.key??null,S=react.useMemo(()=>h?e.filter(I=>zn(I.startsAt)===h):[],[e,h]),w=S[0],R=t!==null,x=w?Mn(w.startsAt):null,T=f&&w?H(f,{day:jn(w.startsAt)}):s;return jsxRuntime.jsxs("div",{style:p.root,"data-testid":d,children:[i,jsxRuntime.jsx(Ji,{slots:e,selectedDayKey:h,onSelectDay:I=>C(I.key),groupLabel:l}),x?jsxRuntime.jsx("p",{id:v,style:p.zone,"data-testid":"televet-slot-zone",children:x}):null,jsxRuntime.jsx("div",{style:p.gridScroll,children:Pm(S,u).map(I=>jsxRuntime.jsxs("div",{style:p.group,children:[I.label?jsxRuntime.jsx("p",{"aria-hidden":"true",style:p.period,"data-testid":`televet-slot-period-${I.key}`,children:I.label}):null,jsxRuntime.jsx("ul",{role:"list","aria-label":I.label?`${T}, ${I.label}`:T,...x?{"aria-describedby":v}:{},"aria-busy":R||void 0,style:p.grid,children:I.slots.map(_=>{let P=t===_.slotId,A=r?.slotId===_.slotId;return jsxRuntime.jsx("li",{style:p.gridItem,children:jsxRuntime.jsx("button",{type:"button",onClick:()=>n(_),disabled:R,"aria-busy":P||void 0,"aria-pressed":A||void 0,"aria-label":Dn(_.startsAt),"data-testid":`${a}-${_.slotId}`,style:{...p.chip,...A?p.chipPicked:null,...P?p.chipBusy:null,...R&&!P?p.chipDisabled:null},children:jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...p.chipLabel,...A?p.chipLabelPicked:null,...P?p.chipLabelBusy:null},children:dt(_.startsAt)})})},_.slotId)})})]},I.key))})]})}o(Yn,"TelevetSlotPicker");function Pm(e,t){return t?["morning","afternoon","evening"].map(r=>({key:r,label:t[r],slots:e.filter(i=>Ks(i.startsAt)===r)})).filter(r=>r.slots.length>0):[{key:"all",label:null,slots:e}]}o(Pm,"groups");function Rm(e,t){for(let n of t)if(n!==null&&e.some(r=>r.key===n))return n;return null}o(Rm,"firstOffered");function _m(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=Ie(e),d=o(f=>`${String(f)}px`,"rem"),u=e.motion.reducedMotion?"none":"border-color 180ms ease, background-color 180ms ease";return {root:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,gap:d(n.md)},gridScroll:{flex:"1 1 auto",minHeight:0,overflowY:"auto",overscrollBehavior:"contain",display:"flex",flexDirection:"column",gap:d(n.lg),paddingBottom:d(n.md)},group:{display:"flex",flexDirection:"column",gap:d(n.sm)},period:{margin:0,...k(e,"bold"),color:a.ink,fontSize:d(l.bodyTight),lineHeight:String(s.snug)},zone:{margin:0,...k(e,"mono"),color:a.muted,fontSize:d(l.caption),lineHeight:String(s.normal),letterSpacing:"0.04em"},grid:{listStyle:"none",margin:0,padding:0,display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(104px, 1fr))",gap:d(n.sm)},gridItem:{display:"flex",minWidth:0},chip:{width:"100%",minHeight:44,borderRadius:d(r.pill),borderStyle:"solid",borderWidth:1.5,borderColor:a.line,backgroundColor:a.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",paddingLeft:d(n.lg),paddingRight:d(n.lg),cursor:"pointer",boxSizing:"border-box",transition:u},chipPicked:{borderColor:a.ink,backgroundColor:a.pink},chipLabelPicked:{color:a.onPink},chipBusy:{backgroundColor:t.primary,borderColor:t.primary},chipDisabled:{opacity:.45,cursor:"not-allowed"},chipLabel:{...k(e,"monoBold"),color:a.ink,fontSize:d(l.bodyTight),fontVariantNumeric:"tabular-nums",lineHeight:String(s.tight)},chipLabelBusy:{color:t.onPrimary}}}o(_m,"makeStyles");function Pt({label:e,value:t,last:n=false,action:r,testID:i}){let l=M(),s=react.useMemo(()=>tl(l),[l]);return jsxRuntime.jsxs("div",{style:{...s.row,...n?s.rowLast:null},"data-testid":i,children:[jsxRuntime.jsxs("div",{style:s.rowText,children:[jsxRuntime.jsx("dt",{style:s.rowLabel,children:e}),jsxRuntime.jsx("dd",{style:s.rowValue,children:t})]}),r?jsxRuntime.jsx("div",{style:s.rowAction,children:r}):null]})}o(Pt,"TelevetSummaryRow");function Gn({label:e,checked:t,onToggle:n,testID:r}){let i=M(),l=react.useMemo(()=>tl(i),[i]);return jsxRuntime.jsxs("label",{style:l.consent,children:[jsxRuntime.jsx("input",{type:"checkbox",checked:t,onChange:s=>n(s.currentTarget.checked),"data-testid":r,style:qn}),jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...l.box,...t?l.boxChecked:null},children:t?jsxRuntime.jsx("span",{style:l.tick,children:wm}):null}),jsxRuntime.jsx("span",{style:l.consentLabel,children:e})]})}o(Gn,"TelevetConsentCheckbox");var wm="\u2713";function el({children:e,testID:t}){let n=M(),r=react.useMemo(()=>tl(n),[n]);return jsxRuntime.jsx("dl",{style:r.card,"data-testid":t,children:e})}o(el,"TelevetSummaryCard");function tl(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=o(d=>`${String(d)}px`,"rem");return {card:{margin:0,borderRadius:a(r.lg),borderStyle:"solid",borderWidth:1,borderColor:t.borderRingCream,backgroundColor:t.surface,paddingLeft:a(n.xl),paddingRight:a(n.xl),paddingTop:a(n.xs),paddingBottom:a(n.xs),boxSizing:"border-box"},row:{display:"flex",flexDirection:"row",alignItems:"center",gap:a(14),paddingTop:a(n.md),paddingBottom:a(n.md),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:t.borderRingCream},rowLast:{borderBottomWidth:0},rowText:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},rowAction:{flexShrink:0,marginLeft:"auto"},rowLabel:{margin:0,...k(e,"regular"),color:t.text.muted,fontSize:a(14),lineHeight:String(s.normal)},rowValue:{margin:0,marginInlineStart:0,minWidth:0,overflowWrap:"anywhere",whiteSpace:"pre-line",...k(e,"bold"),color:t.brandInk,fontSize:a(l.body),lineHeight:String(s.snug)},consent:{display:"flex",flexDirection:"row",alignItems:"flex-start",gap:a(n.md),minHeight:xe,padding:`${a(14)} ${a(n.lg)}`,borderRadius:a(r.sm),backgroundColor:t.surfaceSubtle,cursor:"pointer",boxSizing:"border-box"},box:{width:24,height:24,marginTop:1,flexShrink:0,borderRadius:a(r.xs),borderStyle:"solid",borderWidth:1.5,borderColor:t.brandInk,backgroundColor:t.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",transition:e.motion.reducedMotion?"none":"background-color 180ms ease"},boxChecked:{backgroundColor:t.primary,borderColor:t.primary},tick:{...k(e,"bold"),color:t.onPrimary,fontSize:a(l.caption),lineHeight:"1"},consentLabel:{flex:"1 1 auto",minWidth:0,overflowWrap:"anywhere",...k(e,"regular"),color:t.text.primary,fontSize:a(l.bodyTight),lineHeight:String(s.relaxed)}}}o(tl,"makeStyles");function nl({headingRef:e,when:t,onChangeWhen:n,stateName:r,about:i,lengthMinutes:l,clinician:s,petName:a,reason:d,shareRecords:u,onToggleShare:f,stateCode:y,stateAttested:p,onToggleStateAttest:c,cancellationTerms:v,termsAttested:b,onToggleTermsAttest:C,canConfirm:E,busy:h,failure:S,onConfirm:w,emergency:R,onAcknowledgeEmergency:x,onSeeOtherVets:T,mediaShortfall:I=Ct,primaryVet:_,onFindEmergencyVet:P}){let A=Y(),V=M(),j=react.useMemo(()=>Pe(V),[V]),[ee,G]=react.useState(false),K=m.emergency.lede,L=r??y??"",oe=a?H(m.whereAttestTemplate,{pet:a,state:L}):H(m.stateAttestTemplate,{state:L}),se=i??d,me=!!y&&!!v,be=(!y||p)&&(!v||b);return jsxRuntime.jsxs(it,{headingRef:e,heading:m.reviewHeading,testID:"televet-booking-review",scrollTestID:"televet-booking-review-scroll",footer:R?null:jsxRuntime.jsx(B,{label:h?m.confirmBusy:m.confirmCta,kind:"primary",size:"lg",loading:h,disabled:!E||h||!me&&!be,onPress:()=>{if(!be){G(true);return}w();},testID:"televet-review-confirm"}),children:[jsxRuntime.jsxs(el,{testID:"televet-review-summary",children:[a?jsxRuntime.jsx(Pt,{label:m.summaryPet,value:a,testID:"televet-review-row-pet"}):null,s?jsxRuntime.jsx(Pt,{label:m.summaryVet,value:s,testID:"televet-review-row-vet"}):null,jsxRuntime.jsx(Pt,{label:m.summaryWhen,value:t,testID:"televet-review-row-when",action:n?jsxRuntime.jsx(B,{label:m.changeCta,kind:"quiet",fullWidth:false,onPress:n,testID:"televet-review-change-when"}):null}),jsxRuntime.jsx(Pt,{label:m.summaryLength,value:H(m.summaryLengthTemplate,{n:String(l)}),testID:"televet-review-row-length"}),L?jsxRuntime.jsx(Pt,{label:m.summaryWhere,value:L,testID:"televet-review-row-where"}):null,se?jsxRuntime.jsx(Pt,{label:m.summaryReason,value:se,last:true,testID:"televet-review-row-reason"}):null]}),jsxRuntime.jsxs("div",{style:A.list,children:[y?jsxRuntime.jsx(Gn,{label:oe,checked:p,onToggle:$e=>{G(false),c($e);},testID:"televet-review-state-attest"}):null,v?jsxRuntime.jsx(Gn,{label:v,checked:b,onToggle:$e=>{G(false),C($e);},testID:"televet-review-terms-attest"}):null,jsxRuntime.jsx(Gn,{label:m.shareRecordsOff,checked:u,onToggle:f,testID:"televet-review-share-records"})]}),ee&&!be&&me?jsxRuntime.jsx("p",{role:"alert",style:j.alertLine,"data-testid":"televet-review-attest-both",children:m.attestBoth}):null,jsxRuntime.jsx($n,{shortfall:I,testIDPrefix:"televet-review"}),R?jsxRuntime.jsxs("div",{role:"alert",style:j.emergencyBanner,"data-testid":"televet-review-emergency",children:[jsxRuntime.jsx(jr,{style:j.emergencyTitle,children:m.emergency.bannerTitle}),jsxRuntime.jsx("p",{style:j.emergencyLede,children:K}),R.length>0?jsxRuntime.jsx("p",{style:j.emergencyLede,"data-testid":"televet-review-emergency-categories",children:R.join(", ")}):null,jsxRuntime.jsx(Vt,{petName:a,primaryVet:_,onFindEmergencyVet:P,testIDPrefix:"televet-review-emergency"}),jsxRuntime.jsx(B,{label:m.emergency.keepBookingCta,kind:"secondary",loading:h,disabled:h,onPress:x,testID:"televet-review-emergency-ack"})]}):null,S==="failed"?jsxRuntime.jsx(ae,{message:m.confirmFailed}):null,S==="clinician_unavailable"?jsxRuntime.jsxs("div",{style:A.list,"data-testid":"televet-review-clinician-unavailable",children:[jsxRuntime.jsx(ae,{message:m.confirmFailed}),jsxRuntime.jsx(B,{label:m.seeOtherVetsCta,kind:"secondary",onPress:T,testID:"televet-review-see-other-vets"})]}):null,S==="rate_limited"?jsxRuntime.jsx(ae,{message:m.confirmFailed,testID:"televet-review-rate-limited"}):null,S==="not_entitled"?jsxRuntime.jsx(ae,{message:m.bookingPausedTitle,testID:"televet-review-not-entitled"}):null]})}o(nl,"ReviewStep");function Oe(e,t){return t?e.find(r=>r.petRef===t||r.petId===t)?.name??null:null}o(Oe,"nameOf");function Nm({headingRef:e,style:t,id:n,children:r}){let i=ie(ge());return jsxRuntime.jsx(i,{ref:e,tabIndex:-1,style:t,...n===void 0?{}:{id:n},children:r})}o(Nm,"StepHeading");function jr({style:e,children:t}){let n=ie(ut(ge()));return jsxRuntime.jsx(n,{style:e,children:t})}o(jr,"SubHeading");var rl=react.createContext(null);function it({headingRef:e,heading:t,headingId:n,lead:r,leadId:i,testID:l,scrollTestID:s,footerStart:a,footer:d,children:u}){let f=Y(),y=M(),p=react.useMemo(()=>Pe(y),[y]),c=react.useContext(rl);return jsxRuntime.jsxs("div",{style:f.scrollRoot,"data-testid":l,children:[jsxRuntime.jsx("div",{style:f.scrollBody,...s?{"data-testid":s}:{},children:jsxRuntime.jsxs("div",{style:p.stepBody,children:[jsxRuntime.jsxs("div",{style:p.head,children:[jsxRuntime.jsx(Nm,{headingRef:e,style:f.stepTitle,...n?{id:n}:{},children:t}),r?jsxRuntime.jsx("p",{style:f.stepHelp,...i?{id:i}:{},children:r}):null]}),u]})}),jsxRuntime.jsxs("div",{style:p.footer,children:[c?.canGoBack?jsxRuntime.jsx(B,{label:m.backLabel,kind:"quiet",fullWidth:false,onPress:c.onBack,testID:"televet-booking-back"}):null,a,d?jsxRuntime.jsx("div",{style:p.footerMain,children:d}):null]})]})}o(it,"TelevetStepFrame");function Rt({title:e,meta:t,selected:n,onPress:r,testID:i,leading:l}){let s=M(),a=react.useMemo(()=>Pe(s),[s]),d=Br(false,.98);return jsxRuntime.jsxs("button",{type:"button",role:"radio","aria-checked":n,onClick:r,...d.handlers,"data-testid":i,style:{...a.option,...n?a.optionSelected:null,...d.style},children:[l??jsxRuntime.jsx("span",{"aria-hidden":"true",style:a.optionDot,children:jsxRuntime.jsx("span",{style:{...a.optionDotFill,...n?a.optionDotFillOn:null}})}),jsxRuntime.jsxs("span",{style:a.optionText,children:[jsxRuntime.jsx("span",{style:a.optionTitle,children:e}),t?jsxRuntime.jsx("span",{style:a.optionMeta,children:t}):null]})]})}o(Rt,"TelevetOptionCard");function Hr({headingRef:e,pets:t,isPending:n,isError:r,onRetry:i,selectedId:l,onSelect:s,onNext:a,onAddPet:d}){let u=Y(),f=M(),y=react.useMemo(()=>Pe(f),[f]);return n?jsxRuntime.jsx("div",{role:"progressbar","aria-label":m.loading.pets,"aria-busy":"true",style:u.list,"data-testid":"televet-pets-loading",children:[0,1].map(p=>jsxRuntime.jsx(ve,{height:96},p))}):r?jsxRuntime.jsx("div",{"data-testid":"televet-pets-error",children:jsxRuntime.jsx(le,{title:m.chrome.loadFailedTitle,actionLabel:m.chrome.retryCta,onAction:i})}):t.length===0?jsxRuntime.jsx("div",{"data-testid":"televet-pets-empty",children:jsxRuntime.jsx(le,{title:m.chrome.noPetsTitle,actionLabel:m.addPetCta,onAction:d})}):jsxRuntime.jsx(it,{headingRef:e,heading:m.petSelectTitle,testID:"televet-booking-pets",footerStart:d?jsxRuntime.jsx(B,{label:m.addAnotherPetCta,kind:"quiet",fullWidth:false,onPress:d,testID:"televet-pet-add"}):null,footer:a?jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",disabled:!l,onPress:a,testID:"televet-pets-next"}):null,children:jsxRuntime.jsx("div",{role:"radiogroup","aria-label":m.petSelectTitle,style:y.options,"data-testid":"televet-pets",children:t.map(p=>jsxRuntime.jsx(Rt,{title:p.name??"",meta:jd(p),selected:l===p.petRef,onPress:()=>s(p.petRef),testID:`televet-pet-${p.petRef}`,leading:jsxRuntime.jsx("span",{"aria-hidden":"true",style:y.optionAvatar,children:Kd(p.name??"")})},p.petRef))})})}o(Hr,"PetStep");var Fm="\u25CB";function Kd(e){let t=e.trim();return t.length===0?Fm:t.slice(0,1).toUpperCase()}o(Kd,"initialOf");function qd({headingRef:e,clinicians:t,isPending:n,isError:r,selectedId:i,stateCode:l,stateName:s,onSelect:a,onRetry:d}){let u=Y(),f=M(),y=react.useMemo(()=>Pe(f),[f]);if(n)return jsxRuntime.jsx("div",{role:"progressbar","aria-label":m.loading.clinicians,"aria-busy":"true",style:u.list,"data-testid":"televet-clinicians-loading",children:jsxRuntime.jsx(ve,{height:240})});if(r)return jsxRuntime.jsx("div",{"data-testid":"televet-clinicians-error",children:jsxRuntime.jsx(le,{title:m.chrome.loadFailedTitle,actionLabel:m.chrome.retryCta,onAction:d})});if(t.length===0)return jsxRuntime.jsx("div",{"data-testid":"televet-clinicians-empty",children:jsxRuntime.jsx(le,{title:m.noCliniciansTitle,message:m.noCliniciansBody,actionLabel:m.noCliniciansRetryCta,onAction:d})});let p=t.find(b=>b.clinicianId===i)??t[0];if(p===void 0)return null;let c=l?.trim().toUpperCase()??"",v=c.length>0&&p.licensedStates.some(b=>b.state.trim().toUpperCase()===c);return jsxRuntime.jsx(it,{headingRef:e,heading:m.yourVetTitle,testID:"televet-clinicians",footer:jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",onPress:()=>a(p.clinicianId),testID:`televet-clinician-${p.clinicianId}`}),children:jsxRuntime.jsxs("div",{style:y.meet,children:[jsxRuntime.jsx("span",{"aria-hidden":"true",style:y.vetAvatar,children:Kd(p.displayName)}),jsxRuntime.jsx("p",{style:y.vetName,children:p.credentials?`${p.displayName}, ${p.credentials}`:p.displayName}),v&&s?jsxRuntime.jsx("div",{style:y.pills,children:jsxRuntime.jsx("span",{style:y.pill,"data-testid":"televet-vet-licensed",children:H(m.licensedPillTemplate,{state:s})})}):null,p.rating!==null&&p.ratingCount!==null?jsxRuntime.jsx("p",{style:y.vetRating,"data-testid":"televet-vet-rating",children:`\u2605 ${String(p.rating)} \xB7 ${String(p.ratingCount)} ${m.reviewsLabel}`}):null,p.bio?jsxRuntime.jsx("p",{style:y.vetBio,"data-testid":"televet-vet-bio",children:p.bio}):null]})})}o(qd,"ClinicianStep");function Yd({headingRef:e,slots:t,enabled:n,isPending:r,isError:i,busySlotId:l,failure:s,selectedSlot:a,nextOpening:d,onPick:u,onRetry:f,onSeeOtherVets:y}){let p=Y();return n?r?jsxRuntime.jsx("div",{role:"progressbar","aria-label":m.loading.slots,"aria-busy":"true",style:p.list,"data-testid":"televet-slots-loading",children:[0,1,2].map(c=>jsxRuntime.jsx(ve,{height:48},c))}):i?jsxRuntime.jsx(le,{title:m.slotsErrorTitle,actionLabel:m.retryCta,onAction:f,testID:"televet-slots-error"}):t.length===0?jsxRuntime.jsx("div",{"data-testid":"televet-slots-empty",children:jsxRuntime.jsx(le,{title:m.noSlotsTitle,message:d?H(m.nextOpeningTemplate,{when:Dn(d.startsAt)}):void 0,actionLabel:d?m.seeOtherVetsCta:void 0,onAction:d?y:void 0})}):jsxRuntime.jsxs(it,{headingRef:e,heading:m.timeHeading,testID:"televet-slots",children:[s==="expired"?jsxRuntime.jsx(ae,{message:m.holdExpired}):null,s==="taken"?jsxRuntime.jsx(ae,{message:m.slotTaken}):null,s==="failed"||s==="rate_limited"?jsxRuntime.jsx(ae,{message:m.confirmFailed,testID:"televet-slots-hold-failed"}):null,jsxRuntime.jsx(Yn,{slots:t,busySlotId:l,onPick:u,selectedSlot:a,dayGroupLabel:m.dayLegend,timeGroupLabel:m.timeHeading,periodLabels:{morning:m.timeMorning,afternoon:m.timeAfternoon,evening:m.timeEvening},timeLegendTemplate:m.timeLegendTemplate})]}):jsxRuntime.jsx("div",{"data-testid":"televet-slots-unavailable",children:jsxRuntime.jsx(le,{title:m.bookingPausedTitle})})}o(Yd,"SlotStep");function Gd({headingRef:e,petName:t,chips:n,selected:r,onToggle:i,onNext:l}){let s=M(),a=react.useMemo(()=>Pe(s),[s]),[d,u]=react.useState(false),f=H(m.issuesTitleTemplate,{pet:t??m.petFallback});return jsxRuntime.jsxs(it,{headingRef:e,heading:f,lead:m.issuesHint,testID:"televet-booking-issues",footer:jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",onPress:()=>{if(r.length===0){u(true);return}l();},testID:"televet-issues-next"}),children:[jsxRuntime.jsx("div",{role:"group","aria-label":m.issuesFormLabel,style:a.chipRow,children:n.map(y=>{let p=r.includes(y.id);return jsxRuntime.jsx(Mm,{label:y.label,on:p,onPress:()=>{u(false),i(y.id);},testID:`televet-issue-${y.id}`},y.id)})}),d&&r.length===0?jsxRuntime.jsx("p",{role:"alert",style:a.alertLine,"data-testid":"televet-issues-refused",children:m.issuesPickOne}):null]})}o(Gd,"IssuesStep");function Mm({label:e,on:t,onPress:n,testID:r}){let i=M(),l=react.useMemo(()=>Pe(i),[i]),s=Br();return jsxRuntime.jsxs("button",{type:"button","aria-pressed":t,onClick:n,...s.handlers,style:{...l.chip,...t?l.chipOn:null,...s.style},"data-testid":r,children:[t?jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.4",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M20 6 9 17l-5-5"})}):null,e]})}o(Mm,"IssueChip");function Jd({headingRef:e,value:t,composed:n,vetName:r,onChange:i,onNext:l,media:s,onChangeMedia:a,onPickMedia:d,mediaLive:u=false,checking:f=false}){let y=M(),p=react.useMemo(()=>Pe(y),[y]),c=react.useId(),v=`${c}-reason-field`,b=`${c}-reason-help`,[C,E]=react.useState(false),h=(n??t).trim(),S=h.length>vt,w=h.length>0&&!S,R=r?H(m.describeHeadingTemplate,{vet:r}):m.describeHeading;return jsxRuntime.jsxs(it,{headingRef:e,heading:R,lead:m.describeHelpLong,leadId:b,testID:"televet-booking-reason",scrollTestID:"televet-booking-reason-scroll",footer:jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",disabled:!w,loading:f,onPress:l,testID:"televet-reason-next"}),children:[jsxRuntime.jsxs("div",{style:p.field,children:[jsxRuntime.jsx("label",{htmlFor:v,style:p.fieldLabel,children:m.describeFieldLabel}),jsxRuntime.jsx("textarea",{id:v,value:t,onChange:x=>i(x.currentTarget.value),onFocus:()=>E(true),onBlur:()=>E(false),"aria-describedby":b,"aria-invalid":S||void 0,placeholder:m.reasonPlaceholder,style:{...p.reasonInput,...C?p.reasonInputFocus:null},"data-testid":"televet-reason-input"})]}),S?jsxRuntime.jsx(ae,{message:m.reasonTooLong}):null,jsxRuntime.jsx(Yi,{media:s,onChange:a,listLabel:m.addPhotoCta,meta:u?m.addPhotoMeta:null,...d?{onPickMedia:d}:{}})]})}o(Jd,"ReasonStep");function Qd({headingRef:e,petId:t,roster:n,onAddPet:r,onPickPet:i}){return t===null?jsxRuntime.jsx(Hr,{headingRef:e,pets:n.pets,isPending:n.loading,isError:n.error!==null,onRetry:()=>{n.refresh();},onAddPet:r,selectedId:null,onSelect:i}):jsxRuntime.jsx(Dm,{petRef:t})}o(Qd,"TelevetVisitSimulator");function Dm({petRef:e}){let t=Y(),n=ud(e);return jsxRuntime.jsx("div",{style:{...t.stepFill,...t.scrollBody},"data-testid":"televet-simulator",children:jsxRuntime.jsxs("div",{style:t.list,children:[jsxRuntime.jsx(le,{title:De.title}),jsxRuntime.jsx(B,{label:De.create,onPress:n.create,kind:"secondary",disabled:n.busy,testID:"televet-simulator-create"}),n.visitLine!==null?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("p",{style:t.stateMessage,"data-testid":"televet-simulator-visit",children:n.visitLine}),cd.map(r=>jsxRuntime.jsx(B,{label:De.advance[r],onPress:()=>n.advance(r),kind:"secondary",disabled:n.busy,testID:`televet-simulator-advance-${r}`},r)),jsxRuntime.jsx("p",{style:t.stateMessage,children:De.eventsNote}),pd.map(r=>jsxRuntime.jsx(B,{label:De.events[r],onPress:()=>n.raise(r),kind:"secondary",disabled:n.busy,testID:`televet-simulator-event-${r}`},r))]}):null,n.line===null?null:n.line.tone==="danger"?jsxRuntime.jsx(ae,{message:n.line.text,testID:"televet-simulator-error"}):jsxRuntime.jsx("p",{role:"status",style:t.stateMessage,"data-testid":"televet-simulator-log",children:n.line.text})]})})}o(Dm,"SimulatorScreen");function eu({headingRef:e,petName:t,where:n,onNext:r}){let i=M(),l=react.useMemo(()=>Pe(i),[i]),s=t??m.petFallback,a=`${react.useId()}-where-state`,d=n.otherSelected,u=jsxRuntime.jsxs("div",{style:l.field,children:[jsxRuntime.jsx("label",{htmlFor:a,style:l.fieldLabel,children:m.whereWhichState}),jsxRuntime.jsxs("select",{id:a,value:n.otherPlace?.code??"",onChange:f=>{f.currentTarget.value&&n.pickState(f.currentTarget.value);},style:l.select,"data-testid":"televet-where-select",children:[jsxRuntime.jsx("option",{value:"",disabled:true,children:m.whereWhichState}),Ri.filter(f=>f.code!==n.hostPlace?.code).map(f=>jsxRuntime.jsx("option",{value:f.code,children:f.name},f.code))]}),n.hostPlace===null&&n.otherPlace?.meta?jsxRuntime.jsx("p",{style:l.note,"data-testid":"televet-where-other-meta",children:n.otherPlace.meta}):null]});return jsxRuntime.jsxs(it,{headingRef:e,heading:H(m.whereTitleTemplate,{pet:s}),lead:H(m.whereLeadTemplate,{pronoun:m.wherePronounFallback}),testID:"televet-booking-where",footer:jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",disabled:!n.canContinue,onPress:r,testID:"televet-where-next"}),children:[n.hostPlace?jsxRuntime.jsxs("div",{role:"radiogroup","aria-label":H(m.whereFormLabelTemplate,{pet:s}),style:{...l.options,...l.optionsStack},children:[jsxRuntime.jsx(Rt,{title:n.hostPlace.name,meta:n.hostPlace.meta,selected:!d,onPress:n.pickHost,testID:"televet-where-host"}),jsxRuntime.jsx(Rt,{title:m.whereAnotherState,meta:n.otherPlace?.meta??null,selected:d,onPress:n.pickOther,testID:"televet-where-other"})]}):null,d?u:null,n.licensedLine?jsxRuntime.jsx("p",{style:l.callout,"data-testid":"televet-where-licensed",children:n.licensedLine}):null]})}o(eu,"WhereStep");function tu({headingRef:e,petName:t,answer:n,onAnswer:r,onNext:i,onHandled:l,primaryVet:s,onFindEmergencyVet:a}){let d=M(),u=react.useMemo(()=>Pe(d),[d]),f=m.emergencyCheck,y=m.emergency.lede;return jsxRuntime.jsxs(it,{headingRef:e,heading:H(f.titleTemplate,{pet:t??m.petFallback}),lead:f.lead,testID:"televet-booking-emergency",footer:jsxRuntime.jsx(B,{label:m.continueCta,kind:"primary",size:"lg",disabled:n!=="none",onPress:i,testID:"televet-emergency-next"}),children:[jsxRuntime.jsx("ul",{style:u.signs,"data-testid":"televet-emergency-signs",children:f.signs.map(p=>jsxRuntime.jsx("li",{children:p},p))}),jsxRuntime.jsxs("div",{role:"radiogroup","aria-label":f.legend,style:u.options,children:[jsxRuntime.jsx(Rt,{title:f.noneCta,selected:n==="none",onPress:()=>r("none"),testID:"televet-emergency-none"}),jsxRuntime.jsx(Rt,{title:f.someCta,selected:n==="some",onPress:()=>r("some"),testID:"televet-emergency-some"})]}),n==="some"?jsxRuntime.jsxs("div",{role:"alert",style:u.emergencyBanner,"data-testid":"televet-emergency-panel",children:[jsxRuntime.jsx(jr,{style:u.emergencyTitle,children:m.emergency.bannerTitle}),jsxRuntime.jsx("p",{style:u.emergencyLede,children:y}),jsxRuntime.jsx(Vt,{petName:t,primaryVet:s,onFindEmergencyVet:a,testIDPrefix:"televet-emergency"}),jsxRuntime.jsx("button",{type:"button",onClick:l,style:u.linkButton,"data-testid":"televet-emergency-handled",children:m.emergency.keepBookingCta})]}):null]})}o(tu,"EmergencyStep");function il(e){let{petRef:t,usState:n,controller:r,onBooked:i,onExit:l,onAddPet:s,onPickMedia:a,onAddToCalendar:d,onConfirmDiscard:u,onRequestLocation:f,locationStatus:y="unknown",onTriageReason:p,onStateInterest:c,primaryVet:v,onFindEmergencyVet:b,canJoinInApp:C=false,renderUnavailable:E,headingLevel:h,style:S,testID:w}=Kt(e,["onBooked","onExit","onAddPet","onRequestLocation","onFindEmergencyVet"]),R=Cd(h??rn),x=ut(R),T=Y(),I=M(),_=react.useMemo(()=>Pe(I),[I]),P=ke(r),A=St(),V=A.pets,j=V.length,ee=react.useMemo(()=>({ownedPetCount:j,withIssues:true}),[j]),[G,K]=react.useReducer((ce,zu)=>ri(ce,zu,ee),void 0,()=>ti({ownedPetCount:0,withIssues:true},{petId:t??null,state:n??null})),L=react.useCallback(ce=>K(ce),[]),[oe,se]=react.useState(""),[me,be]=react.useState(null),[$e,X]=react.useState(null),[Be,ct]=react.useState(false),[Ut,rr]=react.useState(false),[gn,$]=react.useState([]),Ke=react.useMemo(()=>td(),[]),Ee=Zs({media:gn,controller:P,transport:Ke}),[_e,At]=react.useState(null),[Pu,Ru]=react.useState(null),{draft:z}=G,de=ii(G),wl=react.useRef(z.state);wl.current!==z.state&&(wl.current=z.state,Be&&ct(false),Ut&&rr(false));let vn=Rn(z.state,P),Il=_n(P),$t=Io(P),Le=Ao(z.state,P),pt=wn(z.clinicianId,P),Gr=pt.refetch,_u=Oo(P).data??null,Jr=In(P),Al=Lo(P),wu=react.useMemo(()=>fd(P),[P]),qe=xi(p??wu),Iu=Pi(z.state,c??null),or=n??null,Ol=Iu.actionFor("no_licensed_vet"),Xr=Oe(V,z.petId),ft=Sd({reasonText:oe,state:z.state,hostState:or,clinicianId:z.clinicianId,clinicians:Le.data,policy:vn,petName:Xr,controller:P,dispatch:L}),{composedReason:mt,where:Qr,matchedClinician:Au}=ft;react.useEffect(()=>{or&&!z.state&&!ft.whereTouched.current&&L({type:"patch",patch:{state:or}});},[or,z.state,L]),react.useEffect(()=>{t&&!z.petId&&L({type:"patch",patch:{petId:t}});},[t,z.petId,L]);let Zr=V.length===1?V[0]?.petRef??null:null;react.useEffect(()=>{Zr&&!z.petId&&L({type:"patch",patch:{petId:Zr}});},[Zr,z.petId,L]);let Bl=react.useRef(de);Bl.current=de;let Ll=react.useRef(z.petId);Ll.current=z.petId;let Nl=react.useRef(0);react.useEffect(()=>{if(j===Nl.current)return;Nl.current=j;let ce=j>1&&!Ll.current;L({type:"goTo",step:ce?"pet":Bl.current});},[j,L]);let eo=Le.data?.[0]?.clinicianId??null;react.useEffect(()=>{eo&&!z.clinicianId&&L({type:"patch",patch:{clinicianId:eo}});},[eo,z.clinicianId,L]);let Qe=react.useRef(null),Fl=react.useRef(false);react.useEffect(()=>{if(!Fl.current){Fl.current=true;return}Qe.current?.focus();},[de]);let Ou=Gs({draft:z,hold:Jr,dispatch:L,setFailure:be,refetchSlots:Gr}),{submitBooking:Bu,confirm:Lu}=Ys({draft:z,reasonText:mt,book:Al,stateAttested:Be,termsAttested:Ut,cancellationPolicy:Il.data??null,triage:qe,goTo:react.useCallback(ce=>L({type:"goTo",step:ce}),[L]),releaseSlot:react.useCallback(()=>{Ru(z.slot),L({type:"patch",patch:js}),Gr();},[z.slot,L,Gr]),setFailure:be,setEmergency:X,setBookedConsult:At,...i?{onBooked:i}:{},media:Ee}),Nu=vn.enabled&&vn.data!==null&&!vn.data.wellnessAvailable&&de!=="pet"&&de!=="where",Fu=$t.enabled&&$t.data?.active===false||me==="not_entitled",{simulate:Ml,fundingRefused:Dl}=dd($t,Fu),Mu=$t.enabled&&$t.data!==null,Du=pi(Mu),Vu=mt.trim().length>0||!!z.slot,Vl={surfaceUnavailable:P===null||me==="unavailable"||An($t)||An(vn),notEntitled:Dl,policyBlocked:Nu,triageOpen:qe.open,step:de},zl=_d(Vl),jl={noState:!z.state,isPending:Le.enabled&&Le.isPending,isError:Le.isError,isEmpty:(Le.data?.length??0)===0,notEntitled:Dl},Hl=Id(jl);if(!at())return jsxRuntime.jsx("div",{style:{...T.screen,...S},"data-testid":w??"televet-booking",children:jsxRuntime.jsx("div",{style:T.stepFill,"data-testid":"televet-booking-copy-unapproved",children:E?E():null})});let Wl=!Ml&&(qe.open||ni(G,ee))&&de!=="booked",Ul=o(()=>{if(qe.open){qe.close();return}qe.cancel(),L({type:"back"});},"goBack");return jsxRuntime.jsx(wi.Provider,{value:x,children:jsxRuntime.jsx(rl.Provider,{value:{canGoBack:Wl,onBack:Ul},children:jsxRuntime.jsxs("div",{style:{...T.screen,...S},"data-testid":w??"televet-booking",children:[jsxRuntime.jsx(Ki,{step:de,furthestIndex:G.furthestIndex,triageOpen:qe.open,stepContext:ee,canGoBack:Wl,showBack:zl||de==="clinician"&&Hl,isDirty:Vu,onBack:Ul,onClose:()=>l?.(),headingLevel:R,...u?{onConfirmDiscard:u}:{}}),Ml?jsxRuntime.jsx(Qd,{headingRef:Qe,petId:z.petId,roster:A,onAddPet:s,onPickPet:ce=>L({type:"patch",patch:{petId:ce}})}):zl?jsxRuntime.jsx(wd,{state:Vl,petName:Oe(V,z.petId),...v?{primaryVet:v}:{},onFindEmergencyVet:b,stateInterest:Ol,...c?{onCheckAvailability:o(()=>L({type:"goTo",step:"clinician"}),"onCheckAvailability")}:{},onAcknowledgeEmergency:()=>{qe.acknowledge(mt),L({type:"next"});},...E?{renderUnavailable:E}:{}}):de==="time"?jsxRuntime.jsx(Yd,{headingRef:Qe,slots:pt.data??[],enabled:pt.enabled,isPending:pt.enabled&&pt.isPending&&pt.data===null,isError:pt.isError,busySlotId:Jr.isPending?Jr.variables:null,failure:me,selectedSlot:z.slot??Pu,nextOpening:_u,onPick:Ou,onRetry:()=>pt.refetch(),onSeeOtherVets:()=>L({type:"goTo",step:"clinician"})}):de==="review"?jsxRuntime.jsx(nl,{headingRef:Qe,when:z.slot?en(z.slot.startsAt):"",onChangeWhen:()=>L({type:"goTo",step:"time"}),stateName:Qr.stateName,about:ft.aboutLine,lengthMinutes:(z.slot?vo(z.slot):null)??Mt,petName:Oe(V,z.petId),reason:mt.trim(),clinician:Le.data?.find(ce=>ce.clinicianId===z.clinicianId)?.displayName??null,shareRecords:z.shareHealthRecords,stateCode:z.state,stateAttested:Be,onToggleStateAttest:ct,cancellationTerms:Il.data?.summary??null,termsAttested:Ut,onToggleTermsAttest:rr,onToggleShare:ce=>L({type:"patch",patch:{shareHealthRecords:ce}}),canConfirm:Fn(z,mt),busy:Al.isPending||Ee.sending,failure:me,onConfirm:Lu,emergency:$e,onAcknowledgeEmergency:()=>Bu(true),mediaShortfall:Ee.shortfall,primaryVet:v,onFindEmergencyVet:b,onSeeOtherVets:()=>L({type:"goTo",step:"clinician"})}):de==="booked"?jsxRuntime.jsx("div",{style:T.stepFill,"data-testid":"televet-booking-booked",children:_e?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(zi,{consult:_e,petName:Oe(V,_e.petId)??Oe(V,z.petId),onDone:()=>l?.(),canJoinInApp:C,lengthMinutes:(z.slot?vo(z.slot):null)??Mt,sharedRecords:z.shareHealthRecords,sentPhoto:Ee.sentOnePhoto(_e),...d?{onAddToCalendar:d}:{}}),jsxRuntime.jsx($n,{shortfall:Ee.bookedShortfall(_e),testIDPrefix:"televet-booked"})]}):null}):de==="clinician"&&Hl?jsxRuntime.jsx(Ad,{state:jl,cause:Du,locationStatus:y,...f?{onRequestLocation:f}:{},onRetry:()=>Le.refetch(),stateInterest:Ol,...E?{renderUnavailable:E}:{}}):de==="clinician"?jsxRuntime.jsx(qd,{headingRef:Qe,clinicians:Le.data??[],isPending:Le.enabled&&Le.isPending,isError:Le.isError,selectedId:z.clinicianId,stateCode:z.state,stateName:Qr.stateName,onRetry:()=>Le.refetch(),onSelect:ce=>{L({type:"patch",patch:{clinicianId:ce}}),L({type:"next"});}}):de==="issues"?jsxRuntime.jsx(Gd,{headingRef:Qe,petName:Oe(V,z.petId),chips:ft.issueChips,selected:ft.concernIds,onToggle:ft.toggleConcern,onNext:()=>L({type:"next"})}):de==="reason"?jsxRuntime.jsx(Jd,{headingRef:Qe,value:oe,composed:mt,vetName:Au?.displayName??null,onChange:se,media:gn,onChangeMedia:$,mediaLive:Ee.live,...a?{onPickMedia:a}:{},checking:qe.checking,onNext:()=>{qe.check(mt).then(ce=>{ce&&L({type:"next"});});}}):de==="pet"?jsxRuntime.jsx(Hr,{headingRef:Qe,pets:V,isPending:A.loading,isError:A.error!==null,onRetry:()=>{A.refresh();},onAddPet:s,selectedId:z.petId,onSelect:ce=>L({type:"patch",patch:{petId:ce}}),onNext:()=>L({type:"next"})}):de==="where"?jsxRuntime.jsx(eu,{headingRef:Qe,petName:Xr,where:Qr,onNext:()=>L({type:"next"})}):de==="emergency"?jsxRuntime.jsx(tu,{headingRef:Qe,petName:Xr,answer:ft.emergencyAnswer,onAnswer:ft.setEmergencyAnswer,onNext:()=>L({type:"next"}),onHandled:()=>{qe.acknowledge(mt),L({type:"next"});},...v?{primaryVet:v}:{},onFindEmergencyVet:b}):jsxRuntime.jsx("div",{style:_.marker,"data-testid":`televet-booking-step-${de}`})]})})})}o(il,"EverfurTelevetBooking");var ru=Symbol.for("@everfur/sdk/televet");function ou(){let e=globalThis,t=e[ru];if(t!==void 0)return t;let n={presenter:null,snapshot:Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:new Set,dailyRegistered:false};return e[ru]=n,n}o(ou,"televetGlobal");function Ur(){return ou().dailyRegistered}o(Ur,"isEverfurDailyRegistered");function ll(){let e=ou(),t=e.noticeReceipts;if(t!==void 0)return t;let n=new Map;return e.noticeReceipts=n,n}o(ll,"noticeReceipts");function iu(e){let t=ll(),n=t.get(e);n!==void 0?n.holders+=1:t.set(e,{holders:1,joined:false});}o(iu,"markRecordingNoticeAccepted");function lu(e){let t=ll(),n=t.get(e);n!==void 0&&(n.holders-=1,n.holders<=0&&t.delete(e));}o(lu,"clearRecordingNoticeAccepted");function au(e){return ll().get(e)?.joined===true}o(au,"isTelevetCallJoined");var lt=Object.freeze({muteCta:"Mute",unmuteCta:"Unmute",cameraOffCta:"Camera off",cameraOnCta:"Camera on",leaveCta:"Leave",switchCameraCta:"Switch camera",speakerOffCta:"Speaker off",speakerOnCta:"Speaker on",lobbyTitleNoName:"Your vet is joining",lobbySubtitle:"Usually under a minute",lobbyPrepLabel:"WHILE YOU WAIT",lobbyPrepNoPet:"Have your pet nearby and somewhere well lit.",lobbyTitle:o(e=>{let t=e?.trim()??"";return t.length>0?`${t} is joining`:lt.lobbyTitleNoName},"lobbyTitle"),lobbyPrep:o(e=>{let t=e?.trim()??"";return t.length>0?`Have ${t} nearby and somewhere well lit.`:lt.lobbyPrepNoPet},"lobbyPrep"),lobbyDuration:o(e=>`${e} minutes`,"lobbyDuration"),waitingRoomLabel:"Waiting room",leaveWaitingRoomLabel:"Leave the waiting room",lobbyTipsTitle:o(e=>{let t=e?.trim()??"";return t.length>0?`Before ${t} joins`:lt.lobbyPrepLabel},"lobbyTipsTitle"),lobbyTipSpot:"Find a bright, quiet spot.",joinFailedReason:"That did not open. Try again.",recordingNoticeTitle:"This consultation is recorded.",recordingNoticeCta:"Continue to the call",recordingNoticeDecline:"Not now",selfCameraOffLabel:"Your camera is off"});function su(e){switch(e){case "too_early":return "This visit has not opened yet.";case "too_late":return "This visit has ended.";case "room_not_ready":return "We are still setting up the video room. Try again in a moment.";case "status_cancelled_owner":return "You cancelled this visit.";case "status_cancelled_ops":return "This visit was cancelled. Please book another time.";case "status_no_show_owner":return "This visit was missed.";case "status_no_show_vet":return "The vet could not make this visit. Please book another time.";case "status_awaiting_summary":return "This visit has ended. Your summary is on its way.";case "status_completed":return "This visit has ended.";default:return Xn}}o(su,"televetJoinRefusalWebCopy");var Xn="This visit cannot be joined right now.";function du(e){return e==="room_not_ready"||e==="unknown"}o(du,"televetJoinIsRetryable");function uu(e){let t=null;return ()=>{if(t!==null)return t;let n=e();return t=n,n.then(void 0,()=>{t===n&&(t=null);}),n}}o(uu,"memoizeTelevetLoader");var pu=Object.freeze({status:"joining"});function al(e,t){let[n,r]=react.useState(0),[i,l]=react.useState(pu),s=react.useRef(null);react.useEffect(()=>{let d=t?.joinConsult;if(t===null||d===void 0){l(Object.freeze({status:"refused",refusal:"unavailable",reason:null}));return}let u=`${e}#${String(n)}`,f=s.current;if(f===null||f.key!==u){let p;try{p=d.call(t,e);}catch(c){p=Promise.reject(c);}f={key:u,promise:p},s.current=f;}let y=true;return l(pu),f.promise.then(p=>{y&&(p.ok?l(Object.freeze({status:"ready",credential:p.value})):l(Object.freeze({status:"refused",refusal:yo(p.error),reason:mo(p.error)})));},()=>{y&&l(Object.freeze({status:"refused",refusal:"unknown",reason:null}));}),()=>{y=false;}},[e,t,n]);let a=react.useCallback(()=>r(d=>d+1),[]);return {state:i,retry:a}}o(al,"useTelevetJoin");var mu=uu(()=>import('@everfur/sdk/web/televet/call')),Gm=ao;function sl({consultId:e,controller:t,onLeave:n,style:r}){let i=Y(),[l,s]=react.useState(null),a=l===e,[d]=react.useState(Ur);react.useEffect(()=>{if(d)return;let f=true;return mu().then(y=>{f&&Xm(y.EVERFUR_DAILY_SETUP);},()=>{}),()=>{f=false;}},[d]),Kn(()=>(n(),true),!a);let u=react.useCallback(()=>{s(null),n();},[n]);return d?a?jsxRuntime.jsx(Jm,{consultId:e,controller:t,onLeave:u,style:r},e):jsxRuntime.jsx(yu,{onContinue:()=>s(e),onDecline:n,style:r}):jsxRuntime.jsxs("div",{style:{...i.stepFill,...r},"data-testid":"televet-join-call-unavailable",children:[jsxRuntime.jsx(ae,{message:Xn}),jsxRuntime.jsx(B,{label:lt.leaveCta,kind:"secondary",onPress:n,testID:"televet-join-unavailable-leave"})]})}o(sl,"TelevetJoinScreen");function yu({onContinue:e,onDecline:t,busy:n=false,declineHeld:r=false,style:i}){let l=Y(),s=`${react.useId()}-recording-notice`,a=react.useRef(null);return react.useEffect(()=>{let d=a.current;if(!d)return;let u=d.ownerDocument.activeElement;u!==null&&u!==d.ownerDocument.body||d.focus();},[]),jsxRuntime.jsx("div",{style:{...l.stepFill,...i},children:jsxRuntime.jsxs("div",{ref:a,role:"alertdialog","aria-labelledby":s,"aria-busy":n||void 0,tabIndex:-1,"data-testid":"everfur-vet-call-recording-notice",style:l.stateCard,children:[jsxRuntime.jsx("p",{id:s,style:l.stateTitle,children:lt.recordingNoticeTitle}),jsxRuntime.jsx(B,{label:lt.recordingNoticeCta,kind:"primary",loading:n,onPress:()=>e?.(),testID:"everfur-vet-call-recording-continue"}),jsxRuntime.jsx(B,{label:lt.recordingNoticeDecline,kind:"secondary",disabled:r,onPress:()=>t?.(),testID:"everfur-vet-call-recording-decline"})]})})}o(yu,"TelevetRecordingNotice");function Jm({consultId:e,controller:t,onLeave:n,style:r}){let i=Y(),l=ke(t),{state:s,retry:a}=al(e,l),d=s.status==="ready"?s.credential:null,[u,f]=react.useState(null),[y,p]=react.useState(false),c=d!==null;react.useEffect(()=>{if(!c||u!==null)return;let R=true;return mu().then(x=>{R&&f(()=>x);},()=>{R&&p(true);}),()=>{R=false;}},[c,u]);let[v,b]=react.useState(null);react.useEffect(()=>{if(d===null)return;let R=d.roomUrl;return iu(R),b(d),()=>{lu(R);}},[d]);let C=s.status==="joining",[E,h]=react.useState(false);react.useEffect(()=>{if(!C){h(false);return}let R=setTimeout(()=>h(true),Gm);return ()=>{clearTimeout(R);}},[C]);let S=C&&!E;if(Kn(()=>(S||d!==null&&u!==null&&!y&&au(d.roomUrl)||n(),true)),s.status==="refused"||y){let R=s.status==="refused"?s.refusal:"unavailable",x=s.status==="refused"?su(s.reason):Xn;return jsxRuntime.jsxs("div",{style:{...i.stepFill,...r},"data-testid":"televet-join-refused",children:[jsxRuntime.jsx(ae,{message:x,testID:"televet-join-refused-message"}),du(R)&&s.status==="refused"?jsxRuntime.jsx(B,{label:m.retryCta,kind:"primary",onPress:a,testID:"televet-join-retry"}):null,jsxRuntime.jsx(B,{label:lt.leaveCta,kind:"secondary",onPress:n,testID:"televet-join-leave"})]})}if(d===null||u===null||v!==d)return jsxRuntime.jsx(yu,{busy:true,declineHeld:S,onDecline:n,style:r});let{EverfurVetCall:w}=u;return jsxRuntime.jsx(w,{roomUrl:d.roomUrl,token:d.token,onLeave:n,renderUnavailable:()=>jsxRuntime.jsxs("div",{style:i.stepFill,"data-testid":"televet-join-call-unavailable",children:[jsxRuntime.jsx(ae,{message:Xn}),jsxRuntime.jsx(B,{label:lt.leaveCta,kind:"secondary",onPress:n,testID:"televet-join-unavailable-leave"})]}),...r?{style:r}:{}})}o(Jm,"TelevetJoinRoom");var fu=false;function Xm(e){if(fu)return;fu=true;let t=globalThis.console;try{t?.warn?.(e);}catch{}}o(Xm,"warnSetupOnce");var ey=2e4;function gu(e=true,t=ey){let[n,r]=react.useState(()=>Date.now());return react.useEffect(()=>{if(!e)return;r(Date.now());let i=setInterval(()=>r(Date.now()),t);return ()=>clearInterval(i)},[e,t]),n}o(gu,"useNowMs");function ty(e){return e.httpStatus!==void 0&&!kn(e)}o(ty,"answeredBehindSwitch");function ul(e,t=0){let n=e?.listVetThreads,r=n!==void 0,[i,l]=react.useState(()=>({availability:r?"pending":"dark",threads:[],isPending:r,error:null})),[s,a]=react.useState(0);react.useEffect(()=>{if(!e||!n){l({availability:"dark",threads:[],isPending:false,error:null});return}let u=new AbortController,f=true;return l(y=>({...y,isPending:true})),n.call(e,u.signal).then(y=>{f&&(y.ok?l({availability:"lit",threads:y.value,isPending:false,error:null}):kn(y.error)?l({availability:"dark",threads:[],isPending:false,error:null}):l(p=>({availability:ty(y.error)?"lit":p.availability,threads:p.threads,isPending:false,error:y.error})));},()=>{f&&l(y=>({...y,isPending:false}));}),()=>{f=false,u.abort();}},[e,n,t,s]);let d=react.useCallback(()=>a(u=>u+1),[]);return react.useMemo(()=>({...i,refetch:d}),[i,d])}o(ul,"useVetThreads");function cl(e,t,n={}){let r=n.now??Date.now,i=e?.listVetMessages,[l,s]=react.useState([]),[a,d]=react.useState("loading"),[u,f]=react.useState(false),[y,p]=react.useState(false),[c,v]=react.useState(n.ownerCanStart===false),[b,C]=react.useState(false),[E,h]=react.useState(null),[S,w]=react.useState(0),[R,x]=react.useState(0),T=react.useRef(true),I=react.useRef(false),_=react.useRef(false),P=react.useRef(r);P.current=r,react.useEffect(()=>(T.current=true,()=>{T.current=false;}),[]),react.useEffect(()=>{n.ownerCanStart===false&&v(true);},[n.ownerCanStart]),react.useEffect(()=>{if(s([]),f(false),!e||!i){d("ready");return}d("loading");let K=new AbortController,L=true;return i.call(e,t,{},K.signal).then(oe=>{if(L){if(!oe.ok){d("error");return}s([...oe.value].reverse()),f(oe.value.length>=En),d("ready");}},()=>{L&&d("error");}),()=>{L=false,K.abort();}},[e,i,t,R]);let A=react.useRef(null);react.useEffect(()=>{let K=e?.markVetThreadRead;a!=="ready"||!e||!K||A.current===t||(A.current=t,K.call(e,t,new Date(P.current()).toISOString()).catch(()=>{}));},[a,e,t]);let V=react.useCallback(()=>{let K=l[0];if(!e||!i||!u||K===void 0||_.current)return;_.current=true,p(true);let L=new AbortController;i.call(e,t,{before:K.createdAt},L.signal).then(oe=>{if(_.current=false,!T.current||(p(false),!oe.ok))return;let se=new Set(l.map(be=>be.messageId)),me=[...oe.value].reverse().filter(be=>!se.has(be.messageId));s(be=>[...me,...be]),f(oe.value.length>=En);},()=>{_.current=false,T.current&&p(false);});},[e,i,t,u,l]),j=react.useCallback(async K=>{let L=e?.sendVetMessage;if(!e||!L||I.current||K.trim().length===0)return false;I.current=true,C(true),h(null);let oe=false;try{let se=await L.call(e,t,K);if(!T.current)return se.ok;se.ok?(oe=!0,s(me=>[...me,se.value]),w(me=>me+1)):ko(se.error)?(v(!0),h("vetWritesFirst")):h("notSent");}catch{T.current&&h("notSent");}finally{I.current=false,T.current&&C(false);}return oe},[e,t]),ee=react.useCallback(()=>x(K=>K+1),[]),G=e?.sendVetMessage!==void 0&&!c;return react.useMemo(()=>({status:a,messages:l,hasOlder:u,loadingOlder:y,loadOlder:V,canWrite:G,sending:b,sendFailure:E,sentCount:S,send:j,retry:ee}),[a,l,u,y,V,G,b,E,S,j,ee])}o(cl,"useVetThread");function pl(e,t){let n=e?.visitSummary,[r,i]=react.useState(()=>({status:n?"loading":"absent",summary:null})),[l,s]=react.useState(0);react.useEffect(()=>{if(!e||!n){i({status:"absent",summary:null});return}i({status:"loading",summary:null});let d=new AbortController,u=true;return n.call(e,t,d.signal).then(f=>{u&&(f.ok?i({status:"ready",summary:f.value}):i({status:kn(f.error)?"pending":"error",summary:null}));},()=>{u&&i({status:"error",summary:null});}),()=>{u=false,d.abort();}},[e,n,t,l]);let a=react.useCallback(()=>s(d=>d+1),[]);return react.useMemo(()=>({...r,retry:a}),[r,a])}o(pl,"useVisitSummary");function tr(e,t){return t?e.find(n=>n.petRef===t||n.petId===t)?.petRef??null:null}o(tr,"vetThreadPetRef");var fl="your vet",ny="your pet",U=Object.freeze({messagesTitle:"Messages",newPillNative:"New",newPillWeb:"New reply",previewOwnerTemplate:"You: {text}",previewVetTemplateWeb:"{vet}: {text}",threadMetaTemplateNative:"With {vet}",threadLogTemplate:"Messages with {vet}",composerLabelTemplateNative:"Message {vet}",composerLabelWeb:"Message",composerPlaceholderTemplate:"Message {vet}\u2026",send:"Send",composerNoteTemplate:"{vet} usually replies within a day. Emergency? Call a vet.",sent:"Sent",bookVisitWeb:"Book a visit",empty:"No messages yet",loading:"Loading",loadFailed:"Could not load",retry:"Try again",notSent:"Not sent",vetWritesFirst:"Your vet will write first. You can reply once they do.",attachmentsTemplate:"{n} attached",runningLateTemplate:"Running late? Message {vet}",sawTitleTemplate:"What {vet} saw",summaryLabel:"Summary",fromVetTemplate:"From {vet}",planTitleTemplate:"{pet}\u2019s plan",wordForWord:"Word for word",fromThisVisitTitle:"From this visit",messageVetTemplate:"Message {vet}",bookFollowUp:"Book a follow-up",summaryFootnoteTemplate:"A summary of your video visit, written by {vet}. In an emergency, go to the nearest emergency animal hospital.",summaryPending:"Summary on its way"});function Se(e,t){let n=e;for(let[r,i]of Object.entries(t))n=n.split(`{${r}}`).join(i);return n}o(Se,"fillVetCopy");function Ue(e){return e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}o(Ue,"sentenceCase");function Kr(e){let t=e?.trim()??"";return t.length>0?t:fl}o(Kr,"vetNameOr");function Wt(e){let t=e?.trim()??"";return t.length>0?t:ny}o(Wt,"petNameOr");function vu(e){let t=new Date(e);return Number.isNaN(t.getTime())?"":t.toLocaleDateString(void 0,{month:"short",day:"numeric"})}o(vu,"formatThreadDay");function ml({terms:e,submitting:t,failure:n,onConfirm:r,onDismiss:i,onRetryTerms:l,styles:s,petName:a,when:d,vet:u,about:f,onMoveInstead:y}){let[p,c]=react.useState(""),v=e.status==="ready",b=a?.trim()??"",C=[...b.length>0?[{id:"better",label:H(F.cancelWhyBetterTemplate,{pet:b})}]:[],{id:"time",label:F.cancelWhyTime},{id:"regular-vet",label:F.cancelWhyRegularVet},{id:"other",label:F.cancelWhyOther}],E=o(()=>{t||!v||r(p.trim()||F.cancelReason);},"confirm"),h=[{label:F.summaryWhen,value:d},{label:F.summaryVet,value:u},{label:F.summaryAbout,value:f}].filter(S=>typeof S.value=="string"&&S.value.trim().length>0);return jsxRuntime.jsxs("form",{onSubmit:S=>{S.preventDefault(),E();},"aria-label":F.cancelConfirmCta,noValidate:true,style:s.form,"data-testid":"televet-visit-cancel-form",children:[jsxRuntime.jsx("p",{style:s.formTitle,children:b.length>0?H(F.cancelConfirmTitleTemplate,{pet:b}):F.cancelConfirmTitle}),h.length>0?jsxRuntime.jsx("dl",{style:s.kv,"data-testid":"televet-visit-cancel-summary",children:h.map(S=>jsxRuntime.jsxs("div",{style:s.kvRow,children:[jsxRuntime.jsx("dt",{style:s.kvLabel,children:S.label}),jsxRuntime.jsx("dd",{style:s.kvValue,children:S.value})]},S.label))}):null,e.status==="ready"?jsxRuntime.jsx("div",{style:s.notice,"data-testid":"televet-visit-cancel-terms",children:jsxRuntime.jsx("p",{style:s.note,children:e.summary})}):e.status==="loading"?jsxRuntime.jsx("div",{role:"status",style:s.notice,children:jsxRuntime.jsx("p",{style:s.note,children:F.loadingCancellationTerms})}):jsxRuntime.jsxs("div",{role:"alert",style:{...s.notice,...s.noticeDanger},"data-testid":"televet-visit-cancel-terms-error",children:[jsxRuntime.jsx("p",{style:s.note,children:F.cancellationTermsUnavailable}),jsxRuntime.jsx(B,{label:F.retry,kind:"secondary",fullWidth:false,onPress:l})]}),jsxRuntime.jsxs("div",{role:"radiogroup","aria-label":`${F.cancellationReasonLabel} ${F.cancellationReasonOptional}`,style:s.reasons,"data-testid":"televet-visit-cancel-reason",children:[jsxRuntime.jsxs("p",{style:s.labelRow,children:[jsxRuntime.jsx("span",{style:s.label,children:F.cancellationReasonLabel}),jsxRuntime.jsx("span",{style:s.labelNote,"data-testid":"televet-visit-cancel-optional",children:F.cancellationReasonOptional})]}),C.map(S=>jsxRuntime.jsxs("div",{style:s.reasons,children:[jsxRuntime.jsx(Rt,{title:S.label,selected:p===S.label,onPress:()=>{t||!v||c(p===S.label?"":S.label);},testID:`televet-visit-cancel-why-${S.id}`}),S.id==="time"&&p===S.label?jsxRuntime.jsxs("div",{style:s.hint,"data-testid":"televet-visit-cancel-time-hint",children:[jsxRuntime.jsx("span",{children:F.cancelWhyTimeHint}),y?jsxRuntime.jsx(B,{label:F.cancelMoveInstead,kind:"quiet",fullWidth:false,onPress:y,testID:"televet-visit-cancel-move"}):null]}):null]},S.id))]}),n?jsxRuntime.jsx("div",{role:"alert",style:{...s.notice,...s.noticeDanger},"data-testid":"televet-visit-cancel-failed",children:jsxRuntime.jsx("p",{style:s.note,children:n})}):null,jsxRuntime.jsxs("div",{style:s.actions,children:[jsxRuntime.jsx(B,{label:F.cancelDismissCta,kind:"secondary",fullWidth:false,disabled:t,onPress:i,testID:"televet-visit-cancel-keep"}),jsxRuntime.jsx(B,{label:t?F.cancellingVisit:F.cancelConfirmCta,kind:"danger",fullWidth:false,disabled:t||!v,loading:t,onPress:E,testID:"televet-visit-cancel-yes"})]})]})}o(ml,"TelevetCancelVisitForm");function fn(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=Ie(e),d=o(f=>`${String(f)}px`,"px"),u=o((f,y,p,c=s.normal)=>({margin:0,...k(e,f),color:p,fontSize:d(y),lineHeight:String(c)}),"text");return {screen:{...Jt,display:"flex",flexDirection:"column",gap:d(n.lg),paddingLeft:d(n.xl),paddingRight:d(n.xl),paddingBottom:d(n.xl),boxSizing:"border-box"},topBar:{display:"flex",alignItems:"center",justifyContent:"flex-end",minHeight:44},topBarStart:{justifyContent:"flex-start"},iconButton:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:44,height:44,padding:0,borderStyle:"solid",borderWidth:1.5,borderColor:a.line,borderRadius:"50%",background:a.surface,color:a.ink,cursor:"pointer",boxSizing:"border-box"},textButton:{display:"inline-flex",alignItems:"center",minHeight:44,padding:`0 ${d(n.sm)}`,border:0,borderRadius:d(r.pill),background:"transparent",color:a.ink,cursor:"pointer",...k(e,"bold"),fontSize:d(l.bodyTight)},pageTitle:{...u("medium",Ge(e,"heading",32),a.ink,1.1),letterSpacing:"-0.03em"},panel:{display:"flex",flexDirection:"column",gap:d(14),padding:d(n.xl),borderRadius:d(r.lg),borderStyle:"solid",borderWidth:1,borderColor:a.line,backgroundColor:a.surface,boxSizing:"border-box"},panelHeader:{display:"flex",alignItems:"center",gap:d(10)},panelTitle:{...u("bold",19,a.ink,1.25),letterSpacing:"-0.01em"},pill:{marginLeft:"auto",display:"inline-flex",alignItems:"center",height:24,padding:`0 ${d(10)}`,borderRadius:d(r.pill),backgroundColor:a.pink,...k(e,"monoBold"),color:a.onPink,fontSize:d(11.5),letterSpacing:"0.08em",textTransform:"uppercase",whiteSpace:"nowrap"},pillLine:{backgroundColor:a.surface,borderStyle:"solid",borderWidth:1.5,borderColor:a.line,color:a.muted},pillLive:{backgroundColor:t.badgeBgPositive,color:a.ink},visit:{display:"flex",gap:d(n.lg),alignItems:"flex-start"},dateTile:{flexShrink:0,width:64,paddingTop:d(n.sm),paddingBottom:d(n.sm),borderRadius:d(14),backgroundColor:a.pinkSoft,display:"flex",flexDirection:"column",alignItems:"center",gap:2},dateTileSmall:{...k(e,"monoBold"),color:a.ink,fontSize:d(11),letterSpacing:"0.08em",textTransform:"uppercase"},dateTileDay:{...u("medium",26,a.ink,1.1),letterSpacing:"-0.02em"},visitMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},visitTitle:{...u("bold",20,a.ink,1.25),letterSpacing:"-0.01em",overflowWrap:"anywhere"},visitMeta:{...u("regular",16,a.text),overflowWrap:"anywhere"},actions:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:`${d(6)} ${d(4)}`},list:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column"},row:{display:"flex",flexDirection:"column",gap:d(n.sm),paddingTop:d(n.md),paddingBottom:d(n.md),borderTopStyle:"solid",borderTopWidth:1,borderTopColor:a.line},rowFirst:{borderTopWidth:0,paddingTop:0},rowHead:{display:"flex",alignItems:"center",gap:d(n.md)},rowTitle:u("bold",l.body,a.ink,s.snug),rowMeta:u("regular",14,a.muted),note:u("regular",14,a.muted),footnote:{...u("regular",l.caption,a.muted),textAlign:"center",paddingTop:d(n.md)},skeletons:{display:"flex",flexDirection:"column",gap:d(n.sm)},empty:{display:"flex",flexDirection:"column",gap:d(n.xs)},notice:{display:"flex",flexDirection:"column",gap:d(n.xs),padding:`${d(n.md)} ${d(n.lg)}`,borderRadius:d(r.sm),backgroundColor:a.mist},noticeDanger:{backgroundColor:a.alertWash},noticeTitle:u("bold",l.body,a.ink,s.snug),form:{display:"flex",flexDirection:"column",gap:d(n.lg),paddingTop:d(n.lg),borderTopStyle:"solid",borderTopWidth:1,borderTopColor:a.line},formTitle:{...u("medium",Ge(e,"heading",24),a.ink,1.15),letterSpacing:"-0.02em"},kv:{margin:0,display:"flex",flexDirection:"column"},kvRow:{display:"flex",gap:d(n.lg),paddingTop:d(10),paddingBottom:d(10),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:a.line},kvLabel:{...u("regular",14,a.muted),width:72,flexShrink:0},kvValue:{...u("bold",l.bodyTight,a.ink),marginInlineStart:0,minWidth:0,overflowWrap:"anywhere"},label:u("bold",l.bodyTight,a.ink),labelRow:{display:"flex",alignItems:"baseline",gap:d(n.sm),margin:0},labelNote:u("regular",l.caption,a.muted),reasons:{display:"flex",flexDirection:"column",gap:d(10)},hint:{display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"space-between",gap:`${d(6)} ${d(14)}`,padding:`${d(n.sm)} ${d(n.lg)}`,borderRadius:d(r.sm),backgroundColor:a.mist,...k(e,"regular"),color:a.text,fontSize:d(l.bodyTight)}}}o(fn,"makeVisitStyles");function mn(e){let{color:t,space:n,radius:r,type:i}=e,{size:l,lineHeight:s}=i,a=Ie(e),d=o(y=>`${String(y)}px`,"px"),u=o((y,p,c,v=s.normal)=>({margin:0,...k(e,y),color:c,fontSize:d(p),lineHeight:String(v)}),"text"),f={...u("regular",l.body,a.text),maxWidth:"85%",padding:`${d(10)} ${d(14)}`,borderRadius:d(18),whiteSpace:"pre-wrap",overflowWrap:"anywhere"};return {head:{display:"flex",alignItems:"flex-start",gap:d(n.md),flexWrap:"wrap"},headMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},meta:u("regular",15,a.muted),log:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:d(n.sm),maxHeight:"60vh",overflowY:"auto"},day:{alignSelf:"center",...k(e,"monoBold"),color:a.muted,fontSize:d(11.5),letterSpacing:"0.08em",textTransform:"uppercase",paddingTop:d(n.sm)},item:{display:"flex",flexDirection:"column",gap:d(4)},itemMine:{alignItems:"flex-end"},who:{display:"flex",alignItems:"baseline",gap:d(n.sm),...k(e,"bold"),color:a.ink,fontSize:d(l.bodyTight)},time:u("regular",l.caption,a.muted),bubbleMine:{...f,backgroundColor:t.bubbleUser,color:t.onPrimary,borderBottomRightRadius:d(6)},bubbleVet:{...f,backgroundColor:t.bubbleVet,color:t.onBubbleVet,borderBottomLeftRadius:d(6)},system:{...u("regular",l.caption,a.muted),alignSelf:"center",textAlign:"center"},attachments:u("regular",l.caption,a.muted),composer:{display:"flex",alignItems:"flex-end",gap:d(n.sm),padding:d(n.sm),borderRadius:d(r.lg),borderStyle:"solid",borderWidth:1.5,borderColor:a.line,backgroundColor:a.surface},field:{flex:"1 1 auto",minWidth:0,minHeight:44,resize:"none",border:0,outlineOffset:2,background:"transparent",padding:`${d(10)} ${d(n.sm)}`,...k(e,"regular"),color:a.text,fontSize:d(l.body),lineHeight:String(s.normal),boxSizing:"border-box"},note:u("regular",l.caption,a.muted),failure:u("bold",l.caption,a.alert),srOnly:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},label:{...k(e,"monoBold"),color:a.muted,fontSize:d(11.5),letterSpacing:"0.08em",textTransform:"uppercase"},body:{...u("regular",l.body,a.text),whiteSpace:"pre-wrap",overflowWrap:"anywhere"},plan:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:d(n.md)},planItem:{display:"flex",gap:d(n.md),alignItems:"baseline"},planNumber:{...k(e,"monoBold"),color:a.ink,fontSize:d(12),letterSpacing:"0.08em",flexShrink:0},rowButton:{display:"flex",alignItems:"center",gap:d(n.md),width:"100%",minHeight:44,padding:0,border:0,background:"transparent",textAlign:"start",cursor:"pointer",color:"inherit",font:"inherit"},rowMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},rowEnd:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,flexShrink:0},preview:{...u("regular",14,a.muted),overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},link:{alignSelf:"flex-start",minHeight:44,padding:0,border:0,background:"transparent",cursor:"pointer",...k(e,"bold"),color:t.linkInk,fontSize:d(l.bodyTight),textDecoration:"underline",textUnderlineOffset:3}}}o(mn,"makeVetThreadStyles");function bu({threads:e,pets:t,Title:n,styles:r,threadStyles:i,onOpen:l}){return jsxRuntime.jsxs("section",{style:r.panel,"data-testid":"televet-messages-card",children:[jsxRuntime.jsx("div",{style:r.panelHeader,children:jsxRuntime.jsx(n,{style:r.panelTitle,children:U.messagesTitle})}),jsxRuntime.jsx("ul",{"aria-label":U.messagesTitle,style:r.list,children:e.map((s,a)=>{let d=t.find(f=>f.petRef===s.petRef)?.name??null,u=s.lastMessage?.role==="vet"?s.lastMessage.senderName:null;return jsxRuntime.jsx("li",{style:{...r.row,...a===0?r.rowFirst:null},children:jsxRuntime.jsxs("button",{type:"button",onClick:()=>l({petRef:s.petRef,petName:d,vetName:u,ownerCanStart:s.ownerCanStart}),style:i.rowButton,"data-testid":`televet-messages-row-${s.petRef}`,children:[jsxRuntime.jsxs("span",{style:i.rowMain,children:[jsxRuntime.jsx("span",{style:r.rowTitle,children:Ue(Wt(d))}),s.lastMessage?jsxRuntime.jsx("span",{style:i.preview,children:oy(s.lastMessage)}):null]}),jsxRuntime.jsxs("span",{style:i.rowEnd,children:[jsxRuntime.jsx("span",{style:r.rowMeta,children:vu(s.lastMessageAt)}),s.unreadCount>0?jsxRuntime.jsx("span",{style:{...r.pill,marginLeft:0},children:U.newPillWeb}):null]})]})},s.petRef)})})]})}o(bu,"TelevetVetMessagesCard");function oy(e){let t=e.content.split(`
|
|
3
|
-
`)[0]?.trim()??"";return e.role==="owner"?Se(U.previewOwnerTemplate,{text:t}):e.role==="vet"&&e.senderName?Se(U.previewVetTemplateWeb,{vet:e.senderName,text:t}):t}o(oy,"previewLine");function bl({controller:e,onJoin:t,onReschedule:n,onBook:r,onBack:i,onOpenThread:l,onOpenSummary:s,isRoot:a=true,revision:d=0,returnedTo:u=false,nowMs:f,style:y}){let p=M(),c=react.useMemo(()=>fn(p),[p]),v=react.useMemo(()=>mn(p),[p]),b=ge(),C=ie(b),E=ie(ut(b)),h=ke(e),[S,w]=react.useState(0),R=Er(h,d+S),x=_n(h),{pets:T}=St(),I=ul(h,d+S),_=I.availability==="lit",P=o(($,Ke)=>{let Ee=tr(T,$.petId);if(!_||!l||Ee===null)return null;let _e=I.threads.find(At=>At.petRef===Ee);return {petRef:Ee,petName:Ke,vetName:$.clinicianName,..._e?{ownerCanStart:_e.ownerCanStart}:{}}},"threadTargetFor"),[A,V]=react.useState({status:"idle"}),[j,ee]=react.useState(null),G=R.data??[],K=gu(G.some($=>!Sn.has($.status))),L=f??K,{upcoming:oe,past:se}=react.useMemo(()=>On(G,L),[G,L]),me=react.useRef(null),be=react.useRef(null),$e=react.useRef(null),X=react.useRef(null),Be=react.useRef(u),ct=!(R.enabled&&R.isPending);react.useEffect(()=>{Be.current&&be.current?.focus();},[]),react.useEffect(()=>{!Be.current||!ct||(Be.current=false,!me.current?.contains(document.activeElement)&&($e.current??X.current)?.focus());},[ct]);let Ut=x.data!==null&&x.data!==void 0?{status:"ready",summary:x.data.summary}:x.enabled&&x.isPending?{status:"loading"}:{status:"error"},rr=o(($,Ke)=>{let Ee=h?.cancelConsult;if(Ut.status!=="ready"||!h||!Ee){V({status:"failed",consultId:$.consultId,message:F.cancelTermsFirst});return}V({status:"submitting",consultId:$.consultId}),Ee.call(h,$.consultId,Ke).then(_e=>{_e.ok?(ee({value:_e.value,pet:Oe(T,$.petId),vet:$.clinicianName}),V({status:"idle"})):V({status:"failed",consultId:$.consultId,message:F.cancelFailed}),w(At=>At+1);},()=>V({status:"failed",consultId:$.consultId,message:F.cancelFailed}));},"cancelVisit"),gn=o(($,Ke)=>{let Ee=Oe(T,$.petId),_e=Sn.has($.status)?null:P($,Ee);return jsxRuntime.jsx(ay,{first:Ke===0,consult:$,petName:Ee,nowMs:L,styles:c,threadStyles:v,..._e&&l?{onMessageVet:o(()=>l(_e),"onMessageVet")}:{},..._&&s&&$.status==="completed"?{onOpenSummary:o(()=>s($),"onOpenSummary")}:{},cancelling:A.status!=="idle"&&A.consultId===$.consultId?A:null,anyCancelInFlight:A.status==="submitting",terms:Ut,onJoin:t,onReschedule:n,onAskCancel:()=>{ee(null),V({status:"asking",consultId:$.consultId});},onDismissCancel:()=>V({status:"idle"}),onCancel:At=>rr($,At),...n?{onMoveInstead:o(()=>n($),"onMoveInstead")}:{},onRetryTerms:()=>x.refetch()},$.consultId)},"renderRow");return jsxRuntime.jsxs("div",{ref:me,style:{...c.screen,...y},"data-testid":"televet-visits",children:[jsxRuntime.jsx("div",{style:a?c.topBar:{...c.topBar,...c.topBarStart},children:a?jsxRuntime.jsx("button",{type:"button",onClick:i,"aria-label":sy,style:c.iconButton,"data-testid":"televet-visits-close",children:jsxRuntime.jsx(uy,{})}):jsxRuntime.jsx("button",{type:"button",onClick:i,style:c.textButton,"data-testid":"televet-visits-back",children:dy})}),jsxRuntime.jsx(C,{style:c.pageTitle,"data-testid":"televet-visits-title",children:F.pageTitle}),j?jsxRuntime.jsxs("div",{role:"status",style:c.notice,"data-testid":"televet-visits-cancel-receipt",children:[jsxRuntime.jsx("p",{style:c.noticeTitle,children:j.pet&&j.vet?H(F.cancelledTemplate,{pet:j.pet,vet:j.vet}):F.cancelledTitle}),j.value.summary?jsxRuntime.jsx("p",{style:c.note,children:j.value.summary}):null,jsxRuntime.jsx("p",{style:c.note,children:j.value.feeRecorded?F.cancellationFeeRecorded:F.cancellationFeeNotRecorded})]}):null,r?jsxRuntime.jsx(ly,{title:oe.length>0?F.bookAnotherTitle:F.bookCardTitle,onBook:r,styles:c}):null,R.enabled&&R.isPending?jsxRuntime.jsxs("section",{style:c.panel,children:[jsxRuntime.jsx(vl,{Title:E,title:F.pastTitle,count:null,styles:c,headingRef:be}),jsxRuntime.jsx("div",{role:"progressbar","aria-label":F.loading,"aria-busy":"true",style:c.skeletons,"data-testid":"televet-visits-loading",children:[0,1,2].map($=>jsxRuntime.jsx(ve,{height:56},$))})]}):R.isError&&R.data===null?jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs("div",{ref:X,role:"alert",tabIndex:-1,style:{...c.notice,...c.noticeDanger},"data-testid":"televet-visits-error",children:[jsxRuntime.jsx("p",{style:c.noticeTitle,children:F.loadErrorTitle}),jsxRuntime.jsx("p",{style:c.note,"data-testid":"televet-visits-error-body",children:F.loadErrorBody}),jsxRuntime.jsx(B,{label:F.retry,kind:"secondary",fullWidth:false,onPress:()=>R.refetch()})]})}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[oe.length>0?jsxRuntime.jsx("div",{style:c.skeletons,"data-testid":"televet-visits-upcoming",children:oe.map(($,Ke)=>jsxRuntime.jsxs("section",{style:c.panel,children:[jsxRuntime.jsx(vl,{Title:E,title:F.upcomingTitle,count:null,styles:c,...Ke===0?{headingRef:$e}:{},pill:$.status==="scheduled"?F.bookedPill:jo($.status)}),jsxRuntime.jsx("ul",{"aria-label":F.upcomingTitle,style:c.list,children:gn($,0)})]},$.consultId))}):null,_&&l&&I.threads.length>0?jsxRuntime.jsx(bu,{threads:I.threads,pets:T,Title:E,styles:c,threadStyles:v,onOpen:l}):null,jsxRuntime.jsxs("section",{style:c.panel,"data-testid":"televet-visits-past",children:[jsxRuntime.jsx(vl,{Title:E,title:F.pastTitle,count:null,styles:c,...oe.length===0?{headingRef:$e}:{}}),G.length===0?jsxRuntime.jsxs("div",{style:c.empty,"data-testid":"televet-visits-empty",children:[jsxRuntime.jsx("p",{style:c.noticeTitle,children:F.emptyTitle}),jsxRuntime.jsx("p",{style:c.note,children:F.emptyBody})]}):se.length===0?null:jsxRuntime.jsx("ul",{"aria-label":F.pastTitle,style:c.list,children:se.map(($,Ke)=>gn($,Ke))})]})]}),jsxRuntime.jsx("p",{style:c.footnote,"data-testid":"televet-visits-footnote",children:Q.footnote})]})}o(bl,"TelevetVisitsScreen");function ly({title:e,onBook:t,styles:n}){return jsxRuntime.jsxs("section",{style:n.panel,"data-testid":"televet-visits-book-card",children:[jsxRuntime.jsx("p",{style:n.panelTitle,children:e}),jsxRuntime.jsx(B,{label:F.bookCardCta,size:"lg",onPress:t,testID:"televet-visits-book"})]})}o(ly,"BookCard");function vl({Title:e,title:t,count:n,styles:r,headingRef:i,pill:l}){return jsxRuntime.jsxs("div",{style:r.panelHeader,children:[jsxRuntime.jsx(e,{style:r.panelTitle,...i?{ref:i,tabIndex:-1}:{},children:t}),n===null?null:jsxRuntime.jsx("span",{style:{...r.pill,...r.pillLine},children:n}),l?jsxRuntime.jsx("span",{style:r.pill,"data-testid":"televet-visits-booked-pill",children:l}):null]})}o(vl,"PanelHeader");function ay({first:e,consult:t,petName:n,nowMs:r,styles:i,cancelling:l,anyCancelInFlight:s,terms:a,onJoin:d,onReschedule:u,onAskCancel:f,onDismissCancel:y,onCancel:p,onMoveInstead:c,onRetryTerms:v,threadStyles:b,onMessageVet:C,onOpenSummary:E}){let h=Vo(t,r),S=Sn.has(t.status),w=jo(t.status),R=Do(t),x=zo(t.status),T=t.consultId,I=react.useId(),_=!h.joinable&&!S,P=en(t.scheduledAt),A=t.clinicianName,V=n&&A?H(F.visitTitleTemplate,{pet:n,vet:A}):n??A??P,j=t.reasonText?.split(`
|
|
4
|
-
`)[0]?.trim()??"",ee=new Date(t.scheduledAt),G=Number.isNaN(ee.getTime())?null:{weekday:ee.toLocaleDateString(void 0,{weekday:"short"}),day:String(ee.getDate()),month:ee.toLocaleDateString(void 0,{month:"short"})};if(S){let K=jsxRuntime.jsxs("div",{style:{...i.rowHead,width:"100%"},children:[jsxRuntime.jsxs("div",{style:i.visitMain,children:[jsxRuntime.jsx("p",{style:i.rowTitle,children:V}),jsxRuntime.jsx("p",{style:i.rowMeta,children:P})]}),w?jsxRuntime.jsx("span",{style:{...i.pill,...i.pillLine},"data-testid":`televet-visits-status-${T}`,children:w}):null]});return jsxRuntime.jsx("li",{style:{...i.row,...e?i.rowFirst:null},"data-testid":`televet-visits-row-${T}`,children:E?jsxRuntime.jsx("button",{type:"button",onClick:E,style:b.rowButton,"data-testid":`televet-visits-summary-${T}`,children:K}):K})}return jsxRuntime.jsxs("li",{style:{...i.row,...i.rowFirst,gap:16},"data-testid":`televet-visits-row-${T}`,children:[jsxRuntime.jsxs("div",{style:i.visit,children:[G?jsxRuntime.jsxs("div",{"aria-hidden":"true",style:i.dateTile,children:[jsxRuntime.jsx("span",{style:i.dateTileSmall,children:G.weekday}),jsxRuntime.jsx("span",{style:i.dateTileDay,children:G.day}),jsxRuntime.jsx("span",{style:i.dateTileSmall,children:G.month})]}):null,jsxRuntime.jsxs("div",{style:i.visitMain,children:[jsxRuntime.jsx("p",{style:i.visitTitle,children:V}),jsxRuntime.jsx("p",{style:i.visitMeta,children:P}),j?jsxRuntime.jsx("p",{style:i.visitMeta,children:j}):null,w&&t.status!=="scheduled"?jsxRuntime.jsx("span",{style:i.note,"data-testid":`televet-visits-status-${T}`,children:w}):null]})]}),jsxRuntime.jsxs("div",{style:i.actions,children:[jsxRuntime.jsx(B,{label:F.joinCta,fullWidth:false,disabled:!h.joinable,onPress:()=>d(t,n),describedBy:_?I:void 0,testID:`televet-visits-join-${T}`}),x&&u?jsxRuntime.jsx(B,{label:F.rescheduleCta,kind:"quiet",fullWidth:false,onPress:()=>u(t),testID:`televet-visits-reschedule-${T}`}):null,x?jsxRuntime.jsx(B,{label:F.cancelCta,kind:"quiet",fullWidth:false,disabled:s,onPress:f,testID:`televet-visits-cancel-${T}`}):null]}),C?jsxRuntime.jsx("button",{type:"button",onClick:C,style:b.link,"data-testid":`televet-visits-late-${T}`,children:Se(U.runningLateTemplate,{vet:A??fl})}):null,_?jsxRuntime.jsx("p",{id:I,style:i.note,"data-testid":`televet-visits-join-note-${T}`,children:Ka(h.reason,R===null?void 0:Vn(new Date(R).toISOString()))}):null,l?jsxRuntime.jsx(ml,{terms:a,submitting:l.status==="submitting",failure:l.status==="failed"?l.message:null,onConfirm:p,onDismiss:y,onRetryTerms:v,styles:i,petName:n,when:P,vet:A,about:j,...c?{onMoveInstead:c}:{}}):null]})}o(ay,"VisitRow");var sy="Close",dy="Back";function uy(){return jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}o(uy,"CloseGlyph");var my=48;function hl({petRef:e,petName:t,vetName:n,ownerCanStart:r,controller:i,onBack:l,onBook:s,style:a}){let d=M(),u=react.useMemo(()=>fn(d),[d]),f=react.useMemo(()=>mn(d),[d]),y=ie(ge()),p=ke(i),c=cl(p,e,{ownerCanStart:r}),[v,b]=react.useState(""),C=react.useId(),E=react.useId(),h=react.useRef(null),S=n?.trim()||gy(c.messages),w=Kr(S),R=c.messages[c.messages.length-1]?.messageId;react.useEffect(()=>{let T=h.current;T&&c.status==="ready"&&(T.scrollTop=T.scrollHeight);},[c.status,R]);let x=o(()=>{let T=v;T.trim().length===0||c.sending||c.send(T).then(I=>{I&&b("");});},"submit");return jsxRuntime.jsxs("div",{style:{...u.screen,...a},"data-testid":"televet-vet-thread",children:[jsxRuntime.jsx("div",{style:{...u.topBar,...u.topBarStart},children:jsxRuntime.jsx("button",{type:"button",onClick:l,style:u.textButton,"data-testid":"televet-vet-thread-back",children:vy})}),jsxRuntime.jsxs("div",{style:f.head,children:[jsxRuntime.jsxs("div",{style:f.headMain,children:[jsxRuntime.jsx(y,{style:u.pageTitle,children:Ue(Wt(t))}),S?jsxRuntime.jsx("p",{style:f.meta,children:S}):null]}),s?jsxRuntime.jsx(B,{label:U.bookVisitWeb,kind:"secondary",fullWidth:false,onPress:s,testID:"televet-vet-thread-book"}):null]}),c.status==="loading"?jsxRuntime.jsxs("div",{role:"progressbar","aria-label":U.loading,"aria-busy":"true",style:u.skeletons,"data-testid":"televet-vet-thread-loading",children:[jsxRuntime.jsx(ve,{height:56}),jsxRuntime.jsx(ve,{height:56})]}):c.status==="error"?jsxRuntime.jsxs("div",{role:"alert",style:{...u.notice,...u.noticeDanger},"data-testid":"televet-vet-thread-error",children:[jsxRuntime.jsx("p",{style:u.noticeTitle,children:U.loadFailed}),jsxRuntime.jsx(B,{label:U.retry,kind:"secondary",fullWidth:false,onPress:c.retry})]}):jsxRuntime.jsxs("ol",{ref:h,role:"log","aria-label":Se(U.threadLogTemplate,{vet:w}),"aria-busy":c.loadingOlder||void 0,tabIndex:0,style:f.log,onScroll:T=>{T.currentTarget.scrollTop<=my&&c.loadOlder();},"data-testid":"televet-vet-thread-log",children:[c.messages.length===0?jsxRuntime.jsx("li",{style:f.system,children:U.empty}):null,c.messages.map((T,I)=>jsxRuntime.jsx(yy,{message:T,previous:c.messages[I-1],vet:w,styles:f},T.messageId))]}),jsxRuntime.jsx("p",{role:"status",style:f.srOnly,"data-testid":"televet-vet-thread-status",children:c.sentCount>0&&c.sendFailure===null?U.sent:""}),c.status==="ready"&&c.canWrite?jsxRuntime.jsxs("form",{style:{display:"flex",flexDirection:"column",gap:8},onSubmit:T=>{T.preventDefault(),x();},children:[jsxRuntime.jsxs("div",{style:f.composer,children:[jsxRuntime.jsx("label",{htmlFor:C,style:f.srOnly,children:U.composerLabelWeb}),jsxRuntime.jsx("textarea",{id:C,value:v,rows:1,placeholder:Se(U.composerPlaceholderTemplate,{vet:w}),"aria-describedby":E,onChange:T=>b(T.target.value),onKeyDown:T=>{T.key==="Enter"&&!T.shiftKey&&(T.preventDefault(),x());},style:f.field,"data-testid":"televet-vet-thread-field"}),jsxRuntime.jsx(B,{label:U.send,fullWidth:false,loading:c.sending,disabled:v.trim().length===0,onPress:x,testID:"televet-vet-thread-send"})]}),c.sendFailure==="notSent"?jsxRuntime.jsx("p",{role:"alert",style:f.failure,"data-testid":"televet-vet-thread-failure",children:U.notSent}):null,jsxRuntime.jsx("p",{id:E,style:f.note,children:Ue(Se(U.composerNoteTemplate,{vet:w}))})]}):null,c.sendFailure==="vetWritesFirst"?jsxRuntime.jsx("p",{role:"alert",style:f.note,"data-testid":"televet-vet-thread-vet-first",children:U.vetWritesFirst}):null]})}o(hl,"TelevetVetThreadScreen");function yy({message:e,previous:t,vet:n,styles:r}){let i=di(e.createdAt),l=t===void 0||di(t.createdAt)!==i,s=e.attachmentCount>0?Se(U.attachmentsTemplate,{n:String(e.attachmentCount)}):null;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[l?jsxRuntime.jsx("li",{style:r.day,children:i}):null,e.role==="system"?jsxRuntime.jsx("li",{style:r.system,children:e.content}):jsxRuntime.jsxs("li",{style:{...r.item,...e.role==="owner"?r.itemMine:null},"data-testid":`televet-vet-thread-message-${e.messageId}`,children:[e.role==="vet"?jsxRuntime.jsxs("p",{style:{...r.who,margin:0},children:[jsxRuntime.jsx("span",{children:e.senderName??Ue(n)}),jsxRuntime.jsx("time",{dateTime:e.createdAt,style:r.time,children:dt(e.createdAt)})]}):null,e.content.length>0?jsxRuntime.jsx("p",{style:{...e.role==="owner"?r.bubbleMine:r.bubbleVet,margin:0},children:e.content}):null,s?jsxRuntime.jsx("p",{style:r.attachments,children:s}):null]})]})}o(yy,"ThreadItem");function gy(e){for(let t=e.length-1;t>=0;t-=1){let n=e[t]?.role==="vet"?e[t]?.senderName:null;if(n)return n}return null}o(gy,"newestVetName");var vy="Back";function Tl({consult:e,controller:t,onBack:n,onMessageVet:r,onBook:i,style:l}){let s=M(),a=react.useMemo(()=>fn(s),[s]),d=react.useMemo(()=>mn(s),[s]),u=ge(),f=ie(u),y=ie(ut(u)),p=ke(t),c=pl(p,e.consultId),{pets:v}=St(),b=Oe(v,e.petId),C=c.summary,E=C?.approvedByName??e.clinicianName,h=Kr(E),S=b&&e.clinicianName?Se(F.visitTitleTemplate,{pet:b,vet:e.clinicianName}):Ue(Wt(b)),w=[si(e.scheduledAt),E].filter(Boolean).join(" \xB7 "),R=tr(v,e.petId),x=r&&R!==null?()=>r({petRef:R,petName:b,vetName:E??null}):void 0;return jsxRuntime.jsxs("div",{style:{...a.screen,...l},"data-testid":"televet-visit-summary",children:[jsxRuntime.jsx("div",{style:{...a.topBar,...a.topBarStart},children:jsxRuntime.jsx("button",{type:"button",onClick:n,style:a.textButton,"data-testid":"televet-visit-summary-back",children:Ty})}),jsxRuntime.jsxs("div",{style:d.headMain,children:[jsxRuntime.jsx(f,{style:a.pageTitle,children:S}),w?jsxRuntime.jsx("p",{style:d.meta,children:w}):null]}),c.status==="loading"?jsxRuntime.jsxs("div",{role:"progressbar","aria-label":U.loading,"aria-busy":"true",style:a.skeletons,"data-testid":"televet-visit-summary-loading",children:[jsxRuntime.jsx(ve,{height:96}),jsxRuntime.jsx(ve,{height:96})]}):c.status==="absent"?null:c.status==="pending"?jsxRuntime.jsx("div",{role:"status",style:a.notice,"data-testid":"televet-visit-summary-pending",children:jsxRuntime.jsx("p",{style:a.noticeTitle,children:U.summaryPending})}):c.status==="error"||C===null?jsxRuntime.jsxs("div",{role:"alert",style:{...a.notice,...a.noticeDanger},"data-testid":"televet-visit-summary-error",children:[jsxRuntime.jsx("p",{style:a.noticeTitle,children:U.loadFailed}),jsxRuntime.jsx(B,{label:U.retry,kind:"secondary",fullWidth:false,onPress:c.retry})]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[C.findingsText.trim().length>0?jsxRuntime.jsxs("section",{style:a.panel,children:[jsxRuntime.jsx(y,{style:a.panelTitle,children:Ue(Se(U.sawTitleTemplate,{vet:h}))}),jsxRuntime.jsxs("div",{style:a.panelHeader,children:[jsxRuntime.jsx("span",{style:d.label,children:U.summaryLabel}),jsxRuntime.jsx("span",{style:{...a.pill,...a.pillLine},children:Ue(Se(U.fromVetTemplate,{vet:h}))})]}),jsxRuntime.jsx("p",{style:d.body,children:C.findingsText})]}):null,C.nextStepsText.trim().length>0||C.actionItems.length>0?jsxRuntime.jsxs("section",{style:a.panel,"data-testid":"televet-visit-summary-plan",children:[jsxRuntime.jsxs("div",{style:a.panelHeader,children:[jsxRuntime.jsx(y,{style:a.panelTitle,children:Ue(Se(U.planTitleTemplate,{pet:Wt(b)}))}),jsxRuntime.jsx("span",{style:a.pill,children:U.wordForWord})]}),C.nextStepsText.trim().length>0?jsxRuntime.jsx("p",{style:d.body,children:C.nextStepsText}):null,C.actionItems.length>0?jsxRuntime.jsx("ol",{style:d.plan,children:C.actionItems.map((T,I)=>jsxRuntime.jsxs("li",{style:d.planItem,children:[jsxRuntime.jsx("b",{style:d.planNumber,children:String(I+1).padStart(2,"0")}),jsxRuntime.jsx("span",{style:d.body,children:`\u201C${T}\u201D`})]},`${String(I)}-${T}`))}):null]}):null,C.medications.length>0?jsxRuntime.jsxs("section",{style:a.panel,"data-testid":"televet-visit-summary-medications",children:[jsxRuntime.jsx(y,{style:a.panelTitle,children:U.fromThisVisitTitle}),jsxRuntime.jsx("ul",{style:a.list,children:C.medications.map((T,I)=>jsxRuntime.jsxs("li",{style:{...a.row,...I===0?a.rowFirst:null},children:[jsxRuntime.jsx("p",{style:a.rowTitle,children:hy(T)}),T.sig?jsxRuntime.jsx("p",{style:a.rowMeta,children:T.sig}):null]},`${String(I)}-${T.drug}`))})]}):null,E||x?jsxRuntime.jsxs("section",{style:a.panel,"data-testid":"televet-visit-summary-vet",children:[E?jsxRuntime.jsx("p",{style:a.panelTitle,children:E}):null,C.credentialsText?jsxRuntime.jsx("p",{style:a.rowMeta,children:C.credentialsText}):null,x?jsxRuntime.jsx(B,{label:Ue(Se(U.messageVetTemplate,{vet:h})),kind:"secondary",fullWidth:false,onPress:x,testID:"televet-visit-summary-message"}):null]}):null,i?jsxRuntime.jsx(B,{label:U.bookFollowUp,fullWidth:false,onPress:i,testID:"televet-visit-summary-book"}):null]}),c.status==="ready"&&C!==null?jsxRuntime.jsx("p",{style:a.footnote,"data-testid":"televet-visit-summary-footnote",children:Se(U.summaryFootnoteTemplate,{vet:h})}):null]})}o(Tl,"TelevetVisitSummaryScreen");function hy(e){return [e.drug,e.strength].filter(Boolean).join(" ")}o(hy,"medicationTitle");var Ty="Back";function Sl(e){let{consult:t,onRescheduled:n,onCancel:r,controller:i,style:l,testID:s}=Kt(e,["onRescheduled","onCancel"]),a=Y(),d=ke(i),u=wn(t?.clinicianId??null,d),f=In(d),y=No(t?.consultId??null,d),[p,c]=react.useState(null),[v,b]=react.useState(null),{pets:C}=St(),E=M(),h=react.useMemo(()=>ky(E),[E]),S=ie(ge()),w=react.useCallback(T=>{c(null),f.mutate(T.slotId,{onSuccess:o(()=>{y.mutate(T.slotId,{onSuccess:o(I=>n?.(I),"onSuccess"),onError:o(I=>c(yt(I).kind==="unavailable"?"unavailable":"failed"),"onError")});},"onSuccess"),onError:o(I=>c(yt(I).kind==="unavailable"?"unavailable":"taken"),"onError")});},[f,y,n]),R=f.isPending||y.isPending;if(!at())return jsxRuntime.jsx("div",{style:{...a.stepFill,...l},"data-testid":"televet-reschedule-copy-unapproved"});if(!t)return jsxRuntime.jsx("div",{role:"progressbar","aria-label":m.loading.consult,"aria-busy":"true",style:{...a.list,...l},"data-testid":"televet-reschedule-loading",children:[0,1].map(T=>jsxRuntime.jsx(ve,{height:48},T))});let x=Oe(C,t.petId);return jsxRuntime.jsxs("section",{style:{...a.screen,...l},"aria-label":m.rescheduleNavTitle,"data-testid":s??"televet-reschedule",children:[jsxRuntime.jsxs("div",{style:h.bar,children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>r?.(),disabled:R,"aria-label":m.rescheduleKeepLabel,style:h.ring,"data-testid":"televet-reschedule-keep",children:jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}),jsxRuntime.jsx("p",{style:h.label,children:m.rescheduleStepLabel})]}),jsxRuntime.jsxs("div",{style:h.head,children:[jsxRuntime.jsx(S,{style:h.title,children:H(m.rescheduleTitleTemplate,{pet:x??m.petFallback})}),jsxRuntime.jsxs("p",{style:h.now,"data-testid":"televet-reschedule-now",children:[jsxRuntime.jsx("span",{style:h.nowPill,children:m.rescheduleNowLabel}),jsxRuntime.jsx("s",{children:en(t.scheduledAt)})]})]}),p==="taken"?jsxRuntime.jsx(ae,{message:m.slotTaken}):null,p==="failed"?jsxRuntime.jsx(ae,{message:m.rescheduleFailed}):null,p==="unavailable"?jsxRuntime.jsx(ae,{message:m.bookingPausedTitle,testID:"televet-reschedule-unavailable"}):null,u.enabled?u.isPending?jsxRuntime.jsx("div",{role:"progressbar","aria-label":m.loading.slots,"aria-busy":"true",style:a.list,"data-testid":"televet-reschedule-slots-loading",children:[0,1,2].map(T=>jsxRuntime.jsx(ve,{height:48},T))}):u.isError?jsxRuntime.jsx(le,{title:m.slotsErrorTitle,actionLabel:m.retryCta,onAction:()=>u.refetch(),testID:"televet-reschedule-slots-error"}):(u.data??[]).length===0?jsxRuntime.jsx("div",{"data-testid":"televet-reschedule-empty",children:jsxRuntime.jsx(le,{title:m.noSlotsTitle})}):jsxRuntime.jsx(Yn,{slots:u.data??[],busySlotId:R?f.variables:null,onPick:T=>{c(null),b(T);},selectedSlot:v,dayGroupLabel:m.dayLegend,timeGroupLabel:m.timeHeading,periodLabels:{morning:m.timeMorning,afternoon:m.timeAfternoon,evening:m.timeEvening},timeLegendTemplate:m.timeLegendTemplate,rowTestIdPrefix:"televet-reschedule-slot",testID:"televet-reschedule-slots"}):jsxRuntime.jsx("div",{"data-testid":"televet-reschedule-paused",children:jsxRuntime.jsx(le,{title:m.bookingPausedTitle})}),v?jsxRuntime.jsx("div",{style:h.footer,children:jsxRuntime.jsx(B,{label:R?m.rescheduleMoving:H(m.rescheduleMoveTemplate,{when:$s(v.startsAt)}),size:"lg",loading:R,onPress:()=>w(v),testID:"televet-reschedule-move"})}):null]})}o(Sl,"EverfurTelevetReschedule");function ky(e){let t=Ie(e),{space:n,type:r}=e;return {bar:{display:"flex",alignItems:"center",gap:14,paddingBottom:n.lg},ring:{width:44,height:44,flexShrink:0,display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:t.line,backgroundColor:t.surface,color:t.ink,cursor:"pointer",boxSizing:"border-box"},label:{margin:0,...k(e,"monoBold"),color:t.muted,fontSize:12,letterSpacing:"0.08em",textTransform:"uppercase"},head:{display:"flex",flexDirection:"column",gap:n.md,paddingBottom:n.md},title:{margin:0,...k(e,"medium"),color:t.ink,fontSize:Ge(e,"heading",30),lineHeight:1.1,letterSpacing:"-0.03em"},now:{margin:0,display:"flex",flexWrap:"wrap",alignItems:"center",gap:10,...k(e,"regular"),color:t.muted,fontSize:r.size.body},nowPill:{display:"inline-flex",alignItems:"center",height:24,padding:"0 10px",borderRadius:999,borderStyle:"solid",borderWidth:1.5,borderColor:t.line,...k(e,"monoBold"),color:t.muted,fontSize:11.5,letterSpacing:"0.08em",textTransform:"uppercase"},footer:{paddingTop:n.lg,paddingBottom:n.lg,flexShrink:0}}}o(ky,"makeLook");function xl(e){let t=e.visitRef?.trim()??"";return t.length>0?Object.freeze({name:"visit",visitRef:t,intent:e.intent??null}):kl}o(xl,"televetScreenForRequest");var kl=Object.freeze({name:"home"}),Ry=Object.freeze({name:"visits"}),_y=Object.freeze({name:"booking"});function wy(e,t){switch(t.type){case "push":return Object.freeze({stack:Object.freeze([...e.stack,t.screen])});case "pop":return e.stack.length<=1?e:Object.freeze({stack:Object.freeze(e.stack.slice(0,-1))});case "land":return e.stack[0]?.name!=="home"?e:Object.freeze({stack:Object.freeze([t.screen,...e.stack.slice(1)])});default:return e}}o(wy,"navReducer");function xu(e){let{style:t,renderPending:n,className:r,...i}=Kt(e,["onExit","onBooked","onAddPet","onRequestLocation","onFindEmergencyVet"]);return jsxRuntime.jsx(ds,{capability:"televet",style:t,...r!==void 0?{className:r}:{},...n?{renderPending:n}:{},children:jsxRuntime.jsx(Iy,{...i,...t!==void 0?{style:t}:{}})})}o(xu,"EverfurTelevetFlow");function Iy({petRef:e,usState:t,controller:n,onBooked:r,onExit:i,onAddPet:l,onPickMedia:s,onAddToCalendar:a,onConfirmDiscard:d,onRequestLocation:u,locationStatus:f,primaryVet:y,onFindEmergencyVet:p,onTriageReason:c,historyMode:v="memory",canJoinInApp:b=false,renderUnavailable:C,initialScreen:E,headingLevel:h,style:S}){let w=Y(),[R,x]=react.useReducer(wy,E??kl,X=>Object.freeze({stack:Object.freeze([X])})),T=R.stack[R.stack.length-1]??kl,I=R.stack.length,_=react.useRef(I),P=I<_.current;react.useEffect(()=>{_.current=I;},[I]);let[A,V]=react.useState(0),j=react.useCallback(()=>V(X=>X+1),[]),ee=react.useRef(0),G=react.useRef(I);G.current=I,react.useEffect(()=>{if(v!=="browser"||typeof window>"u")return;let X=o(Be=>{let ct=Be.state?.efTelevet;typeof ct=="number"&&ct<G.current&&(ee.current=Math.max(0,ee.current-1),x({type:"pop"}));},"onPopState");return window.addEventListener("popstate",X),()=>window.removeEventListener("popstate",X)},[v]);let K=react.useCallback(X=>{v==="browser"&&typeof window<"u"&&(ee.current+=1,window.history.pushState({efTelevet:G.current+1},"")),x({type:"push",screen:X});},[v]),L=react.useCallback(()=>{if(v==="browser"&&typeof window<"u"&&ee.current>0){ee.current-=1,window.history.go(-1);return}x({type:"pop"});},[v]),oe=react.useCallback(()=>C?C():jsxRuntime.jsx("div",{style:w.list,"data-testid":"televet-unavailable",children:at()?jsxRuntime.jsx(le,{title:m.bookingPausedTitle}):null}),[C,w.list]),se=react.useCallback(()=>{I>1?L():i?.();},[I,L,i]),me=react.useCallback(X=>x({type:"land",screen:X==="visits"?Ry:_y}),[]),be=jsxRuntime.jsx(il,{...e!==void 0?{petRef:e}:{},...t!==void 0?{usState:t}:{},...n?{controller:n}:{},onBooked:X=>{j(),r?.(X);},onExit:se,...l?{onAddPet:l}:{},...s?{onPickMedia:s}:{},...a?{onAddToCalendar:a}:{},...d?{onConfirmDiscard:d}:{},...u?{onRequestLocation:u}:{},...f?{locationStatus:f}:{},...y?{primaryVet:y}:{},...p?{onFindEmergencyVet:p}:{},...c?{onTriageReason:c}:{},canJoinInApp:b,renderUnavailable:oe,...h!==void 0?{headingLevel:h}:{},...S?{style:S}:{}}),$e=jsxRuntime.jsx(bl,{...n?{controller:n}:{},revision:A,isRoot:I<=1,returnedTo:P,onJoin:(X,Be)=>K({name:"call",consultId:X.consultId,clinicianName:X.clinicianName,petName:Be}),onReschedule:X=>K({name:"reschedule",consult:X}),onBook:()=>K({name:"booking"}),onBack:se,onOpenThread:X=>K({name:"thread",target:X}),onOpenSummary:X=>K({name:"summary",consult:X}),...S?{style:S}:{}});switch(T.name){case "home":return jsxRuntime.jsx(Ay,{controller:n,onLand:me,style:S});case "booking":return be;case "visits":case "visit":return $e;case "reschedule":return jsxRuntime.jsx(Sl,{consult:T.consult,...n?{controller:n}:{},onRescheduled:()=>{j(),L();},onCancel:()=>L(),...S?{style:S}:{}});case "call":return jsxRuntime.jsx(sl,{consultId:T.consultId,...n?{controller:n}:{},...T.clinicianName!==void 0?{clinicianName:T.clinicianName}:{},...T.petName!==void 0?{petName:T.petName}:{},onLeave:()=>{j(),se();},...S?{style:S}:{}});case "thread":return jsxRuntime.jsx(hl,{petRef:T.target.petRef,petName:T.target.petName,vetName:T.target.vetName,...T.target.ownerCanStart!==void 0?{ownerCanStart:T.target.ownerCanStart}:{},...n?{controller:n}:{},onBack:()=>{j(),se();},onBook:()=>K({name:"booking"}),...S?{style:S}:{}});case "summary":{let X=T.consult;return jsxRuntime.jsx(Tl,{consult:X,...n?{controller:n}:{},onBack:se,onMessageVet:Be=>K({name:"thread",target:Be}),onBook:()=>K({name:"booking"}),...S?{style:S}:{}})}default:return ir(T)}}o(Iy,"TelevetFlowBody");function Ay({controller:e,onLand:t,style:n}){let r=Y(),i=ke(e),l=$a(i);return react.useEffect(()=>{l!=="pending"&&t(l);},[l,t]),jsxRuntime.jsxs("div",{role:"progressbar","aria-label":F.loading,"aria-busy":"true",style:{...r.screen,...r.list,...n},"data-testid":"televet-landing-loading",children:[jsxRuntime.jsx(ve,{height:72}),jsxRuntime.jsx(ve,{height:72})]})}o(Ay,"TelevetLandingScreen");var Pl=xu;var Ly=Object.freeze({escapeAtKeyDown:true});function Ny({request:e,onClose:t,onAddToCalendar:n,onPickMedia:r}){let i=M(),l=react.useMemo(()=>Fy(i),[i]),s=react.useMemo(()=>Fd(),[]),a=react.useCallback(()=>{s.dispatch()||t();},[s,t]),{dialogRef:d,onKeyDown:u,onCancel:f}=Fr(true,a,void 0,Ly),y=react.useMemo(()=>xl(e),[e]);return jsxRuntime.jsx("dialog",{ref:d,onKeyDown:u,onCancel:f,"aria-label":m.visit.title,"data-testid":"everfur-televet-dialog",style:l,children:jsxRuntime.jsx(ji.Provider,{value:s,children:jsxRuntime.jsx(Pl,{...e.petRef!==void 0?{petRef:e.petRef}:{},...e.usState!==void 0?{usState:e.usState}:{},initialScreen:y,onExit:t,...n?{onAddToCalendar:n}:{},...r?{onPickMedia:r}:{},canJoinInApp:Ur(),historyMode:"memory"})})})}o(Ny,"EverfurTelevetDialog");function Fy(e){let{color:t,radius:n,space:r}=e;return {position:"fixed",inset:0,boxSizing:"border-box",width:"100%",maxWidth:640,height:"100%",maxHeight:"100%",margin:"0 auto",padding:`${String(r.lg)}px 0`,border:0,borderRadius:n.lg,display:"flex",flexDirection:"column",overflowY:"auto",backgroundColor:t.surface,color:t.text.primary}}o(Fy,"dialogStyle");exports.BACK_LABEL=fm;exports.CANCELLATION_POLICY_VERSION_MAX=yr;exports.CANCEL_REASON_MAX=vr;exports.CONSULT_KINDS=va;exports.CONSULT_MINUTES=Mt;exports.CONSULT_STATUSES=ga;exports.EverfurTelevet=Pl;exports.EverfurTelevetBooking=il;exports.EverfurTelevetDialog=Ny;exports.EverfurTelevetFlow=xu;exports.EverfurTelevetReschedule=Sl;exports.MEDIA_REFS_MAX=gr;exports.NO_MEDIA_SHORTFALL=Ct;exports.REASON_TEXT_MAX=vt;exports.TELEVET_BOOKING_BASE=st;exports.TELEVET_BOOKING_COPY=Q;exports.TELEVET_BOOKING_COPY_WEB=m;exports.TELEVET_BOOKING_STEPS=Zt;exports.TELEVET_CONSULT_PAGE_LIMIT=Fa;exports.TELEVET_EMERGENCY_EXITS_WEB=qt;exports.TELEVET_JOIN_CLOSES_MINUTES_AFTER=Mo;exports.TELEVET_JOIN_OPENS_MINUTES_BEFORE=Fo;exports.TELEVET_MESSAGE_THREADS_PATH=hr;exports.TERMINAL_CONSULT_STATUSES=Sn;exports.TelevetBookedScreen=zi;exports.TelevetBookingChrome=Ki;exports.TelevetCancelVisitForm=ml;exports.TelevetClinicianEmptyState=Rd;exports.TelevetConsentCheckbox=Gn;exports.TelevetDayStrip=Ji;exports.TelevetEarlyEmergency=Pd;exports.TelevetEmergencyExits=Vt;exports.TelevetEntitlementInterestState=$f;exports.TelevetIntakeMedia=Yi;exports.TelevetJoinScreen=sl;exports.TelevetMediaDropNotice=$n;exports.TelevetSlotPicker=Yn;exports.TelevetStateInterestAction=Oi;exports.TelevetSummaryCard=el;exports.TelevetSummaryRow=Pt;exports.TelevetVetThreadScreen=hl;exports.TelevetVisitSummaryScreen=Tl;exports.TelevetVisitsScreen=bl;exports.VET_MESSAGES_COPY=U;exports.VET_MESSAGE_CONTENT_MAX=To;exports.VET_MESSAGE_PAGE_DEFAULT=En;exports.VET_MESSAGE_PAGE_MAX=wa;exports.attestation=ai;exports.canConfirm=Fn;exports.canManageTelevetVisit=zo;exports.createTelevetBookingController=Ro;exports.currentStep=ii;exports.emptyTelevetDraft=Ms;exports.formatVisitRange=ef;exports.formatWhen=Hs;exports.formatWhenWithDay=Dn;exports.hasPreviousStep=ni;exports.initialTelevetBookingState=ti;exports.isHoldExpired=Ar;exports.isMediaShortfallEmpty=yi;exports.isSkipped=Nn;exports.isTelevetBookingCopyReady=at;exports.isVetMessagesDark=kn;exports.isVetThreadVetFirst=ko;exports.isWellFormedStateCode=Ne;exports.mediaShortfallFromUnsentPicks=Or;exports.parseVetCallCredential=fo;exports.splitTelevetVisits=On;exports.televetBookingKey=li;exports.televetBookingReducer=ri;exports.televetBookingRefusal=yt;exports.televetCancelCall=Na;exports.televetConsultCalendarKey=Nd;exports.televetConsultCall=Tr;exports.televetDaysFromSlots=zr;exports.televetEmptyRosterCause=pi;exports.televetEmptyRosterView=ci;exports.televetHoldCall=Oa;exports.televetJoinCall=La;exports.televetJoinDecision=Vo;exports.televetJoinOpensAtMs=Do;exports.televetMediaShortfallLines=gi;exports.televetRescheduleCall=Ba;exports.televetScreenForRequest=xl;exports.televetThreadMessagesCall=ho;exports.televetThreadReadCall=Ra;exports.televetVisitSummaryCall=_a;exports.useEarlyTriage=xi;exports.useStateInterest=Pi;exports.useTelevetBookConsult=Lo;exports.useTelevetBookingAvailable=pp;exports.useTelevetBookingController=ke;exports.useTelevetBookingEntitlement=Io;exports.useTelevetCancellationPolicy=_n;exports.useTelevetClinicians=Ao;exports.useTelevetHoldSlot=In;exports.useTelevetJoin=al;exports.useTelevetNextSlot=Oo;exports.useTelevetRescheduleConsult=No;exports.useTelevetSlots=wn;exports.useTelevetStatePolicy=Rn;exports.useVetThread=cl;exports.useVetThreads=ul;exports.useVisitSummary=pl;exports.validateBookingBody=Ma;exports.vetCallJoinReason=mo;exports.vetCallJoinRefusal=yo;exports.vetThreadPetRef=tr;exports.withUnsentPicks=of;
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";var react=require("react"),zod=require("zod"),jsxRuntime=require("react/jsx-runtime");function assertNever(x){throw new Error(`assertNever: unhandled discriminated-union member ${JSON.stringify(x)}`)}function errorFrame(fields){/* @__PURE__ */
|
|
3
|
+
return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fields.retryable,wireMessage:fields.wireMessage,synthesized:fields.synthesized,lastEventId:fields.lastEventId,serverRequestId:null})}function reportHostFailure(error){let globalConsole=globalThis.console;try{globalConsole?.error?.("[everfur] A host callback threw; the SDK ignored it.",error)}catch{}}function isThenable(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&typeof value.then=="function"}function callHost(fn,...args){if(typeof fn=="function")try{let result=fn(...args);return isThenable(result)&&Promise.resolve(result).then(void 0,reportHostFailure),result}catch(error){reportHostFailure(error);return}}var GUARDED=/* @__PURE__ */new WeakMap;function guardHost(fn){if(typeof fn!="function")return;let cached=GUARDED.get(fn);if(cached!==void 0)return cached;let guarded=(...args)=>{callHost(fn,...args)};return GUARDED.set(fn,guarded),guarded}function guardHostProps(props,names){let guarded=null;for(let name of names){let fn=props[name];typeof fn=="function"&&(guarded??={...props},guarded[name]=guardHost(fn))}return guarded??props}function callHostAsync(fn,...args){let started;try{started=fn(...args)}catch(error){return reportHostFailure(error),Promise.resolve({ok:false,error:error})}return Promise.resolve(started).then(value=>({ok:true,value:value}),error=>({ok:false,error:error}))}var DRAFT=s=>s,PLACEHOLDER_MARKERS=["[PLACEHOLDER","[PLAN NAME]","[LINK]","[Last]","TODO","TBD"];function isPlaceholderCopy(value){return PLACEHOLDER_MARKERS.some(m=>value.toUpperCase().includes(m.toUpperCase()))}function fill(template,slots){let out=template;for(let[key,value]of Object.entries(slots))out=out.split(`{${key}}`).join(value);return out}var TELEVET_BOOKING_COPY=/* @__PURE__ */Object.freeze({stateBlockedTitle:DRAFT("Not available in this state yet"),noCliniciansTitle:DRAFT("No vets available right now"),noCliniciansBody:DRAFT("Nobody is free in your area at the moment. This changes through the day."),noCliniciansRetryCta:DRAFT("Check again"),noCliniciansRegionBody:DRAFT("Video visits have to be with a vet licensed in your state, and we don’t have one there yet."),yourVetTitle:DRAFT("Your vet"),licensedPillTemplate:DRAFT("Licensed in {state}"),reviewsLabel:DRAFT("reviews"),rescheduleFromTemplate:DRAFT("Moving your visit on {when}"),rescheduleFailed:DRAFT("That did not move. Your original time is unchanged."),rescheduleStepLabel:DRAFT("Reschedule"),rescheduleTitleTemplate:DRAFT("Pick a new time for {pet}"),rescheduleNowLabel:DRAFT("Now"),rescheduleMoveTemplate:DRAFT("Move to {when}"),rescheduleMoving:DRAFT("Moving…"),rescheduleKeepLabel:DRAFT("Keep the visit as it is"),keepExistingCta:DRAFT("Keep my current time"),bookingPausedTitle:DRAFT("Booking is not available right now."),slotsErrorTitle:DRAFT("Could not load times"),noSlotsTitle:DRAFT("No times available"),nextOpeningTemplate:DRAFT("Next opening across our vets: {when}"),seeOtherVetsCta:DRAFT("See other vets"),retryCta:DRAFT("Try again"),holdExpired:DRAFT("That time is no longer held. Pick another."),slotTaken:DRAFT("That time was just taken. Pick another."),reasonPlaceholder:DRAFT("What is going on with your pet?"),reasonTooLong:DRAFT("That is too long. Please shorten it."),shareRecordsOff:DRAFT("Share health records with this vet"),confirmNotEntitled:DRAFT("A Pro membership is needed to book a video visit."),confirmFailed:DRAFT("That did not book. Try again."),checkAvailabilityCta:DRAFT("Check availability"),stateInterest:/* @__PURE__ */Object.freeze({cta:DRAFT("Add me to the list"),submitting:DRAFT("Adding you to the list…"),joinedTitle:DRAFT("You are on the list"),joinedBody:DRAFT("We will let you know when this changes."),failed:DRAFT("That did not save. Try again.")}),media:/* @__PURE__ */Object.freeze({droppedTemplate:DRAFT("{n} attachment did not upload."),droppedPluralTemplate:DRAFT("{n} attachments did not upload."),refusedSizeTemplate:DRAFT("{n} attachment was too large to send."),refusedSizePluralTemplate:DRAFT("{n} attachments were too large to send."),refusedTypeTemplate:DRAFT("{n} attachment is a file type that cannot be sent."),refusedTypePluralTemplate:DRAFT("{n} attachments are file types that cannot be sent."),refusedUnreadableTemplate:DRAFT("{n} attachment could not be read."),refusedUnreadablePluralTemplate:DRAFT("{n} attachments could not be read.")}),navTitle:DRAFT("Book a visit"),petFallback:"your pet",whereTitleTemplate:DRAFT("Where will {pet} be during the visit?"),whereLeadTemplate:DRAFT("Pick where {pronoun} be for the call, not where you live. It decides what the vet can do."),wherePronounFallback:"they’ll",whereFormLabelTemplate:DRAFT("Where {pet} will be"),whereLegend:DRAFT("State"),wherePrescribeMetaTemplate:DRAFT("Video visit, and prescriptions if {pet} needs them"),whereWellnessMeta:DRAFT("Wellness visit: advice and a care plan, no prescriptions yet"),whereAnotherState:DRAFT("Another state"),whereWhichState:DRAFT("Which state?"),whereLicensedTemplate:DRAFT("{vet} is licensed in {state}, so a prescription can be part of {pet}’s plan."),whereAskEveryTime:DRAFT("We ask every time: state rules require it."),issuesTitleTemplate:DRAFT("What’s going on with {pet}?"),issuesHint:DRAFT("Pick as many as you like."),issuesFormLabel:DRAFT("What’s going on"),issuesLegend:DRAFT("Main issues"),issuesPickOne:DRAFT("Pick at least one. Not sure? Choose Something else."),otherIssue:DRAFT("Something else"),describeHeadingTemplate:DRAFT("Tell {vet} what you’re seeing"),describeFieldLabel:DRAFT("What you’re seeing"),emergencyCheck:/* @__PURE__ */Object.freeze({titleTemplate:DRAFT("Is {pet} doing any of these right now?"),lead:DRAFT("A scheduled video visit isn’t the right place for an emergency."),signs:/* @__PURE__ */Object.freeze([DRAFT("Trouble breathing, or blue, grey or very pale gums"),DRAFT("Collapsed, or can’t stand up"),DRAFT("A seizure"),DRAFT("Ate something toxic, like grapes, chocolate, xylitol or medicine"),DRAFT("A swollen, hard belly, or retching with nothing coming up"),DRAFT("Bleeding that won’t stop"),DRAFT("Straining to pee with nothing coming out")]),formLabel:DRAFT("Emergency check"),legend:DRAFT("Any of these now?"),noneCta:DRAFT("No, none of these"),someCta:DRAFT("Yes, at least one")}),timeHeading:DRAFT("Pick a time"),timeMorning:DRAFT("Morning"),timeAfternoon:DRAFT("Afternoon"),timeEvening:DRAFT("Evening"),timeLegendTemplate:DRAFT("Time on {day}"),dayLegend:DRAFT("Day"),reviewHeading:DRAFT("Does this look right?"),summaryWhere:DRAFT("Where"),changeCta:DRAFT("Change"),whereAttestTemplate:DRAFT("{pet} and I will be in {state} during the visit."),attestBoth:DRAFT("Check both boxes to book the visit."),bookedStepLabel:DRAFT("Booked"),bookedTitleTemplate:DRAFT("You’re booked with {vet}"),bookedLeadTemplate:DRAFT("{when}, for {pet}."),footnote:DRAFT("Video visits are with a licensed veterinarian. Prescriptions where allowed, starting with California. In an emergency, go to the nearest emergency animal hospital."),rescheduleNavTitle:DRAFT("Change your visit"),close:DRAFT("Close"),continueCta:DRAFT("Continue"),petSelectTitle:DRAFT("Who is this visit for?"),addPetCta:DRAFT("Add a pet"),addAnotherPetCta:DRAFT("Add another pet"),locationUnknownTitle:DRAFT("We need your location to find a vet"),locationUnknownBody:DRAFT("Turn on location for Everfur, then try again."),locationUnknownCta:DRAFT("Allow location"),locationBlockedTitle:DRAFT("Location is turned off"),locationBlockedBody:DRAFT("Everfur needs your location to match you with a vet in your area."),locationBlockedCta:DRAFT("Open Settings"),locationUnavailableTitle:DRAFT("We could not read your location"),locationUnavailableBody:DRAFT("Try again in a moment."),stateAttestTemplate:DRAFT("I confirm my pet and I are in {state} right now."),describeHeading:DRAFT("Tell the vet what you are seeing"),describeHelpLong:DRAFT("When it started, what’s changed, what you’ve tried. Anything helps."),addPhotoCta:DRAFT("Add photos or videos"),addPhotoMeta:DRAFT("Optional. A close-up in good light helps."),removePhotoLabel:DRAFT("Remove photo"),summaryPet:DRAFT("Pet"),summaryVet:DRAFT("Vet"),summaryWhen:DRAFT("When"),summaryLength:DRAFT("Length"),summaryReason:DRAFT("About"),summaryLengthTemplate:DRAFT("{n} minutes"),confirmCta:DRAFT("Book the visit"),confirmBusy:DRAFT("Booking…"),bookedTitle:DRAFT("You are booked."),addToCalendarCta:DRAFT("Add to calendar"),doneCta:DRAFT("Done"),booked:/* @__PURE__ */Object.freeze({remindPromise:DRAFT("We will notify you 30 minutes before."),summaryPromise:DRAFT("{pet}'s summary goes to the vet ahead of the call."),recordsPromiseTemplate:DRAFT("{pet}’s records and your notes go to {vet} ahead of the call."),recordsPhotoPromiseTemplate:DRAFT("{pet}’s records, your notes and the photo go to {vet} ahead of the call."),stepsLabel:DRAFT("What happens next"),joinPromise:DRAFT("Join right here in the app. No links to hunt for."),backToPet:DRAFT("Back to {pet}"),calendarAdded:DRAFT("Added to your calendar"),calendarFailedBody:DRAFT("That did not save to your calendar.")}),chrome:/* @__PURE__ */Object.freeze({closeHint:DRAFT("Closes without saving"),discardTitle:DRAFT("Leave without booking?"),discardBody:DRAFT("Your answers will not be saved."),discardConfirmCta:DRAFT("Leave"),discardKeepCta:DRAFT("Keep going"),noPetsTitle:DRAFT("No pets on this account"),loadFailedTitle:DRAFT("Could not load"),retryCta:DRAFT("Try again")}),emergency:/* @__PURE__ */Object.freeze({bannerTitle:DRAFT("This can’t wait for a scheduled visit."),keepBookingCta:DRAFT("I’ve handled this, continue booking"),lede:DRAFT("What you’re describing is the kind of thing vets want to see in person, now. Call one of these first."),ledeWithoutExits:DRAFT("What you’re describing is the kind of thing vets want to see in person, now."),exitPrimaryVetTitle:DRAFT("Call {petName}’s regular vet"),exitFindErTitle:DRAFT("Find an emergency vet near you"),startCallHint:DRAFT("Starts a phone call"),poisonControl:DRAFT("ASPCA Animal Poison Control"),poisonControlDetail:DRAFT("(888) 426-4435 · a fee may apply"),poisonControlTel:"tel:+18884264435"}),visit:/* @__PURE__ */Object.freeze({title:DRAFT("Your visit")}),loading:/* @__PURE__ */Object.freeze({pets:"Loading pets. Nothing to read yet.",clinicians:"Loading vets. Nothing to read yet.",slots:"Loading times. Nothing to read yet.",consult:"Loading your visit. Nothing to read yet.",progressTemplate:"Step {step} of {total}"})});function televetBookingCopyValues(node=TELEVET_BOOKING_COPY){return typeof node=="string"?[node]:typeof node!="object"||node===null?[]:Object.values(node).flatMap(v=>televetBookingCopyValues(v))}function isTelevetBookingCopyReady(){return televetBookingCopyValues().every(value=>value.trim().length>0&&!isPlaceholderCopy(value))}var TELEVET_EMERGENCY_EXITS_WEB=/* @__PURE__ */Object.freeze({findEmergencyVet:TELEVET_BOOKING_COPY.emergency.exitFindErTitle,poisonControl:TELEVET_BOOKING_COPY.emergency.poisonControl,poisonControlDetail:TELEVET_BOOKING_COPY.emergency.poisonControlDetail,poisonControlTel:TELEVET_BOOKING_COPY.emergency.poisonControlTel}),TELEVET_BOOKING_COPY_WEB=/* @__PURE__ */Object.freeze({...TELEVET_BOOKING_COPY,close:"Close booking",reasonPlaceholder:"She's been scratching her left ear a lot this week...",backLabel:"Back"});var CONTRACT_RETRYABILITY=/* @__PURE__ */Object.freeze([
|
|
4
|
+
/* @__PURE__ */Object.freeze({wireCode:"AccessDeniedException",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
5
|
+
/* @__PURE__ */Object.freeze({wireCode:"AuthorizationException",envelope:"http_envelope",httpStatus:401,retryable:false}),
|
|
6
|
+
/* @__PURE__ */Object.freeze({wireCode:"ConflictException",envelope:"http_envelope",httpStatus:409,retryable:true}),
|
|
7
|
+
/* @__PURE__ */Object.freeze({wireCode:"DAILY_QUOTA_EXCEEDED",envelope:"http_envelope",httpStatus:429,retryable:true}),
|
|
8
|
+
/* @__PURE__ */Object.freeze({wireCode:"FILE_TOO_LARGE",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
9
|
+
/* @__PURE__ */Object.freeze({wireCode:"IDEMPOTENCY_KEY_IN_FLIGHT",envelope:"http_envelope",httpStatus:409,retryable:true}),
|
|
10
|
+
/* @__PURE__ */Object.freeze({wireCode:"IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
11
|
+
/* @__PURE__ */Object.freeze({wireCode:"INVALID_CONTENT_TYPE",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
12
|
+
/* @__PURE__ */Object.freeze({wireCode:"InternalFailureException",envelope:"http_envelope",httpStatus:500,retryable:true}),
|
|
13
|
+
/* @__PURE__ */Object.freeze({wireCode:"MethodNotAllowedException",envelope:"http_envelope",httpStatus:405,retryable:false}),
|
|
14
|
+
/* @__PURE__ */Object.freeze({wireCode:"NotImplementedException",envelope:"http_envelope",httpStatus:501,retryable:false}),
|
|
15
|
+
/* @__PURE__ */Object.freeze({wireCode:"PaymentRequiredException",envelope:"http_envelope",httpStatus:402,retryable:false}),
|
|
16
|
+
/* @__PURE__ */Object.freeze({wireCode:"ResourceNotFoundException",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
17
|
+
/* @__PURE__ */Object.freeze({wireCode:"ServiceUnavailableException",envelope:"http_envelope",httpStatus:503,retryable:true}),
|
|
18
|
+
/* @__PURE__ */Object.freeze({wireCode:"TIER_UPGRADE_REQUIRED",envelope:"http_envelope",httpStatus:402,retryable:false}),
|
|
19
|
+
/* @__PURE__ */Object.freeze({wireCode:"ThrottlingException",envelope:"http_envelope",httpStatus:429,retryable:true}),
|
|
20
|
+
/* @__PURE__ */Object.freeze({wireCode:"ValidationException",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
21
|
+
/* @__PURE__ */Object.freeze({wireCode:"accessDenied",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
22
|
+
/* @__PURE__ */Object.freeze({wireCode:"access_denied",envelope:"oauth_error",httpStatus:302,retryable:false}),
|
|
23
|
+
/* @__PURE__ */Object.freeze({wireCode:"attachment_unreadable",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
24
|
+
/* @__PURE__ */Object.freeze({wireCode:"authExpired",envelope:"http_envelope",httpStatus:401,retryable:true}),
|
|
25
|
+
/* @__PURE__ */Object.freeze({wireCode:"authRejected",envelope:"http_envelope",httpStatus:401,retryable:false}),
|
|
26
|
+
/* @__PURE__ */Object.freeze({wireCode:"consent_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
27
|
+
/* @__PURE__ */Object.freeze({wireCode:"consent_required",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
28
|
+
/* @__PURE__ */Object.freeze({wireCode:"consent_scope_wrong_route",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
29
|
+
/* @__PURE__ */Object.freeze({wireCode:"device_cipher_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),
|
|
30
|
+
/* @__PURE__ */Object.freeze({wireCode:"email_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
31
|
+
/* @__PURE__ */Object.freeze({wireCode:"event_cursor_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
32
|
+
/* @__PURE__ */Object.freeze({wireCode:"event_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
33
|
+
/* @__PURE__ */Object.freeze({wireCode:"event_payload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
34
|
+
/* @__PURE__ */Object.freeze({wireCode:"event_type_not_available",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
35
|
+
/* @__PURE__ */Object.freeze({wireCode:"event_type_unknown",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
36
|
+
/* @__PURE__ */Object.freeze({wireCode:"idempotency_key_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
37
|
+
/* @__PURE__ */Object.freeze({wireCode:"idempotency_key_required",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
38
|
+
/* @__PURE__ */Object.freeze({wireCode:"idempotency_key_reused",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
39
|
+
/* @__PURE__ */Object.freeze({wireCode:"insufficientCapability",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
40
|
+
/* @__PURE__ */Object.freeze({wireCode:"insufficient_scope",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
41
|
+
/* @__PURE__ */Object.freeze({wireCode:"internal_error",envelope:"sse_frame",httpStatus:200,retryable:false}),
|
|
42
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalidRequest",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
43
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_client",envelope:"oauth_error",httpStatus:401,retryable:false}),
|
|
44
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_client_metadata",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
45
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_grant",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
46
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_redirect_uri",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
47
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_request",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
48
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_scope",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
49
|
+
/* @__PURE__ */Object.freeze({wireCode:"invalid_target",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
50
|
+
/* @__PURE__ */Object.freeze({wireCode:"mcp_connection_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
51
|
+
/* @__PURE__ */Object.freeze({wireCode:"mcp_request_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
52
|
+
/* @__PURE__ */Object.freeze({wireCode:"mcp_request_gone",envelope:"http_envelope",httpStatus:410,retryable:false}),
|
|
53
|
+
/* @__PURE__ */Object.freeze({wireCode:"mcp_request_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
54
|
+
/* @__PURE__ */Object.freeze({wireCode:"not_found",envelope:"sse_frame",httpStatus:200,retryable:false}),
|
|
55
|
+
/* @__PURE__ */Object.freeze({wireCode:"partner_visit_link_conflict",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
56
|
+
/* @__PURE__ */Object.freeze({wireCode:"partner_visit_owner_only",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
57
|
+
/* @__PURE__ */Object.freeze({wireCode:"partner_visit_pet_already_mapped",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
58
|
+
/* @__PURE__ */Object.freeze({wireCode:"payload_too_large",envelope:"http_envelope",httpStatus:413,retryable:false}),
|
|
59
|
+
/* @__PURE__ */Object.freeze({wireCode:"petRefInUse",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
60
|
+
/* @__PURE__ */Object.freeze({wireCode:"pet_health_list_removals_unconfirmed",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
61
|
+
/* @__PURE__ */Object.freeze({wireCode:"pet_health_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
62
|
+
/* @__PURE__ */Object.freeze({wireCode:"pet_not_registered",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
63
|
+
/* @__PURE__ */Object.freeze({wireCode:"provider_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
64
|
+
/* @__PURE__ */Object.freeze({wireCode:"rateLimited",envelope:"http_envelope",httpStatus:429,retryable:true}),
|
|
65
|
+
/* @__PURE__ */Object.freeze({wireCode:"record_species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
66
|
+
/* @__PURE__ */Object.freeze({wireCode:"record_subject_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
67
|
+
/* @__PURE__ */Object.freeze({wireCode:"record_upload_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
68
|
+
/* @__PURE__ */Object.freeze({wireCode:"records_consent_required",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
69
|
+
/* @__PURE__ */Object.freeze({wireCode:"sandbox_only",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
70
|
+
/* @__PURE__ */Object.freeze({wireCode:"session_required",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
71
|
+
/* @__PURE__ */Object.freeze({wireCode:"share_limit_reached",envelope:"http_envelope",httpStatus:429,retryable:false}),
|
|
72
|
+
/* @__PURE__ */Object.freeze({wireCode:"slow_down",envelope:"oauth_error",httpStatus:429,retryable:true}),
|
|
73
|
+
/* @__PURE__ */Object.freeze({wireCode:"species_unsupported",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
74
|
+
/* @__PURE__ */Object.freeze({wireCode:"tenant_filter_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
75
|
+
/* @__PURE__ */Object.freeze({wireCode:"tenant_has_no_capabilities",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
76
|
+
/* @__PURE__ */Object.freeze({wireCode:"tenant_resource_not_found",envelope:"http_envelope",httpStatus:404,retryable:false}),
|
|
77
|
+
/* @__PURE__ */Object.freeze({wireCode:"tenant_surface_not_enabled",envelope:"http_envelope",httpStatus:409,retryable:false}),
|
|
78
|
+
/* @__PURE__ */Object.freeze({wireCode:"timeout",envelope:"sse_frame",httpStatus:200,retryable:true}),
|
|
79
|
+
/* @__PURE__ */Object.freeze({wireCode:"token_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
80
|
+
/* @__PURE__ */Object.freeze({wireCode:"unavailable",envelope:"sse_frame",httpStatus:200,retryable:true}),
|
|
81
|
+
/* @__PURE__ */Object.freeze({wireCode:"unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),
|
|
82
|
+
/* @__PURE__ */Object.freeze({wireCode:"unsupported_grant_type",envelope:"oauth_error",httpStatus:400,retryable:false}),
|
|
83
|
+
/* @__PURE__ */Object.freeze({wireCode:"unsupported_response_type",envelope:"oauth_error",httpStatus:302,retryable:false}),
|
|
84
|
+
/* @__PURE__ */Object.freeze({wireCode:"verify_mint_rate_limited",envelope:"http_envelope",httpStatus:429,retryable:true}),
|
|
85
|
+
/* @__PURE__ */Object.freeze({wireCode:"verify_mint_refused",envelope:"http_envelope",httpStatus:403,retryable:false}),
|
|
86
|
+
/* @__PURE__ */Object.freeze({wireCode:"verify_mint_unavailable",envelope:"http_envelope",httpStatus:503,retryable:true}),
|
|
87
|
+
/* @__PURE__ */Object.freeze({wireCode:"verify_user_ref_invalid",envelope:"http_envelope",httpStatus:422,retryable:false}),
|
|
88
|
+
/* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_empty",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
89
|
+
/* @__PURE__ */Object.freeze({wireCode:"webhook_endpoint_update_invalid",envelope:"http_envelope",httpStatus:400,retryable:false}),
|
|
90
|
+
/* @__PURE__ */Object.freeze({wireCode:"webhook_url_rejected",envelope:"http_envelope",httpStatus:400,retryable:false})]);/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(row2=>row2.wireCode));var NORMALIZED_FOLD=/* @__PURE__ */Object.freeze({ValidationException:"validationFailed",AuthorizationException:"authRejected",PaymentRequiredException:"paymentRequired",AccessDeniedException:"accessDenied",ResourceNotFoundException:"resourceNotFound",ConflictException:"conflict",ThrottlingException:"rateLimited",InternalFailureException:"internalError",NotImplementedException:"notImplemented",ServiceUnavailableException:"serviceUnavailable",MethodNotAllowedException:"validationFailed",authExpired:"authExpired",unavailable:"serviceUnavailable",session_required:"sessionRequired",accessDenied:"accessDenied",invalidRequest:"sdkUpdateRequired",authRejected:"authRejected",rateLimited:"rateLimited",insufficientCapability:"accessDenied",event_cursor_invalid:"validationFailed",event_filter_invalid:"validationFailed",event_payload_invalid:"validationFailed",event_type_unknown:"validationFailed",idempotency_key_invalid:"validationFailed",idempotency_key_required:"validationFailed",idempotency_key_reused:"idempotencyConflict",payload_too_large:"validationFailed",webhook_url_rejected:"validationFailed",webhook_endpoint_update_empty:"validationFailed",webhook_endpoint_update_invalid:"validationFailed",event_type_not_available:"conflict",record_subject_not_found:"resourceNotFound",records_consent_required:"conflict",record_species_unsupported:"validationFailed",record_upload_invalid:"validationFailed",FILE_TOO_LARGE:"validationFailed",INVALID_CONTENT_TYPE:"validationFailed",attachment_unreadable:"validationFailed",provider_unsupported:"validationFailed",token_invalid:"validationFailed",device_cipher_unavailable:"serviceUnavailable",email_invalid:"validationFailed",consent_required:"validationFailed",consent_invalid:"validationFailed",consent_scope_wrong_route:"validationFailed",IDEMPOTENCY_KEY_IN_FLIGHT:"idempotencyInFlight",IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST:"idempotencyConflict",DAILY_QUOTA_EXCEEDED:"quotaExceeded",TIER_UPGRADE_REQUIRED:"paymentRequired",not_found:"conversationNotFound",timeout:"streamTimeout",internal_error:"internalError",invalid_request:"validationFailed",invalid_client:"authRejected",invalid_grant:"authRejected",unsupported_grant_type:"validationFailed",invalid_scope:"validationFailed",invalid_target:"validationFailed",invalid_redirect_uri:"validationFailed",invalid_client_metadata:"validationFailed",unsupported_response_type:"validationFailed",access_denied:"accessDenied",slow_down:"rateLimited",mcp_request_not_found:"resourceNotFound",mcp_request_gone:"resourceNotFound",mcp_connection_not_found:"resourceNotFound",mcp_request_conflict:"conflict",sandbox_only:"accessDenied",tenant_has_no_capabilities:"conflict",verify_mint_refused:"accessDenied",verify_mint_rate_limited:"rateLimited",verify_mint_unavailable:"serviceUnavailable",verify_user_ref_invalid:"validationFailed",insufficient_scope:"accessDenied",tenant_filter_invalid:"validationFailed",tenant_resource_not_found:"resourceNotFound",tenant_surface_not_enabled:"conflict",pet_health_species_unsupported:"validationFailed",pet_health_list_removals_unconfirmed:"validationFailed",petRefInUse:"conflict",share_limit_reached:"conflict",pet_not_registered:"resourceNotFound",species_unsupported:"validationFailed",partner_visit_owner_only:"accessDenied",partner_visit_link_conflict:"conflict",partner_visit_pet_already_mapped:"conflict"}),CONTRACT_ERROR_ROWS=/* @__PURE__ */Object.freeze(CONTRACT_RETRYABILITY.map(generated=>/* @__PURE__ */Object.freeze({wireCode:generated.wireCode,envelope:generated.envelope,retryable:generated.retryable,normalized:NORMALIZED_FOLD[generated.wireCode]}))),BY_KEY=new Map(CONTRACT_ERROR_ROWS.map(r=>[r.envelope+r.wireCode.toUpperCase(),r])),ENVELOPE_LOOKUP_ORDER=/* @__PURE__ */Object.freeze(["http_envelope",...[...new Set(CONTRACT_ERROR_ROWS.map(r=>r.envelope))].filter(e=>e!=="http_envelope").sort()]);function contractErrorFor(wireCode,envelope){if(typeof wireCode!="string")return;let key=wireCode.trim().toUpperCase();if(key.length!==0)for(let candidate of[envelope??"http_envelope",...ENVELOPE_LOOKUP_ORDER]){let row2=BY_KEY.get(candidate+key);if(row2)return row2}}var CATEGORY_OF=/* @__PURE__ */Object.freeze({authExpired:"authentication",authRejected:"authentication",sessionRequired:"authentication",identitySignatureRequired:"authentication",accessDenied:"authorization",paymentRequired:"entitlement",quotaExceeded:"rateLimit",rateLimited:"rateLimit",validationFailed:"invalidRequest",sdkUpdateRequired:"invalidRequest",conversationNotFound:"notFound",petNotFound:"notFound",resourceNotFound:"notFound",conflict:"conflict",idempotencyConflict:"conflict",idempotencyInFlight:"conflict",streamTimeout:"connection",streamIncomplete:"connection",upstreamLlmTimeout:"connection",serviceUnavailable:"connection",internalError:"server",notImplemented:"server",mediaUploadFailed:"media",moderationBlocked:"policy",unknown:"unknown"});function categoryFor(code){return CATEGORY_OF[code]}function fromWire(wire){let contractRow=contractErrorFor(wire);if(contractRow)return contractRow.normalized;let upper=(wire??"").trim().toUpperCase(),canonical=upper.replace(/[^A-Z0-9]/g,"");if(canonical==="AUTHREJECTED")return"authRejected";if(upper.startsWith("AUTH"))return"authExpired";switch(canonical){case"DAILYQUOTAEXCEEDED":case"QUOTAEXCEEDED":return"quotaExceeded";case"RATELIMITED":case"TOOMANYREQUESTS":case"TELEVETRATELIMITED":return"rateLimited";case"IDEMPOTENCYKEYCONFLICT":case"IDEMPOTENCYCONFLICT":return"idempotencyConflict";case"ACCESSDENIED":case"FORBIDDEN":return"accessDenied";case"IDENTITYSIGNATUREREQUIRED":return"identitySignatureRequired";case"NOTFOUND":case"CONVERSATIONNOTFOUND":return"conversationNotFound";case"PETNOTFOUND":return"petNotFound";case"TIMEOUT":case"STREAMTIMEOUT":return"streamTimeout";case"MEDIAUPLOADFAILED":case"UNRECOGNIZEDVIDEOFORMAT":case"FILETOOSMALL":return"mediaUploadFailed";case"MODERATIONBLOCKED":return"moderationBlocked";case"UPSTREAMLLMTIMEOUT":return"upstreamLlmTimeout";case"INTERNALERROR":case"INTERNALSERVERERROR":return"internalError";case"STREAMINCOMPLETE":case"CHATSTREAMINCOMPLETE":return"streamIncomplete";case"INVALIDANALYSISTYPE":case"INVALIDUPLOADPURPOSE":return"unknown";default:return"unknown"}}var AUTO_RETRYABLE_CODES=/* @__PURE__ */new Set(["streamTimeout","rateLimited","internalError","upstreamLlmTimeout","streamIncomplete"]);function isAutoRetryable(code){return AUTO_RETRYABLE_CODES.has(code)}var RETRYABLE_CONTRACT_CODES=/* @__PURE__ */new Set(["serviceUnavailable","conflict","idempotencyInFlight"]);function isRetryableCode(code){return isAutoRetryable(code)||RETRYABLE_CONTRACT_CODES.has(code)}var BACKOFF_BASE_MS=500,BACKOFF_CAP_MS=8e3,MAX_RETRY_ATTEMPTS=4;function backoffDelayMs(attempt,rng=Math.random){let bounded=Math.max(0,attempt),ceiling=Math.min(BACKOFF_BASE_MS*2**bounded,BACKOFF_CAP_MS);return Math.floor(rng()*ceiling)}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:"Something in that request was not right. Check the details and try again.",sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,unknown:"Something went wrong. Please try again."});function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row2=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),error={code:code,category:categoryFor(code),retryable:opts?.retryable??isRetryableCode(code),displayMessage:userFacingError(code)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row2);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function ok(value,warning){/* @__PURE__ */
|
|
91
|
+
return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
|
|
92
|
+
return Object.freeze({ok:false,error:error})}var EverfurConfigError=class _EverfurConfigError extends Error{constructor(kind,message){super(message),this.name="EverfurConfigError",this.kind=kind,Object.setPrototypeOf(this,_EverfurConfigError.prototype)}};function authHeaders(auth){let headers={};return auth.mode==="personalized"?headers.authorization=`Bearer ${auth.token}`:headers["x-everfur-partner-key"]=auth.publishableKey,auth.userRef&&(headers["x-everfur-user-ref"]=auth.userRef),auth.sessionId&&(headers["x-everfur-session-id"]=auth.sessionId),headers}function withAuthHeaders(req,auth){return{...req,headers:{...stripAuthHeaders(req.headers),...authHeaders(auth)}}}function stripAuthHeaders(headers){if(!headers)return{};let out={};for(let[key,value]of Object.entries(headers)){let lower=key.toLowerCase();lower==="authorization"||lower==="x-everfur-partner-key"||(out[key]=value)}return out}async function authedSend(req,ctx){if(ctx.mode==="anonymous")return ctx.transport.request(withAuthHeaders(req,{mode:"anonymous",publishableKey:ctx.publishableKey,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));let token;try{token=await ctx.identity.currentToken()}catch{return err(authRejectedError())}let first=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:token,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));if(first.ok||first.error.httpStatus!==401)return first;let refreshed;try{refreshed=await ctx.identity.currentToken({forceRefresh:!0})}catch{return err(authRejectedError())}let retry=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:refreshed,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));return!retry.ok&&retry.error.httpStatus===401?err(authRejectedError(retry.error.httpStatus)):retry}function authRejectedError(httpStatus){return makeEverfurError("authRejected",{retryable:false,...httpStatus!==void 0?{httpStatus:httpStatus}:{}})}function networkError(cause){return makeEverfurError("internalError",{retryable:true,wireMessage:describeCause(cause)})}function describeCause(cause){return cause instanceof Error?cause.message:typeof cause=="string"?cause:"network request failed"}var FUNNEL_UNARY_TIMEOUT_MS=3e4,RETRY_OVERRIDE_MAX_MS=BACKOFF_CAP_MS*2,IDEMPOTENCY_HEADER="idempotency-key",MUTATING_METHODS=/* @__PURE__ */new Set(["POST","PUT","PATCH","DELETE"]),NOOP_OBSERVER=/* @__PURE__ */Object.freeze({onEvent(){}}),defaultFunnelTimers=/* @__PURE__ */Object.freeze({setTimeout:(handler,ms)=>setTimeout(handler,ms),clearTimeout:handle=>clearTimeout(handle),now:()=>Date.now()});function seededIdempotencyKey(seed){let safe=seed.trim().replace(/[^A-Za-z0-9_.:-]/g,"-");return safe.length===0?null:`efs_${safe}`.slice(0,128)}function createRequestFunnel(deps){let observer=deps.observer??NOOP_OBSERVER,timers=deps.timers??defaultFunnelTimers,rng=deps.rng??Math.random,sleep=deps.sleep??((ms,signal)=>delayAbortable(ms,timers,signal)),ceiling=deps.maxAttempts??MAX_RETRY_ATTEMPTS,timeoutMs=deps.unaryTimeoutMs??FUNNEL_UNARY_TIMEOUT_MS,mintKey=deps.newIdempotencyKey??defaultIdempotencyKeyFactory(),emit=event=>{try{observer.onEvent(event)}catch{}};async function send(call,req,opts){let perCallMaxAttempts=opts?.maxAttempts,maxAttempts=Math.max(1,perCallMaxAttempts??ceiling),idempotent=opts?.idempotent??MUTATING_METHODS.has(req.method),seeded=opts?.idempotencyKey===void 0?null:seededIdempotencyKey(opts.idempotencyKey),idempotencyKey=idempotent?seeded??mintKey():null,base=assembleHeaders(req,idempotencyKey),attempt=0;for(;;){let stamp2=extra=>/* @__PURE__ */Object.freeze({call:call,method:req.method,path:req.path,attempt:attempt,...idempotencyKey?{idempotencyKey:idempotencyKey}:{},...extra});emit(stamp2({phase:"attempt"}));let deadline=boundedSignal(timeoutMs,timers),merged=mergeSignals(deadline.signal,req.signal),settled;try{settled=await authedSend({...base,signal:merged.signal},deps.auth)}catch(cause){settled=err(networkError(cause))}finally{merged.dispose(),deadline.cancel()}if(settled.ok)return emit(stamp2({phase:"settled",ok:true,reason:"ok"})),settled;let error=settled.error,decision=decideRetry(error,attempt,{maxAttempts:maxAttempts,rng:rng,now:timers.now(),aborted:req.signal?.aborted===true,...perCallMaxAttempts!==void 0?{perCallMaxAttempts:perCallMaxAttempts}:{},...deps.errorPolicy!==void 0?{policy:deps.errorPolicy}:{}}),settledEvent={ok:false,code:error.code,reason:decision.reason,...error.httpStatus!==void 0?{httpStatus:error.httpStatus}:{},...error.requestId!==void 0?{requestId:error.requestId}:{}};if(!decision.retry)return emit(stamp2({phase:"settled",...settledEvent})),err(error);if(emit(stamp2({phase:"retry",...settledEvent,delayMs:decision.delayMs})),await sleep(decision.delayMs,req.signal),req.signal?.aborted===true)return emit(stamp2({phase:"settled",...settledEvent,reason:"aborted"})),err(error);attempt+=1}}async function authorize(req){return withAuthHeaders(req,await resolveDeviceAuth(deps.auth))}async function*stream(call,req,signal){emit(
|
|
93
|
+
/* @__PURE__ */Object.freeze({call:call,phase:"stream.open",method:req.method,path:req.path,attempt:0}));try{yield*deps.auth.transport.stream(req,signal)}catch{yield errorFrame({code:"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null})}}/* @__PURE__ */
|
|
94
|
+
return Object.freeze({send:send,authorize:authorize,stream:stream})}function assembleHeaders(req,idempotencyKey){let headers={};for(let[key,value]of Object.entries(req.headers??{}))key.toLowerCase()!==IDEMPOTENCY_HEADER&&(headers[key]=value);return idempotencyKey!==null&&(headers["Idempotency-Key"]=idempotencyKey),{...req,headers:headers}}function defaultIdempotencyKeyFactory(){let counter=0;return()=>`efk_${Date.now().toString(36)}_${(counter++).toString(36)}_${Math.random().toString(36).slice(2,12)}`}var POLICY_MAX_ATTEMPTS_CAP=10;function decideRetry(error,attempt,ctx){if(ctx.aborted)return{retry:false,reason:"aborted"};let throttle=throttleKind(error);if(throttle==="quota")return{retry:false,reason:"daily-quota-exhausted"};if(throttle!=="burst"&&!isAutoRetryable(error.code))return{retry:false,reason:"terminal-code"};let reason=throttle==="burst"?"burst-throttle":"retryable-code";if((()=>{if(ctx.policy===void 0)return false;try{return!ctx.policy.shouldRetry(error.code,attempt)}catch{return false}})())return{retry:false,reason:"terminal-code"};let policyCeiling=()=>{if(ctx.policy===void 0)return null;let raw;try{raw=ctx.policy.maxAttempts(error.code)}catch{return null}return typeof raw!="number"||!Number.isFinite(raw)?null:Math.max(1,Math.min(POLICY_MAX_ATTEMPTS_CAP,Math.floor(raw)))},ceiling=ctx.perCallMaxAttempts??policyCeiling()??ctx.maxAttempts;if(attempt+1>=ceiling)return{retry:false,reason:"attempts-exhausted"};let override=retryOverrideMs(error,ctx.now);return override!==null?override>RETRY_OVERRIDE_MAX_MS?{retry:false,reason:"server-reset-beyond-budget"}:{retry:true,reason:reason,delayMs:override}:{retry:true,reason:reason,delayMs:backoffDelayMs(attempt,ctx.rng)}}function throttleKind(error){let code=error.code==="unknown"?fromWire(rawWireCode(error.raw)):error.code;return code==="quotaExceeded"?"quota":code==="rateLimited"||error.httpStatus===429?"burst":null}function retryOverrideMs(error,now){let at=findResetsAt(error.raw);if(at!==null){let delta=at-now;return delta>0?delta:0}let wait=findRetryAfterSeconds(error.raw);return wait===null?null:Math.round(wait*1e3)}function findRetryAfterSeconds(raw){for(let scope of candidateScopes(raw)){let value=scope.retry_after_seconds;if(typeof value=="number"&&Number.isFinite(value)&&value>=0)return value}return null}function findResetsAt(raw){for(let scope of candidateScopes(raw)){let value=scope.resets_at,parsed=parseInstantMs(value);if(parsed!==null)return parsed}return null}function candidateScopes(raw){if(!isRecord(raw))return[];let out=[raw];for(let nested of["error","detail"]){let value=raw[nested];isRecord(value)&&out.push(value)}return out}function parseInstantMs(value){if(typeof value=="number"&&Number.isFinite(value))return value<1e11?Math.round(value*1e3):Math.round(value);if(typeof value=="string"&&value.trim().length>0){let parsed=Date.parse(value);return Number.isFinite(parsed)?parsed:null}return null}function rawWireCode(raw){for(let scope of candidateScopes(raw)){let code=scope.code;if(typeof code=="string"&&code.length>0)return code}return null}function isRecord(value){return typeof value=="object"&&value!==null}async function resolveDeviceAuth(auth){return auth.mode==="anonymous"?{mode:"anonymous",publishableKey:auth.publishableKey,userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}:{mode:"personalized",token:await auth.identity.currentToken(),userRef:auth.userRef,...auth.sessionId?{sessionId:auth.sessionId}:{}}}function boundedSignal(ms,timers){let ctrl=new AbortController,handle=timers.setTimeout(()=>ctrl.abort(),ms);return{signal:ctrl.signal,cancel:()=>timers.clearTimeout(handle)}}function mergeSignals(deadline,caller){let noop=()=>{};if(!caller)return{signal:deadline,dispose:noop};let ctrl=new AbortController;if(deadline.aborted||caller.aborted)return ctrl.abort(),{signal:ctrl.signal,dispose:noop};let onAbort=()=>ctrl.abort();return deadline.addEventListener("abort",onAbort,{once:true}),caller.addEventListener("abort",onAbort,{once:true}),{signal:ctrl.signal,dispose:()=>{deadline.removeEventListener("abort",onAbort),caller.removeEventListener("abort",onAbort)}}}function delayAbortable(ms,timers,signal){return ms<=0||signal?.aborted===true?Promise.resolve():new Promise(resolve=>{let handle=timers.setTimeout(()=>{signal?.removeEventListener("abort",onAbort),resolve()},ms),onAbort=()=>{timers.clearTimeout(handle),resolve()};signal?.addEventListener("abort",onAbort,{once:true})})}var TELEVET_ATTACHMENT_MIME_TYPES=/* @__PURE__ */Object.freeze(["image/jpeg","image/png","image/webp","image/heic","image/heif","application/pdf","text/csv","video/mp4","video/quicktime"]),TELEVET_ATTACHMENT_MAX_BYTES=25*1024*1024,TELEVET_ATTACHMENT_VIDEO_MAX_BYTES=200*1024*1024,SUFFIX_TYPES=[[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".png","image/png"],[".webp","image/webp"],[".heic","image/heic"],[".heif","image/heif"],[".pdf","application/pdf"],[".csv","text/csv"],[".mp4","video/mp4"],[".mov","video/quicktime"]];function televetAttachmentContentType(filename,mimeType){let direct=(mimeType??"").trim().toLowerCase();if(direct==="image/jpg")return"image/jpeg";if(TELEVET_ATTACHMENT_MIME_TYPES.includes(direct))return direct;if(direct.length>0)return null;let name=filename.toLowerCase();return SUFFIX_TYPES.find(([suffix])=>name.endsWith(suffix))?.[1]??null}function televetAttachmentRefusal(pick2){let type=televetAttachmentContentType(pick2.filename,pick2.mimeType);if(type===null)return"type";if(!Number.isFinite(pick2.fileSize)||pick2.fileSize<=0)return"unreadable";let ceiling=type.startsWith("video/")?TELEVET_ATTACHMENT_VIDEO_MAX_BYTES:TELEVET_ATTACHMENT_MAX_BYTES;return pick2.fileSize<=ceiling?null:"size"}function parseTelevetAttachmentPolicy(raw){if(typeof raw!="object"||raw===null)return null;let o=raw,str4=v=>typeof v=="string"&&v.length>0?v:null,num3=v=>typeof v=="number"&&Number.isFinite(v)?v:null,uploadUrl=str4(o.upload_url),s3Key=str4(o.s3_key);if(uploadUrl===null||s3Key===null)return null;let fields={},rawFields=o.upload_fields;if(typeof rawFields=="object"&&rawFields!==null)for(let[key,value]of Object.entries(rawFields))typeof value=="string"&&(fields[key]=value);/* @__PURE__ */
|
|
95
|
+
return Object.freeze({upload_id:str4(o.upload_id)??"",upload_url:uploadUrl,upload_fields:/* @__PURE__ */Object.freeze(fields),expires_in_seconds:num3(o.expires_in_seconds)??0,max_content_length:num3(o.max_content_length)??TELEVET_ATTACHMENT_MAX_BYTES,s3_key:s3Key,purpose:str4(o.purpose)})}function wireCodeOf(raw){if(typeof raw!="object"||raw===null)return null;let scopes=[raw,raw.detail,raw.error];for(let scope of scopes)if(!(typeof scope!="object"||scope===null))for(let key of["error","code"]){let value=scope[key];if(typeof value=="string"&&value.length>0)return value}return null}function televetAttachmentInitiateFailure(error){if(error.httpStatus===404)return"dark";if(error.httpStatus===400){let code=wireCodeOf(error.raw);if(code==="FILE_TOO_LARGE")return"size";if(code==="INVALID_CONTENT_TYPE")return"type"}return"failed"}var TELEVET_BOOKING_NOT_LIVE="televet_booking_not_live";function televetBookingNotLiveError(status){return makeEverfurError("conflict",{retryable:false,reasonCode:TELEVET_BOOKING_NOT_LIVE,wireMessage:`the booking was answered with a consult whose status is ${status}, which is not a live visit`})}var TELEVET_BOOKING_KEY_REUSED="televet_booking_key_reused",KEY_REUSED_WIRE_CODE="IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST";function foldTelevetBookingKeyReused(error){return error.httpStatus!==409||error.reasonCode===TELEVET_BOOKING_KEY_REUSED||details(error)?.code!==KEY_REUSED_WIRE_CODE?error:makeEverfurError(error.code,{retryable:false,httpStatus:409,...error.requestId!==void 0?{requestId:error.requestId}:{},wireCode:KEY_REUSED_WIRE_CODE,reasonCode:TELEVET_BOOKING_KEY_REUSED,...error.wireMessage!==void 0?{wireMessage:error.wireMessage}:{},raw:error.raw})}function details(error){let raw=error.raw;if(typeof raw!="object"||raw===null)return null;let direct=raw,nested=direct.detail??direct.error;return typeof nested=="object"&&nested!==null?nested:direct}function categoriesOf(error){let raw=details(error)?.categories;return Array.isArray(raw)?/* @__PURE__ */Object.freeze(raw.filter(c=>typeof c=="string")):/* @__PURE__ */Object.freeze([])}function retryAfterOf(error){let raw=details(error)?.retry_after_seconds;return typeof raw=="number"&&Number.isFinite(raw)&&raw>0?raw:null}function messageOf(error){let wire=error.wireMessage;if(typeof wire=="string"&&wire.trim().length>0)return wire.trim();let raw=details(error)?.message;return typeof raw=="string"&&raw.trim().length>0?raw.trim():null}function codeOf(error){let reason=error.reasonCode;if(typeof reason=="string"&&reason.length>0)return reason;let raw=details(error),code=raw?.code??raw?.error_code;return typeof code=="string"&&code.length>0?code:null}function televetBookingRefusal(error){let status=error.httpStatus;if(status===402)/* @__PURE__ */return Object.freeze({kind:"not_entitled"});if(status===429||error.code==="rateLimited"||error.code==="quotaExceeded")/* @__PURE__ */
|
|
96
|
+
return Object.freeze({kind:"rate_limited",retryAfterSeconds:retryAfterOf(error),message:messageOf(error)});if(status===404)/* @__PURE__ */return Object.freeze({kind:"unavailable"});switch(codeOf(error)){case"televet_rate_limited":/* @__PURE__ */
|
|
97
|
+
return Object.freeze({kind:"rate_limited",retryAfterSeconds:retryAfterOf(error),message:messageOf(error)});case"televet_emergency_ack_required":/* @__PURE__ */
|
|
98
|
+
return Object.freeze({kind:"emergency",categories:categoriesOf(error)});case"televet_not_entitled":/* @__PURE__ */
|
|
99
|
+
return Object.freeze({kind:"not_entitled"});case"televet_slot_conflict":/* @__PURE__ */
|
|
100
|
+
return Object.freeze({kind:"slot_taken"});case"televet_hold_invalid":/* @__PURE__ */
|
|
101
|
+
return Object.freeze({kind:"slot_taken"});case TELEVET_BOOKING_NOT_LIVE:/* @__PURE__ */
|
|
102
|
+
return Object.freeze({kind:"slot_taken"});case TELEVET_BOOKING_KEY_REUSED:/* @__PURE__ */
|
|
103
|
+
return Object.freeze({kind:"slot_taken"});case"televet_clinician_cannot_prescribe":case"televet_clinician_unavailable":case"televet_clinician_not_bookable":/* @__PURE__ */
|
|
104
|
+
return Object.freeze({kind:"clinician_unavailable"});case"televet_membership_conflict":/* @__PURE__ */
|
|
105
|
+
return Object.freeze({kind:"not_entitled"});case"televet_registry_unavailable":/* @__PURE__ */
|
|
106
|
+
return Object.freeze({kind:"failed"})}/* @__PURE__ */
|
|
107
|
+
return Object.freeze({kind:"failed"})}function isSafeRoomUrl(url){try{return new URL(url.trim()).protocol==="https:"}catch{return false}}function isUsableRoomCredential(roomUrl,token){return isSafeRoomUrl(roomUrl)&&token.trim().length>0}function isRecord2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function wholeNumber(value,min){return typeof value=="number"&&Number.isInteger(value)&&value>=min?value:null}function parseCallLimits(wire){if(!isRecord2(wire))return null;let consultMinutes=wholeNumber(wire.consult_minutes,1),autoEndMinutes=wholeNumber(wire.auto_end_minutes,0),warnBeforeSeconds=wholeNumber(wire.warn_before_seconds,0);return consultMinutes===null||autoEndMinutes===null||warnBeforeSeconds===null?null:/* @__PURE__ */Object.freeze({consultMinutes:consultMinutes,autoEndMinutes:autoEndMinutes,warnBeforeSeconds:warnBeforeSeconds})}function parseVetCallCredential(wire){if(!isRecord2(wire))return null;let room=wire.room_url??wire.url,token=wire.token;if(typeof room!="string"||typeof token!="string"||!isUsableRoomCredential(room,token))return null;let notice=wire.recording_notice;/* @__PURE__ */
|
|
108
|
+
return Object.freeze({roomUrl:room.trim(),token:token,recordingNotice:typeof notice=="boolean"?notice:true,callLimits:parseCallLimits(wire.call_limits)})}function vetCallJoinReason(error){let reason=reasonOf(error.raw);return reason!==null&&reason.length>0?reason:null}function reasonOf(raw){if(!isRecord2(raw))return null;let nested=raw.detail??raw.error,reason=(isRecord2(nested)?nested:raw).reason;return typeof reason=="string"?reason:null}function vetCallJoinRefusal(error){if(error.httpStatus===404)return"unavailable";let reason=reasonOf(error.raw);return reason==="too_early"||reason==="too_late"||reason==="room_not_ready"?reason:reason!==null&&reason.startsWith("status_")?"not_joinable":"unknown"}var CONSULT_STATUSES=["scheduled","in_progress","awaiting_summary","completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"],TERMINAL_CONSULT_STATUSES=/* @__PURE__ */new Set(["completed","cancelled_owner","cancelled_ops","no_show_owner","no_show_vet"]),LIVE_CONSULT_STATUSES=/* @__PURE__ */new Set(["scheduled","in_progress","awaiting_summary"]);function isLiveConsult(consult){return LIVE_CONSULT_STATUSES.has(consult.status)}var CONSULT_KINDS=["wellness","prescription"],SLOT_MINUTES_MAX=60;function televetSlotMinutes(slot){let starts=Date.parse(slot.startsAt),ends=Date.parse(slot.endsAt);if(Number.isNaN(starts)||Number.isNaN(ends))return null;let minutes=Math.round((ends-starts)/6e4);return minutes>0?Math.min(minutes,SLOT_MINUTES_MAX):null}var CANCELLATION_POLICY_VERSION_MAX=64,REASON_TEXT_MAX=2e3,MEDIA_REFS_MAX=10;function isWellFormedStateCode(state){return typeof state=="string"&&/^[A-Za-z]{2}$/.test(state.trim())}function row(value){return typeof value=="object"&&value!==null?value:null}function str(value){return typeof value=="string"&&value.length>0?value:null}function trimmedOrNull(value){return typeof value=="string"&&value.trim().length>0?value.trim():null}function bool(value,fallback){return typeof value=="boolean"?value:fallback}function num(value){return typeof value=="number"&&Number.isFinite(value)?value:null}function closed(set,value){return typeof value=="string"&&set.includes(value)?value:"unknown"}function parseList(wire,parseRow){if(!Array.isArray(wire))/* @__PURE__ */return Object.freeze([]);let out=[];for(let item of wire){let parsed=parseRow(item);parsed!==null&&out.push(parsed)}/* @__PURE__ */
|
|
109
|
+
return Object.freeze(out)}function parseStatePolicy(wire,askedFor){let r=row(wire);return r===null?null:/* @__PURE__ */Object.freeze({state:str(r.state)??askedFor,wellnessAvailable:bool(r.wellness_available,false),prescriptionsAvailable:bool(r.prescriptions_available,false),cancellationPolicyText:trimmedOrNull(r.cancellation_policy_text)})}function parseCancellationPolicy(wire){let r=row(wire);if(r===null)return null;let summary=trimmedOrNull(r.summary),version=trimmedOrNull(r.version);return summary===null||version===null?null:/* @__PURE__ */Object.freeze({summary:summary,version:version})}function parseClinician(wire){let r=row(wire);if(r===null)return null;let clinicianId=str(r.clinician_id),displayName=str(r.display_name);return clinicianId===null||displayName===null?null:/* @__PURE__ */Object.freeze({clinicianId:clinicianId,displayName:displayName,credentials:trimmedOrNull(r.credentials_text),rating:num(r.rating),ratingCount:num(r.rating_count),bio:trimmedOrNull(r.bio),photoRef:str(r.photo_ref),licensedStates:parseList(r.licensed_states,item=>{let l=row(item),state=l===null?null:str(l.state);return state===null?null:/* @__PURE__ */Object.freeze({state:state,canPrescribe:bool(l?.can_prescribe,false)})})})}function parseSlot(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),startsAt=str(r.starts_at);return slotId===null||startsAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,startsAt:startsAt,endsAt:str(r.ends_at)??startsAt})}function parseTriageVerdict(wire){let r=row(wire);if(r===null)return null;let isEmergency=r.is_emergency===true,fallback=r.fallback===true;return isEmergency||fallback?/* @__PURE__ */Object.freeze({isEmergency:isEmergency,fallback:fallback}):r.is_emergency===false&&r.fallback===false?/* @__PURE__ */Object.freeze({isEmergency:false,fallback:false}):null}function parseSlotHold(wire){let r=row(wire);if(r===null)return null;let slotId=str(r.slot_id),expiresAt=str(r.hold_expires_at);return slotId===null||expiresAt===null?null:/* @__PURE__ */Object.freeze({slotId:slotId,expiresAt:expiresAt})}function parseConsult(wire){let r=row(wire);if(r===null)return null;let consultId=str(r.consult_id),scheduledAt=str(r.scheduled_at);return consultId===null||scheduledAt===null?null:/* @__PURE__ */Object.freeze({consultId:consultId,petId:str(r.pet_id)??"",clinicianId:str(r.clinician_id)??"",clinicianName:trimmedOrNull(r.display_name),reasonText:trimmedOrNull(r.reason_text),mediaRefs:parseList(r.media_refs,item=>str(item)),status:closed(CONSULT_STATUSES,r.status),kind:closed(CONSULT_KINDS,r.kind),scheduledAt:scheduledAt,emergencyFlagged:bool(r.emergency_flagged,false),hasRoom:str(r.meeting_url)!==null})}function parseBookingEntitlement(wire){let r=row(wire);/* @__PURE__ */
|
|
110
|
+
return Object.freeze({active:bool(r?.active,false)})}var CANCEL_REASON_MAX=240;function parseCancelReceipt(wire){let r=row(wire);if(r===null)return null;let feeCents=num(r.fee_cents);return feeCents===null||feeCents<0?null:/* @__PURE__ */Object.freeze({feeCents:feeCents,currency:str(r.currency)??"usd",feeRecorded:bool(r.fee_recorded,feeCents>0),summary:trimmedOrNull(r.summary)})}var BASE="/widget/v1/televet",TELEVET_MESSAGE_THREADS_PATH=`${BASE}/messages/threads`;function televetThreadMessagesCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/messages`}function televetThreadReadCall(petRef){return`${TELEVET_MESSAGE_THREADS_PATH}/${encodeURIComponent(petRef)}/read`}function televetVisitSummaryCall(consultId){return`${BASE}/consults/${encodeURIComponent(consultId)}/summary`}var VET_MESSAGE_CONTENT_MAX=4e3,VET_MESSAGE_PAGE_DEFAULT=50,VET_MESSAGE_PAGE_MAX=100,stamp=/* @__PURE__ */zod.z.string().min(1).refine(value=>!Number.isNaN(Date.parse(value))),optionalText=/* @__PURE__ */zod.z.string().nullish(),messageSchema=/* @__PURE__ */zod.z.object({message_id:/* @__PURE__ */zod.z.string().min(1),pet_ref:/* @__PURE__ */zod.z.string().min(1),role:/* @__PURE__ */zod.z.enum(["owner","vet","system"]),content:/* @__PURE__ */zod.z.string(),created_at:stamp,sender:/* @__PURE__ */zod.z.object({display_name:optionalText,specialty:optionalText}).nullish(),sender_display_name:optionalText,attachment_count:/* @__PURE__ */zod.z.number().int().nonnegative().nullish()}),threadSchema=/* @__PURE__ */zod.z.object({pet_ref:/* @__PURE__ */zod.z.string().min(1),last_message_at:stamp,unread_count:/* @__PURE__ */zod.z.number().int().nonnegative().nullish(),owner_can_start:/* @__PURE__ */zod.z.boolean().nullish(),last_message:/* @__PURE__ */messageSchema.nullish()}),medicationSchema=/* @__PURE__ */zod.z.object({drug:/* @__PURE__ */zod.z.string().nullish(),strength:optionalText,form:optionalText,sig:optionalText,quantity:/* @__PURE__ */zod.z.union([/* @__PURE__ */zod.z.string(),/* @__PURE__ */zod.z.number()]).nullish(),refills:/* @__PURE__ */zod.z.number().int().nonnegative().nullish()}).passthrough(),summarySchema=/* @__PURE__ */zod.z.object({consult_id:/* @__PURE__ */zod.z.string().min(1),findings_text:/* @__PURE__ */zod.z.string().nullish(),next_steps_text:/* @__PURE__ */zod.z.string().nullish(),medications:/* @__PURE__ */zod.z.array(/* @__PURE__ */zod.z.unknown()).nullish(),product_refs:/* @__PURE__ */zod.z.array(/* @__PURE__ */zod.z.string()).nullish(),action_items:/* @__PURE__ */zod.z.array(/* @__PURE__ */zod.z.string()).nullish(),approved_at:stamp,approved_by_display_name:optionalText,credentials_text:optionalText});function nonBlank(value){let trimmed=value?.trim()??"";return trimmed.length>0?trimmed:null}function toMessage(wire){let vet=wire.role==="vet";/* @__PURE__ */
|
|
111
|
+
return Object.freeze({messageId:wire.message_id,petRef:wire.pet_ref,role:wire.role,content:wire.content,createdAt:wire.created_at,senderName:vet?nonBlank(wire.sender?.display_name)??nonBlank(wire.sender_display_name):null,senderSpecialty:vet?nonBlank(wire.sender?.specialty):null,attachmentCount:wire.attachment_count??0})}function mapVetMessage(wire){let parsed=messageSchema.safeParse(wire);return parsed.success?toMessage(parsed.data):null}function mapVetMessages(wire){let parsed=zod.z.array(messageSchema).safeParse(wire);return parsed.success?/* @__PURE__ */Object.freeze(parsed.data.map(toMessage)):null}function mapVetThreads(wire){let parsed=zod.z.array(threadSchema).safeParse(wire);return parsed.success?/* @__PURE__ */Object.freeze(parsed.data.map(row2=>/* @__PURE__ */Object.freeze({petRef:row2.pet_ref,lastMessageAt:row2.last_message_at,unreadCount:row2.unread_count??0,ownerCanStart:row2.owner_can_start??true,lastMessage:row2.last_message?toMessage(row2.last_message):null}))):null}function toMedication(wire){let parsed=medicationSchema.safeParse(wire);if(!parsed.success)return null;let drug=nonBlank(parsed.data.drug);if(drug===null)return null;let quantity=parsed.data.quantity;/* @__PURE__ */
|
|
112
|
+
return Object.freeze({drug:drug,strength:nonBlank(parsed.data.strength),form:nonBlank(parsed.data.form),sig:nonBlank(parsed.data.sig),quantity:quantity==null?null:nonBlank(String(quantity)),refills:parsed.data.refills??null})}function mapVisitSummary(wire){let parsed=summarySchema.safeParse(wire);if(!parsed.success)return null;let s=parsed.data;/* @__PURE__ */
|
|
113
|
+
return Object.freeze({consultId:s.consult_id,findingsText:s.findings_text??"",nextStepsText:s.next_steps_text??"",medications:/* @__PURE__ */Object.freeze((s.medications??[]).map(toMedication).filter(m=>m!==null)),productRefs:/* @__PURE__ */Object.freeze([...s.product_refs??[]]),actionItems:/* @__PURE__ */Object.freeze((s.action_items??[]).filter(item=>item.trim().length>0)),approvedAt:s.approved_at,approvedByName:nonBlank(s.approved_by_display_name),credentialsText:nonBlank(s.credentials_text)})}function isVetMessagesDark(error){return error.httpStatus===404}function isVetThreadVetFirst(error){return error.httpStatus===409}function invalid(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function clampLimit(limit){return limit===void 0||!Number.isFinite(limit)?VET_MESSAGE_PAGE_DEFAULT:Math.min(VET_MESSAGE_PAGE_MAX,Math.max(1,Math.trunc(limit)))}function isStamp(value){return value.trim().length>0&&!Number.isNaN(Date.parse(value))}function safeTrack(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function createTelevetMessagesMethods(funnel,telemetry){return{async listVetThreads(signal){let res=await funnel.send("televet.messages.threads",{method:"GET",path:TELEVET_MESSAGE_THREADS_PATH,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetThreads(res.value);return parsed===null?unusable("the vet thread list was unreadable"):ok(parsed)},async listVetMessages(petRef,page={},signal){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");let before=page.before?.trim();if(before!==void 0&&before.length>0&&!isStamp(before))return invalid("before must be an ISO date-time");let res=await funnel.send("televet.messages.thread",{method:"GET",path:televetThreadMessagesCall(ref),query:{...before?{before:before}:{},limit:clampLimit(page.limit)},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVetMessages(res.value);return parsed===null?unusable("the vet thread page was unreadable"):ok(parsed)},async sendVetMessage(petRef,content){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(content.trim().length===0)return invalid("content must not be blank");if(content.length>VET_MESSAGE_CONTENT_MAX)return invalid(`content must be at most ${VET_MESSAGE_CONTENT_MAX} characters`);let res=await funnel.send("televet.messages.send",{method:"POST",path:televetThreadMessagesCall(ref),body:{content:content}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack(telemetry,"televet.messages.send_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=mapVetMessage(res.value);return parsed===null?unusable("the sent message was unreadable"):ok(parsed)},async markVetThreadRead(petRef,readAt){let ref=petRef.trim();if(ref.length===0)return invalid("petRef is required");if(!isStamp(readAt))return invalid("readAt must be an ISO date-time");let res=await funnel.send("televet.messages.read",{method:"PUT",path:televetThreadReadCall(ref),body:{read_at:readAt}});return res.ok?ok(void 0):err(res.error)},async visitSummary(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid("consultId is required");let res=await funnel.send("televet.messages.summary",{method:"GET",path:televetVisitSummaryCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=mapVisitSummary(res.value);return parsed===null?unusable("the visit summary was unreadable"):ok(parsed)}}}var TELEVET_BOOKING_BASE="/widget/v1/televet",TELEVET_STATE_POLICY_PATH=`${TELEVET_BOOKING_BASE}/state-policy`,TELEVET_CLINICIANS_PATH=`${TELEVET_BOOKING_BASE}/vets`,TELEVET_SLOTS_PATH=`${TELEVET_BOOKING_BASE}/slots`,TELEVET_NEXT_SLOT_PATH=`${TELEVET_BOOKING_BASE}/slots/next`,TELEVET_CONSULTS_PATH=`${TELEVET_BOOKING_BASE}/consults`,TELEVET_BOOKING_ENTITLEMENT_PATH=`${TELEVET_BOOKING_BASE}/entitlement`,TELEVET_CANCELLATION_POLICY_PATH=`${TELEVET_BOOKING_BASE}/cancellation-policy`,TELEVET_ATTACHMENT_INITIATE_PATH=`${TELEVET_BOOKING_BASE}/attachments/initiate`,TELEVET_TRIAGE_PATH=`${TELEVET_CONSULTS_PATH}/triage`;function televetHoldCall(slotId){return`${TELEVET_SLOTS_PATH}/${encodeURIComponent(slotId)}/hold`}function televetRescheduleCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}/reschedule`}function televetConsultCall(consultId){return`${TELEVET_CONSULTS_PATH}/${encodeURIComponent(consultId)}`}function televetJoinCall(consultId){return`${televetConsultCall(consultId)}/join`}function televetCancelCall(consultId){return`${televetConsultCall(consultId)}/cancel`}var TELEVET_CONSULT_PAGE_LIMIT=100;function invalid2(wireMessage){return err(makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage}))}function unusable2(wireMessage){return err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:wireMessage}))}function isDark(error){return error.httpStatus===404}function safeTrack2(telemetry,event,props){try{telemetry?.track(event,props)}catch{}}function validateBookingBody(body){if(body.pet_id.trim().length===0)return"pet_id is required";if(body.clinician_id.trim().length===0)return"clinician_id is required";if(body.slot_id.trim().length===0)return"slot_id is required";if(!isWellFormedStateCode(body.state))return"state must be a two-letter US state code";let reason=body.reason_text.trim();return reason.length===0?"reason_text is required":reason.length>REASON_TEXT_MAX?`reason_text must be at most ${REASON_TEXT_MAX} characters`:attestationRefusal(body)}function attestationRefusal(body){let attested=body.state_attested===true,version=body.cancellation_policy_version?.trim()??"";return attested!==version.length>0?"state_attested and cancellation_policy_version must be sent together or omitted together":version.length>CANCELLATION_POLICY_VERSION_MAX?`cancellation_policy_version must be at most ${CANCELLATION_POLICY_VERSION_MAX} characters`:null}function createTelevetBookingController(deps){let funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),telemetry=deps.telemetry;return{...createTelevetMessagesMethods(funnel,telemetry),async statePolicy(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.state_policy",{method:"GET",path:`${TELEVET_STATE_POLICY_PATH}/${encodeURIComponent(code)}`,...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseStatePolicy(res.value,code);return parsed===null?unusable2("the state policy response was unreadable"):ok(parsed)},async entitlement(signal){let res=await funnel.send("televet.booking.entitlement",{method:"GET",path:TELEVET_BOOKING_ENTITLEMENT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseBookingEntitlement(res.value)):err(res.error)},async cancellationPolicy(signal){let res=await funnel.send("televet.booking.cancellation_policy",{method:"GET",path:TELEVET_CANCELLATION_POLICY_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseCancellationPolicy(res.value)):ok(null)},async clinicians(state,signal){let code=state.trim();if(!isWellFormedStateCode(code))return invalid2("state must be a two-letter US state code");let res=await funnel.send("televet.booking.clinicians",{method:"GET",path:TELEVET_CLINICIANS_PATH,query:{state:code},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"vets"),parseClinician)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async slots(clinicianId,signal){let id=clinicianId.trim();if(id.length===0)return invalid2("clinicianId is required");let res=await funnel.send("televet.booking.slots",{method:"GET",path:TELEVET_SLOTS_PATH,query:{clinician_id:id},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"slots"),parseSlot)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async nextSlot(signal){let res=await funnel.send("televet.booking.next_slot",{method:"GET",path:TELEVET_NEXT_SLOT_PATH,...signal?{signal:signal}:{}});return res.ok?ok(parseSlot(unwrap(res.value,"slot"))):ok(null)},async holdSlot(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.hold",{method:"POST",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.hold_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseSlotHold(res.value);return parsed===null?unusable2("the hold response carried no usable expiry"):ok(parsed)},async releaseHold(slotId){let id=slotId.trim();if(id.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.release_hold",{method:"DELETE",path:televetHoldCall(id)},{idempotent:false,maxAttempts:1});return!res.ok&&res.error.httpStatus!==404?err(res.error):ok(void 0)},async book(body,idempotencyKey){let refusal=validateBookingBody(body);if(refusal!==null)return invalid2(refusal);let key=idempotencyKey.trim();if(key.length===0)return invalid2("idempotencyKey is required");let res=await funnel.send("televet.booking.book",{method:"POST",path:TELEVET_CONSULTS_PATH,body:bookingWireBody(body)},{idempotent:true,idempotencyKey:key,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.book_failed",{status:res.error.httpStatus??null}),err(foldTelevetBookingKeyReused(res.error));let parsed=parseConsult(res.value);return parsed===null?unusable2("the booking response was unreadable"):isLiveConsult(parsed)?ok(parsed):(safeTrack2(telemetry,"televet.booking.book_failed",{status:null,consult_status:parsed.status}),err(televetBookingNotLiveError(parsed.status)))},async reschedule(consultId,slotId){let consult=consultId.trim(),slot=slotId.trim();if(consult.length===0)return invalid2("consultId is required");if(slot.length===0)return invalid2("slotId is required");let res=await funnel.send("televet.booking.reschedule",{method:"POST",path:televetRescheduleCall(consult),body:{new_slot_id:slot}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.reschedule_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the reschedule response was unreadable"):ok(parsed)},async triage(reasonText,signal){let text2=reasonText.trim();if(text2.length===0)return ok(null);let res=await funnel.send("televet.booking.triage",{method:"POST",path:TELEVET_TRIAGE_PATH,body:{reason_text:text2},...signal?{signal:signal}:{}},{idempotent:false,maxAttempts:1});return res.ok?ok(parseTriageVerdict(res.value)):(safeTrack2(telemetry,"televet.booking.triage_unavailable",{status:res.error.httpStatus??null}),ok(null))},async listConsults(signal){let res=await funnel.send("televet.booking.consults",{method:"GET",path:TELEVET_CONSULTS_PATH,query:{limit:String(TELEVET_CONSULT_PAGE_LIMIT)},...signal?{signal:signal}:{}});return res.ok?ok(parseList(rows(res.value,"consults"),parseConsult)):isDark(res.error)?ok(/* @__PURE__ */Object.freeze([])):err(res.error)},async getConsult(consultId,signal){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.consult",{method:"GET",path:televetConsultCall(id),...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseConsult(res.value);return parsed===null?unusable2("the consult response was unreadable"):ok(parsed)},async joinConsult(consultId){let id=consultId.trim();if(id.length===0)return invalid2("consultId is required");let res=await funnel.send("televet.booking.join",{method:"POST",path:televetJoinCall(id)},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.join_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseVetCallCredential(res.value);return parsed===null?unusable2("the join response carried no usable room credential"):ok(parsed)},async cancelConsult(consultId,reason){let id=consultId.trim(),text2=reason.trim();if(id.length===0)return invalid2("consultId is required");if(text2.length===0)return invalid2("reason is required");if(text2.length>CANCEL_REASON_MAX)return invalid2(`reason must be at most ${CANCEL_REASON_MAX} characters`);let res=await funnel.send("televet.booking.cancel",{method:"POST",path:televetCancelCall(id),body:{reason:text2}},{idempotent:false,maxAttempts:1});if(!res.ok)return safeTrack2(telemetry,"televet.booking.cancel_failed",{status:res.error.httpStatus??null}),err(res.error);let parsed=parseCancelReceipt(res.value);return parsed===null?unusable2("the cancel response was unreadable"):ok(parsed)},async initiateAttachment(file,signal){let res=await funnel.send("televet.booking.attachment_initiate",{method:"POST",path:TELEVET_ATTACHMENT_INITIATE_PATH,body:{filename:file.filename,content_type:file.contentType,file_size:file.fileSize},...signal?{signal:signal}:{}});if(!res.ok)return err(res.error);let parsed=parseTelevetAttachmentPolicy(res.value);return parsed===null?unusable2("the attachment presign was unreadable"):ok(parsed)}}}function bookingWireBody(body){let version=body.cancellation_policy_version?.trim()??"",whole=body.state_attested===true&&version.length>0;return{pet_id:body.pet_id,clinician_id:body.clinician_id,slot_id:body.slot_id,state:body.state,reason_text:body.reason_text.trim(),species:body.species,media_refs:[...body.media_refs],emergency_acknowledged:body.emergency_acknowledged,share_health_records:body.share_health_records,...whole?{state_attested:true,cancellation_policy_version:version}:{}}}function rows(wire,key){if(Array.isArray(wire))return wire;if(typeof wire=="object"&&wire!==null){let envelope=wire,named=envelope[key]??envelope.items??envelope.data;if(Array.isArray(named))return named}return wire}function unwrap(wire,key){if(typeof wire=="object"&&wire!==null&&!Array.isArray(wire)){let envelope=wire,named=envelope[key]??envelope.data;if(typeof named=="object"&&named!==null)return named}return wire}var EVERFUR_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurContext@v1"),globalContextHost=globalThis,EverfurContext=globalContextHost[EVERFUR_CONTEXT_SYMBOL]??(globalContextHost[EVERFUR_CONTEXT_SYMBOL]=react.createContext(null));EverfurContext.displayName??="EverfurContext";function useEverfurContext(){let ctx=react.useContext(EverfurContext);if(ctx===null)throw new EverfurConfigError("not-initialized","Everfur hooks must be called inside <EverfurProvider>. Wrap your tree once, high.");return ctx}var REQUIRES=/* @__PURE__ */Object.freeze({chat:/* @__PURE__ */Object.freeze(["chat.message.create"]),records:/* @__PURE__ */Object.freeze(["records.upload.create","records.record.read"]),recordsClinic:/* @__PURE__ */Object.freeze(["records.clinic.create"]),video:/* @__PURE__ */Object.freeze(["video.gait.execute"]),photo:/* @__PURE__ */Object.freeze(["photo.checkup.execute"]),animations:/* @__PURE__ */Object.freeze(["animations.state.read"]),televet:/* @__PURE__ */Object.freeze(["televet.visit.create"])});function requires(name){return REQUIRES[name]}function decideCapability(name,decisions,opts){let keys=requires(name),byResource=/* @__PURE__ */new Map;for(let decision of decisions)byResource.set(decision.resource,decision);if(opts?.isPending===true&&keys.some(key=>!byResource.has(key)))return freezeDecision({name:name,enabled:false,isPending:true,limits:{}});let limits=mergeLimits(keys,byResource);return keys.filter(key=>byResource.get(key)?.granted!==true).length===0?freezeDecision({name:name,enabled:true,isPending:false,limits:limits}):freezeDecision({name:name,enabled:false,isPending:false,limits:limits,disabled:disabledFor(keys,byResource)})}function mergeLimits(keys,byResource){let out={};for(let key of keys){let decisionLimits=byResource.get(key)?.limits;if(decisionLimits)for(let[limitKey,limitValue]of Object.entries(decisionLimits)){let existing=out[limitKey];out[limitKey]=existing===void 0?limitValue:Math.min(existing,limitValue)}}return out}function disabledFor(keys,byResource){for(let key of keys){let explicit=byResource.get(key)?.disabled;if(explicit)/* @__PURE__ */
|
|
114
|
+
return Object.freeze({reason:explicit.reason,level:explicit.level,recoverable:explicit.recoverable})}/* @__PURE__ */
|
|
115
|
+
return Object.freeze({reason:userFacingError("accessDenied"),level:"user_entitlement",recoverable:false})}function freezeDecision(d){let base={name:d.name,enabled:d.enabled,isPending:d.isPending,limits:/* @__PURE__ */Object.freeze({...d.limits})};return d.disabled!==void 0&&(base.disabled=d.disabled),/* @__PURE__ */Object.freeze(base)}function useCapability(name){let{runtime:runtime}=useEverfurContext(),store=runtime.entitlements,snapshot=react.useSyncExternalStore(store.subscribe,store.getSnapshot,store.getSnapshot);return react.useMemo(()=>decideCapability(name,snapshot.decisions,{isPending:snapshot.isPending}),[name,snapshot])}var RECORDS_EMPTY_COPY=/* @__PURE__ */Object.freeze({idle:/* @__PURE__ */Object.freeze({title:"Find your pet’s clinic",body:"Search for the clinic that holds your pet’s records. We’ll request them on your behalf once you sign the authorization.",action:null}),no_requests:/* @__PURE__ */Object.freeze({title:"No record requests yet",body:"When you request records from a clinic, you’ll be able to track every step here.",action:null}),no_records:/* @__PURE__ */Object.freeze({title:"Nothing to show just yet",body:"Once your pet’s records arrive and our team reviews them, lab trends and visits will appear here.",action:null}),rate_limited:/* @__PURE__ */Object.freeze({title:"Slow down a moment",body:"You’ve made a lot of requests just now. You can try again shortly.",action:"Try again"}),service_unavailable:/* @__PURE__ */Object.freeze({title:"Records search is temporarily down",body:"We’re working on it. Please try again in a few minutes.",action:"Try again"}),error:/* @__PURE__ */Object.freeze({title:"Couldn’t reach Everfur",body:"Check your connection and try again.",action:"Try again"})}),RATE_LIMIT_COOLDOWN_S=60;var TELEVET_RATE_LIMITED_COPY=/* @__PURE__ */Object.freeze({title:RECORDS_EMPTY_COPY.rate_limited.title,body:RECORDS_EMPTY_COPY.rate_limited.body});function isRateLimited(error){return error!=null&&(error.code==="rateLimited"||error.httpStatus===429)}function rateLimitWaitMs(error,nowMs){return retryOverrideMs(error,nowMs)??RATE_LIMIT_COOLDOWN_S*1e3}function useRateLimitWait(error){let rateLimited=isRateLimited(error),[elapsedFor,setElapsedFor]=react.useState(null);return react.useEffect(()=>{if(!rateLimited||error==null)return;let handle=setTimeout(()=>setElapsedFor(error),rateLimitWaitMs(error,Date.now()));return()=>clearTimeout(handle)},[error,rateLimited]),{rateLimited:rateLimited,waiting:rateLimited&&elapsedFor!==error}}var TELEVET_READ_FRESH_MS=3e4;function createTelevetReadCache(deps={}){let now=deps.now??Date.now,entries=/* @__PURE__ */new Map,kept=entry=>entry!==void 0&&entry.settled!==null&&now()<entry.keptUntil?entry.settled:null,join=(key,entry,signal)=>{let promise=entry.promise;entry.waiters+=1;let leave=()=>{entry.waiters-=1,entry.waiters===0&&entry.promise!==null&&(entry.abort.abort(),entries.get(key)===entry&&entries.delete(key))};return signal.aborted?(leave(),promise):(signal.addEventListener("abort",leave,{once:true}),promise.finally(()=>signal.removeEventListener("abort",leave)))},settle=(key,entry,result,freshMs)=>{if(entry.promise=null,entries.get(key)!==entry||entry.abort.signal.aborted){entries.get(key)===entry&&entries.delete(key);return}result.ok&&freshMs>0?(entry.settled=result,entry.keptUntil=now()+freshMs):!result.ok&&isRateLimited(result.error)?(entry.settled=result,entry.keptUntil=now()+rateLimitWaitMs(result.error,now())):entries.delete(key)};/* @__PURE__ */
|
|
116
|
+
return Object.freeze({read(key,run,options){let existing=entries.get(key);if(existing?.promise)return join(key,existing,options.signal);let answer=kept(existing);if(answer!==null&&(options.force!==true||!answer.ok&&isRateLimited(answer.error)))return Promise.resolve(answer);let entry={abort:new AbortController,promise:null,settled:null,keptUntil:0,waiters:0};return entries.set(key,entry),entry.promise=run(entry.abort.signal).then(result=>(settle(key,entry,result,options.freshMs),result),cause=>{throw entry.promise=null,entries.get(key)===entry&&entries.delete(key),cause}),join(key,entry,options.signal)},peek(key){return kept(entries.get(key))},invalidate(prefixes){for(let key of[...entries.keys()])prefixes.some(prefix=>key.startsWith(prefix))&&entries.delete(key)}})}var CACHES=/* @__PURE__ */new WeakMap;function televetReadCacheFor(scope){let cache=CACHES.get(scope);return cache===void 0&&(cache=createTelevetReadCache(),CACHES.set(scope,cache)),cache}var TELEVET_SLOT_READS=/* @__PURE__ */Object.freeze(["slots:","next-slot"]),TELEVET_VISIT_READS=/* @__PURE__ */Object.freeze(["consults:","consult:","slots:","next-slot"]);function invalidateTelevetReads(scope,prefixes){CACHES.get(scope)?.invalidate(prefixes)}function useTelevetBookingController(injected){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext();return react.useMemo(()=>injected||(userRef===null?null:sharedBookingController(runtime,`${userRef}\0${scopeEpoch}`,()=>{let{services:services}=runtime.registry;return createTelevetBookingController({auth:services.authFor(userRef),telemetry:services.telemetry,...services.errorPolicy?{errorPolicy:services.errorPolicy}:{}})})),[runtime,userRef,scopeEpoch,injected])}var SHARED_CONTROLLERS=/* @__PURE__ */new WeakMap;function sharedBookingController(runtime,scope,build){let held=SHARED_CONTROLLERS.get(runtime);if(held!==void 0&&held.scope===scope)return held.controller;let controller=build();return SHARED_CONTROLLERS.set(runtime,{scope:scope,controller:controller}),controller}function useTelevetBookingAvailable(){let{userRef:userRef}=useEverfurContext(),capability=useCapability("televet");return react.useMemo(()=>({available:capability.enabled&&userRef!==null,isPending:capability.isPending}),[capability.enabled,capability.isPending,userRef])}function useTelevetRead(key,enabled,run,scope,freshMs=TELEVET_READ_FRESH_MS,rereadOnMount=false){let[state,setState]=react.useState(()=>{let kept=enabled&&run!==null&&scope!==null&&!rereadOnMount?televetReadCacheFor(scope).peek(key):null;return kept!==null?kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error}:{key:key,data:null,isPending:enabled&&run!==null,error:null}}),[nonce,setNonce]=react.useState(0),runRef=react.useRef(run);runRef.current=run;let scopeRef=react.useRef(scope);scopeRef.current=scope;let forceNext=react.useRef(rereadOnMount);react.useEffect(()=>{let current=runRef.current;if(!enabled||current===null){setState({key:key,data:null,isPending:false,error:null});return}let force=forceNext.current;forceNext.current=false;let cache=scopeRef.current===null?null:televetReadCacheFor(scopeRef.current),kept=force||cache===null?null:cache.peek(key);if(kept!==null){setState(kept.ok?{key:key,data:kept.value,isPending:false,error:null}:{key:key,data:null,isPending:false,error:kept.error});return}let controller=new AbortController,live=true;return setState(prev=>prev.key===key?{...prev,isPending:true,error:null}:{key:key,data:null,isPending:true,error:null}),(async()=>{let settled;try{settled=cache===null?await current(controller.signal):await cache.read(key,current,{signal:controller.signal,freshMs:freshMs,force:force})}catch{live&&setState({key:key,data:null,isPending:false,error:null});return}live&&(settled.ok?setState({key:key,data:settled.value,isPending:false,error:null}):setState({key:key,data:null,isPending:false,error:settled.error}))})(),()=>{live=false,controller.abort()}},[key,enabled,nonce]);let refetch=react.useCallback(()=>{forceNext.current=true,setNonce(n=>n+1)},[]),fresh2=state.key===key;return react.useMemo(()=>({enabled:enabled,data:fresh2?state.data:null,isPending:enabled&&(!fresh2||state.isPending),isError:fresh2&&state.error!==null,error:fresh2?state.error:null,refetch:refetch}),[enabled,fresh2,state.data,state.isPending,state.error,refetch])}function useTelevetStatePolicy(state,controller){let code=state?.trim()??"",enabled=controller?.statePolicy!==void 0&&isWellFormedStateCode(code),read=controller?.statePolicy;return useTelevetRead(`state-policy:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetBookingEntitlement(controller){let enabled=controller?.entitlement!==void 0,read=controller?.entitlement;return useTelevetRead("entitlement",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,0)}function useTelevetCancellationPolicy(controller){let enabled=controller?.cancellationPolicy!==void 0,read=controller?.cancellationPolicy;return useTelevetRead("cancellation-policy",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetClinicians(state,controller){let code=state?.trim()??"",enabled=controller?.clinicians!==void 0&&isWellFormedStateCode(code),read=controller?.clinicians;return useTelevetRead(`clinicians:${code}`,enabled,enabled&&read?signal=>read.call(controller,code,signal):null,controller)}function useTelevetSlots(clinicianId,controller){let id=clinicianId?.trim()??"",enabled=controller!==null&&id.length>0;return useTelevetRead(`slots:${id}`,enabled,enabled&&controller?signal=>controller.slots(id,signal):null,controller)}function useTelevetNextSlot(controller){let enabled=controller?.nextSlot!==void 0,read=controller?.nextSlot;return useTelevetRead("next-slot",enabled,enabled&&read?signal=>read.call(controller,signal):null,controller)}function useTelevetWrite(run){let[inFlight,setInFlight]=react.useState(null),live=react.useRef(true),busy=react.useRef(false),runRef=react.useRef(run);runRef.current=run,react.useEffect(()=>(live.current=true,()=>{live.current=false}),[]);let mutate=react.useCallback((...args)=>{let current=runRef.current;if(current===null||busy.current)return;let last=args[args.length-1],hasCallbacks=typeof last=="object"&&last!==null&&("onSuccess"in last||"onError"in last),callbacks=hasCallbacks?last:void 0,callArgs=hasCallbacks?args.slice(0,-1):args;busy.current=true,setInFlight({variables:callArgs[0]??null}),(async()=>{let settled=null;try{settled=await current(...callArgs)}catch{settled=null}busy.current=false,live.current&&setInFlight(null),settled!==null&&(settled.ok?callbacks?.onSuccess?.(settled.value):callbacks?.onError?.(settled.error))})()},[]);return react.useMemo(()=>({isPending:inFlight!==null,variables:inFlight?.variables??null,mutate:mutate}),[inFlight,mutate])}async function invalidatingOnSuccess(controller,reads,write){let result=await write;return result.ok&&invalidateTelevetReads(controller,reads),result}function useTelevetHoldSlot(controller){return useTelevetWrite(controller?slotId=>invalidatingOnSuccess(controller,TELEVET_SLOT_READS,controller.holdSlot(slotId)):null)}function useTelevetBookConsult(controller){return useTelevetWrite(controller?(body,key)=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.book(body,key)):null)}function useTelevetRescheduleConsult(consultId,controller){return useTelevetWrite(controller&&consultId?slotId=>invalidatingOnSuccess(controller,TELEVET_VISIT_READS,controller.reschedule(consultId,slotId)):null)}function useTelevetConsults(controller,revision=0,options){let enabled=controller?.listConsults!==void 0,read=controller?.listConsults;return useTelevetRead(`consults:${revision}`,enabled,enabled&&read?signal=>read.call(controller,signal):null,controller,TELEVET_READ_FRESH_MS,options?.reread===true)}function televetReadIsDark(read){return read.error!==null&&read.error.httpStatus===404}var TELEVET_JOIN_OPENS_MINUTES_BEFORE=15,TELEVET_JOIN_CLOSES_MINUTES_AFTER=250,JOINABLE=/* @__PURE__ */new Set(["scheduled","in_progress"]);function startsAtMs(consult){let parsed=Date.parse(consult.scheduledAt);return Number.isNaN(parsed)?null:parsed}function televetJoinOpensAtMs(consult){let start=startsAtMs(consult);return start===null?null:start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4}function televetJoinDecision(consult,nowMs){if(!JOINABLE.has(consult.status))return{joinable:false,reason:`status_${consult.status}`};if(!consult.hasRoom)return{joinable:false,reason:"room_not_ready"};let start=startsAtMs(consult);return start===null||nowMs<start-TELEVET_JOIN_OPENS_MINUTES_BEFORE*6e4?{joinable:false,reason:"too_early"}:nowMs>start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4?{joinable:false,reason:"too_late"}:{joinable:true}}function splitTelevetVisits(consults,nowMs){let upcoming=[],past=[];for(let consult of consults){let start=startsAtMs(consult);(JOINABLE.has(consult.status)&&start!==null&&start+TELEVET_JOIN_CLOSES_MINUTES_AFTER*6e4>nowMs?upcoming:past).push(consult)}return upcoming.sort((a,b)=>(startsAtMs(a)??0)-(startsAtMs(b)??0)),past.sort((a,b)=>(startsAtMs(b)??0)-(startsAtMs(a)??0)),/* @__PURE__ */Object.freeze({upcoming:/* @__PURE__ */Object.freeze(upcoming),past:/* @__PURE__ */Object.freeze(past)})}function canManageTelevetVisit(status){return status==="scheduled"}function useTelevetLanding(controller){let consults=useTelevetConsults(controller);return consults.enabled?consults.isPending?"pending":consults.isError||splitTelevetVisits(consults.data??[],Date.now()).upcoming.length>0?"visits":"booking":"booking"}var TELEVET_VISITS_COPY_WEB=/* @__PURE__ */Object.freeze({pageTitle:"Video visits",bookCardTitle:"Book a video visit",bookCardCta:"Find a time",bookAnotherTitle:"Book another visit",upcomingTitle:"Next video visit",bookedPill:"Booked",pastTitle:"Past video visits",visitTitleTemplate:"{pet} with {vet}",minutesTemplate:"{n} minutes",emptyTitle:"No visits yet",emptyBody:"When you book a video visit, it will appear here.",loading:"Loading your visits…",loadErrorTitle:"Could not load your visits",loadErrorBody:"Check your connection and try again.",retry:"Try again",joinCta:"Join the visit",joining:"Joining…",addToCalendarCta:"Add to calendar",calendarAdded:"Added to your calendar",rescheduleCta:"Reschedule",cancelCta:"Cancel",cancelConfirmTitleTemplate:"Cancel {pet}’s visit?",cancelConfirmTitle:"Cancel this visit?",cancellationReasonLabel:"What changed?",cancellationReasonOptional:"Optional",cancelWhyBetterTemplate:"{pet} is better",cancelWhyTime:"The time doesn’t work",cancelWhyRegularVet:"We’ll see our regular vet",cancelWhyOther:"Something else",cancelWhyTimeHint:"Another time might be easier.",cancelMoveInstead:"Move the visit instead",summaryWhen:"When",summaryVet:"Vet",summaryAbout:"About",cancelConfirmCta:"Cancel the visit",cancellingVisit:"Canceling…",cancelDismissCta:"Keep the visit",cancelledTemplate:"{pet}’s visit is canceled. {vet} knows.",cancelledTitle:"Visit cancelled",cancellationFeeRecorded:"A late cancellation fee was recorded for this visit.",cancellationFeeNotRecorded:"No late cancellation fee was recorded for this visit.",loadingCancellationTerms:"Loading cancellation terms…",cancellationTermsUnavailable:"We could not confirm the current cancellation terms. Try again before continuing.",cancelReason:"Cancelled by the pet parent in the app.",cancelTermsFirst:"We could not confirm the cancellation terms. Please try again before cancelling.",cancelFailed:"We could not cancel this visit. Refresh your visits to confirm its status before trying again."});function televetVisitStatusWeb(status){switch(status){case"scheduled":return"Scheduled";case"in_progress":return"In progress";case"awaiting_summary":return"Summary on its way";case"completed":return"Completed";case"cancelled_owner":return"Cancelled by you";case"cancelled_ops":return"Cancelled by Everfur";case"no_show_owner":return"Missed";case"no_show_vet":return"Vet couldn't attend";default:return null}}function televetJoinBlockWeb(reason,opensAtLabel){if(reason==="too_early")return opensAtLabel?`This visit opens at ${opensAtLabel}. You can join from then.`:"This visit has not opened yet.";if(reason==="too_late")return"This visit has ended.";if(reason==="room_not_ready")return"We are still setting up the video room. Try again in a moment.";switch(reason){case"status_cancelled_owner":return"You cancelled this visit.";case"status_cancelled_ops":return"This visit was cancelled. Please book another time.";case"status_no_show_owner":return"This visit was missed.";case"status_no_show_vet":return"The vet could not make this visit. Please book another time.";case"status_awaiting_summary":return"This visit has ended. Your summary is on its way.";case"status_completed":return"This visit has ended.";default:return"This visit cannot be joined right now."}}var HostRenderBoundary=class extends react.Component{constructor(){super(...arguments);this.state={failed:false,key:this.props.resetKey}}static getDerivedStateFromError(){return{failed:true}}static getDerivedStateFromProps(props,state){return Object.is(props.resetKey,state.key)?null:{failed:false,key:props.resetKey}}render(){return this.state.failed?this.props.fallback:this.props.children}};function RenderHost({render:render}){return render()}function HostRender({render:render,fallback:fallback,resetKey:resetKey}){return react.createElement(HostRenderBoundary,{fallback:fallback,resetKey:resetKey,children:react.createElement(RenderHost,{render:render})})}var freezeInPlace=Object.freeze;function deepFreeze(value){if(value!==null&&typeof value=="object"&&!Object.isFrozen(value)){freezeInPlace(value);for(let key of Object.keys(value))deepFreeze(value[key])}return value}var TEXT_SCALE_TIER_CAPS=/* @__PURE__ */Object.freeze({content:0,heading:2,control:1.8,compact:1.5,badge:1.3}),SPACE={xs:4,sm:8,md:12,lg:16,xl:24,xxl:32},RADIUS={tile:5,xs:6,sm:10,md:14,lg:20,xl:28,pill:500},TYPE_SIZE={nano:8,small:9,micro:10,tiny:11,caption:13,bodyTight:15,body:17,subtitle:20,heading:22,verdict:24},LINE_HEIGHT={tight:1.15,snug:1.3,normal:1.4,relaxed:1.55},WEIGHT={regular:"400",medium:"500",bold:"700"},LETTER_SPACING={eyebrow:1,monoWide:.9,headerBrand:-.42,tight:-.35},DEFAULT_MAX_FONT_SCALE=0,SYSTEM_FONT_FAMILY="System",SYSTEM_MONO_FAMILY="monospace",TIERS=["content","heading","control","compact","badge"];function authoredTierSizes(size){let out={};for(let tier of TIERS)out[tier]=size;return out}var NO_FONT_SOURCES=[];function baseType(){return{family:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,fontUrl:null,families:{regular:SYSTEM_FONT_FAMILY,medium:SYSTEM_FONT_FAMILY,bold:SYSTEM_FONT_FAMILY,mono:SYSTEM_MONO_FAMILY,monoMedium:SYSTEM_MONO_FAMILY,monoBold:SYSTEM_MONO_FAMILY},namedFaces:{regular:false,medium:false,bold:false,mono:false,monoMedium:false,monoBold:false},fontUrls:{},size:TYPE_SIZE,tierSizes:authoredTierSizes(TYPE_SIZE),lineHeight:LINE_HEIGHT,weight:WEIGHT,letterSpacing:LETTER_SPACING,scale:1,maxScale:DEFAULT_MAX_FONT_SCALE,scaleCaps:TEXT_SCALE_TIER_CAPS,headingFamily:null,headingWeight:null,fontSources:NO_FONT_SOURCES}}var NO_SLOTS={},EASING_CURVES=/* @__PURE__ */Object.freeze({standard:/* @__PURE__ */Object.freeze([.2,0,0,1]),emphasized:/* @__PURE__ */Object.freeze([.2,.8,.2,1]),exit:/* @__PURE__ */Object.freeze([.4,0,1,1])});function cssCubicBezier(curve){return`cubic-bezier(${curve.join(", ")})`}var MOTION={duration:{instant:80,fast:140,normal:220,slow:320},spring:{gentle:{damping:18,stiffness:200}},easing:{standard:cssCubicBezier(EASING_CURVES.standard),emphasized:cssCubicBezier(EASING_CURVES.emphasized),exit:cssCubicBezier(EASING_CURVES.exit)},reducedMotion:false},LIGHT_COLOR={brand:"#10462E",brandSoft:"rgba(16,70,46,0.10)",brandSofter:"rgba(16,70,46,0.15)",brandBorder:"rgba(16,70,46,0.18)",borderHairlineGreen:"rgba(16,70,46,0.25)",brandBorderStrong:"rgba(16,70,46,0.55)",brandInk:"#10462E",linkInk:"#10462E",surface:"#FFFFFF",surfaceCream:"#FFFFFF",surfaceSubtle:"#F1F5F2",background:"#FFFFFF",borderRingCream:"#E4E4E4",chatGround:"#FFFFFF",composerFill:"#FFFFFF",composerBorder:"rgba(16,70,46,0.75)",shadow:"#0B3421",text:{primary:"#000000",secondary:"#0E462E",muted:"#6B6B6B",placeholder:"rgba(61,61,61,0.75)",onBrand:"#FFFFFF",metaCool:"#3D3D3D",timestamp:"rgba(61,61,61,0.75)"},primary:"#10462E",onPrimary:"#FFFFFF",accent:"#10462E",onAccent:"#FFFFFF",accentEdge:"#07C168",success:"#07C168",danger:"#C03410",onDanger:"#FFFFFF",errorRed:"#C03410",warningStrong:"#A45610",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.12)",badgeBgCaution:"rgba(217,130,29,0.14)",badgeBgCritical:"rgba(192,52,16,0.06)",badgeBgNeutral:"rgba(107,107,107,0.12)",bubbleUser:"#10462E",bubbleAssistant:"#FFFFFF",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",skeleton:"#E9F1E9",scanButtonPink:"#FFC3BC",highlight:"#FFC3BC",onHighlight:"#000000",mark:"#07C168",controlEdge:"rgba(16,70,46,0.18)",structureEdge:"rgba(16,70,46,0.25)",primaryEdge:"#10462E",checkupCardLowRiskBg:"rgba(7,193,104,0.10)",checkupCardConcernBg:"rgba(239,167,0,0.10)",info:"#10462E",badgeBgInfo:"rgba(16,70,46,0.10)",infoEdge:"rgba(16,70,46,0.25)"},EVERFUR_LIGHT=deepFreeze({brightness:"light",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:LIGHT_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS}),DARK_COLOR={brand:"#6BD39A",brandSoft:"rgba(107,211,154,0.12)",brandSofter:"rgba(107,211,154,0.18)",brandBorder:"rgba(107,211,154,0.22)",borderHairlineGreen:"rgba(107,211,154,0.28)",brandBorderStrong:"rgba(107,211,154,0.55)",brandInk:"#6BD39A",linkInk:"#6BD39A",surface:"#1C1F23",surfaceCream:"#23272C",surfaceSubtle:"#23272C",background:"#15171A",borderRingCream:"#3A3F45",chatGround:"#1C1F23",composerFill:"#23272C",composerBorder:"rgba(107,211,154,0.75)",shadow:"#000000",text:{primary:"#F5F3F0",secondary:"#A9E4C4",muted:"#9A9A9A",placeholder:"rgba(255,255,255,0.55)",onBrand:"#0E1F17",metaCool:"#C9C9C9",timestamp:"rgba(245,243,240,0.7)"},primary:"#6BD39A",onPrimary:"#0E1F17",accent:"#6BD39A",onAccent:"#0E1F17",accentEdge:"#34D888",success:"#07C168",danger:"#F87171",onDanger:"#0E1F17",errorRed:"#FF6B5B",warningStrong:"#F0A35E",cautionAccent:"#D9821D",riskConcern:"#EFA700",sentiment:{up:"#07C168",neutral:"#FBC558",down:"#FF1B00"},badgeBgPositive:"rgba(7,193,104,0.18)",badgeBgCaution:"rgba(217,130,29,0.20)",badgeBgCritical:"rgba(185,28,28,0.22)",badgeBgNeutral:"rgba(255,255,255,0.10)",bubbleUser:"#6BD39A",bubbleAssistant:"#1C1F23",bubbleVet:"#FFC3BC",onBubbleVet:"#000000",skeleton:"#23272C",scanButtonPink:"#FFC3BC",highlight:"#605051",onHighlight:"#F5F3F0",mark:"#07C168",controlEdge:"rgba(107,211,154,0.22)",structureEdge:"rgba(107,211,154,0.28)",primaryEdge:"#6BD39A",checkupCardLowRiskBg:"rgba(7,193,104,0.16)",checkupCardConcernBg:"rgba(239,167,0,0.16)",info:"#6BD39A",badgeBgInfo:"rgba(107,211,154,0.12)",infoEdge:"rgba(107,211,154,0.28)"};deepFreeze({brightness:"dark",highContrast:false,meta:{displayName:"Everfur",logoUrl:null,placeholder:null,hidePoweredBy:false,assistantAvatarUrl:null},color:DARK_COLOR,space:SPACE,radius:RADIUS,type:baseType(),motion:MOTION,slots:NO_SLOTS});var EVERFUR_THEME_CONTEXT_SYMBOL=/* @__PURE__ */Symbol.for("@everfur/sdk#EverfurThemeContext@v1"),globalThemeHost=globalThis,EverfurThemeContext=globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]??(globalThemeHost[EVERFUR_THEME_CONTEXT_SYMBOL]=react.createContext(EVERFUR_LIGHT));EverfurThemeContext.displayName??="EverfurThemeContext";function useEverfurTheme(){return react.useContext(EverfurThemeContext)}var FACE_WEIGHT=/* @__PURE__ */Object.freeze({regular:"regular",medium:"medium",bold:"bold",mono:"regular",monoMedium:"medium",monoBold:"bold"});function tierScale(theme,tier){let{scale:scale,scaleCaps:scaleCaps}=theme.type,cap=scaleCaps[tier];return cap>0?Math.min(scale,cap):scale}function tierPx(theme,tier,points){return Math.round(points*tierScale(theme,tier)*10)/10}var SYSTEM_UI_STACK='system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',RN_SYSTEM_FAMILY="System";function cssFontFamily(family){let named=family.trim();return named.length===0||named===RN_SYSTEM_FAMILY?SYSTEM_UI_STACK:`${quote(named)}, ${SYSTEM_UI_STACK}`}function cssMonoFamily(mono){let named=mono.trim();return named.length===0||named==="monospace"?"ui-monospace, Menlo, Consolas, monospace":`${quote(named)}, ui-monospace, Menlo, Consolas, monospace`}function quote(family){return`"${family.replace(/[\\"]/g,"\\$&")}"`}function faceCss(theme,weight){let type=theme.type,family=type.families[weight];return{fontFamily:weight==="mono"||weight==="monoMedium"||weight==="monoBold"?cssMonoFamily(family):cssFontFamily(family),fontWeight:type.namedFaces[weight]?type.weight.regular:type.weight[FACE_WEIGHT[weight]]}}function headingFaceCss(theme,fallback="bold"){let{headingFamily:headingFamily,headingWeight:headingWeight}=theme.type,base=faceCss(theme,fallback);return headingFamily===null&&headingWeight===null?base:headingFamily!==null?{fontFamily:cssFontFamily(headingFamily),fontWeight:headingWeight??theme.type.weight[FACE_WEIGHT[fallback]]}:theme.type.namedFaces[fallback]||headingWeight===null?base:{fontFamily:base.fontFamily,fontWeight:headingWeight}}var SURFACE_ROOT_RESET=/* @__PURE__ */Object.freeze({textAlign:"start"});var MIN_OFFSTATE_HEIGHT=48;function selectView(decision){return decision.isPending?"pending":decision.enabled?"enabled":"disabled"}function CapabilityGate(props){let{capability:capability,children:children,renderDisabled:renderDisabled,renderPending:renderPending,style:style,className:className}=props,decision=useCapability(capability),view=react.useMemo(()=>selectView(decision),[decision]);switch(view){case"enabled":return children;case"pending":return renderPending?/* @__PURE__ */jsxRuntime.jsx(HostRender,{render:renderPending,fallback:/* @__PURE__ */jsxRuntime.jsx(PendingSkeleton,{capability:capability,style:style,className:className})}):/* @__PURE__ */jsxRuntime.jsx(PendingSkeleton,{capability:capability,style:style,className:className});case"disabled":return renderDisabled?/* @__PURE__ */jsxRuntime.jsx(HostRender,{render:()=>renderDisabled(decision),fallback:/* @__PURE__ */jsxRuntime.jsx(OffState,{decision:decision,style:style,className:className}),resetKey:decision}):/* @__PURE__ */jsxRuntime.jsx(OffState,{decision:decision,style:style,className:className});default:return assertNever(view)}}function PendingSkeleton({capability:capability,style:style,className:className}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles(theme),[theme]);/* @__PURE__ */
|
|
117
|
+
return jsxRuntime.jsx("div",{role:"status","aria-busy":"true","aria-label":`Loading ${capability}`,className:className,style:{...styles.offstate,...style},children:/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.skeletonBar})})}function OffState({decision:decision,style:style,className:className}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles(theme),[theme]),message=decision.disabled?.reason??"";/* @__PURE__ */
|
|
118
|
+
return jsxRuntime.jsx("div",{className:className,style:{...styles.offstate,...style},children:message.length>0?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.offstateText,children:message}):null})}function makeStyles(theme){let{color:color,space:space,radius:radius,type:type}=theme;return{offstate:{...SURFACE_ROOT_RESET,boxSizing:"border-box",minHeight:MIN_OFFSTATE_HEIGHT,display:"flex",flexDirection:"column",justifyContent:"center",padding:`${space.md}px ${space.lg}px`,backgroundColor:color.surfaceCream,borderRadius:radius.md,border:`1px solid ${color.brandBorder}`},offstateText:{margin:0,...faceCss(theme,"regular"),fontSize:type.size.body,lineHeight:`${Math.round(type.size.body*type.lineHeight.normal)}px`,color:color.text.muted},skeletonBar:{height:space.md,borderRadius:radius.xs,backgroundColor:color.brandSofter}}}function hasLoneSurrogate(value){for(let i=0;i<value.length;i+=1){let code=value.charCodeAt(i);if(code>=55296&&code<=56319){let low=value.charCodeAt(i+1);if(!(low>=56320&&low<=57343))return true;i+=1}else if(code>=56320&&code<=57343)return true}return false}function serverLength(value){return[...value].length}var SPECIES_ALIASES=/* @__PURE__ */Object.freeze({dog:"dog",canine:"dog",k9:"dog",puppy:"dog",cat:"cat",feline:"cat",kitten:"cat"});function canonicalPetSpecies(raw){if(typeof raw!="string")return null;let key=raw.trim().toLowerCase();return Object.prototype.hasOwnProperty.call(SPECIES_ALIASES,key)?SPECIES_ALIASES[key]:null}var LIST_MAX=50,REF_MAX=128,NAME_MAX=120,SHORT_MAX=120,NOTES_MAX=2e3,FOOD_MAX=120,MICROCHIP_MAX=80,SEXES=/* @__PURE__ */new Set(["male","female","unknown"]),PRECISIONS=/* @__PURE__ */new Set(["day","month","year"]),ACTIVITY=/* @__PURE__ */new Set(["low","medium","high","athletic"]),INDOOR_OUTDOOR=/* @__PURE__ */new Set(["indoor","outdoor","both"]),SEVERITIES=/* @__PURE__ */new Set(["mild","moderate","severe"]),ISO_DATE=/^(\d{4})-(\d{2})-(\d{2})$/,SCALAR_WIRE=[["sex","sex"],["spayedNeutered","spayed_neutered"],["birthDate","birth_date"],["birthDatePrecision","birth_date_precision"],["activityLevel","activity_level"],["indoorOutdoor","indoor_outdoor"],["foodBrand","food_brand"],["foodType","food_type"],["microchipId","microchip_id"]],LIST_WIRE=[["allergies","allergies"],["medications","medications"],["supplements","supplements"],["conditions","conditions"]];/* @__PURE__ */Object.freeze([...SCALAR_WIRE,...LIST_WIRE].map(([key])=>key));function isRealDate(value){let match=ISO_DATE.exec(value);if(match===null)return false;let[year,month,day]=[Number(match[1]),Number(match[2]),Number(match[3])],date2=new Date(Date.UTC(year,month-1,day));return date2.getUTCFullYear()===year&&date2.getUTCMonth()===month-1&&date2.getUTCDate()===day}var oneOf=allowed=>(field,value)=>typeof value=="string"&&allowed.has(value)?null:`${field} must be one of ${[...allowed].join(", ")}`,boolean=(field,value)=>typeof value=="boolean"?null:`${field} must be true or false`,date=(field,value)=>typeof value=="string"&&isRealDate(value)?null:`${field} must be a real date written YYYY-MM-DD`,text=(max,opts={})=>(field,value)=>{if(typeof value!="string")return`${field} must be a string`;if(hasLoneSurrogate(value))return`${field} contains an unpaired surrogate and cannot be encoded`;let measured=opts.trimmed?value.trim():value;if(opts.required&&measured.length===0)return`${field} is required and must not be blank`;let length=serverLength(measured);return length<=max?null:`${field} is ${length} characters; the server accepts at most ${max}`},SCALAR_CHECKS={sex:oneOf(SEXES),spayedNeutered:boolean,birthDate:date,birthDatePrecision:oneOf(PRECISIONS),activityLevel:oneOf(ACTIVITY),indoorOutdoor:oneOf(INDOOR_OUTDOOR),foodBrand:text(FOOD_MAX),foodType:text(FOOD_MAX),microchipId:text(MICROCHIP_MAX)},REF_FIELD=["ref","ref",false,text(REF_MAX,{required:true,trimmed:true})],NOTES_FIELD=["notes","notes",false,text(NOTES_MAX,{trimmed:true})],MEDICATION_FIELDS=[REF_FIELD,["name","name",true,text(NAME_MAX,{required:true,trimmed:true})],["dose","dose",false,text(SHORT_MAX,{trimmed:true})],["frequency","frequency",false,text(SHORT_MAX,{trimmed:true})],["startDate","start_date",false,date],["endDate","end_date",false,date],NOTES_FIELD],ITEM_FIELDS={allergies:[REF_FIELD,["allergen","allergen",true,text(NAME_MAX,{required:true,trimmed:true})],["severity","severity",false,oneOf(SEVERITIES)],NOTES_FIELD],medications:MEDICATION_FIELDS,supplements:MEDICATION_FIELDS,conditions:[REF_FIELD,["conditionName","condition_name",true,text(NAME_MAX,{required:true,trimmed:true})],["diagnosedDate","diagnosed_date",false,date],NOTES_FIELD]};function itemToWire(list,index,raw){let at=`${list}[${index}]`;if(typeof raw!="object"||raw===null||Array.isArray(raw))return{error:`${at} must be an object`};let source=raw,item={};for(let[key,wire,isRequired,check]of ITEM_FIELDS[list]){let value=source[key];if(value==null){if(isRequired)return{error:`${at}.${key} is required`};value===null&&(item[wire]=null);continue}let bad=check(`${at}.${key}`,value);if(bad!==null)return{error:bad};item[wire]=value}let start=item.start_date,end=item.end_date;return typeof start=="string"&&typeof end=="string"&&end<start?{error:`${at}.endDate must not be before startDate`}:{item:item}}function listToWire(list,raw){if(!Array.isArray(raw))return{error:`${list} must be an array (send [] to clear it)`};if(raw.length>LIST_MAX)return{error:`${list} has ${raw.length} items; the server accepts at most ${LIST_MAX}`};let items=[],refs=/* @__PURE__ */new Set;for(let index=0;index<raw.length;index+=1){let mapped=itemToWire(list,index,raw[index]);if("error"in mapped)return mapped;let ref=mapped.item.ref;if(typeof ref=="string"){let key=ref.trim();if(refs.has(key))return{error:`${list}: ref ${JSON.stringify(key)} is used twice; a ref names one item`};refs.add(key)}items.push(mapped.item)}return{items:items}}function petHealthToWire(input,species){let source=input,body={};for(let[key,wire]of SCALAR_WIRE){let value=source[key];if(value!==void 0){if(value!==null){let bad=SCALAR_CHECKS[key](key,value);if(bad!==null)return{error:bad}}body[wire]=value}}let dateSent=source.birthDate!==void 0,precisionSent=source.birthDatePrecision!==void 0;if(dateSent!==precisionSent||dateSent&&source.birthDate===null!=(source.birthDatePrecision===null))return{error:"birthDate and birthDatePrecision must be sent together, both set or both null"};for(let[key,wire]of LIST_WIRE){let value=source[key];if(value===void 0)continue;let mapped=listToWire(key,value);if("error"in mapped)return mapped;body[wire]=mapped.items}return Object.keys(body).length>0&&species!==void 0&&canonicalPetSpecies(species)===null?{error:"health fields need a pet Everfur reads as a dog or a cat (dog, canine, k9, puppy, cat, feline, kitten)"}:{body:body}}var str2=value=>typeof value=="string"?value:null,pick=(allowed,value)=>typeof value=="string"&&allowed.has(value)?value:null,bool2=value=>typeof value=="boolean"?value:null;function itemsFromWire(raw,map){return Array.isArray(raw)?/* @__PURE__ */Object.freeze(raw.flatMap(row2=>{if(typeof row2!="object"||row2===null||Array.isArray(row2))return[];let item=map(row2);return item===null?[]:[item]})):/* @__PURE__ */Object.freeze([])}function medicationFromWire(o){let name=str2(o.name);return name===null||name.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(o.ref),name:name,dose:str2(o.dose),frequency:str2(o.frequency),startDate:str2(o.start_date),endDate:str2(o.end_date),notes:str2(o.notes)})}function petHealthFromWire(o){let version=o.profile_version;/* @__PURE__ */
|
|
119
|
+
return Object.freeze({profileVersion:typeof version=="number"&&Number.isInteger(version)&&version>=0?version:0,sex:pick(SEXES,o.sex),spayedNeutered:bool2(o.spayed_neutered),birthDate:str2(o.birth_date),birthDatePrecision:pick(PRECISIONS,o.birth_date_precision),activityLevel:pick(ACTIVITY,o.activity_level),indoorOutdoor:pick(INDOOR_OUTDOOR,o.indoor_outdoor),foodBrand:str2(o.food_brand),foodType:str2(o.food_type),microchipId:str2(o.microchip_id),allergies:itemsFromWire(o.allergies,row2=>{let allergen=str2(row2.allergen);return allergen===null||allergen.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(row2.ref),allergen:allergen,severity:pick(SEVERITIES,row2.severity),notes:str2(row2.notes)})}),medications:itemsFromWire(o.medications,medicationFromWire),supplements:itemsFromWire(o.supplements,medicationFromWire),conditions:itemsFromWire(o.conditions,row2=>{let conditionName=str2(row2.condition_name);return conditionName===null||conditionName.length===0?null:/* @__PURE__ */Object.freeze({ref:str2(row2.ref),conditionName:conditionName,diagnosedDate:str2(row2.diagnosed_date),notes:str2(row2.notes)})})})}var PET_NAME_MAX=100,PET_SPECIES_MAX=50,PET_BREED_MAX=100,PET_AGE_YEARS_MAX=50,PET_WEIGHT_KG_MAX=500,PET_REF_MAX=128,ERASE_USER_DATA_TIMEOUT_MS=6e4;function invalid3(wireMessage){return makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage})}function checkString(field,value,max){if(typeof value!="string")return invalid3(`${field} must be a string`);let length=serverLength(value);return length<=max?null:invalid3(`${field} is ${length} characters; the server accepts at most ${max}`)}function outOfRange(field,value,max){return typeof value=="number"&&Number.isFinite(value)&&value>=0&&value<=max?null:invalid3(`${field} must be a finite number between 0 and ${max}`)}function validate(petRef,profile){if(typeof petRef!="string")return invalid3("pet_ref must be a string");if(petRef.trim().length===0)return invalid3("pet_ref must not be blank");if(hasLoneSurrogate(petRef))return invalid3("pet_ref contains an unpaired surrogate and cannot be encoded");if(profile!=null&&typeof profile!="object")return invalid3("profile must be an object");let checks=[checkString("pet_ref",petRef,PET_REF_MAX)];return profile?.name!==void 0&&checks.push(checkString("name",profile.name,PET_NAME_MAX)),profile?.species!==void 0&&checks.push(checkString("species",profile.species,PET_SPECIES_MAX)),profile?.breed!==void 0&&checks.push(checkString("breed",profile.breed,PET_BREED_MAX)),profile?.ageYears!==void 0&&checks.push(outOfRange("age_years",profile.ageYears,PET_AGE_YEARS_MAX)),profile?.weightKg!==void 0&&checks.push(outOfRange("weight_kg",profile.weightKg,PET_WEIGHT_KG_MAX)),checks.find(c=>c!==null)??null}function healthToWire(source,species){let health=petHealthToWire(source,species);return"error"in health?{error:invalid3(health.error)}:health}function patchToWire(patch){if(typeof patch!="object"||patch===null)return{error:invalid3("patch must be an object")};let p=patch,fields=[["name","name",v=>checkString("name",v,PET_NAME_MAX)],["species","species",v=>checkString("species",v,PET_SPECIES_MAX)],["breed","breed",v=>checkString("breed",v,PET_BREED_MAX)],["ageYears","age_years",v=>outOfRange("age_years",v,PET_AGE_YEARS_MAX)],["weightKg","weight_kg",v=>outOfRange("weight_kg",v,PET_WEIGHT_KG_MAX)]],body={};for(let[key,wire,check]of fields){let value=p[key];if(value!==void 0){if(value!==null){let bad=check(value);if(bad!==null)return{error:bad}}body[wire]=value}}let health=healthToWire(p,p.species);return"error"in health?health:(Object.assign(body,health.body),Object.keys(body).length===0?{error:invalid3("patch must change at least one field")}:{body:body})}function toWire(profile){if(profile==null)return{body:{}};let health=healthToWire(profile,profile.species);return"error"in health?health:{body:{...profile.name!==void 0?{name:profile.name}:{},...profile.species!==void 0?{species:profile.species}:{},...profile.breed!==void 0?{breed:profile.breed}:{},...profile.ageYears!==void 0?{age_years:profile.ageYears}:{},...profile.weightKg!==void 0?{weight_kg:profile.weightKg}:{},...health.body}}}var str3=v=>typeof v=="string"?v:null,num2=v=>typeof v=="number"&&Number.isFinite(v)?v:null;function fromWire2(raw,petRef){let o=typeof raw=="object"&&raw!==null?raw:{};/* @__PURE__ */
|
|
120
|
+
return Object.freeze({petRef:str3(o.pet_ref)??petRef,name:str3(o.name),species:str3(o.species),breed:str3(o.breed),ageYears:num2(o.age_years),weightKg:num2(o.weight_kg)})}function widgetPetFromWire(raw){if(typeof raw!="object"||raw===null)return null;let o=raw,petRef=str3(o.pet_ref);return petRef===null||petRef.length===0?null:/* @__PURE__ */Object.freeze({petId:str3(o.pet_id),petRef:petRef,name:str3(o.name),species:str3(o.species),breed:str3(o.breed),ageYears:num2(o.age_years),weightKg:num2(o.weight_kg),updatedAt:str3(o.updated_at)})}function widgetPetProfileFromWire(raw){let pet=widgetPetFromWire(raw);return pet===null?null:/* @__PURE__ */Object.freeze({...pet,...petHealthFromWire(raw)})}function petListFromWire(raw){let rows2=Array.isArray(raw)?raw:typeof raw=="object"&&raw!==null&&Array.isArray(raw.pets)?raw.pets:[];/* @__PURE__ */
|
|
121
|
+
return Object.freeze(rows2.flatMap(row2=>{let pet=widgetPetFromWire(row2);return pet===null?[]:[pet]}))}function createPetsRepository(auth){return createPetsRepositoryOver(createRequestFunnel({auth:auth}),createRequestFunnel({auth:auth,unaryTimeoutMs:ERASE_USER_DATA_TIMEOUT_MS}))}function createPetsRepositoryOver(funnel,eraseFunnel=funnel){let withSignal=(req,signal)=>signal?{...req,signal:signal}:req,petPath=petRef=>validate(petRef,void 0)??`/widget/v1/pets/${encodeURIComponent(petRef)}`;return{async list(opts){let res=await funnel.send("pets.list",withSignal({method:"GET",path:"/widget/v1/pets"},opts?.signal));return res.ok?ok(petListFromWire(res.value)):err(res.error)},async registerPet(petRef,profile,opts){let invalid5=validate(petRef,profile);if(invalid5!==null)return err(invalid5);let wire=toWire(profile);if("error"in wire)return err(wire.error);let base={method:"POST",path:`/widget/v1/pets/${encodeURIComponent(petRef)}`,body:wire.body},res=await funnel.send("pets.registerPet",opts?.signal?{...base,signal:opts.signal}:base);return res.ok?ok(fromWire2(res.value,petRef)):err(res.error)},async updatePet(petRef,patch,opts){let path=petPath(petRef);if(typeof path!="string")return err(path);let wire=patchToWire(patch);if("error"in wire)return err(wire.error);let res=await funnel.send("pets.updatePet",withSignal({method:"PATCH",path:path,body:wire.body},opts?.signal));return res.ok?ok(fromWire2(res.value,petRef)):err(res.error)},async getPetProfile(petRef,opts){let path=petPath(petRef);if(typeof path!="string")return err(path);let res=await funnel.send("pets.getPetProfile",withSignal({method:"GET",path:`${path}/profile`},opts?.signal));if(!res.ok)return err(res.error);let profile=widgetPetProfileFromWire(res.value);return profile===null?err(makeEverfurError("internalError",{retryable:false,httpStatus:502,wireMessage:"the pet profile response carried no pet_ref"})):ok(profile)},async deletePet(petRef,opts){let path=petPath(petRef);if(typeof path!="string")return err(path);let res=await funnel.send("pets.deletePet",withSignal({method:"DELETE",path:path},opts?.signal));return res.ok?ok(void 0):err(res.error)},async eraseUserData(opts){let res=await eraseFunnel.send("pets.eraseUserData",withSignal({method:"DELETE",path:"/widget/v1/me"},opts?.signal),{maxAttempts:1});return res.ok?ok(void 0):err(res.error)}}}var listeners=/* @__PURE__ */new WeakMap;function subscribePetsChanged(runtime,listener){let set=listeners.get(runtime);return set===void 0&&(set=/* @__PURE__ */new Set,listeners.set(runtime,set)),set.add(listener),()=>{set?.delete(listener)}}function useEverfurPets(){let{runtime:runtime,userRef:userRef,activePet:activePetRef,scopeEpoch:scopeEpoch}=useEverfurContext(),repository=react.useMemo(()=>createPetsRepository(runtime.registry.services.authFor(userRef)),[runtime,userRef,scopeEpoch]),[state,setState]=react.useState({repository:repository,pets:[],loading:true,error:null}),current=state.repository===repository?state:{pets:[],loading:true,error:null},generation=react.useRef(0),load=react.useCallback(async()=>{let request=++generation.current;setState(previous=>({...previous,repository:repository,loading:true,error:null,pets:previous.repository===repository?previous.pets:[]}));let result=await repository.list();request===generation.current&&setState(result.ok?{repository:repository,pets:result.value,loading:false,error:null}:previous=>({repository:repository,pets:previous.repository===repository?previous.pets:[],loading:false,error:result.error}))},[repository]);react.useEffect(()=>(load(),()=>{generation.current+=1}),[load]),react.useEffect(()=>subscribePetsChanged(runtime,()=>{load()}),[runtime,load]);let activePet=react.useMemo(()=>activePetRef===null?null:current.pets.find(pet=>pet.petRef===activePetRef)??null,[activePetRef,current.pets]);return react.useMemo(()=>({pets:current.pets,activePet:activePet,loading:current.loading,error:current.error,refresh:load}),[current.pets,current.loading,current.error,activePet,load])}var TELEVET_BOOKING_STEPS=/* @__PURE__ */Object.freeze(["pet","where","issues","reason","emergency","clinician","time","review","booked"]),emptyTelevetDraft=/* @__PURE__ */Object.freeze({petId:null,state:null,clinicianId:null,slot:null,holdExpiresAt:null,shareHealthRecords:false,idempotencyKey:null});function initialTelevetBookingState(ctx,seed={}){let draft=/* @__PURE__ */Object.freeze({...emptyTelevetDraft,...seed}),index=nextVisible(0,ctx);/* @__PURE__ */
|
|
122
|
+
return Object.freeze({index:index,draft:draft,furthestIndex:index})}function isSkipped(step,ctx){return step==="pet"?ctx.ownedPetCount<=1:step==="issues"?ctx.withIssues!==true:false}function stepAt(index){return TELEVET_BOOKING_STEPS[index]}function nextVisible(from,ctx){for(let i=from;i<TELEVET_BOOKING_STEPS.length;i+=1){let step=stepAt(i);if(step&&!isSkipped(step,ctx))return i}return TELEVET_BOOKING_STEPS.length-1}function previousVisible(from,ctx){for(let i=from;i>=0;i-=1){let step=stepAt(i);if(step&&!isSkipped(step,ctx))return i}return null}function hasPreviousStep(state,ctx){return previousVisible(state.index-1,ctx)!==null}function televetBookingReducer(state,action,ctx){switch(action.type){case"patch":{let draft={...state.draft,...action.patch};return("petId"in action.patch&&action.patch.petId!==state.draft.petId||"state"in action.patch&&action.patch.state!==state.draft.state||"clinicianId"in action.patch&&action.patch.clinicianId!==state.draft.clinicianId)&&state.draft.slot?/* @__PURE__ */Object.freeze({...state,draft:/* @__PURE__ */Object.freeze({...draft,slot:null,holdExpiresAt:null,idempotencyKey:null})}):/* @__PURE__ */Object.freeze({...state,draft:/* @__PURE__ */Object.freeze(draft)})}case"next":{let index=nextVisible(state.index+1,ctx);/* @__PURE__ */
|
|
123
|
+
return Object.freeze({...state,index:index,furthestIndex:Math.max(state.furthestIndex,index)})}case"back":{if(stepAt(state.index)==="booked")return state;let index=previousVisible(state.index-1,ctx);return index===null?state:/* @__PURE__ */Object.freeze({...state,index:index})}case"goTo":{let target=TELEVET_BOOKING_STEPS.indexOf(action.step);if(target<0)return state;let index=isSkipped(action.step,ctx)?nextVisible(target,ctx):target;/* @__PURE__ */
|
|
124
|
+
return Object.freeze({...state,index:index,furthestIndex:Math.max(state.furthestIndex,index)})}default:return state}}function televetBarSteps(ctx){return TELEVET_BOOKING_STEPS.filter(step=>step!=="booked"&&(ctx===void 0||!isSkipped(step,ctx)))}function televetBarPosition(step,steps,triageOpen=false){let shown=step==="reason"&&triageOpen?"emergency":step,list=shown==="booked"||steps.includes(shown)?steps:televetBarSteps();return{current:shown==="booked"?list.length:list.indexOf(shown)+1,total:list.length,steps:list}}function currentStep(state){return stepAt(state.index)??"pet"}function canConfirm(draft,reasonText){let reason=reasonText.trim();return!!draft.petId&&!!draft.clinicianId&&!!draft.slot&&isWellFormedStateCode(draft.state)&&reason.length>0&&reason.length<=REASON_TEXT_MAX}function isHoldExpired(draft,nowMs){if(!draft.holdExpiresAt)return false;let expires=Date.parse(draft.holdExpiresAt);return Number.isNaN(expires)?false:expires<=nowMs}function holdsSlot(draft,slotId,nowMs){return draft.slot?.slotId!==slotId||draft.holdExpiresAt===null||draft.idempotencyKey===null?false:!isHoldExpired(draft,nowMs)}var RELEASED_HOLD=/* @__PURE__ */Object.freeze({slot:null,holdExpiresAt:null,idempotencyKey:null}),mintBookingAttempt=defaultIdempotencyKeyFactory();function televetBookingKey(slotId){return`televet.book.${mintBookingAttempt()}.${slotId}`}function attestation(stateAttested,termsAttested,policy){let version=policy?.version?.trim()??"";return!stateAttested||!termsAttested||version.length===0?/* @__PURE__ */Object.freeze({}):/* @__PURE__ */Object.freeze({state_attested:true,cancellation_policy_version:version})}function parse(iso){let date2=new Date(iso);return Number.isNaN(date2.getTime())?null:date2}function formatClock(iso){let date2=parse(iso);return date2?date2.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"}):""}function formatDate(iso){let date2=parse(iso);return date2?date2.toLocaleDateString(void 0,{month:"long",day:"numeric"}):""}function formatDayLong(iso){let date2=parse(iso);return date2?date2.toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"}):""}var CONSULT_MINUTES=10;function formatZone(iso){let date2=parse(iso);return date2?new Intl.DateTimeFormat(void 0,{timeZoneName:"short"}).formatToParts(date2).find(p=>p.type==="timeZoneName")?.value??"":""}function formatVisitRange(iso){let date2=parse(iso);if(!date2)return"";let end=new Date(date2.getTime()+CONSULT_MINUTES*6e4).toISOString(),zone=formatZone(iso),bracket=`${formatClock(iso)} - ${formatClock(end)}`;return zone&&zone!==""?`${bracket} ${zone}`:bracket}function formatWhen(iso){let date2=formatDate(iso),clock=[formatClock(iso),formatZone(iso)].filter(Boolean).join(" ");return[date2,clock].filter(Boolean).join(", ")}function formatWhenWithDay(iso){let date2=parse(iso);return date2?[date2.toLocaleDateString(void 0,{weekday:"short"}),formatWhen(iso)].filter(Boolean).join(", "):""}function formatClockWithZone(iso){return[formatClock(iso),formatZone(iso)].filter(Boolean).join(" ")}function localDayKey(iso){let date2=parse(iso);return date2?`${date2.getFullYear()}-${date2.getMonth()+1}-${date2.getDate()}`:"unknown"}function formatMonthLabel(iso){let date2=parse(iso);return date2===null?"":date2.toLocaleDateString(void 0,{month:"long"})}function formatFullDayLabel(iso){let date2=parse(iso);return date2===null?"":date2.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric"})}function shortDay(date2){return date2.toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})}function formatVisitDayTime(iso){let date2=parse(iso);return date2?[shortDay(date2),formatClockWithZone(iso)].filter(Boolean).join(" · "):""}function formatBookedWhen(iso){return parse(iso)?`${formatFullDayLabel(iso)} at ${formatClockWithZone(iso)}`:""}function formatMoveTo(iso,withZone=false){let date2=parse(iso);return date2?`${shortDay(date2)} at ${withZone?formatClockWithZone(iso):formatClock(iso)}`:""}function televetDayPeriod(iso){let date2=parse(iso),hour=date2===null?0:date2.getHours();return hour<12?"morning":hour<17?"afternoon":"evening"}function useBookingSubmit(deps){let{draft:draft,reasonText:reasonText,book:book,stateAttested:stateAttested,termsAttested:termsAttested,cancellationPolicy:cancellationPolicy,triage:triage,goTo:goTo,releaseSlot:releaseSlot,setFailure:setFailure,setEmergency:setEmergency,setBookedConsult:setBookedConsult,onBooked:onBooked,media:media}=deps,submitBooking=react.useCallback(acknowledgedEmergency=>{let idempotencyKey=draft.idempotencyKey;if(!canConfirm(draft,reasonText)||!idempotencyKey||media?.sending)return;if(isHoldExpired(draft,Date.now())){setFailure("expired"),goTo("time");return}let refuse=error=>{let refusal=televetBookingRefusal(error);if(refusal.kind==="emergency"){setEmergency(refusal.categories);return}if(refusal.kind==="rate_limited"){setFailure("rate_limited");return}setFailure(refusal.kind==="not_entitled"?"not_entitled":refusal.kind==="slot_taken"?"taken":refusal.kind==="clinician_unavailable"?"clinician_unavailable":refusal.kind==="unavailable"?"unavailable":"failed"),refusal.kind==="slot_taken"&&(releaseSlot(),goTo("time"))};setFailure(null),setEmergency(null);let bookWith=mediaRefs=>book.mutate({pet_id:draft.petId,clinician_id:draft.clinicianId,slot_id:draft.slot.slotId,state:draft.state,reason_text:reasonText.trim(),species:null,media_refs:mediaRefs,emergency_acknowledged:acknowledgedEmergency||triage.isAcknowledged(reasonText),share_health_records:draft.shareHealthRecords,...attestation(stateAttested,termsAttested,cancellationPolicy)},idempotencyKey,{onSuccess:consult=>{if(!isLiveConsult(consult)){refuse(televetBookingNotLiveError(consult.status));return}setBookedConsult(consult),goTo("booked"),onBooked?.(consult)},onError:error=>refuse(foldTelevetBookingKeyReused(error))});if(!media){bookWith([]);return}media.send().then(bookWith,()=>bookWith([]))},[draft,reasonText,book,stateAttested,termsAttested,cancellationPolicy,triage,goTo,releaseSlot,setFailure,setEmergency,setBookedConsult,onBooked,media]),confirm=react.useCallback(()=>submitBooking(false),[submitBooking]);return{submitBooking:submitBooking,confirm:confirm}}function heldSlotId(draft){return draft.slot!==null&&draft.holdExpiresAt!==null&&draft.idempotencyKey!==null?draft.slot.slotId:null}function useHoldRelease({controller:controller,draft:draft,keep:keep}){let held=heldSlotId(draft),latest=react.useRef({controller:controller,keep:keep});latest.current={controller:controller,keep:keep};let last=react.useRef(null);react.useEffect(()=>{let previous=last.current;last.current=held,previous!==null&&previous!==held&&release(latest.current,previous)},[held]),react.useEffect(()=>()=>{let current=last.current;last.current=null,current!==null&&release(latest.current,current)},[])}function release(deps,slotId){if(deps.keep)return;let controller=deps.controller,releaseHold=controller?.releaseHold;controller==null||releaseHold===void 0||releaseHold.call(controller,slotId).catch(()=>{}).finally(()=>invalidateTelevetReads(controller,TELEVET_SLOT_READS))}function televetHoldFailure(error){if(error.httpStatus===409)/* @__PURE__ */return Object.freeze({failure:"taken"});switch(televetBookingRefusal(error).kind){case"slot_taken":/* @__PURE__ */
|
|
125
|
+
return Object.freeze({failure:"taken"});case"rate_limited":/* @__PURE__ */
|
|
126
|
+
return Object.freeze({failure:"rate_limited"});case"not_entitled":/* @__PURE__ */
|
|
127
|
+
return Object.freeze({failure:"not_entitled"});case"unavailable":/* @__PURE__ */
|
|
128
|
+
return Object.freeze({failure:"unavailable"});default:/* @__PURE__ */
|
|
129
|
+
return Object.freeze({failure:"failed"})}}function useSlotHold(deps){let{draft:draft,hold:hold,dispatch:dispatch,setFailure:setFailure,refetchSlots:refetchSlots}=deps;return react.useCallback(slot=>{if(setFailure(null),holdsSlot(draft,slot.slotId,Date.now())){dispatch({type:"next"});return}hold.mutate(slot.slotId,{onSuccess:awarded=>{dispatch({type:"patch",patch:{slot:slot,holdExpiresAt:awarded.expiresAt,idempotencyKey:televetBookingKey(slot.slotId)}}),dispatch({type:"next"})},onError:error=>{let refused=televetHoldFailure(error);setFailure(refused.failure),refused.failure==="taken"&&refetchSlots()}})},[draft,hold,dispatch,setFailure,refetchSlots])}function televetEmptyRosterView(cause){/* @__PURE__ */
|
|
130
|
+
return Object.freeze(cause==="dark"?{title:TELEVET_BOOKING_COPY.noCliniciansTitle,message:TELEVET_BOOKING_COPY.noCliniciansBody,retryLabel:TELEVET_BOOKING_COPY.noCliniciansRetryCta,interestReason:null}:{title:TELEVET_BOOKING_COPY.noCliniciansTitle,message:TELEVET_BOOKING_COPY.noCliniciansRegionBody,retryLabel:null,interestReason:"no_licensed_vet"})}function televetEmptyRosterCause(surfaceServed){return surfaceServed?"roster":"dark"}var ok2=value=>/* @__PURE__ */Object.freeze({ok:true,value:value}),err2=error=>/* @__PURE__ */Object.freeze({ok:false,error:error});function failure(code,retryable,filename,extra){/* @__PURE__ */
|
|
131
|
+
return Object.freeze({code:code,retryable:retryable,filename:filename,...{}})}async function uploadAttachmentBytes(transport,policy,attachment,opts){let cancelled=()=>opts?.signal?.aborted===true;if(cancelled())return err2(failure("cancelled",true,attachment.filename));try{return await transport.postMultipart(policy,attachment.file,{...opts?.signal?{signal:opts.signal}:{},...opts?.onProgress?{onProgress:opts.onProgress}:{}}),ok2(void 0)}catch{return cancelled()?err2(failure("cancelled",true,attachment.filename)):err2(failure("server",true,attachment.filename))}}var NO_MEDIA_SHORTFALL=/* @__PURE__ */Object.freeze({failed:0,refused:/* @__PURE__ */Object.freeze({size:0,type:0,unreadable:0})});function isMediaShortfallEmpty(shortfall){let{failed:failed,refused:refused}=shortfall;return failed<=0&&refused.size<=0&&refused.type<=0&&refused.unreadable<=0}function televetMediaShortfallLines(shortfall){let count=n=>Number.isFinite(n)&&n>0?Math.floor(n):0,c=TELEVET_BOOKING_COPY.media;return[{n:count(shortfall.failed),one:c.droppedTemplate,many:c.droppedPluralTemplate},{n:count(shortfall.refused.size),one:c.refusedSizeTemplate,many:c.refusedSizePluralTemplate},{n:count(shortfall.refused.type),one:c.refusedTypeTemplate,many:c.refusedTypePluralTemplate},{n:count(shortfall.refused.unreadable),one:c.refusedUnreadableTemplate,many:c.refusedUnreadablePluralTemplate}].filter(line=>line.n>0).map(line=>fill(line.n===1?line.one:line.many,{n:String(line.n)}))}function mediaShortfallFromUnsentPicks(pickCount){let n=Number.isFinite(pickCount)&&pickCount>0?Math.floor(pickCount):0;return n===0?NO_MEDIA_SHORTFALL:/* @__PURE__ */Object.freeze({failed:n,refused:NO_MEDIA_SHORTFALL.refused})}function withUnsentPicks(shortfall,pickCount){let extra=mediaShortfallFromUnsentPicks(pickCount);return extra.failed===0?shortfall:/* @__PURE__ */Object.freeze({failed:shortfall.failed+extra.failed,refused:shortfall.refused})}var PRESIGN_MARGIN_MS=6e4;function validated(pick2){let contentType=televetAttachmentContentType(pick2.filename,pick2.mimeType);return contentType===null?null:{file:{uri:pick2.uri,name:pick2.filename,mimeType:contentType,sizeBytes:pick2.fileSize},filename:pick2.filename,contentType:contentType,sizeBytes:pick2.fileSize}}function fresh(state,now){if(state?.kind!=="ready")return null;let lifetime=state.policy.expires_in_seconds*1e3;return now-state.at<lifetime-PRESIGN_MARGIN_MS?state.policy:null}function useTelevetBookingMedia({media:media,controller:controller,transport:transport}){let[states,setStates]=react.useState(()=>/* @__PURE__ */new Map),[darkAnswered,setDarkAnswered]=react.useState(false),[sending,setSending]=react.useState(false),statesRef=react.useRef(states),mediaRef=react.useRef(media);mediaRef.current=media;let darkRef=react.useRef(false),sendingRef=react.useRef(false),alive=react.useRef(new AbortController);react.useEffect(()=>{let controllerForThisMount=new AbortController;return alive.current=controllerForThisMount,()=>controllerForThisMount.abort()},[]);let initiate=controller?.initiateAttachment?.bind(controller),dark=darkAnswered||initiate===void 0,put=react.useCallback((uri,next)=>{let map=new Map(statesRef.current);map.set(uri,next),statesRef.current=map,setStates(map)},[]),goDark=react.useCallback(()=>{darkRef.current=true,setDarkAnswered(true)},[]),presign=react.useCallback(async(pick2,file)=>{if(initiate===void 0)return"dark";let res=await initiate({filename:file.filename,contentType:file.contentType,fileSize:file.sizeBytes},alive.current.signal);if(alive.current.signal.aborted)return null;if(res.ok)return put(pick2.uri,{kind:"ready",policy:res.value,at:Date.now()}),res.value;let cause=televetAttachmentInitiateFailure(res.error);return cause==="dark"?"dark":(put(pick2.uri,cause==="failed"?{kind:"retry"}:{kind:"refused",cause:cause}),null)},[initiate,put]);react.useEffect(()=>{if(!dark)for(let pick2 of media){if(statesRef.current.has(pick2.uri))continue;let refusal=televetAttachmentRefusal(pick2),file=validated(pick2);if(refusal!==null||file===null){put(pick2.uri,{kind:"refused",cause:refusal??"type"});continue}put(pick2.uri,{kind:"checking"}),presign(pick2,file).then(answer=>{answer==="dark"&&goDark()})}},[media,dark,presign,put,goDark]);let send=react.useCallback(async()=>{if(darkRef.current||initiate===void 0||sendingRef.current)return[];sendingRef.current=true,setSending(true);let keys=[];try{for(let pick2 of mediaRef.current){let state=statesRef.current.get(pick2.uri);if(state?.kind==="sent"){keys.push(state.s3Key);continue}if(state?.kind==="refused")continue;let file=validated(pick2);if(file===null)continue;let policy=fresh(state,Date.now());if(policy===null){let answer=await presign(pick2,file);if(answer==="dark")return goDark(),[];if(answer===null){statesRef.current.get(pick2.uri)?.kind==="retry"&&put(pick2.uri,{kind:"failed"});continue}policy=answer}if(alive.current.signal.aborted)return[];let staged=await uploadAttachmentBytes(transport,policy,file,{signal:alive.current.signal});if(alive.current.signal.aborted)return[];staged.ok?(put(pick2.uri,{kind:"sent",s3Key:policy.s3_key}),keys.push(policy.s3_key)):put(pick2.uri,{kind:"failed"})}return keys}catch{return keys}finally{sendingRef.current=false,alive.current.signal.aborted||setSending(false)}},[initiate,presign,put,goDark,transport]),shortfall=react.useMemo(()=>{if(media.length===0)return NO_MEDIA_SHORTFALL;if(dark)return mediaShortfallFromUnsentPicks(media.length);let refused={size:0,type:0,unreadable:0},failed=0;for(let pick2 of media){let state=states.get(pick2.uri);state?.kind==="refused"?refused[state.cause]+=1:state?.kind==="failed"&&(failed+=1)}return failed===0&&refused.size+refused.type+refused.unreadable===0?NO_MEDIA_SHORTFALL:/* @__PURE__ */Object.freeze({failed:failed,refused:/* @__PURE__ */Object.freeze(refused)})},[media,dark,states]),sentKeys=react.useMemo(()=>media.flatMap(pick2=>{let state=states.get(pick2.uri);return state?.kind==="sent"?[{key:state.s3Key,pick:pick2}]:[]}),[media,states]),bookedShortfall=react.useCallback(consult=>{if(dark)return shortfall;let kept=new Set(consult.mediaRefs),dropped=sentKeys.filter(sent=>!kept.has(sent.key)).length;return dropped===0?shortfall:/* @__PURE__ */Object.freeze({failed:shortfall.failed+dropped,refused:shortfall.refused})},[dark,shortfall,sentKeys]),sentOnePhoto=react.useCallback(consult=>{if(dark||sentKeys.length!==1)return false;let[only]=sentKeys;return only===void 0||!consult.mediaRefs.includes(only.key)?false:(televetAttachmentContentType(only.pick.filename,only.pick.mimeType)??"").startsWith("image/")},[dark,sentKeys]),live=!dark&&[...states.values()].some(state=>state.kind==="ready"||state.kind==="sent");return react.useMemo(()=>({shortfall:shortfall,sending:sending,live:live,send:send,bookedShortfall:bookedShortfall,sentOnePhoto:sentOnePhoto}),[shortfall,sending,live,send,bookedShortfall,sentOnePhoto])}var FILE_FIELD="file",NO_BYTES="chat attachment upload: the file handle carries no bytes",FAILED="chat attachment upload failed";function createWebAttachmentTransport(options={}){let doFetch=options.fetch??((input,init)=>fetch(input,init));/* @__PURE__ */
|
|
132
|
+
return Object.freeze({postMultipart(policy,file,opts){let blob=file.blob;if(blob===void 0)return Promise.reject(new Error(NO_BYTES));if(opts.signal?.aborted===true)return Promise.reject(new Error(FAILED));let form=new FormData;for(let[name,value]of Object.entries(policy.upload_fields))form.append(name,value);return form.append(FILE_FIELD,blob,"image"),doFetch(policy.upload_url,{method:"POST",body:form,mode:"cors",credentials:"omit",...opts.signal?{signal:opts.signal}:{}}).then(response=>{if(!(response.status>=200&&response.status<300))return Promise.reject(new Error(FAILED));opts.onProgress?.(1)},()=>Promise.reject(new Error(FAILED)))}})}var UNREADABLE="booking attachment upload: the picked file could not be read";function createWebTelevetMediaTransport(options={}){let doFetch=options.fetch??((input,init)=>fetch(input,init)),post=createWebAttachmentTransport({fetch:doFetch});/* @__PURE__ */
|
|
133
|
+
return Object.freeze({postMultipart(policy,file,opts){return file.blob!==void 0?post.postMultipart(policy,file,opts):doFetch(file.uri,opts.signal?{signal:opts.signal}:void 0).then(response=>response.blob()).then(blob=>post.postMultipart(policy,{...file,blob:new Blob([blob],{type:file.mimeType})},opts),()=>Promise.reject(new Error(UNREADABLE)))}})}var TELEVET_SIMULATOR_COPY=/* @__PURE__ */Object.freeze({title:"Vet test mode (sandbox tenants)",create:"Create a simulated visit for this pet",createLabel:"Create",visitTemplate:"Visit {visitRef}: {status}, scheduled {scheduledAt}.",eventsNote:"Raise one of the visit events that is not a status change, to see what a tap on it opens:",advance:/* @__PURE__ */Object.freeze({completed:"Complete it",cancelled:"Cancel it",no_show:"Mark no-show"}),events:/* @__PURE__ */Object.freeze({rescheduled:"Rescheduled",reminder:"Reminder (24h)",followup_sent:"Follow-up sent",message_received:"Vet replied",ended:"Ended"}),resultTemplate:"{label}: {result}.",errorTemplate:"{label}: {message}"});var VET_VISIT_SANDBOX_VISITS_PATH="/widget/v1/televet/sandbox/visits",PET_REF_MAX2=128,VISIT_REF_MAX=64,STATUSES=/* @__PURE__ */new Set(["booked","cancelled","completed","no_show"]),RESULTS=/* @__PURE__ */new Set(["applied","already_applied","not_applicable"]),EVENTS=/* @__PURE__ */new Set(["rescheduled","reminder","followup_sent","message_received","ended"]),REMINDER_STAGES=/* @__PURE__ */new Set(["24h","30m"]);function invalid4(wireMessage){return makeEverfurError("validationFailed",{retryable:false,wireMessage:wireMessage})}function textError(name,value,max){return typeof value!="string"||value.length===0?invalid4(`${name} is required and must be a non-empty string`):hasLoneSurrogate(value)?invalid4(`${name} contains an unpaired surrogate and cannot be encoded`):serverLength(value)>max?invalid4(`${name} is longer than ${max} characters`):null}function mapActionResult(wire){if(typeof wire!="object"||wire===null)return null;let{result:result,visit:visit}=wire;if(typeof result!="string"||!RESULTS.has(result)||typeof visit!="object"||visit===null)return null;let{visit_ref:visit_ref,pet_ref:pet_ref,status:status,scheduled_at:scheduled_at}=visit;return typeof visit_ref!="string"||visit_ref.length===0||typeof pet_ref!="string"||pet_ref.length===0||typeof status!="string"||!STATUSES.has(status)||typeof scheduled_at!="string"||scheduled_at.length===0?null:/* @__PURE__ */Object.freeze({result:result,visit:/* @__PURE__ */Object.freeze({visitRef:visit_ref,petRef:pet_ref,status:status,scheduledAt:scheduled_at})})}function createVetVisitSandboxController(deps){let funnel=deps.funnel??createRequestFunnel({auth:deps.auth,...deps.errorPolicy?{errorPolicy:deps.errorPolicy}:{}}),run=async(call,path,body)=>{let res=await funnel.send(call,{method:"POST",path:path,body:body},{idempotent:false,maxAttempts:1});if(!res.ok)return err(res.error);let mapped=mapActionResult(res.value);return mapped===null?err(makeEverfurError("internalError",{retryable:false})):ok(mapped)};return{createVisit(petRef){let bad=textError("pet_ref",petRef,PET_REF_MAX2);return bad!==null?Promise.resolve(err(bad)):run("televet.sandbox.createVisit",VET_VISIT_SANDBOX_VISITS_PATH,{pet_ref:petRef})},advanceVisit(visitRef,to){let bad=textError("visit_ref",visitRef,VISIT_REF_MAX);if(bad!==null)return Promise.resolve(err(bad));if(typeof to!="string"||!STATUSES.has(to))return Promise.resolve(err(invalid4("to must be booked, cancelled, completed or no_show")));let path=`${VET_VISIT_SANDBOX_VISITS_PATH}/${encodeURIComponent(visitRef)}/advance`;return run("televet.sandbox.advanceVisit",path,{to:to})},simulateVisitEvent(visitRef,event,stage){let bad=textError("visit_ref",visitRef,VISIT_REF_MAX);if(bad!==null)return Promise.resolve(err(bad));if(typeof event!="string"||!EVENTS.has(event))return Promise.resolve(err(invalid4(`event must be one of ${[...EVENTS].join(", ")}`)));if(event==="reminder"){if(typeof stage!="string"||!REMINDER_STAGES.has(stage))return Promise.resolve(err(invalid4(`stage must be one of ${[...REMINDER_STAGES].join(", ")} for a reminder`)))}else if(stage!==void 0)return Promise.resolve(err(invalid4("stage is only for a reminder")));let path=`${VET_VISIT_SANDBOX_VISITS_PATH}/${encodeURIComponent(visitRef)}/simulate`;return run("televet.sandbox.simulateVisitEvent",path,stage===void 0?{event:event}:{event:event,stage:stage})}}}function useEverfurVetVisitSandbox(){let{runtime:runtime,userRef:userRef,scopeEpoch:scopeEpoch}=useEverfurContext();return react.useMemo(()=>{let{services:services}=runtime.registry;return createVetVisitSandboxController({auth:services.authFor(userRef),...services.errorPolicy?{errorPolicy:services.errorPolicy}:{}})},[runtime,userRef,scopeEpoch])}function televetOpensSimulator(sandboxTenant,allowance){return!sandboxTenant||!allowance.enabled?false:allowance.data!==null&&allowance.data.active===false||televetReadIsDark({error:allowance.error??null})}var isSandbox=snapshot=>snapshot.livemode===false;function useTelevetSandboxTenant(){let store=useEverfurContext().runtime.entitlements,read=react.useCallback(()=>isSandbox(store.getSnapshot()),[store]);return react.useSyncExternalStore(store.subscribe,read,read)}function useTelevetSimulatorRoute(allowance,notEntitled){let simulate=televetOpensSimulator(useTelevetSandboxTenant(),allowance);return{simulate:simulate,fundingRefused:notEntitled&&!simulate}}function televetRosterReadsAllowed(sandboxTenant,allowance){return!sandboxTenant||!allowance.enabled?true:(allowance.data!==null||(allowance.error??null)!==null)&&!televetOpensSimulator(true,allowance)}function useTelevetRosterController(controller,allowance){return televetRosterReadsAllowed(useTelevetSandboxTenant(),allowance)?controller:null}function useTelevetVisitSimulator(petRef){let sandbox=useEverfurVetVisitSandbox(),[visit,setVisit]=react.useState(null),[line,setLine]=react.useState(null),[busy,setBusy]=react.useState(false),inFlight=react.useRef(false),alive=react.useRef(true);react.useEffect(()=>(alive.current=true,()=>{alive.current=false}),[]);let run=react.useCallback((label,send,keepVisit)=>{inFlight.current||(inFlight.current=true,setBusy(true),send().then(res=>{if(inFlight.current=false,!!alive.current){if(setBusy(false),!res.ok){setLine({tone:"danger",text:fill(TELEVET_SIMULATOR_COPY.errorTemplate,{label:label,message:res.error.displayMessage})});return}keepVisit&&setVisit(res.value.visit),setLine({tone:"ok",text:fill(TELEVET_SIMULATOR_COPY.resultTemplate,{label:label,result:res.value.result})})}}))},[]),create=react.useCallback(()=>{run(TELEVET_SIMULATOR_COPY.createLabel,()=>sandbox.createVisit(petRef),true)},[petRef,run,sandbox]),advance=react.useCallback(to=>{visit!==null&&run(TELEVET_SIMULATOR_COPY.advance[to],()=>sandbox.advanceVisit(visit.visitRef,to),true)},[run,sandbox,visit]),raise=react.useCallback(event=>{if(visit===null)return;let stage=event==="reminder"?"24h":void 0;run(TELEVET_SIMULATOR_COPY.events[event],()=>sandbox.simulateVisitEvent(visit.visitRef,event,stage),false)},[run,sandbox,visit]),visitLine=visit===null?null:fill(TELEVET_SIMULATOR_COPY.visitTemplate,{visitRef:visit.visitRef,status:visit.status,scheduledAt:visit.scheduledAt});return{visit:visit,visitLine:visitLine,line:line,busy:busy,create:create,advance:advance,raise:raise}}var TELEVET_SIMULATOR_MOVES=/* @__PURE__ */Object.freeze(["completed","cancelled","no_show"]),TELEVET_SIMULATOR_EVENTS=/* @__PURE__ */Object.freeze(["rescheduled","reminder","followup_sent","message_received","ended"]);function televetTriageReadFrom(controller){let triage=controller?.triage;return!controller||!triage?null:async(reasonText,signal)=>{let res=await triage.call(controller,reasonText,signal);return res.ok?res.value:null}}function useEarlyTriage(read){let[open,setOpen]=react.useState(false),[checking,setChecking]=react.useState(false),[acknowledgedReason,setAcknowledgedReason]=react.useState(null),triaged=react.useRef(null),inFlight=react.useRef(null),live=react.useRef(true);react.useEffect(()=>(live.current=true,()=>{live.current=false,inFlight.current?.abort(),inFlight.current=null}),[]);let cancel=react.useCallback(()=>{inFlight.current?.abort(),inFlight.current=null,live.current&&setChecking(false)},[]),check=react.useCallback(async reasonText=>{if(inFlight.current!==null)return false;let reason=reasonText.trim();if(acknowledgedReason!==null&&acknowledgedReason===reason||!read)return true;let emergency=triaged.current!==null&&triaged.current.reason===reason?triaged.current.emergency:null;if(emergency===null){let controller=new AbortController;inFlight.current=controller,setChecking(true);try{let verdict=await read(reason,controller.signal);if(controller.signal.aborted||!live.current)return!1;verdict===null?emergency=!1:(emergency=verdict.isEmergency||verdict.fallback,triaged.current=/* @__PURE__ */Object.freeze({reason:reason,emergency:emergency}))}catch{if(controller.signal.aborted||!live.current)return false;emergency=false}finally{inFlight.current===controller&&(inFlight.current=null,live.current&&setChecking(false))}}return emergency===true?(setOpen(true),false):true},[acknowledgedReason,read]),acknowledge=react.useCallback(reasonText=>{setAcknowledgedReason(reasonText.trim()),setOpen(false)},[]),close=react.useCallback(()=>setOpen(false),[]),reset=react.useCallback(()=>{cancel(),triaged.current=null,setAcknowledgedReason(null),setOpen(false)},[cancel]),isAcknowledged=react.useCallback(reasonText=>acknowledgedReason!==null&&acknowledgedReason===reasonText.trim(),[acknowledgedReason]);return{open:open,checking:checking,check:check,acknowledge:acknowledge,close:close,cancel:cancel,reset:reset,isAcknowledged:isAcknowledged}}function normalizeStateCode(state){let code=state?.trim().toUpperCase()??"";return/^[A-Z]{2}$/.test(code)?code:null}function useStateInterest(state,write){let normalized=normalizeStateCode(state),[phases,setPhases]=react.useState(()=>/* @__PURE__ */Object.freeze({})),revision=react.useRef(0),lastKey=react.useRef(null),actionFor=react.useCallback(reason=>{if(!write||normalized===null)return null;let key=`${normalized}:${reason}`;lastKey.current!==null&&lastKey.current!==key&&(revision.current+=1),lastKey.current=key;let phase=phases[key]??"idle";return{joined:phase==="joined",pending:phase==="pending",failed:phase==="failed",onPress:()=>{if(phase==="pending"||phase==="joined")return;let mine=revision.current+=1;setPhases(prev=>/* @__PURE__ */Object.freeze({...prev,[key]:"pending"})),(async()=>{let joined=false;try{joined=await write(normalized,reason)}catch{joined=false}revision.current===mine&&setPhases(prev=>/* @__PURE__ */Object.freeze({...prev,[key]:joined?"joined":"failed"}))})()}}},[normalized,phases,write]);return react.useMemo(()=>({actionFor:actionFor}),[actionFor])}var ARTIFACT_ISSUES=/* @__PURE__ */Object.freeze([{id:"itchy-skin",label:"Itchy skin and allergies"},{id:"ear-infections",label:"Ear problems"},{id:"upset-stomach",label:"Upset stomach"},{id:"anxiety",label:"Anxiety and behavior"},{id:"parasites",label:"Fleas, ticks and heartworm"},{id:"joint-pain",label:"Joints and mobility"},{id:"eye-issues",label:"Eyes"},{id:"urinary",label:"Peeing and urinary"},{id:"surgery-aftercare",label:"Surgery aftercare"},{id:"senior-care",label:"Senior care"},{id:"wellness",label:"A wellness check-in"}].map(chip=>/* @__PURE__ */Object.freeze(chip))),TELEVET_OTHER_ISSUE_ID="other";function televetIssueChips(species){/* @__PURE__ */
|
|
134
|
+
return Object.freeze([...ARTIFACT_ISSUES/* @__PURE__ */,Object.freeze({id:TELEVET_OTHER_ISSUE_ID,label:TELEVET_BOOKING_COPY.otherIssue})])}function composeTelevetReason(chipLabels,detail){let labels=chipLabels.filter(label=>label.trim().length>0),text2=detail.trim();return labels.length===0?text2:text2.length===0?labels.join(", "):`${labels.join(", ")}\n${text2}`}var TELEVET_US_STATES=/* @__PURE__ */Object.freeze([["AL","Alabama"],["AK","Alaska"],["AZ","Arizona"],["AR","Arkansas"],["CA","California"],["CO","Colorado"],["CT","Connecticut"],["DE","Delaware"],["DC","District of Columbia"],["FL","Florida"],["GA","Georgia"],["HI","Hawaii"],["ID","Idaho"],["IL","Illinois"],["IN","Indiana"],["IA","Iowa"],["KS","Kansas"],["KY","Kentucky"],["LA","Louisiana"],["ME","Maine"],["MD","Maryland"],["MA","Massachusetts"],["MI","Michigan"],["MN","Minnesota"],["MS","Mississippi"],["MO","Missouri"],["MT","Montana"],["NE","Nebraska"],["NV","Nevada"],["NH","New Hampshire"],["NJ","New Jersey"],["NM","New Mexico"],["NY","New York"],["NC","North Carolina"],["ND","North Dakota"],["OH","Ohio"],["OK","Oklahoma"],["OR","Oregon"],["PA","Pennsylvania"],["RI","Rhode Island"],["SC","South Carolina"],["SD","South Dakota"],["TN","Tennessee"],["TX","Texas"],["UT","Utah"],["VT","Vermont"],["VA","Virginia"],["WA","Washington"],["WV","West Virginia"],["WI","Wisconsin"],["WY","Wyoming"]].map(([code,name])=>/* @__PURE__ */Object.freeze({code:code,name:name})));function televetStateName(code){let upper=code?.trim().toUpperCase()??"";return TELEVET_US_STATES.find(s=>s.code===upper)?.name??upper}function televetWhereMeta(policy,petName){return policy?policy.wellnessAvailable?policy.prescriptionsAvailable?fill(TELEVET_BOOKING_COPY.wherePrescribeMetaTemplate,{pet:petName}):TELEVET_BOOKING_COPY.whereWellnessMeta:TELEVET_BOOKING_COPY.stateBlockedTitle:null}function televetWhereLicensedLine(clinician,policy,state,petName){if(!clinician||!policy||!state||!policy.prescriptionsAvailable)return null;let code=state.trim().toUpperCase();return clinician.licensedStates.some(l=>l.state.trim().toUpperCase()===code&&l.canPrescribe)?fill(TELEVET_BOOKING_COPY.whereLicensedTemplate,{vet:clinician.displayName,state:televetStateName(code),pet:petName}):null}function useTelevetWhere(args){let{hostState:hostState,state:state,policy:policy,clinician:clinician,petName:petName,controller:controller,onState:onState}=args,host=hostState&&isWellFormedStateCode(hostState)?hostState.trim().toUpperCase():null,current=state&&isWellFormedStateCode(state)?state.trim().toUpperCase():null,hostPolicy=useTelevetStatePolicy(host,controller),[otherMode,setOtherMode]=react.useState(host===null||current!==null&¤t!==host),otherSelected=host===null||otherMode,pickHost=react.useCallback(()=>{host!==null&&(setOtherMode(false),onState(host))},[host,onState]),pickOther=react.useCallback(()=>{setOtherMode(true),current===host&&onState(null)},[current,host,onState]),pickState=react.useCallback(code=>{setOtherMode(true),onState(code.trim().toUpperCase())},[onState]),hostPlace=host===null?null:{code:host,name:televetStateName(host),meta:televetWhereMeta(hostPolicy.data,petName)},otherCode=otherSelected&¤t!==null&&(host===null||current!==host||otherMode)?current:null,otherPlace=otherCode===null?null:{code:otherCode,name:televetStateName(otherCode),meta:televetWhereMeta(policy.data,petName)};return{hostPlace:hostPlace,otherSelected:otherSelected,otherPlace:otherPlace,licensedLine:televetWhereLicensedLine(clinician,policy.data,current,petName),stateName:current===null?null:televetStateName(current),canContinue:current!==null,pickHost:pickHost,pickOther:pickOther,pickState:pickState}}function useTelevetBookingIntake(args){let{reasonText:reasonText,state:state,hostState:hostState,clinicianId:clinicianId,clinicians:clinicians,policy:policy,petName:petName,controller:controller,dispatch:dispatch}=args,[concernIds,setConcernIds]=react.useState([]),[emergencyAnswer,setEmergencyAnswer]=react.useState(null),whereTouched=react.useRef(false),issueChips=react.useMemo(()=>televetIssueChips(),[]),concernLabels=concernIds.map(id=>issueChips.find(chip=>chip.id===id)?.label??"").filter(Boolean),composedReason=composeTelevetReason(concernLabels,reasonText),aboutLine=concernLabels.length>0?concernLabels.join(", "):reasonText.trim(),toggleConcern=react.useCallback(id=>setConcernIds(current=>current.includes(id)?current.filter(entry=>entry!==id):[...current,id]),[]),matchedClinician=clinicians?.find(c=>c.clinicianId===clinicianId)??clinicians?.[0]??null,where=useTelevetWhere({hostState:hostState,state:state,policy:policy,clinician:matchedClinician,petName:petName??TELEVET_BOOKING_COPY.petFallback,controller:controller,onState:react.useCallback(code=>{whereTouched.current=true,dispatch({type:"patch",patch:{state:code,clinicianId:null}})},[dispatch])});return{issueChips:issueChips,concernIds:concernIds,toggleConcern:toggleConcern,composedReason:composedReason,aboutLine:aboutLine,emergencyAnswer:emergencyAnswer,setEmergencyAnswer:setEmergencyAnswer,where:where,matchedClinician:matchedClinician,whereTouched:whereTouched}}var DEFAULT_ROOT_HEADING_LEVEL=2;function headingLevel(value){return typeof value!="number"||!Number.isInteger(value)?DEFAULT_ROOT_HEADING_LEVEL:value<1?1:value>6?6:value}function nextHeadingLevel(level){return level>=6?6:level+1}function headingTag(level){return`h${String(level)}`}var NESTED_HEADING_LEVEL_DEFAULT=nextHeadingLevel(DEFAULT_ROOT_HEADING_LEVEL),NestedHeadingLevelContext=react.createContext(NESTED_HEADING_LEVEL_DEFAULT);function useNestedHeadingLevel(){return react.useContext(NestedHeadingLevelContext)}function slotBox(slot,borderWidth){if(slot===void 0)return{};let out={};return slot.backgroundColor!==void 0&&(out.backgroundColor=slot.backgroundColor),slot.borderColor!==void 0&&(out.borderColor=slot.borderColor,out.borderWidth=borderWidth??1),slot.borderRadius!==void 0&&(out.borderRadius=slot.borderRadius),out}function slotText(slot){return slot?.textColor===void 0?{}:{color:slot.textColor}}function slotBoxCss(slot,borderWidth){let box=slotBox(slot,borderWidth),out={};return box.backgroundColor!==void 0&&(out.backgroundColor=box.backgroundColor),box.borderColor!==void 0&&(out.border=`${box.borderWidth??1}px solid ${box.borderColor}`),box.borderRadius!==void 0&&(out.borderRadius=box.borderRadius),out}var VISUALLY_HIDDEN=/* @__PURE__ */Object.freeze({position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0});function slotCss(slot,borderWidth){return{...slotBoxCss(slot,borderWidth),...slotText(slot)}}function slotLonghandCss(slot,borderWidth){let box=slotBox(slot,borderWidth),out={};return box.backgroundColor!==void 0&&(out.backgroundColor=box.backgroundColor),box.borderColor!==void 0&&(out.borderStyle="solid",out.borderWidth=box.borderWidth??1,out.borderColor=box.borderColor),box.borderRadius!==void 0&&(out.borderRadius=box.borderRadius),{...out,...slotText(slot)}}function slotInset(slot,inset){return slot?.backgroundColor===void 0&&slot?.borderColor===void 0?{}:{paddingLeft:inset,paddingRight:inset}}function slotRadius(slot){return slot?.borderRadius===void 0?{}:{borderRadius:slot.borderRadius}}var MIN_TOUCH_TARGET=44;function useBookingStyles(){let theme=useEverfurTheme();return react.useMemo(()=>makeBookingStyles(theme),[theme])}function TelevetButton({label:label,onPress:onPress,kind:kind="primary",size:size="md",disabled:disabled=false,loading:loading=false,fullWidth:fullWidth=true,accessibilityLabel:accessibilityLabel,describedBy:describedBy,busyAnnouncement:busyAnnouncement,testID:testID,style:style}){let styles=useBookingStyles(),blocked=disabled||loading,press=useTelevetPress(blocked),button=/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:blocked?void 0:onPress,...press.handlers,"aria-disabled":blocked||void 0,"aria-busy":loading||void 0,...accessibilityLabel&&accessibilityLabel!==label?{"aria-label":accessibilityLabel}:{},...describedBy?{"aria-describedby":describedBy}:{},"data-testid":testID,style:{...styles.button,...kind==="primary"?styles.buttonPrimary:kind==="danger"?styles.buttonDanger:kind==="quiet"?styles.buttonQuiet:styles.buttonSecondary,...size==="lg"?styles.buttonLarge:null,...fullWidth?styles.buttonFull:styles.buttonAuto,...blocked?styles.buttonDisabled:null,...press.style,...style},children:label});return busyAnnouncement===void 0?button:/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[button,
|
|
135
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{role:"status",style:VISUALLY_HIDDEN,children:loading?busyAnnouncement:""})]})}function TelevetStateCard({title:title,message:message,actionLabel:actionLabel,onAction:onAction,testID:testID}){let styles=useBookingStyles(),Title=headingTag(useNestedHeadingLevel()),actionable=typeof actionLabel=="string"&&actionLabel.length>0&&typeof onAction=="function";/* @__PURE__ */
|
|
136
|
+
return jsxRuntime.jsxs("div",{style:styles.stateCard,"data-testid":testID,children:[
|
|
137
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:styles.stateTitle,children:title}),message?/* @__PURE__ */jsxRuntime.jsx("p",{style:{...styles.stateMessage,...styles.cardInk},children:message}):null,actionable?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:actionLabel,onPress:onAction,kind:"secondary",fullWidth:false}):null]})}function useTelevetPress(disabled=false,scale=.97){let theme=useEverfurTheme(),[pressed,setPressed]=react.useState(false);if(theme.motion.reducedMotion||disabled)return{handlers:{},style:{}};let up=()=>setPressed(false);return{handlers:{onPointerDown:()=>setPressed(true),onPointerUp:up,onPointerLeave:up,onPointerCancel:up},style:{transform:pressed?`scale(${String(scale)})`:void 0,transition:`transform ${String(TELEVET_PRESS_MS)}ms ${theme.motion.easing.emphasized}, background-color ${String(theme.motion.duration.normal)}ms ease, border-color ${String(theme.motion.duration.normal)}ms ease`}}}var TELEVET_PRESS_MS=160;function TelevetSkeletonBlock({height:height,width:width="100%",testID:testID}){let styles=useBookingStyles();/* @__PURE__ */
|
|
138
|
+
return jsxRuntime.jsx("span",{"aria-hidden":"true","data-testid":testID,style:{...styles.skeleton,height:height,width:width}})}function TelevetFailureLine({message:message,assertive:assertive=false,id:id,testID:testID,style:style}){let styles=useBookingStyles();/* @__PURE__ */
|
|
139
|
+
return jsxRuntime.jsx("p",{role:assertive?"alert":"status",...id===void 0?{}:{id:id},"data-testid":testID,style:{...styles.failure,...style},children:message})}function makeBookingStyles(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,rem=n=>`${String(n)}px`;return{screen:{...SURFACE_ROOT_RESET,display:"flex",flexDirection:"column",minHeight:0,flex:"1 1 auto",gap:rem(space.md),paddingLeft:rem(space.xl),paddingRight:rem(space.xl),boxSizing:"border-box"},stepFill:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,gap:rem(space.md)},list:{display:"flex",flexDirection:"column",gap:rem(space.sm)},button:{minHeight:MIN_TOUCH_TARGET,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:rem(space.sm),paddingLeft:rem(20),paddingRight:rem(20),paddingTop:rem(space.xs),paddingBottom:rem(space.xs),borderRadius:rem(radius.pill),borderStyle:"solid",borderWidth:1.5,borderColor:"transparent",cursor:"pointer",textAlign:"center",...faceCss(theme,"bold"),fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.snug),boxSizing:"border-box"},buttonLarge:{minHeight:52,paddingLeft:rem(26),paddingRight:rem(26),fontSize:rem(16)},buttonFull:{alignSelf:"stretch",width:"100%"},buttonAuto:{alignSelf:"flex-start",minWidth:MIN_TOUCH_TARGET},buttonPrimary:{backgroundColor:color.primary,borderColor:color.primaryEdge,color:color.onPrimary,...slotBoxCss(slots.primaryButton),...slotText(slots.primaryButton)},buttonSecondary:{borderColor:color.brandInk,backgroundColor:color.surface,color:color.brandInk,...slots.primaryButton?.borderRadius===void 0?null:{borderRadius:rem(slots.primaryButton.borderRadius)},...slots.primaryButton?.borderColor===void 0?null:{borderColor:slots.primaryButton.borderColor}},buttonDanger:{backgroundColor:color.danger,borderColor:color.danger,color:color.onDanger},buttonQuiet:{backgroundColor:"transparent",borderColor:"transparent",color:color.brandInk,paddingLeft:rem(space.sm),paddingRight:rem(space.sm)},buttonDisabled:{opacity:.45,cursor:"not-allowed"},stateCard:{minHeight:140,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",gap:rem(space.sm),padding:rem(space.lg),borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:color.brandBorder,boxSizing:"border-box",...slotLonghandCss(slots.card,1)},stateTitle:{margin:0,...headingFaceCss(theme,"medium"),color:slots.card?.textColor??color.brandInk,fontSize:rem(size.subtitle),lineHeight:String(lineHeight.snug)},cardInk:slots.card?.textColor===void 0?{}:{color:slots.card.textColor},stateMessage:{margin:0,...faceCss(theme,"regular"),color:color.text.metaCool,fontSize:rem(size.body),lineHeight:String(lineHeight.normal)},skeleton:{display:"block",borderRadius:rem(radius.md),backgroundColor:color.skeleton,flexShrink:0},failure:{margin:0,...faceCss(theme,"regular"),color:color.danger,fontSize:rem(size.caption),lineHeight:String(lineHeight.normal)},stepTitle:{margin:0,...headingFaceCss(theme,"medium"),color:color.brandInk,fontSize:rem(tierPx(theme,"heading",30)),lineHeight:"1.1",letterSpacing:"-0.03em",textAlign:"left",textWrap:"balance"},stepHelp:{margin:0,...faceCss(theme,"regular"),color:color.text.primary,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed),textAlign:"left",maxWidth:"62ch"},divider:{height:1,backgroundColor:color.brandBorder,flexShrink:0},scrollRoot:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0},scrollBody:{position:"relative",flex:"1 1 auto",minHeight:0,overflowY:"auto",overscrollBehavior:"contain"},scrollFooter:{flexShrink:0,paddingTop:rem(space.md),paddingBottom:rem(space.lg)}}}function TelevetEmergencyExits({petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,testIDPrefix:testIDPrefix}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeExitStyles(theme),[theme]),name=petName?.trim()??"",hintId=`${react.useId()}-primary-vet-hint`;/* @__PURE__ */
|
|
140
|
+
return jsxRuntime.jsxs("div",{style:local.exits,"data-testid":`${testIDPrefix}-exits`,children:[onFindEmergencyVet?/* @__PURE__ */jsxRuntime.jsxs("button",{type:"button",onClick:()=>{callHost(onFindEmergencyVet)},style:{...local.card,...local.cardButton},"data-testid":`${testIDPrefix}-find-vet`,children:[
|
|
141
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:local.text,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:local.title,children:TELEVET_EMERGENCY_EXITS_WEB.findEmergencyVet})}),
|
|
142
|
+
/* @__PURE__ */jsxRuntime.jsx(Chevron,{})]}):null,
|
|
143
|
+
/* @__PURE__ */jsxRuntime.jsxs("a",{href:TELEVET_EMERGENCY_EXITS_WEB.poisonControlTel,style:local.card,"data-testid":`${testIDPrefix}-poison-control`,children:[
|
|
144
|
+
/* @__PURE__ */jsxRuntime.jsxs("span",{style:local.text,children:[
|
|
145
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:local.title,children:TELEVET_EMERGENCY_EXITS_WEB.poisonControl}),
|
|
146
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:local.detail,children:TELEVET_EMERGENCY_EXITS_WEB.poisonControlDetail})]}),
|
|
147
|
+
/* @__PURE__ */jsxRuntime.jsx(Chevron,{})]}),primaryVet!=null&&name.length>0?/* @__PURE__ */jsxRuntime.jsx(PrimaryVetCard,{petName:name,vet:primaryVet,hintId:hintId,local:local,testIDPrefix:testIDPrefix}):null]})}function PrimaryVetCard({petName:petName,vet:vet,hintId:hintId,local:local,testIDPrefix:testIDPrefix}){let title=fill(TELEVET_BOOKING_COPY_WEB.emergency.exitPrimaryVetTitle,{petName:petName}),detail=vet.detail?.trim()??"",body=/* @__PURE__ */jsxRuntime.jsxs("span",{style:local.text,children:[
|
|
148
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:local.title,children:title}),detail.length>0?/* @__PURE__ */jsxRuntime.jsx("span",{style:local.detail,children:detail}):null]});if(!vet.dial)/* @__PURE__ */
|
|
149
|
+
return jsxRuntime.jsx("div",{style:local.card,"data-testid":`${testIDPrefix}-primary-vet`,children:body});let dial=vet.dial;/* @__PURE__ */
|
|
150
|
+
return jsxRuntime.jsxs("button",{type:"button",onClick:()=>{callHost(dial)},"aria-label":detail.length>0?`${title}, ${detail}`:title,"aria-describedby":hintId,style:{...local.card,...local.cardButton},"data-testid":`${testIDPrefix}-primary-vet-call`,children:[body,
|
|
151
|
+
/* @__PURE__ */jsxRuntime.jsx(Chevron,{}),
|
|
152
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{id:hintId,style:SR_ONLY,children:TELEVET_BOOKING_COPY_WEB.emergency.startCallHint})]})}function Chevron(){/* @__PURE__ */
|
|
153
|
+
return jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 19.358 19.358",fill:"none",style:{marginLeft:"auto",flexShrink:0},children:/* @__PURE__ */jsxRuntime.jsx("path",{d:"M7.25918 14.5191L12.0987 9.67957L7.25918 4.84007",stroke:"currentColor",strokeWidth:"1.61317",strokeLinecap:"round",strokeLinejoin:"round"})})}var SR_ONLY=/* @__PURE__ */Object.freeze({position:"absolute",width:1,height:1,margin:-1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0});function makeExitStyles(theme){let{color:color,space:space,radius:radius,type:type}=theme,{size:size,lineHeight:lineHeight}=type;return{exits:{display:"flex",flexDirection:"column",borderRadius:radius.md,backgroundColor:color.surface,paddingLeft:14,paddingRight:14,overflow:"hidden"},card:{display:"flex",alignItems:"center",gap:14,minHeight:MIN_TOUCH_TARGET,paddingTop:space.md,paddingBottom:space.md,paddingLeft:0,paddingRight:0,borderWidth:0,borderBottomWidth:1,marginBottom:-1,borderStyle:"solid",borderColor:color.borderRingCream,background:"transparent",color:color.brandInk,textAlign:"start",textDecoration:"none",boxSizing:"border-box"},cardButton:{width:"100%",cursor:"pointer",font:"inherit",position:"relative"},text:{display:"flex",flexDirection:"column",gap:2,flexShrink:1,minWidth:0},title:{...faceCss(theme,"bold"),color:color.brandInk,fontSize:size.body,lineHeight:String(lineHeight.snug)},detail:{...faceCss(theme,"regular"),color:color.text.muted,fontSize:14,lineHeight:String(lineHeight.normal)}}}function TelevetEarlyEmergency({petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,onContinue:onContinue}){let theme=useEverfurTheme(),styles=useBookingStyles(),local=react.useMemo(()=>makeEdgeStyles(theme),[theme]),Title=headingTag(useNestedHeadingLevel()),lede=TELEVET_BOOKING_COPY_WEB.emergency.lede;
|
|
154
|
+
/* @__PURE__ */
|
|
155
|
+
return jsxRuntime.jsxs("section",{role:"alert",style:{...styles.stepFill,...local.emergencyPanel},"data-testid":"televet-early-emergency",children:[
|
|
156
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:local.emergencyTitle,children:TELEVET_BOOKING_COPY_WEB.emergency.bannerTitle}),
|
|
157
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:local.emergencyLede,children:lede}),
|
|
158
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetEmergencyExits,{petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,testIDPrefix:"televet-early-emergency"}),
|
|
159
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.emergency.keepBookingCta,kind:"secondary",onPress:onContinue,testID:"televet-early-emergency-continue"})]})}function TelevetStateInterestAction({action:action,testIDPrefix:testIDPrefix}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeEdgeStyles(theme),[theme]),Title=headingTag(useNestedHeadingLevel());return action===null?null:action.joined?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"status","data-testid":`${testIDPrefix}-joined`,style:local.interestFeedback,children:[
|
|
160
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:local.interestJoinedTitle,children:TELEVET_BOOKING_COPY_WEB.stateInterest.joinedTitle}),
|
|
161
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:local.interestBody,children:TELEVET_BOOKING_COPY_WEB.stateInterest.joinedBody})]}):/* @__PURE__ */jsxRuntime.jsxs("div",{"data-testid":testIDPrefix,style:local.interestAction,children:[
|
|
162
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:action.pending?TELEVET_BOOKING_COPY_WEB.stateInterest.submitting:TELEVET_BOOKING_COPY_WEB.stateInterest.cta,kind:"secondary",loading:action.pending,busyAnnouncement:TELEVET_BOOKING_COPY_WEB.stateInterest.submitting,disabled:action.pending,onPress:action.onPress,testID:`${testIDPrefix}-submit`}),action.failed?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.stateInterest.failed,assertive:true,testID:`${testIDPrefix}-error`}):null]})}function TelevetClinicianEmptyState({cause:cause,onRetry:onRetry,stateInterest:stateInterest=null}){let view=televetEmptyRosterView(cause);/* @__PURE__ */
|
|
163
|
+
return jsxRuntime.jsxs("div",{"data-testid":"televet-clinicians-empty",children:[
|
|
164
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:view.title,message:view.message,...view.retryLabel!==null&&onRetry?{actionLabel:view.retryLabel,onAction:onRetry}:{}}),view.interestReason!==null?/* @__PURE__ */jsxRuntime.jsx(TelevetStateInterestAction,{action:stateInterest??null,testIDPrefix:"televet-state-interest-no-licensed-vet"}):null]})}function TelevetEntitlementInterestState({onCheckAvailability:onCheckAvailability}){/* @__PURE__ */
|
|
165
|
+
return jsxRuntime.jsx(EntitlementPausedState,{...onCheckAvailability?{onCheckAvailability:onCheckAvailability}:{}})}function EntitlementPausedState({onCheckAvailability:onCheckAvailability,renderUnavailable:renderUnavailable}){let styles=useBookingStyles();/* @__PURE__ */
|
|
166
|
+
return jsxRuntime.jsxs("div",{"data-testid":"televet-booking-not-entitled",style:styles.list,children:[renderUnavailable?renderUnavailable():/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle}),onCheckAvailability?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.checkAvailabilityCta,kind:"secondary",onPress:onCheckAvailability,testID:"televet-check-state-availability"}):null]})}function TelevetMediaDropNotice({shortfall:shortfall,testIDPrefix:testIDPrefix}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeEdgeStyles(theme),[theme]);if(isMediaShortfallEmpty(shortfall))return null;let lines=televetMediaShortfallLines(shortfall);return lines.length===0?null:
|
|
167
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{role:"status",style:local.mediaNotice,"data-testid":`${testIDPrefix}-media-notice`,children:lines.map((line,index)=>/* @__PURE__ */jsxRuntime.jsx("li",{style:local.mediaLine,"data-testid":`${testIDPrefix}-media-line-${String(index)}`,children:line},line))})}function makeEdgeStyles(theme){let{color:color,space:space,radius:radius,type:type}=theme,{size:size,lineHeight:lineHeight}=type;return{emergencyPanel:{display:"flex",flexDirection:"column",flex:"0 0 auto",gap:space.sm,padding:space.lg,borderRadius:radius.lg,border:`2px solid ${color.danger}`,background:color.surface},emergencyTitle:{...faceCss(theme,"medium"),margin:0,color:color.danger,fontSize:size.heading,lineHeight:`${String(size.heading*lineHeight.snug)}px`},emergencyLede:{...faceCss(theme,"regular"),margin:0,color:color.text.primary,fontSize:size.subtitle,lineHeight:`${String(size.subtitle*lineHeight.normal)}px`},interestAction:{display:"flex",flexDirection:"column",gap:space.sm,marginTop:space.sm},interestFeedback:{display:"flex",flexDirection:"column",gap:space.xs,marginTop:space.sm},interestJoinedTitle:{...faceCss(theme,"medium"),margin:0,color:color.brandInk,fontSize:size.body,lineHeight:`${String(size.body*lineHeight.snug)}px`},interestBody:{...faceCss(theme,"regular"),margin:0,color:color.text.metaCool,fontSize:size.body,lineHeight:`${String(size.body*lineHeight.normal)}px`},mediaNotice:{display:"flex",flexDirection:"column",gap:space.xs,margin:0,padding:0,listStyle:"none"},mediaLine:{...faceCss(theme,"regular"),color:color.text.metaCool,fontSize:size.caption,lineHeight:`${String(size.caption*lineHeight.normal)}px`}}}function televetBookingGateApplies(state){let{surfaceUnavailable:surfaceUnavailable,notEntitled:notEntitled,policyBlocked:policyBlocked,triageOpen:triageOpen,step:step}=state;return surfaceUnavailable||notEntitled&&step!=="clinician"||policyBlocked?true:step==="reason"&&triageOpen}function TelevetBookingGate({state:state,petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,stateInterest:stateInterest=null,onCheckAvailability:onCheckAvailability,onAcknowledgeEmergency:onAcknowledgeEmergency,renderUnavailable:renderUnavailable}){let styles=useBookingStyles(),{surfaceUnavailable:surfaceUnavailable,notEntitled:notEntitled,policyBlocked:policyBlocked,triageOpen:triageOpen,step:step}=state;return surfaceUnavailable?/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.stepFill,"data-testid":"televet-booking-unavailable",children:renderUnavailable?renderUnavailable():/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle})}):notEntitled&&step!=="clinician"?/* @__PURE__ */jsxRuntime.jsx(EntitlementPausedState,{...onCheckAvailability?{onCheckAvailability:onCheckAvailability}:{},...renderUnavailable?{renderUnavailable:renderUnavailable}:{}}):policyBlocked?
|
|
168
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{"data-testid":"televet-booking-state-blocked",children:[
|
|
169
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.stateBlockedTitle}),
|
|
170
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetStateInterestAction,{action:stateInterest,testIDPrefix:"televet-state-interest-state-blocked"})]}):step==="reason"&&triageOpen?/* @__PURE__ */jsxRuntime.jsx(TelevetEarlyEmergency,{...petName!==void 0?{petName:petName}:{},...primaryVet?{primaryVet:primaryVet}:{},onFindEmergencyVet:onFindEmergencyVet,onContinue:onAcknowledgeEmergency}):null}function televetClinicianOutcomeApplies(state){return state.noState?true:state.isPending||state.isError?false:state.isEmpty||state.notEntitled}function TelevetClinicianOutcome({state:state,cause:cause,locationStatus:locationStatus,onRequestLocation:onRequestLocation,onRetry:onRetry,stateInterest:stateInterest=null,renderUnavailable:renderUnavailable}){return state.noState?
|
|
171
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-booking-location-unknown",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:locationStatus==="blocked"?TELEVET_BOOKING_COPY_WEB.locationBlockedTitle:locationStatus==="unavailable"?TELEVET_BOOKING_COPY_WEB.locationUnavailableTitle:TELEVET_BOOKING_COPY_WEB.locationUnknownTitle,message:locationStatus==="blocked"?TELEVET_BOOKING_COPY_WEB.locationBlockedBody:locationStatus==="unavailable"?TELEVET_BOOKING_COPY_WEB.locationUnavailableBody:TELEVET_BOOKING_COPY_WEB.locationUnknownBody,actionLabel:onRequestLocation&&locationStatus!=="blocked"?TELEVET_BOOKING_COPY_WEB.locationUnknownCta:void 0,onAction:locationStatus==="blocked"?void 0:onRequestLocation})}):state.isEmpty?/* @__PURE__ */jsxRuntime.jsx(TelevetClinicianEmptyState,{cause:cause,onRetry:onRetry,stateInterest:stateInterest}):/* @__PURE__ */jsxRuntime.jsx(EntitlementPausedState,{...renderUnavailable?{renderUnavailable:renderUnavailable}:{}})}function parseColor(value){let rgba=toRgba(value);return rgba===null?null:normalizeRgba(rgba)}function toRgba(value){if(typeof value=="number")return argbIntToRgba(value);if(typeof value!="string")return null;let s=value.trim();if(s.length===0)return null;if(s.startsWith("#"))return fromHex(s.slice(1));if(s.toLowerCase().startsWith("0x"))return fromHex(s.slice(2));if(s.toLowerCase().startsWith("rgb"))return fromRgbFunc(s);if(/^[0-9a-fA-F]+$/.test(s)){let hex=fromHex(s);if(hex!==null)return hex}return/^\d+$/.test(s)?argbIntToRgba(Number.parseInt(s,10)):null}function fromHex(hex){let h=hex.trim();if(!/^[0-9a-fA-F]+$/.test(h))return null;if(h.length===3)return{r:dup(h[0]),g:dup(h[1]),b:dup(h[2]),a:1};if(h.length===6)return{r:byte(h,0),g:byte(h,2),b:byte(h,4),a:1};if(h.length===8){let a=byte(h,0);return{r:byte(h,2),g:byte(h,4),b:byte(h,6),a:a/255}}return null}function fromRgbFunc(input){let open=input.indexOf("("),close=input.indexOf(")");if(open<0||close<0||close<open)return null;let parts=input.slice(open+1,close).split(",").map(p=>p.trim());if(parts.length<3)return null;let r=clampByte(Number(parts[0])),g=clampByte(Number(parts[1])),b=clampByte(Number(parts[2]));if(r===null||g===null||b===null)return null;let a=1;if(parts.length>=4){let alpha=Number(parts[3]);if(!Number.isFinite(alpha))return null;a=Math.min(1,Math.max(0,alpha))}return{r:r,g:g,b:b,a:a}}function argbIntToRgba(n){if(!Number.isFinite(n))return null;let int=Math.trunc(n)>>>0,a=int>>>24&255;return{r:int>>>16&255,g:int>>>8&255,b:int&255,a:a===0?1:a/255}}function byte(hex,at){return Number.parseInt(hex.slice(at,at+2),16)}function dup(nibble){return Number.parseInt(`${nibble??"0"}${nibble??"0"}`,16)}function clampByte(n){return Number.isFinite(n)?Math.min(255,Math.max(0,Math.round(n))):null}function normalizeRgba(rgba){if(rgba.a>=1)return rgbToHex(rgba.r,rgba.g,rgba.b);let a=Math.round(rgba.a*1e3)/1e3;return`rgba(${rgba.r},${rgba.g},${rgba.b},${a})`}function rgbToHex(r,g,b){return`#${hex2(r)}${hex2(g)}${hex2(b)}`.toUpperCase()}function hex2(n){return n.toString(16).padStart(2,"0")}function composite(fg,bg){let a=fg.a,mix=(f,g)=>Math.round(f*a+g*(1-a));return{r:mix(fg.r,bg.r),g:mix(fg.g,bg.g),b:mix(fg.b,bg.b),a:1}}function flattenOnto(color,background){let fg=toRgba(color),bg=toRgba(background);if(fg===null||bg===null)return null;let out=fg.a>=1?fg:composite(fg,{...bg});return rgbToHex(out.r,out.g,out.b)}function withAlpha(color,alpha){let rgba=toRgba(color);if(rgba===null)return null;let a=Math.min(1,Math.max(0,alpha));return`rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${a})`}var PINK_SOFT_ALPHA=.22,TINT_SOFT_ALPHA=.5,EVERFUR_PINK="#FFC3BC";function televetPlainLook(theme){let c=theme.color;return{ink:c.brandInk,text:c.text.primary,muted:c.text.muted,line:c.borderRingCream,mist:c.surfaceSubtle,surface:c.surface,pink:c.highlight,onPink:c.onHighlight,go:c.mark,alert:c.danger,alertWash:c.badgeBgCritical}}function televetLook(theme){let c=theme.color,everfurPink=parseColor(c.highlight)===EVERFUR_PINK,soft=withAlpha(c.highlight,everfurPink?PINK_SOFT_ALPHA:TINT_SOFT_ALPHA);return{...televetPlainLook(theme),pinkSoft:(soft===null?null:flattenOnto(soft,c.surface))??c.surface}}function televetConsultCalendarKey(consultId){return`televet-consult-${consultId}`}function TelevetBookedScreen({consult:consult,petName:petName,onDone:onDone,onAddToCalendar:onAddToCalendar,canJoinInApp:canJoinInApp=false,lengthMinutes:lengthMinutes,sharedRecords:sharedRecords=false,sentPhoto:sentPhoto=false}){let theme=useEverfurTheme(),shared=useBookingStyles(),styles=react.useMemo(()=>makeStyles2(theme),[theme]),titleId=`${react.useId()}-booked-title`,Title=headingTag(useNestedHeadingLevel()),[calendarState,setCalendarState]=react.useState("idle"),addToCalendar=async()=>{if(!onAddToCalendar)return;setCalendarState("saving");let start=new Date(consult.scheduledAt);if(Number.isNaN(start.getTime())){setCalendarState("failed");return}let minutes=typeof lengthMinutes=="number"&&Number.isFinite(lengthMinutes)&&lengthMinutes>0?lengthMinutes:CONSULT_MINUTES,outcome=await callHostAsync(onAddToCalendar,{key:televetConsultCalendarKey(consult.consultId),title:TELEVET_BOOKING_COPY_WEB.visit.title,startDate:start,endDate:new Date(start.getTime()+minutes*6e4),alarmOffsetMinutes:-30});if(!outcome.ok){setCalendarState("failed");return}setCalendarState(outcome.value===true?"saved":outcome.value==="handed-off"?"idle":"failed")},steps=[TELEVET_BOOKING_COPY_WEB.booked.remindPromise,sharedRecords&&consult.clinicianName?fill(sentPhoto?TELEVET_BOOKING_COPY_WEB.booked.recordsPhotoPromiseTemplate:TELEVET_BOOKING_COPY_WEB.booked.recordsPromiseTemplate,{pet:petName??TELEVET_BOOKING_COPY_WEB.petFallback,vet:consult.clinicianName}):fill(TELEVET_BOOKING_COPY_WEB.booked.summaryPromise,{pet:petName??""}),...canJoinInApp?[TELEVET_BOOKING_COPY_WEB.booked.joinPromise]:[]];if(!isTelevetBookingCopyReady())/* @__PURE__ */
|
|
172
|
+
return jsxRuntime.jsx("div",{style:styles.screen,"data-testid":"televet-booked-copy-unapproved"});let vetName=consult.clinicianName?.trim()??"";/* @__PURE__ */
|
|
173
|
+
return jsxRuntime.jsxs("section",{style:styles.screen,"aria-labelledby":titleId,"data-testid":"televet-booked",children:[
|
|
174
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{"aria-hidden":"true",style:styles.avatar,children:vetName.length>0?vetName.replace(/^dr\.?\s+/i,"").slice(0,1).toUpperCase():null}),
|
|
175
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{id:titleId,style:styles.title,children:vetName.length>0?fill(TELEVET_BOOKING_COPY_WEB.bookedTitleTemplate,{vet:vetName}):TELEVET_BOOKING_COPY_WEB.bookedTitle}),
|
|
176
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.when,children:petName?/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[
|
|
177
|
+
/* @__PURE__ */jsxRuntime.jsx("time",{dateTime:consult.scheduledAt,children:formatBookedWhen(consult.scheduledAt)}),fill(TELEVET_BOOKING_COPY_WEB.bookedLeadTemplate,{when:"",pet:petName})]}):/* @__PURE__ */jsxRuntime.jsx("time",{dateTime:consult.scheduledAt,children:formatBookedWhen(consult.scheduledAt)})}),
|
|
178
|
+
/* @__PURE__ */jsxRuntime.jsx("section",{"aria-label":TELEVET_BOOKING_COPY_WEB.booked.stepsLabel,style:styles.card,children:/* @__PURE__ */jsxRuntime.jsx("ol",{style:styles.steps,"data-testid":"televet-booked-steps",children:steps.map((step,i)=>/* @__PURE__ */jsxRuntime.jsxs("li",{style:{...styles.step,...i===steps.length-1?styles.stepLast:null},children:[
|
|
179
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:styles.stepNumber,children:String(i+1).padStart(2,"0")}),
|
|
180
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.stepText,children:step.trim()})]},step))})}),
|
|
181
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.actions,children:[onAddToCalendar?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:calendarState==="saved"?TELEVET_BOOKING_COPY_WEB.booked.calendarAdded:TELEVET_BOOKING_COPY_WEB.addToCalendarCta,kind:"secondary",size:"lg",fullWidth:false,loading:calendarState==="saving",disabled:calendarState==="saving"||calendarState==="saved",onPress:()=>{addToCalendar()},testID:"televet-booked-calendar"}):null,
|
|
182
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.doneCta,kind:"primary",size:"lg",fullWidth:false,onPress:onDone,testID:"televet-booked-done"})]}),calendarState==="failed"?/* @__PURE__ */jsxRuntime.jsx("p",{role:"status",style:{...shared.failure,...styles.calendarNote},"data-testid":"televet-booked-calendar-failed",children:TELEVET_BOOKING_COPY_WEB.booked.calendarFailedBody}):null]})}function makeStyles2(theme){let{space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),rem=n=>`${String(n)}px`,cardInk=slots.card?.textColor===void 0?{}:{color:slots.card.textColor};return{screen:{display:"flex",flexDirection:"column",alignItems:"center",flex:"1 1 auto",minHeight:0,gap:rem(space.md),paddingTop:rem(space.xl),paddingBottom:rem(space.xl),boxSizing:"border-box",textAlign:"center"},avatar:{width:112,height:112,flexShrink:0,borderRadius:"50%",backgroundColor:look.mist,boxShadow:`0 0 0 6px ${look.surface}, 0 0 0 10px ${look.go}`,margin:rem(10),display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"medium"),color:look.ink,fontSize:rem(40),lineHeight:"1"},title:{margin:0,...headingFaceCss(theme,"medium"),color:look.ink,fontSize:rem(tierPx(theme,"heading",30)),lineHeight:"1.1",letterSpacing:"-0.03em",textWrap:"balance",paddingTop:rem(space.md)},when:{margin:0,...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed)},card:{width:"min(560px, 100%)",marginTop:rem(space.md),padding:`${rem(space.sm)} ${rem(space.xl)}`,borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:look.line,backgroundColor:look.surface,boxSizing:"border-box",textAlign:"left",...slotLonghandCss(slots.card,1)},steps:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column"},step:{display:"grid",gridTemplateColumns:"44px 1fr",gap:rem(10),paddingTop:rem(14),paddingBottom:rem(14),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:look.line},stepLast:{borderBottomWidth:0},stepNumber:{...faceCss(theme,"monoBold"),color:look.ink,fontSize:rem(13),lineHeight:String(lineHeight.relaxed),paddingTop:2,...cardInk},stepText:{minWidth:0,...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed),...cardInk},actions:{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"center",gap:rem(space.md),marginTop:rem(space.lg)},calendarNote:{textAlign:"center"}}}function createTelevetBackChannel(){let handlers=[];return{register(handler){return handlers=[...handlers,handler],()=>{handlers=handlers.filter(h=>h!==handler)}},dispatch(){for(let handler of[...handlers].reverse())try{if(handler())return!0}catch{}return false}}}var TelevetBackChannelContext=react.createContext(null);function useTelevetBackChannel(handler,enabled=true){let channel=react.useContext(TelevetBackChannelContext),current=react.useRef(handler);current.current=handler,react.useEffect(()=>{if(!(channel===null||!enabled))return channel.register(()=>current.current())},[channel,enabled])}var FOCUSABLE='button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), a[href], [tabindex]:not([tabindex="-1"])';function isDialogElement(node){return node.tagName==="DIALOG"}function ownsEscape(node,event){if(event.isDefaultPrevented()||event.nativeEvent.isComposing)return false;let target=event.target;return!(target instanceof Element)||target.closest("dialog")===node}function useModalDialog(open,onClose,returnFocusTo,options){let escapeAtKeyDown=options?.escapeAtKeyDown===true,dialogRef=react.useRef(null),wasOpen=react.useRef(false),opener=react.useRef(null),trigger=react.useRef(returnFocusTo);trigger.current=returnFocusTo;let restoreFocus=react.useCallback(()=>{if(!wasOpen.current)return;wasOpen.current=false;let target=trigger.current===void 0?opener.current:trigger.current.current;target&&target.isConnected&&target.focus(),(!target||!target.isConnected||document.activeElement===target)&&(opener.current=null)},[]);react.useEffect(()=>{let node=dialogRef.current;if(!wasOpen.current){let active=typeof document>"u"?null:document.activeElement;active!==null&&node!==null&&node.contains(active)||(opener.current=active instanceof HTMLElement?active:null)}if(wasOpen.current=true,node===null)return;if(!isDialogElement(node)){node.contains(document.activeElement)||(node.querySelector(FOCUSABLE)??node).focus();return}let dialog=node;typeof dialog.showModal=="function"?dialog.open||dialog.showModal():dialog.setAttribute("open","")},[open,restoreFocus]),react.useEffect(()=>restoreFocus,[restoreFocus]),react.useEffect(()=>{let node=dialogRef.current;if(node===null||!isDialogElement(node))return;let dialog=node;if(typeof dialog.showModal!="function")return;let lastFocused=null,onFocusIn=event=>{event.target instanceof HTMLElement&&(lastFocused=event.target)},onNativeClose=()=>{if(!dialog.isConnected||dialog.open)return;let back=lastFocused;dialog.showModal(),back!==null&&back.isConnected&&dialog.contains(back)&&document.activeElement!==back&&back.focus()};return dialog.addEventListener("focusin",onFocusIn),dialog.addEventListener("close",onNativeClose),()=>{dialog.removeEventListener("focusin",onFocusIn),dialog.removeEventListener("close",onNativeClose)}},[open]);let onKeyDown=react.useCallback(event=>{let node=dialogRef.current;if(node===null)return;if(event.key==="Escape"&&!isDialogElement(node)){event.preventDefault(),event.stopPropagation(),onClose();return}if(event.key==="Escape"&&escapeAtKeyDown&&ownsEscape(node,event)){event.preventDefault(),onClose();return}if(event.key!=="Tab")return;let focusable=Array.from(node.querySelectorAll(FOCUSABLE)),first=focusable[0],last=focusable[focusable.length-1];if(!first||!last){event.preventDefault();return}let active=document.activeElement;event.shiftKey&&(active===first||!node.contains(active))?(event.preventDefault(),last.focus()):!event.shiftKey&&(active===last||!node.contains(active))&&(event.preventDefault(),first.focus())},[onClose,escapeAtKeyDown]),onCancel=react.useCallback(event=>{event.target===event.currentTarget&&(event.preventDefault(),onClose())},[onClose]);return{dialogRef:dialogRef,onKeyDown:onKeyDown,onCancel:onCancel}}function BrandImage({src:src,alt:alt,decorative:decorative=false,style:style,height:height,fallback:fallback=null,onFailed:onFailed}){let[failed,setFailed]=react.useState(null);return src===null||failed===src?fallback:/* @__PURE__ */jsxRuntime.jsx("img",{src:src,alt:decorative?"":alt,...decorative?{"aria-hidden":true}:{},...height===void 0?{}:{height:height},style:style,decoding:"async",referrerPolicy:"no-referrer",onError:()=>{setFailed(src),onFailed?.()}})}var LOGO_HEIGHT=28,LOGO_MAX_WIDTH=160,LOGO_STYLE=/* @__PURE__ */Object.freeze({display:"block",height:LOGO_HEIGHT,width:"auto",maxWidth:LOGO_MAX_WIDTH,objectFit:"contain"});function BrandLogo({logoUrl:logoUrl,name:name,styles:styles}){/* @__PURE__ */
|
|
183
|
+
return jsxRuntime.jsx(BrandImage,{src:logoUrl,alt:name,height:LOGO_HEIGHT,style:styles?.logo??LOGO_STYLE})}var TELEVET_EASE_OUT="cubic-bezier(0.23, 1, 0.32, 1)",TELEVET_EASE_IO="cubic-bezier(0.77, 0, 0.175, 1)";function makeLocalStyles(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),reduced=theme.motion.reducedMotion,rem=n=>`${String(n)}px`,settle=reduced?"none":"border-color 200ms ease, background-color 200ms ease",stepSlot=slots.bookingStep,stepBoxed=stepSlot?.backgroundColor!==void 0||stepSlot?.borderColor!==void 0,ink=slot=>slot?.textColor===void 0?{}:{color:slot.textColor};return{marker:{minHeight:1},visuallyHiddenHeading:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},stepBody:{display:"flex",flexDirection:"column",gap:rem(space.xl),paddingTop:rem(space.xs),paddingBottom:rem(space.xl),...slotLonghandCss(stepSlot,1),...stepBoxed?{paddingTop:rem(space.lg),paddingLeft:rem(space.lg),paddingRight:rem(space.lg)}:null},stepInk:ink(stepSlot),head:{display:"flex",flexDirection:"column",gap:rem(space.sm)},footer:{display:"flex",flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:rem(space.lg),paddingTop:rem(space.lg),paddingBottom:rem(space.lg),flexShrink:0},footerMain:{marginLeft:"auto",flex:"1 1 200px",maxWidth:360,display:"flex"},fieldLabel:{margin:0,...faceCss(theme,"monoBold"),color:look.ink,fontSize:rem(12),letterSpacing:"0.08em",textTransform:"uppercase",lineHeight:String(lineHeight.snug)},note:{margin:0,...faceCss(theme,"regular"),color:look.muted,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.relaxed)},alertLine:{margin:0,...faceCss(theme,"bold"),color:look.alert,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.relaxed)},options:{listStyle:"none",margin:0,padding:0,display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:rem(space.md)},optionsStack:{gridTemplateColumns:"minmax(0, 1fr)"},option:{width:"100%",display:"flex",flexDirection:"row",alignItems:"center",gap:rem(space.lg),padding:`${rem(18)} ${rem(20)}`,minHeight:64,borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,color:look.text,textAlign:"left",cursor:"pointer",boxSizing:"border-box",transition:settle,...slotRadius(slots.card)},optionSelected:{borderColor:look.ink,backgroundColor:look.pinkSoft},optionRest:slotLonghandCss(slots.card,1.5),optionRestInk:ink(slots.card),optionDot:{width:22,height:22,flexShrink:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:look.ink,display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box"},optionDotFill:{width:12,height:12,borderRadius:"50%",backgroundColor:look.ink,transform:"scale(0)",transition:reduced?"none":`transform 320ms ${TELEVET_EASE_OUT}`},optionDotFillOn:{transform:"scale(1)"},optionText:{display:"flex",flexDirection:"column",minWidth:0,gap:2,flex:"1 1 auto"},optionTitle:{...faceCss(theme,"bold"),color:look.ink,fontSize:rem(18),lineHeight:String(lineHeight.snug),overflowWrap:"anywhere"},optionMeta:{...faceCss(theme,"regular"),color:look.muted,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.normal),overflowWrap:"anywhere"},optionAvatar:{width:56,height:56,flexShrink:0,borderRadius:"50%",backgroundColor:look.mist,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"medium"),color:look.ink,fontSize:rem(size.subtitle),lineHeight:"1"},select:{width:"100%",minHeight:52,padding:`0 ${rem(space.lg)}`,borderRadius:rem(radius.md),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,color:look.text,...faceCss(theme,"regular"),fontSize:rem(size.body),boxSizing:"border-box",...slotLonghandCss(slots.input,1.5)},callout:{margin:0,padding:`${rem(space.md)} ${rem(space.lg)}`,borderRadius:rem(radius.md),backgroundColor:look.mist,...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.relaxed)},chipRow:{display:"flex",flexWrap:"wrap",gap:rem(10)},chip:{minHeight:44,display:"inline-flex",alignItems:"center",gap:rem(space.sm),padding:`0 ${rem(space.lg)}`,borderRadius:rem(radius.pill),borderStyle:"solid",borderWidth:1.5,borderColor:look.ink,backgroundColor:look.surface,color:look.ink,cursor:"pointer",...faceCss(theme,"bold"),fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.snug),transition:settle,...slotRadius(slots.chip)},chipOn:{backgroundColor:look.pink,color:look.onPink},chipRest:slotLonghandCss(slots.chip,1.5),field:{display:"flex",flexDirection:"column",gap:rem(10)},reasonInput:{width:"100%",minHeight:150,resize:"vertical",borderStyle:"solid",borderWidth:1.5,borderColor:look.line,borderRadius:rem(radius.lg),padding:`${rem(space.lg)} ${rem(18)}`,backgroundColor:look.surface,...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed),boxSizing:"border-box",transition:reduced?"none":"border-color 200ms ease",...slotLonghandCss(slots.input,1.5)},reasonInputFocus:{borderColor:look.ink,outline:"none"},signs:{margin:0,paddingLeft:rem(22),display:"flex",flexDirection:"column",gap:rem(space.sm),...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed)},emergencyBanner:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:rem(space.md),padding:rem(20),borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1.5,borderColor:look.alert,backgroundColor:look.alertWash,boxSizing:"border-box"},emergencyTitle:{margin:0,...faceCss(theme,"bold"),color:color.errorRed,fontSize:rem(size.subtitle),lineHeight:String(lineHeight.snug)},emergencyLede:{margin:0,...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed)},linkButton:{alignSelf:"flex-start",minHeight:44,padding:0,borderStyle:"none",background:"transparent",cursor:"pointer",textAlign:"left",...faceCss(theme,"bold"),color:look.ink,fontSize:rem(size.body),lineHeight:String(lineHeight.snug),textDecorationLine:"underline",textUnderlineOffset:3},meet:{display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gap:rem(6),padding:`${rem(space.xxl)} ${rem(space.xl)}`,borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:look.line,backgroundColor:look.surface,...slotLonghandCss(slots.card,1)},vetAvatar:{width:112,height:112,flexShrink:0,borderRadius:"50%",backgroundColor:look.mist,boxShadow:`0 0 0 4px ${look.surface}, 0 0 0 6px ${look.go}`,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"medium"),color:look.ink,fontSize:rem(tierPx(theme,"heading",40)),lineHeight:"1",marginBottom:rem(space.sm)},vetName:{margin:0,...headingFaceCss(theme,"medium"),color:look.ink,...ink(slots.card),fontSize:rem(size.heading),lineHeight:String(lineHeight.snug)},vetCredentials:{margin:0,...faceCss(theme,"regular"),color:look.muted,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.normal),...ink(slots.card)},pills:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:rem(space.sm),margin:`${rem(space.sm)} 0`},pill:{display:"inline-flex",alignItems:"center",height:24,padding:`0 ${rem(10)}`,borderRadius:rem(radius.pill),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,...faceCss(theme,"monoBold"),color:look.muted,fontSize:rem(11.5),letterSpacing:"0.08em",textTransform:"uppercase",whiteSpace:"nowrap"},vetRating:{margin:0,...faceCss(theme,"regular"),color:look.muted,fontSize:rem(size.caption),lineHeight:String(lineHeight.normal),...ink(slots.card)},vetBio:{margin:0,maxWidth:"52ch",...faceCss(theme,"regular"),color:look.text,fontSize:rem(size.body),lineHeight:String(lineHeight.relaxed),...ink(slots.card)}}}function TelevetBookingChrome({step:step,furthestIndex:furthestIndex,title:title,canGoBack:canGoBack,showBack:showBack=true,isDirty:isDirty,onBack:onBack,onClose:onClose,onConfirmDiscard:onConfirmDiscard,headingLevel:level=DEFAULT_ROOT_HEADING_LEVEL,triageOpen:triageOpen=false,stepContext:stepContext}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles3(theme),[theme]),[confirming,setConfirming]=react.useState(false),closeRef=react.useRef(null),closeHintId=`${react.useId()}-close-hint`,Title=headingTag(level);react.useEffect(()=>{if(!isDirty||typeof window>"u")return;let onBeforeUnload=event=>{event.preventDefault(),event.returnValue=""};return window.addEventListener("beforeunload",onBeforeUnload),()=>window.removeEventListener("beforeunload",onBeforeUnload)},[isDirty]);let confirmClose=react.useCallback(()=>{if(!isDirty){onClose();return}let prompt={title:TELEVET_BOOKING_COPY_WEB.chrome.discardTitle,body:TELEVET_BOOKING_COPY_WEB.chrome.discardBody,confirmLabel:TELEVET_BOOKING_COPY_WEB.chrome.discardConfirmCta,keepLabel:TELEVET_BOOKING_COPY_WEB.chrome.discardKeepCta};if(onConfirmDiscard){Promise.resolve(onConfirmDiscard(prompt)).then(leave=>{leave&&onClose()},()=>{});return}setConfirming(true)},[isDirty,onClose,onConfirmDiscard]);useTelevetBackChannel(()=>(confirmClose(),true));let steps=react.useMemo(()=>televetBarSteps(stepContext),[stepContext]),{current:current,total:total}=televetBarPosition(step,steps,triageOpen),label=step==="booked"?TELEVET_BOOKING_COPY_WEB.bookedStepLabel:fill(TELEVET_BOOKING_COPY_WEB.loading.progressTemplate,{step:String(current),total:String(total)});/* @__PURE__ */
|
|
184
|
+
return jsxRuntime.jsxs("div",{style:styles.wrap,children:[
|
|
185
|
+
/* @__PURE__ */jsxRuntime.jsxs("header",{style:styles.bar,children:[
|
|
186
|
+
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",ref:closeRef,onClick:confirmClose,"aria-label":TELEVET_BOOKING_COPY_WEB.close,"aria-describedby":closeHintId,"data-testid":"televet-booking-close",style:styles.ring,children:/* @__PURE__ */jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:/* @__PURE__ */jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}),
|
|
187
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{id:closeHintId,style:VISUALLY_HIDDEN,children:TELEVET_BOOKING_COPY_WEB.chrome.closeHint}),
|
|
188
|
+
/* @__PURE__ */jsxRuntime.jsx(BrandLogo,{logoUrl:theme.meta.logoUrl,name:theme.meta.displayName,styles:styles.logo}),
|
|
189
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:VISUALLY_HIDDEN,children:title??TELEVET_BOOKING_COPY_WEB.navTitle}),showBack&&canGoBack?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onBack,"data-testid":"televet-booking-back",style:styles.back,children:TELEVET_BOOKING_COPY_WEB.backLabel}):null,
|
|
190
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{"aria-hidden":"true",style:styles.track,"data-testid":"televet-booking-rail",children:/* @__PURE__ */jsxRuntime.jsx("span",{"data-step":String(current),style:{...styles.fill,transform:`scaleX(${String(current/total)})`}})}),
|
|
191
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.stepLabel,"data-testid":"televet-booking-progress-label",children:label})]}),confirming?/* @__PURE__ */jsxRuntime.jsx(DiscardDialog,{onKeep:()=>setConfirming(false),onLeave:()=>{setConfirming(false),onClose()},returnFocusTo:closeRef}):null]})}function DiscardDialog({onKeep:onKeep,onLeave:onLeave,returnFocusTo:returnFocusTo}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles3(theme),[theme]),{dialogRef:dialogRef,onKeyDown:onKeyDown,onCancel:onCancel}=useModalDialog(true,onKeep,returnFocusTo),ids=react.useId(),titleId=`${ids}-discard-title`,bodyId=`${ids}-discard-body`;/* @__PURE__ */
|
|
192
|
+
return jsxRuntime.jsxs("dialog",{ref:dialogRef,onKeyDown:onKeyDown,onCancel:onCancel,"aria-labelledby":titleId,"aria-describedby":bodyId,"data-testid":"televet-booking-discard",style:styles.dialog,children:[
|
|
193
|
+
/* @__PURE__ */jsxRuntime.jsx("h2",{id:titleId,style:styles.dialogTitle,children:TELEVET_BOOKING_COPY_WEB.chrome.discardTitle}),
|
|
194
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{id:bodyId,style:styles.dialogBody,children:TELEVET_BOOKING_COPY_WEB.chrome.discardBody}),
|
|
195
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.dialogActions,children:[
|
|
196
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.chrome.discardKeepCta,onPress:onKeep,kind:"primary",fullWidth:false,testID:"televet-booking-discard-keep"}),
|
|
197
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.chrome.discardConfirmCta,onPress:onLeave,kind:"secondary",fullWidth:false,testID:"televet-booking-discard-leave"})]})]})}var BACK_LABEL="Back";function makeStyles3(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,rem=n=>`${String(n)}px`,reduced=theme.motion.reducedMotion,headerInk=slots.header?.textColor??color.brandInk,headerBoxed=slots.header?.backgroundColor!==void 0||slots.header?.borderColor!==void 0,dialogText=slots.dialog?.textColor;return{wrap:{flexShrink:0},bar:{display:"flex",flexDirection:"row",alignItems:"center",gap:rem(14),paddingTop:rem(space.xs),paddingBottom:rem(space.xl),minHeight:56,boxSizing:"border-box",...slotLonghandCss(slots.header,1),...slotInset(slots.header,space.md),...headerBoxed?{paddingBottom:rem(space.xs),marginBottom:rem(space.xl-space.xs)}:null},logo:{logo:{display:"block",height:28,width:"auto",maxWidth:96,objectFit:"contain",flexShrink:0}},ring:{width:MIN_TOUCH_TARGET,height:MIN_TOUCH_TARGET,flexShrink:0,display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:color.borderRingCream,backgroundColor:color.surface,color:color.brandInk,cursor:"pointer",boxSizing:"border-box"},back:{flexShrink:0,minHeight:MIN_TOUCH_TARGET,padding:`0 ${rem(space.sm)}`,background:"transparent",borderStyle:"none",cursor:"pointer",...faceCss(theme,"bold"),color:headerInk,fontSize:rem(size.bodyTight)},track:{flex:"1 1 auto",minWidth:0,height:6,borderRadius:rem(6),backgroundColor:color.surfaceSubtle,overflow:"hidden"},fill:{display:"block",height:"100%",borderRadius:rem(6),backgroundColor:color.brandInk,transformOrigin:"0 50%",transition:reduced?"none":`transform 600ms ${TELEVET_EASE_IO}`},stepLabel:{margin:0,flexShrink:0,...faceCss(theme,"monoBold"),color:headerInk,fontSize:rem(12),letterSpacing:"0.1em",textTransform:"uppercase",whiteSpace:"nowrap",lineHeight:String(lineHeight.snug)},dialog:{margin:"auto",maxWidth:420,width:"calc(100% - 32px)",boxSizing:"border-box",padding:rem(space.lg),borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:color.brandBorder,backgroundColor:color.surface,color:color.text.primary,...slotLonghandCss(slots.dialog,1)},dialogTitle:{margin:0,...headingFaceCss(theme,"medium"),color:dialogText??color.brandInk,fontSize:rem(size.subtitle),lineHeight:String(lineHeight.snug)},dialogBody:{margin:0,paddingTop:rem(space.sm),...faceCss(theme,"regular"),color:dialogText??color.text.metaCool,fontSize:rem(size.body),lineHeight:String(lineHeight.normal)},dialogActions:{display:"flex",flexDirection:"row",flexWrap:"wrap",gap:rem(space.sm),paddingTop:rem(space.lg)}}}function formatTelevetPetMetaLine(pet){let parts=[],breed=pet.breed?.trim();breed&&parts.push(breed);let years=wholeYears(pet.ageYears);years!==null&&parts.push(`${String(years)} year${years===1?"":"s"}`);let weight=pet.weightKg;return typeof weight=="number"&&Number.isFinite(weight)&&weight>0&&parts.push(`${String(Math.round(weight))} kg`),parts.join(" · ")}function wholeYears(ageYears){if(typeof ageYears!="number"||!Number.isFinite(ageYears))return null;let years=Math.floor(ageYears);return years>=0?years:null}function TelevetIntakeMedia({media:media,onChange:onChange,onPickMedia:onPickMedia,listLabel:listLabel,meta:meta}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles4(theme),[theme]),remaining=MEDIA_REFS_MAX-media.length,[busy,setBusy]=react.useState(false);if(!onPickMedia)return null;let pick2=async()=>{if(!(busy||remaining<=0)){setBusy(true);try{let outcome=await callHostAsync(onPickMedia,remaining);if(!outcome.ok||outcome.value===null||outcome.value.length===0)return;let existing=new Set(media.map(m=>m.uri)),fresh2=outcome.value.filter(p=>typeof p?.uri=="string"&&p.uri.length>0&&!existing.has(p.uri));if(fresh2.length===0)return;onChange([...media,...fresh2].slice(0,MEDIA_REFS_MAX))}finally{setBusy(false)}}};/* @__PURE__ */
|
|
198
|
+
return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[
|
|
199
|
+
/* @__PURE__ */jsxRuntime.jsxs("ul",{role:"list","aria-label":listLabel,style:styles.row,children:[media.map((m,i)=>/* @__PURE__ */jsxRuntime.jsxs("li",{style:styles.thumb,children:[
|
|
200
|
+
/* @__PURE__ */jsxRuntime.jsx("img",{src:m.uri,alt:m.filename,style:styles.thumbImage}),m.mimeType.startsWith("video/")?/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:styles.videoBadge,"data-testid":`televet-intake-media-video-${String(i)}`,children:VIDEO_GLYPH}):null,
|
|
201
|
+
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:()=>onChange(media.filter((_,idx)=>idx!==i)),"aria-label":`${TELEVET_BOOKING_COPY_WEB.removePhotoLabel}: ${m.filename}`,"data-testid":`televet-intake-media-remove-${String(i)}`,style:styles.remove,children:/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:styles.removeGlyph,children:REMOVE_GLYPH})})]},`${m.uri}-${String(i)}`)),remaining>0?/* @__PURE__ */jsxRuntime.jsx("li",{style:styles.addItem,children:/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:()=>{pick2()},disabled:busy,"aria-busy":busy||void 0,"data-testid":"televet-intake-add-media",style:{...styles.dropzone,...busy?styles.dropzoneBusy:null},children:/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.dropzoneText,children:TELEVET_BOOKING_COPY_WEB.addPhotoCta})})}):null]}),meta?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.meta,"data-testid":"televet-intake-media-meta",children:meta}):null]})}var REMOVE_GLYPH="×",VIDEO_GLYPH="▶",TILE=92;function makeStyles4(theme){let{color:color,space:space,radius:radius,type:type}=theme,{size:size,lineHeight:lineHeight}=type,rem=n=>`${String(n)}px`;return{row:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"row",flexWrap:"wrap",gap:rem(space.md),paddingTop:rem(space.sm)},thumb:{position:"relative",width:TILE,height:TILE,borderRadius:rem(radius.md),backgroundColor:color.surfaceSubtle},thumbImage:{width:"100%",height:"100%",objectFit:"cover",borderRadius:rem(radius.md),display:"block"},videoBadge:{position:"absolute",left:6,bottom:6,paddingLeft:6,paddingRight:6,paddingTop:2,paddingBottom:2,borderRadius:rem(radius.sm),backgroundColor:color.shadow,color:color.text.onBrand,fontSize:rem(size.nano),lineHeight:"1"},addItem:{display:"flex"},remove:{position:"absolute",top:-8,right:-8,width:MIN_TOUCH_TARGET-16,height:MIN_TOUCH_TARGET-16,borderRadius:"50%",borderStyle:"none",backgroundColor:color.text.metaCool,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:0},removeGlyph:{...faceCss(theme,"medium"),color:color.surface,fontSize:rem(size.subtitle),lineHeight:"1"},dropzone:{width:TILE,height:TILE,borderRadius:rem(radius.md),borderWidth:1,borderStyle:"dashed",borderColor:color.brandBorder,backgroundColor:"transparent",display:"inline-flex",alignItems:"center",justifyContent:"center",paddingLeft:rem(space.sm),paddingRight:rem(space.sm),cursor:"pointer",boxSizing:"border-box"},dropzoneBusy:{opacity:.6,cursor:"progress"},meta:{...faceCss(theme,"regular"),margin:0,paddingTop:rem(space.sm),color:color.text.metaCool,fontSize:rem(size.caption),lineHeight:String(lineHeight.normal)},dropzoneText:{...faceCss(theme,"mono"),color:color.text.metaCool,fontSize:rem(size.nano),lineHeight:String(lineHeight.normal),letterSpacing:"0.3px",textAlign:"center"}}}function TelevetDayStrip({slots:slots,selectedDayKey:selectedDayKey,onSelectDay:onSelectDay,groupLabel:groupLabel}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles5(theme),[theme]),days=react.useMemo(()=>televetDaysFromSlots(slots),[slots]),refs=react.useRef(/* @__PURE__ */new Map),first=days[0],activeKey=selectedDayKey??first?.key??null,stripRef=react.useRef(null),revealed=react.useRef(false);react.useEffect(()=>{if(revealed.current)return;let strip=stripRef.current,chip=activeKey===null?void 0:refs.current.get(activeKey);if(!strip||!chip||(revealed.current=true,activeKey===first?.key))return;let offset=chip.getBoundingClientRect().left-strip.getBoundingClientRect().left;strip.scrollLeft+=offset-(strip.clientWidth-chip.clientWidth)/2},[activeKey,first]);let onKeyDown=react.useCallback(event=>{let delta=event.key==="ArrowRight"||event.key==="ArrowDown"?1:event.key==="ArrowLeft"||event.key==="ArrowUp"?-1:0,jump=event.key==="Home"?0:event.key==="End"?days.length-1:null;if(delta===0&&jump===null)return;let index=days.findIndex(d=>d.key===activeKey);if(index<0)return;let target=jump??Math.min(days.length-1,Math.max(0,index+delta)),day=days[target];day===void 0||day.key===activeKey||(event.preventDefault(),onSelectDay(day),refs.current.get(day.key)?.focus())},[days,activeKey,onSelectDay]);return first===void 0?null:/* @__PURE__ */jsxRuntime.jsxs("div",{children:[
|
|
202
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{"aria-hidden":"true",style:styles.month,"data-testid":"televet-day-strip-month",children:formatMonthLabel(first.iso)}),
|
|
203
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{ref:stripRef,role:"radiogroup","aria-label":groupLabel,onKeyDown:onKeyDown,style:styles.strip,"data-testid":"televet-day-strip",children:days.map(day=>{let selected=day.key===activeKey;/* @__PURE__ */
|
|
204
|
+
return jsxRuntime.jsxs("button",{ref:node=>{node?refs.current.set(day.key,node):refs.current.delete(day.key)},type:"button",role:"radio","aria-checked":selected,tabIndex:selected?0:-1,onClick:()=>onSelectDay(day),"aria-label":formatFullDayLabel(day.iso),"data-testid":`televet-day-${day.key}`,style:{...styles.day,...selected?styles.daySelected:styles.dayRest},children:[
|
|
205
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...styles.dayWeekday,...selected?styles.dayTextSelected:styles.dayTextRest},children:day.weekday}),
|
|
206
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...styles.dayNumber,...selected?styles.dayTextSelected:styles.dayTextRest},children:day.dayNumber})]},day.key)})})]})}function televetDaysFromSlots(slots){let seen=/* @__PURE__ */new Map;for(let slot of slots){let key=localDayKey(slot.startsAt);if(seen.has(key))continue;let date2=new Date(slot.startsAt);Number.isNaN(date2.getTime())||seen.set(key,
|
|
207
|
+
/* @__PURE__ */Object.freeze({key:key,iso:slot.startsAt,weekday:date2.toLocaleDateString(void 0,{weekday:"short"}),dayNumber:String(date2.getDate())}))}/* @__PURE__ */
|
|
208
|
+
return Object.freeze([...seen.values()])}function makeStyles5(theme){let{space:space,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),rem=n=>`${String(n)}px`;return{month:{margin:0,...faceCss(theme,"bold"),color:look.ink,fontSize:rem(19),lineHeight:String(lineHeight.snug),paddingBottom:rem(14)},strip:{display:"flex",flexDirection:"row",gap:rem(space.sm),padding:2,margin:"0 -2px",overflowX:"auto",overscrollBehaviorX:"contain",scrollSnapType:"x proximity",scrollbarWidth:"none"},day:{width:64,height:72,flexShrink:0,scrollSnapAlign:"center",minHeight:MIN_TOUCH_TARGET,padding:0,borderRadius:rem(14),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:2,cursor:"pointer",boxSizing:"border-box",transition:theme.motion.reducedMotion?"none":"border-color 180ms ease, background-color 180ms ease",...slotRadius(slots.chip)},daySelected:{backgroundColor:look.pink,borderColor:look.ink},dayRest:slotLonghandCss(slots.chip,1.5),dayTextRest:slots.chip?.textColor===void 0?{}:{color:slots.chip.textColor},dayWeekday:{...faceCss(theme,"monoBold"),color:look.ink,fontSize:rem(11),letterSpacing:"0.08em",textTransform:"uppercase",lineHeight:String(lineHeight.tight)},dayNumber:{...faceCss(theme,"medium"),color:look.ink,fontSize:rem(size.heading),letterSpacing:"-0.02em",lineHeight:String(lineHeight.tight)},dayTextSelected:{color:look.onPink}}}function TelevetSlotPicker({slots:slots,busySlotId:busySlotId,onPick:onPick,selectedSlot:selectedSlot=null,header:header,dayGroupLabel:dayGroupLabel,timeGroupLabel:timeGroupLabel,rowTestIdPrefix:rowTestIdPrefix="televet-slot",testID:testID="televet-slot-list",periodLabels:periodLabels,timeLegendTemplate:timeLegendTemplate}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles6(theme),[theme]),days=react.useMemo(()=>televetDaysFromSlots(slots),[slots]),zoneId=`${react.useId()}-zone`,[dayKey,setDayKey]=react.useState(null),selectedDay=selectedSlot?localDayKey(selectedSlot.startsAt):null,activeDay=firstOffered(days,[dayKey,selectedDay])??days[0]?.key??null,times=react.useMemo(()=>activeDay?slots.filter(s=>localDayKey(s.startsAt)===activeDay):[],[slots,activeDay]),first=times[0],blocked=busySlotId!==null,ordered=react.useMemo(()=>groups(times,periodLabels).flatMap(group=>group.slots),[times,periodLabels]),[focusId,setFocusId]=react.useState(null),chipRefs=react.useRef(/* @__PURE__ */new Map),has=id=>id!=null&&ordered.some(slot=>slot.slotId===id),stopId=has(focusId)?focusId:has(selectedSlot?.slotId)?selectedSlot?.slotId??null:ordered[0]?.slotId??null,onGridKeyDown=event=>{let index=ordered.findIndex(slot2=>chipRefs.current.get(slot2.slotId)===event.target);if(index<0)return;let target=slotIndexForKey(event.key,index,ordered.map(slot2=>chipRefs.current.get(slot2.slotId)??null));if(target===null||target===index)return;event.preventDefault();let slot=ordered[target];slot!==void 0&&(setFocusId(slot.slotId),chipRefs.current.get(slot.slotId)?.focus())},zone=first?formatZone(first.startsAt):null,legend=timeLegendTemplate&&first?fill(timeLegendTemplate,{day:formatFullDayLabel(first.startsAt)}):timeGroupLabel;
|
|
209
|
+
/* @__PURE__ */
|
|
210
|
+
return jsxRuntime.jsxs("div",{style:styles.root,"data-testid":testID,children:[header,
|
|
211
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetDayStrip,{slots:slots,selectedDayKey:activeDay,onSelectDay:day=>setDayKey(day.key),groupLabel:dayGroupLabel}),zone?/* @__PURE__ */jsxRuntime.jsx("p",{id:zoneId,style:styles.zone,"data-testid":"televet-slot-zone",children:zone}):null,
|
|
212
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.gridScroll,onKeyDown:onGridKeyDown,children:groups(times,periodLabels).map(group=>/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.group,children:[group.label?/* @__PURE__ */jsxRuntime.jsx("p",{"aria-hidden":"true",style:styles.period,"data-testid":`televet-slot-period-${group.key}`,children:group.label}):null,
|
|
213
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{role:"list","aria-label":group.label?`${legend}, ${group.label}`:legend,...zone?{"aria-describedby":zoneId}:{},"aria-busy":blocked||void 0,style:styles.grid,children:group.slots.map(slot=>{let busy=busySlotId===slot.slotId,picked=selectedSlot?.slotId===slot.slotId;/* @__PURE__ */
|
|
214
|
+
return jsxRuntime.jsx("li",{style:styles.gridItem,children:/* @__PURE__ */jsxRuntime.jsx("button",{ref:node=>{node?chipRefs.current.set(slot.slotId,node):chipRefs.current.delete(slot.slotId)},type:"button",tabIndex:slot.slotId===stopId?0:-1,onClick:blocked?void 0:()=>onPick(slot),onFocus:()=>setFocusId(slot.slotId),"aria-disabled":blocked||void 0,"aria-busy":busy||void 0,"aria-pressed":picked||void 0,"aria-label":formatWhenWithDay(slot.startsAt),"data-testid":`${rowTestIdPrefix}-${slot.slotId}`,style:{...styles.chip,...picked?styles.chipPicked:styles.chipRest,...busy?styles.chipBusy:null,...blocked&&!busy?styles.chipDisabled:null},children:/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...styles.chipLabel,...picked?styles.chipLabelPicked:styles.chipLabelRest,...busy?styles.chipLabelBusy:null},children:formatClock(slot.startsAt)})})},slot.slotId)})})]},group.key))})]})}function slotIndexForKey(key,index,chips){let last=chips.length-1;if(key==="ArrowRight")return Math.min(last,index+1);if(key==="ArrowLeft")return Math.max(0,index-1);if(key==="Home")return 0;if(key==="End")return last;if(key!=="ArrowDown"&&key!=="ArrowUp")return null;let from=chips[index]?.getBoundingClientRect();if(from===void 0)return null;let centre=from.left+from.width/2,down=key==="ArrowDown",best=null;for(let i=0;i<chips.length;i+=1){let chip=chips[i];if(chip==null||i===index)continue;let box=chip.getBoundingClientRect(),row2=down?box.top-from.top:from.top-box.top;if(row2<from.height/2)continue;let dx=Math.abs(box.left+box.width/2-centre);(best===null||row2<best.row-1||Math.abs(row2-best.row)<=1&&dx<best.dx)&&(best={index:i,row:row2,dx:dx})}return best===null?index:best.index}function groups(times,labels){return labels?["morning","afternoon","evening"].map(period=>({key:period,label:labels[period],slots:times.filter(s=>televetDayPeriod(s.startsAt)===period)})).filter(group=>group.slots.length>0):[{key:"all",label:null,slots:times}]}function firstOffered(days,keys){for(let key of keys)if(key!==null&&days.some(day=>day.key===key))return key;return null}function makeStyles6(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),rem=n=>`${String(n)}px`,settle=theme.motion.reducedMotion?"none":"border-color 180ms ease, background-color 180ms ease";return{root:{display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,gap:rem(space.md)},gridScroll:{flex:"1 1 auto",minHeight:0,overflowY:"auto",overscrollBehavior:"contain",display:"flex",flexDirection:"column",gap:rem(space.lg),paddingBottom:rem(space.md)},group:{display:"flex",flexDirection:"column",gap:rem(space.sm)},period:{margin:0,...faceCss(theme,"bold"),color:look.ink,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.snug)},zone:{margin:0,...faceCss(theme,"mono"),color:look.muted,fontSize:rem(size.caption),lineHeight:String(lineHeight.normal),letterSpacing:"0.04em"},grid:{listStyle:"none",margin:0,padding:0,display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(104px, 1fr))",gap:rem(space.sm)},gridItem:{display:"flex",minWidth:0},chip:{width:"100%",minHeight:44,borderRadius:rem(radius.pill),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",paddingLeft:rem(space.lg),paddingRight:rem(space.lg),cursor:"pointer",boxSizing:"border-box",transition:settle,...slotRadius(slots.chip)},chipPicked:{borderColor:look.ink,backgroundColor:look.pink},chipRest:slotLonghandCss(slots.chip,1.5),chipLabelRest:slots.chip?.textColor===void 0?{}:{color:slots.chip.textColor},chipLabelPicked:{color:look.onPink},chipBusy:{backgroundColor:color.primary,borderColor:color.primary},chipDisabled:{opacity:.45,cursor:"not-allowed"},chipLabel:{...faceCss(theme,"monoBold"),color:look.ink,fontSize:rem(size.bodyTight),fontVariantNumeric:"tabular-nums",lineHeight:String(lineHeight.tight)},chipLabelBusy:{color:color.onPrimary}}}function TelevetSummaryRow({label:label,value:value,last:last=false,action:action,testID:testID}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles7(theme),[theme]);/* @__PURE__ */
|
|
215
|
+
return jsxRuntime.jsxs("div",{style:{...styles.row,...last?styles.rowLast:null},"data-testid":testID,children:[
|
|
216
|
+
/* @__PURE__ */jsxRuntime.jsx("dt",{style:styles.rowLabel,children:label}),
|
|
217
|
+
/* @__PURE__ */jsxRuntime.jsxs("dd",{style:{...styles.rowValue,...styles.rowValueLine},children:[
|
|
218
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.rowValueText,children:value}),action?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.rowAction,children:action}):null]})]})}function TelevetConsentCheckbox({label:label,checked:checked,onToggle:onToggle,testID:testID}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles7(theme),[theme]);
|
|
219
|
+
/* @__PURE__ */
|
|
220
|
+
return jsxRuntime.jsxs("label",{style:styles.consent,children:[
|
|
221
|
+
/* @__PURE__ */jsxRuntime.jsx("input",{type:"checkbox",checked:checked,onChange:event=>onToggle(event.currentTarget.checked),"data-testid":testID,style:VISUALLY_HIDDEN}),
|
|
222
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:{...styles.box,...checked?styles.boxChecked:null},children:checked?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.tick,children:TICK}):null}),
|
|
223
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.consentLabel,children:label})]})}var TICK="✓";function TelevetSummaryCard({children:children,testID:testID}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles7(theme),[theme]);/* @__PURE__ */
|
|
224
|
+
return jsxRuntime.jsx("dl",{style:styles.card,"data-testid":testID,children:children})}function makeStyles7(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,rem=n=>`${String(n)}px`,cardInk=slots.card?.textColor===void 0?{}:{color:slots.card.textColor};return{card:{margin:0,borderRadius:rem(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:color.borderRingCream,backgroundColor:color.surface,paddingLeft:rem(space.xl),paddingRight:rem(space.xl),paddingTop:rem(space.xs),paddingBottom:rem(space.xs),boxSizing:"border-box",...slotLonghandCss(slots.card,1)},row:{display:"flex",flexDirection:"column",gap:2,paddingTop:rem(space.md),paddingBottom:rem(space.md),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:color.borderRingCream},rowLast:{borderBottomWidth:0},rowValueLine:{display:"flex",flexDirection:"row",alignItems:"center",gap:rem(14)},rowValueText:{flex:"1 1 auto",minWidth:0},rowAction:{flexShrink:0,marginLeft:"auto",whiteSpace:"normal"},rowLabel:{margin:0,...faceCss(theme,"regular"),color:color.text.muted,fontSize:rem(14),lineHeight:String(lineHeight.normal),...cardInk},rowValue:{margin:0,marginInlineStart:0,minWidth:0,overflowWrap:"anywhere",whiteSpace:"pre-line",...faceCss(theme,"bold"),color:color.brandInk,fontSize:rem(size.body),lineHeight:String(lineHeight.snug),...cardInk},consent:{display:"flex",flexDirection:"row",alignItems:"flex-start",gap:rem(space.md),minHeight:MIN_TOUCH_TARGET,padding:`${rem(14)} ${rem(space.lg)}`,borderRadius:rem(radius.sm),backgroundColor:color.surfaceSubtle,cursor:"pointer",boxSizing:"border-box"},box:{width:24,height:24,marginTop:1,flexShrink:0,borderRadius:rem(radius.xs),borderStyle:"solid",borderWidth:1.5,borderColor:color.brandInk,backgroundColor:color.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",transition:theme.motion.reducedMotion?"none":"background-color 180ms ease"},boxChecked:{backgroundColor:color.primary,borderColor:color.primary},tick:{...faceCss(theme,"bold"),color:color.onPrimary,fontSize:rem(size.caption),lineHeight:"1"},consentLabel:{flex:"1 1 auto",minWidth:0,overflowWrap:"anywhere",...faceCss(theme,"regular"),color:color.text.primary,fontSize:rem(size.bodyTight),lineHeight:String(lineHeight.relaxed)}}}function ReviewStep({headingRef:headingRef,when:when,onChangeWhen:onChangeWhen,stateName:stateName,about:about,lengthMinutes:lengthMinutes,clinician:clinician,petName:petName,reason:reason,shareRecords:shareRecords,onToggleShare:onToggleShare,stateCode:stateCode,stateAttested:stateAttested,onToggleStateAttest:onToggleStateAttest,cancellationTerms:cancellationTerms,termsAttested:termsAttested,onToggleTermsAttest:onToggleTermsAttest,canConfirm:ready,busy:busy,failure:failure2,onConfirm:onConfirm,emergency:emergency,onAcknowledgeEmergency:onAcknowledgeEmergency,onSeeOtherVets:onSeeOtherVets,mediaShortfall:mediaShortfall=NO_MEDIA_SHORTFALL,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet}){let styles=useBookingStyles(),theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),[unticked,setUnticked]=react.useState(false),emergencyLede=TELEVET_BOOKING_COPY_WEB.emergency.lede,place=stateName??stateCode??"",attestLabel=petName?fill(TELEVET_BOOKING_COPY_WEB.whereAttestTemplate,{pet:petName,state:place}):fill(TELEVET_BOOKING_COPY_WEB.stateAttestTemplate,{state:place}),aboutLine=about??reason,twoBoxes=!!stateCode&&!!cancellationTerms,ticked=(!stateCode||stateAttested)&&(!cancellationTerms||termsAttested);/* @__PURE__ */
|
|
225
|
+
return jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:TELEVET_BOOKING_COPY_WEB.reviewHeading,testID:"televet-booking-review",scrollTestID:"televet-booking-review-scroll",footer:emergency?null:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:busy?TELEVET_BOOKING_COPY_WEB.confirmBusy:TELEVET_BOOKING_COPY_WEB.confirmCta,kind:"primary",size:"lg",loading:busy,busyAnnouncement:TELEVET_BOOKING_COPY_WEB.confirmBusy,disabled:!ready||busy||!twoBoxes&&!ticked,onPress:()=>{if(!ticked){setUnticked(true);return}onConfirm()},testID:"televet-review-confirm"}),children:[
|
|
226
|
+
/* @__PURE__ */jsxRuntime.jsxs(TelevetSummaryCard,{testID:"televet-review-summary",children:[petName?/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryPet,value:petName,testID:"televet-review-row-pet"}):null,clinician?/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryVet,value:clinician,testID:"televet-review-row-vet"}):null,
|
|
227
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryWhen,value:when,testID:"televet-review-row-when",action:onChangeWhen?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.changeCta,kind:"quiet",fullWidth:false,onPress:onChangeWhen,testID:"televet-review-change-when"}):null}),
|
|
228
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryLength,value:fill(TELEVET_BOOKING_COPY_WEB.summaryLengthTemplate,{n:String(lengthMinutes)}),testID:"televet-review-row-length"}),place?/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryWhere,value:place,testID:"televet-review-row-where"}):null,aboutLine?/* @__PURE__ */jsxRuntime.jsx(TelevetSummaryRow,{label:TELEVET_BOOKING_COPY_WEB.summaryReason,value:aboutLine,last:true,testID:"televet-review-row-reason"}):null]}),
|
|
229
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.list,children:[stateCode?/* @__PURE__ */jsxRuntime.jsx(TelevetConsentCheckbox,{label:attestLabel,checked:stateAttested,onToggle:next=>{setUnticked(false),onToggleStateAttest(next)},testID:"televet-review-state-attest"}):null,cancellationTerms?/* @__PURE__ */jsxRuntime.jsx(TelevetConsentCheckbox,{label:cancellationTerms,checked:termsAttested,onToggle:next=>{setUnticked(false),onToggleTermsAttest(next)},testID:"televet-review-terms-attest"}):null,
|
|
230
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetConsentCheckbox,{label:TELEVET_BOOKING_COPY_WEB.shareRecordsOff,checked:shareRecords,onToggle:onToggleShare,testID:"televet-review-share-records"})]}),unticked&&!ticked&&twoBoxes?/* @__PURE__ */jsxRuntime.jsx("p",{role:"alert",style:local.alertLine,"data-testid":"televet-review-attest-both",children:TELEVET_BOOKING_COPY_WEB.attestBoth}):null,
|
|
231
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetMediaDropNotice,{shortfall:mediaShortfall,testIDPrefix:"televet-review"}),emergency?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"alert",style:local.emergencyBanner,"data-testid":"televet-review-emergency",children:[
|
|
232
|
+
/* @__PURE__ */jsxRuntime.jsx(SubHeading,{style:local.emergencyTitle,children:TELEVET_BOOKING_COPY_WEB.emergency.bannerTitle}),
|
|
233
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:local.emergencyLede,children:emergencyLede}),emergency.length>0?/* @__PURE__ */jsxRuntime.jsx("p",{style:local.emergencyLede,"data-testid":"televet-review-emergency-categories",children:emergency.join(", ")}):null,
|
|
234
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetEmergencyExits,{petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,testIDPrefix:"televet-review-emergency"}),
|
|
235
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.emergency.keepBookingCta,kind:"secondary",loading:busy,disabled:busy,onPress:onAcknowledgeEmergency,testID:"televet-review-emergency-ack"})]}):null,failure2==="failed"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.confirmFailed}):null,failure2==="clinician_unavailable"?/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.list,"data-testid":"televet-review-clinician-unavailable",children:[
|
|
236
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.confirmFailed}),
|
|
237
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.seeOtherVetsCta,kind:"secondary",onPress:onSeeOtherVets,testID:"televet-review-see-other-vets"})]}):null,failure2==="rate_limited"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.confirmFailed,testID:"televet-review-rate-limited"}):null,failure2==="not_entitled"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle,testID:"televet-review-not-entitled"}):null]})}function nameOf(pets,petId){return petId?pets.find(p=>p.petRef===petId||p.petId===petId)?.name??null:null}function StepHeading({headingRef:headingRef,style:style,id:id,children:children}){let Tag=headingTag(useNestedHeadingLevel());/* @__PURE__ */
|
|
238
|
+
return jsxRuntime.jsx(Tag,{ref:headingRef,tabIndex:-1,style:style,...id===void 0?{}:{id:id},children:children})}function SubHeading({style:style,children:children}){let Tag=headingTag(nextHeadingLevel(useNestedHeadingLevel()));/* @__PURE__ */
|
|
239
|
+
return jsxRuntime.jsx(Tag,{style:style,children:children})}var TelevetStepNavContext=react.createContext(null);function TelevetStepFrame({headingRef:headingRef,heading:heading,headingId:headingId,lead:lead,leadId:leadId,testID:testID,scrollTestID:scrollTestID,footerStart:footerStart,footer:footer,children:children}){let styles=useBookingStyles(),theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),nav=react.useContext(TelevetStepNavContext);/* @__PURE__ */
|
|
240
|
+
return jsxRuntime.jsxs("div",{style:styles.scrollRoot,"data-testid":testID,children:[
|
|
241
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.scrollBody,...scrollTestID?{"data-testid":scrollTestID}:{},children:/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.stepBody,children:[
|
|
242
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.head,children:[
|
|
243
|
+
/* @__PURE__ */jsxRuntime.jsx(StepHeading,{headingRef:headingRef,style:{...styles.stepTitle,...local.stepInk},...headingId?{id:headingId}:{},children:heading}),lead?/* @__PURE__ */jsxRuntime.jsx("p",{style:{...styles.stepHelp,...local.stepInk},...leadId?{id:leadId}:{},children:lead}):null]}),children]})}),
|
|
244
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.footer,children:[nav?.canGoBack?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.backLabel,kind:"quiet",fullWidth:false,onPress:nav.onBack,testID:"televet-booking-back"}):null,footerStart,footer?/* @__PURE__ */jsxRuntime.jsx("div",{style:local.footerMain,children:footer}):null]})]})}function TelevetOptionCard({title:title,meta:meta,selected:selected,onPress:onPress,testID:testID,leading:leading}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),press=useTelevetPress(false,.98);/* @__PURE__ */
|
|
245
|
+
return jsxRuntime.jsxs("button",{type:"button",role:"radio","aria-checked":selected,onClick:onPress,...press.handlers,"data-testid":testID,style:{...local.option,...selected?local.optionSelected:local.optionRest,...press.style},children:[leading??/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:local.optionDot,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:{...local.optionDotFill,...selected?local.optionDotFillOn:null}})}),
|
|
246
|
+
/* @__PURE__ */jsxRuntime.jsxs("span",{style:local.optionText,children:[
|
|
247
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:{...local.optionTitle,...selected?null:local.optionRestInk},children:title}),meta?/* @__PURE__ */jsxRuntime.jsx("span",{style:{...local.optionMeta,...selected?null:local.optionRestInk},children:meta}):null]})]})}function radiosOf(group){return Array.from(group.querySelectorAll('[role="radio"]')).filter(radio=>radio.closest('[role="radiogroup"]')===group)}function TelevetRadioGroup({label:label,style:style,testID:testID,children:children}){let ref=react.useRef(null);return react.useEffect(()=>{let group=ref.current;if(group===null)return;let radios=radiosOf(group),checked=radios.findIndex(radio=>radio.getAttribute("aria-checked")==="true"),stop=checked<0?0:checked;radios.forEach((radio,index)=>{radio.tabIndex=index===stop?0:-1})}),/* @__PURE__ */jsxRuntime.jsx("div",{ref:ref,role:"radiogroup","aria-label":label,onKeyDown:event=>{let group=ref.current;if(group===null)return;let radios=radiosOf(group),index=radios.indexOf(event.target);if(index<0||radios.length===0)return;let last=radios.length-1,next=event.key==="ArrowDown"||event.key==="ArrowRight"?(index+1)%radios.length:event.key==="ArrowUp"||event.key==="ArrowLeft"?(index+last)%radios.length:event.key==="Home"?0:event.key==="End"?last:null;if(next===null||next===index)return;event.preventDefault();let target=radios[next];target?.focus(),target?.click()},style:style,...testID?{"data-testid":testID}:{},children:children})}function PetStep({headingRef:headingRef,pets:pets,isPending:isPending,isError:isError,error:error,onRetry:onRetry,selectedId:selectedId,onSelect:onSelect,onNext:onNext,onAddPet:onAddPet}){let styles=useBookingStyles(),theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]);return isPending?/* @__PURE__ */jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_BOOKING_COPY_WEB.loading.pets,"aria-busy":"true",style:styles.list,"data-testid":"televet-pets-loading",children:[0,1].map(i=>/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:96},i))}):isError?/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-pets-error",children:/* @__PURE__ */jsxRuntime.jsx(TelevetLoadFailed,{error:error,title:TELEVET_BOOKING_COPY_WEB.chrome.loadFailedTitle,actionLabel:TELEVET_BOOKING_COPY_WEB.chrome.retryCta,onRetry:onRetry})}):pets.length===0?/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-pets-empty",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.chrome.noPetsTitle,actionLabel:TELEVET_BOOKING_COPY_WEB.addPetCta,onAction:onAddPet})}):/* @__PURE__ */jsxRuntime.jsx(TelevetStepFrame,{headingRef:headingRef,heading:TELEVET_BOOKING_COPY_WEB.petSelectTitle,testID:"televet-booking-pets",footerStart:onAddPet?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.addAnotherPetCta,kind:"quiet",fullWidth:false,onPress:onAddPet,testID:"televet-pet-add"}):null,footer:onNext?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",disabled:!selectedId,onPress:onNext,testID:"televet-pets-next"}):null,children:/* @__PURE__ */jsxRuntime.jsx(TelevetRadioGroup,{label:TELEVET_BOOKING_COPY_WEB.petSelectTitle,style:local.options,testID:"televet-pets",children:pets.map(pet=>/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:pet.name??"",meta:formatTelevetPetMetaLine(pet),selected:selectedId===pet.petRef,onPress:()=>onSelect(pet.petRef),testID:`televet-pet-${pet.petRef}`,leading:/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:local.optionAvatar,children:initialOf(pet.name??"")})},pet.petRef))})})}var PERSON_GLYPH="○";function initialOf(name){let trimmed=name.trim();return trimmed.length===0?PERSON_GLYPH:trimmed.slice(0,1).toUpperCase()}function ClinicianStep({headingRef:headingRef,clinicians:clinicians,isPending:isPending,isError:isError,error:error,selectedId:selectedId,stateCode:stateCode,stateName:stateName,onSelect:onSelect,onRetry:onRetry}){let styles=useBookingStyles(),theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]);if(isPending)/* @__PURE__ */
|
|
248
|
+
return jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_BOOKING_COPY_WEB.loading.clinicians,"aria-busy":"true",style:styles.list,"data-testid":"televet-clinicians-loading",children:/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:240})});if(isError)/* @__PURE__ */
|
|
249
|
+
return jsxRuntime.jsx("div",{"data-testid":"televet-clinicians-error",children:/* @__PURE__ */jsxRuntime.jsx(TelevetLoadFailed,{error:error,title:TELEVET_BOOKING_COPY_WEB.chrome.loadFailedTitle,actionLabel:TELEVET_BOOKING_COPY_WEB.chrome.retryCta,onRetry:onRetry})});if(clinicians.length===0)/* @__PURE__ */
|
|
250
|
+
return jsxRuntime.jsx("div",{"data-testid":"televet-clinicians-empty",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.noCliniciansTitle,message:TELEVET_BOOKING_COPY_WEB.noCliniciansBody,actionLabel:TELEVET_BOOKING_COPY_WEB.noCliniciansRetryCta,onAction:onRetry})});let vet=clinicians.find(c=>c.clinicianId===selectedId)??clinicians[0];if(vet===void 0)return null;let code=stateCode?.trim().toUpperCase()??"",licensedHere=code.length>0&&vet.licensedStates.some(l=>l.state.trim().toUpperCase()===code);/* @__PURE__ */
|
|
251
|
+
return jsxRuntime.jsx(TelevetStepFrame,{headingRef:headingRef,heading:TELEVET_BOOKING_COPY_WEB.yourVetTitle,testID:"televet-clinicians",footer:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",onPress:()=>onSelect(vet.clinicianId),testID:`televet-clinician-${vet.clinicianId}`}),children:/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.meet,children:[
|
|
252
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:local.vetAvatar,children:initialOf(vet.displayName)}),
|
|
253
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:local.vetName,children:vet.credentials?`${vet.displayName}, ${vet.credentials}`:vet.displayName}),licensedHere&&stateName?/* @__PURE__ */jsxRuntime.jsx("div",{style:local.pills,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:local.pill,"data-testid":"televet-vet-licensed",children:fill(TELEVET_BOOKING_COPY_WEB.licensedPillTemplate,{state:stateName})})}):null,vet.rating!==null&&vet.ratingCount!==null?/* @__PURE__ */jsxRuntime.jsx("p",{style:local.vetRating,"data-testid":"televet-vet-rating",children:`★ ${String(vet.rating)} · ${String(vet.ratingCount)} ${TELEVET_BOOKING_COPY_WEB.reviewsLabel}`}):null,vet.bio?/* @__PURE__ */jsxRuntime.jsx("p",{style:local.vetBio,"data-testid":"televet-vet-bio",children:vet.bio}):null]})})}function SlotStep({headingRef:headingRef,slots:slots,enabled:enabled,isPending:isPending,isError:isError,error:error,busySlotId:busySlotId,failure:failure2,selectedSlot:selectedSlot,nextOpening:nextOpening,onPick:onPick,onRetry:onRetry,onSeeOtherVets:onSeeOtherVets}){let styles=useBookingStyles();return enabled?isPending?/* @__PURE__ */jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_BOOKING_COPY_WEB.loading.slots,"aria-busy":"true",style:styles.list,"data-testid":"televet-slots-loading",children:[0,1,2].map(i=>/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:48},i))}):isError?/* @__PURE__ */jsxRuntime.jsx(TelevetLoadFailed,{error:error,title:TELEVET_BOOKING_COPY_WEB.slotsErrorTitle,actionLabel:TELEVET_BOOKING_COPY_WEB.retryCta,onRetry:onRetry,testID:"televet-slots-error"}):slots.length===0?/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-slots-empty",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.noSlotsTitle,message:nextOpening?fill(TELEVET_BOOKING_COPY_WEB.nextOpeningTemplate,{when:formatWhenWithDay(nextOpening.startsAt)}):void 0,actionLabel:nextOpening?TELEVET_BOOKING_COPY_WEB.seeOtherVetsCta:void 0,onAction:nextOpening?onSeeOtherVets:void 0})}):
|
|
254
|
+
/* @__PURE__ */jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:TELEVET_BOOKING_COPY_WEB.timeHeading,testID:"televet-slots",children:[failure2==="expired"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.holdExpired}):null,failure2==="taken"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.slotTaken}):null,failure2==="failed"||failure2==="rate_limited"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.confirmFailed,testID:"televet-slots-hold-failed"}):null,
|
|
255
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSlotPicker,{slots:slots,busySlotId:busySlotId,onPick:onPick,selectedSlot:selectedSlot,dayGroupLabel:TELEVET_BOOKING_COPY_WEB.dayLegend,timeGroupLabel:TELEVET_BOOKING_COPY_WEB.timeHeading,periodLabels:{morning:TELEVET_BOOKING_COPY_WEB.timeMorning,afternoon:TELEVET_BOOKING_COPY_WEB.timeAfternoon,evening:TELEVET_BOOKING_COPY_WEB.timeEvening},timeLegendTemplate:TELEVET_BOOKING_COPY_WEB.timeLegendTemplate})]}):/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-slots-unavailable",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle})})}function IssuesStep({headingRef:headingRef,petName:petName,chips:chips,selected:selected,onToggle:onToggle,onNext:onNext}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),[refused,setRefused]=react.useState(false),heading=fill(TELEVET_BOOKING_COPY_WEB.issuesTitleTemplate,{pet:petName??TELEVET_BOOKING_COPY_WEB.petFallback});/* @__PURE__ */
|
|
256
|
+
return jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:heading,lead:TELEVET_BOOKING_COPY_WEB.issuesHint,testID:"televet-booking-issues",footer:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",onPress:()=>{if(selected.length===0){setRefused(true);return}onNext()},testID:"televet-issues-next"}),children:[
|
|
257
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{role:"group","aria-label":TELEVET_BOOKING_COPY_WEB.issuesFormLabel,style:local.chipRow,children:chips.map(chip=>{let on=selected.includes(chip.id);/* @__PURE__ */
|
|
258
|
+
return jsxRuntime.jsx(IssueChip,{label:chip.label,on:on,onPress:()=>{setRefused(false),onToggle(chip.id)},testID:`televet-issue-${chip.id}`},chip.id)})}),refused&&selected.length===0?/* @__PURE__ */jsxRuntime.jsx("p",{role:"alert",style:local.alertLine,"data-testid":"televet-issues-refused",children:TELEVET_BOOKING_COPY_WEB.issuesPickOne}):null]})}function IssueChip({label:label,on:on,onPress:onPress,testID:testID}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),press=useTelevetPress();/* @__PURE__ */
|
|
259
|
+
return jsxRuntime.jsxs("button",{type:"button","aria-pressed":on,onClick:onPress,...press.handlers,style:{...local.chip,...on?local.chipOn:local.chipRest,...press.style},"data-testid":testID,children:[on?/* @__PURE__ */jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.4",strokeLinecap:"round",strokeLinejoin:"round",children:/* @__PURE__ */jsxRuntime.jsx("path",{d:"M20 6 9 17l-5-5"})}):null,label]})}function ReasonStep({headingRef:headingRef,value:value,composed:composed,vetName:vetName,onChange:onChange,onNext:onNext,media:media,onChangeMedia:onChangeMedia,onPickMedia:onPickMedia,mediaLive:mediaLive=false,checking:checking=false}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),ids=react.useId(),fieldId=`${ids}-reason-field`,helpId=`${ids}-reason-help`,tooLongId=`${ids}-reason-too-long`,[focused,setFocused]=react.useState(false),trimmed=(composed??value).trim(),tooLong=trimmed.length>REASON_TEXT_MAX,valid=trimmed.length>0&&!tooLong,heading=vetName?fill(TELEVET_BOOKING_COPY_WEB.describeHeadingTemplate,{vet:vetName}):TELEVET_BOOKING_COPY_WEB.describeHeading;/* @__PURE__ */
|
|
260
|
+
return jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:heading,lead:TELEVET_BOOKING_COPY_WEB.describeHelpLong,leadId:helpId,testID:"televet-booking-reason",scrollTestID:"televet-booking-reason-scroll",footer:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",disabled:!valid,loading:checking,describedBy:tooLong?tooLongId:void 0,onPress:onNext,testID:"televet-reason-next"}),children:[
|
|
261
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.field,children:[
|
|
262
|
+
/* @__PURE__ */jsxRuntime.jsx("label",{htmlFor:fieldId,style:local.fieldLabel,children:TELEVET_BOOKING_COPY_WEB.describeFieldLabel}),
|
|
263
|
+
/* @__PURE__ */jsxRuntime.jsx("textarea",{id:fieldId,value:value,onChange:event=>onChange(event.currentTarget.value),onFocus:()=>setFocused(true),onBlur:()=>setFocused(false),"aria-describedby":helpId,"aria-invalid":tooLong||void 0,placeholder:TELEVET_BOOKING_COPY_WEB.reasonPlaceholder,style:{...local.reasonInput,...focused?local.reasonInputFocus:null},"data-testid":"televet-reason-input"})]}),tooLong?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{id:tooLongId,message:TELEVET_BOOKING_COPY_WEB.reasonTooLong}):null,
|
|
264
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetIntakeMedia,{media:media,onChange:onChangeMedia,listLabel:TELEVET_BOOKING_COPY_WEB.addPhotoCta,meta:mediaLive?TELEVET_BOOKING_COPY_WEB.addPhotoMeta:null,...onPickMedia?{onPickMedia:onPickMedia}:{}})]})}function TelevetLoadFailed({error:error,title:title,actionLabel:actionLabel,onRetry:onRetry,testID:testID}){let wait=useRateLimitWait(error),test=testID===void 0?{}:{testID:testID};return wait.rateLimited?/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_RATE_LIMITED_COPY.title,message:TELEVET_RATE_LIMITED_COPY.body,...wait.waiting?{}:{actionLabel:actionLabel,onAction:onRetry},testID:testID===void 0?"televet-rate-limited":`${testID}-rate-limited`}):/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:title,actionLabel:actionLabel,onAction:onRetry,...test})}function TelevetVisitSimulator({headingRef:headingRef,petId:petId,roster:roster,onAddPet:onAddPet,onPickPet:onPickPet}){return petId===null?/* @__PURE__ */jsxRuntime.jsx(PetStep,{headingRef:headingRef,pets:roster.pets,isPending:roster.loading,isError:roster.error!==null,onRetry:()=>{roster.refresh()},onAddPet:onAddPet,selectedId:null,onSelect:onPickPet}):/* @__PURE__ */jsxRuntime.jsx(SimulatorScreen,{petRef:petId})}function SimulatorScreen({petRef:petRef}){let styles=useBookingStyles(),sim=useTelevetVisitSimulator(petRef);/* @__PURE__ */
|
|
265
|
+
return jsxRuntime.jsx("div",{style:{...styles.stepFill,...styles.scrollBody},"data-testid":"televet-simulator",children:/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.list,children:[
|
|
266
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_SIMULATOR_COPY.title}),
|
|
267
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_SIMULATOR_COPY.create,onPress:sim.create,kind:"secondary",disabled:sim.busy,testID:"televet-simulator-create"}),sim.visitLine!==null?/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[
|
|
268
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.stateMessage,"data-testid":"televet-simulator-visit",children:sim.visitLine}),TELEVET_SIMULATOR_MOVES.map(to=>/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_SIMULATOR_COPY.advance[to],onPress:()=>sim.advance(to),kind:"secondary",disabled:sim.busy,testID:`televet-simulator-advance-${to}`},to)),
|
|
269
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.stateMessage,children:TELEVET_SIMULATOR_COPY.eventsNote}),TELEVET_SIMULATOR_EVENTS.map(event=>/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_SIMULATOR_COPY.events[event],onPress:()=>sim.raise(event),kind:"secondary",disabled:sim.busy,testID:`televet-simulator-event-${event}`},event))]}):null,sim.line===null?null:sim.line.tone==="danger"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:sim.line.text,testID:"televet-simulator-error"}):/* @__PURE__ */jsxRuntime.jsx("p",{role:"status",style:styles.stateMessage,"data-testid":"televet-simulator-log",children:sim.line.text})]})})}function WhereStep({headingRef:headingRef,petName:petName,where:where,onNext:onNext}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),pet=petName??TELEVET_BOOKING_COPY_WEB.petFallback,selectId=`${react.useId()}-where-state`,other=where.otherSelected,picker=/* @__PURE__ */jsxRuntime.jsxs("div",{style:local.field,children:[
|
|
270
|
+
/* @__PURE__ */jsxRuntime.jsx("label",{htmlFor:selectId,style:local.fieldLabel,children:TELEVET_BOOKING_COPY_WEB.whereWhichState}),
|
|
271
|
+
/* @__PURE__ */jsxRuntime.jsxs("select",{id:selectId,value:where.otherPlace?.code??"",onChange:event=>{event.currentTarget.value&&where.pickState(event.currentTarget.value)},style:local.select,"data-testid":"televet-where-select",children:[
|
|
272
|
+
/* @__PURE__ */jsxRuntime.jsx("option",{value:"",disabled:true,children:TELEVET_BOOKING_COPY_WEB.whereWhichState}),TELEVET_US_STATES.filter(s=>s.code!==where.hostPlace?.code).map(s=>/* @__PURE__ */jsxRuntime.jsx("option",{value:s.code,children:s.name},s.code))]}),where.hostPlace===null&&where.otherPlace?.meta?/* @__PURE__ */jsxRuntime.jsx("p",{style:local.note,"data-testid":"televet-where-other-meta",children:where.otherPlace.meta}):null]});/* @__PURE__ */
|
|
273
|
+
return jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:fill(TELEVET_BOOKING_COPY_WEB.whereTitleTemplate,{pet:pet}),lead:fill(TELEVET_BOOKING_COPY_WEB.whereLeadTemplate,{pronoun:TELEVET_BOOKING_COPY_WEB.wherePronounFallback}),testID:"televet-booking-where",footer:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",disabled:!where.canContinue,onPress:onNext,testID:"televet-where-next"}),children:[where.hostPlace?/* @__PURE__ */jsxRuntime.jsxs(TelevetRadioGroup,{label:fill(TELEVET_BOOKING_COPY_WEB.whereFormLabelTemplate,{pet:pet}),style:{...local.options,...local.optionsStack},children:[
|
|
274
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:where.hostPlace.name,meta:where.hostPlace.meta,selected:!other,onPress:where.pickHost,testID:"televet-where-host"}),
|
|
275
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:TELEVET_BOOKING_COPY_WEB.whereAnotherState,meta:where.otherPlace?.meta??null,selected:other,onPress:where.pickOther,testID:"televet-where-other"})]}):null,other?picker:null,where.licensedLine?/* @__PURE__ */jsxRuntime.jsx("p",{style:local.callout,"data-testid":"televet-where-licensed",children:where.licensedLine}):null]})}function EmergencyStep({headingRef:headingRef,petName:petName,answer:answer,onAnswer:onAnswer,onNext:onNext,onHandled:onHandled,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet}){let theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),check=TELEVET_BOOKING_COPY_WEB.emergencyCheck,lede=TELEVET_BOOKING_COPY_WEB.emergency.lede,reduced=theme.motion.reducedMotion,panelRef=react.useRef(null);return react.useEffect(()=>{if(answer!=="some")return;let panel=panelRef.current;panel===null||typeof panel.scrollIntoView!="function"||panel.scrollIntoView({block:"nearest",inline:"nearest",behavior:reduced?"auto":"smooth"})},[answer,reduced]),/* @__PURE__ */jsxRuntime.jsxs(TelevetStepFrame,{headingRef:headingRef,heading:fill(check.titleTemplate,{pet:petName??TELEVET_BOOKING_COPY_WEB.petFallback}),lead:check.lead,testID:"televet-booking-emergency",footer:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.continueCta,kind:"primary",size:"lg",disabled:answer!=="none",onPress:onNext,testID:"televet-emergency-next"}),children:[
|
|
276
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{style:local.signs,"data-testid":"televet-emergency-signs",children:check.signs.map(sign=>/* @__PURE__ */jsxRuntime.jsx("li",{children:sign},sign))}),
|
|
277
|
+
/* @__PURE__ */jsxRuntime.jsxs(TelevetRadioGroup,{label:check.legend,style:local.options,children:[
|
|
278
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:check.noneCta,selected:answer==="none",onPress:()=>onAnswer("none"),testID:"televet-emergency-none"}),
|
|
279
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:check.someCta,selected:answer==="some",onPress:()=>onAnswer("some"),testID:"televet-emergency-some"})]}),answer==="some"?
|
|
280
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{ref:panelRef,role:"alert",style:{...local.emergencyBanner,scrollMarginTop:theme.space.md,scrollMarginBottom:theme.space.md},"data-testid":"televet-emergency-panel",children:[
|
|
281
|
+
/* @__PURE__ */jsxRuntime.jsx(SubHeading,{style:local.emergencyTitle,children:TELEVET_BOOKING_COPY_WEB.emergency.bannerTitle}),
|
|
282
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:local.emergencyLede,children:lede}),
|
|
283
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetEmergencyExits,{petName:petName,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,testIDPrefix:"televet-emergency"}),
|
|
284
|
+
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onHandled,style:local.linkButton,"data-testid":"televet-emergency-handled",children:TELEVET_BOOKING_COPY_WEB.emergency.keepBookingCta})]}):null]})}function EverfurTelevetBooking(props){let{petRef:petRef,usState:usState,controller:injected,onBooked:onBooked,onExit:onExit,onAddPet:onAddPet,onPickMedia:onPickMedia,onAddToCalendar:onAddToCalendar,onConfirmDiscard:onConfirmDiscard,onRequestLocation:onRequestLocation,locationStatus:locationStatus="unknown",onTriageReason:onTriageReason,onStateInterest:onStateInterest,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,canJoinInApp:canJoinInApp=false,renderUnavailable:renderUnavailable,headingLevel:hostLevel,style:style,testID:testID}=guardHostProps(props,["onBooked","onExit","onAddPet","onRequestLocation","onFindEmergencyVet"]),rootLevel=headingLevel(hostLevel??DEFAULT_ROOT_HEADING_LEVEL),nestedLevel=nextHeadingLevel(rootLevel),styles=useBookingStyles(),theme=useEverfurTheme(),local=react.useMemo(()=>makeLocalStyles(theme),[theme]),controller=useTelevetBookingController(injected),roster=useEverfurPets(),pets=roster.pets,ownedPetCount=pets.length,ctx=react.useMemo(()=>({ownedPetCount:ownedPetCount,withIssues:true}),[ownedPetCount]),[state,rawDispatch]=react.useReducer((s,a)=>televetBookingReducer(s,a,ctx),void 0,()=>initialTelevetBookingState({ownedPetCount:0,withIssues:true},{petId:petRef??null,state:usState??null})),dispatch=react.useCallback(action=>rawDispatch(action),[]),[reasonText,setReasonText]=react.useState(""),[failure2,setFailure]=react.useState(null),[emergency,setEmergency]=react.useState(null),[stateAttested,setStateAttested]=react.useState(false),[termsAttested,setTermsAttested]=react.useState(false),[media,setMedia]=react.useState([]),mediaTransport=react.useMemo(()=>createWebTelevetMediaTransport(),[]),sendMedia=useTelevetBookingMedia({media:media,controller:controller,transport:mediaTransport}),[bookedConsult,setBookedConsult]=react.useState(null),[refusedSlot,setRefusedSlot]=react.useState(null),{draft:draft}=state,step=currentStep(state),attestedFor=react.useRef(draft.state);attestedFor.current!==draft.state&&(attestedFor.current=draft.state,stateAttested&&setStateAttested(false),termsAttested&&setTermsAttested(false));let policy=useTelevetStatePolicy(draft.state,controller),cancellation=useTelevetCancellationPolicy(controller),entitlement=useTelevetBookingEntitlement(controller),rosterController=useTelevetRosterController(controller,entitlement),clinicians=useTelevetClinicians(draft.state,rosterController),slots=useTelevetSlots(draft.clinicianId,rosterController),refetchSlots=slots.refetch,nextOpening=useTelevetNextSlot(rosterController).data??null,hold=useTelevetHoldSlot(controller),book=useTelevetBookConsult(controller),controllerTriage=react.useMemo(()=>televetTriageReadFrom(controller),[controller]),triage=useEarlyTriage(onTriageReason??controllerTriage),interest=useStateInterest(draft.state,onStateInterest??null),hostState=usState??null,noLicensedVetInterest=interest.actionFor("no_licensed_vet"),petName=nameOf(pets,draft.petId),intake=useTelevetBookingIntake({reasonText:reasonText,state:draft.state,hostState:hostState,clinicianId:draft.clinicianId,clinicians:clinicians.data,policy:policy,petName:petName,controller:controller,dispatch:dispatch}),{composedReason:composedReason,where:where,matchedClinician:matchedClinician}=intake;react.useEffect(()=>{hostState&&!draft.state&&!intake.whereTouched.current&&dispatch({type:"patch",patch:{state:hostState}})},[hostState,draft.state,dispatch]),react.useEffect(()=>{petRef&&!draft.petId&&dispatch({type:"patch",patch:{petId:petRef}})},[petRef,draft.petId,dispatch]);let lonePetRef=pets.length===1?pets[0]?.petRef??null:null;react.useEffect(()=>{lonePetRef&&!draft.petId&&dispatch({type:"patch",patch:{petId:lonePetRef}})},[lonePetRef,draft.petId,dispatch]);let stepRef=react.useRef(step);stepRef.current=step;let petIdRef=react.useRef(draft.petId);petIdRef.current=draft.petId;let settledCount=react.useRef(0);react.useEffect(()=>{if(ownedPetCount===settledCount.current)return;settledCount.current=ownedPetCount;let needsPet=ownedPetCount>1&&!petIdRef.current;dispatch({type:"goTo",step:needsPet?"pet":stepRef.current})},[ownedPetCount,dispatch]);let matchedClinicianId=clinicians.data?.[0]?.clinicianId??null;react.useEffect(()=>{matchedClinicianId&&!draft.clinicianId&&dispatch({type:"patch",patch:{clinicianId:matchedClinicianId}})},[matchedClinicianId,draft.clinicianId,dispatch]);let headingRef=react.useRef(null),mounted=react.useRef(false);react.useEffect(()=>{if(!mounted.current){mounted.current=true;return}headingRef.current?.focus()},[step]);let holdAndAdvance=useSlotHold({draft:draft,hold:hold,dispatch:dispatch,setFailure:setFailure,refetchSlots:refetchSlots});useHoldRelease({controller:controller,draft:draft,keep:step==="booked"||book.isPending});let{submitBooking:submitBooking,confirm:confirm}=useBookingSubmit({draft:draft,reasonText:composedReason,book:book,stateAttested:stateAttested,termsAttested:termsAttested,cancellationPolicy:cancellation.data??null,triage:triage,goTo:react.useCallback(next=>dispatch({type:"goTo",step:next}),[dispatch]),releaseSlot:react.useCallback(()=>{setRefusedSlot(draft.slot),dispatch({type:"patch",patch:RELEASED_HOLD}),refetchSlots()},[draft.slot,dispatch,refetchSlots]),setFailure:setFailure,setEmergency:setEmergency,setBookedConsult:setBookedConsult,...onBooked?{onBooked:onBooked}:{},media:sendMedia}),policyBlocked=policy.enabled&&policy.data!==null&&!policy.data.wellnessAvailable&&step!=="pet"&&step!=="where",notEntitled=entitlement.enabled&&entitlement.data?.active===false||failure2==="not_entitled",{simulate:simulate,fundingRefused:fundingRefused}=useTelevetSimulatorRoute(entitlement,notEntitled),surfaceServed=entitlement.enabled&&entitlement.data!==null,emptyRosterCause=televetEmptyRosterCause(surfaceServed),isDirty=composedReason.trim().length>0||!!draft.slot,gateState={surfaceUnavailable:controller===null||failure2==="unavailable"||televetReadIsDark(entitlement)||televetReadIsDark(policy),notEntitled:fundingRefused,policyBlocked:policyBlocked,triageOpen:triage.open,step:step},gated=televetBookingGateApplies(gateState),clinicianState={noState:!draft.state,isPending:clinicians.enabled&&clinicians.isPending,isError:clinicians.isError,isEmpty:(clinicians.data?.length??0)===0,notEntitled:fundingRefused},clinicianOutcome=televetClinicianOutcomeApplies(clinicianState);if(!isTelevetBookingCopyReady())/* @__PURE__ */
|
|
285
|
+
return jsxRuntime.jsx("div",{style:{...styles.screen,...style},"data-testid":testID??"televet-booking",children:/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.stepFill,"data-testid":"televet-booking-copy-unapproved",children:renderUnavailable?renderUnavailable():null})});let canGoBack=!simulate&&(triage.open||hasPreviousStep(state,ctx))&&step!=="booked",goBack=()=>{if(triage.open){triage.close();return}triage.cancel(),dispatch({type:"back"})};
|
|
286
|
+
/* @__PURE__ */
|
|
287
|
+
return jsxRuntime.jsx(NestedHeadingLevelContext.Provider,{value:nestedLevel,children:/* @__PURE__ */jsxRuntime.jsx(TelevetStepNavContext.Provider,{value:{canGoBack:canGoBack,onBack:goBack},children:/* @__PURE__ */jsxRuntime.jsxs("div",{style:{...styles.screen,...style},"data-testid":testID??"televet-booking",children:[
|
|
288
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetBookingChrome,{step:step,furthestIndex:state.furthestIndex,triageOpen:triage.open,stepContext:ctx,canGoBack:canGoBack,showBack:gated||step==="clinician"&&clinicianOutcome,isDirty:isDirty,onBack:goBack,onClose:()=>onExit?.(),headingLevel:rootLevel,...onConfirmDiscard?{onConfirmDiscard:onConfirmDiscard}:{}}),simulate?/* @__PURE__ */jsxRuntime.jsx(TelevetVisitSimulator,{headingRef:headingRef,petId:draft.petId,roster:roster,onAddPet:onAddPet,onPickPet:petId=>dispatch({type:"patch",patch:{petId:petId}})}):gated?/* @__PURE__ */jsxRuntime.jsx(TelevetBookingGate,{state:gateState,petName:nameOf(pets,draft.petId),...primaryVet?{primaryVet:primaryVet}:{},onFindEmergencyVet:onFindEmergencyVet,stateInterest:noLicensedVetInterest,...onStateInterest?{onCheckAvailability:()=>dispatch({type:"goTo",step:"clinician"})}:{},onAcknowledgeEmergency:()=>{triage.acknowledge(composedReason),dispatch({type:"next"})},...renderUnavailable?{renderUnavailable:renderUnavailable}:{}}):step==="time"?/* @__PURE__ */jsxRuntime.jsx(SlotStep,{headingRef:headingRef,slots:slots.data??[],enabled:slots.enabled,isPending:slots.enabled&&slots.isPending&&slots.data===null,isError:slots.isError,error:slots.error,busySlotId:hold.isPending?hold.variables:null,failure:failure2,selectedSlot:draft.slot??refusedSlot,nextOpening:nextOpening,onPick:holdAndAdvance,onRetry:()=>slots.refetch(),onSeeOtherVets:()=>dispatch({type:"goTo",step:"clinician"})}):step==="review"?/* @__PURE__ */jsxRuntime.jsx(ReviewStep,{headingRef:headingRef,when:draft.slot?formatVisitDayTime(draft.slot.startsAt):"",onChangeWhen:()=>dispatch({type:"goTo",step:"time"}),stateName:where.stateName,about:intake.aboutLine,lengthMinutes:(draft.slot?televetSlotMinutes(draft.slot):null)??CONSULT_MINUTES,petName:nameOf(pets,draft.petId),reason:composedReason.trim(),clinician:clinicians.data?.find(c=>c.clinicianId===draft.clinicianId)?.displayName??null,shareRecords:draft.shareHealthRecords,stateCode:draft.state,stateAttested:stateAttested,onToggleStateAttest:setStateAttested,cancellationTerms:cancellation.data?.summary??null,termsAttested:termsAttested,onToggleTermsAttest:setTermsAttested,onToggleShare:next=>dispatch({type:"patch",patch:{shareHealthRecords:next}}),canConfirm:canConfirm(draft,composedReason),busy:book.isPending||sendMedia.sending,failure:failure2,onConfirm:confirm,emergency:emergency,onAcknowledgeEmergency:()=>submitBooking(true),mediaShortfall:sendMedia.shortfall,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,onSeeOtherVets:()=>dispatch({type:"goTo",step:"clinician"})}):step==="booked"?/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.stepFill,"data-testid":"televet-booking-booked",children:bookedConsult?/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[
|
|
289
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetBookedScreen,{consult:bookedConsult,petName:nameOf(pets,bookedConsult.petId)??nameOf(pets,draft.petId),onDone:()=>onExit?.(),canJoinInApp:canJoinInApp,lengthMinutes:(draft.slot?televetSlotMinutes(draft.slot):null)??CONSULT_MINUTES,sharedRecords:draft.shareHealthRecords,sentPhoto:sendMedia.sentOnePhoto(bookedConsult),...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{}}),
|
|
290
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetMediaDropNotice,{shortfall:sendMedia.bookedShortfall(bookedConsult),testIDPrefix:"televet-booked"})]}):null}):step==="clinician"&&clinicianOutcome?
|
|
291
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetClinicianOutcome,{state:clinicianState,cause:emptyRosterCause,locationStatus:locationStatus,...onRequestLocation?{onRequestLocation:onRequestLocation}:{},onRetry:()=>clinicians.refetch(),stateInterest:noLicensedVetInterest,...renderUnavailable?{renderUnavailable:renderUnavailable}:{}}):step==="clinician"?/* @__PURE__ */jsxRuntime.jsx(ClinicianStep,{headingRef:headingRef,clinicians:clinicians.data??[],isPending:clinicians.enabled&&clinicians.isPending,isError:clinicians.isError,error:clinicians.error,selectedId:draft.clinicianId,stateCode:draft.state,stateName:where.stateName,onRetry:()=>clinicians.refetch(),onSelect:clinicianId=>{dispatch({type:"patch",patch:{clinicianId:clinicianId}}),dispatch({type:"next"})}}):step==="issues"?/* @__PURE__ */jsxRuntime.jsx(IssuesStep,{headingRef:headingRef,petName:nameOf(pets,draft.petId),chips:intake.issueChips,selected:intake.concernIds,onToggle:intake.toggleConcern,onNext:()=>dispatch({type:"next"})}):step==="reason"?/* @__PURE__ */jsxRuntime.jsx(ReasonStep,{headingRef:headingRef,value:reasonText,composed:composedReason,vetName:matchedClinician?.displayName??null,onChange:setReasonText,media:media,onChangeMedia:setMedia,mediaLive:sendMedia.live,...onPickMedia?{onPickMedia:onPickMedia}:{},checking:triage.checking,onNext:()=>{triage.check(composedReason).then(goOn=>{goOn&&dispatch({type:"next"})})}}):step==="pet"?
|
|
292
|
+
/* @__PURE__ */jsxRuntime.jsx(PetStep,{headingRef:headingRef,pets:pets,isPending:roster.loading,isError:roster.error!==null,error:roster.error,onRetry:()=>{roster.refresh()},onAddPet:onAddPet,selectedId:draft.petId,onSelect:petId=>dispatch({type:"patch",patch:{petId:petId}}),onNext:()=>dispatch({type:"next"})}):step==="where"?/* @__PURE__ */jsxRuntime.jsx(WhereStep,{headingRef:headingRef,petName:petName,where:where,onNext:()=>dispatch({type:"next"})}):step==="emergency"?/* @__PURE__ */jsxRuntime.jsx(EmergencyStep,{headingRef:headingRef,petName:petName,answer:intake.emergencyAnswer,onAnswer:intake.setEmergencyAnswer,onNext:()=>dispatch({type:"next"}),onHandled:()=>{triage.acknowledge(composedReason),dispatch({type:"next"})},...primaryVet?{primaryVet:primaryVet}:{},onFindEmergencyVet:onFindEmergencyVet}):
|
|
293
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:local.marker,"data-testid":`televet-booking-step-${step}`})]})})})}var SLOT=/* @__PURE__ */Symbol.for("@everfur/sdk/televet");function televetGlobal(){let realm=globalThis,existing=realm[SLOT];if(existing!==void 0)return existing;let created={presenter:null,snapshot:/* @__PURE__ */Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:/* @__PURE__ */new Set,dailyRegistered:false};return realm[SLOT]=created,created}function isEverfurDailyRegistered(){return televetGlobal().dailyRegistered}function noticeReceipts(){let g=televetGlobal(),existing=g.noticeReceipts;if(existing!==void 0)return existing;let created=/* @__PURE__ */new Map;return g.noticeReceipts=created,created}function markRecordingNoticeAccepted(roomUrl){let receipts=noticeReceipts(),held=receipts.get(roomUrl);held!==void 0?held.holders+=1:receipts.set(roomUrl,{holders:1,joined:false})}function clearRecordingNoticeAccepted(roomUrl){let receipts=noticeReceipts(),held=receipts.get(roomUrl);held!==void 0&&(held.holders-=1,held.holders<=0&&receipts.delete(roomUrl))}function isTelevetCallJoined(roomUrl){return noticeReceipts().get(roomUrl)?.joined===true}var VET_CALL_COPY=/* @__PURE__ */Object.freeze({muteCta:"Mute",unmuteCta:"Unmute",cameraOffCta:"Camera off",cameraOnCta:"Camera on",leaveCta:"Leave",switchCameraCta:"Switch camera",speakerOffCta:"Speaker off",speakerOnCta:"Speaker on",lobbyTitleNoName:"Your vet is joining",lobbySubtitle:"Usually under a minute",lobbyPrepLabel:"WHILE YOU WAIT",lobbyPrepNoPet:"Have your pet nearby and somewhere well lit.",lobbyTitle:clinicianName=>{let name=clinicianName?.trim()??"";return name.length>0?`${name} is joining`:VET_CALL_COPY.lobbyTitleNoName},lobbyPrep:petName=>{let pet=petName?.trim()??"";return pet.length>0?`Have ${pet} nearby and somewhere well lit.`:VET_CALL_COPY.lobbyPrepNoPet},lobbyDuration:minutes=>`${minutes} minutes`,waitingRoomLabel:"Waiting room",leaveWaitingRoomLabel:"Leave the waiting room",lobbyTipsTitle:clinicianName=>{let name=clinicianName?.trim()??"";return name.length>0?`Before ${name} joins`:VET_CALL_COPY.lobbyPrepLabel},lobbyTipSpot:"Find a bright, quiet spot.",joinFailedReason:"That did not open. Try again.",recordingNoticeTitle:"This consultation is recorded.",recordingNoticeCta:"Continue to the call",recordingNoticeDecline:"Not now",selfCameraOffLabel:"Your camera is off"});function televetJoinRefusalWebCopy(reason){switch(reason){case"too_early":return"This visit has not opened yet.";case"too_late":return"This visit has ended.";case"room_not_ready":return"We are still setting up the video room. Try again in a moment.";case"status_cancelled_owner":return"You cancelled this visit.";case"status_cancelled_ops":return"This visit was cancelled. Please book another time.";case"status_no_show_owner":return"This visit was missed.";case"status_no_show_vet":return"The vet could not make this visit. Please book another time.";case"status_awaiting_summary":return"This visit has ended. Your summary is on its way.";case"status_completed":return"This visit has ended.";default:return TELEVET_JOIN_UNAVAILABLE_WEB}}var TELEVET_JOIN_UNAVAILABLE_WEB="This visit cannot be joined right now.";function televetJoinIsRetryable(refusal){return refusal==="room_not_ready"||refusal==="unknown"}function memoizeTelevetLoader(load){let pending=null;return()=>{if(pending!==null)return pending;let started=load();return pending=started,started.then(void 0,()=>{pending===started&&(pending=null)}),started}}var JOINING=/* @__PURE__ */Object.freeze({status:"joining"});function useTelevetJoin(consultId,controller){let[attempt,setAttempt]=react.useState(0),[state,setState]=react.useState(JOINING),inflight=react.useRef(null);react.useEffect(()=>{let join=controller?.joinConsult;if(controller===null||join===void 0){setState(/* @__PURE__ */Object.freeze({status:"refused",refusal:"unavailable",reason:null}));return}let key=`${consultId}#${String(attempt)}`,entry=inflight.current;if(entry===null||entry.key!==key){let promise;try{promise=join.call(controller,consultId)}catch(cause){promise=Promise.reject(cause)}entry={key:key,promise:promise},inflight.current=entry}let live=true;return setState(JOINING),entry.promise.then(res=>{live&&(res.ok?setState(/* @__PURE__ */Object.freeze({status:"ready",credential:res.value})):setState(/* @__PURE__ */Object.freeze({status:"refused",refusal:vetCallJoinRefusal(res.error),reason:vetCallJoinReason(res.error)})))},()=>{live&&setState(/* @__PURE__ */Object.freeze({status:"refused",refusal:"unknown",reason:null}))}),()=>{live=false}},[consultId,controller,attempt]);let retry=react.useCallback(()=>setAttempt(n=>n+1),[]);return{state:state,retry:retry}}var loadCall=memoizeTelevetLoader(()=>import("@everfur/sdk/web/televet/call")),JOIN_HOLD_MS=FUNNEL_UNARY_TIMEOUT_MS;function TelevetJoinScreen({consultId:consultId,controller:controller,onLeave:onLeave,style:style}){let styles=useBookingStyles(),[acceptedFor,setAcceptedFor]=react.useState(null),accepted=acceptedFor===consultId,[canHostCall]=react.useState(isEverfurDailyRegistered);react.useEffect(()=>{if(canHostCall)return;let live=true;return loadCall().then(loaded=>{live&&warnSetupOnce(loaded.EVERFUR_DAILY_SETUP)},()=>{}),()=>{live=false}},[canHostCall]),useTelevetBackChannel(()=>(onLeave(),true),!accepted);let leaveRoom=react.useCallback(()=>{setAcceptedFor(null),onLeave()},[onLeave]);return canHostCall?accepted?/* @__PURE__ */jsxRuntime.jsx(TelevetJoinRoom,{consultId:consultId,controller:controller,onLeave:leaveRoom,style:style},consultId):/* @__PURE__ */jsxRuntime.jsx(TelevetRecordingNotice,{onContinue:()=>setAcceptedFor(consultId),onDecline:onLeave,style:style}):/* @__PURE__ */jsxRuntime.jsxs("div",{style:{...styles.stepFill,...style},"data-testid":"televet-join-call-unavailable",children:[
|
|
294
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_JOIN_UNAVAILABLE_WEB}),
|
|
295
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_CALL_COPY.leaveCta,kind:"secondary",onPress:onLeave,testID:"televet-join-unavailable-leave"})]})}function TelevetRecordingNotice({onContinue:onContinue,onDecline:onDecline,busy:busy=false,declineHeld:declineHeld=false,style:style}){let styles=useBookingStyles(),titleId=`${react.useId()}-recording-notice`,noticeRef=react.useRef(null);return react.useEffect(()=>{let notice=noticeRef.current;if(!notice)return;let active=notice.ownerDocument.activeElement;active!==null&&active!==notice.ownerDocument.body||notice.focus()},[]),/* @__PURE__ */jsxRuntime.jsx("div",{style:{...styles.stepFill,...style},children:/* @__PURE__ */jsxRuntime.jsxs("div",{ref:noticeRef,role:"alertdialog","aria-labelledby":titleId,"aria-busy":busy||void 0,tabIndex:-1,"data-testid":"everfur-vet-call-recording-notice",style:styles.stateCard,children:[
|
|
296
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{id:titleId,style:styles.stateTitle,children:VET_CALL_COPY.recordingNoticeTitle}),
|
|
297
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_CALL_COPY.recordingNoticeCta,kind:"primary",loading:busy,onPress:()=>onContinue?.(),testID:"everfur-vet-call-recording-continue"}),
|
|
298
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_CALL_COPY.recordingNoticeDecline,kind:"secondary",disabled:declineHeld,onPress:()=>onDecline?.(),testID:"everfur-vet-call-recording-decline"})]})})}function TelevetJoinRoom({consultId:consultId,controller:injected,onLeave:onLeave,style:style}){let styles=useBookingStyles(),controller=useTelevetBookingController(injected),{state:state,retry:retry}=useTelevetJoin(consultId,controller),credential=state.status==="ready"?state.credential:null,[call,setCall]=react.useState(null),[callFailed,setCallFailed]=react.useState(false),ready=credential!==null;react.useEffect(()=>{if(!ready||call!==null)return;let live=true;return loadCall().then(loaded=>{live&&setCall(()=>loaded)},()=>{live&&setCallFailed(true)}),()=>{live=false}},[ready,call]);let[receiptFor,setReceiptFor]=react.useState(null);react.useEffect(()=>{if(credential===null)return;let room=credential.roomUrl;return markRecordingNoticeAccepted(room),setReceiptFor(credential),()=>{clearRecordingNoticeAccepted(room)}},[credential]);let joining=state.status==="joining",[holdSpent,setHoldSpent]=react.useState(false);react.useEffect(()=>{if(!joining){setHoldSpent(false);return}let timer=setTimeout(()=>setHoldSpent(true),JOIN_HOLD_MS);return()=>{clearTimeout(timer)}},[joining]);let held=joining&&!holdSpent;if(useTelevetBackChannel(()=>(held||credential!==null&&call!==null&&!callFailed&&isTelevetCallJoined(credential.roomUrl)||onLeave(),true)),state.status==="refused"||callFailed){let refusal=state.status==="refused"?state.refusal:"unavailable",message=state.status==="refused"?televetJoinRefusalWebCopy(state.reason):TELEVET_JOIN_UNAVAILABLE_WEB;/* @__PURE__ */
|
|
299
|
+
return jsxRuntime.jsxs("div",{style:{...styles.stepFill,...style},"data-testid":"televet-join-refused",children:[
|
|
300
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:message,testID:"televet-join-refused-message"}),televetJoinIsRetryable(refusal)&&state.status==="refused"?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_BOOKING_COPY_WEB.retryCta,kind:"primary",onPress:retry,testID:"televet-join-retry"}):null,
|
|
301
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_CALL_COPY.leaveCta,kind:"secondary",onPress:onLeave,testID:"televet-join-leave"})]})}if(credential===null||call===null||receiptFor!==credential)/* @__PURE__ */
|
|
302
|
+
return jsxRuntime.jsx(TelevetRecordingNotice,{busy:true,declineHeld:held,onDecline:onLeave,style:style});let{EverfurVetCall:EverfurVetCall}=call;/* @__PURE__ */
|
|
303
|
+
return jsxRuntime.jsx(EverfurVetCall,{roomUrl:credential.roomUrl,token:credential.token,onLeave:onLeave,renderUnavailable:()=>/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.stepFill,"data-testid":"televet-join-call-unavailable",children:[
|
|
304
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_JOIN_UNAVAILABLE_WEB}),
|
|
305
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_CALL_COPY.leaveCta,kind:"secondary",onPress:onLeave,testID:"televet-join-unavailable-leave"})]}),...style?{style:style}:{}})}var warnedSetup=false;function warnSetupOnce(message){if(warnedSetup)return;warnedSetup=true;let globalConsole=globalThis.console;try{globalConsole?.warn?.(message)}catch{}}var TELEVET_CLOCK_TICK_MS=2e4;function useNowMs(enabled=true,tickMs=TELEVET_CLOCK_TICK_MS){let[now,setNow]=react.useState(()=>Date.now());return react.useEffect(()=>{if(!enabled)return;setNow(Date.now());let id=setInterval(()=>setNow(Date.now()),tickMs);return()=>clearInterval(id)},[enabled,tickMs]),now}function answeredBehindSwitch(error){return error.httpStatus!==void 0&&!isVetMessagesDark(error)}function useVetThreads(controller,revision=0){let read=controller?.listVetThreads,enabled=read!==void 0,[state,setState]=react.useState(()=>({availability:enabled?"pending":"dark",threads:[],isPending:enabled,error:null})),[nonce,setNonce]=react.useState(0);react.useEffect(()=>{if(!controller||!read){setState({availability:"dark",threads:[],isPending:false,error:null});return}let abort=new AbortController,live=true;return setState(prev=>({...prev,isPending:true})),read.call(controller,abort.signal).then(settled=>{live&&(settled.ok?setState({availability:"lit",threads:settled.value,isPending:false,error:null}):isVetMessagesDark(settled.error)?setState({availability:"dark",threads:[],isPending:false,error:null}):setState(prev=>({availability:answeredBehindSwitch(settled.error)?"lit":prev.availability,threads:prev.threads,isPending:false,error:settled.error})))},()=>{live&&setState(prev=>({...prev,isPending:false}))}),()=>{live=false,abort.abort()}},[controller,read,revision,nonce]);let refetch=react.useCallback(()=>setNonce(n=>n+1),[]);return react.useMemo(()=>({...state,refetch:refetch}),[state,refetch])}function useVetThread(controller,petRef,options={}){let now=options.now??Date.now,list=controller?.listVetMessages,[messages,setMessages]=react.useState([]),[status,setStatus]=react.useState("loading"),[hasOlder,setHasOlder]=react.useState(false),[loadingOlder,setLoadingOlder]=react.useState(false),[vetFirst,setVetFirst]=react.useState(options.ownerCanStart===false),[sending,setSending]=react.useState(false),[sendFailure,setSendFailure]=react.useState(null),[sentCount,setSentCount]=react.useState(0),[nonce,setNonce]=react.useState(0),live=react.useRef(true),busy=react.useRef(false),olderBusy=react.useRef(false),nowRef=react.useRef(now);nowRef.current=now,react.useEffect(()=>(live.current=true,()=>{live.current=false}),[]),react.useEffect(()=>{options.ownerCanStart===false&&setVetFirst(true)},[options.ownerCanStart]),react.useEffect(()=>{if(setMessages([]),setHasOlder(false),!controller||!list){setStatus("ready");return}setStatus("loading");let abort=new AbortController,current=true;return list.call(controller,petRef,{},abort.signal).then(settled=>{if(current){if(!settled.ok){setStatus("error");return}setMessages([...settled.value].reverse()),setHasOlder(settled.value.length>=VET_MESSAGE_PAGE_DEFAULT),setStatus("ready")}},()=>{current&&setStatus("error")}),()=>{current=false,abort.abort()}},[controller,list,petRef,nonce]);let receiptSent=react.useRef(null);react.useEffect(()=>{let mark=controller?.markVetThreadRead;status!=="ready"||!controller||!mark||receiptSent.current===petRef||(receiptSent.current=petRef,mark.call(controller,petRef,new Date(nowRef.current()).toISOString()).catch(()=>{}))},[status,controller,petRef]);let loadOlder=react.useCallback(()=>{let oldest=messages[0];if(!controller||!list||!hasOlder||oldest===void 0||olderBusy.current)return;olderBusy.current=true,setLoadingOlder(true);let abort=new AbortController;list.call(controller,petRef,{before:oldest.createdAt},abort.signal).then(settled=>{if(olderBusy.current=false,!live.current||(setLoadingOlder(false),!settled.ok))return;let seen=new Set(messages.map(m=>m.messageId)),older=[...settled.value].reverse().filter(m=>!seen.has(m.messageId));setMessages(currentMessages=>[...older,...currentMessages]),setHasOlder(settled.value.length>=VET_MESSAGE_PAGE_DEFAULT)},()=>{olderBusy.current=false,live.current&&setLoadingOlder(false)})},[controller,list,petRef,hasOlder,messages]),send=react.useCallback(async content=>{let write=controller?.sendVetMessage;if(!controller||!write||busy.current||content.trim().length===0)return false;busy.current=true,setSending(true),setSendFailure(null);let landed=false;try{let settled=await write.call(controller,petRef,content);if(!live.current)return settled.ok;settled.ok?(landed=!0,setMessages(currentMessages=>[...currentMessages,settled.value]),setSentCount(n=>n+1)):isVetThreadVetFirst(settled.error)?(setVetFirst(!0),setSendFailure("vetWritesFirst")):setSendFailure("notSent")}catch{live.current&&setSendFailure("notSent")}finally{busy.current=false,live.current&&setSending(false)}return landed},[controller,petRef]),retry=react.useCallback(()=>setNonce(n=>n+1),[]),canWrite=controller?.sendVetMessage!==void 0&&!vetFirst;return react.useMemo(()=>({status:status,messages:messages,hasOlder:hasOlder,loadingOlder:loadingOlder,loadOlder:loadOlder,canWrite:canWrite,sending:sending,sendFailure:sendFailure,sentCount:sentCount,send:send,retry:retry}),[status,messages,hasOlder,loadingOlder,loadOlder,canWrite,sending,sendFailure,sentCount,send,retry])}function useVisitSummary(controller,consultId){let read=controller?.visitSummary,[state,setState]=react.useState(()=>({status:read?"loading":"absent",summary:null})),[nonce,setNonce]=react.useState(0);react.useEffect(()=>{if(!controller||!read){setState({status:"absent",summary:null});return}setState({status:"loading",summary:null});let abort=new AbortController,current=true;return read.call(controller,consultId,abort.signal).then(settled=>{current&&(settled.ok?setState({status:"ready",summary:settled.value}):setState({status:isVetMessagesDark(settled.error)?"pending":"error",summary:null}))},()=>{current&&setState({status:"error",summary:null})}),()=>{current=false,abort.abort()}},[controller,read,consultId,nonce]);let retry=react.useCallback(()=>setNonce(n=>n+1),[]);return react.useMemo(()=>({...state,retry:retry}),[state,retry])}function vetThreadPetRef(pets,petId){return petId?pets.find(p=>p.petRef===petId||p.petId===petId)?.petRef??null:null}var VET_NAME_FALLBACK="your vet",PET_NAME_FALLBACK="your pet",VET_MESSAGES_COPY=/* @__PURE__ */Object.freeze({messagesTitle:"Messages",newPillNative:"New",newPillWeb:"New reply",previewOwnerTemplate:"You: {text}",previewVetTemplateWeb:"{vet}: {text}",threadMetaTemplateNative:"With {vet}",threadLogTemplate:"Messages with {vet}",composerLabelTemplateNative:"Message {vet}",composerLabelWeb:"Message",composerPlaceholderTemplate:"Message {vet}…",send:"Send",composerNoteTemplate:"{vet} usually replies within a day. Emergency? Call a vet.",sent:"Sent",bookVisitWeb:"Book a visit",empty:"No messages yet",loading:"Loading",loadFailed:"Could not load",retry:"Try again",notSent:"Not sent",vetWritesFirst:"Your vet will write first. You can reply once they do.",attachmentsTemplate:"{n} attached",runningLateTemplate:"Running late? Message {vet}",sawTitleTemplate:"What {vet} saw",summaryLabel:"Summary",fromVetTemplate:"From {vet}",planTitleTemplate:"{pet}’s plan",wordForWord:"Word for word",fromThisVisitTitle:"From this visit",messageVetTemplate:"Message {vet}",bookFollowUp:"Book a follow-up",summaryFootnoteTemplate:"A summary of your video visit, written by {vet}. In an emergency, go to the nearest emergency animal hospital.",summaryPending:"Summary on its way"});function fillVetCopy(template,slots){let out=template;for(let[key,value]of Object.entries(slots))out=out.split(`{${key}}`).join(value);return out}function sentenceCase(line){return line.length===0?line:line.charAt(0).toUpperCase()+line.slice(1)}function vetNameOr(name){let trimmed=name?.trim()??"";return trimmed.length>0?trimmed:VET_NAME_FALLBACK}function petNameOr(name){let trimmed=name?.trim()??"";return trimmed.length>0?trimmed:PET_NAME_FALLBACK}function formatThreadDay(iso){let date2=new Date(iso);return Number.isNaN(date2.getTime())?"":date2.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function TelevetCancelVisitForm({terms:terms,submitting:submitting,failure:failure2,onConfirm:onConfirm,onDismiss:onDismiss,onRetryTerms:onRetryTerms,styles:styles,petName:petName,when:when,vet:vet,about:about,onMoveInstead:onMoveInstead}){let[reason,setReason]=react.useState(""),ready=terms.status==="ready",pet=petName?.trim()??"",answers=[...pet.length>0?[{id:"better",label:fill(TELEVET_VISITS_COPY_WEB.cancelWhyBetterTemplate,{pet:pet})}]:[],{id:"time",label:TELEVET_VISITS_COPY_WEB.cancelWhyTime},{id:"regular-vet",label:TELEVET_VISITS_COPY_WEB.cancelWhyRegularVet},{id:"other",label:TELEVET_VISITS_COPY_WEB.cancelWhyOther}],confirm=()=>{submitting||!ready||onConfirm(reason.trim()||TELEVET_VISITS_COPY_WEB.cancelReason)},rows2=[{label:TELEVET_VISITS_COPY_WEB.summaryWhen,value:when},{label:TELEVET_VISITS_COPY_WEB.summaryVet,value:vet},{label:TELEVET_VISITS_COPY_WEB.summaryAbout,value:about}].filter(row2=>typeof row2.value=="string"&&row2.value.trim().length>0);/* @__PURE__ */
|
|
306
|
+
return jsxRuntime.jsxs("form",{onSubmit:event=>{event.preventDefault(),confirm()},"aria-label":TELEVET_VISITS_COPY_WEB.cancelConfirmCta,noValidate:true,style:styles.form,"data-testid":"televet-visit-cancel-form",children:[
|
|
307
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.formTitle,children:pet.length>0?fill(TELEVET_VISITS_COPY_WEB.cancelConfirmTitleTemplate,{pet:pet}):TELEVET_VISITS_COPY_WEB.cancelConfirmTitle}),rows2.length>0?/* @__PURE__ */jsxRuntime.jsx("dl",{style:styles.kv,"data-testid":"televet-visit-cancel-summary",children:rows2.map(row2=>/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.kvRow,children:[
|
|
308
|
+
/* @__PURE__ */jsxRuntime.jsx("dt",{style:styles.kvLabel,children:row2.label}),
|
|
309
|
+
/* @__PURE__ */jsxRuntime.jsx("dd",{style:styles.kvValue,children:row2.value})]},row2.label))}):null,terms.status==="ready"?/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.notice,"data-testid":"televet-visit-cancel-terms",children:/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:terms.summary})}):terms.status==="loading"?/* @__PURE__ */jsxRuntime.jsx("div",{role:"status",style:styles.notice,children:/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:TELEVET_VISITS_COPY_WEB.loadingCancellationTerms})}):/* @__PURE__ */jsxRuntime.jsxs("div",{role:"alert",style:{...styles.notice,...styles.noticeDanger},"data-testid":"televet-visit-cancel-terms-error",children:[
|
|
310
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:TELEVET_VISITS_COPY_WEB.cancellationTermsUnavailable}),
|
|
311
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.retry,kind:"secondary",fullWidth:false,onPress:onRetryTerms})]}),
|
|
312
|
+
/* @__PURE__ */jsxRuntime.jsxs(TelevetRadioGroup,{label:`${TELEVET_VISITS_COPY_WEB.cancellationReasonLabel} ${TELEVET_VISITS_COPY_WEB.cancellationReasonOptional}`,style:styles.reasons,testID:"televet-visit-cancel-reason",children:[
|
|
313
|
+
/* @__PURE__ */jsxRuntime.jsxs("p",{style:styles.labelRow,children:[
|
|
314
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.label,children:TELEVET_VISITS_COPY_WEB.cancellationReasonLabel}),
|
|
315
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.labelNote,"data-testid":"televet-visit-cancel-optional",children:TELEVET_VISITS_COPY_WEB.cancellationReasonOptional})]}),answers.map(answer=>/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.reasons,children:[
|
|
316
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetOptionCard,{title:answer.label,selected:reason===answer.label,onPress:()=>{submitting||!ready||setReason(reason===answer.label?"":answer.label)},testID:`televet-visit-cancel-why-${answer.id}`}),answer.id==="time"&&reason===answer.label?/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.hint,"data-testid":"televet-visit-cancel-time-hint",children:[
|
|
317
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{children:TELEVET_VISITS_COPY_WEB.cancelWhyTimeHint}),onMoveInstead?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.cancelMoveInstead,kind:"quiet",fullWidth:false,onPress:onMoveInstead,testID:"televet-visit-cancel-move"}):null]}):null]},answer.id))]}),failure2?/* @__PURE__ */jsxRuntime.jsx("div",{role:"alert",style:{...styles.notice,...styles.noticeDanger},"data-testid":"televet-visit-cancel-failed",children:/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:failure2})}):null,
|
|
318
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.actions,children:[
|
|
319
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.cancelDismissCta,kind:"secondary",fullWidth:false,disabled:submitting,onPress:onDismiss,testID:"televet-visit-cancel-keep"}),
|
|
320
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:submitting?TELEVET_VISITS_COPY_WEB.cancellingVisit:TELEVET_VISITS_COPY_WEB.cancelConfirmCta,kind:"danger",fullWidth:false,disabled:submitting||!ready,loading:submitting,busyAnnouncement:TELEVET_VISITS_COPY_WEB.cancellingVisit,onPress:confirm,testID:"televet-visit-cancel-yes"})]})]})}function makeVisitStyles(theme){let{color:color,space:space,radius:radius,type:type,slots:slots}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),cardInk=slots.card?.textColor===void 0?{}:{color:slots.card.textColor},heading=(fontSize,ink,lh)=>({...text2("medium",fontSize,ink,lh),...headingFaceCss(theme,"medium")}),px=n=>`${String(n)}px`,text2=(weight,fontSize,ink,lh=lineHeight.normal)=>({margin:0,...faceCss(theme,weight),color:ink,fontSize:px(fontSize),lineHeight:String(lh)});return{screen:{...SURFACE_ROOT_RESET,display:"flex",flexDirection:"column",gap:px(space.lg),paddingLeft:px(space.xl),paddingRight:px(space.xl),paddingBottom:px(space.xl),boxSizing:"border-box"},topBar:{display:"flex",alignItems:"center",justifyContent:"flex-end",minHeight:44},topBarStart:{justifyContent:"flex-start"},iconButton:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:44,height:44,padding:0,borderStyle:"solid",borderWidth:1.5,borderColor:look.line,borderRadius:"50%",background:look.surface,color:look.ink,cursor:"pointer",boxSizing:"border-box"},textButton:{display:"inline-flex",alignItems:"center",minHeight:44,padding:`0 ${px(space.sm)}`,border:0,borderRadius:px(radius.pill),background:"transparent",color:look.ink,cursor:"pointer",...faceCss(theme,"bold"),fontSize:px(size.bodyTight)},pageTitle:{...heading(tierPx(theme,"heading",32),look.ink,1.1),letterSpacing:"-0.03em"},panel:{display:"flex",flexDirection:"column",gap:px(14),padding:px(space.xl),borderRadius:px(radius.lg),borderStyle:"solid",borderWidth:1,borderColor:look.line,backgroundColor:look.surface,boxSizing:"border-box",...slotLonghandCss(slots.card,1)},panelHeader:{display:"flex",alignItems:"center",gap:px(10)},panelTitle:{...text2("bold",19,look.ink,1.25),...headingFaceCss(theme,"bold"),letterSpacing:"-0.01em",...cardInk},pill:{marginLeft:"auto",display:"inline-flex",alignItems:"center",height:24,padding:`0 ${px(10)}`,borderRadius:px(radius.pill),backgroundColor:look.pink,...faceCss(theme,"monoBold"),color:look.onPink,fontSize:px(11.5),letterSpacing:"0.08em",textTransform:"uppercase",whiteSpace:"nowrap"},pillLine:{backgroundColor:look.surface,borderStyle:"solid",borderWidth:1.5,borderColor:look.line,color:look.muted},pillLive:{backgroundColor:color.badgeBgPositive,color:look.ink},visit:{display:"flex",gap:px(space.lg),alignItems:"flex-start"},dateTile:{flexShrink:0,width:64,paddingTop:px(space.sm),paddingBottom:px(space.sm),borderRadius:px(14),backgroundColor:look.pinkSoft,display:"flex",flexDirection:"column",alignItems:"center",gap:2},dateTileSmall:{...faceCss(theme,"monoBold"),color:look.ink,fontSize:px(11),letterSpacing:"0.08em",textTransform:"uppercase"},dateTileDay:{...text2("medium",26,look.ink,1.1),letterSpacing:"-0.02em"},visitMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},visitTitle:{...text2("bold",20,look.ink,1.25),...headingFaceCss(theme,"bold"),letterSpacing:"-0.01em",overflowWrap:"anywhere",...cardInk},visitMeta:{...text2("regular",16,look.text),overflowWrap:"anywhere",...cardInk},actions:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:`${px(6)} ${px(4)}`},list:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column"},row:{display:"flex",flexDirection:"column",gap:px(space.sm),paddingTop:px(space.md),paddingBottom:px(space.md),borderTopStyle:"solid",borderTopWidth:1,borderTopColor:look.line},rowFirst:{borderTopWidth:0,paddingTop:0},rowHead:{display:"flex",alignItems:"center",gap:px(space.md)},rowTitle:{...text2("bold",size.body,look.ink,lineHeight.snug),...cardInk},rowMeta:{...text2("regular",14,look.muted),...cardInk},note:text2("regular",14,look.muted),footnote:{...text2("regular",size.caption,look.muted),textAlign:"center",paddingTop:px(space.md)},skeletons:{display:"flex",flexDirection:"column",gap:px(space.sm)},empty:{display:"flex",flexDirection:"column",gap:px(space.xs)},notice:{display:"flex",flexDirection:"column",gap:px(space.xs),padding:`${px(space.md)} ${px(space.lg)}`,borderRadius:px(radius.sm),backgroundColor:look.mist},noticeDanger:{backgroundColor:look.alertWash},noticeTitle:text2("bold",size.body,look.ink,lineHeight.snug),form:{display:"flex",flexDirection:"column",gap:px(space.lg),paddingTop:px(space.lg),borderTopStyle:"solid",borderTopWidth:1,borderTopColor:look.line},formTitle:{...heading(tierPx(theme,"heading",24),look.ink,1.15),letterSpacing:"-0.02em",...cardInk},kv:{margin:0,display:"flex",flexDirection:"column"},kvRow:{display:"flex",gap:px(space.lg),paddingTop:px(10),paddingBottom:px(10),borderBottomStyle:"solid",borderBottomWidth:1,borderBottomColor:look.line},kvLabel:{...text2("regular",14,look.muted),width:72,flexShrink:0,...cardInk},kvValue:{...text2("bold",size.bodyTight,look.ink),marginInlineStart:0,minWidth:0,overflowWrap:"anywhere",...cardInk},label:{...text2("bold",size.bodyTight,look.ink),...cardInk},labelRow:{display:"flex",alignItems:"baseline",gap:px(space.sm),margin:0},labelNote:{...text2("regular",size.caption,look.muted),...cardInk},reasons:{display:"flex",flexDirection:"column",gap:px(10)},hint:{display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"space-between",gap:`${px(6)} ${px(14)}`,padding:`${px(space.sm)} ${px(space.lg)}`,borderRadius:px(radius.sm),backgroundColor:look.mist,...faceCss(theme,"regular"),color:look.text,fontSize:px(size.bodyTight)}}}function makeVetThreadStyles(theme){let{color:color,space:space,radius:radius,type:type}=theme,{size:size,lineHeight:lineHeight}=type,look=televetLook(theme),px=n=>`${String(n)}px`,text2=(weight,fontSize,ink,lh=lineHeight.normal)=>({margin:0,...faceCss(theme,weight),color:ink,fontSize:px(fontSize),lineHeight:String(lh)}),bubble={...text2("regular",size.body,look.text),maxWidth:"85%",padding:`${px(10)} ${px(14)}`,borderRadius:px(18),whiteSpace:"pre-wrap",overflowWrap:"anywhere"};return{head:{display:"flex",alignItems:"flex-start",gap:px(space.md),flexWrap:"wrap"},headMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},meta:text2("regular",15,look.muted),log:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:px(space.sm),maxHeight:"60vh",overflowY:"auto"},day:{alignSelf:"center",...faceCss(theme,"monoBold"),color:look.muted,fontSize:px(11.5),letterSpacing:"0.08em",textTransform:"uppercase",paddingTop:px(space.sm)},item:{display:"flex",flexDirection:"column",gap:px(4)},itemMine:{alignItems:"flex-end"},who:{display:"flex",alignItems:"baseline",gap:px(space.sm),...faceCss(theme,"bold"),color:look.ink,fontSize:px(size.bodyTight)},time:text2("regular",size.caption,look.muted),bubbleMine:{...bubble,backgroundColor:color.bubbleUser,color:color.onPrimary,borderBottomRightRadius:px(6)},bubbleVet:{...bubble,backgroundColor:color.bubbleVet,color:color.onBubbleVet,borderBottomLeftRadius:px(6)},system:{...text2("regular",size.caption,look.muted),alignSelf:"center",textAlign:"center"},attachments:text2("regular",size.caption,look.muted),composer:{display:"flex",alignItems:"flex-end",gap:px(space.sm),padding:px(space.sm),borderRadius:px(radius.lg),borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,...slotLonghandCss(theme.slots.input,1.5)},field:{flex:"1 1 auto",minWidth:0,minHeight:44,resize:"none",border:0,outlineOffset:2,background:"transparent",padding:`${px(10)} ${px(space.sm)}`,...faceCss(theme,"regular"),color:look.text,fontSize:px(size.body),lineHeight:String(lineHeight.normal),boxSizing:"border-box",...theme.slots.input?.textColor===void 0?null:{color:theme.slots.input.textColor}},note:text2("regular",size.caption,look.muted),failure:text2("bold",size.caption,look.alert),srOnly:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},label:{...faceCss(theme,"monoBold"),color:look.muted,fontSize:px(11.5),letterSpacing:"0.08em",textTransform:"uppercase"},body:{...text2("regular",size.body,look.text),whiteSpace:"pre-wrap",overflowWrap:"anywhere"},plan:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:px(space.md)},planItem:{display:"flex",gap:px(space.md),alignItems:"baseline"},planNumber:{...faceCss(theme,"monoBold"),color:look.ink,fontSize:px(12),letterSpacing:"0.08em",flexShrink:0},rowButton:{display:"flex",alignItems:"center",gap:px(space.md),width:"100%",minHeight:44,padding:0,border:0,background:"transparent",textAlign:"start",cursor:"pointer",color:"inherit",font:"inherit"},rowMain:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},rowEnd:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,flexShrink:0},preview:{...text2("regular",14,look.muted),overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},link:{alignSelf:"flex-start",minHeight:44,padding:0,border:0,background:"transparent",cursor:"pointer",...faceCss(theme,"bold"),color:color.linkInk,fontSize:px(size.bodyTight),textDecoration:"underline",textUnderlineOffset:3}}}function TelevetVetMessagesCard({threads:threads,pets:pets,Title:Title,styles:styles,threadStyles:threadStyles,onOpen:onOpen}){/* @__PURE__ */
|
|
321
|
+
return jsxRuntime.jsxs("section",{style:styles.panel,"data-testid":"televet-messages-card",children:[
|
|
322
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.panelHeader,children:/* @__PURE__ */jsxRuntime.jsx(Title,{style:styles.panelTitle,children:VET_MESSAGES_COPY.messagesTitle})}),
|
|
323
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{"aria-label":VET_MESSAGES_COPY.messagesTitle,style:styles.list,children:threads.map((thread,i)=>{let petName=pets.find(p=>p.petRef===thread.petRef)?.name??null,vetName=thread.lastMessage?.role==="vet"?thread.lastMessage.senderName:null;/* @__PURE__ */
|
|
324
|
+
return jsxRuntime.jsx("li",{style:{...styles.row,...i===0?styles.rowFirst:null},children:/* @__PURE__ */jsxRuntime.jsxs("button",{type:"button",onClick:()=>onOpen({petRef:thread.petRef,petName:petName,vetName:vetName,ownerCanStart:thread.ownerCanStart}),style:threadStyles.rowButton,"data-testid":`televet-messages-row-${thread.petRef}`,children:[
|
|
325
|
+
/* @__PURE__ */jsxRuntime.jsxs("span",{style:threadStyles.rowMain,children:[
|
|
326
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.rowTitle,children:sentenceCase(petNameOr(petName))}),thread.lastMessage?/* @__PURE__ */jsxRuntime.jsx("span",{style:threadStyles.preview,children:previewLine(thread.lastMessage)}):null]}),
|
|
327
|
+
/* @__PURE__ */jsxRuntime.jsxs("span",{style:threadStyles.rowEnd,children:[
|
|
328
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.rowMeta,children:formatThreadDay(thread.lastMessageAt)}),thread.unreadCount>0?/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.pill,marginLeft:0},children:VET_MESSAGES_COPY.newPillWeb}):null]})]})},thread.petRef)})})]})}function previewLine(message){let text2=message.content.split(`\n`)[0]?.trim()??"";return message.role==="owner"?fillVetCopy(VET_MESSAGES_COPY.previewOwnerTemplate,{text:text2}):message.role==="vet"&&message.senderName?fillVetCopy(VET_MESSAGES_COPY.previewVetTemplateWeb,{vet:message.senderName,text:text2}):text2}function TelevetVisitsScreen({controller:injected,onJoin:onJoin,onReschedule:onReschedule,onBook:onBook,onBack:onBack,onOpenThread:onOpenThread,onOpenSummary:onOpenSummary,isRoot:isRoot=true,revision:revision=0,returnedTo:returnedTo=false,nowMs:nowMs,style:style}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeVisitStyles(theme),[theme]),threadStyles=react.useMemo(()=>makeVetThreadStyles(theme),[theme]),level=useNestedHeadingLevel(),Title=headingTag(level),CardTitle=headingTag(nextHeadingLevel(level)),controller=useTelevetBookingController(injected),[localRevision,setLocalRevision]=react.useState(0),consults=useTelevetConsults(controller,revision+localRevision,{reread:returnedTo}),policy=useTelevetCancellationPolicy(controller),{pets:pets}=useEverfurPets(),threads=useVetThreads(controller,revision+localRevision),messagesLit=threads.availability==="lit",threadTargetFor=(consult,petName)=>{let petRef=vetThreadPetRef(pets,consult.petId);if(!messagesLit||!onOpenThread||petRef===null)return null;let listed=threads.threads.find(t=>t.petRef===petRef);return{petRef:petRef,petName:petName,vetName:consult.clinicianName,...listed?{ownerCanStart:listed.ownerCanStart}:{}}},[cancelling,setCancelling]=react.useState({status:"idle"}),[receipt,setReceipt]=react.useState(null),rows2=consults.data??[],ticked=useNowMs(rows2.some(c=>!TERMINAL_CONSULT_STATUSES.has(c.status))),now=nowMs??ticked,{upcoming:upcoming,past:past}=react.useMemo(()=>splitTelevetVisits(rows2,now),[rows2,now]),screenRef=react.useRef(null),loadingHeadingRef=react.useRef(null),headingRef=react.useRef(null),noticeRef=react.useRef(null),focusOnLoad=react.useRef(returnedTo),loaded=!(consults.enabled&&consults.isPending);react.useEffect(()=>{focusOnLoad.current&&loadingHeadingRef.current?.focus()},[]),react.useEffect(()=>{!focusOnLoad.current||!loaded||(focusOnLoad.current=false,!screenRef.current?.contains(document.activeElement)&&(headingRef.current??noticeRef.current)?.focus())},[loaded]);let terms=policy.data!==null&&policy.data!==void 0?{status:"ready",summary:policy.data.summary}:policy.enabled&&policy.isPending?{status:"loading"}:{status:"error"},cancelVisit=(consult,reason)=>{let cancel=controller?.cancelConsult;if(terms.status!=="ready"||!controller||!cancel){setCancelling({status:"failed",consultId:consult.consultId,message:TELEVET_VISITS_COPY_WEB.cancelTermsFirst});return}setCancelling({status:"submitting",consultId:consult.consultId}),cancel.call(controller,consult.consultId,reason).then(settled=>{settled.ok?(setReceipt({value:settled.value,pet:nameOf(pets,consult.petId),vet:consult.clinicianName}),setCancelling({status:"idle"})):setCancelling({status:"failed",consultId:consult.consultId,message:TELEVET_VISITS_COPY_WEB.cancelFailed}),setLocalRevision(n=>n+1)},()=>setCancelling({status:"failed",consultId:consult.consultId,message:TELEVET_VISITS_COPY_WEB.cancelFailed}))},renderRow=(consult,index)=>{let petName=nameOf(pets,consult.petId),lateTarget=TERMINAL_CONSULT_STATUSES.has(consult.status)?null:threadTargetFor(consult,petName);/* @__PURE__ */
|
|
329
|
+
return jsxRuntime.jsx(VisitRow,{first:index===0,consult:consult,petName:petName,nowMs:now,styles:styles,threadStyles:threadStyles,...lateTarget&&onOpenThread?{onMessageVet:()=>onOpenThread(lateTarget)}:{},...messagesLit&&onOpenSummary&&consult.status==="completed"?{onOpenSummary:()=>onOpenSummary(consult)}:{},cancelling:cancelling.status!=="idle"&&cancelling.consultId===consult.consultId?cancelling:null,anyCancelInFlight:cancelling.status==="submitting",terms:terms,onJoin:onJoin,onReschedule:onReschedule,onAskCancel:()=>{setReceipt(null),setCancelling({status:"asking",consultId:consult.consultId})},onDismissCancel:()=>setCancelling({status:"idle"}),onCancel:reason=>cancelVisit(consult,reason),...onReschedule?{onMoveInstead:()=>onReschedule(consult)}:{},onRetryTerms:()=>policy.refetch()},consult.consultId)};/* @__PURE__ */
|
|
330
|
+
return jsxRuntime.jsxs("div",{ref:screenRef,style:{...styles.screen,...style},"data-testid":"televet-visits",children:[
|
|
331
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:isRoot?styles.topBar:{...styles.topBar,...styles.topBarStart},children:isRoot?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onBack,"aria-label":CLOSE_LABEL,style:styles.iconButton,"data-testid":"televet-visits-close",children:/* @__PURE__ */jsxRuntime.jsx(CloseGlyph,{})}):/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onBack,style:styles.textButton,"data-testid":"televet-visits-back",children:BACK_LABEL2})}),
|
|
332
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:styles.pageTitle,"data-testid":"televet-visits-title",children:TELEVET_VISITS_COPY_WEB.pageTitle}),receipt?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"status",style:styles.notice,"data-testid":"televet-visits-cancel-receipt",children:[
|
|
333
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.noticeTitle,children:receipt.pet&&receipt.vet?fill(TELEVET_VISITS_COPY_WEB.cancelledTemplate,{pet:receipt.pet,vet:receipt.vet}):TELEVET_VISITS_COPY_WEB.cancelledTitle}),receipt.value.summary?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:receipt.value.summary}):null,receipt.value.feeRecorded?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:TELEVET_VISITS_COPY_WEB.cancellationFeeRecorded}):null]}):null,onBook?/* @__PURE__ */jsxRuntime.jsx(BookCard,{title:upcoming.length>0?TELEVET_VISITS_COPY_WEB.bookAnotherTitle:TELEVET_VISITS_COPY_WEB.bookCardTitle,onBook:onBook,styles:styles}):null,consults.enabled&&consults.isPending?/* @__PURE__ */jsxRuntime.jsxs("section",{style:styles.panel,children:[
|
|
334
|
+
/* @__PURE__ */jsxRuntime.jsx(PanelHeader,{Title:CardTitle,title:TELEVET_VISITS_COPY_WEB.pastTitle,count:null,styles:styles,headingRef:loadingHeadingRef}),
|
|
335
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_VISITS_COPY_WEB.loading,"aria-busy":"true",style:styles.skeletons,"data-testid":"televet-visits-loading",children:[0,1,2].map(i=>/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:56},i))})]}):consults.isError&&consults.data===null?/* @__PURE__ */jsxRuntime.jsx(jsxRuntime.Fragment,{children:/* @__PURE__ */jsxRuntime.jsxs("div",{ref:noticeRef,role:"alert",tabIndex:-1,style:{...styles.notice,...styles.noticeDanger},"data-testid":"televet-visits-error",children:[
|
|
336
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.noticeTitle,children:TELEVET_VISITS_COPY_WEB.loadErrorTitle}),
|
|
337
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,"data-testid":"televet-visits-error-body",children:TELEVET_VISITS_COPY_WEB.loadErrorBody}),
|
|
338
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.retry,kind:"secondary",fullWidth:false,onPress:()=>consults.refetch()})]})}):/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[upcoming.length>0?/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.skeletons,"data-testid":"televet-visits-upcoming",children:upcoming.map((consult,i)=>/* @__PURE__ */jsxRuntime.jsxs("section",{style:styles.panel,children:[
|
|
339
|
+
/* @__PURE__ */jsxRuntime.jsx(PanelHeader,{Title:CardTitle,title:TELEVET_VISITS_COPY_WEB.upcomingTitle,count:null,styles:styles,...i===0?{headingRef:headingRef}:{},pill:consult.status==="scheduled"?TELEVET_VISITS_COPY_WEB.bookedPill:televetVisitStatusWeb(consult.status)}),
|
|
340
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{"aria-label":TELEVET_VISITS_COPY_WEB.upcomingTitle,style:styles.list,children:renderRow(consult,0)})]},consult.consultId))}):null,messagesLit&&onOpenThread&&threads.threads.length>0?/* @__PURE__ */jsxRuntime.jsx(TelevetVetMessagesCard,{threads:threads.threads,pets:pets,Title:CardTitle,styles:styles,threadStyles:threadStyles,onOpen:onOpenThread}):null,
|
|
341
|
+
/* @__PURE__ */jsxRuntime.jsxs("section",{style:styles.panel,"data-testid":"televet-visits-past",children:[
|
|
342
|
+
/* @__PURE__ */jsxRuntime.jsx(PanelHeader,{Title:CardTitle,title:TELEVET_VISITS_COPY_WEB.pastTitle,count:null,styles:styles,...upcoming.length===0?{headingRef:headingRef}:{}}),rows2.length===0?/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.empty,"data-testid":"televet-visits-empty",children:[
|
|
343
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.noticeTitle,children:TELEVET_VISITS_COPY_WEB.emptyTitle}),
|
|
344
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.note,children:TELEVET_VISITS_COPY_WEB.emptyBody})]}):past.length===0?null:/* @__PURE__ */jsxRuntime.jsx("ul",{"aria-label":TELEVET_VISITS_COPY_WEB.pastTitle,style:styles.list,children:past.map((consult,i)=>renderRow(consult,i))})]})]}),
|
|
345
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.footnote,"data-testid":"televet-visits-footnote",children:TELEVET_BOOKING_COPY.footnote})]})}function BookCard({title:title,onBook:onBook,styles:styles}){/* @__PURE__ */
|
|
346
|
+
return jsxRuntime.jsxs("section",{style:styles.panel,"data-testid":"televet-visits-book-card",children:[
|
|
347
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.panelTitle,children:title}),
|
|
348
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.bookCardCta,size:"lg",onPress:onBook,testID:"televet-visits-book"})]})}function PanelHeader({Title:Title,title:title,count:count,styles:styles,headingRef:headingRef,pill:pill}){/* @__PURE__ */
|
|
349
|
+
return jsxRuntime.jsxs("div",{style:styles.panelHeader,children:[
|
|
350
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:styles.panelTitle,...headingRef?{ref:headingRef,tabIndex:-1}:{},children:title}),count===null?null:/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.pill,...styles.pillLine},children:count}),pill?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.pill,"data-testid":"televet-visits-booked-pill",children:pill}):null]})}function VisitRow({first:first,consult:consult,petName:petName,nowMs:nowMs,styles:styles,cancelling:cancelling,anyCancelInFlight:anyCancelInFlight,terms:terms,onJoin:onJoin,onReschedule:onReschedule,onAskCancel:onAskCancel,onDismissCancel:onDismissCancel,onCancel:onCancel,onMoveInstead:onMoveInstead,onRetryTerms:onRetryTerms,threadStyles:threadStyles,onMessageVet:onMessageVet,onOpenSummary:onOpenSummary}){let decision=televetJoinDecision(consult,nowMs),terminal=TERMINAL_CONSULT_STATUSES.has(consult.status),status=televetVisitStatusWeb(consult.status),opensAt=televetJoinOpensAtMs(consult),manage=canManageTelevetVisit(consult.status),id=consult.consultId,noteId=react.useId(),dark=!decision.joinable&&!terminal,when=formatVisitDayTime(consult.scheduledAt),vet=consult.clinicianName,title=petName&&vet?fill(TELEVET_VISITS_COPY_WEB.visitTitleTemplate,{pet:petName,vet:vet}):petName??vet??when,about=consult.reasonText?.split(`\n`)[0]?.trim()??"",date2=new Date(consult.scheduledAt),tile=Number.isNaN(date2.getTime())?null:{weekday:date2.toLocaleDateString(void 0,{weekday:"short"}),day:String(date2.getDate()),month:date2.toLocaleDateString(void 0,{month:"short"})};if(terminal){let head=/* @__PURE__ */jsxRuntime.jsxs("div",{style:{...styles.rowHead,width:"100%"},children:[
|
|
351
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.visitMain,children:[
|
|
352
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.rowTitle,children:title}),
|
|
353
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.rowMeta,children:when})]}),status?/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.pill,...styles.pillLine},"data-testid":`televet-visits-status-${id}`,children:status}):null]});/* @__PURE__ */
|
|
354
|
+
return jsxRuntime.jsx("li",{style:{...styles.row,...first?styles.rowFirst:null},"data-testid":`televet-visits-row-${id}`,children:onOpenSummary?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onOpenSummary,style:threadStyles.rowButton,"data-testid":`televet-visits-summary-${id}`,children:head}):head})}/* @__PURE__ */
|
|
355
|
+
return jsxRuntime.jsxs("li",{style:{...styles.row,...styles.rowFirst,gap:16},"data-testid":`televet-visits-row-${id}`,children:[
|
|
356
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.visit,children:[tile?/* @__PURE__ */jsxRuntime.jsxs("div",{"aria-hidden":"true",style:styles.dateTile,children:[
|
|
357
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.dateTileSmall,children:tile.weekday}),
|
|
358
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.dateTileDay,children:tile.day}),
|
|
359
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.dateTileSmall,children:tile.month})]}):null,
|
|
360
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.visitMain,children:[
|
|
361
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.visitTitle,children:title}),
|
|
362
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.visitMeta,children:when}),about?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.visitMeta,children:about}):null,status&&consult.status!=="scheduled"?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.note,"data-testid":`televet-visits-status-${id}`,children:status}):null]})]}),
|
|
363
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.actions,children:[
|
|
364
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.joinCta,fullWidth:false,disabled:!decision.joinable,onPress:()=>onJoin(consult,petName),describedBy:dark?noteId:void 0,testID:`televet-visits-join-${id}`}),manage&&onReschedule?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.rescheduleCta,kind:"quiet",fullWidth:false,onPress:()=>onReschedule(consult),testID:`televet-visits-reschedule-${id}`}):null,manage?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:TELEVET_VISITS_COPY_WEB.cancelCta,kind:"quiet",fullWidth:false,disabled:anyCancelInFlight,onPress:onAskCancel,testID:`televet-visits-cancel-${id}`}):null]}),onMessageVet?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onMessageVet,style:threadStyles.link,"data-testid":`televet-visits-late-${id}`,children:fillVetCopy(VET_MESSAGES_COPY.runningLateTemplate,{vet:vet??VET_NAME_FALLBACK})}):null,dark?/* @__PURE__ */jsxRuntime.jsx("p",{id:noteId,style:styles.note,"data-testid":`televet-visits-join-note-${id}`,children:televetJoinBlockWeb(decision.reason,opensAt===null?void 0:formatClockWithZone(new Date(opensAt).toISOString()))}):null,cancelling?/* @__PURE__ */jsxRuntime.jsx(TelevetCancelVisitForm,{terms:terms,submitting:cancelling.status==="submitting",failure:cancelling.status==="failed"?cancelling.message:null,onConfirm:onCancel,onDismiss:onDismissCancel,onRetryTerms:onRetryTerms,styles:styles,petName:petName,when:when,vet:vet,about:about,...onMoveInstead?{onMoveInstead:onMoveInstead}:{}}):null]})}var CLOSE_LABEL="Close",BACK_LABEL2="Back";function CloseGlyph(){/* @__PURE__ */
|
|
365
|
+
return jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:/* @__PURE__ */jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}var LOAD_OLDER_WITHIN_PX=48;function TelevetVetThreadScreen({petRef:petRef,petName:petName,vetName:vetName,ownerCanStart:ownerCanStart,controller:injected,onBack:onBack,onBook:onBook,style:style}){let theme=useEverfurTheme(),visit=react.useMemo(()=>makeVisitStyles(theme),[theme]),styles=react.useMemo(()=>makeVetThreadStyles(theme),[theme]),Title=headingTag(useNestedHeadingLevel()),controller=useTelevetBookingController(injected),thread=useVetThread(controller,petRef,{ownerCanStart:ownerCanStart}),[draft,setDraft]=react.useState(""),fieldId=react.useId(),noteId=react.useId(),logRef=react.useRef(null),named=vetName?.trim()||newestVetName(thread.messages),vet=vetNameOr(named),newest=thread.messages[thread.messages.length-1]?.messageId;react.useEffect(()=>{let log=logRef.current;log&&thread.status==="ready"&&(log.scrollTop=log.scrollHeight)},[thread.status,newest]);let submit=()=>{let words=draft;words.trim().length===0||thread.sending||thread.send(words).then(landed=>{landed&&setDraft("")})};/* @__PURE__ */
|
|
366
|
+
return jsxRuntime.jsxs("div",{style:{...visit.screen,...style},"data-testid":"televet-vet-thread",children:[
|
|
367
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:{...visit.topBar,...visit.topBarStart},children:/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onBack,style:visit.textButton,"data-testid":"televet-vet-thread-back",children:BACK_LABEL3})}),
|
|
368
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.head,children:[
|
|
369
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.headMain,children:[
|
|
370
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:visit.pageTitle,children:sentenceCase(petNameOr(petName))}),named?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.meta,children:named}):null]}),onBook?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_MESSAGES_COPY.bookVisitWeb,kind:"secondary",fullWidth:false,onPress:onBook,testID:"televet-vet-thread-book"}):null]}),thread.status==="loading"?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"progressbar","aria-label":VET_MESSAGES_COPY.loading,"aria-busy":"true",style:visit.skeletons,"data-testid":"televet-vet-thread-loading",children:[
|
|
371
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:56}),
|
|
372
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:56})]}):thread.status==="error"?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"alert",style:{...visit.notice,...visit.noticeDanger},"data-testid":"televet-vet-thread-error",children:[
|
|
373
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.noticeTitle,children:VET_MESSAGES_COPY.loadFailed}),
|
|
374
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_MESSAGES_COPY.retry,kind:"secondary",fullWidth:false,onPress:thread.retry})]}):/* @__PURE__ */jsxRuntime.jsxs("ol",{ref:logRef,role:"log","aria-label":fillVetCopy(VET_MESSAGES_COPY.threadLogTemplate,{vet:vet}),"aria-busy":thread.loadingOlder||void 0,tabIndex:0,style:styles.log,onScroll:event=>{event.currentTarget.scrollTop<=LOAD_OLDER_WITHIN_PX&&thread.loadOlder()},"data-testid":"televet-vet-thread-log",children:[thread.messages.length===0?/* @__PURE__ */jsxRuntime.jsx("li",{style:styles.system,children:VET_MESSAGES_COPY.empty}):null,thread.messages.map((message,index)=>/* @__PURE__ */jsxRuntime.jsx(ThreadItem,{message:message,previous:thread.messages[index-1],vet:vet,styles:styles},message.messageId))]}),
|
|
375
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{role:"status",style:styles.srOnly,"data-testid":"televet-vet-thread-status",children:thread.sentCount>0&&thread.sendFailure===null?VET_MESSAGES_COPY.sent:""}),thread.status==="ready"&&thread.canWrite?/* @__PURE__ */jsxRuntime.jsxs("form",{style:{display:"flex",flexDirection:"column",gap:8},onSubmit:event=>{event.preventDefault(),submit()},children:[
|
|
376
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.composer,children:[
|
|
377
|
+
/* @__PURE__ */jsxRuntime.jsx("label",{htmlFor:fieldId,style:styles.srOnly,children:VET_MESSAGES_COPY.composerLabelWeb}),
|
|
378
|
+
/* @__PURE__ */jsxRuntime.jsx("textarea",{id:fieldId,value:draft,rows:1,placeholder:fillVetCopy(VET_MESSAGES_COPY.composerPlaceholderTemplate,{vet:vet}),"aria-describedby":noteId,onChange:event=>setDraft(event.target.value),onKeyDown:event=>{event.key==="Enter"&&!event.shiftKey&&(event.preventDefault(),submit())},style:styles.field,"data-testid":"televet-vet-thread-field"}),
|
|
379
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_MESSAGES_COPY.send,fullWidth:false,loading:thread.sending,disabled:draft.trim().length===0,onPress:submit,testID:"televet-vet-thread-send"})]}),thread.sendFailure==="notSent"?/* @__PURE__ */jsxRuntime.jsx("p",{role:"alert",style:styles.failure,"data-testid":"televet-vet-thread-failure",children:VET_MESSAGES_COPY.notSent}):null,
|
|
380
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{id:noteId,style:styles.note,children:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.composerNoteTemplate,{vet:vet}))})]}):null,thread.sendFailure==="vetWritesFirst"?/* @__PURE__ */jsxRuntime.jsx("p",{role:"alert",style:styles.note,"data-testid":"televet-vet-thread-vet-first",children:VET_MESSAGES_COPY.vetWritesFirst}):null]})}function ThreadItem({message:message,previous:previous,vet:vet,styles:styles}){let day=formatDayLong(message.createdAt),newDay=previous===void 0||formatDayLong(previous.createdAt)!==day,attachments=message.attachmentCount>0?fillVetCopy(VET_MESSAGES_COPY.attachmentsTemplate,{n:String(message.attachmentCount)}):null;/* @__PURE__ */
|
|
381
|
+
return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[newDay?/* @__PURE__ */jsxRuntime.jsx("li",{style:styles.day,children:day}):null,message.role==="system"?/* @__PURE__ */jsxRuntime.jsx("li",{style:styles.system,children:message.content}):/* @__PURE__ */jsxRuntime.jsxs("li",{style:{...styles.item,...message.role==="owner"?styles.itemMine:null},"data-testid":`televet-vet-thread-message-${message.messageId}`,children:[message.role==="vet"?/* @__PURE__ */jsxRuntime.jsxs("p",{style:{...styles.who,margin:0},children:[
|
|
382
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{children:message.senderName??sentenceCase(vet)}),
|
|
383
|
+
/* @__PURE__ */jsxRuntime.jsx("time",{dateTime:message.createdAt,style:styles.time,children:formatClock(message.createdAt)})]}):null,message.content.length>0?/* @__PURE__ */jsxRuntime.jsx("p",{style:{...message.role==="owner"?styles.bubbleMine:styles.bubbleVet,margin:0},children:message.content}):null,attachments?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.attachments,children:attachments}):null]})]})}function newestVetName(messages){for(let i=messages.length-1;i>=0;i-=1){let name=messages[i]?.role==="vet"?messages[i]?.senderName:null;if(name)return name}return null}var BACK_LABEL3="Back";function TelevetVisitSummaryScreen({consult:consult,controller:injected,onBack:onBack,onMessageVet:onMessageVet,onBook:onBook,style:style}){let theme=useEverfurTheme(),visit=react.useMemo(()=>makeVisitStyles(theme),[theme]),styles=react.useMemo(()=>makeVetThreadStyles(theme),[theme]),level=useNestedHeadingLevel(),Title=headingTag(level),CardTitle=headingTag(nextHeadingLevel(level)),controller=useTelevetBookingController(injected),read=useVisitSummary(controller,consult.consultId),{pets:pets}=useEverfurPets(),petName=nameOf(pets,consult.petId),summary=read.summary,named=summary?.approvedByName??consult.clinicianName,vet=vetNameOr(named),title=petName&&consult.clinicianName?fillVetCopy(TELEVET_VISITS_COPY_WEB.visitTitleTemplate,{pet:petName,vet:consult.clinicianName}):sentenceCase(petNameOr(petName)),meta=[formatDate(consult.scheduledAt),named].filter(Boolean).join(" · "),threadPetRef=vetThreadPetRef(pets,consult.petId),messageVet=onMessageVet&&threadPetRef!==null?()=>onMessageVet({petRef:threadPetRef,petName:petName,vetName:named??null}):void 0;/* @__PURE__ */
|
|
384
|
+
return jsxRuntime.jsxs("div",{style:{...visit.screen,...style},"data-testid":"televet-visit-summary",children:[
|
|
385
|
+
/* @__PURE__ */jsxRuntime.jsx("div",{style:{...visit.topBar,...visit.topBarStart},children:/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onBack,style:visit.textButton,"data-testid":"televet-visit-summary-back",children:BACK_LABEL4})}),
|
|
386
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.headMain,children:[
|
|
387
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:visit.pageTitle,children:title}),meta?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.meta,children:meta}):null]}),read.status==="loading"?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"progressbar","aria-label":VET_MESSAGES_COPY.loading,"aria-busy":"true",style:visit.skeletons,"data-testid":"televet-visit-summary-loading",children:[
|
|
388
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:96}),
|
|
389
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:96})]}):read.status==="absent"?null:read.status==="pending"?/* @__PURE__ */jsxRuntime.jsx("div",{role:"status",style:visit.notice,"data-testid":"televet-visit-summary-pending",children:/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.noticeTitle,children:VET_MESSAGES_COPY.summaryPending})}):read.status==="error"||summary===null?/* @__PURE__ */jsxRuntime.jsxs("div",{role:"alert",style:{...visit.notice,...visit.noticeDanger},"data-testid":"televet-visit-summary-error",children:[
|
|
390
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.noticeTitle,children:VET_MESSAGES_COPY.loadFailed}),
|
|
391
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_MESSAGES_COPY.retry,kind:"secondary",fullWidth:false,onPress:read.retry})]}):/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[summary.findingsText.trim().length>0?/* @__PURE__ */jsxRuntime.jsxs("section",{style:visit.panel,children:[
|
|
392
|
+
/* @__PURE__ */jsxRuntime.jsx(CardTitle,{style:visit.panelTitle,children:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.sawTitleTemplate,{vet:vet}))}),
|
|
393
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:visit.panelHeader,children:[
|
|
394
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.label,children:VET_MESSAGES_COPY.summaryLabel}),
|
|
395
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:{...visit.pill,...visit.pillLine},children:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.fromVetTemplate,{vet:vet}))})]}),
|
|
396
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.body,children:summary.findingsText})]}):null,summary.nextStepsText.trim().length>0||summary.actionItems.length>0?/* @__PURE__ */jsxRuntime.jsxs("section",{style:visit.panel,"data-testid":"televet-visit-summary-plan",children:[
|
|
397
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:visit.panelHeader,children:[
|
|
398
|
+
/* @__PURE__ */jsxRuntime.jsx(CardTitle,{style:visit.panelTitle,children:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.planTitleTemplate,{pet:petNameOr(petName)}))}),
|
|
399
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:visit.pill,children:VET_MESSAGES_COPY.wordForWord})]}),summary.nextStepsText.trim().length>0?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.body,children:summary.nextStepsText}):null,summary.actionItems.length>0?/* @__PURE__ */jsxRuntime.jsx("ol",{style:styles.plan,children:summary.actionItems.map((item,i)=>/* @__PURE__ */jsxRuntime.jsxs("li",{style:styles.planItem,children:[
|
|
400
|
+
/* @__PURE__ */jsxRuntime.jsx("b",{style:styles.planNumber,children:String(i+1).padStart(2,"0")}),
|
|
401
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.body,children:`“${item}”`})]},`${String(i)}-${item}`))}):null]}):null,summary.medications.length>0?/* @__PURE__ */jsxRuntime.jsxs("section",{style:visit.panel,"data-testid":"televet-visit-summary-medications",children:[
|
|
402
|
+
/* @__PURE__ */jsxRuntime.jsx(CardTitle,{style:visit.panelTitle,children:VET_MESSAGES_COPY.fromThisVisitTitle}),
|
|
403
|
+
/* @__PURE__ */jsxRuntime.jsx("ul",{style:visit.list,children:summary.medications.map((med,i)=>/* @__PURE__ */jsxRuntime.jsxs("li",{style:{...visit.row,...i===0?visit.rowFirst:null},children:[
|
|
404
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.rowTitle,children:medicationTitle(med)}),med.sig?/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.rowMeta,children:med.sig}):null]},`${String(i)}-${med.drug}`))})]}):null,named||messageVet?/* @__PURE__ */jsxRuntime.jsxs("section",{style:visit.panel,"data-testid":"televet-visit-summary-vet",children:[named?/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.panelTitle,children:named}):null,summary.credentialsText?/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.rowMeta,children:summary.credentialsText}):null,messageVet?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:sentenceCase(fillVetCopy(VET_MESSAGES_COPY.messageVetTemplate,{vet:vet})),kind:"secondary",fullWidth:false,onPress:messageVet,testID:"televet-visit-summary-message"}):null]}):null,onBook?/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:VET_MESSAGES_COPY.bookFollowUp,fullWidth:false,onPress:onBook,testID:"televet-visit-summary-book"}):null]}),read.status==="ready"&&summary!==null?/* @__PURE__ */jsxRuntime.jsx("p",{style:visit.footnote,"data-testid":"televet-visit-summary-footnote",children:fillVetCopy(VET_MESSAGES_COPY.summaryFootnoteTemplate,{vet:vet})}):null]})}function medicationTitle(med){return[med.drug,med.strength].filter(Boolean).join(" ")}var BACK_LABEL4="Back";function EverfurTelevetReschedule(props){let{consult:consult,onRescheduled:onRescheduled,onCancel:onCancel,controller:injected,style:style,testID:testID}=guardHostProps(props,["onRescheduled","onCancel"]),styles=useBookingStyles(),controller=useTelevetBookingController(injected),slots=useTelevetSlots(consult?.clinicianId??null,controller),hold=useTelevetHoldSlot(controller),reschedule=useTelevetRescheduleConsult(consult?.consultId??null,controller),[failure2,setFailure]=react.useState(null),[picked,setPicked]=react.useState(null),{pets:pets}=useEverfurPets(),theme=useEverfurTheme(),look=react.useMemo(()=>makeLook(theme),[theme]),Title=headingTag(useNestedHeadingLevel()),pick2=react.useCallback(slot=>{setFailure(null),hold.mutate(slot.slotId,{onSuccess:()=>{reschedule.mutate(slot.slotId,{onSuccess:moved=>onRescheduled?.(moved),onError:error=>setFailure(televetBookingRefusal(error).kind==="unavailable"?"unavailable":"failed")})},onError:error=>setFailure(televetBookingRefusal(error).kind==="unavailable"?"unavailable":"taken")})},[hold,reschedule,onRescheduled]),busy=hold.isPending||reschedule.isPending;if(!isTelevetBookingCopyReady())/* @__PURE__ */
|
|
405
|
+
return jsxRuntime.jsx("div",{style:{...styles.stepFill,...style},"data-testid":"televet-reschedule-copy-unapproved"});if(!consult)/* @__PURE__ */
|
|
406
|
+
return jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_BOOKING_COPY_WEB.loading.consult,"aria-busy":"true",style:{...styles.list,...style},"data-testid":"televet-reschedule-loading",children:[0,1].map(i=>/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:48},i))});let petName=nameOf(pets,consult.petId);
|
|
407
|
+
/* @__PURE__ */
|
|
408
|
+
return jsxRuntime.jsxs("section",{style:{...styles.screen,...style},"aria-label":TELEVET_BOOKING_COPY_WEB.rescheduleNavTitle,"data-testid":testID??"televet-reschedule",children:[
|
|
409
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:look.bar,children:[
|
|
410
|
+
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:()=>onCancel?.(),disabled:busy,"aria-label":TELEVET_BOOKING_COPY_WEB.rescheduleKeepLabel,style:look.ring,"data-testid":"televet-reschedule-keep",children:/* @__PURE__ */jsxRuntime.jsx("svg",{"aria-hidden":"true",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:/* @__PURE__ */jsxRuntime.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})}),
|
|
411
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:look.label,children:TELEVET_BOOKING_COPY_WEB.rescheduleStepLabel})]}),
|
|
412
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:look.head,children:[
|
|
413
|
+
/* @__PURE__ */jsxRuntime.jsx(Title,{style:look.title,children:fill(TELEVET_BOOKING_COPY_WEB.rescheduleTitleTemplate,{pet:petName??TELEVET_BOOKING_COPY_WEB.petFallback})}),
|
|
414
|
+
/* @__PURE__ */jsxRuntime.jsxs("p",{style:look.now,"data-testid":"televet-reschedule-now",children:[
|
|
415
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:look.nowPill,children:TELEVET_BOOKING_COPY_WEB.rescheduleNowLabel}),
|
|
416
|
+
/* @__PURE__ */jsxRuntime.jsx("s",{children:formatVisitDayTime(consult.scheduledAt)})]})]}),failure2==="taken"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.slotTaken}):null,failure2==="failed"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.rescheduleFailed}):null,failure2==="unavailable"?/* @__PURE__ */jsxRuntime.jsx(TelevetFailureLine,{message:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle,testID:"televet-reschedule-unavailable"}):null,slots.enabled?slots.isPending?/* @__PURE__ */jsxRuntime.jsx("div",{role:"progressbar","aria-label":TELEVET_BOOKING_COPY_WEB.loading.slots,"aria-busy":"true",style:styles.list,"data-testid":"televet-reschedule-slots-loading",children:[0,1,2].map(i=>/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:48},i))}):slots.isError?/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.slotsErrorTitle,actionLabel:TELEVET_BOOKING_COPY_WEB.retryCta,onAction:()=>slots.refetch(),testID:"televet-reschedule-slots-error"}):(slots.data??[]).length===0?/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-reschedule-empty",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.noSlotsTitle})}):/* @__PURE__ */jsxRuntime.jsx(TelevetSlotPicker,{slots:slots.data??[],busySlotId:busy?hold.variables:null,onPick:slot=>{setFailure(null),setPicked(slot)},selectedSlot:picked,dayGroupLabel:TELEVET_BOOKING_COPY_WEB.dayLegend,timeGroupLabel:TELEVET_BOOKING_COPY_WEB.timeHeading,periodLabels:{morning:TELEVET_BOOKING_COPY_WEB.timeMorning,afternoon:TELEVET_BOOKING_COPY_WEB.timeAfternoon,evening:TELEVET_BOOKING_COPY_WEB.timeEvening},timeLegendTemplate:TELEVET_BOOKING_COPY_WEB.timeLegendTemplate,rowTestIdPrefix:"televet-reschedule-slot",testID:"televet-reschedule-slots"}):/* @__PURE__ */jsxRuntime.jsx("div",{"data-testid":"televet-reschedule-paused",children:/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle})}),picked?/* @__PURE__ */jsxRuntime.jsx("div",{style:look.footer,children:/* @__PURE__ */jsxRuntime.jsx(TelevetButton,{label:busy?TELEVET_BOOKING_COPY_WEB.rescheduleMoving:fill(TELEVET_BOOKING_COPY_WEB.rescheduleMoveTemplate,{when:formatMoveTo(picked.startsAt)}),size:"lg",loading:busy,busyAnnouncement:TELEVET_BOOKING_COPY_WEB.rescheduleMoving,onPress:()=>pick2(picked),testID:"televet-reschedule-move"})}):null]})}function makeLook(theme){let look=televetLook(theme),{space:space,type:type}=theme;return{bar:{display:"flex",alignItems:"center",gap:14,paddingBottom:space.lg},ring:{width:44,height:44,flexShrink:0,display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0,borderRadius:"50%",borderStyle:"solid",borderWidth:1.5,borderColor:look.line,backgroundColor:look.surface,color:look.ink,cursor:"pointer",boxSizing:"border-box"},label:{margin:0,...faceCss(theme,"monoBold"),color:look.muted,fontSize:12,letterSpacing:"0.08em",textTransform:"uppercase"},head:{display:"flex",flexDirection:"column",gap:space.md,paddingBottom:space.md},title:{margin:0,...headingFaceCss(theme,"medium"),color:look.ink,fontSize:tierPx(theme,"heading",30),lineHeight:1.1,letterSpacing:"-0.03em"},now:{margin:0,display:"flex",flexWrap:"wrap",alignItems:"center",gap:10,...faceCss(theme,"regular"),color:look.muted,fontSize:type.size.body},nowPill:{display:"inline-flex",alignItems:"center",height:24,padding:"0 10px",borderRadius:999,borderStyle:"solid",borderWidth:1.5,borderColor:look.line,...faceCss(theme,"monoBold"),color:look.muted,fontSize:11.5,letterSpacing:"0.08em",textTransform:"uppercase"},footer:{paddingTop:space.lg,paddingBottom:space.lg,flexShrink:0}}}function televetScreenForRequest(request){let visitRef=request.visitRef?.trim()??"";return visitRef.length>0?/* @__PURE__ */Object.freeze({name:"visit",visitRef:visitRef,intent:request.intent??null}):TELEVET_ROOT}var TELEVET_ROOT=/* @__PURE__ */Object.freeze({name:"home"}),VISITS_ROOT=/* @__PURE__ */Object.freeze({name:"visits"}),BOOKING_ROOT=/* @__PURE__ */Object.freeze({name:"booking"});function navReducer(state,action){switch(action.type){case"push":/* @__PURE__ */
|
|
417
|
+
return Object.freeze({stack:/* @__PURE__ */Object.freeze([...state.stack,action.screen])});case"pop":return state.stack.length<=1?state:/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze(state.stack.slice(0,-1))});case"land":return state.stack[0]?.name!=="home"?state:/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze([action.screen,...state.stack.slice(1)])});default:return state}}function EverfurTelevetFlow(props){let{style:style,renderPending:renderPending,className:className,...rest}=guardHostProps(props,["onExit","onBooked","onAddPet","onRequestLocation","onFindEmergencyVet"]);/* @__PURE__ */
|
|
418
|
+
return jsxRuntime.jsx(CapabilityGate,{capability:"televet",style:style,...className!==void 0?{className:className}:{},...renderPending?{renderPending:renderPending}:{},children:/* @__PURE__ */jsxRuntime.jsx(TelevetFlowBody,{...rest,...style!==void 0?{style:style}:{}})})}function TelevetFlowBody({petRef:petRef,usState:usState,controller:controller,onBooked:onBooked,onExit:onExit,onAddPet:onAddPet,onPickMedia:onPickMedia,onAddToCalendar:onAddToCalendar,onConfirmDiscard:onConfirmDiscard,onRequestLocation:onRequestLocation,locationStatus:locationStatus,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet,onTriageReason:onTriageReason,historyMode:historyMode="memory",canJoinInApp:canJoinInApp=false,renderUnavailable:renderUnavailable,initialScreen:initialScreen,headingLevel:headingLevel2,style:style}){let styles=useBookingStyles(),[nav,dispatch]=react.useReducer(navReducer,initialScreen??TELEVET_ROOT,initial=>/* @__PURE__ */Object.freeze({stack:/* @__PURE__ */Object.freeze([initial])})),screen=nav.stack[nav.stack.length-1]??TELEVET_ROOT,depth=nav.stack.length,shownDepth=react.useRef(depth),cameBack=depth<shownDepth.current;react.useEffect(()=>{shownDepth.current=depth},[depth]);let[revision,setRevision]=react.useState(0),changed=react.useCallback(()=>setRevision(n=>n+1),[]),pushed=react.useRef(0),depthRef=react.useRef(depth);depthRef.current=depth,react.useEffect(()=>{if(historyMode!=="browser"||typeof window>"u")return;let onPopState=event=>{let restored=event.state?.efTelevet;typeof restored=="number"&&restored<depthRef.current&&(pushed.current=Math.max(0,pushed.current-1),dispatch({type:"pop"}))};return window.addEventListener("popstate",onPopState),()=>window.removeEventListener("popstate",onPopState)},[historyMode]);let push=react.useCallback(next=>{historyMode==="browser"&&typeof window<"u"&&(pushed.current+=1,window.history.pushState({efTelevet:depthRef.current+1},"")),dispatch({type:"push",screen:next})},[historyMode]),pop=react.useCallback(()=>{if(historyMode==="browser"&&typeof window<"u"&&pushed.current>0){pushed.current-=1,window.history.go(-1);return}dispatch({type:"pop"})},[historyMode]),fallback=react.useCallback(()=>renderUnavailable?renderUnavailable():/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.list,"data-testid":"televet-unavailable",children:isTelevetBookingCopyReady()?/* @__PURE__ */jsxRuntime.jsx(TelevetStateCard,{title:TELEVET_BOOKING_COPY_WEB.bookingPausedTitle}):null}),[renderUnavailable,styles.list]),leave=react.useCallback(()=>{depth>1?pop():onExit?.()},[depth,pop,onExit]),land=react.useCallback(landing=>dispatch({type:"land",screen:landing==="visits"?VISITS_ROOT:BOOKING_ROOT}),[]),booking=/* @__PURE__ */jsxRuntime.jsx(EverfurTelevetBooking,{...petRef!==void 0?{petRef:petRef}:{},...usState!==void 0?{usState:usState}:{},...controller?{controller:controller}:{},onBooked:consult=>{changed(),onBooked?.(consult)},onExit:leave,...onAddPet?{onAddPet:onAddPet}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onConfirmDiscard?{onConfirmDiscard:onConfirmDiscard}:{},...onRequestLocation?{onRequestLocation:onRequestLocation}:{},...locationStatus?{locationStatus:locationStatus}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},...onTriageReason?{onTriageReason:onTriageReason}:{},canJoinInApp:canJoinInApp,renderUnavailable:fallback,...headingLevel2!==void 0?{headingLevel:headingLevel2}:{},...style?{style:style}:{}}),visits=/* @__PURE__ */jsxRuntime.jsx(TelevetVisitsScreen,{...controller?{controller:controller}:{},revision:revision,isRoot:depth<=1,returnedTo:cameBack,onJoin:(consult,petName)=>push({name:"call",consultId:consult.consultId,clinicianName:consult.clinicianName,petName:petName}),onReschedule:consult=>push({name:"reschedule",consult:consult}),onBook:()=>push({name:"booking"}),onBack:leave,onOpenThread:target=>push({name:"thread",target:target}),onOpenSummary:consult=>push({name:"summary",consult:consult}),...style?{style:style}:{}});switch(screen.name){case"home":/* @__PURE__ */
|
|
419
|
+
return jsxRuntime.jsx(TelevetLandingScreen,{controller:controller,onLand:land,style:style});case"booking":return booking;case"visits":case"visit":return visits;case"reschedule":/* @__PURE__ */
|
|
420
|
+
return jsxRuntime.jsx(EverfurTelevetReschedule,{consult:screen.consult,...controller?{controller:controller}:{},onRescheduled:()=>{changed(),pop()},onCancel:()=>pop(),...style?{style:style}:{}});case"call":/* @__PURE__ */
|
|
421
|
+
return jsxRuntime.jsx(TelevetJoinScreen,{consultId:screen.consultId,...controller?{controller:controller}:{},...screen.clinicianName!==void 0?{clinicianName:screen.clinicianName}:{},...screen.petName!==void 0?{petName:screen.petName}:{},onLeave:()=>{changed(),leave()},...style?{style:style}:{}});case"thread":/* @__PURE__ */
|
|
422
|
+
return jsxRuntime.jsx(TelevetVetThreadScreen,{petRef:screen.target.petRef,petName:screen.target.petName,vetName:screen.target.vetName,...screen.target.ownerCanStart!==void 0?{ownerCanStart:screen.target.ownerCanStart}:{},...controller?{controller:controller}:{},onBack:()=>{changed(),leave()},onBook:()=>push({name:"booking"}),...style?{style:style}:{}});case"summary":{let summarised=screen.consult;/* @__PURE__ */
|
|
423
|
+
return jsxRuntime.jsx(TelevetVisitSummaryScreen,{consult:summarised,...controller?{controller:controller}:{},onBack:leave,onMessageVet:target=>push({name:"thread",target:target}),onBook:()=>push({name:"booking"}),...style?{style:style}:{}})}default:return assertNever(screen)}}function TelevetLandingScreen({controller:injected,onLand:onLand,style:style}){let styles=useBookingStyles(),controller=useTelevetBookingController(injected),landing=useTelevetLanding(controller);return react.useEffect(()=>{landing!=="pending"&&onLand(landing)},[landing,onLand]),/* @__PURE__ */jsxRuntime.jsxs("div",{role:"progressbar","aria-label":TELEVET_VISITS_COPY_WEB.loading,"aria-busy":"true",style:{...styles.screen,...styles.list,...style},"data-testid":"televet-landing-loading",children:[
|
|
424
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:72}),
|
|
425
|
+
/* @__PURE__ */jsxRuntime.jsx(TelevetSkeletonBlock,{height:72})]})}var EverfurTelevet=EverfurTelevetFlow;var ESCAPE_AT_KEYDOWN=/* @__PURE__ */Object.freeze({escapeAtKeyDown:true});function EverfurTelevetDialog({request:request,onClose:onClose,onAddToCalendar:onAddToCalendar,onPickMedia:onPickMedia,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet}){let theme=useEverfurTheme(),style=react.useMemo(()=>dialogStyle(theme),[theme]),channel=react.useMemo(()=>createTelevetBackChannel(),[]),onEscape=react.useCallback(()=>{channel.dispatch()||onClose()},[channel,onClose]),{dialogRef:dialogRef,onKeyDown:onKeyDown,onCancel:onCancel}=useModalDialog(true,onEscape,void 0,ESCAPE_AT_KEYDOWN),initialScreen=react.useMemo(()=>televetScreenForRequest(request),[request]);return useNamedByVisibleHeading(dialogRef),/* @__PURE__ */jsxRuntime.jsx("dialog",{ref:dialogRef,onKeyDown:onKeyDown,onCancel:onCancel,"aria-label":TELEVET_BOOKING_COPY_WEB.visit.title,"aria-modal":"true","data-testid":"everfur-televet-dialog",style:style,children:/* @__PURE__ */jsxRuntime.jsx(TelevetBackChannelContext.Provider,{value:channel,children:/* @__PURE__ */jsxRuntime.jsx(EverfurTelevet,{...request.petRef!==void 0?{petRef:request.petRef}:{},...request.usState!==void 0?{usState:request.usState}:{},initialScreen:initialScreen,onExit:onClose,...onAddToCalendar?{onAddToCalendar:onAddToCalendar}:{},...onPickMedia?{onPickMedia:onPickMedia}:{},...primaryVet?{primaryVet:primaryVet}:{},...onFindEmergencyVet?{onFindEmergencyVet:onFindEmergencyVet}:{},canJoinInApp:isEverfurDailyRegistered(),historyMode:"memory"})})})}function visuallyHidden(el){let style=el.ownerDocument.defaultView?.getComputedStyle(el);return style===void 0?false:style.position==="absolute"&&(style.clip.startsWith("rect(0")||style.width==="1px")}function useNamedByVisibleHeading(dialogRef){let baseId=react.useId();react.useEffect(()=>{let dialog=dialogRef.current;if(dialog===null)return;let minted=0,name=()=>{let heading=Array.from(dialog.querySelectorAll("h1, h2, h3, h4, h5, h6")).find(el=>(el.textContent??"").trim().length>0&&!visuallyHidden(el));if(heading===void 0){dialog.hasAttribute("aria-labelledby")&&dialog.removeAttribute("aria-labelledby");return}heading.id.length===0&&(minted+=1,heading.id=`${baseId}-title-${String(minted)}`),dialog.getAttribute("aria-labelledby")!==heading.id&&dialog.setAttribute("aria-labelledby",heading.id)};if(name(),typeof MutationObserver>"u")return;let observer=new MutationObserver(name);return observer.observe(dialog,{childList:true,subtree:true,characterData:true}),()=>observer.disconnect()},[dialogRef,baseId])}function dialogStyle(theme){let{color:color,radius:radius,space:space}=theme;return{position:"fixed",inset:0,boxSizing:"border-box",width:"100%",maxWidth:640,height:"100%",maxHeight:"100%",margin:"0 auto",padding:`${String(space.lg)}px 0`,border:0,borderRadius:radius.lg,display:"flex",flexDirection:"column",overflowY:"auto",backgroundColor:color.surface,color:color.text.primary,...slotCss(theme.slots.dialog)}}exports.BACK_LABEL=BACK_LABEL;exports.CANCELLATION_POLICY_VERSION_MAX=CANCELLATION_POLICY_VERSION_MAX;exports.CANCEL_REASON_MAX=CANCEL_REASON_MAX;exports.CONSULT_KINDS=CONSULT_KINDS;exports.CONSULT_MINUTES=CONSULT_MINUTES;exports.CONSULT_STATUSES=CONSULT_STATUSES;exports.EverfurTelevet=EverfurTelevet;exports.EverfurTelevetBooking=EverfurTelevetBooking;exports.EverfurTelevetDialog=EverfurTelevetDialog;exports.EverfurTelevetFlow=EverfurTelevetFlow;exports.EverfurTelevetReschedule=EverfurTelevetReschedule;exports.MEDIA_REFS_MAX=MEDIA_REFS_MAX;exports.NO_MEDIA_SHORTFALL=NO_MEDIA_SHORTFALL;exports.REASON_TEXT_MAX=REASON_TEXT_MAX;exports.TELEVET_BOOKING_BASE=TELEVET_BOOKING_BASE;exports.TELEVET_BOOKING_COPY=TELEVET_BOOKING_COPY;exports.TELEVET_BOOKING_COPY_WEB=TELEVET_BOOKING_COPY_WEB;exports.TELEVET_BOOKING_STEPS=TELEVET_BOOKING_STEPS;exports.TELEVET_CONSULT_PAGE_LIMIT=TELEVET_CONSULT_PAGE_LIMIT;exports.TELEVET_EMERGENCY_EXITS_WEB=TELEVET_EMERGENCY_EXITS_WEB;exports.TELEVET_JOIN_CLOSES_MINUTES_AFTER=TELEVET_JOIN_CLOSES_MINUTES_AFTER;exports.TELEVET_JOIN_OPENS_MINUTES_BEFORE=TELEVET_JOIN_OPENS_MINUTES_BEFORE;exports.TELEVET_MESSAGE_THREADS_PATH=TELEVET_MESSAGE_THREADS_PATH;exports.TERMINAL_CONSULT_STATUSES=TERMINAL_CONSULT_STATUSES;exports.TelevetBookedScreen=TelevetBookedScreen;exports.TelevetBookingChrome=TelevetBookingChrome;exports.TelevetCancelVisitForm=TelevetCancelVisitForm;exports.TelevetClinicianEmptyState=TelevetClinicianEmptyState;exports.TelevetConsentCheckbox=TelevetConsentCheckbox;exports.TelevetDayStrip=TelevetDayStrip;exports.TelevetEarlyEmergency=TelevetEarlyEmergency;exports.TelevetEmergencyExits=TelevetEmergencyExits;exports.TelevetEntitlementInterestState=TelevetEntitlementInterestState;exports.TelevetIntakeMedia=TelevetIntakeMedia;exports.TelevetJoinScreen=TelevetJoinScreen;exports.TelevetMediaDropNotice=TelevetMediaDropNotice;exports.TelevetSlotPicker=TelevetSlotPicker;exports.TelevetStateInterestAction=TelevetStateInterestAction;exports.TelevetSummaryCard=TelevetSummaryCard;exports.TelevetSummaryRow=TelevetSummaryRow;exports.TelevetVetThreadScreen=TelevetVetThreadScreen;exports.TelevetVisitSummaryScreen=TelevetVisitSummaryScreen;exports.TelevetVisitsScreen=TelevetVisitsScreen;exports.VET_MESSAGES_COPY=VET_MESSAGES_COPY;exports.VET_MESSAGE_CONTENT_MAX=VET_MESSAGE_CONTENT_MAX;exports.VET_MESSAGE_PAGE_DEFAULT=VET_MESSAGE_PAGE_DEFAULT;exports.VET_MESSAGE_PAGE_MAX=VET_MESSAGE_PAGE_MAX;exports.attestation=attestation;exports.canConfirm=canConfirm;exports.canManageTelevetVisit=canManageTelevetVisit;exports.createTelevetBookingController=createTelevetBookingController;exports.currentStep=currentStep;exports.emptyTelevetDraft=emptyTelevetDraft;exports.formatVisitRange=formatVisitRange;exports.formatWhen=formatWhen;exports.formatWhenWithDay=formatWhenWithDay;exports.hasPreviousStep=hasPreviousStep;exports.initialTelevetBookingState=initialTelevetBookingState;exports.isHoldExpired=isHoldExpired;exports.isMediaShortfallEmpty=isMediaShortfallEmpty;exports.isSkipped=isSkipped;exports.isTelevetBookingCopyReady=isTelevetBookingCopyReady;exports.isVetMessagesDark=isVetMessagesDark;exports.isVetThreadVetFirst=isVetThreadVetFirst;exports.isWellFormedStateCode=isWellFormedStateCode;exports.mediaShortfallFromUnsentPicks=mediaShortfallFromUnsentPicks;exports.parseVetCallCredential=parseVetCallCredential;exports.splitTelevetVisits=splitTelevetVisits;exports.televetBookingKey=televetBookingKey;exports.televetBookingReducer=televetBookingReducer;exports.televetBookingRefusal=televetBookingRefusal;exports.televetCancelCall=televetCancelCall;exports.televetConsultCalendarKey=televetConsultCalendarKey;exports.televetConsultCall=televetConsultCall;exports.televetDaysFromSlots=televetDaysFromSlots;exports.televetEmptyRosterCause=televetEmptyRosterCause;exports.televetEmptyRosterView=televetEmptyRosterView;exports.televetHoldCall=televetHoldCall;exports.televetJoinCall=televetJoinCall;exports.televetJoinDecision=televetJoinDecision;exports.televetJoinOpensAtMs=televetJoinOpensAtMs;exports.televetMediaShortfallLines=televetMediaShortfallLines;exports.televetRescheduleCall=televetRescheduleCall;exports.televetScreenForRequest=televetScreenForRequest;exports.televetThreadMessagesCall=televetThreadMessagesCall;exports.televetThreadReadCall=televetThreadReadCall;exports.televetVisitSummaryCall=televetVisitSummaryCall;exports.useEarlyTriage=useEarlyTriage;exports.useStateInterest=useStateInterest;exports.useTelevetBookConsult=useTelevetBookConsult;exports.useTelevetBookingAvailable=useTelevetBookingAvailable;exports.useTelevetBookingController=useTelevetBookingController;exports.useTelevetBookingEntitlement=useTelevetBookingEntitlement;exports.useTelevetCancellationPolicy=useTelevetCancellationPolicy;exports.useTelevetClinicians=useTelevetClinicians;exports.useTelevetHoldSlot=useTelevetHoldSlot;exports.useTelevetJoin=useTelevetJoin;exports.useTelevetNextSlot=useTelevetNextSlot;exports.useTelevetRescheduleConsult=useTelevetRescheduleConsult;exports.useTelevetSlots=useTelevetSlots;exports.useTelevetStatePolicy=useTelevetStatePolicy;exports.useVetThread=useVetThread;exports.useVetThreads=useVetThreads;exports.useVisitSummary=useVisitSummary;exports.validateBookingBody=validateBookingBody;exports.vetCallJoinReason=vetCallJoinReason;exports.vetCallJoinRefusal=vetCallJoinRefusal;exports.vetThreadPetRef=vetThreadPetRef;exports.withUnsentPicks=withUnsentPicks;
|