@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.
Files changed (159) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/README.md +9 -8
  3. package/dist/{Chat-BZZ-Py5l.d.ts → Chat-BOX-03ho.d.ts} +17 -3
  4. package/dist/{Chat-Dq4fffIO.d.cts → Chat-TA-aTcVF.d.cts} +17 -3
  5. package/dist/{DepthViews-CkYri51q.d.ts → DepthViews-CgjX2AJ5.d.ts} +1 -1
  6. package/dist/{DepthViews-CL75jyRA.d.cts → DepthViews-Cviea-ri.d.cts} +1 -1
  7. package/dist/{DepthViews-BG3E25MD.d.ts → DepthViews-D2dRqWRq.d.ts} +1 -1
  8. package/dist/{DepthViews-B_hIypI6.d.cts → DepthViews-DSFyaSeL.d.cts} +1 -1
  9. package/dist/{ErrorPolicyPort-CwbfmxzJ.d.ts → ErrorPolicyPort-D22LUVrK.d.ts} +1 -1
  10. package/dist/{ErrorPolicyPort-CNf4uQZP.d.cts → ErrorPolicyPort-D6CybiqJ.d.cts} +1 -1
  11. package/dist/{EverfurResult-DN9pL2Ab.d.cts → EverfurError-DmELDpXp.d.cts} +1 -67
  12. package/dist/{EverfurResult-DN9pL2Ab.d.ts → EverfurError-DmELDpXp.d.ts} +1 -67
  13. package/dist/EverfurResult-SGvHKsCB.d.ts +69 -0
  14. package/dist/EverfurResult-ZtH-YV1h.d.cts +69 -0
  15. package/dist/animations/index.d.cts +6 -5
  16. package/dist/animations/index.d.ts +6 -5
  17. package/dist/{attachments-BrUWQYNK.d.ts → attachments-C_vtFu2f.d.ts} +7 -6
  18. package/dist/{attachments-D_SECjr1.d.cts → attachments-DHvnITuE.d.cts} +7 -6
  19. package/dist/{attachments-DpldrvIW.d.ts → attachments-oD5U2fXI.d.ts} +3 -3
  20. package/dist/{attachments-BorG422I.d.cts → attachments-pIdGOQfm.d.cts} +3 -3
  21. package/dist/{bookingCopy-CqtDYvCR.d.ts → bookingCopy-CJir9mjb.d.ts} +417 -14
  22. package/dist/{bookingCopy-SREvkG19.d.cts → bookingCopy-DfuA13dh.d.cts} +417 -14
  23. package/dist/branding-Xb_wL8N1.d.cts +212 -0
  24. package/dist/branding-xpQ056sM.d.ts +212 -0
  25. package/dist/callCopy-rDH9JTFo.d.cts +45 -0
  26. package/dist/callCopy-rDH9JTFo.d.ts +45 -0
  27. package/dist/callRoom-7wrE3RP2.d.ts +62 -0
  28. package/dist/callRoom-B_EqaUzx.d.cts +62 -0
  29. package/dist/{casesRepository-DwtZVsbj.d.cts → casesRepository-B-Eg8ZJ3.d.cts} +14 -2
  30. package/dist/{casesRepository-v6QczS9N.d.ts → casesRepository-DHgIYKN9.d.ts} +14 -2
  31. package/dist/chat/index.cjs +1 -1
  32. package/dist/chat/index.d.cts +12 -11
  33. package/dist/chat/index.d.ts +12 -11
  34. package/dist/chat/index.js +1 -1
  35. package/dist/client/index.cjs +5 -5
  36. package/dist/client/index.d.cts +14 -12
  37. package/dist/client/index.d.ts +14 -12
  38. package/dist/client/index.js +5 -5
  39. package/dist/{config--Wu1Umhd.d.cts → config-ClI7QxB0.d.ts} +3 -2
  40. package/dist/{config-C7eb_IMD.d.ts → config-DAFbf721.d.cts} +3 -2
  41. package/dist/consent/index.d.cts +9 -8
  42. package/dist/consent/index.d.ts +9 -8
  43. package/dist/{context-CL3lyuy1.d.cts → context-B-dUM1Qf.d.cts} +9 -8
  44. package/dist/{context-CahAEha8.d.ts → context-CZbgF_OH.d.ts} +9 -8
  45. package/dist/{copy-DdVFDL01.d.ts → copy-CeRH3NXy.d.ts} +5 -4
  46. package/dist/{copy-UeUJVk8X.d.cts → copy-CneuYdrO.d.cts} +5 -4
  47. package/dist/core/index.cjs +9 -9
  48. package/dist/core/index.d.cts +19 -17
  49. package/dist/core/index.d.ts +19 -17
  50. package/dist/core/index.js +9 -9
  51. package/dist/{depth-D5HwcvKC.d.cts → depth-B3NFKlF9.d.cts} +6 -5
  52. package/dist/{depth-DvPwPuT_.d.ts → depth-DO3Ko_qs.d.ts} +6 -5
  53. package/dist/{entitlementRepository-B7egEdW6.d.ts → entitlementRepository-74kW5mK0.d.ts} +4 -4
  54. package/dist/{entitlementRepository-BpJ7tiwl.d.cts → entitlementRepository-m6zLUmiB.d.cts} +4 -4
  55. package/dist/{identity-C2-08BZW.d.cts → identity-C7uxGwfT.d.cts} +2 -2
  56. package/dist/{identity-CEi9GRFZ.d.ts → identity-CLAUq-K4.d.ts} +2 -2
  57. package/dist/index.cjs +6 -6
  58. package/dist/index.d.cts +19 -17
  59. package/dist/index.d.ts +19 -17
  60. package/dist/index.js +6 -6
  61. package/dist/{models-D2EUxPZY.d.cts → models-Bn2z0NNo.d.cts} +1 -1
  62. package/dist/{models-B-Uh2LTf.d.ts → models-DSqA5Ahs.d.ts} +1 -1
  63. package/dist/notifications/index.d.cts +5 -4
  64. package/dist/notifications/index.d.ts +5 -4
  65. package/dist/{pets-JVCXgRgR.d.cts → pets-BoB5B7kp.d.cts} +2 -2
  66. package/dist/{pets-DJv2sj2H.d.ts → pets-w4M9d-Dn.d.ts} +2 -2
  67. package/dist/{petsRepository-Bk6GDwLs.d.ts → petsRepository-BjKJ8UsN.d.ts} +2 -2
  68. package/dist/{petsRepository-B_gKbAzJ.d.cts → petsRepository-DZZoEG3r.d.cts} +2 -2
  69. package/dist/photo/index.d.cts +3 -2
  70. package/dist/photo/index.d.ts +3 -2
  71. package/dist/{ports-D7YW8qz9.d.ts → ports-BO3bzTJg.d.ts} +13 -6
  72. package/dist/{ports-BY2ph0_y.d.cts → ports-C2EVK416.d.cts} +13 -6
  73. package/dist/records/depth/index.d.cts +11 -10
  74. package/dist/records/depth/index.d.ts +11 -10
  75. package/dist/records/index.cjs +3 -3
  76. package/dist/records/index.d.cts +25 -14
  77. package/dist/records/index.d.ts +25 -14
  78. package/dist/records/index.js +3 -3
  79. package/dist/{requestFunnel-DFMGcluw.d.ts → requestFunnel-D7ipek3e.d.ts} +5 -4
  80. package/dist/{requestFunnel-BjDpqqvm.d.cts → requestFunnel-Djjwgoe9.d.cts} +5 -4
  81. package/dist/{runtimeTypes-w5KqBMcs.d.ts → runtimeTypes-CTL3yToK.d.ts} +7 -7
  82. package/dist/{runtimeTypes-gZEJu-da.d.cts → runtimeTypes-D2C9uD85.d.cts} +7 -7
  83. package/dist/server/events/index.cjs +1 -1
  84. package/dist/server/events/index.d.cts +4 -3
  85. package/dist/server/events/index.d.ts +4 -3
  86. package/dist/server/events/index.js +1 -1
  87. package/dist/server/index.cjs +1 -1
  88. package/dist/server/index.d.cts +5 -4
  89. package/dist/server/index.d.ts +5 -4
  90. package/dist/server/index.js +1 -1
  91. package/dist/televet/booking/index.cjs +1 -1
  92. package/dist/televet/booking/index.d.cts +303 -31
  93. package/dist/televet/booking/index.d.ts +303 -31
  94. package/dist/televet/booking/index.js +1 -1
  95. package/dist/televet/call/index.cjs +1 -1
  96. package/dist/televet/call/index.d.cts +25 -5
  97. package/dist/televet/call/index.d.ts +25 -5
  98. package/dist/televet/call/index.js +1 -1
  99. package/dist/televet/index.cjs +1 -1
  100. package/dist/televet/index.d.cts +41 -71
  101. package/dist/televet/index.d.ts +41 -71
  102. package/dist/televet/index.js +1 -1
  103. package/dist/televetGlobal-CEk0_cW9.d.cts +34 -0
  104. package/dist/televetGlobal-Cs9Wbqsy.d.ts +34 -0
  105. package/dist/testing/index.cjs +4 -4
  106. package/dist/testing/index.d.cts +3 -2
  107. package/dist/testing/index.d.ts +3 -2
  108. package/dist/testing/index.js +4 -4
  109. package/dist/testing/rn/index.cjs +1 -1
  110. package/dist/testing/rn/index.d.cts +13 -11
  111. package/dist/testing/rn/index.d.ts +13 -11
  112. package/dist/testing/rn/index.js +1 -1
  113. package/dist/testing/web/index.d.cts +14 -13
  114. package/dist/testing/web/index.d.ts +14 -13
  115. package/dist/{timelineRows-C15jxFFH.d.ts → timelineRows-7yFNK_rU.d.ts} +1 -1
  116. package/dist/{timelineRows-odO8g9r2.d.cts → timelineRows-CzR1T2DR.d.cts} +1 -1
  117. package/dist/{branding-CsRdeNwK.d.cts → tokens-CIngRkvt.d.cts} +7 -211
  118. package/dist/{branding-CsRdeNwK.d.ts → tokens-CIngRkvt.d.ts} +7 -211
  119. package/dist/{typeStyle-DmoyacDG.d.ts → typeStyle-DHJzDaUo.d.cts} +2 -1
  120. package/dist/{typeStyle-CKqVYD6L.d.cts → typeStyle-YPS_MXeI.d.ts} +2 -1
  121. package/dist/{useRecordsDepth-C6rjEaLn.d.cts → useRecordsDepth-Bnw36jPr.d.cts} +24 -5
  122. package/dist/{useRecordsDepth-crhBllQK.d.ts → useRecordsDepth-DFF7Faxx.d.ts} +24 -5
  123. package/dist/{useVetVisit-CjmMa896.d.ts → useVetVisit-BsjoDO-n.d.ts} +21 -6
  124. package/dist/{useVetVisit-Bc84hWUU.d.cts → useVetVisit-Ds8f1peV.d.cts} +21 -6
  125. package/dist/video/index.d.cts +3 -2
  126. package/dist/video/index.d.ts +3 -2
  127. package/dist/{view-Bxwxp4xD.d.ts → view-BqcOYFTr.d.ts} +5 -4
  128. package/dist/{view-DyitEO0m.d.cts → view-CaJs8WFH.d.cts} +5 -4
  129. package/dist/web/consent/index.d.cts +9 -8
  130. package/dist/web/consent/index.d.ts +9 -8
  131. package/dist/web/index.cjs +10 -10
  132. package/dist/web/index.d.cts +42 -19
  133. package/dist/web/index.d.ts +42 -19
  134. package/dist/web/index.js +10 -10
  135. package/dist/web/notifications/index.d.cts +7 -6
  136. package/dist/web/notifications/index.d.ts +7 -6
  137. package/dist/web/records/depth/index.cjs +2 -2
  138. package/dist/web/records/depth/index.d.cts +11 -10
  139. package/dist/web/records/depth/index.d.ts +11 -10
  140. package/dist/web/records/depth/index.js +2 -2
  141. package/dist/web/records/index.cjs +3 -3
  142. package/dist/web/records/index.d.cts +53 -35
  143. package/dist/web/records/index.d.ts +53 -35
  144. package/dist/web/records/index.js +3 -3
  145. package/dist/web/televet/booking/index.cjs +2 -1
  146. package/dist/web/televet/booking/index.d.cts +453 -32
  147. package/dist/web/televet/booking/index.d.ts +453 -32
  148. package/dist/web/televet/booking/index.js +2 -1
  149. package/dist/web/televet/call/index.cjs +1 -1
  150. package/dist/web/televet/call/index.d.cts +3 -1
  151. package/dist/web/televet/call/index.d.ts +3 -1
  152. package/dist/web/televet/call/index.js +1 -1
  153. package/dist/web/televet/index.cjs +1 -1
  154. package/dist/web/televet/index.d.cts +40 -74
  155. package/dist/web/televet/index.d.ts +40 -74
  156. package/dist/web/televet/index.js +1 -1
  157. package/package.json +3 -2
  158. package/dist/callCopy-DoQKG3-L.d.cts +0 -40
  159. 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.cjs';
4
4
  export { B as Brand, _ as __brand } from '../../ids-B2GAAifq.cjs';
5
- import { T as TelevetConsult, a as TelevetBookingStep, b as TelevetBookingController, c as TelevetSlot } from '../../bookingCopy-SREvkG19.cjs';
6
- export { C as CANCELLATION_POLICY_VERSION_MAX, d as CONSULT_KINDS, e as CONSULT_MINUTES, f as CONSULT_STATUSES, g as ConsultKind, h as ConsultStatus, M as MEDIA_REFS_MAX, R as REASON_TEXT_MAX, i as TELEVET_BOOKING_BASE, j as TELEVET_BOOKING_COPY, k as TELEVET_BOOKING_STEPS, l as TERMINAL_CONSULT_STATUSES, m as TelevetBookingAction, n as TelevetBookingBody, o as TelevetBookingContext, p as TelevetBookingControllerDeps, q as TelevetBookingCopy, r as TelevetBookingDraft, s as TelevetBookingEntitlement, t as TelevetBookingRefusal, u as TelevetBookingState, v as TelevetCancellationPolicy, w as TelevetClinician, x as TelevetRead, y as TelevetSlotHold, z as TelevetStatePolicy, A as TelevetWrite, B as attestation, D as canConfirm, E as createTelevetBookingController, F as currentStep, G as emptyTelevetDraft, H as formatVisitRange, I as formatWhen, J as formatWhenWithDay, K as hasPreviousStep, L as initialTelevetBookingState, N as isHoldExpired, O as isSkipped, P as isTelevetBookingCopyReady, Q as isWellFormedStateCode, S as televetBookingKey, U as televetBookingReducer, V as televetBookingRefusal, W as televetHoldCall, X as televetRescheduleCall, Y as useTelevetBookConsult, Z as useTelevetBookingAvailable, _ as useTelevetBookingController, $ as useTelevetBookingEntitlement, a0 as useTelevetCancellationPolicy, a1 as useTelevetClinicians, a2 as useTelevetHoldSlot, a3 as useTelevetNextSlot, a4 as useTelevetRescheduleConsult, a5 as useTelevetSlots, a6 as useTelevetStatePolicy, a7 as validateBookingBody } from '../../bookingCopy-SREvkG19.cjs';
7
- export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode, c as EverfurResult } from '../../EverfurResult-DN9pL2Ab.cjs';
8
- export { W as WidgetPet } from '../../petsRepository-B_gKbAzJ.cjs';
9
- import '../../requestFunnel-BjDpqqvm.cjs';
10
- import '../../ErrorPolicyPort-CNf4uQZP.cjs';
11
- import '../../config--Wu1Umhd.cjs';
12
- import '../../identity-C2-08BZW.cjs';
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-DfuA13dh.cjs';
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-DfuA13dh.cjs';
7
+ import { V as VetVisitIntent } from '../../visitIntent-D7_yVp1I.cjs';
8
+ import { E as EverfurTelevetFlowRequest } from '../../televetGlobal-CEk0_cW9.cjs';
9
+ export { b as VetCallCredential, c as VetCallJoinRefusal, d as VetCallLimits, p as parseVetCallCredential, v as vetCallJoinReason, e as vetCallJoinRefusal } from '../../callRoom-B_EqaUzx.cjs';
10
+ export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode } from '../../EverfurError-DmELDpXp.cjs';
11
+ export { E as EverfurResult } from '../../EverfurResult-ZtH-YV1h.cjs';
12
+ export { W as WidgetPet } from '../../petsRepository-DZZoEG3r.cjs';
13
+ import '../../requestFunnel-Djjwgoe9.cjs';
14
+ import '../../ErrorPolicyPort-D6CybiqJ.cjs';
15
+ import '../../config-DAFbf721.cjs';
16
+ import '../../identity-C7uxGwfT.cjs';
13
17
  import '../../TelemetryPort-BDNr00hu.cjs';
14
18
  import '../../profile-CSs1wlXT.cjs';
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
- * THE FLOW WILL NOT DEAD-END. Absent this, an unserved surface renders the paused card, which is a state but
165
- * not a way forward; the prebuilt flow passes the hosted-visit handoff here so the owner still reaches a vet.
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 the hosted-visit fallback shown when the in-app booking surface is not served.
413
+ * Replace what is shown when the in-app booking surface is not served for this tenant.
204
414
  *
205
- * The default is the published `VetVisitButton`, which mints the single-use handoff and opens the hosted
206
- * Everfur visit. Passing `null` here is not a way to remove it: a flow with no fallback dead-ends, so an
207
- * explicit render prop is the only way to change it.
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 flow when omitted. */
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, starting at booking. */
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, type TelevetBookingFailure, TelevetBookingStep, type TelevetCalendarEvent, type TelevetCalendarWriter, TelevetConsentCheckbox, TelevetConsult, type TelevetDay, TelevetDayStrip, type TelevetDayStripProps, type TelevetDiscardConfirm, TelevetIntakeMedia, type TelevetIntakeMediaItem, type TelevetIntakeMediaProps, type TelevetLocationStatus, type TelevetMediaPicker, type TelevetScreen, TelevetSlot, TelevetSlotPicker, type TelevetSlotPickerProps, TelevetSummaryCard, TelevetSummaryRow, televetConsultCalendarKey, televetDaysFromSlots };
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 };