@everfur/sdk 0.13.0 → 0.15.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 (206) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/README.md +11 -10
  3. package/dist/{Chat.d-Dts8u_1a.d.cts → Chat.d-CtfANk3A.d.cts} +12 -4
  4. package/dist/{Chat.d-DUNTfzqC.d.ts → Chat.d-a7Ksz7NZ.d.ts} +12 -4
  5. package/dist/{DepthViews.d-CubkMPbU.d.ts → DepthViews.d-BqMnWSMu.d.cts} +1 -1
  6. package/dist/{DepthViews.d-BMU2jFPw.d.cts → DepthViews.d-CuBElgEc.d.ts} +1 -1
  7. package/dist/{DepthViews.d-Ce2Zhnrb.d.ts → DepthViews.d-DbJejGm3.d.ts} +1 -1
  8. package/dist/{DepthViews.d-BIp599lz.d.cts → DepthViews.d-dXWL6ToG.d.cts} +1 -1
  9. package/dist/RecordsPage.d-DKrZ9rHX.d.ts +93 -0
  10. package/dist/RecordsPage.d-DRPdUAo4.d.cts +93 -0
  11. package/dist/animations/index.cjs +1 -1
  12. package/dist/animations/index.d.cts +7 -5
  13. package/dist/animations/index.d.ts +7 -5
  14. package/dist/animations/index.js +1 -1
  15. package/dist/{attachments.d-Djy9z_0Z.d.ts → attachments.d-BGn2_knv.d.ts} +6 -24
  16. package/dist/{attachments.d-D1yhJjcZ.d.ts → attachments.d-CoQhXrP9.d.ts} +2 -2
  17. package/dist/{attachments.d-Bp2qbHxn.d.cts → attachments.d-CpaOfi2g.d.cts} +6 -24
  18. package/dist/{attachments.d-DisnvB9R.d.cts → attachments.d-CqHMGoER.d.cts} +2 -2
  19. package/dist/{bookingCopy.d-BlBmhAJc.d.cts → bookingCopy.d-Bnq2zk0F.d.cts} +2 -2
  20. package/dist/{bookingCopy.d-BJF6gd1A.d.ts → bookingCopy.d-BwCOCZUj.d.ts} +2 -2
  21. package/dist/{branding.d-DI8S400y.d.cts → branding.d-Bbc6p1XY.d.cts} +2 -2
  22. package/dist/{branding.d-OIGLbQeM.d.ts → branding.d-y6c0UwhE.d.ts} +2 -2
  23. package/dist/{casesRepository.d-CT2LTicS.d.cts → casesRepository.d-CsUJ2Oyb.d.cts} +1 -1
  24. package/dist/{casesRepository.d-UsWOz9bv.d.ts → casesRepository.d-DG83Ggbq.d.ts} +1 -1
  25. package/dist/chat/index.cjs +45 -43
  26. package/dist/chat/index.d.cts +26 -13
  27. package/dist/chat/index.d.ts +26 -13
  28. package/dist/chat/index.js +45 -43
  29. package/dist/client/index.cjs +3 -3
  30. package/dist/client/index.d.cts +12 -12
  31. package/dist/client/index.d.ts +12 -12
  32. package/dist/client/index.js +3 -3
  33. package/dist/clinicBatch.d-BLpbpS51.d.cts +71 -0
  34. package/dist/clinicBatch.d-Byjx4y_W.d.ts +71 -0
  35. package/dist/clinicModels.d-BXgKZqDb.d.cts +68 -0
  36. package/dist/clinicModels.d-CaS64-P-.d.ts +68 -0
  37. package/dist/clinicRequestProps.d-1dCtouGA.d.cts +65 -0
  38. package/dist/clinicRequestProps.d-CjsMg_OD.d.ts +65 -0
  39. package/dist/{config.d-BR3DT9ho.d.cts → config.d-C0WgjutL.d.cts} +1 -1
  40. package/dist/{config.d-Dy6igYlH.d.ts → config.d-zd2eTb2L.d.ts} +1 -1
  41. package/dist/consent/index.d.cts +5 -5
  42. package/dist/consent/index.d.ts +5 -5
  43. package/dist/{context.d-QcCgguzA.d.ts → context.d-BBjmV0rz.d.ts} +8 -8
  44. package/dist/{context.d-Cwks0p3C.d.cts → context.d-Du_UPxa1.d.cts} +8 -8
  45. package/dist/{copy.d-CiMn2IIt.d.ts → copy.d-D_VVj01o.d.ts} +2 -2
  46. package/dist/{copy.d-DLJTyRfT.d.cts → copy.d-Da_PP2K3.d.cts} +2 -2
  47. package/dist/core/index.cjs +3 -3
  48. package/dist/core/index.d.cts +21 -19
  49. package/dist/core/index.d.ts +21 -19
  50. package/dist/core/index.js +3 -3
  51. package/dist/{depth.d-OSALbYM7.d.ts → depth.d-BEedifOR.d.ts} +6 -133
  52. package/dist/{depth.d-CjPGVPDL.d.cts → depth.d-RTV61QNf.d.cts} +6 -133
  53. package/dist/{entitlementRepository.d-Cf3LbTwD.d.ts → entitlementRepository.d-BwThmh3V.d.ts} +4 -4
  54. package/dist/{entitlementRepository.d-CVQa1DA1.d.cts → entitlementRepository.d-C-stdRyA.d.cts} +4 -4
  55. package/dist/{features.d-fNsGcg0R.d.ts → features.d-DrQxTw3-.d.cts} +1 -1
  56. package/dist/{features.d-fNsGcg0R.d.cts → features.d-DrQxTw3-.d.ts} +1 -1
  57. package/dist/{focus.d-DMg2ngHI.d.ts → focus.d-CtotIyEt.d.ts} +127 -350
  58. package/dist/{focus.d-az9cqUz3.d.cts → focus.d-Dsm39DjO.d.cts} +127 -350
  59. package/dist/health-plan/index.cjs +182 -163
  60. package/dist/health-plan/index.d.cts +53 -11
  61. package/dist/health-plan/index.d.ts +53 -11
  62. package/dist/health-plan/index.js +185 -166
  63. package/dist/{idempotency.d-WpXx9zQo.d.ts → idempotency.d-Bfm7oIxS.d.cts} +158 -6
  64. package/dist/{idempotency.d-D461_DPD.d.cts → idempotency.d-Cv-B7SfC.d.ts} +158 -6
  65. package/dist/{identity.d-DzTijonw.d.ts → identity.d-BksOEa6m.d.ts} +1 -1
  66. package/dist/{identity.d-60LeJt_s.d.cts → identity.d-CioQhZrq.d.cts} +1 -1
  67. package/dist/index.cjs +48 -46
  68. package/dist/index.d.cts +20 -19
  69. package/dist/index.d.ts +20 -19
  70. package/dist/index.js +48 -46
  71. package/dist/introEvents.d-dS3fJCH1.d.cts +5 -0
  72. package/dist/introEvents.d-dS3fJCH1.d.ts +5 -0
  73. package/dist/introEvents.d-fAZitxMA.d.cts +175 -0
  74. package/dist/introEvents.d-tOi4o3F4.d.ts +175 -0
  75. package/dist/{models.d-BnLm3VAA.d.cts → models.d-BSqvbTE1.d.cts} +8 -1
  76. package/dist/{models.d-BagXhafD.d.ts → models.d-DOwnr8fi.d.ts} +8 -1
  77. package/dist/notifications/index.d.cts +4 -4
  78. package/dist/notifications/index.d.ts +4 -4
  79. package/dist/{optInView.d-acKpV8V2.d.ts → optInView.d-B8zTORO2.d.ts} +119 -3
  80. package/dist/{optInView.d-CEyHR6PK.d.cts → optInView.d-BkNSv4Gk.d.cts} +119 -3
  81. package/dist/{parse.d-C8CXyS58.d.ts → parse.d-B5JHS6Pr.d.ts} +1 -1
  82. package/dist/{parse.d-tEzufgJX.d.cts → parse.d-BgjO82mY.d.cts} +1 -1
  83. package/dist/{pets.d-NbJvP_kh.d.cts → pets.d-B_LoizOv.d.cts} +1 -1
  84. package/dist/{pets.d-C_53_fzo.d.ts → pets.d-OWxskXCP.d.ts} +1 -1
  85. package/dist/{petsRepository.d-lp1BHRqM.d.cts → petsRepository.d-B5DWzU7C.d.cts} +1 -1
  86. package/dist/{petsRepository.d-BuGHymNx.d.ts → petsRepository.d-Ba3xhJcj.d.ts} +1 -1
  87. package/dist/planSignals.d-Cl6n5QpS.d.cts +126 -0
  88. package/dist/planSignals.d-DtxZoWGM.d.ts +126 -0
  89. package/dist/{ports.d-COIyN624.d.ts → ports.d-BDtwHxmW.d.ts} +4 -4
  90. package/dist/{ports.d-CEROoqnA.d.cts → ports.d-gZNTn8Qf.d.cts} +4 -4
  91. package/dist/{presentation.d-DMbdad7G.d.cts → presentation.d-vy8kTGfR.d.cts} +6 -0
  92. package/dist/{presentation.d-DMbdad7G.d.ts → presentation.d-vy8kTGfR.d.ts} +6 -0
  93. package/dist/quickPrompts.d-NM_81Jc1.d.cts +19 -0
  94. package/dist/quickPrompts.d-NM_81Jc1.d.ts +19 -0
  95. package/dist/records/depth/index.d.cts +13 -9
  96. package/dist/records/depth/index.d.ts +13 -9
  97. package/dist/records/index.cjs +264 -140
  98. package/dist/records/index.d.cts +95 -24
  99. package/dist/records/index.d.ts +95 -24
  100. package/dist/records/index.js +265 -141
  101. package/dist/{requestFunnel.d-DWQQpjFR.d.cts → requestFunnel.d-CR4akGCY.d.cts} +2 -2
  102. package/dist/{requestFunnel.d-CXUMPw1K.d.ts → requestFunnel.d-DFf9C__p.d.ts} +2 -2
  103. package/dist/{resolve.d-jI8FmBj3.d.cts → resolve.d-CoQWUy1Y.d.cts} +1 -1
  104. package/dist/{resolve.d-jI8FmBj3.d.ts → resolve.d-CoQWUy1Y.d.ts} +1 -1
  105. package/dist/{runtimeTypes.d-4yFNNuYR.d.ts → runtimeTypes.d-BqBOrZxa.d.ts} +6 -6
  106. package/dist/{runtimeTypes.d-D6N_fhxx.d.cts → runtimeTypes.d-CHdH-y2c.d.cts} +6 -6
  107. package/dist/{useRecordsDepth.d-sAq2Qkhr.d.cts → screenProps.d-B1dIANI0.d.cts} +5 -91
  108. package/dist/{useRecordsDepth.d-DFcCfiXm.d.ts → screenProps.d-CVqFJw-J.d.ts} +5 -91
  109. package/dist/server/events/index.cjs +1 -1
  110. package/dist/server/events/index.d.cts +2 -2
  111. package/dist/server/events/index.d.ts +2 -2
  112. package/dist/server/events/index.js +1 -1
  113. package/dist/server/index.cjs +1 -1
  114. package/dist/server/index.d.cts +3 -3
  115. package/dist/server/index.d.ts +3 -3
  116. package/dist/server/index.js +1 -1
  117. package/dist/{sheetSeam.d-Cviqk89n.d.ts → sheetSeam.d-B09jf4YC.d.ts} +8 -4
  118. package/dist/{sheetSeam.d-DCS3LW8g.d.cts → sheetSeam.d-BBuEIVsa.d.cts} +8 -4
  119. package/dist/shop/index.cjs +227 -60
  120. package/dist/shop/index.d.cts +35 -5
  121. package/dist/shop/index.d.ts +35 -5
  122. package/dist/shop/index.js +228 -61
  123. package/dist/tabs/index.cjs +195 -0
  124. package/dist/tabs/index.d.cts +175 -0
  125. package/dist/tabs/index.d.ts +175 -0
  126. package/dist/tabs/index.js +195 -0
  127. package/dist/tabsModel.d-BfIQg6yS.d.cts +31 -0
  128. package/dist/tabsModel.d-BfIQg6yS.d.ts +31 -0
  129. package/dist/televet/booking/index.d.cts +6 -6
  130. package/dist/televet/booking/index.d.ts +6 -6
  131. package/dist/testing/index.cjs +1 -1
  132. package/dist/testing/index.d.cts +1 -1
  133. package/dist/testing/index.d.ts +1 -1
  134. package/dist/testing/index.js +1 -1
  135. package/dist/testing/rn/index.cjs +1 -1
  136. package/dist/testing/rn/index.d.cts +12 -12
  137. package/dist/testing/rn/index.d.ts +12 -12
  138. package/dist/testing/rn/index.js +1 -1
  139. package/dist/testing/web/index.d.cts +13 -13
  140. package/dist/testing/web/index.d.ts +13 -13
  141. package/dist/texting/index.cjs +40 -5
  142. package/dist/texting/index.d.cts +40 -7
  143. package/dist/texting/index.d.ts +40 -7
  144. package/dist/texting/index.js +40 -5
  145. package/dist/threadOptions.d-CnSfFVMr.d.cts +458 -0
  146. package/dist/threadOptions.d-DZ0AoQGk.d.ts +458 -0
  147. package/dist/{timelineRows.d-BNxgzYRW.d.cts → timelineRows.d-CF1KvLcQ.d.cts} +1 -1
  148. package/dist/{timelineRows.d-CU5GvvLk.d.ts → timelineRows.d-CtL0y7y1.d.ts} +1 -1
  149. package/dist/{tokens.d-DarDaV39.d.cts → tokens.d-BUVqme2D.d.cts} +1 -1
  150. package/dist/{tokens.d-DarDaV39.d.ts → tokens.d-BUVqme2D.d.ts} +1 -1
  151. package/dist/{typeStyle.d-C1HBRAI3.d.ts → typeStyle.d-B3Kdtjie.d.ts} +2 -2
  152. package/dist/{typeStyle.d-Bl8pzbBy.d.cts → typeStyle.d-DmlwyJq-.d.cts} +2 -2
  153. package/dist/useIntroSeen.d-CTWFUthO.d.cts +35 -0
  154. package/dist/useIntroSeen.d-CTWFUthO.d.ts +35 -0
  155. package/dist/usePresentation.d-BsR08Wxt.d.ts +285 -0
  156. package/dist/usePresentation.d-CZS0qlLI.d.cts +285 -0
  157. package/dist/{useRecords.d-Cb-36SF5.d.cts → useRecords.d-BYNX01El.d.cts} +2 -2
  158. package/dist/{useRecords.d-aQTzQZoV.d.ts → useRecords.d-DWk61a4c.d.ts} +2 -2
  159. package/dist/useRecordsDepth.d-DTAxFf5s.d.ts +32 -0
  160. package/dist/useRecordsDepth.d-k-zYIHTe.d.cts +32 -0
  161. package/dist/{view.d-C-SNpDJX.d.ts → view.d-BE7VOlsB.d.ts} +6 -4
  162. package/dist/{view.d-Dps5C8-s.d.cts → view.d-CAWQjcY_.d.cts} +6 -4
  163. package/dist/web/consent/index.d.cts +5 -5
  164. package/dist/web/consent/index.d.ts +5 -5
  165. package/dist/web/health-plan/index.cjs +65 -53
  166. package/dist/web/health-plan/index.d.cts +46 -192
  167. package/dist/web/health-plan/index.d.ts +46 -192
  168. package/dist/web/health-plan/index.js +79 -67
  169. package/dist/web/index.cjs +62 -46
  170. package/dist/web/index.d.cts +168 -27
  171. package/dist/web/index.d.ts +168 -27
  172. package/dist/web/index.js +63 -47
  173. package/dist/web/intro/index.cjs +167 -0
  174. package/dist/web/intro/index.d.cts +79 -0
  175. package/dist/web/intro/index.d.ts +79 -0
  176. package/dist/web/intro/index.js +167 -0
  177. package/dist/web/notifications/index.d.cts +3 -3
  178. package/dist/web/notifications/index.d.ts +3 -3
  179. package/dist/web/records/depth/index.d.cts +13 -9
  180. package/dist/web/records/depth/index.d.ts +13 -9
  181. package/dist/web/records/index.cjs +7 -7
  182. package/dist/web/records/index.d.cts +21 -82
  183. package/dist/web/records/index.d.ts +21 -82
  184. package/dist/web/records/index.js +7 -7
  185. package/dist/web/records-sheet/index.cjs +207 -128
  186. package/dist/web/records-sheet/index.d.cts +25 -16
  187. package/dist/web/records-sheet/index.d.ts +25 -16
  188. package/dist/web/records-sheet/index.js +207 -128
  189. package/dist/web/shop/index.cjs +194 -78
  190. package/dist/web/shop/index.d.cts +21 -4
  191. package/dist/web/shop/index.d.ts +21 -4
  192. package/dist/web/shop/index.js +194 -78
  193. package/dist/web/televet/booking/index.d.cts +7 -7
  194. package/dist/web/televet/booking/index.d.ts +7 -7
  195. package/dist/web/texting/index.cjs +36 -5
  196. package/dist/web/texting/index.d.cts +40 -7
  197. package/dist/web/texting/index.d.ts +40 -7
  198. package/dist/web/texting/index.js +36 -5
  199. package/package.json +36 -4
  200. package/tabs/package.json +8 -0
  201. package/web/intro/native-blocked.cjs +12 -0
  202. package/web/intro/package.json +8 -0
  203. package/dist/threadOptions.d-B1pTMmDF.d.cts +0 -260
  204. package/dist/threadOptions.d-B1pTMmDF.d.ts +0 -260
  205. package/dist/usePresentation.d-D6qsFzBz.d.cts +0 -9
  206. package/dist/usePresentation.d-DuGQe_Do.d.ts +0 -9
@@ -0,0 +1,175 @@
1
+ import { EverfurChatProps } from '@everfur/sdk/chat';
2
+ import { EverfurHealthPlanProps } from '@everfur/sdk/health-plan';
3
+ import { EverfurRecordsProps } from '@everfur/sdk/records';
4
+ import { ReactNode } from 'react';
5
+ import { StyleProp, ViewStyle } from 'react-native';
6
+ import { P as PetRef } from '../ids.d-B2GAAifq.cjs';
7
+ import { E as EverfurStarterPrompt } from '../quickPrompts.d-NM_81Jc1.cjs';
8
+ import { E as EverfurIntroCopy, a as EverfurIntroBlank, b as EverfurRecordsRequested, d as EverfurRecordsLanded, I as IntroText } from '../introEvents.d-fAZitxMA.cjs';
9
+ export { c as EVERFUR_INTRO_COPY, e as IntroFacts, f as IntroPetWords, g as IntroTextInput, h as defaultIntroBlanks, i as introFacts, j as introPetWords, k as introText, n as numberWord } from '../introEvents.d-fAZitxMA.cjs';
10
+ import { C as CaptureRecordsSignature } from '../clinicRequestProps.d-1dCtouGA.cjs';
11
+ import { T as TabsOpenedLike, E as EverfurTabsCopy, a as EverfurTabId } from '../tabsModel.d-BfIQg6yS.cjs';
12
+ export { b as EVERFUR_TABS_COPY } from '../tabsModel.d-BfIQg6yS.cjs';
13
+ import { H as HealthPlanPage } from '../focus.d-Dsm39DjO.cjs';
14
+ import { E as EverfurIntroMode, a as EverfurIntroFrame, b as EverfurIntroClose, c as EverfurIntroTabLabels } from '../useIntroSeen.d-CTWFUthO.cjs';
15
+ export { d as EverfurIntroExit, e as EverfurIntroSeen, i as isIntroSwipeOut, u as useEverfurIntroSeen } from '../useIntroSeen.d-CTWFUthO.cjs';
16
+ import '../EverfurResult.d-BFH-3s6E.cjs';
17
+ import '../EverfurError.d-8NHtlgzA.cjs';
18
+ import '../clinicModels.d-BXgKZqDb.cjs';
19
+ import '../models.d-BSqvbTE1.cjs';
20
+ import '../requestFunnel.d-CR4akGCY.cjs';
21
+ import '../ErrorPolicyPort.d-DirW9hgO.cjs';
22
+ import '../config.d-C0WgjutL.cjs';
23
+ import '../identity.d-CioQhZrq.cjs';
24
+
25
+ /**
26
+ * How the member got here, said by the host (explicit, owner decision (a)): a plain open from your app's own tab bar,
27
+ * or a deep link (a push, a text, a "See her plan" button) that names a tab and maybe a question for the chat. Change
28
+ * `key` for each new open, so the same link twice is two opens.
29
+ */
30
+ type EverfurTabsOpened = TabsOpenedLike;
31
+ /** EverfurChat's own props, passed through; the shell sets the pet, the question a link carries and the plan door. */
32
+ type EverfurTabsChatProps = Omit<EverfurChatProps, 'petRef' | 'initialAsk' | 'initialAskKey' | 'onOpenHealthPlan'>;
33
+ /** EverfurHealthPlan's own props, passed through; the shell sets the pet and remounts it on a changed plan. */
34
+ type EverfurTabsPlanProps = Omit<EverfurHealthPlanProps, 'petRef'>;
35
+ /** EverfurRecords' own props, passed through; the shell sets the pet, its name, Ask and the plan door. */
36
+ type EverfurTabsRecordsProps = Omit<EverfurRecordsProps, 'petRef' | 'petName'>;
37
+ /** The intro's options (`EverfurTabs intro=`). Every one is optional; `intro={false}` never plays it. */
38
+ interface EverfurTabsIntro {
39
+ /** Your own words in the intro (each defaults to empty, and an empty line is not drawn). */
40
+ readonly copy?: Partial<EverfurIntroCopy>;
41
+ /** The plan's blanks the records ask shows. Absent: the pet's weight and next shots. */
42
+ readonly blanks?: readonly EverfurIntroBlank[];
43
+ /** Sent's "Turn on notifications": your app's permission ask; resolve true once on. Absent: Everfur's preferences. */
44
+ readonly onEnableNotifications?: () => boolean | Promise<boolean>;
45
+ /** The clinic frame's "Upload a PDF or a photo instead", run once the intro closes. Absent: the Records tab opens. */
46
+ readonly onUpload?: () => void;
47
+ /** The consent step's owner name, and your own signature capture. */
48
+ readonly ownerName?: string;
49
+ readonly onCaptureSignature?: CaptureRecordsSignature;
50
+ /** The records-landed banner's app tile (your app's mark). */
51
+ readonly bannerIcon?: ReactNode;
52
+ /** The intro plays only while the window is narrower than this (Raph's intro is the phone's). Default 600. */
53
+ readonly maxWidth?: number;
54
+ }
55
+ interface EverfurTabsProps {
56
+ /** The pet the three tabs are about. Null: no pet yet (the chat starts unscoped, the plan and records wait). */
57
+ readonly petRef: PetRef | null;
58
+ /** The pet's name, for Records and the intro until the plan page names it. */
59
+ readonly petName?: string | null;
60
+ /**
61
+ * How the member got here (explicit): `{ via: 'plain' }` from your app's own tab bar, `{ via: 'link', tab }` from a
62
+ * push, a text or a "See her plan" button. A new `key` is a new open. A plain open lands on Health Plan and may play
63
+ * the intro; a link opens where it points, and the intro waits for the next plain open.
64
+ */
65
+ readonly opened: EverfurTabsOpened;
66
+ /** Whether the shell is on screen (your app's own tab is this one). Default true. */
67
+ readonly visible?: boolean;
68
+ readonly copy?: Partial<EverfurTabsCopy>;
69
+ readonly chat?: EverfurTabsChatProps;
70
+ readonly plan?: EverfurTabsPlanProps;
71
+ readonly records?: EverfurTabsRecordsProps;
72
+ /** Your content around the records screen (your own top section over it). Absent: the screen alone. */
73
+ readonly renderRecords?: (page: ReactNode) => ReactNode;
74
+ /** Your content under a pane (a composer), drawn inside the pane after the SDK's surface. */
75
+ readonly paneFooter?: Partial<Record<EverfurTabId, ReactNode>>;
76
+ /**
77
+ * The pet's results are not back yet: Ask draws no focus card and no pill and offers `pendingStarterPrompts`, and
78
+ * the intro uses its waiting lines. Absent: read from the pet's Health Plan page (its waiting card, `wait`); set it
79
+ * to override that.
80
+ */
81
+ readonly resultsPending?: boolean;
82
+ /** Ask's starters while the results are not back (your words). */
83
+ readonly pendingStarterPrompts?: readonly EverfurStarterPrompt[];
84
+ /** The first-open intro. Default on (it plays once per member); false never plays it. */
85
+ readonly intro?: EverfurTabsIntro | false;
86
+ readonly onTabChange?: (tab: EverfurTabId) => void;
87
+ readonly onRecordsRequested?: (event: EverfurRecordsRequested) => void;
88
+ readonly onRecordsLanded?: (event: EverfurRecordsLanded) => void;
89
+ /** Your own toast. Absent: Raph's, drawn over the tab bar. */
90
+ readonly onToast?: (message: string) => void;
91
+ /**
92
+ * A ref the shell fills with its handle (open a tab, ask, request records), for your callbacks that live outside its
93
+ * content. Content inside the shell reads it with useEverfurTabs().
94
+ */
95
+ readonly tabsRef?: {
96
+ current: EverfurTabsHandle | null;
97
+ };
98
+ readonly style?: StyleProp<ViewStyle>;
99
+ readonly testID?: string;
100
+ }
101
+ /** What the content inside the shell can do: open a tab, ask in the chat, open the records request sheet. */
102
+ interface EverfurTabsHandle {
103
+ readonly tab: EverfurTabId;
104
+ open(tab: EverfurTabId): void;
105
+ /** Opens Ask with a question in a fresh chat. An empty question only opens Ask. */
106
+ ask(prompt: string): void;
107
+ /** Raph's records request sheet (his 2a and 2b): her clinic, the consent, Sent. Backing out stays where you are. */
108
+ requestRecords(): void;
109
+ }
110
+ /** The shell around you, inside EverfurTabs (a pane footer, your records section); null outside it. */
111
+ declare function useEverfurTabs(): EverfurTabsHandle | null;
112
+ declare function EverfurTabs(props: EverfurTabsProps): ReactNode;
113
+
114
+ /** Where the tab bar sits in the window (`measureInWindow`), so frame 1's dims leave it clear. */
115
+ interface EverfurIntroTabBar {
116
+ readonly top: number;
117
+ readonly height: number;
118
+ }
119
+ interface EverfurIntroProps {
120
+ readonly petRef: PetRef;
121
+ /** Defaults to 'intro'. */
122
+ readonly mode?: EverfurIntroMode;
123
+ /**
124
+ * The pet's Health Plan page: the pet's name and sex (her pronoun), the plan's title (the blanks card's header),
125
+ * its tips, and its vet byline. Null or absent: `petName` and the lines that need the page are not drawn.
126
+ */
127
+ readonly page?: HealthPlanPage | null;
128
+ readonly petName?: string | null;
129
+ /** The pet's vet records are already in: frame 1 only, and its button reads "See her plan". */
130
+ readonly recordsConnected?: boolean;
131
+ /** The pet's results are not back yet: frame 1's waiting lines. */
132
+ readonly resultsPending?: boolean;
133
+ /** Your own words (each defaults to empty, and an empty line is not drawn). */
134
+ readonly copy?: Partial<EverfurIntroCopy>;
135
+ /** The plan's blanks, in order. Absent: the pet's weight and next shots. */
136
+ readonly blanks?: readonly EverfurIntroBlank[];
137
+ /** The tab bar frame 1 lights, in window coordinates. Absent: his own (140 from the top, 46 tall). */
138
+ readonly tabBar?: EverfurIntroTabBar | null;
139
+ /** The frame shown, and null once closed: frame 1 lights the tab bar ('tabs'). */
140
+ readonly onFrame?: (frame: EverfurIntroFrame | null) => void;
141
+ /** The member closed it (the sheet is still going down). */
142
+ readonly onClose: (close: EverfurIntroClose) => void;
143
+ /** The sheet is down: unmount it. */
144
+ readonly onClosed?: () => void;
145
+ readonly onRequested?: (event: EverfurRecordsRequested) => void;
146
+ /**
147
+ * Sent's "Turn on notifications": resolve true once they are on (your app's own permission ask and device
148
+ * registration). Absent: Everfur's preferences for the member, push and email on (`setPreferences`).
149
+ */
150
+ readonly onEnableNotifications?: () => boolean | Promise<boolean>;
151
+ /** The clinic frame's "Upload a PDF or a photo instead", run once the intro closes. Absent: the link is not drawn. */
152
+ readonly onUpload?: () => void;
153
+ /** The consent step's owner name, and your own signature capture. */
154
+ readonly ownerName?: string;
155
+ readonly onCaptureSignature?: CaptureRecordsSignature;
156
+ /** The tab labels frame 1's rows carry. Defaults to Raph's: Ask, Health Plan, Records. */
157
+ readonly tabLabels?: EverfurIntroTabLabels;
158
+ readonly testID?: string;
159
+ }
160
+ declare function EverfurIntro(props: EverfurIntroProps): ReactNode;
161
+
162
+ /** How long his banner stays before the records land (S.bannerT, 6000ms). */
163
+ declare const RECORDS_BANNER_MS = 6000;
164
+ interface EverfurRecordsLandedBannerProps {
165
+ /** The banner's lines (`introText(...).banner`). */
166
+ readonly text: IntroText['banner'];
167
+ /** The partner's app tile (its own mark). Absent: the tile is drawn plain, in the accent colour. */
168
+ readonly icon?: ReactNode;
169
+ /** Tapped, or its six seconds ran out: land the records (open the Health Plan, say they are in). */
170
+ readonly onLand: () => void;
171
+ readonly testID?: string;
172
+ }
173
+ declare function EverfurRecordsLandedBanner({ text, icon, onLand, testID }: EverfurRecordsLandedBannerProps): ReactNode;
174
+
175
+ export { EverfurIntro, EverfurIntroBlank, EverfurIntroClose, EverfurIntroCopy, EverfurIntroFrame, EverfurIntroMode, type EverfurIntroProps, type EverfurIntroTabBar, EverfurIntroTabLabels, EverfurRecordsLanded, EverfurRecordsLandedBanner, type EverfurRecordsLandedBannerProps, EverfurRecordsRequested, EverfurTabId, EverfurTabs, type EverfurTabsChatProps, EverfurTabsCopy, type EverfurTabsHandle, type EverfurTabsIntro, type EverfurTabsOpened, type EverfurTabsPlanProps, type EverfurTabsProps, type EverfurTabsRecordsProps, IntroText, RECORDS_BANNER_MS, useEverfurTabs };
@@ -0,0 +1,175 @@
1
+ import { EverfurChatProps } from '@everfur/sdk/chat';
2
+ import { EverfurHealthPlanProps } from '@everfur/sdk/health-plan';
3
+ import { EverfurRecordsProps } from '@everfur/sdk/records';
4
+ import { ReactNode } from 'react';
5
+ import { StyleProp, ViewStyle } from 'react-native';
6
+ import { P as PetRef } from '../ids.d-B2GAAifq.js';
7
+ import { E as EverfurStarterPrompt } from '../quickPrompts.d-NM_81Jc1.js';
8
+ import { E as EverfurIntroCopy, a as EverfurIntroBlank, b as EverfurRecordsRequested, d as EverfurRecordsLanded, I as IntroText } from '../introEvents.d-tOi4o3F4.js';
9
+ export { c as EVERFUR_INTRO_COPY, e as IntroFacts, f as IntroPetWords, g as IntroTextInput, h as defaultIntroBlanks, i as introFacts, j as introPetWords, k as introText, n as numberWord } from '../introEvents.d-tOi4o3F4.js';
10
+ import { C as CaptureRecordsSignature } from '../clinicRequestProps.d-CjsMg_OD.js';
11
+ import { T as TabsOpenedLike, E as EverfurTabsCopy, a as EverfurTabId } from '../tabsModel.d-BfIQg6yS.js';
12
+ export { b as EVERFUR_TABS_COPY } from '../tabsModel.d-BfIQg6yS.js';
13
+ import { H as HealthPlanPage } from '../focus.d-CtotIyEt.js';
14
+ import { E as EverfurIntroMode, a as EverfurIntroFrame, b as EverfurIntroClose, c as EverfurIntroTabLabels } from '../useIntroSeen.d-CTWFUthO.js';
15
+ export { d as EverfurIntroExit, e as EverfurIntroSeen, i as isIntroSwipeOut, u as useEverfurIntroSeen } from '../useIntroSeen.d-CTWFUthO.js';
16
+ import '../EverfurResult.d-D_-254ZY.js';
17
+ import '../EverfurError.d-8NHtlgzA.js';
18
+ import '../clinicModels.d-CaS64-P-.js';
19
+ import '../models.d-DOwnr8fi.js';
20
+ import '../requestFunnel.d-DFf9C__p.js';
21
+ import '../ErrorPolicyPort.d-68yrE3BE.js';
22
+ import '../config.d-zd2eTb2L.js';
23
+ import '../identity.d-BksOEa6m.js';
24
+
25
+ /**
26
+ * How the member got here, said by the host (explicit, owner decision (a)): a plain open from your app's own tab bar,
27
+ * or a deep link (a push, a text, a "See her plan" button) that names a tab and maybe a question for the chat. Change
28
+ * `key` for each new open, so the same link twice is two opens.
29
+ */
30
+ type EverfurTabsOpened = TabsOpenedLike;
31
+ /** EverfurChat's own props, passed through; the shell sets the pet, the question a link carries and the plan door. */
32
+ type EverfurTabsChatProps = Omit<EverfurChatProps, 'petRef' | 'initialAsk' | 'initialAskKey' | 'onOpenHealthPlan'>;
33
+ /** EverfurHealthPlan's own props, passed through; the shell sets the pet and remounts it on a changed plan. */
34
+ type EverfurTabsPlanProps = Omit<EverfurHealthPlanProps, 'petRef'>;
35
+ /** EverfurRecords' own props, passed through; the shell sets the pet, its name, Ask and the plan door. */
36
+ type EverfurTabsRecordsProps = Omit<EverfurRecordsProps, 'petRef' | 'petName'>;
37
+ /** The intro's options (`EverfurTabs intro=`). Every one is optional; `intro={false}` never plays it. */
38
+ interface EverfurTabsIntro {
39
+ /** Your own words in the intro (each defaults to empty, and an empty line is not drawn). */
40
+ readonly copy?: Partial<EverfurIntroCopy>;
41
+ /** The plan's blanks the records ask shows. Absent: the pet's weight and next shots. */
42
+ readonly blanks?: readonly EverfurIntroBlank[];
43
+ /** Sent's "Turn on notifications": your app's permission ask; resolve true once on. Absent: Everfur's preferences. */
44
+ readonly onEnableNotifications?: () => boolean | Promise<boolean>;
45
+ /** The clinic frame's "Upload a PDF or a photo instead", run once the intro closes. Absent: the Records tab opens. */
46
+ readonly onUpload?: () => void;
47
+ /** The consent step's owner name, and your own signature capture. */
48
+ readonly ownerName?: string;
49
+ readonly onCaptureSignature?: CaptureRecordsSignature;
50
+ /** The records-landed banner's app tile (your app's mark). */
51
+ readonly bannerIcon?: ReactNode;
52
+ /** The intro plays only while the window is narrower than this (Raph's intro is the phone's). Default 600. */
53
+ readonly maxWidth?: number;
54
+ }
55
+ interface EverfurTabsProps {
56
+ /** The pet the three tabs are about. Null: no pet yet (the chat starts unscoped, the plan and records wait). */
57
+ readonly petRef: PetRef | null;
58
+ /** The pet's name, for Records and the intro until the plan page names it. */
59
+ readonly petName?: string | null;
60
+ /**
61
+ * How the member got here (explicit): `{ via: 'plain' }` from your app's own tab bar, `{ via: 'link', tab }` from a
62
+ * push, a text or a "See her plan" button. A new `key` is a new open. A plain open lands on Health Plan and may play
63
+ * the intro; a link opens where it points, and the intro waits for the next plain open.
64
+ */
65
+ readonly opened: EverfurTabsOpened;
66
+ /** Whether the shell is on screen (your app's own tab is this one). Default true. */
67
+ readonly visible?: boolean;
68
+ readonly copy?: Partial<EverfurTabsCopy>;
69
+ readonly chat?: EverfurTabsChatProps;
70
+ readonly plan?: EverfurTabsPlanProps;
71
+ readonly records?: EverfurTabsRecordsProps;
72
+ /** Your content around the records screen (your own top section over it). Absent: the screen alone. */
73
+ readonly renderRecords?: (page: ReactNode) => ReactNode;
74
+ /** Your content under a pane (a composer), drawn inside the pane after the SDK's surface. */
75
+ readonly paneFooter?: Partial<Record<EverfurTabId, ReactNode>>;
76
+ /**
77
+ * The pet's results are not back yet: Ask draws no focus card and no pill and offers `pendingStarterPrompts`, and
78
+ * the intro uses its waiting lines. Absent: read from the pet's Health Plan page (its waiting card, `wait`); set it
79
+ * to override that.
80
+ */
81
+ readonly resultsPending?: boolean;
82
+ /** Ask's starters while the results are not back (your words). */
83
+ readonly pendingStarterPrompts?: readonly EverfurStarterPrompt[];
84
+ /** The first-open intro. Default on (it plays once per member); false never plays it. */
85
+ readonly intro?: EverfurTabsIntro | false;
86
+ readonly onTabChange?: (tab: EverfurTabId) => void;
87
+ readonly onRecordsRequested?: (event: EverfurRecordsRequested) => void;
88
+ readonly onRecordsLanded?: (event: EverfurRecordsLanded) => void;
89
+ /** Your own toast. Absent: Raph's, drawn over the tab bar. */
90
+ readonly onToast?: (message: string) => void;
91
+ /**
92
+ * A ref the shell fills with its handle (open a tab, ask, request records), for your callbacks that live outside its
93
+ * content. Content inside the shell reads it with useEverfurTabs().
94
+ */
95
+ readonly tabsRef?: {
96
+ current: EverfurTabsHandle | null;
97
+ };
98
+ readonly style?: StyleProp<ViewStyle>;
99
+ readonly testID?: string;
100
+ }
101
+ /** What the content inside the shell can do: open a tab, ask in the chat, open the records request sheet. */
102
+ interface EverfurTabsHandle {
103
+ readonly tab: EverfurTabId;
104
+ open(tab: EverfurTabId): void;
105
+ /** Opens Ask with a question in a fresh chat. An empty question only opens Ask. */
106
+ ask(prompt: string): void;
107
+ /** Raph's records request sheet (his 2a and 2b): her clinic, the consent, Sent. Backing out stays where you are. */
108
+ requestRecords(): void;
109
+ }
110
+ /** The shell around you, inside EverfurTabs (a pane footer, your records section); null outside it. */
111
+ declare function useEverfurTabs(): EverfurTabsHandle | null;
112
+ declare function EverfurTabs(props: EverfurTabsProps): ReactNode;
113
+
114
+ /** Where the tab bar sits in the window (`measureInWindow`), so frame 1's dims leave it clear. */
115
+ interface EverfurIntroTabBar {
116
+ readonly top: number;
117
+ readonly height: number;
118
+ }
119
+ interface EverfurIntroProps {
120
+ readonly petRef: PetRef;
121
+ /** Defaults to 'intro'. */
122
+ readonly mode?: EverfurIntroMode;
123
+ /**
124
+ * The pet's Health Plan page: the pet's name and sex (her pronoun), the plan's title (the blanks card's header),
125
+ * its tips, and its vet byline. Null or absent: `petName` and the lines that need the page are not drawn.
126
+ */
127
+ readonly page?: HealthPlanPage | null;
128
+ readonly petName?: string | null;
129
+ /** The pet's vet records are already in: frame 1 only, and its button reads "See her plan". */
130
+ readonly recordsConnected?: boolean;
131
+ /** The pet's results are not back yet: frame 1's waiting lines. */
132
+ readonly resultsPending?: boolean;
133
+ /** Your own words (each defaults to empty, and an empty line is not drawn). */
134
+ readonly copy?: Partial<EverfurIntroCopy>;
135
+ /** The plan's blanks, in order. Absent: the pet's weight and next shots. */
136
+ readonly blanks?: readonly EverfurIntroBlank[];
137
+ /** The tab bar frame 1 lights, in window coordinates. Absent: his own (140 from the top, 46 tall). */
138
+ readonly tabBar?: EverfurIntroTabBar | null;
139
+ /** The frame shown, and null once closed: frame 1 lights the tab bar ('tabs'). */
140
+ readonly onFrame?: (frame: EverfurIntroFrame | null) => void;
141
+ /** The member closed it (the sheet is still going down). */
142
+ readonly onClose: (close: EverfurIntroClose) => void;
143
+ /** The sheet is down: unmount it. */
144
+ readonly onClosed?: () => void;
145
+ readonly onRequested?: (event: EverfurRecordsRequested) => void;
146
+ /**
147
+ * Sent's "Turn on notifications": resolve true once they are on (your app's own permission ask and device
148
+ * registration). Absent: Everfur's preferences for the member, push and email on (`setPreferences`).
149
+ */
150
+ readonly onEnableNotifications?: () => boolean | Promise<boolean>;
151
+ /** The clinic frame's "Upload a PDF or a photo instead", run once the intro closes. Absent: the link is not drawn. */
152
+ readonly onUpload?: () => void;
153
+ /** The consent step's owner name, and your own signature capture. */
154
+ readonly ownerName?: string;
155
+ readonly onCaptureSignature?: CaptureRecordsSignature;
156
+ /** The tab labels frame 1's rows carry. Defaults to Raph's: Ask, Health Plan, Records. */
157
+ readonly tabLabels?: EverfurIntroTabLabels;
158
+ readonly testID?: string;
159
+ }
160
+ declare function EverfurIntro(props: EverfurIntroProps): ReactNode;
161
+
162
+ /** How long his banner stays before the records land (S.bannerT, 6000ms). */
163
+ declare const RECORDS_BANNER_MS = 6000;
164
+ interface EverfurRecordsLandedBannerProps {
165
+ /** The banner's lines (`introText(...).banner`). */
166
+ readonly text: IntroText['banner'];
167
+ /** The partner's app tile (its own mark). Absent: the tile is drawn plain, in the accent colour. */
168
+ readonly icon?: ReactNode;
169
+ /** Tapped, or its six seconds ran out: land the records (open the Health Plan, say they are in). */
170
+ readonly onLand: () => void;
171
+ readonly testID?: string;
172
+ }
173
+ declare function EverfurRecordsLandedBanner({ text, icon, onLand, testID }: EverfurRecordsLandedBannerProps): ReactNode;
174
+
175
+ export { EverfurIntro, EverfurIntroBlank, EverfurIntroClose, EverfurIntroCopy, EverfurIntroFrame, EverfurIntroMode, type EverfurIntroProps, type EverfurIntroTabBar, EverfurIntroTabLabels, EverfurRecordsLanded, EverfurRecordsLandedBanner, type EverfurRecordsLandedBannerProps, EverfurRecordsRequested, EverfurTabId, EverfurTabs, type EverfurTabsChatProps, EverfurTabsCopy, type EverfurTabsHandle, type EverfurTabsIntro, type EverfurTabsOpened, type EverfurTabsPlanProps, type EverfurTabsProps, type EverfurTabsRecordsProps, IntroText, RECORDS_BANNER_MS, useEverfurTabs };