@everfur/sdk 0.4.0 → 0.5.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 +182 -0
- package/README.md +9 -8
- package/dist/{Chat-BZZ-Py5l.d.ts → Chat-BOX-03ho.d.ts} +17 -3
- package/dist/{Chat-Dq4fffIO.d.cts → Chat-TA-aTcVF.d.cts} +17 -3
- package/dist/{DepthViews-CkYri51q.d.ts → DepthViews-CgjX2AJ5.d.ts} +1 -1
- package/dist/{DepthViews-CL75jyRA.d.cts → DepthViews-Cviea-ri.d.cts} +1 -1
- package/dist/{DepthViews-BG3E25MD.d.ts → DepthViews-D2dRqWRq.d.ts} +1 -1
- package/dist/{DepthViews-B_hIypI6.d.cts → DepthViews-DSFyaSeL.d.cts} +1 -1
- package/dist/{ErrorPolicyPort-CwbfmxzJ.d.ts → ErrorPolicyPort-D22LUVrK.d.ts} +1 -1
- package/dist/{ErrorPolicyPort-CNf4uQZP.d.cts → ErrorPolicyPort-D6CybiqJ.d.cts} +1 -1
- package/dist/{EverfurResult-DN9pL2Ab.d.cts → EverfurError-DmELDpXp.d.cts} +1 -67
- package/dist/{EverfurResult-DN9pL2Ab.d.ts → EverfurError-DmELDpXp.d.ts} +1 -67
- package/dist/EverfurResult-SGvHKsCB.d.ts +69 -0
- package/dist/EverfurResult-ZtH-YV1h.d.cts +69 -0
- package/dist/animations/index.d.cts +6 -5
- package/dist/animations/index.d.ts +6 -5
- package/dist/{attachments-BrUWQYNK.d.ts → attachments-C_vtFu2f.d.ts} +7 -6
- package/dist/{attachments-D_SECjr1.d.cts → attachments-DHvnITuE.d.cts} +7 -6
- package/dist/{attachments-DpldrvIW.d.ts → attachments-oD5U2fXI.d.ts} +3 -3
- package/dist/{attachments-BorG422I.d.cts → attachments-pIdGOQfm.d.cts} +3 -3
- package/dist/{bookingCopy-CqtDYvCR.d.ts → bookingCopy-CJir9mjb.d.ts} +417 -14
- package/dist/{bookingCopy-SREvkG19.d.cts → bookingCopy-DfuA13dh.d.cts} +417 -14
- package/dist/branding-Xb_wL8N1.d.cts +212 -0
- package/dist/branding-xpQ056sM.d.ts +212 -0
- package/dist/callCopy-rDH9JTFo.d.cts +45 -0
- package/dist/callCopy-rDH9JTFo.d.ts +45 -0
- package/dist/callRoom-7wrE3RP2.d.ts +62 -0
- package/dist/callRoom-B_EqaUzx.d.cts +62 -0
- package/dist/{casesRepository-DwtZVsbj.d.cts → casesRepository-B-Eg8ZJ3.d.cts} +14 -2
- package/dist/{casesRepository-v6QczS9N.d.ts → casesRepository-DHgIYKN9.d.ts} +14 -2
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.d.cts +12 -11
- package/dist/chat/index.d.ts +12 -11
- package/dist/chat/index.js +1 -1
- package/dist/client/index.cjs +5 -5
- package/dist/client/index.d.cts +14 -12
- package/dist/client/index.d.ts +14 -12
- package/dist/client/index.js +5 -5
- package/dist/{config--Wu1Umhd.d.cts → config-ClI7QxB0.d.ts} +3 -2
- package/dist/{config-C7eb_IMD.d.ts → config-DAFbf721.d.cts} +3 -2
- package/dist/consent/index.d.cts +9 -8
- package/dist/consent/index.d.ts +9 -8
- package/dist/{context-CL3lyuy1.d.cts → context-B-dUM1Qf.d.cts} +9 -8
- package/dist/{context-CahAEha8.d.ts → context-CZbgF_OH.d.ts} +9 -8
- package/dist/{copy-DdVFDL01.d.ts → copy-CeRH3NXy.d.ts} +5 -4
- package/dist/{copy-UeUJVk8X.d.cts → copy-CneuYdrO.d.cts} +5 -4
- package/dist/core/index.cjs +9 -9
- package/dist/core/index.d.cts +19 -17
- package/dist/core/index.d.ts +19 -17
- package/dist/core/index.js +9 -9
- package/dist/{depth-D5HwcvKC.d.cts → depth-B3NFKlF9.d.cts} +6 -5
- package/dist/{depth-DvPwPuT_.d.ts → depth-DO3Ko_qs.d.ts} +6 -5
- package/dist/{entitlementRepository-B7egEdW6.d.ts → entitlementRepository-74kW5mK0.d.ts} +4 -4
- package/dist/{entitlementRepository-BpJ7tiwl.d.cts → entitlementRepository-m6zLUmiB.d.cts} +4 -4
- package/dist/{identity-C2-08BZW.d.cts → identity-C7uxGwfT.d.cts} +2 -2
- package/dist/{identity-CEi9GRFZ.d.ts → identity-CLAUq-K4.d.ts} +2 -2
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +19 -17
- package/dist/index.d.ts +19 -17
- package/dist/index.js +6 -6
- package/dist/{models-D2EUxPZY.d.cts → models-Bn2z0NNo.d.cts} +1 -1
- package/dist/{models-B-Uh2LTf.d.ts → models-DSqA5Ahs.d.ts} +1 -1
- package/dist/notifications/index.d.cts +5 -4
- package/dist/notifications/index.d.ts +5 -4
- package/dist/{pets-JVCXgRgR.d.cts → pets-BoB5B7kp.d.cts} +2 -2
- package/dist/{pets-DJv2sj2H.d.ts → pets-w4M9d-Dn.d.ts} +2 -2
- package/dist/{petsRepository-Bk6GDwLs.d.ts → petsRepository-BjKJ8UsN.d.ts} +2 -2
- package/dist/{petsRepository-B_gKbAzJ.d.cts → petsRepository-DZZoEG3r.d.cts} +2 -2
- package/dist/photo/index.d.cts +3 -2
- package/dist/photo/index.d.ts +3 -2
- package/dist/{ports-D7YW8qz9.d.ts → ports-BO3bzTJg.d.ts} +13 -6
- package/dist/{ports-BY2ph0_y.d.cts → ports-C2EVK416.d.cts} +13 -6
- package/dist/records/depth/index.d.cts +11 -10
- package/dist/records/depth/index.d.ts +11 -10
- package/dist/records/index.cjs +3 -3
- package/dist/records/index.d.cts +25 -14
- package/dist/records/index.d.ts +25 -14
- package/dist/records/index.js +3 -3
- package/dist/{requestFunnel-DFMGcluw.d.ts → requestFunnel-D7ipek3e.d.ts} +5 -4
- package/dist/{requestFunnel-BjDpqqvm.d.cts → requestFunnel-Djjwgoe9.d.cts} +5 -4
- package/dist/{runtimeTypes-w5KqBMcs.d.ts → runtimeTypes-CTL3yToK.d.ts} +7 -7
- package/dist/{runtimeTypes-gZEJu-da.d.cts → runtimeTypes-D2C9uD85.d.cts} +7 -7
- package/dist/server/events/index.cjs +1 -1
- package/dist/server/events/index.d.cts +4 -3
- package/dist/server/events/index.d.ts +4 -3
- package/dist/server/events/index.js +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.d.cts +5 -4
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.js +1 -1
- package/dist/televet/booking/index.cjs +1 -1
- package/dist/televet/booking/index.d.cts +303 -31
- package/dist/televet/booking/index.d.ts +303 -31
- package/dist/televet/booking/index.js +1 -1
- package/dist/televet/call/index.cjs +1 -1
- package/dist/televet/call/index.d.cts +25 -5
- package/dist/televet/call/index.d.ts +25 -5
- package/dist/televet/call/index.js +1 -1
- package/dist/televet/index.cjs +1 -1
- package/dist/televet/index.d.cts +41 -71
- package/dist/televet/index.d.ts +41 -71
- package/dist/televet/index.js +1 -1
- package/dist/televetGlobal-CEk0_cW9.d.cts +34 -0
- package/dist/televetGlobal-Cs9Wbqsy.d.ts +34 -0
- package/dist/testing/index.cjs +4 -4
- package/dist/testing/index.d.cts +3 -2
- package/dist/testing/index.d.ts +3 -2
- package/dist/testing/index.js +4 -4
- package/dist/testing/rn/index.cjs +1 -1
- package/dist/testing/rn/index.d.cts +13 -11
- package/dist/testing/rn/index.d.ts +13 -11
- package/dist/testing/rn/index.js +1 -1
- package/dist/testing/web/index.d.cts +14 -13
- package/dist/testing/web/index.d.ts +14 -13
- package/dist/{timelineRows-C15jxFFH.d.ts → timelineRows-7yFNK_rU.d.ts} +1 -1
- package/dist/{timelineRows-odO8g9r2.d.cts → timelineRows-CzR1T2DR.d.cts} +1 -1
- package/dist/{branding-CsRdeNwK.d.cts → tokens-CIngRkvt.d.cts} +7 -211
- package/dist/{branding-CsRdeNwK.d.ts → tokens-CIngRkvt.d.ts} +7 -211
- package/dist/{typeStyle-DmoyacDG.d.ts → typeStyle-DHJzDaUo.d.cts} +2 -1
- package/dist/{typeStyle-CKqVYD6L.d.cts → typeStyle-YPS_MXeI.d.ts} +2 -1
- package/dist/{useRecordsDepth-C6rjEaLn.d.cts → useRecordsDepth-Bnw36jPr.d.cts} +24 -5
- package/dist/{useRecordsDepth-crhBllQK.d.ts → useRecordsDepth-DFF7Faxx.d.ts} +24 -5
- package/dist/{useVetVisit-CjmMa896.d.ts → useVetVisit-BsjoDO-n.d.ts} +21 -6
- package/dist/{useVetVisit-Bc84hWUU.d.cts → useVetVisit-Ds8f1peV.d.cts} +21 -6
- package/dist/video/index.d.cts +3 -2
- package/dist/video/index.d.ts +3 -2
- package/dist/{view-Bxwxp4xD.d.ts → view-BqcOYFTr.d.ts} +5 -4
- package/dist/{view-DyitEO0m.d.cts → view-CaJs8WFH.d.cts} +5 -4
- package/dist/web/consent/index.d.cts +9 -8
- package/dist/web/consent/index.d.ts +9 -8
- package/dist/web/index.cjs +10 -10
- package/dist/web/index.d.cts +42 -19
- package/dist/web/index.d.ts +42 -19
- package/dist/web/index.js +10 -10
- package/dist/web/notifications/index.d.cts +7 -6
- package/dist/web/notifications/index.d.ts +7 -6
- package/dist/web/records/depth/index.cjs +2 -2
- package/dist/web/records/depth/index.d.cts +11 -10
- package/dist/web/records/depth/index.d.ts +11 -10
- package/dist/web/records/depth/index.js +2 -2
- package/dist/web/records/index.cjs +3 -3
- package/dist/web/records/index.d.cts +53 -35
- package/dist/web/records/index.d.ts +53 -35
- package/dist/web/records/index.js +3 -3
- package/dist/web/televet/booking/index.cjs +2 -1
- package/dist/web/televet/booking/index.d.cts +453 -32
- package/dist/web/televet/booking/index.d.ts +453 -32
- package/dist/web/televet/booking/index.js +2 -1
- package/dist/web/televet/call/index.cjs +1 -1
- package/dist/web/televet/call/index.d.cts +3 -1
- package/dist/web/televet/call/index.d.ts +3 -1
- package/dist/web/televet/call/index.js +1 -1
- package/dist/web/televet/index.cjs +1 -1
- package/dist/web/televet/index.d.cts +40 -74
- package/dist/web/televet/index.d.ts +40 -74
- package/dist/web/televet/index.js +1 -1
- package/package.json +3 -2
- package/dist/callCopy-DoQKG3-L.d.cts +0 -40
- package/dist/callCopy-DoQKG3-L.d.ts +0 -40
|
@@ -2,17 +2,160 @@ import { ReactNode, ComponentType, ReactElement } from 'react';
|
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { P as PetRef } from '../../ids-B2GAAifq.js';
|
|
4
4
|
export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
|
|
5
|
-
import { T as
|
|
6
|
-
export { C as CANCELLATION_POLICY_VERSION_MAX,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
import { T as TelevetEmptyRosterCause, a as TelevetStateInterestAction$1, b as TelevetMediaShortfall, c as TelevetConsult, d as TelevetBookingStep, e as TelevetBookingController, f as TelevetTriageRead, g as TelevetStateInterestWrite, h as TelevetCancelReceipt, i as TelevetSlot } from '../../bookingCopy-CJir9mjb.js';
|
|
6
|
+
export { C as CANCELLATION_POLICY_VERSION_MAX, j as CANCEL_REASON_MAX, k as CONSULT_KINDS, l as CONSULT_MINUTES, m as CONSULT_STATUSES, n as ConsultKind, o as ConsultStatus, M as MEDIA_REFS_MAX, N as NO_MEDIA_SHORTFALL, R as REASON_TEXT_MAX, p as TELEVET_BOOKING_BASE, q as TELEVET_BOOKING_COPY, r as TELEVET_BOOKING_STEPS, s as TELEVET_CONSULT_PAGE_LIMIT, t as TELEVET_JOIN_CLOSES_MINUTES_AFTER, u as TELEVET_JOIN_OPENS_MINUTES_BEFORE, v as TERMINAL_CONSULT_STATUSES, w as TelevetBookingAction, x as TelevetBookingBody, y as TelevetBookingContext, z as TelevetBookingControllerDeps, A as TelevetBookingCopy, B as TelevetBookingDraft, D as TelevetBookingEntitlement, E as TelevetBookingFailure, F as TelevetBookingRefusal, G as TelevetBookingState, H as TelevetCancellationPolicy, I as TelevetClinician, J as TelevetEarlyTriage, K as TelevetEmptyRosterView, L as TelevetJoinReadiness, O as TelevetJoinState, P as TelevetMediaRefusal, Q as TelevetRead, S as TelevetSlotHold, U as TelevetStateInterestReason, V as TelevetStatePolicy, W as TelevetTriageVerdict, X as TelevetWrite, Y as attestation, Z as canConfirm, _ as canManageTelevetVisit, $ as createTelevetBookingController, a0 as currentStep, a1 as emptyTelevetDraft, a2 as formatVisitRange, a3 as formatWhen, a4 as formatWhenWithDay, a5 as hasPreviousStep, a6 as initialTelevetBookingState, a7 as isHoldExpired, a8 as isMediaShortfallEmpty, a9 as isSkipped, aa as isTelevetBookingCopyReady, ab as isWellFormedStateCode, ac as mediaShortfallFromUnsentPicks, ad as splitTelevetVisits, ae as televetBookingKey, af as televetBookingReducer, ag as televetBookingRefusal, ah as televetCancelCall, ai as televetConsultCall, aj as televetEmptyRosterCause, ak as televetEmptyRosterView, al as televetHoldCall, am as televetJoinCall, an as televetJoinOpensAtMs, ao as televetJoinReadiness, ap as televetMediaShortfallLines, aq as televetRescheduleCall, ar as useEarlyTriage, as as useStateInterest, at as useTelevetBookConsult, au as useTelevetBookingAvailable, av as useTelevetBookingController, aw as useTelevetBookingEntitlement, ax as useTelevetCancellationPolicy, ay as useTelevetClinicians, az as useTelevetHoldSlot, aA as useTelevetJoin, aB as useTelevetNextSlot, aC as useTelevetRescheduleConsult, aD as useTelevetSlots, aE as useTelevetStatePolicy, aF as validateBookingBody, aG as withUnsentPicks } from '../../bookingCopy-CJir9mjb.js';
|
|
7
|
+
import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.js';
|
|
8
|
+
import { E as EverfurTelevetFlowRequest } from '../../televetGlobal-Cs9Wbqsy.js';
|
|
9
|
+
export { b as VetCallCredential, c as VetCallJoinRefusal, d as VetCallLimits, p as parseVetCallCredential, v as vetCallJoinReason, e as vetCallJoinRefusal } from '../../callRoom-7wrE3RP2.js';
|
|
10
|
+
export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.js';
|
|
11
|
+
export { E as EverfurResult } from '../../EverfurResult-SGvHKsCB.js';
|
|
12
|
+
export { W as WidgetPet } from '../../petsRepository-BjKJ8UsN.js';
|
|
13
|
+
import '../../requestFunnel-D7ipek3e.js';
|
|
14
|
+
import '../../ErrorPolicyPort-D22LUVrK.js';
|
|
15
|
+
import '../../config-ClI7QxB0.js';
|
|
16
|
+
import '../../identity-CLAUq-K4.js';
|
|
13
17
|
import '../../TelemetryPort-BDNr00hu.js';
|
|
14
18
|
import '../../profile-CSs1wlXT.js';
|
|
15
19
|
|
|
20
|
+
/**
|
|
21
|
+
* The pet's own clinic, when the HOST holds it.
|
|
22
|
+
*
|
|
23
|
+
* NOT READ FROM THE WIRE, and this is the one prop on this surface that could be mistaken for a gap. The
|
|
24
|
+
* consumer reads `GET /pets/{pet_id}/primary-vet` (TelevetEarlyEmergency.tsx:54); the partner plane has no
|
|
25
|
+
* primary-vet concept at all, so there is nothing for the SDK to read. A partner that already holds its
|
|
26
|
+
* customer's clinic can pass it and get the consumer's exact row; absent, the row is simply not drawn, which
|
|
27
|
+
* is what the consumer does for a pet with no clinic on file, a read that failed, or one still in flight
|
|
28
|
+
* (TelevetEarlyEmergency.tsx:28-30).
|
|
29
|
+
*
|
|
30
|
+
* NO NUMBER IS EVER INVENTED FOR THIS SCREEN. `dial` is the host's own action, not a `tel:` this file
|
|
31
|
+
* assembles, so the SDK never parses a phone number back out of a displayed line.
|
|
32
|
+
*/
|
|
33
|
+
interface TelevetPrimaryVet {
|
|
34
|
+
/** The clinic or the vet's name. Shown under the title; absent, the title stands alone. */
|
|
35
|
+
readonly detail?: string | null;
|
|
36
|
+
/**
|
|
37
|
+
* Places the call. ABSENT MEANS THE CARD IS NOT PRESSABLE: the consumer names the clinic without a dial
|
|
38
|
+
* action rather than inventing one when the directory holds no number (TelevetEarlyEmergency.tsx:107-113).
|
|
39
|
+
*/
|
|
40
|
+
readonly dial?: (() => void) | undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* THE EXIT ROWS, on both places the warning is drawn: in place of Describe and at Confirm. The consumer mobile
|
|
44
|
+
* screen's order (TelevetEarlyEmergency.tsx:73-75 and :91): find an emergency vet, then the pet's own clinic.
|
|
45
|
+
* Poison control is NOT here, which is the mobile app's own decision (its fee line is a claim about a third
|
|
46
|
+
* party's charge, served there as a versioned document); the web port shows it because the web app does.
|
|
47
|
+
*/
|
|
48
|
+
declare function TelevetEmergencyExits({ petName, primaryVet, onFindEmergencyVet, }: {
|
|
49
|
+
readonly petName?: string | null | undefined;
|
|
50
|
+
readonly primaryVet?: TelevetPrimaryVet | null | undefined;
|
|
51
|
+
readonly onFindEmergencyVet?: (() => void) | undefined;
|
|
52
|
+
}): ReactNode;
|
|
53
|
+
|
|
54
|
+
interface TelevetEarlyEmergencyProps {
|
|
55
|
+
/** The pet's name, for the primary-vet row. Null drops the row, as the consumer does. */
|
|
56
|
+
readonly petName?: string | null;
|
|
57
|
+
readonly primaryVet?: TelevetPrimaryVet | null;
|
|
58
|
+
/**
|
|
59
|
+
* The host's own emergency-vet locator. The consumer's row opens a map search (`FindAVetButton`); the SDK
|
|
60
|
+
* opens nothing outside the app, so the row renders only when the host can take the member somewhere itself.
|
|
61
|
+
*/
|
|
62
|
+
readonly onFindEmergencyVet?: (() => void) | undefined;
|
|
63
|
+
/** "I have handled this, keep booking". The ONLY way past this screen. */
|
|
64
|
+
readonly onContinue: () => void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* THE EMERGENCY WARNING, IN PLACE OF DESCRIBE, when the classifier says the owner's words may be an
|
|
68
|
+
* emergency. This is the clinical-safety surface on this flow.
|
|
69
|
+
*
|
|
70
|
+
* THE SAME WORDS AND THE SAME ACTIONS AS THE WARNING AT CONFIRM (`COPY.emergency`), which is what makes the
|
|
71
|
+
* two positions one question rather than two: the review step's `televet-review-emergency` branch renders the
|
|
72
|
+
* same title, the same lede and the same acknowledgement label.
|
|
73
|
+
*
|
|
74
|
+
* ── IT CANNOT BE SKIPPED PAST, AND THAT IS A PROPERTY OF THE CONTAINER, NOT OF THIS FILE ────────────────
|
|
75
|
+
* Three things hold it, all in `BookingContainer`:
|
|
76
|
+
* 1. It REPLACES the intake step while `triage.open` is true, so there is no Continue behind it and no
|
|
77
|
+
* scroll that reaches one. It is not an overlay over a live form.
|
|
78
|
+
* 2. The chrome's Back closes the WARNING and returns to the words, without recording an acknowledgement,
|
|
79
|
+
* so leaving is going back to edit rather than going forward (mobile's own rule,
|
|
80
|
+
* TelevetBookingContainer.tsx:1096-1102).
|
|
81
|
+
* 3. `emergency_acknowledged` is tied to the EXACT WORDS it was answered for, so editing the reason after
|
|
82
|
+
* acknowledging asks the question again rather than carrying a standing override.
|
|
83
|
+
*
|
|
84
|
+
* WHAT IS NOT HERE: the board's ER row and the poison-control row. Neither may be drawn without a verified
|
|
85
|
+
* number, and the consumer withholds both for the same reason (`COPY.emergency`'s own note). The lede no
|
|
86
|
+
* longer tells the member to "call one of these first", because that sentence was authored into this SDK and
|
|
87
|
+
* pointed at rows that are not on screen; see the copy deck.
|
|
88
|
+
*/
|
|
89
|
+
declare function TelevetEarlyEmergency({ petName, primaryVet, onFindEmergencyVet, onContinue, }: TelevetEarlyEmergencyProps): ReactNode;
|
|
90
|
+
interface TelevetStateInterestActionProps {
|
|
91
|
+
/** Null renders NOTHING. See this file's header: no seam, no control. */
|
|
92
|
+
readonly action: TelevetStateInterestAction$1 | null;
|
|
93
|
+
readonly testIDPrefix: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* ASK TO BE TOLD WHEN THE FACT ON SCREEN CHANGES. Presentation only: the caller decides whether this state
|
|
97
|
+
* is a licensure gap, and this control renders the write's lifecycle without ever treating a failure as a
|
|
98
|
+
* join (ported from TelevetStateInterestAction.tsx:15-55).
|
|
99
|
+
*/
|
|
100
|
+
declare function TelevetStateInterestAction({ action, testIDPrefix, }: TelevetStateInterestActionProps): ReactNode;
|
|
101
|
+
interface TelevetClinicianEmptyStateProps {
|
|
102
|
+
/** Why the roster is empty. Picks which sentence is TRUE; see `clinicianEmptyState.ts`. */
|
|
103
|
+
readonly cause: TelevetEmptyRosterCause;
|
|
104
|
+
/** Re-reads the roster. Rendered only when the cause is one a retry could change. */
|
|
105
|
+
readonly onRetry?: (() => void) | undefined;
|
|
106
|
+
/** The interest write's lifecycle, or null. Null renders no control. */
|
|
107
|
+
readonly stateInterest?: TelevetStateInterestAction$1 | null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* THE TERMINAL STATE FOR A RESOLVED, STATE-SCOPED EMPTY CLINICIAN ROSTER.
|
|
111
|
+
*
|
|
112
|
+
* Network state belongs to the container; this component only presents the actions it is given, which is the
|
|
113
|
+
* consumer's own division (TelevetClinicianEmptyState.tsx:11-14).
|
|
114
|
+
*
|
|
115
|
+
* THE RETRY FOLLOWS THE CAUSE, NOT THE SCREEN. On a licensure gap there is no retry at all, because the
|
|
116
|
+
* answer will not change by evening; on a dark surface there is one, because the read may yet work. That
|
|
117
|
+
* decision is in `televetEmptyRosterView` so both platforms cannot disagree about it.
|
|
118
|
+
*/
|
|
119
|
+
declare function TelevetClinicianEmptyState({ cause, onRetry, stateInterest, }: TelevetClinicianEmptyStateProps): ReactNode;
|
|
120
|
+
interface TelevetEntitlementInterestStateProps {
|
|
121
|
+
/**
|
|
122
|
+
* Opens the state-scoped roster read and NOTHING ELSE. Absent, the card stands alone.
|
|
123
|
+
*
|
|
124
|
+
* It never opens clinician selection, slots or the review: the consumer's docblock is explicit that this
|
|
125
|
+
* exists only because an empty licensed roster can lead to the state-interest action
|
|
126
|
+
* (TelevetEntitlementInterestState.tsx:9-15).
|
|
127
|
+
*/
|
|
128
|
+
readonly onCheckAvailability?: (() => void) | undefined;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* THE SUBSCRIPTION TRUTH WITH THE ONE DELIBERATELY NON-BOOKING ESCAPE HATCH.
|
|
132
|
+
*
|
|
133
|
+
* WHAT CHANGED FROM WHAT THIS SURFACE HAD. The container already rendered `confirmNotEntitled` in a bare
|
|
134
|
+
* card with no action, on the reasoning that "nothing the owner presses inside the booking flow grants an
|
|
135
|
+
* entitlement". That reasoning is correct and is not what this adds: the escape hatch does not grant
|
|
136
|
+
* anything, it reads the roster, and it exists because the member may be in a state where no clinician is
|
|
137
|
+
* licensed at all - which is a fact they are owed regardless of what they are entitled to, and the one route
|
|
138
|
+
* from this screen to the interest write.
|
|
139
|
+
*/
|
|
140
|
+
declare function TelevetEntitlementInterestState({ onCheckAvailability, }: TelevetEntitlementInterestStateProps): ReactNode;
|
|
141
|
+
interface TelevetMediaDropNoticeProps {
|
|
142
|
+
readonly shortfall: TelevetMediaShortfall;
|
|
143
|
+
readonly testIDPrefix: string;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* WHAT HAPPENED TO THE OWNER'S ATTACHMENTS, one line per cause.
|
|
147
|
+
*
|
|
148
|
+
* MOUNTED ON BOTH THE REVIEW STEP AND THE BOOKED CONFIRMATION, and that is the point rather than a
|
|
149
|
+
* duplication. The consumer moved it after finding it only on review, which unmounts the instant the booking
|
|
150
|
+
* succeeds: "on the common path the owner saw it for as long as the Confirm spinner ran and never again. The
|
|
151
|
+
* confirmation is where a 'your photo did not reach the vet' line actually has to be read"
|
|
152
|
+
* (MediaDropNotice.tsx:14-19).
|
|
153
|
+
*
|
|
154
|
+
* RENDERS NOTHING WHEN THERE IS NOTHING TO SAY, so it is mounted unconditionally and the caller needs no
|
|
155
|
+
* branch of its own.
|
|
156
|
+
*/
|
|
157
|
+
declare function TelevetMediaDropNotice({ shortfall, testIDPrefix, }: TelevetMediaDropNoticeProps): ReactNode;
|
|
158
|
+
|
|
16
159
|
/** The calendar entry a booked visit asks the host to write. */
|
|
17
160
|
interface TelevetCalendarEvent {
|
|
18
161
|
/**
|
|
@@ -115,19 +258,6 @@ interface TelevetIntakeMediaProps {
|
|
|
115
258
|
}
|
|
116
259
|
declare function TelevetIntakeMedia({ media, onChange, onPickMedia }: TelevetIntakeMediaProps): ReactNode;
|
|
117
260
|
|
|
118
|
-
/**
|
|
119
|
-
* Why a booking did not complete.
|
|
120
|
-
*
|
|
121
|
-
* `not_entitled` is separated from `failed` because the two need opposite affordances: a transient failure
|
|
122
|
-
* invites a retry, and a 402 must not. `unavailable` is separated from both because no retry can succeed.
|
|
123
|
-
*/
|
|
124
|
-
type TelevetBookingFailure = 'taken' | 'expired' | 'failed' | 'not_entitled'
|
|
125
|
-
/** The remedy is a DIFFERENT VET, not a different time: re-picking a slot with the same clinician refuses again. */
|
|
126
|
-
| 'clinician_unavailable'
|
|
127
|
-
/** Per-owner caps. The remedy is WAITING, so this must never render as an invitation to press again. */
|
|
128
|
-
| 'rate_limited'
|
|
129
|
-
/** The partner booking surface is not served here. The remedy is the hosted visit, not a retry. */
|
|
130
|
-
| 'unavailable' | null;
|
|
131
261
|
/** What the host can tell us about a location it could not resolve, so the right card renders. */
|
|
132
262
|
type TelevetLocationStatus = 'unknown' | 'blocked' | 'unavailable';
|
|
133
263
|
interface EverfurTelevetBookingProps {
|
|
@@ -152,6 +282,39 @@ interface EverfurTelevetBookingProps {
|
|
|
152
282
|
readonly onRequestLocation?: () => void;
|
|
153
283
|
/** Why the host has no state for us, so the right card renders. */
|
|
154
284
|
readonly locationStatus?: TelevetLocationStatus;
|
|
285
|
+
/**
|
|
286
|
+
* THE EMERGENCY TRIAGE READ, asked after Describe rather than only at Confirm.
|
|
287
|
+
*
|
|
288
|
+
* ABSENT MEANS NO EARLY QUESTION, and the flow behaves exactly as it did before: straight from the
|
|
289
|
+
* description to the vet, with the server's own `emergency_ack_required` refusal still waiting at Confirm.
|
|
290
|
+
* That is not a degraded mode, it is the consumer app's own rule for a triage read that could not answer
|
|
291
|
+
* (`useEarlyTriage`): a failed pre-read costs the member the screen's early position, never the check.
|
|
292
|
+
*
|
|
293
|
+
* IT IS A SEAM BECAUSE `POST /widget/v1/televet/consults/triage` IS NOT SERVED. Verified on EFBackend main
|
|
294
|
+
* on 2026-09-22 against the route decorators under services/api/app/domains/partner_televet. A partner
|
|
295
|
+
* whose own stack can classify free text may wire it; nothing here invents a verdict.
|
|
296
|
+
*/
|
|
297
|
+
readonly onTriageReason?: TelevetTriageRead;
|
|
298
|
+
/**
|
|
299
|
+
* THE STATE-INTEREST WRITE: the one way out of "we have no vet licensed in your state".
|
|
300
|
+
*
|
|
301
|
+
* ABSENT MEANS THE CONTROL DOES NOT RENDER, which is the consumer's own behaviour for a null action and is
|
|
302
|
+
* deliberate rather than a gap. `POST /widget/v1/televet/state-interest` does not exist on the partner
|
|
303
|
+
* plane at all (verified with the route decorators above, and unlike the booking routes it is not in the
|
|
304
|
+
* agreed in-flight surface either), so a button here would post to a 404 and tell the member their one way
|
|
305
|
+
* out did not save, every time they pressed it.
|
|
306
|
+
*/
|
|
307
|
+
readonly onStateInterest?: TelevetStateInterestWrite;
|
|
308
|
+
/**
|
|
309
|
+
* THE PET'S OWN CLINIC, for the emergency screen's one exit row.
|
|
310
|
+
*
|
|
311
|
+
* The consumer reads `GET /pets/{pet_id}/primary-vet`; the partner wire has no primary-vet concept, so a
|
|
312
|
+
* host that already holds its customer's clinic supplies it here and gets the consumer's exact row. Absent,
|
|
313
|
+
* the row is not drawn, which is what the consumer does for a pet with no clinic on file.
|
|
314
|
+
*/
|
|
315
|
+
readonly primaryVet?: TelevetPrimaryVet | null;
|
|
316
|
+
/** The host's own emergency-vet locator. Absent, the emergency screens draw no find-a-vet row. */
|
|
317
|
+
readonly onFindEmergencyVet?: () => void;
|
|
155
318
|
/**
|
|
156
319
|
* Has the host PROVEN it can host the call in app? Defaults to false.
|
|
157
320
|
*
|
|
@@ -161,8 +324,8 @@ interface EverfurTelevetBookingProps {
|
|
|
161
324
|
/**
|
|
162
325
|
* What to render when the partner booking surface is not served for this tenant.
|
|
163
326
|
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
327
|
+
* Absent, the paused card, inside the chrome whose Close is the way out. Nothing leaves the app by default;
|
|
328
|
+
* a host that wants the hosted visit offered here passes `() => <VetVisitButton prefer="redirect" />`.
|
|
166
329
|
*/
|
|
167
330
|
readonly renderUnavailable?: () => ReactNode;
|
|
168
331
|
readonly style?: StyleProp<ViewStyle>;
|
|
@@ -171,12 +334,44 @@ interface EverfurTelevetBookingProps {
|
|
|
171
334
|
declare function EverfurTelevetBooking(props: EverfurTelevetBookingProps): ReactNode;
|
|
172
335
|
|
|
173
336
|
/** The screens of the televet stack. */
|
|
174
|
-
type TelevetScreen =
|
|
337
|
+
type TelevetScreen =
|
|
338
|
+
/** Where a vet entry lands: the visits when one is still ahead, otherwise the booking. The default root. */
|
|
339
|
+
{
|
|
340
|
+
readonly name: 'home';
|
|
341
|
+
} | {
|
|
175
342
|
readonly name: 'booking';
|
|
343
|
+
}
|
|
344
|
+
/** The member's visits, upcoming and past. */
|
|
345
|
+
| {
|
|
346
|
+
readonly name: 'visits';
|
|
347
|
+
}
|
|
348
|
+
/** One visit before its call: the time, the vet, the join, the move and the cancel. */
|
|
349
|
+
| {
|
|
350
|
+
readonly name: 'consult';
|
|
351
|
+
readonly consult: TelevetConsult;
|
|
176
352
|
} | {
|
|
177
353
|
readonly name: 'reschedule';
|
|
178
354
|
readonly consult: TelevetConsult;
|
|
355
|
+
}
|
|
356
|
+
/** Mint the room credential for this consult and join it, behind the recording notice. */
|
|
357
|
+
| {
|
|
358
|
+
readonly name: 'call';
|
|
359
|
+
readonly consultId: string;
|
|
360
|
+
readonly clinicianName?: string | null | undefined;
|
|
361
|
+
readonly petName?: string | null | undefined;
|
|
362
|
+
}
|
|
363
|
+
/** A visit the member already has, as a tapped reminder names it. Opens the visits. */
|
|
364
|
+
| {
|
|
365
|
+
readonly name: 'visit';
|
|
366
|
+
readonly visitRef: string;
|
|
367
|
+
readonly intent: VetVisitIntent | null;
|
|
179
368
|
};
|
|
369
|
+
/**
|
|
370
|
+
* The screen a request opens on: the visit it names, or the landing (the visits when one is ahead, otherwise
|
|
371
|
+
* a new booking). What `EverfurTelevetHost` and a partner's own presenter both use, so the two cannot open the
|
|
372
|
+
* same request on different screens.
|
|
373
|
+
*/
|
|
374
|
+
declare function televetScreenForRequest(request: EverfurTelevetFlowRequest): TelevetScreen;
|
|
180
375
|
interface EverfurTelevetProps {
|
|
181
376
|
/** The pet the visit is for. Seeds the draft; a one-pet roster skips the picker entirely. */
|
|
182
377
|
readonly petRef?: PetRef | null;
|
|
@@ -193,6 +388,21 @@ interface EverfurTelevetProps {
|
|
|
193
388
|
readonly onConfirmDiscard?: TelevetDiscardConfirm;
|
|
194
389
|
readonly onRequestLocation?: () => void;
|
|
195
390
|
readonly locationStatus?: TelevetLocationStatus;
|
|
391
|
+
/**
|
|
392
|
+
* THE PET'S OWN CLINIC, for the emergency screen's exit row. The partner wire has no primary-vet concept,
|
|
393
|
+
* so a host that holds its customer's clinic passes it here and gets the consumer's exact row.
|
|
394
|
+
*/
|
|
395
|
+
readonly primaryVet?: TelevetPrimaryVet | null;
|
|
396
|
+
/**
|
|
397
|
+
* THE EMERGENCY SCREEN'S "Find an emergency vet near you" ROW. The SDK has no clinic directory and opens
|
|
398
|
+
* nothing outside the app, so the row renders only when the host can take the member to one of its own.
|
|
399
|
+
*/
|
|
400
|
+
readonly onFindEmergencyVet?: () => void;
|
|
401
|
+
/**
|
|
402
|
+
* The emergency question asked after Describe. Absent, the question is asked at Confirm by the server, as
|
|
403
|
+
* it is today: the partner plane serves no triage route. See `EverfurTelevetBooking`.
|
|
404
|
+
*/
|
|
405
|
+
readonly onTriageReason?: TelevetTriageRead;
|
|
196
406
|
/**
|
|
197
407
|
* Has the host installed the native video modules and wired the call surface? Defaults to FALSE.
|
|
198
408
|
*
|
|
@@ -200,23 +410,85 @@ interface EverfurTelevetProps {
|
|
|
200
410
|
*/
|
|
201
411
|
readonly canJoinInApp?: boolean;
|
|
202
412
|
/**
|
|
203
|
-
* Replace
|
|
413
|
+
* Replace what is shown when the in-app booking surface is not served for this tenant.
|
|
204
414
|
*
|
|
205
|
-
* The default is the
|
|
206
|
-
*
|
|
207
|
-
*
|
|
415
|
+
* The default is the paused card inside the booking chrome, whose Close is the way out: nothing leaves the
|
|
416
|
+
* app. A partner that wants the hosted visit offered here opts in explicitly:
|
|
417
|
+
* `renderUnavailable={() => <VetVisitButton prefer="redirect" />}`.
|
|
208
418
|
*/
|
|
209
419
|
readonly renderUnavailable?: () => ReactNode;
|
|
210
|
-
/** The screen the flow starts on; the booking
|
|
420
|
+
/** The screen the flow starts on; `home` (the visits when one is ahead, otherwise booking) when omitted. */
|
|
211
421
|
readonly initialScreen?: TelevetScreen;
|
|
212
422
|
readonly style?: StyleProp<ViewStyle>;
|
|
213
423
|
/** Your own placeholder while the entitlement verdict is pending on a cold mount. */
|
|
214
424
|
readonly renderPending?: () => ReactNode;
|
|
215
425
|
}
|
|
216
426
|
declare function EverfurTelevetFlow(props: EverfurTelevetProps): ReactNode;
|
|
217
|
-
/** The public prebuilt televet surface: the flow,
|
|
427
|
+
/** The public prebuilt televet surface: the flow, landing on the visits or the booking. */
|
|
218
428
|
declare const EverfurTelevet: typeof EverfurTelevetFlow;
|
|
219
429
|
|
|
430
|
+
interface EverfurTelevetModalProps {
|
|
431
|
+
/** What was opened: the pet and state for a booking, or the visit a reminder named. */
|
|
432
|
+
readonly request: EverfurTelevetFlowRequest;
|
|
433
|
+
/** Close the modal. Called by the flow's own exits and by a back press no screen handled. */
|
|
434
|
+
readonly onClose: () => void;
|
|
435
|
+
}
|
|
436
|
+
/** The in-app vet visit in a full-screen modal. */
|
|
437
|
+
declare function EverfurTelevetModal({ request, onClose }: EverfurTelevetModalProps): ReactNode;
|
|
438
|
+
|
|
439
|
+
interface TelevetJoinScreenProps {
|
|
440
|
+
/** The consult to join. */
|
|
441
|
+
readonly consultId: string;
|
|
442
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
443
|
+
readonly controller?: TelevetBookingController | undefined;
|
|
444
|
+
/** Shown in the lobby while the clinician has not joined. Never invented. */
|
|
445
|
+
readonly clinicianName?: string | null | undefined;
|
|
446
|
+
/** The pet's name for the lobby's prep line. */
|
|
447
|
+
readonly petName?: string | null | undefined;
|
|
448
|
+
/** The way out: the member left the call, or pressed Leave on the notice or a refusal. */
|
|
449
|
+
readonly onLeave: () => void;
|
|
450
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
451
|
+
}
|
|
452
|
+
/** Mint the room credential for one consult and join it in the app. */
|
|
453
|
+
declare function TelevetJoinScreen({ consultId, controller: injected, clinicianName, petName, onLeave, style }: TelevetJoinScreenProps): ReactNode;
|
|
454
|
+
|
|
455
|
+
interface TelevetVisitsScreenProps {
|
|
456
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
457
|
+
readonly controller?: TelevetBookingController | undefined;
|
|
458
|
+
/** Open one visit: its time, its vet, its join, its move and its cancel. */
|
|
459
|
+
readonly onOpenVisit: (consult: TelevetConsult) => void;
|
|
460
|
+
/** Start a new booking. Absent, the book card and the empty state's button are omitted, never inert. */
|
|
461
|
+
readonly onBook?: (() => void) | undefined;
|
|
462
|
+
/** The chevron: back to where the member came from, or out of the flow from its first screen. */
|
|
463
|
+
readonly onBack: () => void;
|
|
464
|
+
/** Bumped by the flow after a booking, a move, a cancel or a call, so the list is read again. */
|
|
465
|
+
readonly revision?: number | undefined;
|
|
466
|
+
/** Injected by tests, so the split can sit on either side of a window. */
|
|
467
|
+
readonly nowMs?: number | undefined;
|
|
468
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
469
|
+
}
|
|
470
|
+
declare function TelevetVisitsScreen({ controller: injected, onOpenVisit, onBook, onBack, revision, nowMs, style, }: TelevetVisitsScreenProps): ReactNode;
|
|
471
|
+
|
|
472
|
+
interface TelevetConsultScreenProps {
|
|
473
|
+
/** The visit, as the list that opened it read it. Re-read on mount; shown while the re-read is in flight. */
|
|
474
|
+
readonly consult: TelevetConsult;
|
|
475
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
476
|
+
readonly controller?: TelevetBookingController | undefined;
|
|
477
|
+
/** Join the visit: the flow mints the credential and opens the call behind the recording notice. */
|
|
478
|
+
readonly onJoin: (consult: TelevetConsult, petName: string | null) => void;
|
|
479
|
+
/** Move the visit. Absent, the control is omitted rather than rendered inert. */
|
|
480
|
+
readonly onReschedule?: ((consult: TelevetConsult) => void) | undefined;
|
|
481
|
+
/** Called after the server accepted a cancellation, so the flow can read the visits again. */
|
|
482
|
+
readonly onCancelled?: ((receipt: TelevetCancelReceipt) => void) | undefined;
|
|
483
|
+
readonly onBack: () => void;
|
|
484
|
+
/** Bumped by the flow after a move or a call, so the visit is read again. */
|
|
485
|
+
readonly revision?: number | undefined;
|
|
486
|
+
/** Injected by tests. Left undefined in the app so the screen uses a clock that moves. */
|
|
487
|
+
readonly nowMs?: number | undefined;
|
|
488
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
489
|
+
}
|
|
490
|
+
declare function TelevetConsultScreen({ consult: opened, controller: injected, onJoin, onReschedule, onCancelled, onBack, revision, nowMs, style, }: TelevetConsultScreenProps): ReactNode;
|
|
491
|
+
|
|
220
492
|
interface EverfurTelevetRescheduleProps {
|
|
221
493
|
/** The consult being moved. Null while the host is still loading it. */
|
|
222
494
|
readonly consult: TelevetConsult | null;
|
|
@@ -291,4 +563,4 @@ declare function TelevetSummaryCard({ children, testID }: {
|
|
|
291
563
|
readonly testID?: string;
|
|
292
564
|
}): ReactNode;
|
|
293
565
|
|
|
294
|
-
export { BACK_LABEL, EverfurTelevet, EverfurTelevetBooking, type EverfurTelevetBookingProps, EverfurTelevetFlow, type EverfurTelevetProps, EverfurTelevetReschedule, type EverfurTelevetRescheduleProps, PetRef, TelevetBookedScreen, type TelevetBookedScreenProps, TelevetBookingChrome, type TelevetBookingChromeProps, TelevetBookingController,
|
|
566
|
+
export { BACK_LABEL, EverfurTelevet, EverfurTelevetBooking, type EverfurTelevetBookingProps, EverfurTelevetFlow, EverfurTelevetFlowRequest, EverfurTelevetModal, type EverfurTelevetModalProps, type EverfurTelevetProps, EverfurTelevetReschedule, type EverfurTelevetRescheduleProps, PetRef, TelevetBookedScreen, type TelevetBookedScreenProps, TelevetBookingChrome, type TelevetBookingChromeProps, TelevetBookingController, TelevetBookingStep, type TelevetCalendarEvent, type TelevetCalendarWriter, TelevetCancelReceipt, TelevetClinicianEmptyState, type TelevetClinicianEmptyStateProps, TelevetConsentCheckbox, TelevetConsult, TelevetConsultScreen, type TelevetConsultScreenProps, type TelevetDay, TelevetDayStrip, type TelevetDayStripProps, type TelevetDiscardConfirm, TelevetEarlyEmergency, type TelevetEarlyEmergencyProps, TelevetEmergencyExits, TelevetEmptyRosterCause, TelevetEntitlementInterestState, type TelevetEntitlementInterestStateProps, TelevetIntakeMedia, type TelevetIntakeMediaItem, type TelevetIntakeMediaProps, TelevetJoinScreen, type TelevetJoinScreenProps, type TelevetLocationStatus, TelevetMediaDropNotice, type TelevetMediaDropNoticeProps, type TelevetMediaPicker, TelevetMediaShortfall, type TelevetPrimaryVet, type TelevetScreen, TelevetSlot, TelevetSlotPicker, type TelevetSlotPickerProps, TelevetStateInterestAction, type TelevetStateInterestActionProps, TelevetStateInterestAction$1 as TelevetStateInterestLifecycle, TelevetStateInterestWrite, TelevetSummaryCard, TelevetSummaryRow, TelevetTriageRead, TelevetVisitsScreen, type TelevetVisitsScreenProps, VetVisitIntent, televetConsultCalendarKey, televetDaysFromSlots, televetScreenForRequest };
|