@everfur/sdk 0.3.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 +251 -4
- package/README.md +9 -3
- package/dist/{Chat-DwAC2vhB.d.ts → Chat-BOX-03ho.d.ts} +17 -3
- package/dist/{Chat-DPUD6dnc.d.cts → Chat-TA-aTcVF.d.cts} +17 -3
- package/dist/{DepthViews-DP0R-DhB.d.cts → DepthViews-CgjX2AJ5.d.ts} +1 -1
- package/dist/{DepthViews-DbFhR4Du.d.cts → DepthViews-Cviea-ri.d.cts} +1 -1
- package/dist/{DepthViews-DNEM96Se.d.ts → DepthViews-D2dRqWRq.d.ts} +1 -1
- package/dist/{DepthViews-D_3hl4xk.d.ts → 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.cjs +1 -1
- package/dist/animations/index.d.cts +6 -5
- package/dist/animations/index.d.ts +6 -5
- package/dist/animations/index.js +1 -1
- package/dist/{attachments-5NeobOCd.d.ts → attachments-C_vtFu2f.d.ts} +7 -5
- package/dist/{attachments-D8T5re7e.d.cts → attachments-DHvnITuE.d.cts} +7 -5
- package/dist/{attachments-Bw3iMQgu.d.ts → attachments-oD5U2fXI.d.ts} +3 -3
- package/dist/{attachments-CQgFrEQ7.d.cts → attachments-pIdGOQfm.d.cts} +3 -3
- package/dist/bookingCopy-CJir9mjb.d.ts +1135 -0
- package/dist/bookingCopy-DfuA13dh.d.cts +1135 -0
- 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-B-Eg8ZJ3.d.cts +63 -0
- package/dist/casesRepository-DHgIYKN9.d.ts +63 -0
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.d.cts +12 -10
- package/dist/chat/index.d.ts +12 -10
- package/dist/chat/index.js +1 -1
- package/dist/client/index.cjs +5 -5
- package/dist/client/index.d.cts +15 -11
- package/dist/client/index.d.ts +15 -11
- package/dist/client/index.js +5 -5
- package/dist/{config-CzTZGlfF.d.cts → config-ClI7QxB0.d.ts} +4 -3
- package/dist/{config-DW60uRb9.d.ts → config-DAFbf721.d.cts} +4 -3
- package/dist/consent/index.cjs +1 -1
- package/dist/consent/index.d.cts +9 -8
- package/dist/consent/index.d.ts +9 -8
- package/dist/consent/index.js +1 -1
- package/dist/{context-XvTzq1tE.d.cts → context-B-dUM1Qf.d.cts} +9 -8
- package/dist/{context-DXhqHlPU.d.ts → context-CZbgF_OH.d.ts} +9 -8
- package/dist/{copy-Mjoo91aS.d.ts → copy-CeRH3NXy.d.ts} +5 -4
- package/dist/{copy-bKDNigLb.d.cts → copy-CneuYdrO.d.cts} +5 -4
- package/dist/core/index.cjs +9 -9
- package/dist/core/index.d.cts +123 -32
- package/dist/core/index.d.ts +123 -32
- package/dist/core/index.js +9 -9
- package/dist/{depth-CErXCU8J.d.cts → depth-B3NFKlF9.d.cts} +38 -6
- package/dist/{depth-DjDcJ6kH.d.ts → depth-DO3Ko_qs.d.ts} +38 -6
- package/dist/entitlementRepository-74kW5mK0.d.ts +43 -0
- package/dist/entitlementRepository-m6zLUmiB.d.cts +43 -0
- package/dist/{identity-DI4eVx9S.d.cts → identity-C7uxGwfT.d.cts} +3 -3
- package/dist/{identity-BMx2SUOM.d.ts → identity-CLAUq-K4.d.ts} +3 -3
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +20 -17
- package/dist/index.d.ts +20 -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.cjs +2 -2
- package/dist/notifications/index.d.cts +5 -4
- package/dist/notifications/index.d.ts +5 -4
- package/dist/notifications/index.js +2 -2
- package/dist/optionalModule-DbJmsq5f.d.cts +21 -0
- package/dist/optionalModule-DbJmsq5f.d.ts +21 -0
- package/dist/{pets-aB8q0JyX.d.cts → pets-BoB5B7kp.d.cts} +2 -2
- package/dist/{pets-CtQdRpWo.d.ts → pets-w4M9d-Dn.d.ts} +2 -2
- package/dist/{casesRepository-ClLv6qMl.d.ts → petsRepository-BjKJ8UsN.d.ts} +3 -49
- package/dist/{casesRepository-DHwtGRYY.d.cts → petsRepository-DZZoEG3r.d.cts} +3 -49
- package/dist/photo/index.cjs +1 -1
- package/dist/photo/index.d.cts +3 -2
- package/dist/photo/index.d.ts +3 -2
- package/dist/photo/index.js +1 -1
- package/dist/{ports-DMolTRzU.d.ts → ports-BO3bzTJg.d.ts} +14 -17
- package/dist/{ports-DEBzEhbp.d.cts → ports-C2EVK416.d.cts} +14 -17
- package/dist/records/depth/index.cjs +2 -2
- package/dist/records/depth/index.d.cts +11 -10
- package/dist/records/depth/index.d.ts +11 -10
- package/dist/records/depth/index.js +2 -2
- 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-CjW7uDuA.d.ts → requestFunnel-D7ipek3e.d.ts} +28 -4
- package/dist/{requestFunnel-L-BQfi0z.d.cts → requestFunnel-Djjwgoe9.d.cts} +28 -4
- package/dist/{runtime-BR9ysG0J.d.ts → runtimeTypes-CTL3yToK.d.ts} +10 -100
- package/dist/{runtime-B8s-_hv8.d.cts → runtimeTypes-D2C9uD85.d.cts} +10 -100
- 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 -0
- package/dist/televet/booking/index.d.cts +566 -0
- package/dist/televet/booking/index.d.ts +566 -0
- package/dist/televet/booking/index.js +1 -0
- package/dist/televet/call/index.cjs +1 -0
- package/dist/televet/call/index.d.cts +161 -0
- package/dist/televet/call/index.d.ts +161 -0
- package/dist/televet/call/index.js +1 -0
- package/dist/televet/index.cjs +1 -1
- package/dist/televet/index.d.cts +64 -12
- package/dist/televet/index.d.ts +64 -12
- 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 +4 -3
- package/dist/testing/index.d.ts +4 -3
- package/dist/testing/index.js +4 -4
- package/dist/testing/rn/index.cjs +1 -1
- package/dist/testing/rn/index.d.cts +13 -10
- package/dist/testing/rn/index.d.ts +13 -10
- package/dist/testing/rn/index.js +1 -1
- package/dist/testing/web/index.cjs +1 -1
- package/dist/testing/web/index.d.cts +14 -12
- package/dist/testing/web/index.d.ts +14 -12
- package/dist/testing/web/index.js +1 -1
- package/dist/{timelineRows-DZed6dAM.d.ts → timelineRows-7yFNK_rU.d.ts} +1 -1
- package/dist/{timelineRows-CaohZzXS.d.cts → timelineRows-CzR1T2DR.d.cts} +1 -1
- package/dist/tokens-CIngRkvt.d.cts +362 -0
- package/dist/tokens-CIngRkvt.d.ts +362 -0
- package/dist/typeStyle-DHJzDaUo.d.cts +112 -0
- package/dist/typeStyle-YPS_MXeI.d.ts +112 -0
- package/dist/{useRecordsDepth-BHBzJ76R.d.cts → useRecordsDepth-Bnw36jPr.d.cts} +24 -5
- package/dist/{useRecordsDepth-BU-OhzH6.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.cjs +1 -1
- package/dist/video/index.d.cts +3 -2
- package/dist/video/index.d.ts +3 -2
- package/dist/video/index.js +1 -1
- package/dist/{view-DtSPYpKa.d.ts → view-BqcOYFTr.d.ts} +5 -4
- package/dist/{view-C3qPIXGX.d.cts → view-CaJs8WFH.d.cts} +5 -4
- package/dist/web/consent/index.cjs +1 -1
- package/dist/web/consent/index.d.cts +9 -8
- package/dist/web/consent/index.d.ts +9 -8
- package/dist/web/consent/index.js +1 -1
- package/dist/web/index.cjs +10 -10
- package/dist/web/index.d.cts +43 -19
- package/dist/web/index.d.ts +43 -19
- package/dist/web/index.js +10 -10
- package/dist/web/notifications/index.cjs +2 -2
- package/dist/web/notifications/index.d.cts +7 -6
- package/dist/web/notifications/index.d.ts +7 -6
- package/dist/web/notifications/index.js +2 -2
- 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 +123 -14
- package/dist/web/records/index.d.ts +123 -14
- package/dist/web/records/index.js +3 -3
- package/dist/web/televet/booking/index.cjs +2 -0
- package/dist/web/televet/booking/index.d.cts +770 -0
- package/dist/web/televet/booking/index.d.ts +770 -0
- package/dist/web/televet/booking/index.js +2 -0
- package/dist/web/televet/call/index.cjs +1 -0
- package/dist/web/televet/call/index.d.cts +144 -0
- package/dist/web/televet/call/index.d.ts +144 -0
- package/dist/web/televet/call/index.js +1 -0
- package/dist/web/televet/index.cjs +1 -1
- package/dist/web/televet/index.d.cts +61 -9
- package/dist/web/televet/index.d.ts +61 -9
- package/dist/web/televet/index.js +1 -1
- package/package.json +74 -5
- package/televet/booking/package.json +8 -0
- package/televet/call/package.json +8 -0
- package/web/televet/booking/native-blocked.cjs +12 -0
- package/web/televet/booking/package.json +8 -0
- package/web/televet/call/native-blocked.cjs +12 -0
- package/web/televet/call/package.json +8 -0
- package/dist/entitlementRepository-DKdXFgTo.d.cts +0 -698
- package/dist/entitlementRepository-DSbzuyAW.d.ts +0 -698
- package/dist/typeStyle-0TydiZ1w.d.cts +0 -19
- package/dist/typeStyle-CWMsoe6b.d.ts +0 -19
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
import { ReactNode, ComponentType, ReactElement } from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { P as PetRef } from '../../ids-B2GAAifq.js';
|
|
4
|
+
export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.js';
|
|
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';
|
|
17
|
+
import '../../TelemetryPort-BDNr00hu.js';
|
|
18
|
+
import '../../profile-CSs1wlXT.js';
|
|
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
|
+
|
|
159
|
+
/** The calendar entry a booked visit asks the host to write. */
|
|
160
|
+
interface TelevetCalendarEvent {
|
|
161
|
+
/**
|
|
162
|
+
* A stable key for THIS consult's entry.
|
|
163
|
+
*
|
|
164
|
+
* Keyed on the CONSULT so a re-tap updates the same entry rather than writing a second event for one visit,
|
|
165
|
+
* and so a later cancel or reschedule can address the SAME row. A host that ignores the key writes duplicates
|
|
166
|
+
* the owner has to clean up by hand.
|
|
167
|
+
*/
|
|
168
|
+
readonly key: string;
|
|
169
|
+
readonly title: string;
|
|
170
|
+
readonly startDate: Date;
|
|
171
|
+
readonly endDate: Date;
|
|
172
|
+
/** The reminder offset in minutes, negative for "before". The platform queues its own at the same offset. */
|
|
173
|
+
readonly alarmOffsetMinutes: number;
|
|
174
|
+
}
|
|
175
|
+
/** Writes the entry. Resolves true when it landed; false for a refused permission or no calendar at all. */
|
|
176
|
+
type TelevetCalendarWriter = (event: TelevetCalendarEvent) => Promise<boolean>;
|
|
177
|
+
/** The calendar key for a consult. One definition, so a cancel and a reschedule address the booked row. */
|
|
178
|
+
declare function televetConsultCalendarKey(consultId: string): string;
|
|
179
|
+
interface TelevetBookedScreenProps {
|
|
180
|
+
readonly consult: TelevetConsult;
|
|
181
|
+
readonly petName: string | null;
|
|
182
|
+
readonly onDone: () => void;
|
|
183
|
+
/** Absent, there is no Add to calendar control. */
|
|
184
|
+
readonly onAddToCalendar?: TelevetCalendarWriter | undefined;
|
|
185
|
+
/**
|
|
186
|
+
* Has the host PROVEN it can host the call in app? Defaults to false.
|
|
187
|
+
*
|
|
188
|
+
* Fail closed: a host that has not said so is assumed not to have the native video modules, and the in-app
|
|
189
|
+
* join promise is withheld rather than printed on a hope.
|
|
190
|
+
*/
|
|
191
|
+
readonly canJoinInApp?: boolean;
|
|
192
|
+
}
|
|
193
|
+
declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, }: TelevetBookedScreenProps): ReactNode;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* The host's own discard confirmation.
|
|
197
|
+
*
|
|
198
|
+
* Receives the ported title, body and the two button labels, and resolves true to leave. A partner with its
|
|
199
|
+
* own dialog system passes this; absent, the SDK uses React Native's `Alert`, which is what the consumer does.
|
|
200
|
+
*/
|
|
201
|
+
type TelevetDiscardConfirm = (prompt: {
|
|
202
|
+
readonly title: string;
|
|
203
|
+
readonly body: string;
|
|
204
|
+
readonly confirmLabel: string;
|
|
205
|
+
readonly keepLabel: string;
|
|
206
|
+
}) => Promise<boolean>;
|
|
207
|
+
interface TelevetBookingChromeProps {
|
|
208
|
+
readonly step: TelevetBookingStep;
|
|
209
|
+
readonly furthestIndex: number;
|
|
210
|
+
/** The title on the bar. The reschedule flow passes its own, so the bar never says "Book a visit" there. */
|
|
211
|
+
readonly title?: string;
|
|
212
|
+
/** False on the first visible step, where Back would leave the flow entirely. */
|
|
213
|
+
readonly canGoBack: boolean;
|
|
214
|
+
/**
|
|
215
|
+
* Has the owner entered anything worth losing?
|
|
216
|
+
*
|
|
217
|
+
* Gates the discard confirm. A confirm on an untouched flow is a pointless obstacle; NO confirm on a flow
|
|
218
|
+
* holding typed clinical text is the actual defect, because that text is volatile component state with no
|
|
219
|
+
* draft to restore it from.
|
|
220
|
+
*/
|
|
221
|
+
readonly isDirty: boolean;
|
|
222
|
+
readonly onBack: () => void;
|
|
223
|
+
readonly onClose: () => void;
|
|
224
|
+
readonly onConfirmDiscard?: TelevetDiscardConfirm | undefined;
|
|
225
|
+
}
|
|
226
|
+
declare function TelevetBookingChrome({ step, furthestIndex, title, canGoBack, isDirty, onBack, onClose, onConfirmDiscard, }: TelevetBookingChromeProps): ReactNode;
|
|
227
|
+
/**
|
|
228
|
+
* The back control's spoken label.
|
|
229
|
+
*
|
|
230
|
+
* "Back" is the platform word for the control and is not product copy, which is why it is a constant here and
|
|
231
|
+
* not a key in the ported deck: the consumer gets it from its shared back button, which owns the same string.
|
|
232
|
+
*/
|
|
233
|
+
declare const BACK_LABEL = "Back";
|
|
234
|
+
|
|
235
|
+
/** A picked-but-not-yet-uploaded attachment, in the host's own terms. */
|
|
236
|
+
interface TelevetIntakeMediaItem {
|
|
237
|
+
readonly uri: string;
|
|
238
|
+
readonly filename: string;
|
|
239
|
+
readonly mimeType: string;
|
|
240
|
+
readonly fileSize: number;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* The host's media picker.
|
|
244
|
+
*
|
|
245
|
+
* Resolves the picks, or null when the owner cancelled or the permission was refused. The SDK takes no picker
|
|
246
|
+
* dependency: on the consumer app this is expo-image-picker behind `pickMediaFromLibrary`, and a partner
|
|
247
|
+
* supplies whichever picker its app already has.
|
|
248
|
+
*
|
|
249
|
+
* `limit` is the remaining headroom, so the host can cap its own selection rather than returning picks this
|
|
250
|
+
* row has to silently discard.
|
|
251
|
+
*/
|
|
252
|
+
type TelevetMediaPicker = (limit: number) => Promise<readonly TelevetIntakeMediaItem[] | null>;
|
|
253
|
+
interface TelevetIntakeMediaProps {
|
|
254
|
+
readonly media: readonly TelevetIntakeMediaItem[];
|
|
255
|
+
readonly onChange: (next: readonly TelevetIntakeMediaItem[]) => void;
|
|
256
|
+
/** Absent, the row renders nothing at all. There is no disabled Add control. */
|
|
257
|
+
readonly onPickMedia?: TelevetMediaPicker | undefined;
|
|
258
|
+
}
|
|
259
|
+
declare function TelevetIntakeMedia({ media, onChange, onPickMedia }: TelevetIntakeMediaProps): ReactNode;
|
|
260
|
+
|
|
261
|
+
/** What the host can tell us about a location it could not resolve, so the right card renders. */
|
|
262
|
+
type TelevetLocationStatus = 'unknown' | 'blocked' | 'unavailable';
|
|
263
|
+
interface EverfurTelevetBookingProps {
|
|
264
|
+
/** The pet the visit is for. Seeds the draft; a one-pet roster skips the picker entirely. */
|
|
265
|
+
readonly petRef?: PetRef | null;
|
|
266
|
+
/** The owner's two-letter US state. The SDK never reads a device location for it. */
|
|
267
|
+
readonly usState?: string | null;
|
|
268
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
269
|
+
readonly controller?: TelevetBookingController;
|
|
270
|
+
readonly onBooked?: (consult: TelevetConsult) => void;
|
|
271
|
+
/** Leaves the flow. The flow never navigates itself, so the same screens work in a modal, a tab or a stack. */
|
|
272
|
+
readonly onExit?: () => void;
|
|
273
|
+
/** Leaves the flow to create a pet, then comes back. Absent, the empty roster has no action. */
|
|
274
|
+
readonly onAddPet?: () => void;
|
|
275
|
+
/** The host's media picker for the intake step. Absent, there is no attachment row. */
|
|
276
|
+
readonly onPickMedia?: TelevetMediaPicker;
|
|
277
|
+
/** The host's calendar writer for the confirmation. Absent, there is no Add to calendar control. */
|
|
278
|
+
readonly onAddToCalendar?: TelevetCalendarWriter;
|
|
279
|
+
/** The host's own discard dialog. Absent, the SDK uses React Native's `Alert`. */
|
|
280
|
+
readonly onConfirmDiscard?: TelevetDiscardConfirm;
|
|
281
|
+
/** Asks the host to resolve the owner's state again. Absent, the location cards render without an action. */
|
|
282
|
+
readonly onRequestLocation?: () => void;
|
|
283
|
+
/** Why the host has no state for us, so the right card renders. */
|
|
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;
|
|
318
|
+
/**
|
|
319
|
+
* Has the host PROVEN it can host the call in app? Defaults to false.
|
|
320
|
+
*
|
|
321
|
+
* Fail closed: without the native video modules the confirmation must not promise an in-app join.
|
|
322
|
+
*/
|
|
323
|
+
readonly canJoinInApp?: boolean;
|
|
324
|
+
/**
|
|
325
|
+
* What to render when the partner booking surface is not served for this tenant.
|
|
326
|
+
*
|
|
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" />`.
|
|
329
|
+
*/
|
|
330
|
+
readonly renderUnavailable?: () => ReactNode;
|
|
331
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
332
|
+
readonly testID?: string;
|
|
333
|
+
}
|
|
334
|
+
declare function EverfurTelevetBooking(props: EverfurTelevetBookingProps): ReactNode;
|
|
335
|
+
|
|
336
|
+
/** The screens of the televet stack. */
|
|
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
|
+
} | {
|
|
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;
|
|
352
|
+
} | {
|
|
353
|
+
readonly name: 'reschedule';
|
|
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;
|
|
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;
|
|
375
|
+
interface EverfurTelevetProps {
|
|
376
|
+
/** The pet the visit is for. Seeds the draft; a one-pet roster skips the picker entirely. */
|
|
377
|
+
readonly petRef?: PetRef | null;
|
|
378
|
+
/** The owner's two-letter US state. The SDK never reads a device location for it. */
|
|
379
|
+
readonly usState?: string | null;
|
|
380
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
381
|
+
readonly controller?: TelevetBookingController;
|
|
382
|
+
readonly onBooked?: (consult: TelevetConsult) => void;
|
|
383
|
+
/** The root screen's exit; absent, the root's Close does nothing and the host navigator owns leaving. */
|
|
384
|
+
readonly onExit?: () => void;
|
|
385
|
+
readonly onAddPet?: () => void;
|
|
386
|
+
readonly onPickMedia?: TelevetMediaPicker;
|
|
387
|
+
readonly onAddToCalendar?: TelevetCalendarWriter;
|
|
388
|
+
readonly onConfirmDiscard?: TelevetDiscardConfirm;
|
|
389
|
+
readonly onRequestLocation?: () => void;
|
|
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;
|
|
406
|
+
/**
|
|
407
|
+
* Has the host installed the native video modules and wired the call surface? Defaults to FALSE.
|
|
408
|
+
*
|
|
409
|
+
* Fail closed. A partner that has not said so gets a confirmation that promises only what it can keep.
|
|
410
|
+
*/
|
|
411
|
+
readonly canJoinInApp?: boolean;
|
|
412
|
+
/**
|
|
413
|
+
* Replace what is shown when the in-app booking surface is not served for this tenant.
|
|
414
|
+
*
|
|
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" />}`.
|
|
418
|
+
*/
|
|
419
|
+
readonly renderUnavailable?: () => ReactNode;
|
|
420
|
+
/** The screen the flow starts on; `home` (the visits when one is ahead, otherwise booking) when omitted. */
|
|
421
|
+
readonly initialScreen?: TelevetScreen;
|
|
422
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
423
|
+
/** Your own placeholder while the entitlement verdict is pending on a cold mount. */
|
|
424
|
+
readonly renderPending?: () => ReactNode;
|
|
425
|
+
}
|
|
426
|
+
declare function EverfurTelevetFlow(props: EverfurTelevetProps): ReactNode;
|
|
427
|
+
/** The public prebuilt televet surface: the flow, landing on the visits or the booking. */
|
|
428
|
+
declare const EverfurTelevet: typeof EverfurTelevetFlow;
|
|
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
|
+
|
|
492
|
+
interface EverfurTelevetRescheduleProps {
|
|
493
|
+
/** The consult being moved. Null while the host is still loading it. */
|
|
494
|
+
readonly consult: TelevetConsult | null;
|
|
495
|
+
readonly onRescheduled?: (moved: TelevetConsult) => void;
|
|
496
|
+
/** Backing out. Never destructive: the original consult is left exactly as it was. */
|
|
497
|
+
readonly onCancel?: () => void;
|
|
498
|
+
/** Host/test seam: inject a booking controller instead of building one from the provider's session. */
|
|
499
|
+
readonly controller?: TelevetBookingController;
|
|
500
|
+
readonly style?: StyleProp<ViewStyle>;
|
|
501
|
+
readonly testID?: string;
|
|
502
|
+
}
|
|
503
|
+
declare function EverfurTelevetReschedule(props: EverfurTelevetRescheduleProps): ReactNode;
|
|
504
|
+
|
|
505
|
+
interface TelevetDay {
|
|
506
|
+
readonly key: string;
|
|
507
|
+
readonly iso: string;
|
|
508
|
+
readonly weekday: string;
|
|
509
|
+
readonly dayNumber: string;
|
|
510
|
+
}
|
|
511
|
+
interface TelevetDayStripProps {
|
|
512
|
+
readonly slots: readonly TelevetSlot[];
|
|
513
|
+
readonly selectedDayKey: string | null;
|
|
514
|
+
readonly onSelectDay: (day: TelevetDay) => void;
|
|
515
|
+
}
|
|
516
|
+
/** The day strip. Renders nothing when the window holds no readable day. */
|
|
517
|
+
declare function TelevetDayStrip({ slots, selectedDayKey, onSelectDay }: TelevetDayStripProps): ReactNode;
|
|
518
|
+
/**
|
|
519
|
+
* The distinct local days the slots cover, in server order.
|
|
520
|
+
*
|
|
521
|
+
* Exported for the picker, which needs the first day to seed the selection, and for the suite.
|
|
522
|
+
*/
|
|
523
|
+
declare function televetDaysFromSlots(slots: readonly TelevetSlot[]): readonly TelevetDay[];
|
|
524
|
+
|
|
525
|
+
interface TelevetSlotPickerProps {
|
|
526
|
+
/** The server's full window. Never truncated: the day filter is what bounds it. */
|
|
527
|
+
readonly slots: readonly TelevetSlot[];
|
|
528
|
+
/** The slot whose hold is in flight, or null. Disables the whole grid. */
|
|
529
|
+
readonly busySlotId: string | null;
|
|
530
|
+
readonly onPick: (slot: TelevetSlot) => void;
|
|
531
|
+
/** Rendered above the strip, for example a failure line from the container. */
|
|
532
|
+
readonly ListHeaderComponent?: ComponentType | ReactElement | null;
|
|
533
|
+
readonly rowTestIdPrefix?: string;
|
|
534
|
+
readonly testID?: string;
|
|
535
|
+
}
|
|
536
|
+
declare function TelevetSlotPicker({ slots, busySlotId, onPick, ListHeaderComponent, rowTestIdPrefix, testID, }: TelevetSlotPickerProps): ReactNode;
|
|
537
|
+
|
|
538
|
+
/** One "label ... value" row in the summary card. */
|
|
539
|
+
declare function TelevetSummaryRow({ label, value, last, testID, }: {
|
|
540
|
+
readonly label: string;
|
|
541
|
+
readonly value: string;
|
|
542
|
+
/** The last row draws no divider, so the card does not end on a line. */
|
|
543
|
+
readonly last?: boolean;
|
|
544
|
+
readonly testID?: string;
|
|
545
|
+
}): ReactNode;
|
|
546
|
+
/**
|
|
547
|
+
* A consent tick.
|
|
548
|
+
*
|
|
549
|
+
* A REAL CHECKBOX, not a pill button. A filled pill reads as "press to continue" while a checkbox reads as
|
|
550
|
+
* "you are agreeing to this", and these ticks are the owner's licensure attestation and their cancellation
|
|
551
|
+
* agreement. `accessibilityRole="checkbox"` with a `checked` state is also what makes a screen reader announce
|
|
552
|
+
* it as an agreement rather than a button.
|
|
553
|
+
*/
|
|
554
|
+
declare function TelevetConsentCheckbox({ label, checked, onToggle, testID, }: {
|
|
555
|
+
readonly label: string;
|
|
556
|
+
readonly checked: boolean;
|
|
557
|
+
readonly onToggle: (next: boolean) => void;
|
|
558
|
+
readonly testID?: string;
|
|
559
|
+
}): ReactNode;
|
|
560
|
+
/** The summary card's own frame, exported so the container does not re-declare it. */
|
|
561
|
+
declare function TelevetSummaryCard({ children, testID }: {
|
|
562
|
+
readonly children: ReactNode;
|
|
563
|
+
readonly testID?: string;
|
|
564
|
+
}): ReactNode;
|
|
565
|
+
|
|
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 };
|