@everfur/sdk 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +126 -0
- package/README.md +11 -10
- package/dist/{Chat.d-Dts8u_1a.d.cts → Chat.d-aycmX1CA.d.cts} +12 -4
- package/dist/{Chat.d-DUNTfzqC.d.ts → Chat.d-puminpyi.d.ts} +12 -4
- package/dist/{DepthViews.d-CubkMPbU.d.ts → DepthViews.d-BdvFZgPs.d.cts} +1 -1
- package/dist/{DepthViews.d-Ce2Zhnrb.d.ts → DepthViews.d-DIvxzLDf.d.ts} +1 -1
- package/dist/{DepthViews.d-BMU2jFPw.d.cts → DepthViews.d-Dy0Zl-s-.d.ts} +1 -1
- package/dist/{DepthViews.d-BIp599lz.d.cts → DepthViews.d-wLNkzk9f.d.cts} +1 -1
- package/dist/RecordsPage.d-9Ank15PT.d.ts +93 -0
- package/dist/RecordsPage.d-DMKU0IKc.d.cts +93 -0
- package/dist/animations/index.d.cts +5 -5
- package/dist/animations/index.d.ts +5 -5
- package/dist/{attachments.d-D1yhJjcZ.d.ts → attachments.d--sIsfk6e.d.ts} +2 -2
- package/dist/{attachments.d-Bp2qbHxn.d.cts → attachments.d-DNUCiyy5.d.cts} +6 -24
- package/dist/{attachments.d-DisnvB9R.d.cts → attachments.d-ZEpTUeWN.d.cts} +2 -2
- package/dist/{attachments.d-Djy9z_0Z.d.ts → attachments.d-rp3xs-Q3.d.ts} +6 -24
- package/dist/{bookingCopy.d-BJF6gd1A.d.ts → bookingCopy.d-D0uIIFAJ.d.ts} +2 -2
- package/dist/{bookingCopy.d-BlBmhAJc.d.cts → bookingCopy.d-DUrmVcLs.d.cts} +2 -2
- package/dist/{branding.d-DI8S400y.d.cts → branding.d-CTXTUg_8.d.cts} +1 -1
- package/dist/{branding.d-OIGLbQeM.d.ts → branding.d-DxJSoFce.d.ts} +1 -1
- package/dist/{casesRepository.d-CT2LTicS.d.cts → casesRepository.d-DCnix2pT.d.cts} +1 -1
- package/dist/{casesRepository.d-UsWOz9bv.d.ts → casesRepository.d-DbirgbyH.d.ts} +1 -1
- package/dist/chat/index.cjs +43 -41
- package/dist/chat/index.d.cts +26 -13
- package/dist/chat/index.d.ts +26 -13
- package/dist/chat/index.js +43 -41
- package/dist/client/index.cjs +2 -2
- package/dist/client/index.d.cts +10 -10
- package/dist/client/index.d.ts +10 -10
- package/dist/client/index.js +2 -2
- package/dist/clinicBatch.d-Ccmrngcu.d.cts +71 -0
- package/dist/clinicBatch.d-D9Ci7IpP.d.ts +71 -0
- package/dist/clinicModels.d-BXgKZqDb.d.cts +68 -0
- package/dist/clinicModels.d-CaS64-P-.d.ts +68 -0
- package/dist/clinicRequestProps.d-1dCtouGA.d.cts +65 -0
- package/dist/clinicRequestProps.d-CjsMg_OD.d.ts +65 -0
- package/dist/{config.d-BR3DT9ho.d.cts → config.d-DJ4mvf_w.d.cts} +1 -1
- package/dist/{config.d-Dy6igYlH.d.ts → config.d-MX7IKP2f.d.ts} +1 -1
- package/dist/consent/index.d.cts +5 -5
- package/dist/consent/index.d.ts +5 -5
- package/dist/{context.d-QcCgguzA.d.ts → context.d-BdnBe8Oe.d.ts} +7 -7
- package/dist/{context.d-Cwks0p3C.d.cts → context.d-C6MJsMpN.d.cts} +7 -7
- package/dist/{copy.d-CiMn2IIt.d.ts → copy.d-BIfQOoDB.d.ts} +2 -2
- package/dist/{copy.d-DLJTyRfT.d.cts → copy.d-C_u7shha.d.cts} +2 -2
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.d.cts +20 -18
- package/dist/core/index.d.ts +20 -18
- package/dist/core/index.js +3 -3
- package/dist/{depth.d-OSALbYM7.d.ts → depth.d-COFxYWLU.d.ts} +6 -133
- package/dist/{depth.d-CjPGVPDL.d.cts → depth.d-D2e5WZuE.d.cts} +6 -133
- package/dist/{entitlementRepository.d-CVQa1DA1.d.cts → entitlementRepository.d-BP15dFbe.d.cts} +4 -4
- package/dist/{entitlementRepository.d-Cf3LbTwD.d.ts → entitlementRepository.d-DLuxnGi5.d.ts} +4 -4
- package/dist/{features.d-fNsGcg0R.d.ts → features.d-DrQxTw3-.d.cts} +1 -1
- package/dist/{features.d-fNsGcg0R.d.cts → features.d-DrQxTw3-.d.ts} +1 -1
- package/dist/{focus.d-DMg2ngHI.d.ts → focus.d-C0Tr0oVJ.d.ts} +109 -348
- package/dist/{focus.d-az9cqUz3.d.cts → focus.d-jQWp0hdK.d.cts} +109 -348
- package/dist/health-plan/index.cjs +165 -151
- package/dist/health-plan/index.d.cts +53 -11
- package/dist/health-plan/index.d.ts +53 -11
- package/dist/health-plan/index.js +169 -155
- package/dist/{idempotency.d-D461_DPD.d.cts → idempotency.d-DXb1BN2A.d.ts} +151 -6
- package/dist/{idempotency.d-WpXx9zQo.d.ts → idempotency.d-HF6fyRt2.d.cts} +151 -6
- package/dist/{identity.d-DzTijonw.d.ts → identity.d-BePPZ7Uv.d.ts} +1 -1
- package/dist/{identity.d-60LeJt_s.d.cts → identity.d-CJfnWOdH.d.cts} +1 -1
- package/dist/index.cjs +46 -44
- package/dist/index.d.cts +19 -18
- package/dist/index.d.ts +19 -18
- package/dist/index.js +46 -44
- package/dist/introEvents.d-BkGDT_kG.d.cts +175 -0
- package/dist/introEvents.d-DHlMvmC7.d.ts +175 -0
- package/dist/introEvents.d-dS3fJCH1.d.cts +5 -0
- package/dist/introEvents.d-dS3fJCH1.d.ts +5 -0
- package/dist/{models.d-BnLm3VAA.d.cts → models.d-BSqvbTE1.d.cts} +8 -1
- package/dist/{models.d-BagXhafD.d.ts → models.d-DOwnr8fi.d.ts} +8 -1
- package/dist/notifications/index.d.cts +4 -4
- package/dist/notifications/index.d.ts +4 -4
- package/dist/{optInView.d-CEyHR6PK.d.cts → optInView.d-0iI5JoAf.d.cts} +119 -3
- package/dist/{optInView.d-acKpV8V2.d.ts → optInView.d-s-w4aGN3.d.ts} +119 -3
- package/dist/{parse.d-C8CXyS58.d.ts → parse.d-COt1qVA6.d.ts} +1 -1
- package/dist/{parse.d-tEzufgJX.d.cts → parse.d-EmsgOUMQ.d.cts} +1 -1
- package/dist/{pets.d-C_53_fzo.d.ts → pets.d-BFT_b53y.d.ts} +1 -1
- package/dist/{pets.d-NbJvP_kh.d.cts → pets.d-nNAVnw7f.d.cts} +1 -1
- package/dist/{petsRepository.d-lp1BHRqM.d.cts → petsRepository.d-B2TpRE7r.d.cts} +1 -1
- package/dist/{petsRepository.d-BuGHymNx.d.ts → petsRepository.d-RGwSZcYl.d.ts} +1 -1
- package/dist/planSignals.d-BDbp2e-k.d.cts +126 -0
- package/dist/planSignals.d-DSnxKoWe.d.ts +126 -0
- package/dist/{ports.d-COIyN624.d.ts → ports.d-D2n4HRUy.d.ts} +4 -4
- package/dist/{ports.d-CEROoqnA.d.cts → ports.d-DBA_gsq5.d.cts} +4 -4
- package/dist/{presentation.d-DMbdad7G.d.cts → presentation.d-vy8kTGfR.d.cts} +6 -0
- package/dist/{presentation.d-DMbdad7G.d.ts → presentation.d-vy8kTGfR.d.ts} +6 -0
- package/dist/quickPrompts.d-NM_81Jc1.d.cts +19 -0
- package/dist/quickPrompts.d-NM_81Jc1.d.ts +19 -0
- package/dist/records/depth/index.d.cts +13 -9
- package/dist/records/depth/index.d.ts +13 -9
- package/dist/records/index.cjs +252 -138
- package/dist/records/index.d.cts +88 -23
- package/dist/records/index.d.ts +88 -23
- package/dist/records/index.js +253 -139
- package/dist/{requestFunnel.d-CXUMPw1K.d.ts → requestFunnel.d-D9edIEjZ.d.ts} +2 -2
- package/dist/{requestFunnel.d-DWQQpjFR.d.cts → requestFunnel.d-RZex94XX.d.cts} +2 -2
- package/dist/{resolve.d-jI8FmBj3.d.cts → resolve.d-CoQWUy1Y.d.cts} +1 -1
- package/dist/{resolve.d-jI8FmBj3.d.ts → resolve.d-CoQWUy1Y.d.ts} +1 -1
- package/dist/{runtimeTypes.d-4yFNNuYR.d.ts → runtimeTypes.d-BYq38b17.d.ts} +6 -6
- package/dist/{runtimeTypes.d-D6N_fhxx.d.cts → runtimeTypes.d-LkwZaF7z.d.cts} +6 -6
- package/dist/{useRecordsDepth.d-DFcCfiXm.d.ts → screenProps.d-BVzRzowC.d.ts} +5 -91
- package/dist/{useRecordsDepth.d-sAq2Qkhr.d.cts → screenProps.d-CQ0qZJkr.d.cts} +5 -91
- package/dist/server/events/index.cjs +1 -1
- package/dist/server/events/index.d.cts +2 -2
- package/dist/server/events/index.d.ts +2 -2
- package/dist/server/events/index.js +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.d.cts +3 -3
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +1 -1
- package/dist/{sheetSeam.d-Cviqk89n.d.ts → sheetSeam.d-B09jf4YC.d.ts} +8 -4
- package/dist/{sheetSeam.d-DCS3LW8g.d.cts → sheetSeam.d-BBuEIVsa.d.cts} +8 -4
- package/dist/shop/index.cjs +224 -58
- package/dist/shop/index.d.cts +23 -5
- package/dist/shop/index.d.ts +23 -5
- package/dist/shop/index.js +225 -59
- package/dist/tabs/index.cjs +195 -0
- package/dist/tabs/index.d.cts +174 -0
- package/dist/tabs/index.d.ts +174 -0
- package/dist/tabs/index.js +195 -0
- package/dist/tabsModel.d-BfIQg6yS.d.cts +31 -0
- package/dist/tabsModel.d-BfIQg6yS.d.ts +31 -0
- package/dist/televet/booking/index.d.cts +6 -6
- package/dist/televet/booking/index.d.ts +6 -6
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/rn/index.cjs +1 -1
- package/dist/testing/rn/index.d.cts +11 -11
- package/dist/testing/rn/index.d.ts +11 -11
- package/dist/testing/rn/index.js +1 -1
- package/dist/testing/web/index.d.cts +12 -12
- package/dist/testing/web/index.d.ts +12 -12
- package/dist/texting/index.cjs +40 -5
- package/dist/texting/index.d.cts +40 -7
- package/dist/texting/index.d.ts +40 -7
- package/dist/texting/index.js +40 -5
- package/dist/threadOptions.d-9r4Csa7k.d.cts +458 -0
- package/dist/threadOptions.d-B6GA09aM.d.ts +458 -0
- package/dist/{timelineRows.d-CU5GvvLk.d.ts → timelineRows.d-Bes8ip2v.d.ts} +1 -1
- package/dist/{timelineRows.d-BNxgzYRW.d.cts → timelineRows.d-BvM2A7_G.d.cts} +1 -1
- package/dist/{typeStyle.d-C1HBRAI3.d.ts → typeStyle.d-Co5KF0up.d.ts} +1 -1
- package/dist/{typeStyle.d-Bl8pzbBy.d.cts → typeStyle.d-xIZj02Ru.d.cts} +1 -1
- package/dist/useIntroSeen.d-CTWFUthO.d.cts +35 -0
- package/dist/useIntroSeen.d-CTWFUthO.d.ts +35 -0
- package/dist/usePresentation.d-BGz32Vlm.d.ts +285 -0
- package/dist/usePresentation.d-DYTF_ZGf.d.cts +285 -0
- package/dist/{useRecords.d-Cb-36SF5.d.cts → useRecords.d-BYNX01El.d.cts} +2 -2
- package/dist/{useRecords.d-aQTzQZoV.d.ts → useRecords.d-DWk61a4c.d.ts} +2 -2
- package/dist/useRecordsDepth.d--LLA_4ga.d.cts +32 -0
- package/dist/useRecordsDepth.d-BQRL0Hez.d.ts +32 -0
- package/dist/{view.d-Dps5C8-s.d.cts → view.d-0yBjLTV3.d.cts} +6 -4
- package/dist/{view.d-C-SNpDJX.d.ts → view.d-DqbCADFa.d.ts} +6 -4
- package/dist/web/consent/index.d.cts +5 -5
- package/dist/web/consent/index.d.ts +5 -5
- package/dist/web/health-plan/index.cjs +50 -43
- package/dist/web/health-plan/index.d.cts +46 -192
- package/dist/web/health-plan/index.d.ts +46 -192
- package/dist/web/health-plan/index.js +65 -58
- package/dist/web/index.cjs +61 -45
- package/dist/web/index.d.cts +165 -25
- package/dist/web/index.d.ts +165 -25
- package/dist/web/index.js +62 -46
- package/dist/web/intro/index.cjs +167 -0
- package/dist/web/intro/index.d.cts +79 -0
- package/dist/web/intro/index.d.ts +79 -0
- package/dist/web/intro/index.js +167 -0
- package/dist/web/notifications/index.d.cts +3 -3
- package/dist/web/notifications/index.d.ts +3 -3
- package/dist/web/records/depth/index.d.cts +13 -9
- package/dist/web/records/depth/index.d.ts +13 -9
- package/dist/web/records/index.cjs +7 -7
- package/dist/web/records/index.d.cts +21 -82
- package/dist/web/records/index.d.ts +21 -82
- package/dist/web/records/index.js +7 -7
- package/dist/web/records-sheet/index.cjs +181 -127
- package/dist/web/records-sheet/index.d.cts +18 -16
- package/dist/web/records-sheet/index.d.ts +18 -16
- package/dist/web/records-sheet/index.js +181 -127
- package/dist/web/shop/index.cjs +191 -76
- package/dist/web/shop/index.d.cts +21 -4
- package/dist/web/shop/index.d.ts +21 -4
- package/dist/web/shop/index.js +191 -76
- package/dist/web/televet/booking/index.d.cts +6 -6
- package/dist/web/televet/booking/index.d.ts +6 -6
- package/dist/web/texting/index.cjs +36 -5
- package/dist/web/texting/index.d.cts +40 -7
- package/dist/web/texting/index.d.ts +40 -7
- package/dist/web/texting/index.js +36 -5
- package/package.json +35 -4
- package/tabs/package.json +8 -0
- package/web/intro/native-blocked.cjs +12 -0
- package/web/intro/package.json +8 -0
- package/dist/threadOptions.d-B1pTMmDF.d.cts +0 -260
- package/dist/threadOptions.d-B1pTMmDF.d.ts +0 -260
- package/dist/usePresentation.d-D6qsFzBz.d.cts +0 -9
- package/dist/usePresentation.d-DuGQe_Do.d.ts +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,132 @@ changes that has not been earned by any production integration yet.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.14.0] - 2026-10-22
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **Three tabs with a first-open intro (web).** New `EverfurTabs` (`@everfur/sdk/web`): Ask, Health Plan and Records
|
|
18
|
+
as WAI-ARIA tabs over panes that stay mounted, with `EverfurChat`, `EverfurHealthPlan` and `EverfurRecordsPage`
|
|
19
|
+
inside (their own props pass through `chat`, `plan` and `records`). The host says how the member got here with
|
|
20
|
+
`opened`: a plain open lands on Health Plan (Ask when the pet has no plan, whose tab then hides), a link opens the
|
|
21
|
+
tab it names and can ask a question. On a phone-narrow page the first plain open plays the intro over Ask once per
|
|
22
|
+
member: the tabs, the records ask with the clinic search, the consent and the request, and Sent. "Seen" lives on the
|
|
23
|
+
account (`GET` / `PUT /widget/v1/me/intro`), this device keeps a copy once it closes, and a failed read never plays
|
|
24
|
+
it. The intro is its own lazily loaded entry, `@everfur/sdk/web/intro`. Also exported: `useEverfurTabs` and the
|
|
25
|
+
`tabsRef` prop (`open`, `ask`, `requestRecords`), `EVERFUR_TABS_COPY`, and the `everfur:records-requested` /
|
|
26
|
+
`everfur:records-landed` window events with `onRecordsRequested` / `onRecordsLanded` (the window's requested event
|
|
27
|
+
leaves out `clinicName`, which any script on the page would hear; the callback carries it).
|
|
28
|
+
- **Ask home (web).** The compact composer sits 14px in from each side and 10px off the bar's foot, as Raph's
|
|
29
|
+
`.ph-askbar`; the Chats count is drawn only when there is at least one chat.
|
|
30
|
+
- **Three tabs with a first-open intro (React Native).** New subpath `@everfur/sdk/tabs`, the web shell's twin:
|
|
31
|
+
`EverfurTabs` over `EverfurChat`, `EverfurHealthPlan` and `EverfurRecords` (reached through their own subpaths, not
|
|
32
|
+
bundled), the same `opened` rule, panes that stay mounted, `tabsRef` / `useEverfurTabs` (`open`, `ask`,
|
|
33
|
+
`requestRecords`), `onTabChange`, `onRecordsRequested`, `onRecordsLanded` and `onToast`. The intro plays once per
|
|
34
|
+
member on the first plain open on a phone-sized window (`intro.maxWidth`, default 600), in a modal sheet whose
|
|
35
|
+
title takes the screen reader's focus; reduced motion fades it over 150ms. "Seen" is the same account read and
|
|
36
|
+
device copy as the web, and a failed read never plays it. Records' "Request from her clinic" opens the intro's
|
|
37
|
+
records sheet (`requestRecords`), the SDK consent screen kept between Request and Sent. Also exported:
|
|
38
|
+
`EverfurIntro`, `EverfurRecordsLandedBanner`, `useEverfurIntroSeen`, `EVERFUR_TABS_COPY`, `EVERFUR_INTRO_COPY` and
|
|
39
|
+
the intro's pure text helpers. The React Native compact Ask composer takes Raph's `.ph-askbar` insets (10, 14, 10).
|
|
40
|
+
- **Ask (React Native).** `EverfurChat` takes `header={false}`, the web prop's twin, for a screen that already has a
|
|
41
|
+
header over chat (the tab shell's host passes it). Inside `EverfurTabs` the chat takes no status-bar inset of its own.
|
|
42
|
+
Fixed: a staggered fade (the starter chips) could stay invisible when the OS reduced-motion setting arrived after
|
|
43
|
+
mount; it now comes to rest.
|
|
44
|
+
- **Ask home inside the tabs (React Native).** Inside `EverfurTabs` the chat draws Raph's round 5 Ask home from
|
|
45
|
+
generated rules (`scripts/gen-ask-home-rn.mjs`): his Chats row, focus card, and centred start with a balanced title
|
|
46
|
+
(his `16ch` measure, measured by layout) and chips. There, presentation `safetyDisclaimerPlacement: "answer_footer"`
|
|
47
|
+
moves the safety footnote to the foot of the thread, as on the web. The look rides in the tabs entry; a standalone
|
|
48
|
+
`EverfurChat` keeps its look and its size. New `EverfurPoweredBy` and `useHostPoweredBy` (`@everfur/sdk/chat`), the
|
|
49
|
+
web's twins: a host that shows "powered by everfur" in its own header wraps that lockup, and the chat leaves out its
|
|
50
|
+
own line. The tab shell passes the records sheet `onRequestFromClinic({ petRef })` and `noVet`.
|
|
51
|
+
|
|
52
|
+
- **The texting ask, in chat and as a pop-up (web and React Native).** `EverfurChat` now asks a member to turn on
|
|
53
|
+
texting by itself: after a completed answer (never a failed or stopped turn, a check-in or an urgent answer),
|
|
54
|
+
with nothing streaming, one Everfur line in the answer look with "Turn on SMS
|
|
55
|
+
Chat" / "Not now". Accepting turns the composer into the opt-in's number, consent and code steps, and a verified
|
|
56
|
+
number shows a closing line. New presentation field `chat_texting_ask` (`chatTextingAsk`, boolean, default `true`)
|
|
57
|
+
turns it off. New `EverfurTextingPrompt` (`@everfur/sdk/web/texting`, `@everfur/sdk/texting`) is the same ask as a
|
|
58
|
+
sheet for app open; whether to mount it is the partner's call. Both share one schedule, kept per member in the
|
|
59
|
+
provider's `storage`: at most three asks two days apart, never again once the member has an identity, and at most
|
|
60
|
+
one ask per session. Unreadable storage shows nothing, so a React Native host with no `storage` is never asked.
|
|
61
|
+
Also exported: `useTextingAsk`, `resolveTextingAskDue`, `textingAskThreadReady`, `isTextingAskEligible` and the
|
|
62
|
+
`TEXTING_ASK_*` constants. On the web the chat loads `@everfur/sdk/web/texting` lazily, only when the ask can show.
|
|
63
|
+
The hosted frame has no texting, so its chat never asks.
|
|
64
|
+
- **`EverfurTextingPrompt` is a centred card, and closing it hands the ask to the chat.** The pop-up now sits in the
|
|
65
|
+
middle of the screen with every corner rounded (it fades in on React Native), clear of a host's bottom navigation,
|
|
66
|
+
instead of a sheet from the bottom edge. Closing it ("Not now", Escape, the back gesture or a press outside) still
|
|
67
|
+
counts one ask, and the chat then shows its line once after the member's next completed answer in that session, as
|
|
68
|
+
the same ask. The chat's "Not now" restarts the two days without counting another ask.
|
|
69
|
+
|
|
70
|
+
- **Health Plan, Raph's round 5 (web and React Native).** The vet is one setting, drawn from the plan page's byline.
|
|
71
|
+
A plan that is missing records shows her three blanks card with its records facts, then "Asked" once the records
|
|
72
|
+
request is out and a one-time flash when they land. The tabs share two plan signals across entries
|
|
73
|
+
(`setHealthPlanNoVet` / `onHealthPlanNoVet`, `notifyHealthPlanRecordsLanded` / `onHealthPlanRecordsLanded`), so the
|
|
74
|
+
intro's no-vet choice and a landed request reach the plan. A pick whose pet has no weight yet keeps an empty dose
|
|
75
|
+
blank from the page's new `doseLabel`. The Manage sheet links to her orders. React Native draws Raph's plan icons
|
|
76
|
+
from a generated set (`RAPH_RN_PLAN_ICONS`), which the shop reuses.
|
|
77
|
+
- **Records follow our health tab (web and React Native).** On the web the records sheet follows our web app's health
|
|
78
|
+
tab at every width, phone and tablet tiers included: none, requested, processing and full, with the care rows, the
|
|
79
|
+
timeline count, the weight model and the sample peek. On React Native the sheet draws as our mobile app's Health
|
|
80
|
+
tab (`HubSections`): the pet hero and stage line, the request prompt and on-the-way tracker, weight, upcoming care,
|
|
81
|
+
record tiles and add-records card. A partial read failure shows a retry card, and the labs tile reads "--" while it
|
|
82
|
+
loads or fails. `RecordForwardItem` gains `careItemKey` and `dueDateSource`.
|
|
83
|
+
- **One first-open pop-up at a time.** While the tabs read "seen" and while the intro is up, `EverfurTextingPrompt`
|
|
84
|
+
waits; it may show after the intro closes.
|
|
85
|
+
- **`onRequestFromClinic` and `noVet` on the records surfaces.** New `EverfurRecordsPage` props (web) and
|
|
86
|
+
`EverfurRecordsSheetOptions` fields (React Native): `onRequestFromClinic` runs your own clinic request in place of
|
|
87
|
+
the records flow's clinic picker (on React Native it is told `{ petRef }`; a rejected promise is not reported), and
|
|
88
|
+
`noVet` gives the no-records title its no-vet words. `EverfurRecordsSheetOptions.active` (React Native, default
|
|
89
|
+
true) is for a host that keeps the sheet mounted while hidden: while false it takes no Android back. The tab shells
|
|
90
|
+
pass all three.
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- The React Native records sheet's `copy` option is deprecated and ignored: its one field, `undatedPill`, is no longer
|
|
95
|
+
drawn.
|
|
96
|
+
- `HealthPlanFocusCopy` (web and React Native) gained required members for round 5 (`builtWith`, `fromVet`,
|
|
97
|
+
`callAVet`, `callYourVet`, `saveForCheckup`, `savedForCheckup`, `recordsLanded`, `noPick`, `signalsFit`,
|
|
98
|
+
`signalsValue`, `waitVetTips`, `blankEmpty` and the `blanks*` lines). A type-level change only for a host that
|
|
99
|
+
builds a whole `HealthPlanFocusCopy` object; a `Partial` override, as `copy` takes it, is unaffected.
|
|
100
|
+
- Default-on looks: `EverfurRecordsPage` (web) draws the sheet as our web app's health tab, and `EverfurRecords`
|
|
101
|
+
(React Native) as our mobile app's Health tab, with no new prop; the compact `EverfurChat` composer takes Raph's
|
|
102
|
+
`.ph-askbar` insets on both hosts. `sheet={false}` keeps the classic records page.
|
|
103
|
+
- The intro's "Upload a PDF or a photo instead" closes the intro and then runs the upload; inside the tabs with no
|
|
104
|
+
host upload it opens Records.
|
|
105
|
+
- Health Plan sheets close on Escape one layer at a time and move focus to their title; pushed screens (cart,
|
|
106
|
+
orders, order, placed) focus their own section on open.
|
|
107
|
+
- Bundle budgets: `@everfur/sdk/records` 145,900, `@everfur/sdk/health-plan` 72,200, `@everfur/sdk/shop` 79,800,
|
|
108
|
+
`@everfur/sdk/tabs` 47,200; web `index.js` 121,400, `web/records-sheet` 63,100, `web/health-plan` 69,800,
|
|
109
|
+
`web/intro` 33,500; `dist-cdn/records-frame.js` 257,300 bytes.
|
|
110
|
+
|
|
111
|
+
### Fixed
|
|
112
|
+
|
|
113
|
+
- The texting pop-up also waits while the host is still reading who is signed in or its pets (at most 5 seconds,
|
|
114
|
+
phone-sized pages only), and one that opened before the intro steps aside while the intro plays.
|
|
115
|
+
- Records landing by any path, including `notifyHealthPlanRecordsLanded` from the host, clear the pet's no-vet state.
|
|
116
|
+
- Health Plan styles (web) are kept under React StrictMode: nodes mounted after the simulated unmount were unstyled.
|
|
117
|
+
- The intro (web) no longer mixes a `transition` shorthand with its longhands, which made React warn on close.
|
|
118
|
+
- The tabs (web and React Native) no longer hold the first-open pop-up for ever: a failed plan read, a probe or intro
|
|
119
|
+
chunk that does not load, or reads that take more than 5 seconds let the intro go for that open. On the web, when
|
|
120
|
+
the intro's chunk does not load, Records' "Request from her clinic" runs the records page's own clinic flow.
|
|
121
|
+
- No vet yet is set only when the member closes the intro from its no-vet frame, is kept per pet, and clears once a
|
|
122
|
+
clinic request is sent or her records are in.
|
|
123
|
+
- The intro (web) gives focus back once it is down: to the tab it closed onto inside `EverfurTabs`, else to where it
|
|
124
|
+
was.
|
|
125
|
+
- A Health Plan or records pane chunk that fails to download (web tabs) draws an empty pane instead of throwing up
|
|
126
|
+
the host's tree; while loading it is marked busy for assistive tech.
|
|
127
|
+
- A hidden Records tab (React Native) no longer takes the Android back from the screen the member is on.
|
|
128
|
+
- The records sheet (web and React Native) and the plan's three blanks catch their clock up when shown again and
|
|
129
|
+
hourly, instead of keeping the time of their first render.
|
|
130
|
+
- The tabs' toast (web) is announced: one live region stays mounted and the toast's words are written into it.
|
|
131
|
+
- A clinic picked again after Back in the intro reuses its idempotency key, so a send still on its way is not made
|
|
132
|
+
twice.
|
|
133
|
+
- The plan and intro signals shared on `globalThis` are checked for their shape and replaced when another script left
|
|
134
|
+
something else under the key.
|
|
135
|
+
- Health Plan: a vet-reviewed page whose backend sends no byline keeps 0.13.0's byline (web); a host passing
|
|
136
|
+
`recordsMissing` or `recordsBlanks` again reads no records, 0.13.0's rule (web and React Native); the vet's note
|
|
137
|
+
keeps a `kicker` from the wire for older hosts.
|
|
138
|
+
|
|
13
139
|
## [0.13.0] - 2026-10-21
|
|
14
140
|
|
|
15
141
|
### BREAKING
|
package/README.md
CHANGED
|
@@ -59,11 +59,11 @@ shipping the minter to a device. Import it from your server only.
|
|
|
59
59
|
### On the web
|
|
60
60
|
|
|
61
61
|
Two ways, one wire contract, documented in
|
|
62
|
-
[docs/partner-integration/13-WEB-INTEGRATION.md](https://
|
|
62
|
+
[docs/partner-integration/13-WEB-INTEGRATION.md](https://docs.everfur.com/web/):
|
|
63
63
|
|
|
64
64
|
- **In-page**, for a page whose React tree you own: `import { EverfurProvider, EverfurChat } from
|
|
65
65
|
'@everfur/sdk/web'` (peers: `react`, `react-dom`). The copy-paste shape is
|
|
66
|
-
[`examples/minimal-web.tsx`](https://
|
|
66
|
+
[`examples/minimal-web.tsx`](https://docs.everfur.com/web/#web--1-in-page-everfur-sdk-web). Take the `/web` entry, not the package root: the
|
|
67
67
|
root is the React Native entry and imports `react-native` and `react-native-safe-area-context`, so in a
|
|
68
68
|
browser project it fails to resolve them rather than rendering. The `/web` entries need `react`,
|
|
69
69
|
`react/jsx-runtime` and `zod` and nothing native, which `npm run verify:pack` proves on every CI run by
|
|
@@ -71,7 +71,7 @@ Two ways, one wire contract, documented in
|
|
|
71
71
|
- **Frame mode**, for a page you do not fully control (a storefront theme, a CMS page): one `<script
|
|
72
72
|
src="https://sdk.everfur.com/v1/everfur.js">` puts the surface in an iframe on `sdk.everfur.com`, and
|
|
73
73
|
the frame refuses to initialise on any page origin your tenant has not registered. The copy-paste shape
|
|
74
|
-
is [`examples/frame-embed.html`](https://
|
|
74
|
+
is [`examples/frame-embed.html`](https://docs.everfur.com/web/#web--the-snippet).
|
|
75
75
|
|
|
76
76
|
Chat and records are the web surfaces (records on its own subpath and its own frame document, available
|
|
77
77
|
when Everfur enables records for your account); photo and video remain React Native for now. Vet visits (available when Everfur enables them for your
|
|
@@ -83,7 +83,7 @@ and the call (`@everfur/sdk/televet/call`, `@everfur/sdk/web/televet/call`) are
|
|
|
83
83
|
are loaded on demand, so a page where nobody opens a visit downloads neither and a page where nobody joins takes
|
|
84
84
|
no WebRTC dependency; on React Native both are static imports in the same bundle (the WebRTC stack is the native
|
|
85
85
|
module your app registers with `registerEverfurDaily`).
|
|
86
|
-
[docs/partner-integration/16-TELEVET-VISITS.md](https://
|
|
86
|
+
[docs/partner-integration/16-TELEVET-VISITS.md](https://docs.everfur.com/vet-visits/).
|
|
87
87
|
|
|
88
88
|
## Quickstart
|
|
89
89
|
|
|
@@ -197,16 +197,17 @@ off-state, never a blank region.
|
|
|
197
197
|
| --- | --- |
|
|
198
198
|
| `@everfur/sdk` | `EverfurProvider`, `CapabilityGate`, `EverfurChat`, `useEverfurChat`, `CapabilityName`, error/result types, branded id helpers (`petRef`, `userRef`, `conversationId`) |
|
|
199
199
|
| `@everfur/sdk/records` | `EverfurRecords` (the Everfur app's records flow), the named screens (`EverfurRecordsUpload`, `EverfurRecordsRequests`, `EverfurRecordsRequest`, `EverfurRecordDetail`, ...), `EverfurClinicRequest`, `EverfurClinicRequestBatch`, `SignaturePad`, records hooks + types |
|
|
200
|
-
| `@everfur/sdk/records/depth`, `@everfur/sdk/web/records/depth` | record depth (the timeline, the withheld record sections, per-document contributions) on their own entries, dark until Everfur enables it per deployment; see [chapter 9](https://
|
|
200
|
+
| `@everfur/sdk/records/depth`, `@everfur/sdk/web/records/depth` | record depth (the timeline, the withheld record sections, per-document contributions) on their own entries, dark until Everfur enables it per deployment; see [chapter 9](https://docs.everfur.com/records/#records--record-depth-behind-a-separate-switch) |
|
|
201
201
|
| `@everfur/sdk/video` | gait / live-scan surface |
|
|
202
202
|
| `@everfur/sdk/photo` | photo checkup surface |
|
|
203
203
|
| `@everfur/sdk/animations` | server-driven pet-state media surface |
|
|
204
|
-
| `@everfur/sdk/web` | the browser entry: `EverfurProvider`, `CapabilityGate`, `EverfurChat`, `useEverfurChat`, the theme hook, rendered with `react-dom`; withheld from React Native bundles the way `./server` is |
|
|
205
|
-
| `@everfur/sdk/web/records` | records for a browser host: `EverfurRecordsPage` (the Everfur web app's records page, complete on its own: request from a clinic, upload, request status, the full record with vaccinations, all inside your page), the named screens, `EverfurRecords` (the React Native-shaped flow), `useEverfurRecords`, `createWebRecordsUploadTransport`, `fileToHandle`; its own entry, withheld from React Native like `./web`; available when Everfur enables records for the account. Frame mode serves it with `surface: 'records'` (see [chapter 13](https://
|
|
206
|
-
| `@everfur/sdk/web/records-sheet` | `recordsSheet()`: the v3 records sheet and its lab result screen, `EverfurRecordsPage`'s default look (loaded on first mount; `sheet={false}` keeps the classic page, which downloads none of it), or built with options and passed to its `sheet` prop; withheld from React Native like `./web`; see [chapter 13](https://
|
|
204
|
+
| `@everfur/sdk/web` | the browser entry: `EverfurProvider`, `CapabilityGate`, `EverfurChat`, `useEverfurChat`, `EverfurTabs` (Ask, Health Plan and Records in one shell, with the first-open intro), the theme hook, rendered with `react-dom`; withheld from React Native bundles the way `./server` is |
|
|
205
|
+
| `@everfur/sdk/web/records` | records for a browser host: `EverfurRecordsPage` (the Everfur web app's records page, complete on its own: request from a clinic, upload, request status, the full record with vaccinations, all inside your page), the named screens, `EverfurRecords` (the React Native-shaped flow), `useEverfurRecords`, `createWebRecordsUploadTransport`, `fileToHandle`; its own entry, withheld from React Native like `./web`; available when Everfur enables records for the account. Frame mode serves it with `surface: 'records'` (see [chapter 13](https://docs.everfur.com/web/#web--2-frame-mode-the-loader-and-the-frame)) |
|
|
206
|
+
| `@everfur/sdk/web/records-sheet` | `recordsSheet()`: the v3 records sheet and its lab result screen, `EverfurRecordsPage`'s default look (loaded on first mount; `sheet={false}` keeps the classic page, which downloads none of it), or built with options and passed to its `sheet` prop; withheld from React Native like `./web`; see [chapter 13](https://docs.everfur.com/web/#web--records-everfur-sdk-web-records) |
|
|
207
|
+
| `@everfur/sdk/web/intro` | the first-open intro `EverfurTabs` plays on a phone-narrow page (`EverfurIntro`, its clinic request frames, `EverfurRecordsLandedBanner`, `useEverfurIntroSeen`), downloaded only when it plays; withheld from React Native like `./web`; see [chapter 13](https://docs.everfur.com/web/#web--three-tabs-everfurtabs) |
|
|
207
208
|
| `@everfur/sdk/web/records/upload` | `createWebRecordsUploadTransport` alone, for the `uploadTransport` on the provider config at your app root; the same function `@everfur/sdk/web/records` exports, without the records entry |
|
|
208
209
|
| `@everfur/sdk/server` | **server-only** `mintPartnerSession`, `revokePartnerMemberSessions` (end one member's sessions now) and the partner pet helpers (no React Native resolution; never bundled on-device) |
|
|
209
|
-
| `@everfur/sdk/server/events` | **server-only, Node only** partner events (preview): `constructEvent` to verify webhooks, `sendPartnerEvent`; see [chapter 15](https://
|
|
210
|
+
| `@everfur/sdk/server/events` | **server-only, Node only** partner events (preview): `constructEvent` to verify webhooks, `sendPartnerEvent`; see [chapter 15](https://docs.everfur.com/webhooks/) |
|
|
210
211
|
| `@everfur/sdk/testing`, `@everfur/sdk/testing/rn`, `@everfur/sdk/testing/web` | test seams (`MockTransport`, `useEverfurTestEntitlements`, ...) for your own tests |
|
|
211
212
|
|
|
212
213
|
`@everfur/sdk/client` and `@everfur/sdk/core` expose the framework-free layers for advanced integrators;
|
|
@@ -215,7 +216,7 @@ most apps only need the root entry plus the capability subpaths.
|
|
|
215
216
|
## Reference app
|
|
216
217
|
|
|
217
218
|
A full, runnable integration (a fictional "Pawtrail" app plus a minimal mint backend that holds the secret)
|
|
218
|
-
lives at [`examples/minimal-integration.tsx`](https://
|
|
219
|
+
lives at [`examples/minimal-integration.tsx`](https://docs.everfur.com/quickstart/) in this repository; it is
|
|
219
220
|
type-checked by `npm run docs:check`, so it cannot rot. It shows anonymous mode, the two-credential session
|
|
220
221
|
mint, pet registration and sign-out. (A separate `everfur-integration-example-rn` app exists internally but
|
|
221
222
|
is not published anywhere a partner can reach, so do not rely on references to it.) It gates every
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { P as PetRef, C as ConversationId } from './ids.d-B2GAAifq.cjs';
|
|
4
|
-
import { i as EverfurPresentationInput } from './presentation.d-
|
|
5
|
-
import { a as ChatCheckinTarget } from './ports.d-
|
|
6
|
-
import { W as WidgetPet, P as PetProfileInput } from './petsRepository.d-
|
|
7
|
-
import {
|
|
4
|
+
import { i as EverfurPresentationInput } from './presentation.d-vy8kTGfR.cjs';
|
|
5
|
+
import { a as ChatCheckinTarget } from './ports.d-DBA_gsq5.cjs';
|
|
6
|
+
import { W as WidgetPet, P as PetProfileInput } from './petsRepository.d-B2TpRE7r.cjs';
|
|
7
|
+
import { E as EverfurStarterPrompt } from './quickPrompts.d-NM_81Jc1.cjs';
|
|
8
8
|
import { L as LifecyclePort } from './LifecyclePort.d-Cr1p33a7.cjs';
|
|
9
|
+
import { U as UrgencyDisplayLevel, E as EverfurChatDraftStore } from './attachments.d-DNUCiyy5.cjs';
|
|
9
10
|
import { F as FileHandle } from './ports.d-BX4f4UsB.cjs';
|
|
10
11
|
|
|
11
12
|
/** Where a picked image comes from: the host's photo library, or its camera. */
|
|
@@ -311,6 +312,13 @@ interface EverfurChatProps {
|
|
|
311
312
|
readonly starterPrompts?: readonly EverfurStarterPrompt[];
|
|
312
313
|
/** The empty thread's title and chip fills. */
|
|
313
314
|
readonly emptyState?: EverfurChatEmptyState;
|
|
315
|
+
/**
|
|
316
|
+
* Whether the surface draws its own header bar (the history control, the pet and its switcher, the vet entry).
|
|
317
|
+
* Default `true`. Pass `false` when your own screen already has a header over chat (the web surface's `header`):
|
|
318
|
+
* the thread, the urgency banner and the composer are unchanged. Without the header, the history bar
|
|
319
|
+
* (`historyBar`) is the way into past chats.
|
|
320
|
+
*/
|
|
321
|
+
readonly header?: boolean;
|
|
314
322
|
}
|
|
315
323
|
/**
|
|
316
324
|
* Entitlement-gated, four-state chat surface. Entitlement-OFF renders the CapabilityGate OffState;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { P as PetRef, C as ConversationId } from './ids.d-B2GAAifq.js';
|
|
4
|
-
import { i as EverfurPresentationInput } from './presentation.d-
|
|
5
|
-
import { a as ChatCheckinTarget } from './ports.d-
|
|
6
|
-
import { W as WidgetPet, P as PetProfileInput } from './petsRepository.d-
|
|
7
|
-
import {
|
|
4
|
+
import { i as EverfurPresentationInput } from './presentation.d-vy8kTGfR.js';
|
|
5
|
+
import { a as ChatCheckinTarget } from './ports.d-D2n4HRUy.js';
|
|
6
|
+
import { W as WidgetPet, P as PetProfileInput } from './petsRepository.d-RGwSZcYl.js';
|
|
7
|
+
import { E as EverfurStarterPrompt } from './quickPrompts.d-NM_81Jc1.js';
|
|
8
8
|
import { L as LifecyclePort } from './LifecyclePort.d-Cr1p33a7.js';
|
|
9
|
+
import { U as UrgencyDisplayLevel, E as EverfurChatDraftStore } from './attachments.d-rp3xs-Q3.js';
|
|
9
10
|
import { F as FileHandle } from './ports.d-BX4f4UsB.js';
|
|
10
11
|
|
|
11
12
|
/** Where a picked image comes from: the host's photo library, or its camera. */
|
|
@@ -311,6 +312,13 @@ interface EverfurChatProps {
|
|
|
311
312
|
readonly starterPrompts?: readonly EverfurStarterPrompt[];
|
|
312
313
|
/** The empty thread's title and chip fills. */
|
|
313
314
|
readonly emptyState?: EverfurChatEmptyState;
|
|
315
|
+
/**
|
|
316
|
+
* Whether the surface draws its own header bar (the history control, the pet and its switcher, the vet entry).
|
|
317
|
+
* Default `true`. Pass `false` when your own screen already has a header over chat (the web surface's `header`):
|
|
318
|
+
* the thread, the urgency banner and the composer are unchanged. Without the header, the history bar
|
|
319
|
+
* (`historyBar`) is the way into past chats.
|
|
320
|
+
*/
|
|
321
|
+
readonly header?: boolean;
|
|
314
322
|
}
|
|
315
323
|
/**
|
|
316
324
|
* Entitlement-gated, four-state chat surface. Entitlement-OFF renders the CapabilityGate OffState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
-
import {
|
|
3
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-CQ0qZJkr.cjs';
|
|
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 {
|
|
2
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-BVzRzowC.js';
|
|
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 {
|
|
3
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-BVzRzowC.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 {
|
|
2
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-CQ0qZJkr.cjs';
|
|
3
3
|
|
|
4
4
|
interface EverfurRecordsDepthProps extends Pick<RecordsScreenBaseProps, 'petRef' | 'petName' | 'onNavigate' | 'onBack'> {
|
|
5
5
|
readonly style?: CSSProperties;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import { R as RecordsClinicController, C as CaptureRecordsSignature } from './clinicRequestProps.d-CjsMg_OD.js';
|
|
3
|
+
import { R as RecordsController } from './useRecords.d-DWk61a4c.js';
|
|
4
|
+
import { c as RecordForwardItem } from './models.d-DOwnr8fi.js';
|
|
5
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-BVzRzowC.js';
|
|
6
|
+
import { E as EverfurRecordsSheet } from './sheetSeam.d-B09jf4YC.js';
|
|
7
|
+
|
|
8
|
+
interface EverfurRecordsPageProps extends RecordsScreenBaseProps {
|
|
9
|
+
readonly controller?: RecordsController;
|
|
10
|
+
/** Host/test seam over the clinic controller the `Request records` sheet uses. */
|
|
11
|
+
readonly clinicController?: RecordsClinicController;
|
|
12
|
+
readonly consentVersion?: string;
|
|
13
|
+
/** Your consent text, shown above `Allow` on the consent gate; pass it with its `consentVersion`. */
|
|
14
|
+
readonly consentText?: string;
|
|
15
|
+
/** The owner's name the clinic authorization is signed with (the owner can correct it before signing). */
|
|
16
|
+
readonly ownerName?: string;
|
|
17
|
+
/** A host signature component for the clinic authorization, instead of the built-in canvas. */
|
|
18
|
+
readonly onCaptureSignature?: CaptureRecordsSignature;
|
|
19
|
+
/**
|
|
20
|
+
* The heading level this page's title claims. Defaults to 2.
|
|
21
|
+
*
|
|
22
|
+
* THIS PAGE AND THE BOOKING FLOW USED TO DISAGREE, and that is why the prop exists. The page hardcoded
|
|
23
|
+
* `<h2>` and the televet booking chrome hardcoded `<h1>`, so a partner mounting both in one document got two
|
|
24
|
+
* competing top levels. A drop-in widget does not own the host page's `<h1>`: the shared default is 2 and a
|
|
25
|
+
* host whose page IS this surface passes 1. `src/web/headingLevel.ts` carries the full argument.
|
|
26
|
+
*/
|
|
27
|
+
readonly headingLevel?: number;
|
|
28
|
+
readonly style?: CSSProperties;
|
|
29
|
+
readonly className?: string;
|
|
30
|
+
readonly renderPending?: () => ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Show the record's upcoming care (rechecks, vaccinations due) as its own card on the page, under the header.
|
|
33
|
+
* Default `false`: upcoming care shows only inside the full record (`Visits & records`), as before.
|
|
34
|
+
*/
|
|
35
|
+
readonly upcomingCare?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Only with `upcomingCare`: your own control at the end of each upcoming-care row (for example your vet entry).
|
|
38
|
+
* Called once per row with that item; return null for a row without one. Absent, the rows have no action.
|
|
39
|
+
*/
|
|
40
|
+
readonly renderUpcomingCareAction?: (item: RecordForwardItem) => ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Draw the Records & history tiles under the header: `Labs & bloodwork` (opens the pet's lab markers on the page,
|
|
43
|
+
* drawn only while there are markers), `Screenings` (only with `onOpenScreenings`), `Visits & records` and
|
|
44
|
+
* `Timeline`. Default `false`: the header's two links, as before.
|
|
45
|
+
*/
|
|
46
|
+
readonly historyTiles?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Where the `Screenings` tile goes. The sheet always draws that tile, as the Everfur web app does: "All clear" or
|
|
49
|
+
* "N to review" over the pet's screening results (its lab markers with a result word), or "No screenings yet";
|
|
50
|
+
* absent, it opens the screening's marker on the page, and with none on file it is not a button. With
|
|
51
|
+
* `historyTiles`, absent means no tile.
|
|
52
|
+
*/
|
|
53
|
+
readonly onOpenScreenings?: () => void;
|
|
54
|
+
/**
|
|
55
|
+
* The page's look. By default (absent) it is the records sheet, our web app's health tab: the pet's vitals, upcoming
|
|
56
|
+
* care, the Records & History tiles, weight, medications, the history timeline and the ways to add records, or its
|
|
57
|
+
* no-records screen.
|
|
58
|
+
* The page loads it from `@everfur/sdk/web/records-sheet` (its own subpath) while showing its loading state; pass
|
|
59
|
+
* `recordsSheet(options)` from that subpath to set options, or `false` for the classic page (which then downloads
|
|
60
|
+
* none of the sheet). The same flows sit behind every look (clinic request with its consent and signature, upload,
|
|
61
|
+
* the full record). With the sheet, `upcomingCare` and `historyTiles` are implied and `renderUpcomingCareAction`
|
|
62
|
+
* fills the overdue row.
|
|
63
|
+
*/
|
|
64
|
+
readonly sheet?: EverfurRecordsSheet | false;
|
|
65
|
+
/** With the sheet: the unit a weight shows in first, `'lb'` (the default) or `'kg'`. */
|
|
66
|
+
readonly weightUnit?: 'lb' | 'kg';
|
|
67
|
+
/** With the sheet: opens the pet's Health Plan (your tab or screen), the top risk line's button. */
|
|
68
|
+
readonly onOpenPlan?: () => void;
|
|
69
|
+
/**
|
|
70
|
+
* Your own entry to a clinic request, run by "Request from her clinic" (the sheet) and `Request records` (the
|
|
71
|
+
* classic page) in place of the page's clinic flow (its picker, consent and signature, the default). Use it when
|
|
72
|
+
* your page already asks which clinic and confirms it was sent. Return a promise that settles once the request
|
|
73
|
+
* is sent and the page re-reads the member's requests, so its "on the way" line shows it. While a clinic request
|
|
74
|
+
* is out, the sheet's "Request from her clinic" only says it was requested there and calls neither.
|
|
75
|
+
*/
|
|
76
|
+
readonly onRequestFromClinic?: () => void | Promise<unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* With the sheet: the member told you the pet has no vet yet (for example in your intro). The no-records title
|
|
79
|
+
* then reads "When Georgia has a vet, start here."; the ways to add records stay as they are.
|
|
80
|
+
*/
|
|
81
|
+
readonly noVet?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The records surface as a PAGE, mirroring the consumer web app: the default web records surface.
|
|
85
|
+
*
|
|
86
|
+
* Complete on its own: request records from a clinic (consent and signature), upload records the
|
|
87
|
+
* member already has, every request with its status and documents, and the full record with its
|
|
88
|
+
* vaccinations, all without leaving your page. Pass `onNavigate` only if you route those screens
|
|
89
|
+
* yourself. `EverfurRecords` (the flow) is the React Native-shaped stack, kept for existing embeds.
|
|
90
|
+
*/
|
|
91
|
+
declare function EverfurRecordsPage(props: EverfurRecordsPageProps): ReactNode;
|
|
92
|
+
|
|
93
|
+
export { type EverfurRecordsPageProps as E, EverfurRecordsPage as a };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import { R as RecordsClinicController, C as CaptureRecordsSignature } from './clinicRequestProps.d-1dCtouGA.cjs';
|
|
3
|
+
import { R as RecordsController } from './useRecords.d-BYNX01El.cjs';
|
|
4
|
+
import { c as RecordForwardItem } from './models.d-BSqvbTE1.cjs';
|
|
5
|
+
import { c as RecordsScreenBaseProps } from './screenProps.d-CQ0qZJkr.cjs';
|
|
6
|
+
import { E as EverfurRecordsSheet } from './sheetSeam.d-BBuEIVsa.cjs';
|
|
7
|
+
|
|
8
|
+
interface EverfurRecordsPageProps extends RecordsScreenBaseProps {
|
|
9
|
+
readonly controller?: RecordsController;
|
|
10
|
+
/** Host/test seam over the clinic controller the `Request records` sheet uses. */
|
|
11
|
+
readonly clinicController?: RecordsClinicController;
|
|
12
|
+
readonly consentVersion?: string;
|
|
13
|
+
/** Your consent text, shown above `Allow` on the consent gate; pass it with its `consentVersion`. */
|
|
14
|
+
readonly consentText?: string;
|
|
15
|
+
/** The owner's name the clinic authorization is signed with (the owner can correct it before signing). */
|
|
16
|
+
readonly ownerName?: string;
|
|
17
|
+
/** A host signature component for the clinic authorization, instead of the built-in canvas. */
|
|
18
|
+
readonly onCaptureSignature?: CaptureRecordsSignature;
|
|
19
|
+
/**
|
|
20
|
+
* The heading level this page's title claims. Defaults to 2.
|
|
21
|
+
*
|
|
22
|
+
* THIS PAGE AND THE BOOKING FLOW USED TO DISAGREE, and that is why the prop exists. The page hardcoded
|
|
23
|
+
* `<h2>` and the televet booking chrome hardcoded `<h1>`, so a partner mounting both in one document got two
|
|
24
|
+
* competing top levels. A drop-in widget does not own the host page's `<h1>`: the shared default is 2 and a
|
|
25
|
+
* host whose page IS this surface passes 1. `src/web/headingLevel.ts` carries the full argument.
|
|
26
|
+
*/
|
|
27
|
+
readonly headingLevel?: number;
|
|
28
|
+
readonly style?: CSSProperties;
|
|
29
|
+
readonly className?: string;
|
|
30
|
+
readonly renderPending?: () => ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Show the record's upcoming care (rechecks, vaccinations due) as its own card on the page, under the header.
|
|
33
|
+
* Default `false`: upcoming care shows only inside the full record (`Visits & records`), as before.
|
|
34
|
+
*/
|
|
35
|
+
readonly upcomingCare?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Only with `upcomingCare`: your own control at the end of each upcoming-care row (for example your vet entry).
|
|
38
|
+
* Called once per row with that item; return null for a row without one. Absent, the rows have no action.
|
|
39
|
+
*/
|
|
40
|
+
readonly renderUpcomingCareAction?: (item: RecordForwardItem) => ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Draw the Records & history tiles under the header: `Labs & bloodwork` (opens the pet's lab markers on the page,
|
|
43
|
+
* drawn only while there are markers), `Screenings` (only with `onOpenScreenings`), `Visits & records` and
|
|
44
|
+
* `Timeline`. Default `false`: the header's two links, as before.
|
|
45
|
+
*/
|
|
46
|
+
readonly historyTiles?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Where the `Screenings` tile goes. The sheet always draws that tile, as the Everfur web app does: "All clear" or
|
|
49
|
+
* "N to review" over the pet's screening results (its lab markers with a result word), or "No screenings yet";
|
|
50
|
+
* absent, it opens the screening's marker on the page, and with none on file it is not a button. With
|
|
51
|
+
* `historyTiles`, absent means no tile.
|
|
52
|
+
*/
|
|
53
|
+
readonly onOpenScreenings?: () => void;
|
|
54
|
+
/**
|
|
55
|
+
* The page's look. By default (absent) it is the records sheet, our web app's health tab: the pet's vitals, upcoming
|
|
56
|
+
* care, the Records & History tiles, weight, medications, the history timeline and the ways to add records, or its
|
|
57
|
+
* no-records screen.
|
|
58
|
+
* The page loads it from `@everfur/sdk/web/records-sheet` (its own subpath) while showing its loading state; pass
|
|
59
|
+
* `recordsSheet(options)` from that subpath to set options, or `false` for the classic page (which then downloads
|
|
60
|
+
* none of the sheet). The same flows sit behind every look (clinic request with its consent and signature, upload,
|
|
61
|
+
* the full record). With the sheet, `upcomingCare` and `historyTiles` are implied and `renderUpcomingCareAction`
|
|
62
|
+
* fills the overdue row.
|
|
63
|
+
*/
|
|
64
|
+
readonly sheet?: EverfurRecordsSheet | false;
|
|
65
|
+
/** With the sheet: the unit a weight shows in first, `'lb'` (the default) or `'kg'`. */
|
|
66
|
+
readonly weightUnit?: 'lb' | 'kg';
|
|
67
|
+
/** With the sheet: opens the pet's Health Plan (your tab or screen), the top risk line's button. */
|
|
68
|
+
readonly onOpenPlan?: () => void;
|
|
69
|
+
/**
|
|
70
|
+
* Your own entry to a clinic request, run by "Request from her clinic" (the sheet) and `Request records` (the
|
|
71
|
+
* classic page) in place of the page's clinic flow (its picker, consent and signature, the default). Use it when
|
|
72
|
+
* your page already asks which clinic and confirms it was sent. Return a promise that settles once the request
|
|
73
|
+
* is sent and the page re-reads the member's requests, so its "on the way" line shows it. While a clinic request
|
|
74
|
+
* is out, the sheet's "Request from her clinic" only says it was requested there and calls neither.
|
|
75
|
+
*/
|
|
76
|
+
readonly onRequestFromClinic?: () => void | Promise<unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* With the sheet: the member told you the pet has no vet yet (for example in your intro). The no-records title
|
|
79
|
+
* then reads "When Georgia has a vet, start here."; the ways to add records stay as they are.
|
|
80
|
+
*/
|
|
81
|
+
readonly noVet?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The records surface as a PAGE, mirroring the consumer web app: the default web records surface.
|
|
85
|
+
*
|
|
86
|
+
* Complete on its own: request records from a clinic (consent and signature), upload records the
|
|
87
|
+
* member already has, every request with its status and documents, and the full record with its
|
|
88
|
+
* vaccinations, all without leaving your page. Pass `onNavigate` only if you route those screens
|
|
89
|
+
* yourself. `EverfurRecords` (the flow) is the React Native-shaped stack, kept for existing embeds.
|
|
90
|
+
*/
|
|
91
|
+
declare function EverfurRecordsPage(props: EverfurRecordsPageProps): ReactNode;
|
|
92
|
+
|
|
93
|
+
export { type EverfurRecordsPageProps as E, EverfurRecordsPage as a };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { E as EverfurResult } from '../EverfurResult.d-BFH-3s6E.cjs';
|
|
4
|
-
import { A as AuthContext } from '../identity.d-
|
|
5
|
-
export { I as IdentityProvider, n as newSessionId } from '../identity.d-
|
|
4
|
+
import { A as AuthContext } from '../identity.d-CJfnWOdH.cjs';
|
|
5
|
+
export { I as IdentityProvider, n as newSessionId } from '../identity.d-CJfnWOdH.cjs';
|
|
6
6
|
import { P as PetRef } from '../ids.d-B2GAAifq.cjs';
|
|
7
7
|
export { B as Brand, U as UserRef, _ as __brand } from '../ids.d-B2GAAifq.cjs';
|
|
8
8
|
import { z } from 'zod';
|
|
@@ -11,9 +11,9 @@ export { a as CACHE_EPOCH_STORAGE_KEY, c as createCacheEpochGuard } from '../cac
|
|
|
11
11
|
import { T as TelemetryPort } from '../TelemetryPort.d-BDNr00hu.cjs';
|
|
12
12
|
import { E as EverfurError } from '../EverfurError.d-8NHtlgzA.cjs';
|
|
13
13
|
export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.cjs';
|
|
14
|
-
import { D as DisabledLevel,
|
|
15
|
-
export { b as CapabilityDisabled,
|
|
16
|
-
export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-
|
|
14
|
+
import { D as DisabledLevel, a as CapabilityDecision } from '../resolve.d-CoQWUy1Y.cjs';
|
|
15
|
+
export { b as CapabilityDisabled, C as CapabilityName } from '../resolve.d-CoQWUy1Y.cjs';
|
|
16
|
+
export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-DJ4mvf_w.cjs';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* The full /state payload. `degraded` + `cache_epoch` + `cache_key` are additive fields an older backend
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { E as EverfurResult } from '../EverfurResult.d-D_-254ZY.js';
|
|
4
|
-
import { A as AuthContext } from '../identity.d-
|
|
5
|
-
export { I as IdentityProvider, n as newSessionId } from '../identity.d-
|
|
4
|
+
import { A as AuthContext } from '../identity.d-BePPZ7Uv.js';
|
|
5
|
+
export { I as IdentityProvider, n as newSessionId } from '../identity.d-BePPZ7Uv.js';
|
|
6
6
|
import { P as PetRef } from '../ids.d-B2GAAifq.js';
|
|
7
7
|
export { B as Brand, U as UserRef, _ as __brand } from '../ids.d-B2GAAifq.js';
|
|
8
8
|
import { z } from 'zod';
|
|
@@ -11,9 +11,9 @@ export { a as CACHE_EPOCH_STORAGE_KEY, c as createCacheEpochGuard } from '../cac
|
|
|
11
11
|
import { T as TelemetryPort } from '../TelemetryPort.d-BDNr00hu.js';
|
|
12
12
|
import { E as EverfurError } from '../EverfurError.d-8NHtlgzA.js';
|
|
13
13
|
export { a as EverfurErrorCategory, b as EverfurErrorCode } from '../EverfurError.d-8NHtlgzA.js';
|
|
14
|
-
import { D as DisabledLevel,
|
|
15
|
-
export { b as CapabilityDisabled,
|
|
16
|
-
export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-
|
|
14
|
+
import { D as DisabledLevel, a as CapabilityDecision } from '../resolve.d-CoQWUy1Y.js';
|
|
15
|
+
export { b as CapabilityDisabled, C as CapabilityName } from '../resolve.d-CoQWUy1Y.js';
|
|
16
|
+
export { A as AcceptedFrame, a as AnalysisCompleteFrame, b as AnalysisStartedFrame, D as DeltaFrame, c as DoneFrame, E as ErrorFrame, d as EverfurRequest, e as EverfurRequestBase, F as Frame, f as FrameBase, g as FrameKind, H as HeartbeatFrame, h as HttpMethod, M as MultipartBody, T as TransportPort, U as UnknownFrame, i as UrgencyLevel } from '../config.d-MX7IKP2f.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* The full /state payload. `degraded` + `cache_epoch` + `cache_key` are additive fields an older backend
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { E as EverfurError } from './EverfurError.d-8NHtlgzA.js';
|
|
2
|
-
import { R as RequestFunnel } from './requestFunnel.d-
|
|
2
|
+
import { R as RequestFunnel } from './requestFunnel.d-D9edIEjZ.js';
|
|
3
3
|
import { F as FileHandle, U as UploadTransport, a as UploadPolicyWire } from './ports.d-BX4f4UsB.js';
|
|
4
|
-
import { R as ReadableStore, T as Timers } from './ports.d-
|
|
4
|
+
import { R as ReadableStore, T as Timers } from './ports.d-D2n4HRUy.js';
|
|
5
5
|
|
|
6
6
|
/** The image MIME types the chat accepts (the server's `CHAT_ATTACHMENT` rule, plus the `image/jpg` alias). */
|
|
7
7
|
declare const ATTACHMENT_MIME_TYPES: readonly string[];
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
|
|
2
2
|
import { E as EverfurResult } from './EverfurResult.d-BFH-3s6E.cjs';
|
|
3
3
|
import { C as ConversationId, P as PetRef, b as ResponseId } from './ids.d-B2GAAifq.cjs';
|
|
4
|
-
import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports.d-
|
|
5
|
-
import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-
|
|
6
|
-
import { i as UrgencyLevel } from './config.d-
|
|
7
|
-
import { W as WidgetPet } from './petsRepository.d-
|
|
4
|
+
import { f as ChatFeedbackType, l as ChatStatus, i as ChatMessage, c as ChatConversationListOptions, d as ChatConversationPage, g as ChatHistoryOptions, h as ChatMessagePage, a as ChatCheckinTarget, e as ChatFeedbackReceipt } from './ports.d-DBA_gsq5.cjs';
|
|
5
|
+
import { C as CheckinAnswer, a as CheckinOutcome } from './casesRepository.d-DCnix2pT.cjs';
|
|
6
|
+
import { i as UrgencyLevel } from './config.d-DJ4mvf_w.cjs';
|
|
7
|
+
import { W as WidgetPet } from './petsRepository.d-B2TpRE7r.cjs';
|
|
8
8
|
import { U as UploadTransport, F as FileHandle } from './ports.d-BX4f4UsB.cjs';
|
|
9
|
-
import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments.d-
|
|
9
|
+
import { c as AttachmentQueue, d as AttachmentState, A as AttachmentError, b as AttachmentOutcome } from './attachments.d-ZEpTUeWN.cjs';
|
|
10
10
|
|
|
11
11
|
/** The three thumbs. `'neutral'` is the app's rotated thumbs-down glyph. */
|
|
12
12
|
type ChatSentiment = 'up' | 'neutral' | 'down';
|
|
@@ -146,24 +146,6 @@ declare function useEverfurChat(opts?: {
|
|
|
146
146
|
readonly conversationId?: ConversationId;
|
|
147
147
|
}): UseEverfurChatState;
|
|
148
148
|
|
|
149
|
-
/**
|
|
150
|
-
* One partner-supplied starter chip for the empty thread (`EverfurChat`'s `starterPrompts`). The words are the
|
|
151
|
-
* partner's own: Everfur shows `label` and sends `prompt` (the label when absent) as the member's next message.
|
|
152
|
-
*/
|
|
153
|
-
interface EverfurStarterPrompt {
|
|
154
|
-
/** What the chip reads. A blank label drops the chip. */
|
|
155
|
-
readonly label: string;
|
|
156
|
-
/** The text sent when the chip is tapped. Defaults to `label`. */
|
|
157
|
-
readonly prompt?: string;
|
|
158
|
-
/**
|
|
159
|
-
* The chip's own fill, any CSS colour (for example `'#FFE7A1'`). Absent, the chip takes the theme's
|
|
160
|
-
* `highlight` under `onHighlight`, as the built-in chips do on a partner theme.
|
|
161
|
-
*/
|
|
162
|
-
readonly tint?: string;
|
|
163
|
-
/** The chip's text colour on its `tint`. Absent, the theme's primary text colour. Ignored without `tint`. */
|
|
164
|
-
readonly ink?: string;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
149
|
/**
|
|
168
150
|
* CRN-16. The host's own storage for an unsent draft. The SDK ships NO persistence of its own: a draft is
|
|
169
151
|
* memory-only unless a host passes this, because a question half-typed on a health surface is the reader's
|
|
@@ -251,4 +233,4 @@ interface UseChatAttachmentsOptions {
|
|
|
251
233
|
*/
|
|
252
234
|
declare function useChatAttachments(options?: UseChatAttachmentsOptions): UseChatAttachmentsState;
|
|
253
235
|
|
|
254
|
-
export { type ChatFeedbackReason as C, type EverfurChatDraftStore as E, type UrgencyDisplayLevel as U, type ChatFeedbackReasonOption as a, type ChatSentiment as b, type
|
|
236
|
+
export { type ChatFeedbackReason as C, type EverfurChatDraftStore as E, type UrgencyDisplayLevel as U, type ChatFeedbackReasonOption as a, type ChatSentiment as b, type UseChatAttachmentsOptions as c, type UseChatAttachmentsState as d, type UseEverfurChatState as e, type UseEverfurPetsState as f, useEverfurChat as g, useEverfurPets as h, useChatAttachments as u };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { E as EverfurError } from './EverfurError.d-8NHtlgzA.cjs';
|
|
2
|
-
import { R as RequestFunnel } from './requestFunnel.d-
|
|
2
|
+
import { R as RequestFunnel } from './requestFunnel.d-RZex94XX.cjs';
|
|
3
3
|
import { F as FileHandle, U as UploadTransport, a as UploadPolicyWire } from './ports.d-BX4f4UsB.cjs';
|
|
4
|
-
import { R as ReadableStore, T as Timers } from './ports.d-
|
|
4
|
+
import { R as ReadableStore, T as Timers } from './ports.d-DBA_gsq5.cjs';
|
|
5
5
|
|
|
6
6
|
/** The image MIME types the chat accepts (the server's `CHAT_ATTACHMENT` rule, plus the `image/jpg` alias). */
|
|
7
7
|
declare const ATTACHMENT_MIME_TYPES: readonly string[];
|