@everfur/sdk 0.5.9 → 0.7.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 (154) hide show
  1. package/CHANGELOG.md +279 -0
  2. package/dist/{BookedScreen-BJPbXLCG.d.ts → BookedScreen-DFJcgf1e.d.ts} +12 -2
  3. package/dist/{BookedScreen-Cnld-jB_.d.cts → BookedScreen-R5X_Zrlh.d.cts} +12 -2
  4. package/dist/{Chat-C9dVhnyt.d.ts → Chat-DZpYH8Uh.d.ts} +4 -4
  5. package/dist/{Chat-WmdRwC3b.d.cts → Chat-bATY4atj.d.cts} +4 -4
  6. package/dist/{DepthViews-CBoI9EYy.d.ts → DepthViews-BpHUbjSY.d.cts} +1 -1
  7. package/dist/{DepthViews-CmxhM8iP.d.ts → DepthViews-C4DC4Kom.d.cts} +1 -1
  8. package/dist/{DepthViews-NPFtO5Kz.d.cts → DepthViews-dLTizxjr.d.ts} +1 -1
  9. package/dist/{DepthViews-DoODlUnQ.d.cts → DepthViews-qBIoA48w.d.ts} +1 -1
  10. package/dist/animations/index.cjs +1 -1
  11. package/dist/animations/index.d.cts +3 -3
  12. package/dist/animations/index.d.ts +3 -3
  13. package/dist/animations/index.js +1 -1
  14. package/dist/{attachments-R2oajKPT.d.ts → attachments-CPRFfoHT.d.ts} +2 -2
  15. package/dist/{attachments-c4mJcIWU.d.cts → attachments-CUOGILir.d.cts} +5 -5
  16. package/dist/{attachments-CuFT1o5q.d.ts → attachments-CXAnZcEg.d.ts} +5 -5
  17. package/dist/{attachments-OaW36D0H.d.cts → attachments-Ce06TWqe.d.cts} +2 -2
  18. package/dist/{bookingCopy-DGQPrisa.d.cts → bookingCopy-BwVopcoV.d.cts} +451 -50
  19. package/dist/{bookingCopy-EtPJ4nME.d.ts → bookingCopy-DFTv9w6J.d.ts} +451 -50
  20. package/dist/{bookingTypes-DCs8mmBb.d.cts → bookingTypes-D4pD3tHs.d.cts} +13 -1
  21. package/dist/{bookingTypes-DCs8mmBb.d.ts → bookingTypes-D4pD3tHs.d.ts} +13 -1
  22. package/dist/{branding-Ry0em51L.d.ts → branding-Bio5MM6g.d.cts} +135 -3
  23. package/dist/{branding-DiaCIJZL.d.cts → branding-ytH4jJq1.d.ts} +135 -3
  24. package/dist/{callCopy-CPe9mbwG.d.cts → callCopy-DHjem0R-.d.cts} +12 -1
  25. package/dist/{callCopy-CPe9mbwG.d.ts → callCopy-DHjem0R-.d.ts} +12 -1
  26. package/dist/{casesRepository-DB5c8AAo.d.cts → casesRepository-CJchNp3x.d.cts} +1 -1
  27. package/dist/{casesRepository-Cu8h8gQK.d.ts → casesRepository-DAVcY3jC.d.ts} +1 -1
  28. package/dist/chat/index.cjs +1 -1
  29. package/dist/chat/index.d.cts +9 -9
  30. package/dist/chat/index.d.ts +9 -9
  31. package/dist/chat/index.js +1 -1
  32. package/dist/client/index.cjs +6 -6
  33. package/dist/client/index.d.cts +10 -10
  34. package/dist/client/index.d.ts +10 -10
  35. package/dist/client/index.js +6 -6
  36. package/dist/{config-DlR_I-0S.d.ts → config-ZxwCylac.d.ts} +1 -1
  37. package/dist/{config-DQFMkaTU.d.cts → config-h5h6TsHL.d.cts} +1 -1
  38. package/dist/consent/index.cjs +1 -1
  39. package/dist/consent/index.d.cts +5 -5
  40. package/dist/consent/index.d.ts +5 -5
  41. package/dist/consent/index.js +1 -1
  42. package/dist/{context-DZEieVJ5.d.cts → context-CtsAgJnc.d.cts} +7 -7
  43. package/dist/{context-CLuquPRB.d.ts → context-DtPIshVA.d.ts} +7 -7
  44. package/dist/{copy-B2DOzSSy.d.cts → copy-CaWaplQc.d.cts} +2 -2
  45. package/dist/{copy-ptTCT5-J.d.ts → copy-Cg89Qoal.d.ts} +2 -2
  46. package/dist/core/index.cjs +9 -9
  47. package/dist/core/index.d.cts +21 -21
  48. package/dist/core/index.d.ts +21 -21
  49. package/dist/core/index.js +9 -9
  50. package/dist/{depth-CtyC7HOF.d.ts → depth-Bo4bAwcn.d.ts} +132 -38
  51. package/dist/{depth-DuOyvthD.d.cts → depth-EXZYEO70.d.cts} +132 -38
  52. package/dist/{entitlementRepository-DlGwxZ1k.d.cts → entitlementRepository-BYtVb1oU.d.cts} +3 -3
  53. package/dist/{entitlementRepository-CAtyh8Xt.d.ts → entitlementRepository-DcbIx8yV.d.ts} +3 -3
  54. package/dist/{identity-D_NR9ucT.d.ts → identity-EC5-apbY.d.ts} +1 -1
  55. package/dist/{identity-BC9AF3y4.d.cts → identity-b5Vp32Vp.d.cts} +1 -1
  56. package/dist/index.cjs +6 -6
  57. package/dist/index.d.cts +17 -17
  58. package/dist/index.d.ts +17 -17
  59. package/dist/index.js +6 -6
  60. package/dist/notifications/index.d.cts +2 -2
  61. package/dist/notifications/index.d.ts +2 -2
  62. package/dist/{pets-DuuNvKTK.d.ts → pets-B_27_agU.d.ts} +1 -1
  63. package/dist/{pets-D7UjvR1A.d.cts → pets-DM8QvKLo.d.cts} +1 -1
  64. package/dist/{petsRepository-llMvpMkp.d.cts → petsRepository-BJsJ4cju.d.cts} +1 -1
  65. package/dist/{petsRepository-C28NKFwy.d.ts → petsRepository-CuYZZaI5.d.ts} +1 -1
  66. package/dist/photo/index.cjs +1 -1
  67. package/dist/photo/index.js +1 -1
  68. package/dist/{ports-Dbw2h_M1.d.cts → ports-ZmJYgd5I.d.cts} +10 -9
  69. package/dist/{ports-s45HNNyc.d.ts → ports-nXHf50_X.d.ts} +10 -9
  70. package/dist/records/depth/index.cjs +2 -2
  71. package/dist/records/depth/index.d.cts +7 -7
  72. package/dist/records/depth/index.d.ts +7 -7
  73. package/dist/records/depth/index.js +2 -2
  74. package/dist/records/index.cjs +3 -3
  75. package/dist/records/index.d.cts +19 -10
  76. package/dist/records/index.d.ts +19 -10
  77. package/dist/records/index.js +3 -3
  78. package/dist/{requestFunnel-D_o7se38.d.cts → requestFunnel-C_cZXhIA.d.cts} +2 -2
  79. package/dist/{requestFunnel-CqwOiZNJ.d.ts → requestFunnel-Ve9BshTB.d.ts} +2 -2
  80. package/dist/{runtimeTypes-DS0RLoKN.d.ts → runtimeTypes-ByKsp8hm.d.ts} +5 -5
  81. package/dist/{runtimeTypes-BNBENMkz.d.cts → runtimeTypes-D155OlBW.d.cts} +5 -5
  82. package/dist/server/events/index.cjs +1 -1
  83. package/dist/server/events/index.d.cts +2 -2
  84. package/dist/server/events/index.d.ts +2 -2
  85. package/dist/server/events/index.js +1 -1
  86. package/dist/server/index.cjs +1 -1
  87. package/dist/server/index.d.cts +3 -3
  88. package/dist/server/index.d.ts +3 -3
  89. package/dist/server/index.js +1 -1
  90. package/dist/televet/booking/index.cjs +4 -1
  91. package/dist/televet/booking/index.d.cts +116 -29
  92. package/dist/televet/booking/index.d.ts +116 -29
  93. package/dist/televet/booking/index.js +4 -1
  94. package/dist/televet/call/index.cjs +1 -1
  95. package/dist/televet/call/index.d.cts +1 -1
  96. package/dist/televet/call/index.d.ts +1 -1
  97. package/dist/televet/call/index.js +1 -1
  98. package/dist/televet/index.cjs +1 -1
  99. package/dist/televet/index.js +1 -1
  100. package/dist/testing/index.cjs +3 -3
  101. package/dist/testing/index.d.cts +1 -1
  102. package/dist/testing/index.d.ts +1 -1
  103. package/dist/testing/index.js +3 -3
  104. package/dist/testing/rn/index.cjs +1 -1
  105. package/dist/testing/rn/index.d.cts +14 -12
  106. package/dist/testing/rn/index.d.ts +14 -12
  107. package/dist/testing/rn/index.js +1 -1
  108. package/dist/testing/web/index.d.cts +9 -9
  109. package/dist/testing/web/index.d.ts +9 -9
  110. package/dist/{timelineRows-B6nCq30k.d.cts → timelineRows-BNF43SXK.d.cts} +1 -1
  111. package/dist/{timelineRows-DacfDpDU.d.ts → timelineRows-DXpjECfA.d.ts} +1 -1
  112. package/dist/{tokens-DOTIxrws.d.cts → tokens-BYtbKwFh.d.cts} +12 -4
  113. package/dist/{tokens-DOTIxrws.d.ts → tokens-BYtbKwFh.d.ts} +12 -4
  114. package/dist/{typeStyle-achxqQ-h.d.cts → typeStyle-BqfwxZH4.d.cts} +2 -2
  115. package/dist/{typeStyle-DROhJNkh.d.ts → typeStyle-DKz02DGU.d.ts} +2 -2
  116. package/dist/{uploadTransport-C1p8FuG8.d.cts → uploadTransport-BM_pnEWj.d.cts} +5 -0
  117. package/dist/{uploadTransport-bZIKBTyK.d.ts → uploadTransport-C6kGP1Kd.d.ts} +5 -0
  118. package/dist/{useRecordsDepth-BLK8W646.d.cts → useRecordsDepth-CARTuHKh.d.cts} +1 -1
  119. package/dist/{useRecordsDepth-C7guUoLc.d.ts → useRecordsDepth-fPSv-GXU.d.ts} +1 -1
  120. package/dist/video/index.cjs +1 -1
  121. package/dist/video/index.js +1 -1
  122. package/dist/{view-BF9oW2GJ.d.cts → view-DGPaVno8.d.cts} +47 -5
  123. package/dist/{view-B6JsD22K.d.ts → view-Dc-JlFkf.d.ts} +47 -5
  124. package/dist/web/consent/index.cjs +1 -1
  125. package/dist/web/consent/index.d.cts +5 -5
  126. package/dist/web/consent/index.d.ts +5 -5
  127. package/dist/web/consent/index.js +1 -1
  128. package/dist/web/index.cjs +7 -7
  129. package/dist/web/index.d.cts +23 -22
  130. package/dist/web/index.d.ts +23 -22
  131. package/dist/web/index.js +7 -7
  132. package/dist/web/notifications/index.d.cts +3 -3
  133. package/dist/web/notifications/index.d.ts +3 -3
  134. package/dist/web/records/depth/index.cjs +2 -2
  135. package/dist/web/records/depth/index.d.cts +7 -7
  136. package/dist/web/records/depth/index.d.ts +7 -7
  137. package/dist/web/records/depth/index.js +2 -2
  138. package/dist/web/records/index.cjs +3 -3
  139. package/dist/web/records/index.d.cts +28 -17
  140. package/dist/web/records/index.d.ts +28 -17
  141. package/dist/web/records/index.js +3 -3
  142. package/dist/web/televet/booking/index.cjs +4 -2
  143. package/dist/web/televet/booking/index.d.cts +228 -90
  144. package/dist/web/televet/booking/index.d.ts +228 -90
  145. package/dist/web/televet/booking/index.js +4 -2
  146. package/dist/web/televet/call/index.cjs +1 -1
  147. package/dist/web/televet/call/index.d.cts +1 -1
  148. package/dist/web/televet/call/index.d.ts +1 -1
  149. package/dist/web/televet/call/index.js +1 -1
  150. package/dist/web/televet/index.cjs +2 -2
  151. package/dist/web/televet/index.d.cts +2 -2
  152. package/dist/web/televet/index.d.ts +2 -2
  153. package/dist/web/televet/index.js +2 -2
  154. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,285 @@ changes that has not been earned by any production integration yet.
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.7.0] - 2026-10-01
14
+
15
+ ### Added
16
+
17
+ - **Records share: send a pet's record to a vet, groomer or kennel by email, and share it for an audience while
18
+ the server says so (web and React Native).** The share sheet gains the design's `Who it’s for` (`Vet` /
19
+ `Groomer` / `Boarding`), `Send to` (`vet@example.com…`) and `Send` / `Sending…`, over `POST
20
+ /widget/v1/records/pets/{pet_ref}/everfur_record/share/email`. The server mints the link and emails it; the
21
+ link is NEVER returned, so it never reaches `onOpenUrl`, the clipboard or the screen, and the new row under
22
+ `Active links` has no URL. The sheet says `Sent to {email}. The link works for 7 days.` (and `Add an email to
23
+ send {pet}’s record.` for an empty field). This works with EFBackend's `partner.records_share_audience_enabled`
24
+ off (default), where the pick only chooses the email's wording. ONLY while it is on, `GET
25
+ /widget/v1/records/features` serves `share_audiences` (parsed fail closed: malformed is no audiences, never
26
+ the upload types), the copy-link mint sends `{audience}`, and the sheet draws the lead (`Pick who it’s for; we
27
+ include the right pages.`, the web's `Share a snapshot of what {pet}’s vets recorded. ...`) and a `What’s
28
+ included` list derived from the served scope with the SDK's own section labels (a boarding list never
29
+ mentions a phone number). With it off neither is drawn, because the content is the same for everyone. New:
30
+ `RecordsDepthClient.emailShare`, `readFeatures?()`, `createShare(petRef, { audience })`,
31
+ `RecordsFeatures.shareAudiences`, `mapShareAudiences`, `mapRecordShareEmailReceipt`, `isShareRecipientEmail`,
32
+ `RecordShareAudience` and friends, `audience` on `RecordShare` and `RecordShareLink`, and `shareAudiences`,
33
+ `features`, `sending`, `sendEmail` on `useRecordShares`. The nameless `Add an email to send the record.` and
34
+ the mail failure `Could not send the email. Please try again.` are owner-approved (2026-10-01).
35
+ - **Vet messages and the visit summary, in your app (preview, dark until Everfur turns it on).** The Everfur app's
36
+ vet thread and visit summary on both platforms, over the five partner routes of EFBackend #1809
37
+ (`/widget/v1/televet/messages/threads`, one pet's thread and its send, the read receipt, and
38
+ `/consults/{consult_id}/summary`), which sit behind `partner.televet_messages_enabled` (default OFF). While the
39
+ switch is off the thread list answers 404 and nothing below is drawn. While it is on: the visits screen gains the
40
+ design's "Messages" card (one row per pet, the newest message, "New" / web "New reply" while unread), the visit
41
+ before the call gains "Running late? Message {vet}", a finished visit opens its approved summary ("What {vet} saw",
42
+ "{pet}’s plan" word for word, "From this visit", the vet card, "Book a follow-up"), and the thread screen reads and
43
+ sends text with the design's composer and note. New exports from `@everfur/sdk/televet/booking` and
44
+ `@everfur/sdk/web/televet/booking`: `TelevetVetThreadScreen`, `TelevetVisitSummaryScreen`, `useVetThreads`,
45
+ `useVetThread`, `useVisitSummary`, `vetThreadPetRef`, `VET_MESSAGES_COPY`, the wire types (`VetThread`,
46
+ `VetMessage`, `VisitSummary`, ...), the path builders and `isVetMessagesDark` / `isVetThreadVetFirst`.
47
+ `TelevetBookingController` gains five optional methods (`listVetThreads`, `listVetMessages`, `sendVetMessage`,
48
+ `markVetThreadRead`, `visitSummary`); an injected controller without them gets no Messages card, as a dark tenant
49
+ does. `TelevetScreen` gains `thread` and `summary`. The 409 line (`Your vet will write first. You can reply once
50
+ they do.`) and a message's attachment count (`{n} attached`) are owner-approved (2026-10-01).
51
+
52
+ - **Records: a photo of a paper record uploads, while Everfur says so (web and React Native).** The SDK now reads
53
+ `GET /widget/v1/records/features` (zod-parsed, fail closed: a failed or malformed answer is PDF only). While the
54
+ answer carries `upload_content_types` (EFBackend `partner.records_image_upload_enabled`, off by default), the
55
+ upload accepts JPEG, PNG and HEIC/HEIF as well as PDF: the controller's gate admits them and initiate declares
56
+ the photo's own type; the web picker names a photo from its first bytes, never `File.type`. The upload card
57
+ then reads the design's photo lines (`A PDF, or a photo of a paper record. Add them all; we sort them by date.`,
58
+ `Have more?` over `PDFs and photos of paper records both work. ...`, the web refusal `We can’t read this kind of
59
+ file. Upload a PDF or a photo of the record.`), and the dashboard's upload way carries `A PDF, or a photo of a
60
+ paper record.`. React Native adds `Take a photo` (`of a paper record`) when the host sets `camera` on the config
61
+ and `Choose from photos` when it passes the new `onPickPhotos` (on `EverfurRecords`, `EverfurRecordsUpload` and
62
+ `EverfurRecordsRequest`), with `Choose a file` over `PDF`. With the switch off, or with no photo path wired on
63
+ React Native, every surface is exactly as before. New API: `RecordsController.readFeatures?()`,
64
+ `useEverfurRecords({ readUploadFeatures })` and `uploadContentTypes` on its state, `acceptsPhotos`,
65
+ `RecordsFeatures`, `RecordsUploadContentType`, `RecordsPhotoContentType`, and on web `recordsDocumentAccept` plus
66
+ an optional `types` argument on `fileToHandle`, `isUploadableHandle` and `pickDocument`.
67
+
68
+ ### Changed
69
+
70
+ - **The vet booking asks the emergency question itself, straight after Describe (web and React Native).** With no
71
+ `onTriageReason` seam, `EverfurTelevetBooking` now asks `TelevetBookingController.triage`, a new optional method
72
+ that posts the member's words to `POST /widget/v1/televet/consults/triage` (served dark on the partner plane
73
+ behind `partner.televet_early_triage_enabled`, the booking's own classifier). An emergency or fallback verdict
74
+ opens the existing approved emergency warning before the vet picker, instead of only at Confirm. Every failure
75
+ of the read (the dark 404, 403, 429, 5xx, an unreadable body) answers `null` and the flow goes on exactly as
76
+ before; one attempt, no retry. A host seam still wins. `TelevetTriageVerdict` now lives in the core booking
77
+ types and is re-exported unchanged; `KNOWN_PARTNER_ROUTES` gains the route and `KNOWN_ABSENT_ROUTES` loses it.
78
+ - **Televet booking: photos, videos and documents reach the vet when the partner plane serves them.** A pick
79
+ from the host's `onPickMedia` is presigned when picked through the new `POST
80
+ /widget/v1/televet/attachments/initiate` (EFBackend #1806, dark behind `partner.televet_booking_media_enabled`)
81
+ and sent at Confirm, one at a time, through the chat attachment transport (the S3 POST, no bytes before Confirm);
82
+ its `s3_key` goes in `media_refs`. What did not go is counted into the existing attachment notice: a failed post
83
+ or presign, the server's own `FILE_TOO_LARGE` / `INVALID_CONTENT_TYPE`, the local type and size rules (the
84
+ server's list: JPEG, PNG, WebP, HEIC/HEIF, PDF, CSV, MP4, MOV; 25 MB, video 200 MB), and any key the booking
85
+ did not keep. DARK (the presign's 404, or an injected controller with no `initiateAttachment`), nothing is sent,
86
+ `media_refs` is `[]` and every pick is reported unsent, exactly as before. Two approved design lines render only
87
+ when true: `Optional. A close-up in good light helps.` under the row once the presign has answered, and `{pet}’s
88
+ records, your notes and the photo go to {vet} ahead of the call.` on the confirmation when the records were
89
+ shared and exactly one photo went and the consult kept it. New: `TelevetBookingController.initiateAttachment`,
90
+ `TelevetIntakeMedia`'s `meta` and `TelevetBookedScreen`'s `sentPhoto`. On the web the bytes are read back from
91
+ the host's `blob:` URL, so a host page's CSP needs `connect-src` for `blob:` and the upload bucket, and a web
92
+ upload in production also needs the televet media bucket's CORS for the partner origin (EFBackend #1825).
93
+ - **Televet cancel: "What changed?" is optional on both platforms.** The question is marked `Optional`, as the
94
+ approved design marks it (web `cancel`, mobile `vet-cancel`, 30 Sep 2026). The web no longer refuses a cancel
95
+ with no answer picked (`Tell us why you are cancelling.` is gone); like React Native it sends the reviewed fixed
96
+ reason (`Cancelled by the pet parent in the app.`) instead, and a picked answer can be taken back. A picked
97
+ answer still sends its own words. The wire always carries a `reason` (never a `reason_code`), so the cancel is
98
+ valid whether or not the server's optional-reason flag is on.
99
+ - **Records: clinic search results show their distance in miles.** The clinic picker draws `3.2 mi` (and says `3.2
100
+ miles away`) as the design does, converted locally from the wire's `distance_km`; it drew kilometres. Web and React
101
+ Native.
102
+ - **Records: a source document reads its page count.** A row under `Sources on file` now reads `{n} pages · {date}`
103
+ (the design's `3 pages · Aug 14`; one page reads `1 page`) when the record wire counts the document's pages.
104
+ EFBackend serves `documents[].page_count` only while its `partner.records_document_page_count_enabled` switch is
105
+ armed (default off); until then, and for a document the record worker has not counted, the row keeps its date alone.
106
+ Web and React Native.
107
+ - **Visual and copy change: chat reads and looks like the Everfur app design (web and React Native).** By owner
108
+ decision (30 Sep 2026) the design artifacts count as approved, so chat carries their wording verbatim (the web
109
+ surface the web design's, React Native the mobile design's where they differ) and their layout on the theme's
110
+ derived tokens, so partner palettes still apply. Copy: the composer asks `Ask anything about {pet}…` (web: `Ask a
111
+ follow-up…` once a reply is on screen, `Tell us what’s happening…` under an emergency banner) and is named
112
+ `Message`; the reply is headed `Everfur` (not drawn for a `hide_powered_by` tenant); the waiting line is `Reading
113
+ {pet}’s records…` and a settled reply is announced as `Everfur answered.` rather than read out; the emergency tier
114
+ is `Call a vet now`, with the ASPCA Animal Poison Control call (owner-approved) and `Nearest emergency vet` when
115
+ the host's `onFindVet` is the route; the history is `Chats` (`Search chats…`, `Chats and vet messages · {n}` once
116
+ every row is loaded, `New reply · {date}` on an unread row, `No chats match that.`); the pet sheet is `Your pets`
117
+ with `Add a pet`; the switch control is `{pet}. Switch pet`; the web vet-prep chip is `Book a video visit` and
118
+ the React Native one drops its full stop. The fixed clinical disclaimer band is replaced on chat by the design's
119
+ one-line footnote under the composer (compiled and frozen in the chat copy module; records keep the band).
120
+ Layout: 20 px bubbles with a 6 px tail (a vet's at the top left, still pink), the body size on every box, the
121
+ sender's name over a reply, a left-aligned hello with edge-less starter chips, the web's outline follow-up chips
122
+ and the mobile design's headed follow-up rows, a Dark Green send disc on the web composer, a white history panel
123
+ (the web rail was brand green), and the emergency banner painted from the theme's alert red. New bubbles pop from
124
+ their corner and starter chips rise, both off under reduced motion. The quick prompts stay the compiled templates:
125
+ the design's chips name one sample pet's records, and the SDK has no served source of record-personalised prompts.
126
+ The web chat's geometry guard now pins the design and records where it departs from the shipped web app.
127
+ `TypingIndicator` (`@everfur/sdk/testing/rn`) takes an optional `petName` for the reading line; called with no
128
+ props it reads `your pet`, as before it drew with none.
129
+
130
+ - **Visual and copy change: the records surfaces read and look like the Everfur app designs (web and React Native,
131
+ medical records only).** By owner decision (30 Sep 2026) the records screens port the owner-approved design
132
+ artifacts' wording and layout. The clinical disclaimer band under every records screen is replaced by the
133
+ artifacts' one-line footnote, `Everfur summarizes what your vet recorded. It is informational, not
134
+ diagnostic.` (compiled, not overridable, `RECORDS_FOOTNOTE`); chat and televet keep the band. Titles follow the
135
+ pet (`Rex's Records` on the web, the pet's name on React Native, `Request Rex's records`, `Send Rex's record`,
136
+ `Rex's health record`; the nameless forms are unchanged), the full record is `Visits & records`, the clinic
137
+ release is `Check and send` with the artifact's checkbox wording around the drawn signature (kept), `What we ask
138
+ for`, `What happens next` and `Send request`, the clinic picker gains its lead and `How it works`, the request
139
+ screen gains `Request sent`, `Where it stands` and `Request details`, a clinic request's tracker reads `Request
140
+ sent`, `Clinic notified`, `Waiting for records…` with a `Now` pill, and the in-flight dashboard reads `Rex's
141
+ records are on the way` with `Another clinic` and `Upload a document` beside it. Cards take the artifacts'
142
+ radius 20 and neutral edge, buttons are 52 tall and press to 0.97, status pills are the artifacts' mono capitals,
143
+ sections rise in on the web, and the record tiles' tints are derived from the theme. Every motion rests under
144
+ reduced motion. Lines whose promise the partner wire cannot keep yet are held back and the truthful line stays:
145
+ photo upload, send-by-email and audiences, "We'll text you",
146
+ reminders, a follow-up date, clinic search by phone or fax, and the birth-date line of the release.
147
+ The share sheet states the link's terms (`Sent as a secure link that works for 7 days. You can stop sharing it
148
+ any time.`; by owner decision a new link lives 7 days) and, on React Native, `Link copied. It works for 7 days.`
149
+ and `Couldn't copy. The link is {url}`. The vendored platform contract is re-synced to EFBackend main (digests
150
+ only). `buildRequestTimeline` (a hook-based UI's rail) now reads the same words for a clinic request and takes an
151
+ optional `{ petName }` for its last step (`Added to Rex's records`); no other export changes.
152
+
153
+ - **Visual and copy change: the vet visit surfaces follow the owner-approved Everfur app designs of 30 Sep 2026
154
+ (web and React Native).** The booking is the designs' eight steps, "Step n of 8": who, where the pet will be
155
+ during the visit (new, asked on every booking and seeded with `usState`; what each place permits is read from
156
+ the served state policy), what's going on (now on React Native too, with the designs' twelve issues for every
157
+ pet), the description, an explicit emergency check (new: seven signs and a yes or no; "Yes" shows the exits and
158
+ holds the flow until "I’ve handled this, continue booking", which sends `emergency_acknowledged: true`), your
159
+ vet, the time (grouped Morning, Afternoon, Evening) and the review ("Book the visit", the attestation "{pet} and I
160
+ will be in {state} during the visit.", a Change on When; on the web a press with a box unticked says "Check both
161
+ boxes to book the visit."). The flow bar, option cards, chips, day and time chips, review rows, confirmation,
162
+ visits page ("Video visits", "Next video visit", "Past video visits", the vet footnote), cancel ("What changed?"
163
+ with four answers, sent as the reason) and reschedule (a "Move to ..." button; picking no longer moves the visit)
164
+ are restyled from theme tokens only, and the waiting room words follow ("Waiting room", "Before {vet} joins",
165
+ "15 minutes"). The ASPCA Animal Poison Control row is now drawn on both platforms (owner approval). The
166
+ `VetVisitButton` default label is "Vet" (was "Talk to a vet"). Not ported, because this plane cannot keep the
167
+ promise yet: text-message reminders, a photo reaching the vet, an optional cancel reason, vet messages, the visit
168
+ summary, the device checks and "joins in about 3 minutes". Public API: `TelevetBookingStep` and
169
+ `TELEVET_BOOKING_STEPS` gain `where` and `emergency`; `TELEVET_BOOKING_COPY` gains keys and changes values;
170
+ `televetIssueChips` no longer filters by species; the web `TelevetBookingChrome` takes `showBack`, the RN one
171
+ `triageOpen`; `TelevetBookedScreen` takes `sharedRecords`; `TelevetSlotPicker` takes `periodLabels`.
172
+
173
+ - **Visual change: the default theme adopts the Everfur design tokens of 26 Sep 2026 (web and React Native).** By
174
+ owner decision (30 Sep 2026) the compiled light default follows the design tokens ahead of the Everfur apps. Body
175
+ text is solid black (`text.primary`, `onBubbleVet` `#111111` -> `#000000`). Off-White is retired: the card,
176
+ composer and popover grounds are white (`surfaceCream`, `composerFill` `#FDFBF8` -> `#FFFFFF`), so
177
+ `surface_style: 'cream'` now paints white on the light palette. The warm greys become the design tokens' neutral
178
+ ones: `text.muted` `#6E6660` -> `#6B6B6B`, `borderRingCream` `#D8D2C8` -> `#E4E4E4`, `surfaceSubtle`
179
+ `#EFE9E3` -> `#F1F5F2` (mist), `skeleton` -> `#E9F1E9`, `badgeBgNeutral` follows the new grey. The reds are the
180
+ one alert red: `danger` `#B91C1C` and `errorRed` `#CC1600` -> `#C03410`, `badgeBgCritical` -> that red at 6%.
181
+ The type scale moves to the design tokens': `caption` 12 -> 13, `bodyTight` 13 -> 15, `body` 14 -> 17,
182
+ `subtitle` 16 -> 20, `heading` 18 -> 22 (`nano` to `tiny` and `verdict` are unchanged), and the React Native chat
183
+ bubble and field line heights follow the body size. Every ink still passes the contrast guards on both palettes.
184
+ The dark palette's `text.muted` is the neutral `#9A9A9A` (was `#9A938C`); the rest of the dark palette, the vet
185
+ bubble's pink and the motion curves are unchanged. No font is bundled: the design tokens' Azeret reaches a surface
186
+ only when a branding supplies it (`fonts`, or `font_urls` on the web). Partner branding resolves exactly as before
187
+ (lock > partner code > console > this default); only the default moved. A partner `font_size_base` still sets the
188
+ body size, and the other sizes now scale from the new 17 px body rather than 14.
189
+
190
+ ### Fixed
191
+
192
+ - **Televet booking: the step counter counts the steps the owner sees (web and React Native).** A one-pet household
193
+ never sees the pet step, but the bar still counted it, so the flow opened on `Step 2 of 8` and never showed a
194
+ first step (partner smoke test of 0.6.0). It now reads `Step 1 of 7` ... `Step 7 of 7` there (seven segments on
195
+ React Native) and keeps the design's eight for a household with a pet to choose. New optional
196
+ `TelevetBookingChromeProps.stepContext` (the reducer's `TelevetBookingContext`) for a host driving the chrome
197
+ itself; absent, the bar counts eight as before.
198
+ - **Records: no empty heading on the upload screen (web and React Native).** Its header row passed an empty title
199
+ and still drew an `<h2>` (a Text with the header role on React Native) that a screen reader lists and reads as
200
+ nothing (partner smoke test of 0.6.0). The header row now draws a spacer for an empty title, and on the web the
201
+ screen's own title (`Upload a document`) is the heading focus moves to when the member arrives.
202
+ - **Records: a date in the record's Identity section reads as a date.** The server sends identity values raw, so the
203
+ date of birth showed as `2022-07-27`; a bare calendar date now uses the records date format (`Jul 27, 2022`) on
204
+ web and React Native. Species and sex still show as sent (`dog`, `female`): the SDK has no vocabulary for them,
205
+ so display labels for those are a server item.
206
+ - **Records clinic request forms (`EverfurClinicRequest`, `EverfurClinicRequestBatch`, web and React Native): search
207
+ results no longer fill the page.** The forms asked for 100 clinics and drew every one inline (about 6,750 px on
208
+ the partner smoke test of 0.6.0). They now ask for one page of 25 (the clinic picker's page size), draw the first
209
+ five, and add five more per `Load more` (the SDK's existing label); a member who still has not found the clinic
210
+ refines the search.
211
+ - **"Please add your signature before submitting." no longer greets a form just opened.** It was an alert from the
212
+ first render. It now appears only once everything else is filled in, when the missing signature is what keeps
213
+ Send closed.
214
+ - **The signature pad's `Draw your signature in the box above.` is gone in typed mode (web),** where there is
215
+ nothing to draw. No typed-mode hint exists in the consumer apps or the designs, so the line stays empty.
216
+ - **Chat: opening chat no longer creates an empty conversation (web and React Native).** The bootstrap prime
217
+ POSTed `/widget/v1/conversations` on every mount (twice under React StrictMode's double mount), so the member's
218
+ history filled with empty `New conversation` rows (partner smoke test of 0.6.0). The prime still reads the head
219
+ of the list (resuming a thread with an unread reply, which is also what delivers an owed check-in) and prefetches
220
+ the suggested prompts; the conversation is now created by the first send, which pays that one round trip before
221
+ it streams. `runtime.prepare()` no longer creates one either. `ChatController.primeConversation()` now settles to
222
+ `ConversationId | null` (null: no thread opened yet), and a failed head read is the prime's reported failure
223
+ (except a 403, since a key without history read can still chat). The web `Everfur answered.` announcement now
224
+ also fires for the first reply of a new thread, as it already did on React Native.
225
+
226
+ ## [0.6.0] - 2026-09-29
227
+
228
+ ### Added
229
+
230
+ - **Appearance: the Stripe-shaped theme, and the global variables it needs (web and React Native).** The `theme`
231
+ prop accepts `appearance: { theme, variables, rules }`: presets `everfur`, `minimal`, `night`
232
+ (`APPEARANCE_PRESETS`); the variables `colorPrimary`, `colorAccent`, `colorBackground`, `colorText`,
233
+ `colorDanger`, `fontFamily`, `fontSizeBase`, `borderRadius`, `spacingUnit`, `colorScheme`; and `rules` for the
234
+ nine slots. It expands onto the flat branding fields (`expandAppearance`), so precedence, locks and the
235
+ contrast guard are the flat fields' own. Eight new flat fields, additive on wire schema 2 (an older SDK ignores
236
+ them): `background_color` / `background_color_dark` (the ground family: surface, page, chat, assistant reply,
237
+ with the cream, subtle and ring grounds derived), `text_color` / `text_color_dark`, `danger_color`,
238
+ `font_size_base` (px, 12 to 20), `border_radius` (px, 0 to 32; locks with `radius_scale`), `spacing_unit` (px,
239
+ 3 to 6). Body, muted, meta and danger inks are now pushed to 4.5:1 on every ground with the pole the grounds call
240
+ for (unchanged on every compiled palette). The frame protocol carries a theme one level deeper so
241
+ `appearance.rules` reaches the iframe. The cross-repo contract is `contract/appearance/appearance_v1.json`.
242
+ - **`danger_color_dark`** (`colorDanger` under a dark `colorScheme`, and `dangerColorDark`): the dark palette's
243
+ danger colour. Without it the dark palette derives one from `danger_color` with the brand colours' algorithm
244
+ (`#B00020` -> `#FF4769`, the value EFBackend's fold now puts on the wire), then pushes it only as far as its
245
+ critical wash needs. A `danger_color` lock keeps its dark twin, as the other colour locks do, and a `fonts` lock
246
+ keeps `font_urls` (EFBackend `WIRE_LOCK_NAMES`).
247
+ - **`EverfurColorTokens.onDanger`**: the label on a danger fill (the Cancel visit button, web and React Native).
248
+ It is `onPrimary` wherever that already reads at 4.5:1 on the danger fill (every compiled palette and every dark
249
+ partner brand), else the legible pole: a light partner primary's near-black label read 2.92:1 on the red.
250
+
251
+ ### Changed
252
+
253
+ - **Visual change: the default light error red is darker, so safety text reads at AA (web and React Native).** The
254
+ compiled light `errorRed` moves from `#FF1B00` to `#CC1600`, the same hue at 40% lightness. It inks the booking
255
+ EMERGENCY title and its banner edge, the consent toggle's error and other error text. `#FF1B00` read 3.88:1 on
256
+ white, 3.76:1 on the cream `#FDFBF8`, 3.22:1 on `#EFE9E3` and 3.07:1 on the critical wash; `#CC1600` reads
257
+ 5.70:1, 5.52:1, 4.74:1 and 4.51:1. The dark palette (`#FF6B5B`), `danger` (`#B91C1C`) and the thumbs-down stroke
258
+ (an icon, 3:1) are unchanged. A partner `danger_color` / `colorDanger` still overrides it exactly as before, and
259
+ a partner who set the old `#FF1B00` already saw `#CC1600`, the value the contrast guard pushes it to. This is
260
+ the one light colour where the SDK now differs from the Everfur app's `colors.errorRed`, on purpose.
261
+ - **The contrast guard covers every ink painted as text.** `errorRed` (the records error line, the consent
262
+ toggle's error, the booking emergency title on its critical wash), `warningStrong` and `text.timestamp` are
263
+ pushed to 4.5:1, and `text.placeholder` and `composerBorder` to 3:1, on the grounds each is drawn on. Measured
264
+ before: `colorDanger: '#FFB3B3'` put the emergency title at 1.7:1 on white; `auto` with `danger_color: '#B00020'`
265
+ put `errorRed` at 2.26:1 on the dark surface; a dark `background_color` on the light palette left the
266
+ placeholder and the timestamp at 1.26:1. Everfur's compiled values on Everfur's compiled grounds are kept exactly.
267
+ - **When a partner background flips the pole, the inks and brand tints the partner did not set start from the
268
+ other compiled palette** (a navy page gets the dark palette's placeholder, muted ink, warning and hairlines,
269
+ already legible there) and each ink is pushed toward the pole of its own grounds. High contrast follows the
270
+ grounds' pole too.
271
+ - **Brand as ink is `brandInk` everywhere (web and React Native).** Titles, outline pills, chevrons, glyphs and
272
+ selected edges that painted `color.brand` (1.52:1 for "Medical records" on a dark partner background) paint
273
+ `brandInk`; `brand` stays the fill. Identical on every compiled palette and every partner brand that already
274
+ reads.
275
+ - **`font_size_base` reaches the web conversation and the composer field** (15/22 and 17/28 bubbles, the 16/26
276
+ field, never under 16 px so iOS does not zoom) and the React Native bubble and field line heights. No derived
277
+ type size drops under 10 px (`nano` was 6.9 px at a base of 12); the compiled scale is unchanged.
278
+ - **The web chat's empty state fits a short box.** In the phone-width quickstart box (600 px at 390 wide) the last
279
+ starter chip was cut off at the composer; the 12% lead now gives its height up first and the 480 px floor is the
280
+ region's basis. A tall box, and a box with no height of its own, render pixel-identically.
281
+ - **On a partner ground with Everfur's brand** (a `background_color` and no `primary_color`) the web history rail
282
+ and the React Native history drawer take the partner's ground instead of Everfur green.
283
+ - **Leniency:** `parsePx` caps its input at 16 characters and no longer backtracks quadratically on a run of
284
+ spaces; Stripe-style `.Class` rule keys (`.Input`, `.Tab:hover`) are documented as ignored (`rules` reads the
285
+ nine slot names).
286
+ - **Contract:** `contract/appearance/appearance_v1.json` routes `colorDanger` by scheme and carries the shared
287
+ `background_derivation` vectors (EFBackend `sdk_palette.background_family` runs the same); the SDK runs them and
288
+ pins the file's SHA-256, so a step change or a contract edit fails CI until both sides are refreshed. Vendored
289
+ from EFBackend main at 3a071a6 (#1764) with `tests/integration/fixtures/branding_wire_v2.json` (`danger_color_dark`
290
+ in `sdk_parsed_keys`, the derived dark danger case) and the platform contract projection (digest b0d50f5).
291
+
13
292
  ## [0.5.9] - 2026-09-29
14
293
 
15
294
  ### Added
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { T as TelevetConsult } from './bookingTypes-DCs8mmBb.js';
2
+ import { T as TelevetConsult } from './bookingTypes-D4pD3tHs.js';
3
3
 
4
4
  /** The calendar entry a booked visit asks the host to write. */
5
5
  interface TelevetCalendarEvent {
@@ -48,7 +48,17 @@ interface TelevetBookedScreenProps {
48
48
  * length row uses for a slot that does not say. The prebuilt flow always passes the slot's length.
49
49
  */
50
50
  readonly lengthMinutes?: number | undefined;
51
+ /**
52
+ * Did the owner share the pet's records with the vet on the review? Only then may step 02 say the records go
53
+ * to the vet ahead of the call; otherwise it keeps the deck's own summary line.
54
+ */
55
+ readonly sharedRecords?: boolean | undefined;
56
+ /**
57
+ * Did exactly one PHOTO go with this booking, and did the consult keep it? Only then may step 02 say the photo
58
+ * goes to the vet (the artifact's photo form). Defaults to false.
59
+ */
60
+ readonly sentPhoto?: boolean | undefined;
51
61
  }
52
- declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, }: TelevetBookedScreenProps): ReactNode;
62
+ declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, sharedRecords, sentPhoto, }: TelevetBookedScreenProps): ReactNode;
53
63
 
54
64
  export { type TelevetCalendarWriter as T, type TelevetCalendarEvent as a, TelevetBookedScreen as b, type TelevetBookedScreenProps as c, televetConsultCalendarKey as t };
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { T as TelevetConsult } from './bookingTypes-DCs8mmBb.cjs';
2
+ import { T as TelevetConsult } from './bookingTypes-D4pD3tHs.cjs';
3
3
 
4
4
  /** The calendar entry a booked visit asks the host to write. */
5
5
  interface TelevetCalendarEvent {
@@ -48,7 +48,17 @@ interface TelevetBookedScreenProps {
48
48
  * length row uses for a slot that does not say. The prebuilt flow always passes the slot's length.
49
49
  */
50
50
  readonly lengthMinutes?: number | undefined;
51
+ /**
52
+ * Did the owner share the pet's records with the vet on the review? Only then may step 02 say the records go
53
+ * to the vet ahead of the call; otherwise it keeps the deck's own summary line.
54
+ */
55
+ readonly sharedRecords?: boolean | undefined;
56
+ /**
57
+ * Did exactly one PHOTO go with this booking, and did the consult keep it? Only then may step 02 say the photo
58
+ * goes to the vet (the artifact's photo form). Defaults to false.
59
+ */
60
+ readonly sentPhoto?: boolean | undefined;
51
61
  }
52
- declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, }: TelevetBookedScreenProps): ReactNode;
62
+ declare function TelevetBookedScreen({ consult, petName, onDone, onAddToCalendar, canJoinInApp, lengthMinutes, sharedRecords, sentPhoto, }: TelevetBookedScreenProps): ReactNode;
53
63
 
54
64
  export { type TelevetCalendarWriter as T, type TelevetCalendarEvent as a, TelevetBookedScreen as b, type TelevetBookedScreenProps as c, televetConsultCalendarKey as t };
@@ -2,9 +2,9 @@ import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
3
  import { P as PetRef, C as ConversationId } from './ids-B2GAAifq.js';
4
4
  import { F as FileHandle } from './ports-BN6RHF9W.js';
5
- import { a as ChatCheckinTarget } from './ports-s45HNNyc.js';
6
- import { W as WidgetPet, P as PetProfileInput } from './petsRepository-C28NKFwy.js';
7
- import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-CuFT1o5q.js';
5
+ import { a as ChatCheckinTarget } from './ports-nXHf50_X.js';
6
+ import { W as WidgetPet, P as PetProfileInput } from './petsRepository-CuYZZaI5.js';
7
+ import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-CXAnZcEg.js';
8
8
 
9
9
  /** Where a picked image comes from: the host's photo library, or its camera. */
10
10
  type AttachmentSource = 'photo' | 'camera';
@@ -48,7 +48,7 @@ interface EverfurChatProps {
48
48
  /** Called after the user picked another pet in the header switcher and the provider re-scoped to it. */
49
49
  readonly onPetChange?: (petRef: PetRef) => void;
50
50
  /**
51
- * Your vet-visit preparation screen. Given, the empty thread's `Help me prep for {pet}'s vet visit.` chip
51
+ * Your vet-visit preparation screen. Given, the empty thread's `Help me prep for {pet}’s vet visit` chip
52
52
  * routes to it with the pet; absent, that chip is the Everfur vet visit entry inside Chat, shown only
53
53
  * while Everfur has it switched on for your tenant, else not shown at all.
54
54
  */
@@ -2,9 +2,9 @@ import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
3
  import { P as PetRef, C as ConversationId } from './ids-B2GAAifq.cjs';
4
4
  import { F as FileHandle } from './ports-BN6RHF9W.cjs';
5
- import { a as ChatCheckinTarget } from './ports-Dbw2h_M1.cjs';
6
- import { W as WidgetPet, P as PetProfileInput } from './petsRepository-llMvpMkp.cjs';
7
- import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-c4mJcIWU.cjs';
5
+ import { a as ChatCheckinTarget } from './ports-ZmJYgd5I.cjs';
6
+ import { W as WidgetPet, P as PetProfileInput } from './petsRepository-BJsJ4cju.cjs';
7
+ import { U as UrgencyDisplayLevel, L as LifecyclePort, E as EverfurChatDraftStore } from './attachments-CUOGILir.cjs';
8
8
 
9
9
  /** Where a picked image comes from: the host's photo library, or its camera. */
10
10
  type AttachmentSource = 'photo' | 'camera';
@@ -48,7 +48,7 @@ interface EverfurChatProps {
48
48
  /** Called after the user picked another pet in the header switcher and the provider re-scoped to it. */
49
49
  readonly onPetChange?: (petRef: PetRef) => void;
50
50
  /**
51
- * Your vet-visit preparation screen. Given, the empty thread's `Help me prep for {pet}'s vet visit.` chip
51
+ * Your vet-visit preparation screen. Given, the empty thread's `Help me prep for {pet}’s vet visit` chip
52
52
  * routes to it with the pet; absent, that chip is the Everfur vet visit entry inside Chat, shown only
53
53
  * while Everfur has it switched on for your tenant, else not shown at all.
54
54
  */
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-C7guUoLc.js';
2
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-CARTuHKh.cjs';
3
3
 
4
4
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
5
5
  readonly style?: CSSProperties;
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-C7guUoLc.js';
3
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-CARTuHKh.cjs';
4
4
 
5
5
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
6
6
  readonly style?: StyleProp<ViewStyle>;
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { StyleProp, ViewStyle } from 'react-native';
3
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-BLK8W646.cjs';
3
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-fPSv-GXU.js';
4
4
 
5
5
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
6
6
  readonly style?: StyleProp<ViewStyle>;
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
- import { f as RecordsScreenBaseProps } from './useRecordsDepth-BLK8W646.cjs';
2
+ import { f as RecordsScreenBaseProps } from './useRecordsDepth-fPSv-GXU.js';
3
3
 
4
4
  interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
5
5
  readonly style?: CSSProperties;