@everfur/sdk 0.15.0 → 0.15.1
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 +38 -0
- package/LICENSE.md +1 -0
- package/README.md +12 -5
- package/SDK-LICENSE.txt +130 -0
- package/THIRD_PARTY_NOTICES +9 -0
- package/dist/CameraPort.d-Cv31Pz7g.d.cts +1 -0
- package/dist/CameraPort.d-Cv31Pz7g.d.ts +1 -0
- package/dist/{Chat.d-CtfANk3A.d.cts → Chat.d-BO5iJsR2.d.cts} +12 -3
- package/dist/{Chat.d-a7Ksz7NZ.d.ts → Chat.d-BlsnQwCQ.d.ts} +12 -3
- package/dist/{DepthViews.d-DbJejGm3.d.ts → DepthViews.d--1daZblh.d.cts} +2 -1
- package/dist/{DepthViews.d-dXWL6ToG.d.cts → DepthViews.d-BuEWI6Ln.d.ts} +2 -1
- package/dist/{DepthViews.d-CuBElgEc.d.ts → DepthViews.d-CKTnEeUo.d.ts} +2 -1
- package/dist/{DepthViews.d-BqMnWSMu.d.cts → DepthViews.d-PuBGdAYk.d.cts} +2 -1
- package/dist/ErrorPolicyPort.d-68yrE3BE.d.ts +1 -0
- package/dist/ErrorPolicyPort.d-DirW9hgO.d.cts +1 -0
- package/dist/EverfurError.d-8NHtlgzA.d.cts +1 -0
- package/dist/EverfurError.d-8NHtlgzA.d.ts +1 -0
- package/dist/EverfurResult.d-BFH-3s6E.d.cts +1 -0
- package/dist/EverfurResult.d-D_-254ZY.d.ts +1 -0
- package/dist/IntakeMedia.d-4a89XrP7.d.ts +1 -0
- package/dist/IntakeMedia.d-DGxrhgIW.d.ts +1 -0
- package/dist/IntakeMedia.d-DUPR4lVM.d.cts +1 -0
- package/dist/IntakeMedia.d-JJCUvQu7.d.cts +1 -0
- package/dist/LICENSE.md +1 -0
- package/dist/LifecyclePort.d-Cr1p33a7.d.cts +1 -0
- package/dist/LifecyclePort.d-Cr1p33a7.d.ts +1 -0
- package/dist/PhotoController.d-BzCJOE7e.d.cts +1 -0
- package/dist/PhotoController.d-D0XiUUOl.d.ts +1 -0
- package/dist/{RecordsPage.d-DKrZ9rHX.d.ts → RecordsPage.d-CBB8sfoY.d.ts} +2 -1
- package/dist/{RecordsPage.d-DRPdUAo4.d.cts → RecordsPage.d-Dq5gpQG0.d.cts} +2 -1
- package/dist/SDK-LICENSE.txt +130 -0
- package/dist/THIRD_PARTY_NOTICES +9 -0
- package/dist/TelemetryPort.d-BDNr00hu.d.cts +1 -0
- package/dist/TelemetryPort.d-BDNr00hu.d.ts +1 -0
- package/dist/animations/index.cjs +2 -1
- package/dist/animations/index.d.cts +22 -21
- package/dist/animations/index.d.ts +22 -21
- package/dist/animations/index.js +2 -1
- package/dist/{attachments.d-CoQhXrP9.d.ts → attachments.d-C2nkIyDB.d.ts} +3 -2
- package/dist/{attachments.d-BGn2_knv.d.ts → attachments.d-DFP9yvz9.d.ts} +7 -6
- package/dist/{attachments.d-CpaOfi2g.d.cts → attachments.d-DRHsJkni.d.cts} +7 -6
- package/dist/{attachments.d-CqHMGoER.d.cts → attachments.d-DRUC35Ti.d.cts} +3 -2
- package/dist/{bookingCopy.d-BwCOCZUj.d.ts → bookingCopy.d-CFL-1Be2.d.ts} +3 -2
- package/dist/{bookingCopy.d-Bnq2zk0F.d.cts → bookingCopy.d-bF_QknDC.d.cts} +3 -2
- package/dist/branding.d-Bbc6p1XY.d.cts +1 -0
- package/dist/branding.d-y6c0UwhE.d.ts +1 -0
- package/dist/cacheEpoch.d-DknKn3S0.d.cts +1 -0
- package/dist/cacheEpoch.d-DknKn3S0.d.ts +1 -0
- package/dist/callCopy.d-Bw6oZT54.d.cts +1 -0
- package/dist/callCopy.d-Bw6oZT54.d.ts +1 -0
- package/dist/callRoom.d-B1DoYdJe.d.cts +1 -0
- package/dist/callRoom.d-Dqm1rUqT.d.ts +1 -0
- package/dist/{casesRepository.d-CsUJ2Oyb.d.cts → casesRepository.d-BMOnT1fg.d.cts} +2 -1
- package/dist/{casesRepository.d-DG83Ggbq.d.ts → casesRepository.d-C__BnffJ.d.ts} +2 -1
- package/dist/chat/index.cjs +13 -12
- package/dist/chat/index.d.cts +10 -9
- package/dist/chat/index.d.ts +10 -9
- package/dist/chat/index.js +13 -12
- package/dist/client/index.cjs +2 -1
- package/dist/client/index.d.cts +7 -6
- package/dist/client/index.d.ts +7 -6
- package/dist/client/index.js +2 -1
- package/dist/{clinicBatch.d-BLpbpS51.d.cts → clinicBatch.d-C5deJ4xY.d.cts} +3 -2
- package/dist/{clinicBatch.d-Byjx4y_W.d.ts → clinicBatch.d-D68RYvc3.d.ts} +3 -2
- package/dist/clinicModels.d-BXgKZqDb.d.cts +1 -0
- package/dist/clinicModels.d-CaS64-P-.d.ts +1 -0
- package/dist/clinicRequestProps.d-1dCtouGA.d.cts +1 -0
- package/dist/clinicRequestProps.d-CjsMg_OD.d.ts +1 -0
- package/dist/{config.d-C0WgjutL.d.cts → config.d-BQgrIDdu.d.cts} +2 -1
- package/dist/{config.d-zd2eTb2L.d.ts → config.d-XSMThgVj.d.ts} +2 -1
- package/dist/consent/index.cjs +1 -0
- package/dist/consent/index.d.cts +6 -5
- package/dist/consent/index.d.ts +6 -5
- package/dist/consent/index.js +1 -0
- package/dist/{context.d-Du_UPxa1.d.cts → context.d-Ba8YyJpk.d.cts} +6 -5
- package/dist/{context.d-BBjmV0rz.d.ts → context.d-xoh5vmxS.d.ts} +6 -5
- package/dist/{copy.d-Da_PP2K3.d.cts → copy.d-Cq-s-UUv.d.cts} +3 -2
- package/dist/{copy.d-D_VVj01o.d.ts → copy.d-HV9fU5kh.d.ts} +3 -2
- package/dist/core/index.cjs +2 -1
- package/dist/core/index.d.cts +14 -13
- package/dist/core/index.d.ts +14 -13
- package/dist/core/index.js +2 -1
- package/dist/{depth.d-BEedifOR.d.ts → depth.d-D7kKiYl7.d.ts} +3 -2
- package/dist/{depth.d-RTV61QNf.d.cts → depth.d-DYnkz8Re.d.cts} +3 -2
- package/dist/{entitlementRepository.d-C-stdRyA.d.cts → entitlementRepository.d-B_kEPLhz.d.cts} +3 -2
- package/dist/{entitlementRepository.d-BwThmh3V.d.ts → entitlementRepository.d-DmnUZLl_.d.ts} +3 -2
- package/dist/features.d-DrQxTw3-.d.cts +1 -0
- package/dist/features.d-DrQxTw3-.d.ts +1 -0
- package/dist/{focus.d-Dsm39DjO.d.cts → focus.d-BHm_QtQ9.d.cts} +3 -2
- package/dist/{focus.d-CtotIyEt.d.ts → focus.d-CjL6Cj0m.d.ts} +3 -2
- package/dist/health-plan/index.cjs +2 -1
- package/dist/health-plan/index.d.cts +9 -8
- package/dist/health-plan/index.d.ts +9 -8
- package/dist/health-plan/index.js +2 -1
- package/dist/{idempotency.d-Cv-B7SfC.d.ts → idempotency.d-BSRK8od4.d.cts} +2 -1
- package/dist/{idempotency.d-Bfm7oIxS.d.cts → idempotency.d-CFc4CCc9.d.ts} +2 -1
- package/dist/{identity.d-BksOEa6m.d.ts → identity.d-Be2Es9Td.d.ts} +2 -1
- package/dist/{identity.d-CioQhZrq.d.cts → identity.d-HbwYQ4-z.d.cts} +2 -1
- package/dist/ids.d-B2GAAifq.d.cts +1 -0
- package/dist/ids.d-B2GAAifq.d.ts +1 -0
- package/dist/index.cjs +14 -13
- package/dist/index.d.cts +13 -12
- package/dist/index.d.ts +13 -12
- package/dist/index.js +14 -13
- package/dist/{introEvents.d-tOi4o3F4.d.ts → introEvents.d-DflJ6J9H.d.ts} +2 -1
- package/dist/{introEvents.d-fAZitxMA.d.cts → introEvents.d-Dr34KIaD.d.cts} +2 -1
- package/dist/introEvents.d-dS3fJCH1.d.cts +1 -0
- package/dist/introEvents.d-dS3fJCH1.d.ts +1 -0
- package/dist/models.d-BSqvbTE1.d.cts +1 -0
- package/dist/models.d-DOwnr8fi.d.ts +1 -0
- package/dist/notifications/index.cjs +1 -0
- package/dist/notifications/index.d.cts +5 -4
- package/dist/notifications/index.d.ts +5 -4
- package/dist/notifications/index.js +1 -0
- package/dist/{optInView.d-B8zTORO2.d.ts → optInView.d-3mbj1mR6.d.ts} +15 -2
- package/dist/{optInView.d-BkNSv4Gk.d.cts → optInView.d-D23o1gtT.d.cts} +15 -2
- package/dist/optionalModule.d-DbJmsq5f.d.cts +1 -0
- package/dist/optionalModule.d-DbJmsq5f.d.ts +1 -0
- package/dist/{parse.d-BgjO82mY.d.cts → parse.d-4lUXdmvY.d.cts} +2 -1
- package/dist/{parse.d-B5JHS6Pr.d.ts → parse.d-BERabxHw.d.ts} +2 -1
- package/dist/{pets.d-B_LoizOv.d.cts → pets.d-CHU0UbXt.d.cts} +2 -1
- package/dist/{pets.d-OWxskXCP.d.ts → pets.d-D_ayuqjp.d.ts} +2 -1
- package/dist/{petsRepository.d-B5DWzU7C.d.cts → petsRepository.d-Bwfe8yuR.d.cts} +2 -1
- package/dist/{petsRepository.d-Ba3xhJcj.d.ts → petsRepository.d-DUaAWoTv.d.ts} +2 -1
- package/dist/photo/index.cjs +1 -0
- package/dist/photo/index.d.cts +1 -0
- package/dist/photo/index.d.ts +1 -0
- package/dist/photo/index.js +1 -0
- package/dist/{planSignals.d-DtxZoWGM.d.ts → planSignals.d-CON9gTvJ.d.ts} +3 -2
- package/dist/{planSignals.d-Cl6n5QpS.d.cts → planSignals.d-Dha2CMDF.d.cts} +3 -2
- package/dist/ports.d-BX4f4UsB.d.cts +1 -0
- package/dist/ports.d-BX4f4UsB.d.ts +1 -0
- package/dist/{ports.d-gZNTn8Qf.d.cts → ports.d-ClbPRUtx.d.cts} +5 -4
- package/dist/{ports.d-BDtwHxmW.d.ts → ports.d-DzEJMVRs.d.ts} +5 -4
- package/dist/presentation.d-vy8kTGfR.d.cts +1 -0
- package/dist/presentation.d-vy8kTGfR.d.ts +1 -0
- package/dist/profile.d-CSs1wlXT.d.cts +1 -0
- package/dist/profile.d-CSs1wlXT.d.ts +1 -0
- package/dist/projection.d-CeIUsbSk.d.cts +1 -0
- package/dist/projection.d-CeIUsbSk.d.ts +1 -0
- package/dist/quickPrompts.d-NM_81Jc1.d.cts +1 -0
- package/dist/quickPrompts.d-NM_81Jc1.d.ts +1 -0
- package/dist/records/depth/index.cjs +1 -0
- package/dist/records/depth/index.d.cts +10 -9
- package/dist/records/depth/index.d.ts +10 -9
- package/dist/records/depth/index.js +1 -0
- package/dist/records/index.cjs +3 -2
- package/dist/records/index.d.cts +11 -10
- package/dist/records/index.d.ts +11 -10
- package/dist/records/index.js +3 -2
- package/dist/recordsAsk.d-C5CGSi3j.d.cts +1 -0
- package/dist/recordsAsk.d-C5CGSi3j.d.ts +1 -0
- package/dist/{requestFunnel.d-CR4akGCY.d.cts → requestFunnel.d-JoqddYSx.d.cts} +3 -2
- package/dist/{requestFunnel.d-DFf9C__p.d.ts → requestFunnel.d-YabU6G-Z.d.ts} +3 -2
- package/dist/resolve.d-CoQWUy1Y.d.cts +1 -0
- package/dist/resolve.d-CoQWUy1Y.d.ts +1 -0
- package/dist/{runtimeTypes.d-CHdH-y2c.d.cts → runtimeTypes.d-Cv38YuzP.d.cts} +5 -4
- package/dist/{runtimeTypes.d-BqBOrZxa.d.ts → runtimeTypes.d-DQTBJAbk.d.ts} +5 -4
- package/dist/{screenProps.d-CVqFJw-J.d.ts → screenProps.d-BuJLzFkN.d.ts} +2 -1
- package/dist/{screenProps.d-B1dIANI0.d.cts → screenProps.d-C-AuHoyF.d.cts} +2 -1
- package/dist/server/events/index.cjs +2 -1
- package/dist/server/events/index.d.cts +3 -2
- package/dist/server/events/index.d.ts +3 -2
- package/dist/server/events/index.js +2 -1
- package/dist/server/index.cjs +2 -1
- package/dist/server/index.d.cts +4 -3
- package/dist/server/index.d.ts +4 -3
- package/dist/server/index.js +2 -1
- package/dist/sheetCopy.d-CAhLOxjc.d.cts +1 -0
- package/dist/sheetCopy.d-CAhLOxjc.d.ts +1 -0
- package/dist/sheetSeam.d-B09jf4YC.d.ts +1 -0
- package/dist/sheetSeam.d-BBuEIVsa.d.cts +1 -0
- package/dist/shop/index.cjs +1 -0
- package/dist/shop/index.d.cts +4 -3
- package/dist/shop/index.d.ts +4 -3
- package/dist/shop/index.js +1 -0
- package/dist/species.d-BXAIMh7I.d.cts +1 -0
- package/dist/species.d-BXAIMh7I.d.ts +1 -0
- package/dist/tabs/index.cjs +1 -0
- package/dist/tabs/index.d.cts +7 -6
- package/dist/tabs/index.d.ts +7 -6
- package/dist/tabs/index.js +1 -0
- package/dist/tabsModel.d-BfIQg6yS.d.cts +1 -0
- package/dist/tabsModel.d-BfIQg6yS.d.ts +1 -0
- package/dist/televet/booking/index.cjs +1 -0
- package/dist/televet/booking/index.d.cts +7 -6
- package/dist/televet/booking/index.d.ts +7 -6
- package/dist/televet/booking/index.js +1 -0
- package/dist/televet/call/index.cjs +1 -0
- package/dist/televet/call/index.d.cts +1 -0
- package/dist/televet/call/index.d.ts +1 -0
- package/dist/televet/call/index.js +1 -0
- package/dist/televet/index.cjs +1 -0
- package/dist/televet/index.d.cts +1 -0
- package/dist/televet/index.d.ts +1 -0
- package/dist/televet/index.js +1 -0
- package/dist/televetGlobal.d-CC-DrqkQ.d.ts +1 -0
- package/dist/televetGlobal.d-CKwDCbmN.d.cts +1 -0
- package/dist/testing/index.cjs +1 -0
- package/dist/testing/index.d.cts +2 -1
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/rn/index.cjs +2 -2
- package/dist/testing/rn/index.d.cts +11 -9
- package/dist/testing/rn/index.d.ts +11 -9
- package/dist/testing/rn/index.js +2 -2
- package/dist/testing/web/index.cjs +1 -0
- package/dist/testing/web/index.d.cts +8 -7
- package/dist/testing/web/index.d.ts +8 -7
- package/dist/testing/web/index.js +1 -0
- package/dist/texting/index.cjs +2 -1
- package/dist/texting/index.d.cts +9 -6
- package/dist/texting/index.d.ts +9 -6
- package/dist/texting/index.js +2 -1
- package/dist/{threadOptions.d-DZ0AoQGk.d.ts → threadOptions.d-8x_1evAr.d.ts} +3 -2
- package/dist/{threadOptions.d-CnSfFVMr.d.cts → threadOptions.d-DBrmOwmb.d.cts} +3 -2
- package/dist/{timelineRows.d-CF1KvLcQ.d.cts → timelineRows.d-B6lLC8Ud.d.cts} +2 -1
- package/dist/{timelineRows.d-CtL0y7y1.d.ts → timelineRows.d-Brlkti-G.d.ts} +2 -1
- package/dist/tokens.d-BUVqme2D.d.cts +1 -0
- package/dist/tokens.d-BUVqme2D.d.ts +1 -0
- package/dist/typeStyle.d-B3Kdtjie.d.ts +1 -0
- package/dist/typeStyle.d-DmlwyJq-.d.cts +1 -0
- package/dist/uploadTransport.d-CWL7CdWP.d.cts +1 -0
- package/dist/uploadTransport.d-EGoUl7gX.d.ts +1 -0
- package/dist/useIntroSeen.d-CTWFUthO.d.cts +1 -0
- package/dist/useIntroSeen.d-CTWFUthO.d.ts +1 -0
- package/dist/{usePresentation.d-CZS0qlLI.d.cts → usePresentation.d-BcdCIuEU.d.cts} +2 -1
- package/dist/{usePresentation.d-BsR08Wxt.d.ts → usePresentation.d-Bne14SlX.d.ts} +2 -1
- package/dist/useRecords.d-BYNX01El.d.cts +1 -0
- package/dist/useRecords.d-DWk61a4c.d.ts +1 -0
- package/dist/{useRecordsDepth.d-DTAxFf5s.d.ts → useRecordsDepth.d-Cd6J03o5.d.ts} +2 -1
- package/dist/{useRecordsDepth.d-k-zYIHTe.d.cts → useRecordsDepth.d-DAa169VY.d.cts} +2 -1
- package/dist/useVetVisit.d-BtdwhmgD.d.cts +1 -0
- package/dist/useVetVisit.d-DoYQimyt.d.ts +1 -0
- package/dist/video/index.cjs +1 -0
- package/dist/video/index.d.cts +1 -0
- package/dist/video/index.d.ts +1 -0
- package/dist/video/index.js +1 -0
- package/dist/{view.d-CAWQjcY_.d.cts → view.d-3d5_O7Xk.d.cts} +4 -3
- package/dist/{view.d-BE7VOlsB.d.ts → view.d-DkGM8GNA.d.ts} +4 -3
- package/dist/visitIntent.d-D7_yVp1I.d.cts +1 -0
- package/dist/visitIntent.d-D7_yVp1I.d.ts +1 -0
- package/dist/web/consent/index.cjs +1 -0
- package/dist/web/consent/index.d.cts +6 -5
- package/dist/web/consent/index.d.ts +6 -5
- package/dist/web/consent/index.js +1 -0
- package/dist/web/health-plan/index.cjs +2 -1
- package/dist/web/health-plan/index.d.cts +11 -10
- package/dist/web/health-plan/index.d.ts +11 -10
- package/dist/web/health-plan/index.js +2 -1
- package/dist/web/index.cjs +16 -13
- package/dist/web/index.d.cts +31 -22
- package/dist/web/index.d.ts +31 -22
- package/dist/web/index.js +16 -13
- package/dist/web/intro/index.cjs +1 -0
- package/dist/web/intro/index.d.cts +7 -6
- package/dist/web/intro/index.d.ts +7 -6
- package/dist/web/intro/index.js +1 -0
- package/dist/web/notifications/index.cjs +1 -0
- package/dist/web/notifications/index.d.cts +4 -3
- package/dist/web/notifications/index.d.ts +4 -3
- package/dist/web/notifications/index.js +1 -0
- package/dist/web/records/depth/index.cjs +1 -0
- package/dist/web/records/depth/index.d.cts +10 -9
- package/dist/web/records/depth/index.d.ts +10 -9
- package/dist/web/records/depth/index.js +1 -0
- package/dist/web/records/index.cjs +1 -0
- package/dist/web/records/index.d.cts +12 -11
- package/dist/web/records/index.d.ts +12 -11
- package/dist/web/records/index.js +1 -0
- package/dist/web/records/upload/index.cjs +1 -0
- package/dist/web/records/upload/index.d.cts +1 -0
- package/dist/web/records/upload/index.d.ts +1 -0
- package/dist/web/records/upload/index.js +1 -0
- package/dist/web/records-sheet/index.cjs +3 -2
- package/dist/web/records-sheet/index.d.cts +1 -0
- package/dist/web/records-sheet/index.d.ts +1 -0
- package/dist/web/records-sheet/index.js +3 -2
- package/dist/web/shop/index.cjs +1 -0
- package/dist/web/shop/index.d.cts +4 -3
- package/dist/web/shop/index.d.ts +4 -3
- package/dist/web/shop/index.js +1 -0
- package/dist/web/televet/booking/index.cjs +1 -0
- package/dist/web/televet/booking/index.d.cts +7 -6
- package/dist/web/televet/booking/index.d.ts +7 -6
- package/dist/web/televet/booking/index.js +1 -0
- package/dist/web/televet/call/index.cjs +1 -0
- package/dist/web/televet/call/index.d.cts +1 -0
- package/dist/web/televet/call/index.d.ts +1 -0
- package/dist/web/televet/call/index.js +1 -0
- package/dist/web/televet/index.cjs +1 -0
- package/dist/web/televet/index.d.cts +1 -0
- package/dist/web/televet/index.d.ts +1 -0
- package/dist/web/televet/index.js +1 -0
- package/dist/web/texting/index.cjs +2 -1
- package/dist/web/texting/index.d.cts +9 -6
- package/dist/web/texting/index.d.ts +9 -6
- package/dist/web/texting/index.js +2 -1
- package/package.json +10 -5
- package/LICENSE +0 -21
package/dist/web/index.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
|
|
1
2
|
"use client";
|
|
2
3
|
"use strict";var react=require("react"),zod=require("zod"),jsxRuntime=require("react/jsx-runtime"),reactDom=require("react-dom");function ok(value,warning){/* @__PURE__ */
|
|
3
4
|
return Object.freeze({ok:true,value:value})}function err(error){/* @__PURE__ */
|
|
@@ -102,7 +103,7 @@ return Object.freeze({kind:"done",terminal:true,conversationId:fields.conversati
|
|
|
102
103
|
return Object.freeze({kind:"error",terminal:true,code:fields.code,retryable:fields.retryable,wireMessage:fields.wireMessage,synthesized:fields.synthesized,lastEventId:fields.lastEventId,serverRequestId:fields.serverRequestId??null})}function analysisStartedFrame(requestId,lastEventId,serverRequestId=null){/* @__PURE__ */
|
|
103
104
|
return Object.freeze({kind:"analysisStarted",requestId:requestId,lastEventId:lastEventId,serverRequestId:serverRequestId,terminal:false})}function analysisCompleteFrame(fields,serverRequestId=null){/* @__PURE__ */
|
|
104
105
|
return Object.freeze({kind:"analysisComplete",terminal:false,resultId:fields.resultId,analysisType:fields.analysisType,modelVersion:fields.modelVersion,confidence:fields.confidence,detections:/* @__PURE__ */Object.freeze([...fields.detections]),interpretation:fields.interpretation,lastEventId:fields.lastEventId,serverRequestId:serverRequestId})}function unknownFrame(raw,lastEventId,serverRequestId=null){/* @__PURE__ */
|
|
105
|
-
return Object.freeze({kind:"unknown",raw:{...raw},lastEventId:lastEventId,serverRequestId:serverRequestId,terminal:false})}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.",LINKED_ACCOUNT_READ_ONLY="linked_account_read_only";function displayFor(code,wireCode,reasonCode){return code==="conflict"&&reasonCode===LINKED_ACCOUNT_READ_ONLY?ACCESS_DENIED_COPY:(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),linkedReadOnly=code==="conflict"&&opts?.reasonCode===LINKED_ACCOUNT_READ_ONLY,error={code:code,category:categoryFor(code),retryable:opts?.retryable??(linkedReadOnly?false:isRetryableCode(code)),displayMessage:displayFor(code,opts?.wireCode,linkedReadOnly?LINKED_ACCOUNT_READ_ONLY:null)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function mintFailedError(cause,refusal){let message=cause instanceof Error?cause.message:typeof cause=="string"?cause:null;return makeEverfurError("authRejected",{retryable:false,...refusal?.wireCode?{wireCode:refusal.wireCode}:{},...refusal?.requestId?{requestId:refusal.requestId}:{},...message?{wireMessage:message}:{},...cause!=null?{raw:cause}:{}})}function createIdentityProvider(userRef2,getToken,onMinted,onRejected){let cached=null,rejectionReported=false,inFlight3=null,revoked=false,load=()=>inFlight3||(inFlight3=(async()=>{try{let minted=await getToken(),token=typeof minted=="string"?minted:minted?.token;if(typeof token!="string"||token.length===0)throw new EverfurConfigError("invalid-argument","TokenProvider returned an empty token");return cached=token,rejectionReported=!1,onMinted?.(typeof minted=="string"?null:expiryMs(minted.expiresAt)),token}finally{inFlight3=null}})(),inFlight3);return{userRef:userRef2,async currentToken(opts){if(revoked)throw new EverfurConfigError("not-initialized","This identity was cleared (sign-out); mint a new one.");return opts?.forceRefresh&&(cached=null),cached!==null?cached:load()},hasToken(){return!revoked&&cached!==null},clear(){revoked=true,cached=null},reportRejected(){revoked||rejectionReported||(rejectionReported=true,onRejected?.())}}}function expiryMs(value){if(value===void 0)return null;let ms=typeof value=="number"?value<1e11?value*1e3:value:new Date(value).getTime();return Number.isFinite(ms)?ms:null}function newSessionId(){let bytes=new Uint8Array(16),cryptoObj=globalThis.crypto;if(typeof cryptoObj?.getRandomValues=="function")cryptoObj.getRandomValues(bytes);else for(let i=0;i<bytes.length;i+=1)bytes[i]=Math.floor(Math.random()*256);bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;let hex=[];for(let i=0;i<bytes.length;i+=1)hex.push(bytes[i].toString(16).padStart(2,"0"));return hex.slice(0,4).join("")+"-"+hex.slice(4,6).join("")+"-"+hex.slice(6,8).join("")+"-"+hex.slice(8,10).join("")+"-"+hex.slice(10,16).join("")}function authHeaders(auth){let headers={};return auth.mode==="personalized"?headers.authorization=`Bearer ${auth.token}`:headers["x-everfur-partner-key"]=auth.publishableKey,auth.userRef&&(headers["x-everfur-user-ref"]=auth.userRef),auth.sessionId&&(headers["x-everfur-session-id"]=auth.sessionId),headers}function withAuthHeaders(req,auth){return{...req,headers:{...stripAuthHeaders(req.headers),...authHeaders(auth)}}}function stripAuthHeaders(headers){if(!headers)return{};let out={};for(let[key,value]of Object.entries(headers)){let lower=key.toLowerCase();lower==="authorization"||lower==="x-everfur-partner-key"||(out[key]=value)}return out}async function authedSend(req,ctx){if(ctx.mode==="anonymous")return ctx.transport.request(withAuthHeaders(req,{mode:"anonymous",publishableKey:ctx.publishableKey,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));let token;try{token=await ctx.identity.currentToken()}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause))}let first=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:token,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));if(first.ok||first.error.httpStatus!==401)return first;let refreshed;try{refreshed=await ctx.identity.currentToken({forceRefresh:!0})}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause,{wireCode:wireCodeOf(first.error.raw),requestId:first.error.requestId}))}let retry=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:refreshed,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));return!retry.ok&&retry.error.httpStatus===401?(ctx.identity.reportRejected?.(),err(refusedAfterRemintError(retry.error))):retry}function refusedAfterRemintError(refusal){let raw=refusal.raw,wireCode=wireCodeOf(raw);return makeEverfurError("authRejected",{retryable:false,...refusal.httpStatus!==void 0?{httpStatus:refusal.httpStatus}:{},...refusal.requestId?{requestId:refusal.requestId}:{},...wireCode?{wireCode:wireCode}:{},...refusal.reasonCode?{reasonCode:refusal.reasonCode}:{},...refusal.wireMessage?{wireMessage:refusal.wireMessage}:{},...raw!=null?{raw:raw}:{}})}function wireCodeOf(body){if(typeof body!="object"||body===null)return null;let b=body,code=(typeof b.error=="object"&&b.error!==null?b.error.code:void 0)??b.code;return typeof code=="string"&&code.length>0?code:null}var DAILY_QUOTA_WIRE_CODE="DAILY_QUOTA_EXCEEDED",THROTTLES=/* @__PURE__ */new Set(["THROTTLINGEXCEPTION","RATELIMITED","TOOMANYREQUESTS"]);function foldDailyQuotaWireCode(code,body){if(!THROTTLES.has(code.toUpperCase().replace(/[^A-Z0-9]/g,"")))return code;let b=body,limit=b?.daily_limit??b?.error?.daily_limit;return typeof limit=="number"&&Number.isFinite(limit)?DAILY_QUOTA_WIRE_CODE:code}var BLOCK_SEPARATOR=`\n\n`,MAX_PENDING_BLOCK_CHARS=1048576,wireObjectSchema=/* @__PURE__ */zod.z.record(/* @__PURE__ */zod.z.string(),/* @__PURE__ */zod.z.unknown()),URGENCY_LEVELS=["emergency","schedule_soon","home_care"];async function*parseSse(bytes,serverRequestId=null){let resolvedRequestId=null,requestIdNow=()=>(resolvedRequestId!==null||(resolvedRequestId=typeof serverRequestId=="function"?serverRequestId():serverRequestId),resolvedRequestId),decoder=new TextDecoder("utf-8"),buffer="",scanFrom=0,sawDelta=false;for await(let chunk of bytes){for(buffer+=decoder.decode(chunk,{stream:true});;){let sep=buffer.indexOf(BLOCK_SEPARATOR,scanFrom);if(sep===-1)break;let block=buffer.slice(0,sep);buffer=buffer.slice(sep+BLOCK_SEPARATOR.length),scanFrom=0;let frame=parseBlock(block,requestIdNow());if(frame!==null&&(frame.kind==="delta"&&(sawDelta=true),yield frame,frame.terminal))return}if(scanFrom=buffer.length>0?buffer.length-1:0,buffer.length>MAX_PENDING_BLOCK_CHARS){yield errorFrame({code:sawDelta?"CHAT_STREAM_INCOMPLETE":"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:requestIdNow()});return}}if(buffer+=decoder.decode(),buffer.trim().length>0){let frame=parseBlock(buffer,requestIdNow());if(frame!==null&&(frame.kind==="delta"&&(sawDelta=true),yield frame,frame.terminal))return}yield errorFrame({code:sawDelta?"CHAT_STREAM_INCOMPLETE":"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:requestIdNow()})}function parseBlock(block,serverRequestId){let id=null,dataLines=[];for(let rawLine of block.split(`\n`)){let line=rawLine.replace(/\s+$/,"");line.length===0||line.startsWith(":")||(line.startsWith("id:")?id=line.slice(3).trim():line.startsWith("data:")&&dataLines.push(line.slice(5).replace(/^ /,"")))}if(dataLines.length===0)return null;let decoded;try{decoded=JSON.parse(dataLines.join(`\n`))}catch{return null}if(typeof decoded!="object"||decoded===null||Array.isArray(decoded))return null;let parsed=wireObjectSchema.safeParse(decoded);return parsed.success?frameFromWire(parsed.data,id,serverRequestId):null}function frameFromWire(json,lastEventId,serverRequestId){let type=json.type,event=json.event;if(type==="error"||"error"in json)return errorFrame({code:asString(json.code)??"unknown",retryable:json.retryable===true,wireMessage:asString(json.error),synthesized:false,lastEventId:lastEventId,serverRequestId:serverRequestId});if(type==="done"||json.done===true)return doneFrame({conversationId:asString(json.conversation_id)??"",messageId:asString(json.message_id),title:asString(json.title),followUpQuestions:asStringList(json.follow_up_questions),citations:asMapList(json.citations),citationStatus:asString(json.citation_status),urgencyLevel:asUrgency(json.urgency_level),urgencyReason:asString(json.urgency_reason),urgencyProvided:urgencySlotProvided(json),resultId:asString(json.result_id),lastEventId:lastEventId},serverRequestId);if(type==="accepted"||json.status==="reasoning")return acceptedFrame(asString(json.stream_id),lastEventId,serverRequestId);if(type==="heartbeat"||json.heartbeat===true)return heartbeatFrame(lastEventId,serverRequestId);if(type==="text.delta"||"delta"in json||"token"in json){let delta=asString(json.delta)??asString(json.token)??"";return deltaFrame(delta,lastEventId,serverRequestId)}return event==="analysis_started"?analysisStartedFrame(asString(json.request_id),lastEventId,serverRequestId):event==="analysis_complete"?analysisCompleteFrame({resultId:asString(json.result_id),analysisType:asString(json.analysis_type),modelVersion:asString(json.model_version),confidence:asNumber(json.confidence),detections:asMapList(json.detections),interpretation:asString(json.interpretation),lastEventId:lastEventId},serverRequestId):unknownFrame(json,lastEventId,serverRequestId)}function asString(v){return typeof v=="string"?v:null}function asNumber(v){return typeof v=="number"&&Number.isFinite(v)?v:null}function asUrgency(v){return typeof v=="string"&&URGENCY_LEVELS.includes(v)?v:null}function urgencySlotProvided(json){if(!Object.prototype.hasOwnProperty.call(json,"urgency_level"))return false;let raw=json.urgency_level;return raw===null||asUrgency(raw)!==null}function asStringList(v){return Array.isArray(v)?v.map(e=>typeof e=="string"?e:String(e)):[]}function isPlainObject(v){return typeof v=="object"&&v!==null&&!Array.isArray(v)}function asMapList(v){return Array.isArray(v)?v.filter(isPlainObject):[]}var SDK_VERSION="0.15.0",SDK_PLATFORM="react-native",DEFAULT_CONTRACT_VERSION="2026-09-19",ENV_API_BASE_URL="EVERFUR_API_BASE_URL";function configFailure(reason,message){/* @__PURE__ */
|
|
106
|
+
return Object.freeze({kind:"unknown",raw:{...raw},lastEventId:lastEventId,serverRequestId:serverRequestId,terminal:false})}var ACCESS_DENIED_COPY="This feature isn't available on your account right now.",VALIDATION_FAILED_COPY="Something in that request was not right. Check the details and try again.",USER_FACING_COPY=/* @__PURE__ */Object.freeze({authExpired:"Please sign in again to continue.",authRejected:"Please sign in again to continue.",sessionRequired:"This app needs to be updated to keep using Everfur.",accessDenied:ACCESS_DENIED_COPY,paymentRequired:"This is part of a paid plan.",quotaExceeded:"You have used today's messages. This resets tomorrow.",rateLimited:"You are sending messages quickly. Try again in a few seconds.",validationFailed:VALIDATION_FAILED_COPY,sdkUpdateRequired:"This app needs to be updated to keep using Everfur.",conflict:"That is already running. Wait for it to finish, then try again.",idempotencyConflict:"That message was already delivered.",idempotencyInFlight:"That is still processing. Give it a moment.",conversationNotFound:"This conversation is no longer available.",petNotFound:"We could not find that pet. Please pick a pet and try again.",resourceNotFound:"We could not find that.",streamTimeout:"The response timed out. Tap retry to try again.",mediaUploadFailed:"We could not upload that photo. Please attach it again.",moderationBlocked:"This request cannot be answered here.",upstreamLlmTimeout:"The response timed out. Tap retry to try again.",internalError:"We hit a snag on our end. Please try again.",notImplemented:"That is not available yet.",serviceUnavailable:"That service is briefly unavailable. Try again shortly.",streamIncomplete:"The connection dropped mid-answer. Tap retry to continue.",identitySignatureRequired:ACCESS_DENIED_COPY,runtimeDisposed:VALIDATION_FAILED_COPY,unknown:"Something went wrong. Please try again."}),SESSION_REVOKED_COPY="This session has ended. Please sign in again.",LINKED_ACCOUNT_READ_ONLY="linked_account_read_only";function displayFor(code,wireCode,reasonCode){return code==="conflict"&&reasonCode===LINKED_ACCOUNT_READ_ONLY?ACCESS_DENIED_COPY:(code==="authRejected"||code==="authExpired")&&typeof wireCode=="string"&&wireCode.trim().toLowerCase()==="session_revoked"?SESSION_REVOKED_COPY:userFacingError(code)}function userFacingError(code){return USER_FACING_COPY[code]}function defineHidden(target,key,value){Object.defineProperty(target,key,{value:value,enumerable:false,writable:false,configurable:false})}var REASON_CODE_SHAPE=/^[a-z][a-z0-9_]{0,63}$/;function makeEverfurError(code,opts){let row=contractErrorFor(opts?.wireCode,opts?.wireEnvelope),linkedReadOnly=code==="conflict"&&opts?.reasonCode===LINKED_ACCOUNT_READ_ONLY,error={code:code,category:categoryFor(code),retryable:opts?.retryable??(linkedReadOnly?false:isRetryableCode(code)),displayMessage:displayFor(code,opts?.wireCode,linkedReadOnly?LINKED_ACCOUNT_READ_ONLY:null)};opts?.httpStatus!==void 0&&(error.httpStatus=opts.httpStatus),opts?.requestId&&(error.requestId=opts.requestId),typeof opts?.reasonCode=="string"&&REASON_CODE_SHAPE.test(opts.reasonCode)&&(error.reasonCode=opts.reasonCode);let wait=opts?.retryAfterSeconds;if(typeof wait=="number"&&Number.isFinite(wait)&&wait>=0&&(error.retryAfterSeconds=Math.round(wait)),row);return opts?.wireMessage&&defineHidden(error,"wireMessage",opts.wireMessage),opts?.raw!==void 0&&opts.raw!==null&&defineHidden(error,"raw",opts.raw),/* @__PURE__ */Object.freeze(error)}function mintFailedError(cause,refusal){let message=cause instanceof Error?cause.message:typeof cause=="string"?cause:null;return makeEverfurError("authRejected",{retryable:false,...refusal?.wireCode?{wireCode:refusal.wireCode}:{},...refusal?.requestId?{requestId:refusal.requestId}:{},...message?{wireMessage:message}:{},...cause!=null?{raw:cause}:{}})}function createIdentityProvider(userRef2,getToken,onMinted,onRejected){let cached=null,rejectionReported=false,inFlight3=null,revoked=false,load=()=>inFlight3||(inFlight3=(async()=>{try{let minted=await getToken(),token=typeof minted=="string"?minted:minted?.token;if(typeof token!="string"||token.length===0)throw new EverfurConfigError("invalid-argument","TokenProvider returned an empty token");return cached=token,rejectionReported=!1,onMinted?.(typeof minted=="string"?null:expiryMs(minted.expiresAt)),token}finally{inFlight3=null}})(),inFlight3);return{userRef:userRef2,async currentToken(opts){if(revoked)throw new EverfurConfigError("not-initialized","This identity was cleared (sign-out); mint a new one.");return opts?.forceRefresh&&(cached=null),cached!==null?cached:load()},hasToken(){return!revoked&&cached!==null},clear(){revoked=true,cached=null},reportRejected(){revoked||rejectionReported||(rejectionReported=true,onRejected?.())}}}function expiryMs(value){if(value===void 0)return null;let ms=typeof value=="number"?value<1e11?value*1e3:value:new Date(value).getTime();return Number.isFinite(ms)?ms:null}function newSessionId(){let bytes=new Uint8Array(16),cryptoObj=globalThis.crypto;if(typeof cryptoObj?.getRandomValues=="function")cryptoObj.getRandomValues(bytes);else for(let i=0;i<bytes.length;i+=1)bytes[i]=Math.floor(Math.random()*256);bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;let hex=[];for(let i=0;i<bytes.length;i+=1)hex.push(bytes[i].toString(16).padStart(2,"0"));return hex.slice(0,4).join("")+"-"+hex.slice(4,6).join("")+"-"+hex.slice(6,8).join("")+"-"+hex.slice(8,10).join("")+"-"+hex.slice(10,16).join("")}function authHeaders(auth){let headers={};return auth.mode==="personalized"?headers.authorization=`Bearer ${auth.token}`:headers["x-everfur-partner-key"]=auth.publishableKey,auth.userRef&&(headers["x-everfur-user-ref"]=auth.userRef),auth.sessionId&&(headers["x-everfur-session-id"]=auth.sessionId),headers}function withAuthHeaders(req,auth){return{...req,headers:{...stripAuthHeaders(req.headers),...authHeaders(auth)}}}function stripAuthHeaders(headers){if(!headers)return{};let out={};for(let[key,value]of Object.entries(headers)){let lower=key.toLowerCase();lower==="authorization"||lower==="x-everfur-partner-key"||(out[key]=value)}return out}async function authedSend(req,ctx){if(ctx.mode==="anonymous")return ctx.transport.request(withAuthHeaders(req,{mode:"anonymous",publishableKey:ctx.publishableKey,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));let token;try{token=await ctx.identity.currentToken()}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause))}let first=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:token,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));if(first.ok||first.error.httpStatus!==401)return first;let refreshed;try{refreshed=await ctx.identity.currentToken({forceRefresh:!0})}catch(cause){return ctx.identity.reportRejected?.(),err(mintFailedError(cause,{wireCode:wireCodeOf(first.error.raw),requestId:first.error.requestId}))}let retry=await ctx.transport.request(withAuthHeaders(req,{mode:"personalized",token:refreshed,userRef:ctx.userRef,...ctx.sessionId?{sessionId:ctx.sessionId}:{}}));return!retry.ok&&retry.error.httpStatus===401?(ctx.identity.reportRejected?.(),err(refusedAfterRemintError(retry.error))):retry}function refusedAfterRemintError(refusal){let raw=refusal.raw,wireCode=wireCodeOf(raw);return makeEverfurError("authRejected",{retryable:false,...refusal.httpStatus!==void 0?{httpStatus:refusal.httpStatus}:{},...refusal.requestId?{requestId:refusal.requestId}:{},...wireCode?{wireCode:wireCode}:{},...refusal.reasonCode?{reasonCode:refusal.reasonCode}:{},...refusal.wireMessage?{wireMessage:refusal.wireMessage}:{},...raw!=null?{raw:raw}:{}})}function wireCodeOf(body){if(typeof body!="object"||body===null)return null;let b=body,code=(typeof b.error=="object"&&b.error!==null?b.error.code:void 0)??b.code;return typeof code=="string"&&code.length>0?code:null}var DAILY_QUOTA_WIRE_CODE="DAILY_QUOTA_EXCEEDED",THROTTLES=/* @__PURE__ */new Set(["THROTTLINGEXCEPTION","RATELIMITED","TOOMANYREQUESTS"]);function foldDailyQuotaWireCode(code,body){if(!THROTTLES.has(code.toUpperCase().replace(/[^A-Z0-9]/g,"")))return code;let b=body,limit=b?.daily_limit??b?.error?.daily_limit;return typeof limit=="number"&&Number.isFinite(limit)?DAILY_QUOTA_WIRE_CODE:code}var BLOCK_SEPARATOR=`\n\n`,MAX_PENDING_BLOCK_CHARS=1048576,wireObjectSchema=/* @__PURE__ */zod.z.record(/* @__PURE__ */zod.z.string(),/* @__PURE__ */zod.z.unknown()),URGENCY_LEVELS=["emergency","schedule_soon","home_care"];async function*parseSse(bytes,serverRequestId=null){let resolvedRequestId=null,requestIdNow=()=>(resolvedRequestId!==null||(resolvedRequestId=typeof serverRequestId=="function"?serverRequestId():serverRequestId),resolvedRequestId),decoder=new TextDecoder("utf-8"),buffer="",scanFrom=0,sawDelta=false;for await(let chunk of bytes){for(buffer+=decoder.decode(chunk,{stream:true});;){let sep=buffer.indexOf(BLOCK_SEPARATOR,scanFrom);if(sep===-1)break;let block=buffer.slice(0,sep);buffer=buffer.slice(sep+BLOCK_SEPARATOR.length),scanFrom=0;let frame=parseBlock(block,requestIdNow());if(frame!==null&&(frame.kind==="delta"&&(sawDelta=true),yield frame,frame.terminal))return}if(scanFrom=buffer.length>0?buffer.length-1:0,buffer.length>MAX_PENDING_BLOCK_CHARS){yield errorFrame({code:sawDelta?"CHAT_STREAM_INCOMPLETE":"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:requestIdNow()});return}}if(buffer+=decoder.decode(),buffer.trim().length>0){let frame=parseBlock(buffer,requestIdNow());if(frame!==null&&(frame.kind==="delta"&&(sawDelta=true),yield frame,frame.terminal))return}yield errorFrame({code:sawDelta?"CHAT_STREAM_INCOMPLETE":"internal_error",retryable:true,wireMessage:null,synthesized:true,lastEventId:null,serverRequestId:requestIdNow()})}function parseBlock(block,serverRequestId){let id=null,dataLines=[];for(let rawLine of block.split(`\n`)){let line=rawLine.replace(/\s+$/,"");line.length===0||line.startsWith(":")||(line.startsWith("id:")?id=line.slice(3).trim():line.startsWith("data:")&&dataLines.push(line.slice(5).replace(/^ /,"")))}if(dataLines.length===0)return null;let decoded;try{decoded=JSON.parse(dataLines.join(`\n`))}catch{return null}if(typeof decoded!="object"||decoded===null||Array.isArray(decoded))return null;let parsed=wireObjectSchema.safeParse(decoded);return parsed.success?frameFromWire(parsed.data,id,serverRequestId):null}function frameFromWire(json,lastEventId,serverRequestId){let type=json.type,event=json.event;if(type==="error"||"error"in json)return errorFrame({code:asString(json.code)??"unknown",retryable:json.retryable===true,wireMessage:asString(json.error),synthesized:false,lastEventId:lastEventId,serverRequestId:serverRequestId});if(type==="done"||json.done===true)return doneFrame({conversationId:asString(json.conversation_id)??"",messageId:asString(json.message_id),title:asString(json.title),followUpQuestions:asStringList(json.follow_up_questions),citations:asMapList(json.citations),citationStatus:asString(json.citation_status),urgencyLevel:asUrgency(json.urgency_level),urgencyReason:asString(json.urgency_reason),urgencyProvided:urgencySlotProvided(json),resultId:asString(json.result_id),lastEventId:lastEventId},serverRequestId);if(type==="accepted"||json.status==="reasoning")return acceptedFrame(asString(json.stream_id),lastEventId,serverRequestId);if(type==="heartbeat"||json.heartbeat===true)return heartbeatFrame(lastEventId,serverRequestId);if(type==="text.delta"||"delta"in json||"token"in json){let delta=asString(json.delta)??asString(json.token)??"";return deltaFrame(delta,lastEventId,serverRequestId)}return event==="analysis_started"?analysisStartedFrame(asString(json.request_id),lastEventId,serverRequestId):event==="analysis_complete"?analysisCompleteFrame({resultId:asString(json.result_id),analysisType:asString(json.analysis_type),modelVersion:asString(json.model_version),confidence:asNumber(json.confidence),detections:asMapList(json.detections),interpretation:asString(json.interpretation),lastEventId:lastEventId},serverRequestId):unknownFrame(json,lastEventId,serverRequestId)}function asString(v){return typeof v=="string"?v:null}function asNumber(v){return typeof v=="number"&&Number.isFinite(v)?v:null}function asUrgency(v){return typeof v=="string"&&URGENCY_LEVELS.includes(v)?v:null}function urgencySlotProvided(json){if(!Object.prototype.hasOwnProperty.call(json,"urgency_level"))return false;let raw=json.urgency_level;return raw===null||asUrgency(raw)!==null}function asStringList(v){return Array.isArray(v)?v.map(e=>typeof e=="string"?e:String(e)):[]}function isPlainObject(v){return typeof v=="object"&&v!==null&&!Array.isArray(v)}function asMapList(v){return Array.isArray(v)?v.filter(isPlainObject):[]}var SDK_VERSION="0.15.1",SDK_PLATFORM="react-native",DEFAULT_CONTRACT_VERSION="2026-09-19",ENV_API_BASE_URL="EVERFUR_API_BASE_URL";function configFailure(reason,message){/* @__PURE__ */
|
|
106
107
|
return Object.freeze({ok:false,failure:/* @__PURE__ */Object.freeze({reason:reason,message:message})})}function checkPublishableKey(raw){let publishableKey=typeof raw=="string"?raw.trim():"";return publishableKey.length===0?{reason:"missing-publishable-key",message:"publishableKey is required"}:/^sk[_-]/i.test(publishableKey)?{reason:"secret-key-as-publishable-key",message:"publishableKey looks like a SECRET key (sk_...). A device must never hold a partner secret key: use the pk_ publishable key here, and keep the secret key on your server."}:null}function tryResolveClientConfig(config,options){let keyFailure=checkPublishableKey(config?.publishableKey);if(keyFailure!==null)/* @__PURE__ */
|
|
107
108
|
return Object.freeze({ok:false,failure:keyFailure});let publishableKey=config.publishableKey.trim(),baseUrl=tryResolveApiBaseUrl(config.apiBaseUrl);if(!baseUrl.ok)return baseUrl;let contractVersion=config.contractVersion?.trim()||DEFAULT_CONTRACT_VERSION;/* @__PURE__ */
|
|
108
109
|
return Object.freeze({ok:true,config:/* @__PURE__ */Object.freeze({publishableKey:publishableKey,apiBaseUrl:baseUrl.value,contractVersion:contractVersion,sdkVersion:SDK_VERSION,platform:options?.platform??SDK_PLATFORM,debug:config.debug===true})})}function tryResolveApiBaseUrl(apiBaseUrl){let explicit=apiBaseUrl?.trim(),candidate=explicit&&explicit.length>0?explicit:readEnv(ENV_API_BASE_URL);return candidate?normalizeBaseUrl(candidate):configFailure("missing-api-base-url",`apiBaseUrl is required: pass config.apiBaseUrl or set ${ENV_API_BASE_URL}. The SDK never ships a hardcoded host.`)}function buildBaseHeaders(cfg){return{"X-Everfur-SDK-Version":cfg.sdkVersion,"X-Everfur-SDK-Platform":cfg.platform,"X-Everfur-Contract":cfg.contractVersion}}var ABSOLUTE_URL=/^([A-Za-z][A-Za-z0-9+.-]*):\/\/([^/?#]*)/;function hostOf(authority){return authority.slice(authority.lastIndexOf("@")+1).replace(/:\d+$/,"").toLowerCase()}function isPrintableHost(host2){return host2.length===0||host2.includes("@")?false:host2.startsWith("[")&&host2.endsWith("]")?true:!host2.includes(":")}function canEchoOrigin(rawTrimmed,host2){let schemeEnd=rawTrimmed.indexOf("://");return schemeEnd<0||rawTrimmed.slice(schemeEnd+3).includes("@")?false:isPrintableHost(host2)}function safeOrigin(scheme,host2){return`${scheme}://${host2}`}function normalizeBaseUrl(raw){let trimmed=raw.trim(),match=ABSOLUTE_URL.exec(trimmed);if(match===null||match[2]===void 0||match[2].length===0)return configFailure("malformed-api-base-url","apiBaseUrl is not a valid absolute URL");let scheme=(match[1]??"").toLowerCase(),host2=hostOf(match[2]);if(host2.length===0)return configFailure("malformed-api-base-url","apiBaseUrl is not a valid absolute URL");let shown=canEchoOrigin(trimmed,host2)?`: ${safeOrigin(scheme,host2)}`:"";if(scheme!=="https"){if(!(scheme==="http"&&isLoopbackHost(host2)))return scheme==="http"?configFailure("insecure-api-base-url",`apiBaseUrl must use https (cleartext http is only allowed for localhost)${shown}`):configFailure("unsupported-api-base-url-scheme",`apiBaseUrl must be http(s)${shown}`)}let value=trimmed.endsWith("/")?trimmed.slice(0,-1):trimmed;/* @__PURE__ */
|
|
@@ -143,7 +144,6 @@ return jsxRuntime.jsx("div",{className:className,style:{...styles.offstate,...st
|
|
|
143
144
|
/* @__PURE__ */Object.freeze({key:"unclear",label:CHAT_COPY.feedbackReasonUnclear,feedbackType:"unclear"}),
|
|
144
145
|
/* @__PURE__ */Object.freeze({key:"other",label:CHAT_COPY.feedbackReasonOther,feedbackType:"not_helpful"})]),SENTIMENT_OPTIONS=/* @__PURE__ */Object.freeze([
|
|
145
146
|
/* @__PURE__ */Object.freeze({sentiment:"up",label:CHAT_COPY.feedbackHelpful}),
|
|
146
|
-
/* @__PURE__ */Object.freeze({sentiment:"neutral",label:CHAT_COPY.feedbackNeutral}),
|
|
147
147
|
/* @__PURE__ */Object.freeze({sentiment:"down",label:CHAT_COPY.feedbackNotHelpful})]);function sentimentToFeedbackType(sentiment){switch(sentiment){case"up":return"helpful";case"neutral":return"neutral";case"down":return"not_helpful"}}function feedbackTypeFor(sentiment,reason){if(sentiment==="down"&&reason!==null){let option=FEEDBACK_REASONS.find(entry=>entry.key===reason);if(option!==void 0)return option.feedbackType}return sentimentToFeedbackType(sentiment)}var NOT_READY=/* @__PURE__ */new WeakSet;function chatNotReadyResult(){let error=makeEverfurError("internalError",{retryable:true});return NOT_READY.add(error),err(error)}function isChatNotReadyResult(result){if(typeof result!="object"||result===null||result.ok!==false)return false;let error=result.error;return typeof error=="object"&&error!==null&&NOT_READY.has(error)}function useStalePetHold(runtime,userRef2,petRef2,scopeEpoch){let[owner,setOwner]=react.useState({pet:petRef2,user:userRef2}),adopt=owner.pet!==petRef2||owner.user===null&&userRef2!==null;adopt&&setOwner({pet:petRef2,user:userRef2});let current=adopt?{user:userRef2}:owner,held=petRef2!==null&¤t.user!==null&¤t.user!==userRef2;return react.useEffect(()=>{if(!held||userRef2===null||petRef2===null)return;let live=true,repository=createPetsRepository(runtime.registry.services.authFor(userRef2)),check=async()=>{let listed=await repository.list();live&&listed.ok&&listed.value.some(pet=>pet.petRef===petRef2)&&setOwner({pet:petRef2,user:userRef2})};check();let unsubscribe=subscribePetsChanged(runtime,()=>{check()});return()=>{live=false,unsubscribe()}},[held,runtime,userRef2,petRef2,scopeEpoch]),held}var BOOTSTRAP_SNAPSHOT=/* @__PURE__ */Object.freeze({status:"idle",messages:/* @__PURE__ */Object.freeze([]),conversationId:null,error:null,isStreaming:false,isBootstrapping:true,suggestedPrompts:/* @__PURE__ */Object.freeze([]),unreadCount:null});function useEverfurChat(opts){let{runtime:runtime,userRef:userRef2,activePet:activePet,scopeEpoch:scopeEpoch}=useEverfurContext(),petRef2=opts?.petRef??activePet??null,conversationId2=opts?.conversationId??null,held=useStalePetHold(runtime,userRef2,petRef2,scopeEpoch),scope=react.useMemo(()=>({runtime:runtime,userRef:userRef2,petRef:petRef2,conversationId:conversationId2,scopeEpoch:scopeEpoch,held:held}),[runtime,userRef2,petRef2,conversationId2,scopeEpoch,held]),[binding,setBinding]=react.useState(null),controller=held?null:binding?.scope===scope?binding.controller:runtime.registry.peekChat({userRef:userRef2,petRef:petRef2,conversationId:conversationId2}),active=react.useRef(null);react.useEffect(()=>{if(held)return;let acquired=runtime.registry.acquireChat({userRef:userRef2,petRef:petRef2,conversationId:conversationId2});return active.current=acquired,setBinding({scope:scope,controller:acquired}),()=>{active.current=null,setBinding(current=>current?.controller===acquired?null:current),runtime.registry.releaseChat(acquired)}},[runtime,userRef2,petRef2,conversationId2,scopeEpoch,held,scope]);let subscribe2=react.useCallback(onChange=>controller?controller.subscribe(onChange):NOOP_UNSUBSCRIBE,[controller]),getSnapshot=react.useCallback(()=>controller?controller.getSnapshot():BOOTSTRAP_SNAPSHOT,[controller]),snapshot2=react.useSyncExternalStore(subscribe2,getSnapshot,getSnapshot),send=react.useCallback((text3,opts2)=>controller&&active.current===controller&&!controller.getSnapshot().isBootstrapping?driveToResult(controller,controller.send(text3,opts2?.imageS3Keys===void 0?{}:{imageS3Keys:opts2.imageS3Keys}),()=>active.current===controller):Promise.resolve(notReadyError()),[controller]),askEverfur=react.useCallback(prompt=>controller&&active.current===controller&&!controller.getSnapshot().isBootstrapping?driveToResult(controller,controller.askEverfur(prompt),()=>active.current===controller):Promise.resolve(notReadyError()),[controller]),retryLast=react.useCallback(()=>controller&&active.current===controller?driveToResult(controller,controller.retryLast(),()=>active.current===controller):Promise.resolve(notReadyError()),[controller]),stop=react.useCallback(()=>{controller&&active.current===controller&&controller.stop()},[controller]),newConversation=react.useCallback(()=>{controller&&active.current===controller&&controller.newConversation()},[controller]),[ratings,setRatings]=react.useState({controller:null,byMessage:{}}),sentimentByMessage=ratings.controller===controller?ratings.byMessage:EMPTY_RATINGS,feedback=react.useCallback(async(responseId,sentiment,reason,notes)=>{if(!controller||active.current!==controller)return err(makeEverfurError("accessDenied"));let key=String(responseId),previous=ratings.controller===controller?ratings.byMessage[key]:void 0;if(previous===sentiment&&reason==null)return setRatings(current=>{let rest={...current.controller===controller?current.byMessage:{}};return delete rest[key],{controller:controller,byMessage:rest}}),ok(/* @__PURE__ */Object.freeze({feedbackId:""}));setRatings(current=>({controller:controller,byMessage:{...current.controller===controller?current.byMessage:{},[key]:sentiment}}));let result=await controller.submitFeedback(responseId,feedbackTypeFor(sentiment,reason??null),notes??null);return active.current!==controller?err(makeEverfurError("accessDenied")):(result.ok||setRatings(current=>{let rest={...current.controller===controller?current.byMessage:{}};return previous===void 0?delete rest[key]:rest[key]=previous,{controller:controller,byMessage:rest}}),result)},[controller,ratings]),history=react.useMemo(()=>{let run=async operation=>{if(!controller||active.current!==controller)return err(makeEverfurError("accessDenied"));let result=await operation(controller);return active.current===controller?result:err(makeEverfurError("accessDenied"))};return{listConversations:options=>run(current=>current.listConversations({...petRef2?{petRef:petRef2}:{},...options})),getMessages:(id,options)=>run(current=>current.getMessages(id,options)),resumeConversation:id=>run(current=>current.resumeConversation(id)),loadOlderMessages:()=>run(current=>current.loadOlderMessages()),markRead:()=>run(current=>current.markRead()),refreshActiveThread:()=>run(current=>current.refreshActiveThread()),answerCheckin:(caseId,answer)=>run(current=>current.answerCheckin(caseId,answer)),openCheckin:target=>run(current=>current.openCheckin(target))}},[controller,petRef2]);return react.useMemo(()=>({status:snapshot2.status,messages:snapshot2.messages,conversationId:snapshot2.conversationId,petRef:petRef2,error:snapshot2.error,isStreaming:snapshot2.isStreaming,isBootstrapping:snapshot2.isBootstrapping,historyCursor:snapshot2.historyCursor??null,isLoadingHistory:snapshot2.isLoadingHistory??false,stopped:snapshot2.stopped??false,reconnecting:snapshot2.reconnecting??false,...history,suggestedPrompts:snapshot2.suggestedPrompts,unreadCount:snapshot2.unreadCount,hasUnreadThreads:snapshot2.hasUnreadThreads??false,newConversation:newConversation,sentimentByMessage:sentimentByMessage,feedback:feedback,send:send,askEverfur:askEverfur,retryLast:retryLast,stop:stop}),[snapshot2,petRef2,send,askEverfur,retryLast,stop,history,newConversation,sentimentByMessage,feedback])}var NOOP_UNSUBSCRIBE=()=>{},EMPTY_RATINGS=/* @__PURE__ */Object.freeze({});async function driveToResult(controller,iterable,current){for await(let _frame of iterable);if(!current())return err(makeEverfurError("accessDenied"));let snapshot2=controller.getSnapshot();return snapshot2.status==="error"&&snapshot2.error!==null?err(snapshot2.error):ok(lastAssistantResponseId(snapshot2.messages))}function lastAssistantResponseId(messages){for(let i=messages.length-1;i>=0;i-=1){let message=messages[i];if(message&&message.role==="assistant"&&message.responseId!==void 0)return message.responseId}return null}function notReadyError(){return chatNotReadyResult()}function attachmentErrorMessage(error){switch(error.code){case"too_large":return fillCopy(CHAT_COPY.attachmentTooLarge,{max:formatBytes(MAX_ATTACHMENT_BYTES),filename:error.filename,size:formatBytes(error.sizeBytes??0)});case"too_many":return fillCopy(CHAT_COPY.attachmentTooMany,{max:MAX_ATTACHMENTS_PER_MESSAGE});case"unsupported_type":return fillCopy(CHAT_COPY.attachmentUnsupported,{filename:error.filename});case"network":return CHAT_COPY.attachmentNetwork;case"server":return fillCopy(CHAT_COPY.attachmentServer,{status:error.httpStatus?` (${error.httpStatus})`:""});case"cancelled":return CHAT_COPY.attachmentCancelled;case"rate_limited":return CHAT_COPY.attachmentRateLimited;case"quota_exceeded":return CHAT_COPY.attachmentQuota;case"idempotency_conflict":return CHAT_COPY.attachmentConflict;case"unknown":return CHAT_COPY.attachmentUnknown}}function attachControlLabel(used,total){return fillCopy(used>=total?CHAT_COPY.attachmentsFull:CHAT_COPY.addAttachment,{used:used,total:total})}var EMPTY_SNAPSHOT=/* @__PURE__ */Object.freeze({attachments:/* @__PURE__ */Object.freeze([])});function useChatAttachments(options={}){let{runtime:runtime,userRef:userRef2,scopeEpoch:scopeEpoch}=useEverfurContext(),maxPerMessage=options.maxPerMessage??MAX_ATTACHMENTS_PER_MESSAGE,build=react.useCallback(()=>{let{services:services}=runtime.registry;return createAttachmentQueue({funnel:createRequestFunnel({auth:services.authFor(userRef2),...services.errorPolicy?{errorPolicy:services.errorPolicy}:{}}),transport:options.transport??services.uploadTransport,maxPerMessage:maxPerMessage})},[runtime,userRef2,scopeEpoch,maxPerMessage,options.transport]),scoped=react.useMemo(()=>options.queue??build(),[options.queue,build]),disposed3=react.useRef(/* @__PURE__ */new WeakSet),[revived,setRevived]=react.useState(null),queue=revived!==null&&revived.of===scoped?revived.queue:scoped;react.useEffect(()=>{if(queue!==options.queue){if(disposed3.current.has(queue)){setRevived({of:scoped,queue:build()});return}return()=>{queue.dispose(),disposed3.current.add(queue)}}},[queue,scoped,build,options.queue]);let snapshot2=react.useSyncExternalStore(queue.subscribe,queue.getSnapshot,()=>EMPTY_SNAPSHOT),[rejected,setRejected]=react.useState(null),add=react.useCallback(files=>{let outcomes=(Array.isArray(files)?files:[files]).map(file=>queue.add(file)),first=outcomes.find(outcome=>!outcome.ok);return first!==void 0&&!first.ok&&setRejected(first.error),outcomes},[queue,setRejected]),retry=react.useCallback(id=>queue.retry(id),[queue]),remove=react.useCallback(id=>queue.remove(id),[queue]),clear=react.useCallback(()=>queue.clear(),[queue]),dismissRejected=react.useCallback(()=>setRejected(null),[setRejected]),uploading=snapshot2.attachments.some(row=>row.status==="uploading"),failed=snapshot2.attachments.some(row=>row.status==="failed");return react.useMemo(()=>({available:queue.available,attachments:snapshot2.attachments,maxPerMessage:maxPerMessage,uploading:uploading,failed:failed,blocked:uploading||failed,s3Keys:snapshot2.attachments.flatMap(row=>row.status==="uploaded"&&row.s3Key!==null?[row.s3Key]:[]),rejected:rejected,add:add,retry:retry,remove:remove,clear:clear,dismissRejected:dismissRejected}),[queue.available,snapshot2,maxPerMessage,uploading,failed,rejected,add,retry,remove,clear,dismissRejected])}var PET_NOT_REGISTERED="pet_not_registered";function isPetNotRegistered(error){return error!=null&&error.reasonCode===PET_NOT_REGISTERED}var IDLE=/* @__PURE__ */Object.freeze({status:"idle",error:null,registered:null,retry:()=>{}});function useChatPetRegistration(petRef2,pet,onRegistered){let{runtime:runtime,userRef:userRef2,scopeEpoch:scopeEpoch}=useEverfurContext(),register=react.useCallback((ref,body)=>{let auth=runtime.registry.services.authFor(userRef2);return sharedPetRegistration(petRegistrationKey(runtime,auth,ref,body),()=>createPetsRepository(auth).registerPet(ref,body))},[runtime,userRef2,scopeEpoch]),bodyKey=react.useMemo(()=>pet===void 0?null:stableKey(pet),[pet]),[state3,setState]=react.useState({key:null,status:"idle",error:null,registered:null}),generation=react.useRef(0),onRegisteredRef=react.useRef(onRegistered);onRegisteredRef.current=onRegistered;let scopeKey=petRef2===null||bodyKey===null?null:`${String(userRef2)}|${scopeEpoch}|${petRef2}|${bodyKey}`,run=react.useCallback(()=>{if(petRef2===null||pet===void 0||scopeKey===null)return;let attempt=++generation.current;setState({key:scopeKey,status:"registering",error:null,registered:null}),register(petRef2,pet).then(result=>{attempt===generation.current&&(result.ok?(setState({key:scopeKey,status:"registered",error:null,registered:result.value}),onRegisteredRef.current?.()):setState({key:scopeKey,status:"failed",error:result.error,registered:null}))})},[register,petRef2,scopeKey]);react.useEffect(()=>{if(scopeKey===null){generation.current+=1;return}return run(),()=>{generation.current+=1}},[scopeKey,run]);let retry=react.useCallback(()=>{state3.status==="failed"&&run()},[state3.status,run]);return react.useMemo(()=>scopeKey===null?IDLE:state3.key!==scopeKey?{status:"registering",error:null,registered:null,retry:retry}:{status:state3.status,error:state3.error,registered:state3.registered,retry:retry},[scopeKey,state3,retry])}var MAX_SEED_LENGTH=500;function sanitizeSeedPrompt(raw){if(!raw)return null;let stripped=raw.replace(/[\u0000-\u001F\u007F-\u009F\u200E\u200F\u202A-\u202E\u2066-\u2069\uFEFF]/g," ").replace(/\s+/g," ").trim();return stripped?stripped.slice(0,MAX_SEED_LENGTH):null}function useInitialAsk(askEverfur,isBootstrapping,prompt,key){let clean2=sanitizeSeedPrompt(prompt),id=clean2===null?null:key!==void 0?`key:${String(key)}`:`prompt:${clean2}`,latest=react.useRef(askEverfur);latest.current=askEverfur;let done=react.useRef(null),inFlight3=react.useRef(null),current=react.useRef(id);current.current=id,react.useEffect(()=>{if(clean2===null||id===null||isBootstrapping||done.current===id||inFlight3.current===id)return;let ask=latest.current;if(ask===void 0)return;inFlight3.current=id;let settle=result=>{inFlight3.current===id&&(inFlight3.current=null),!isChatNotReadyResult(result)&¤t.current===id&&(done.current=id)};Promise.resolve(ask(clean2)).then(settle,()=>settle(void 0))},[clean2,id,isBootstrapping,askEverfur])}function isCoalesced(trigger,conversationId2,state3){if(trigger==="announced")return false;let last=state3.lastRefresh;return last===null||last.conversationId!==conversationId2?false:state3.now-last.at<15e3}function decideChatRefresh(trigger,state3){let conversationId2=state3.activeConversationId;return conversationId2===null||conversationId2.length===0?{action:"skip",reason:"no_thread"}:state3.isTurnInFlight?{action:"defer",reason:"turn_in_flight"}:state3.isOffline?{action:"defer",reason:"offline"}:isCoalesced(trigger,conversationId2,state3)?{action:"skip",reason:"coalesced"}:{action:"refresh",conversationId:conversationId2}}function reportHostFailure(error){let globalConsole=globalThis.console;try{globalConsole?.error?.("[everfur] A host callback threw; the SDK ignored it.",error)}catch{}}function isThenable(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&typeof value.then=="function"}function callHost(fn,...args){if(typeof fn=="function")try{let result=fn(...args);return isThenable(result)&&Promise.resolve(result).then(void 0,reportHostFailure),result}catch(error){reportHostFailure(error);return}}function callHostAsync(fn,...args){let started;try{started=fn(...args)}catch(error){return reportHostFailure(error),Promise.resolve({ok:false,error:error})}return Promise.resolve(started).then(value=>({ok:true,value:value}),error=>({ok:false,error:error}))}function useChatLifecycle(lifecycle,target){let latest=react.useRef(target);latest.current=target;let lastRefresh=react.useRef(null),deferred=react.useRef(null),probeOffline=()=>lifecycle?.isOffline===void 0?false:callHost(()=>lifecycle.isOffline?.()===!0)===true,isOffline=probeOffline(),run=react.useRef(()=>{});run.current=trigger=>{let{conversationId:conversationId2,isTurnInFlight:isTurnInFlight,refresh:refresh}=latest.current,decision=decideChatRefresh(trigger,{activeConversationId:conversationId2,isTurnInFlight:isTurnInFlight,isOffline:probeOffline(),lastRefresh:lastRefresh.current,now:Date.now()});if(decision.action!=="skip"){if(decision.action==="defer"){deferred.current!=="announced"&&(deferred.current=trigger);return}deferred.current=null,lastRefresh.current={conversationId:decision.conversationId,at:Date.now()},refresh!==void 0&&Promise.resolve(refresh()).catch(()=>{})}},react.useEffect(()=>{if(target.isTurnInFlight||isOffline)return;let owed=deferred.current;owed!==null&&run.current(owed)},[target.isTurnInFlight,isOffline]),react.useEffect(()=>{if(lifecycle===void 0)return;let stops=[],subscribe2=(attach,trigger)=>{if(attach===void 0)return;let stop=callHost(()=>attach(()=>{run.current(trigger)}));typeof stop=="function"&&stops.push(stop)};return subscribe2(lifecycle.onForeground?.bind(lifecycle),"foreground"),subscribe2(lifecycle.onOnline?.bind(lifecycle),"foreground"),subscribe2(lifecycle.onAnnounced?.bind(lifecycle),"announced"),()=>{for(let stop of stops)callHost(stop)}},[lifecycle])}function targetKey(target){if(target===void 0)return null;let conversationId2=target.conversationId??"",petRef2=target.petRef??"";return conversationId2===""&&petRef2===""?null:`${String(conversationId2)}|${String(petRef2)}`}function useCheckinTarget(openCheckin,target){let key=targetKey(target),latest=react.useRef({openCheckin:openCheckin,target:target});latest.current={openCheckin:openCheckin,target:target};let opened=react.useRef(null);react.useEffect(()=>{if(key===null||opened.current===key)return;opened.current=key;let{openCheckin:open,target:current}=latest.current;open===void 0||current===void 0||Promise.resolve(open(current)).catch(()=>{})},[key])}var HISTORY_COPY=/* @__PURE__ */Object.freeze({heading:"Chats",empty:"No chats yet",emptyBody:"Start a new conversation to see it here.",noMatch:"No chats match that.",loading:"Loading your chats…",loadFailed:"Couldn’t load your chats",loadingMore:"Loading more…",untitled:"New conversation",newChat:"New chat",searchPlaceholder:"Search chats…",search:"Search chats",countLabel:"Chats and vet messages",countSeparator:" · ",newReply:"New reply · {date}",retry:"Try again",close:"Close",closeA11y:"Close history",more:"Load more",earlier:"Load earlier messages",loadingEarlier:"Loading earlier messages…",openConversation:"Open conversation",unreadPrefix:"Unread. "});function conversationTitle(title){let collapsed=title?.replace(/\s+/g," ").trim();return collapsed||HISTORY_COPY.untitled}function conversationDate(iso){if(!iso)return null;let parsed=new Date(iso);return Number.isNaN(parsed.getTime())?null:parsed.toLocaleDateString([],{month:"short",day:"numeric"})}function conversationMeta(row){let date2=conversationDate(row.updatedAt);return date2===null?null:row.unreadCount!==null&&row.unreadCount>0?HISTORY_COPY.newReply.replace("{date}",date2):date2}function historyCountLabel(count2,complete){return complete?`${HISTORY_COPY.countLabel}${HISTORY_COPY.countSeparator}${count2}`:HISTORY_COPY.countLabel}function openConversationLabel(row){return`${row.unreadCount!==null&&row.unreadCount>0?HISTORY_COPY.unreadPrefix:""}${HISTORY_COPY.openConversation} ${conversationTitle(row.title)}`}function normalizeForSearch(text3){return text3.normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/[\u2018\u2019]/g,"'").replace(/[\u201c\u201d]/g,'"').toLowerCase().trim().replace(/\s+/g," ")}function filterConversations(rows,query){let q=normalizeForSearch(query);if(q.length===0)return rows;let tiers=[[],[],[]];for(let row of rows){let label=normalizeForSearch(conversationTitle(row.title)),at=label.indexOf(q);if(at<0)continue;let tier=at===0?0:label.charAt(at-1)===" "?1:2;tiers[tier]?.push(row)}return tiers.flat()}function fresh(scope){return{scope:scope,rows:[],cursor:null,loading:false,loadingMore:false,error:null}}function useHistoryPanel(chat){let[open,setOpen]=react.useState(false),[query,setQuery]=react.useState(""),scope=chat.listConversations,generation=react.useRef(0),[state3,setState]=react.useState(()=>fresh(scope)),current=state3.scope===scope?state3:fresh(scope);react.useEffect(()=>(generation.current+=1,setOpen(false),setQuery(""),setState(fresh(scope)),()=>{generation.current+=1}),[scope]);let load=react.useCallback(async cursor2=>{let request=++generation.current,more=cursor2!==void 0;setState(previous=>({...previous,scope:scope,loading:!more,loadingMore:more,error:null}));let result=await chat.listConversations(cursor2?{cursor:cursor2}:void 0);if(request===generation.current){if(!result.ok){setState(previous=>({...previous,loading:false,loadingMore:false,error:result.error.displayMessage}));return}setState(previous=>{let existing=cursor2&&previous.scope===scope?previous.rows:[],ids=new Set(existing.map(row=>row.id));return{scope:scope,loading:false,loadingMore:false,error:null,rows:[...existing,...result.value.conversations.filter(row=>!ids.has(row.id))],cursor:result.value.nextCursor===cursor2?null:result.value.nextCursor}})}},[chat.listConversations,scope]),show=()=>{setOpen(true),setQuery(""),load()},close=()=>{generation.current+=1,setOpen(false)},resume=async id=>{let request=++generation.current;setState(previous=>({...previous,loading:true,error:null}));let result=await chat.resumeConversation(id);request===generation.current&&(setState(previous=>({...previous,loading:false,error:result.ok?null:result.error.displayMessage})),result.ok&&setOpen(false))},earlier=async()=>{let request=generation.current,result=await chat.loadOlderMessages();request===generation.current&&!result.ok&&setState(previous=>({...previous,error:result.error.displayMessage}))},newConversation=()=>{chat.newConversation(),generation.current+=1,setOpen(false)},loadMore=()=>{current.cursor===null||current.loading||current.loadingMore||query.trim().length>0||load(current.cursor)},filtered=react.useMemo(()=>filterConversations(current.rows,query),[current.rows,query]),searching=query.trim().length>0;return{...current,open:open,show:show,close:close,load:load,resume:resume,earlier:earlier,newConversation:newConversation,loadMore:loadMore,query:query,setQuery:setQuery,searching:searching,filtered:filtered,emptyKind:current.rows.length===0?"empty":"noMatch"}}var TIER_REASON_INK="#111111",TIER_PILL_FILL="#FFFFFF",URGENCY_TIERS=/* @__PURE__ */Object.freeze({emergency:/* @__PURE__ */Object.freeze({level:"emergency",label:"Call a vet now",borderColor:"#FCA5A5",backgroundColor:"#FEF2F2",textColor:"#991B1B",reasonColor:TIER_REASON_INK,pillColor:TIER_PILL_FILL,showsVetAction:true}),schedule_soon:/* @__PURE__ */Object.freeze({level:"schedule_soon",label:"Vet care suggested soon",borderColor:"#FCD34D",backgroundColor:"#FFFBEB",textColor:"#92400E",reasonColor:TIER_REASON_INK,pillColor:TIER_PILL_FILL,showsVetAction:true}),home_care:/* @__PURE__ */Object.freeze({level:"home_care",label:"Monitor at home",borderColor:"#86EFAC",backgroundColor:"#F0FDF4",textColor:"#166534",reasonColor:TIER_REASON_INK,pillColor:TIER_PILL_FILL,showsVetAction:false}),general:/* @__PURE__ */Object.freeze({level:"general",label:"Good to know",borderColor:"#86EFAC",backgroundColor:"#F0FDF4",textColor:"#166534",reasonColor:TIER_REASON_INK,pillColor:TIER_PILL_FILL,showsVetAction:false})});function urgencySignature(source){return`${source.messageId}:${source.level}:${source.reason??""}`}function generalUrgencyReason(petName){return fillCopy(CHAT_COPY.urgencyGeneralReason,{petName:CHAT_COPY.emptyTitlePetFallback})}function latestUrgencySource(messages,petName){for(let index=messages.length-1;index>=0;index-=1){let message=messages[index];if(message?.role!=="assistant"||message.responseId===void 0)continue;let level=message.urgencyLevel;return level?{messageId:message.id,level:level,reason:shownReason(message.urgencyReason)}:message.urgencyProvided===true?{messageId:message.id,level:"general",reason:generalUrgencyReason()}:null}return null}function shownReason(reason){return typeof reason=="string"&&reason.trim().length>0?reason:null}function useUrgencySurface(source){let signature=source===null?null:urgencySignature(source),[dismissedSignature,setDismissedSignature]=react.useState(null),[expanded,setExpanded]=react.useState(false);react.useEffect(()=>setExpanded(false),[signature]);let showBanner=source!==null&&(expanded||!(dismissedSignature!==null&&dismissedSignature===signature)),tier=source===null?null:URGENCY_TIERS[source.level],showCompactIcon=source!==null&&!showBanner&&source.level!=="general",dismiss=react.useCallback(()=>{signature!==null&&setDismissedSignature(signature),setExpanded(false)},[signature]),expand=react.useCallback(()=>setExpanded(true),[]);return react.useMemo(()=>({source:source,tier:tier,signature:signature,showBanner:showBanner,showCompactIcon:showCompactIcon,showVetAction:showBanner&&tier!==null&&tier.showsVetAction,dismissLabel:tier===null?null:fillCopy(CHAT_COPY.dismissBanner,{label:tier.label}),dismiss:dismiss,expand:expand}),[source,tier,signature,showBanner,showCompactIcon,dismiss,expand])}function selectView2(state3){return state3.isBootstrapping?"loading":state3.status==="error"&&state3.error&&state3.messages.length===0?"error":state3.messages.length===0?"empty":"populated"}function needsNewConversation(error){return error.code==="accessDenied"||error.code==="conversationNotFound"}function turnNotice(state3,host2="native"){if(state3.messages.length===0)return null;let error=state3.status==="error"?state3.error:null;if(error!==null){let startNew=needsNewConversation(error),web=host2==="web";return{tone:"error",title:startNew?CHAT_COPY.turnUnreachableTitle:web?CHAT_COPY.turnFailedTitleWeb:CHAT_COPY.turnFailedTitle,body:error.displayMessage,actionLabel:startNew?CHAT_COPY.turnStartNewChat:web?CHAT_COPY.retry:CHAT_COPY.turnRetry,action:startNew?"startNew":"retry"}}return state3.stopped===true?{tone:"neutral",title:CHAT_COPY.turnStoppedTitle,body:CHAT_COPY.turnStoppedBody,actionLabel:CHAT_COPY.turnRetry,action:"retry"}:null}function awaitingAssistant(messages,isStreaming){let lastMessage=messages[messages.length-1];return isStreaming&&(lastMessage===void 0||lastMessage.role==="user")}var MAX_VISIBLE_FOLLOW_UPS=3,NO_FOLLOW_UPS=/* @__PURE__ */Object.freeze([]);function visibleFollowUps(state3){let last=state3.messages[state3.messages.length-1];if(state3.isStreaming||state3.status==="error"||last===void 0||last.role!=="assistant")return NO_FOLLOW_UPS;let seen=/* @__PURE__ */new Set,out=[];for(let prompt of state3.suggestedPrompts){let text3=prompt.trim(),key=text3.replace(/\s+/g," ").toLowerCase();if(!(key.length===0||seen.has(key))&&(seen.add(key),out.push(text3),out.length===MAX_VISIBLE_FOLLOW_UPS))break}/* @__PURE__ */
|
|
148
148
|
return Object.freeze(out)}var MAX_POLICY_FOLLOW_UPS=5;function excluded(rule,prompt){if(rule===void 0)return false;if(typeof rule=="function")try{return rule(prompt)===!0}catch{return false}return rule.lastIndex=0,rule.test(prompt)}function followUpsWithPolicy(state3,policy){if(policy===void 0)return visibleFollowUps(state3);let last=state3.messages[state3.messages.length-1];if(state3.isStreaming||state3.status==="error"||last===void 0||last.role!=="assistant")return NO_FOLLOW_UPS;let count2=Math.max(1,Math.min(MAX_POLICY_FOLLOW_UPS,Math.floor(policy.count??MAX_VISIBLE_FOLLOW_UPS))),question=null;for(let i=state3.messages.length-1;i>=0;i-=1){let m=state3.messages[i];if(m!==void 0&&m.role==="user"){question=m.text;break}}let norm=t=>t.trim().replace(/\s+/g," ").toLowerCase(),seen=new Set(question===null?[]:[norm(question)]),out=[],take=prompt=>{let text3=prompt.trim(),key=norm(text3);out.length>=count2||key.length===0||seen.has(key)||excluded(policy.exclude,text3)||(seen.add(key),out.push(text3))};for(let prompt of state3.suggestedPrompts)take(prompt);let fill2=[];try{fill2=typeof policy.fill=="function"?policy.fill(question):policy.fill??[]}catch{fill2=[]}for(let prompt of Array.isArray(fill2)?fill2:[])typeof prompt=="string"&&take(prompt);/* @__PURE__ */
|
|
149
149
|
return Object.freeze(out)}function vetSenderLabel(message){return message.sender?.displayName??CHAT_COPY.senderVet}function buildChatOpts(petRef2,conversationId2){let opts={};return petRef2!==void 0&&(opts.petRef=petRef2),conversationId2!==void 0&&(opts.conversationId=conversationId2),opts}function useEverfurPets(){let{runtime:runtime,userRef:userRef2,activePet:activePetRef,scopeEpoch:scopeEpoch}=useEverfurContext(),repository=react.useMemo(()=>createPetsRepository(runtime.registry.services.authFor(userRef2)),[runtime,userRef2,scopeEpoch]),[state3,setState]=react.useState({repository:repository,pets:[],loading:true,error:null}),current=state3.repository===repository?state3:{pets:[],loading:true,error:null},generation=react.useRef(0),load=react.useCallback(async()=>{let request=++generation.current;setState(previous=>({...previous,repository:repository,loading:true,error:null,pets:previous.repository===repository?previous.pets:[]}));let result=await repository.list();request===generation.current&&setState(result.ok?{repository:repository,pets:result.value,loading:false,error:null}:previous=>({repository:repository,pets:previous.repository===repository?previous.pets:[],loading:false,error:result.error}))},[repository]);react.useEffect(()=>(load(),()=>{generation.current+=1}),[load]),react.useEffect(()=>subscribePetsChanged(runtime,()=>{load()}),[runtime,load]);let activePet=react.useMemo(()=>activePetRef===null?null:current.pets.find(pet=>pet.petRef===activePetRef)??null,[activePetRef,current.pets]);return react.useMemo(()=>({pets:current.pets,activePet:activePet,loading:current.loading,error:current.error,refresh:load}),[current.pets,current.loading,current.error,activePet,load])}function headerPetOf(pets,activePetRef){if(activePetRef!==null){let active=pets.find(pet=>pet.petRef===activePetRef);if(active!==void 0)return active}return pets[0]??null}var VISUALLY_HIDDEN=/* @__PURE__ */Object.freeze({position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0});var FOCUS_RING_WIDTH=2,SELF_FOCUS_RING_ATTRIBUTE="data-ef-focus-ring",FOCUS_VISIBLE_ATTRIBUTE="data-ef-focus-visible",FOCUS_RING_COLOR_ATTRIBUTE="data-ef-focus-ring-color";function focusRingStyle(color){return{outline:`${FOCUS_RING_WIDTH}px solid ${color}`,outlineOffset:FOCUS_RING_WIDTH}}var keyboardDriving=false,bound=0;function onKeyDown(event){event.metaKey||event.ctrlKey||event.altKey||(keyboardDriving=true)}function onPointerDown(){keyboardDriving=false}function bindModality(){return typeof document>"u"?()=>{}:(bound===0&&(document.addEventListener("keydown",onKeyDown,true),document.addEventListener("pointerdown",onPointerDown,true),document.addEventListener("mousedown",onPointerDown,true),document.addEventListener("touchstart",onPointerDown,true)),bound+=1,()=>{bound-=1,!(bound>0)&&(document.removeEventListener("keydown",onKeyDown,true),document.removeEventListener("pointerdown",onPointerDown,true),document.removeEventListener("mousedown",onPointerDown,true),document.removeEventListener("touchstart",onPointerDown,true),keyboardDriving=false)})}var TEXT_INPUT_TYPES=/* @__PURE__ */new Set(["","text","search","email","tel","url","password","number"]);function isTextField(element){return element.tagName==="TEXTAREA"||element.isContentEditable?true:element.tagName!=="INPUT"?false:TEXT_INPUT_TYPES.has((element.getAttribute("type")??"").toLowerCase())}function useKeyboardFocusRing(root,color){react.useEffect(()=>{let node=root.current;if(node!==null)return bindKeyboardFocusRing(node,color)},[root,color])}function bindKeyboardFocusRing(node,color){let unbind=bindModality(),painted=/* @__PURE__ */new Map,onFocusIn=event=>{let target=event.target;if(!(target instanceof HTMLElement)||painted.has(target)||target.closest(`[${SELF_FOCUS_RING_ATTRIBUTE}="self"]`)!==null||!keyboardDriving&&!isTextField(target))return;painted.set(target,{outline:target.style.outline,outlineOffset:target.style.outlineOffset});let region=target.closest(`[${FOCUS_RING_COLOR_ATTRIBUTE}]`),ring=focusRingStyle(region?.getAttribute(FOCUS_RING_COLOR_ATTRIBUTE)||color);target.style.outline=ring.outline,target.style.outlineOffset=`${ring.outlineOffset}px`,target.setAttribute(FOCUS_VISIBLE_ATTRIBUTE,"")},onFocusOut=event=>{let target=event.target;if(!(target instanceof HTMLElement))return;let before=painted.get(target);before!==void 0&&(painted.delete(target),target.style.outline=before.outline,target.style.outlineOffset=before.outlineOffset,target.removeAttribute(FOCUS_VISIBLE_ATTRIBUTE))};return node.addEventListener("focusin",onFocusIn),node.addEventListener("focusout",onFocusOut),()=>{node.removeEventListener("focusin",onFocusIn),node.removeEventListener("focusout",onFocusOut);for(let[element,before]of painted)element.style.outline=before.outline,element.style.outlineOffset=before.outlineOffset,element.removeAttribute(FOCUS_VISIBLE_ATTRIBUTE);painted.clear(),unbind()}}function chatVetVisitOptions(petRef2,vet){let options={entry:"chat",petRef:petRef2};return vet?.returnTo!==void 0&&(options.returnTo=vet.returnTo),vet?.usState!==void 0&&(options.usState=vet.usState),vet?.prefer!==void 0&&(options.prefer=vet.prefer),options}var SLOT=/* @__PURE__ */Symbol.for("@everfur/sdk/televet");function televetGlobal(){let realm=globalThis,existing=realm[SLOT];if(existing!==void 0)return existing;let created={presenter:null,snapshot:/* @__PURE__ */Object.freeze({request:null,serial:0,activeHost:null}),hosts:[],nextHost:1,listeners:/* @__PURE__ */new Set,dailyRegistered:false};return realm[SLOT]=created,created}function publish(next){let g=televetGlobal();g.snapshot=/* @__PURE__ */Object.freeze({...g.snapshot,...next});for(let listener of[...g.listeners])try{listener()}catch{}}function callTelevetPresenter(request){let present2=televetGlobal().presenter;if(present2===null)return"absent";try{return present2(request)===!1?"declined":"presented"}catch(cause){return console.warn("[everfur] Your registerEverfurTelevetFlow presenter threw; the in-app visit opened instead.",cause),"threw"}}function subscribeTelevetExperience(listener){let g=televetGlobal();return g.listeners.add(listener),()=>{g.listeners.delete(listener)}}function televetExperienceSnapshot(){return televetGlobal().snapshot}function hasTelevetHost(){return televetGlobal().hosts.length>0}function presentTelevetExperience(request){if(!hasTelevetHost())return false;let frozen=/* @__PURE__ */Object.freeze({...request});return publish({request:frozen,serial:televetGlobal().snapshot.serial+1}),true}function dismissTelevetExperience(){televetGlobal().snapshot.request!==null&&publish({request:null})}function claimTelevetHost(){let g=televetGlobal(),id=g.nextHost;return g.nextHost+=1,g.hosts=[...g.hosts,id],publish({activeHost:g.hosts[0]??null}),id}function releaseTelevetHost(id){let g=televetGlobal();g.hosts=g.hosts.filter(host2=>host2!==id);let activeHost=g.hosts[0]??null;publish(activeHost===null?{activeHost:activeHost,request:null}:{activeHost:activeHost})}function memoizeTelevetLoader(load){let pending2=null;return()=>{if(pending2!==null)return pending2;let started=load();return pending2=started,started.then(void 0,()=>{pending2===started&&(pending2=null)}),started}}function useTelevetExperienceHost(load){let[id,setId]=react.useState(null);react.useEffect(()=>{let claimed=claimTelevetHost();return setId(claimed),()=>{releaseTelevetHost(claimed)}},[]);let snapshot2=react.useSyncExternalStore(subscribeTelevetExperience,televetExperienceSnapshot,televetExperienceSnapshot),request=id!==null&&snapshot2.activeHost===id?snapshot2.request:null,[module,setModule]=react.useState(null),wanted=request!==null&&module===null;return react.useEffect(()=>{if(!wanted)return;let live=true;return load().then(loaded2=>{live&&setModule(()=>loaded2)},cause=>{live&&(console.warn("[everfur] The in-app vet visit could not load its screens.",cause),dismissTelevetExperience())}),()=>{live=false}},[wanted,load]),request===null||module===null?null:{module:module,request:request,serial:snapshot2.serial,dismiss:dismissTelevetExperience}}var loadExperience=memoizeTelevetLoader(()=>import("@everfur/sdk/web/televet/booking"));function EverfurTelevetHost({onAddToCalendar:onAddToCalendar,onPickMedia:onPickMedia,primaryVet:primaryVet,onFindEmergencyVet:onFindEmergencyVet}){let host2=useTelevetExperienceHost(loadExperience);if(host2===null)return null;let{EverfurTelevetDialog:EverfurTelevetDialog}=host2.module;/* @__PURE__ */
|
|
@@ -204,19 +204,20 @@ return jsxRuntime.jsx("li",{children:/* @__PURE__ */jsxRuntime.jsxs("button",{ty
|
|
|
204
204
|
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.meta,children:`${active?CHAT_COPY.activePrefix:""}${formatPetMeta(pet)}`})]}),active?/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"check",size:CHECK_SIZE,color:theme.color.brandInk,strokeWidth:2.5}):null]})},pet.petRef)})}),onAddPet!==null?/* @__PURE__ */jsxRuntime.jsxs("button",{type:"button","aria-label":CHAT_COPY.addAnotherPet,onClick:onAddPet,style:styles.addRow,children:[
|
|
205
205
|
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.addDisc,children:"+"}),
|
|
206
206
|
/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.addLabel,children:CHAT_COPY.addAnotherPet})]}):null,
|
|
207
|
-
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onClose,style:styles.close,children:CHAT_COPY.close})]}):null}function makeStyles3(theme){let c=theme.color,s=theme.space,r=theme.radius,t=theme.type;return{sheet:{boxSizing:"border-box",position:"fixed",top:"auto",right:0,bottom:0,left:0,margin:0,width:"100%",maxWidth:"100%",maxHeight:SHEET_MAX_HEIGHT,overflowY:"auto",padding:`${s.lg+4}px ${s.lg+4}px ${s.xxl}px`,border:0,borderRadius:`${SHEET_RADIUS}px ${SHEET_RADIUS}px 0 0`,backgroundColor:c.surface,color:c.text.primary,display:"flex",flexDirection:"column",gap:s.md+2,...sheetSlotCss(theme.slots.dialog)},title:{margin:0,...headingFaceCss(theme,"bold"),fontSize:t.tierSizes.heading.heading,lineHeight:`${Math.round(t.tierSizes.heading.heading*1.22)}px`,color:c.brandInk,...slotText(theme.slots.dialog)},list:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:s.sm},row:{boxSizing:"border-box",width:"100%",minHeight:MIN_TOUCH_TARGET2,display:"flex",flexDirection:"row",alignItems:"center",gap:s.md,margin:0,padding:s.md,borderRadius:r.md,border:`1px solid ${c.brandBorder}`,backgroundColor:c.surfaceCream,color:c.text.primary,textAlign:"left",cursor:"pointer",font:"inherit"},rowActive:{border:`1px solid ${c.brandInk}`,backgroundColor:c.brandSoft},ring:{boxSizing:"border-box",flexShrink:0,width:ROW_RING_SIZE,height:ROW_RING_SIZE,borderRadius:r.pill,border:`2px solid ${c.mark}`,display:"inline-flex",alignItems:"center",justifyContent:"center"},disc:{boxSizing:"border-box",width:ROW_AVATAR_SIZE,height:ROW_AVATAR_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"bold"),fontSize:Math.round(ROW_AVATAR_SIZE*.42),lineHeight:1,textTransform:"uppercase"},text:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},name:{...faceCss(theme,"bold"),fontSize:t.size.body+1,lineHeight:`${t.size.body+4}px`,color:c.text.primary,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},meta:{...faceCss(theme,"monoBold"),fontSize:t.tierSizes.compact.tiny,lineHeight:`${t.tierSizes.compact.tiny+2}px`,letterSpacing:.4,textTransform:"uppercase",color:c.text.muted},addRow:{boxSizing:"border-box",display:"flex",alignItems:"center",gap:s.sm,width:"100%",minHeight:MIN_TOUCH_TARGET2,padding:`${s.xs}px ${s.sm}px`,background:"none",border:"none",borderRadius:r.lg,cursor:"pointer",textAlign:"left"},addDisc:{boxSizing:"border-box",width:ROW_RING_SIZE,height:ROW_RING_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",border:`2px dashed ${c.brandBorder}`,backgroundColor:c.surfaceCream,color:c.brandInk,fontSize:t.size.subtitle,lineHeight:1},addLabel:{...faceCss(theme,"bold"),fontSize:t.size.body,color:c.text.primary,...slotText(theme.slots.dialog)},close:{boxSizing:"border-box",alignSelf:"center",minHeight:MIN_TOUCH_TARGET2,minWidth:MIN_TOUCH_TARGET2,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:`0 ${s.xl}px`,borderRadius:r.pill,border:`1px solid ${c.brandBorder}`,backgroundColor:c.surface,color:c.text.primary,cursor:"pointer",...faceCss(theme,"medium"),fontSize:t.tierSizes.control.body}}}var HEADER_AVATAR_SIZE=35,RING_WIDTH=1.75,AVATAR_INNER_SIZE=HEADER_AVATAR_SIZE-RING_WIDTH*2,ADD_BADGE_SIZE=12.4,MENU_BUTTON_SIZE=36,HISTORY_GLYPH_SIZE=20,UNREAD_DOT_SIZE=9,UNREAD_DOT_RING=1.5,MIN_TOUCH_TARGET3=44;function ChatHeader(props){let{pets:pets,activePet:activePet,unread:unread,onOpenHistory:onOpenHistory,historyTriggerRef:historyTriggerRef,onSelectPet:onSelectPet,onAddPet:onAddPet=null,vetEntry:vetEntry=null}=props,{rail:rail=false,historyOpen:historyOpen=false,onNewChat:onNewChat}=props,theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles4(theme),[theme]),glyphInk=theme.slots.header?.textColor??theme.color.text.primary,historyControls=/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.historyControls,children:[onNewChat!==void 0?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onNewChat,"aria-label":HISTORY_COPY.newChat,style:styles.menuButton,children:/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"squarePen",size:HISTORY_GLYPH_SIZE,color:glyphInk})}):null,
|
|
207
|
+
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onClose,style:styles.close,children:CHAT_COPY.close})]}):null}function makeStyles3(theme){let c=theme.color,s=theme.space,r=theme.radius,t=theme.type;return{sheet:{boxSizing:"border-box",position:"fixed",top:"auto",right:0,bottom:0,left:0,margin:0,width:"100%",maxWidth:"100%",maxHeight:SHEET_MAX_HEIGHT,overflowY:"auto",padding:`${s.lg+4}px ${s.lg+4}px ${s.xxl}px`,border:0,borderRadius:`${SHEET_RADIUS}px ${SHEET_RADIUS}px 0 0`,backgroundColor:c.surface,color:c.text.primary,display:"flex",flexDirection:"column",gap:s.md+2,...sheetSlotCss(theme.slots.dialog)},title:{margin:0,...headingFaceCss(theme,"bold"),fontSize:t.tierSizes.heading.heading,lineHeight:`${Math.round(t.tierSizes.heading.heading*1.22)}px`,color:c.brandInk,...slotText(theme.slots.dialog)},list:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:s.sm},row:{boxSizing:"border-box",width:"100%",minHeight:MIN_TOUCH_TARGET2,display:"flex",flexDirection:"row",alignItems:"center",gap:s.md,margin:0,padding:s.md,borderRadius:r.md,border:`1px solid ${c.brandBorder}`,backgroundColor:c.surfaceCream,color:c.text.primary,textAlign:"left",cursor:"pointer",font:"inherit"},rowActive:{border:`1px solid ${c.brandInk}`,backgroundColor:c.brandSoft},ring:{boxSizing:"border-box",flexShrink:0,width:ROW_RING_SIZE,height:ROW_RING_SIZE,borderRadius:r.pill,border:`2px solid ${c.mark}`,display:"inline-flex",alignItems:"center",justifyContent:"center"},disc:{boxSizing:"border-box",width:ROW_AVATAR_SIZE,height:ROW_AVATAR_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"bold"),fontSize:Math.round(ROW_AVATAR_SIZE*.42),lineHeight:1,textTransform:"uppercase"},text:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",gap:2},name:{...faceCss(theme,"bold"),fontSize:t.size.body+1,lineHeight:`${t.size.body+4}px`,color:c.text.primary,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},meta:{...faceCss(theme,"monoBold"),fontSize:t.tierSizes.compact.tiny,lineHeight:`${t.tierSizes.compact.tiny+2}px`,letterSpacing:.4,textTransform:"uppercase",color:c.text.muted},addRow:{boxSizing:"border-box",display:"flex",alignItems:"center",gap:s.sm,width:"100%",minHeight:MIN_TOUCH_TARGET2,padding:`${s.xs}px ${s.sm}px`,background:"none",border:"none",borderRadius:r.lg,cursor:"pointer",textAlign:"left"},addDisc:{boxSizing:"border-box",width:ROW_RING_SIZE,height:ROW_RING_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",border:`2px dashed ${c.brandBorder}`,backgroundColor:c.surfaceCream,color:c.brandInk,fontSize:t.size.subtitle,lineHeight:1},addLabel:{...faceCss(theme,"bold"),fontSize:t.size.body,color:c.text.primary,...slotText(theme.slots.dialog)},close:{boxSizing:"border-box",alignSelf:"center",minHeight:MIN_TOUCH_TARGET2,minWidth:MIN_TOUCH_TARGET2,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:`0 ${s.xl}px`,borderRadius:r.pill,border:`1px solid ${c.brandBorder}`,backgroundColor:c.surface,color:c.text.primary,cursor:"pointer",...faceCss(theme,"medium"),fontSize:t.tierSizes.control.body}}}var HEADER_AVATAR_SIZE=35,RING_WIDTH=1.75,AVATAR_INNER_SIZE=HEADER_AVATAR_SIZE-RING_WIDTH*2,ADD_BADGE_SIZE=12.4,MENU_BUTTON_SIZE=36,HISTORY_GLYPH_SIZE=20,UNREAD_DOT_SIZE=9,UNREAD_DOT_RING=1.5,MIN_TOUCH_TARGET3=44;function ChatHeader(props){let{pets:pets,activePet:activePet,unread:unread,onOpenHistory:onOpenHistory,historyTriggerRef:historyTriggerRef,onSelectPet:onSelectPet,onAddPet:onAddPet=null,vetEntry:vetEntry=null}=props,{rail:rail=false,historyOpen:historyOpen=false,onNewChat:onNewChat,textingEntry:textingEntry=null}=props,theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles4(theme),[theme]),glyphInk=theme.slots.header?.textColor??theme.color.text.primary,historyControls=/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.historyControls,children:[onNewChat!==void 0?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onNewChat,"aria-label":HISTORY_COPY.newChat,style:styles.menuButton,children:/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"squarePen",size:HISTORY_GLYPH_SIZE,color:glyphInk})}):null,
|
|
208
208
|
/* @__PURE__ */jsxRuntime.jsx("button",{ref:historyTriggerRef,type:"button",onClick:onOpenHistory,"aria-label":historyControlLabel(rail,historyOpen,unread),"aria-expanded":historyOpen,style:styles.menuButton,children:/* @__PURE__ */jsxRuntime.jsxs("span",{"aria-hidden":"true",style:styles.menuDisc,children:[
|
|
209
209
|
/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"history",size:HISTORY_GLYPH_SIZE,color:glyphInk}),unread?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.unreadDot}):null]})})]});/* @__PURE__ */
|
|
210
210
|
return jsxRuntime.jsxs("header",{style:styles.bar,children:[
|
|
211
211
|
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.leading,children:rail?null:historyControls}),
|
|
212
212
|
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.centre,children:/* @__PURE__ */jsxRuntime.jsx(BrandLogo,{logoUrl:theme.meta.logoUrl,name:theme.meta.displayName,styles:styles})}),
|
|
213
|
-
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.trailing,children:[
|
|
214
|
-
/* @__PURE__ */jsxRuntime.
|
|
213
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.trailing,children:[textingEntry,
|
|
214
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.trailingGroup,children:[vetEntry!==null?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:vetEntry,style:styles.vetEntry,children:TELEVET_COPY.visitButton}):null,
|
|
215
|
+
/* @__PURE__ */jsxRuntime.jsx(PetAvatarSlot,{pets:pets,activePet:activePet,styles:styles,onSelectPet:onSelectPet,onAddPet:onAddPet}),rail?historyControls:null]})]})]})}function historyControlLabel(rail,open,unread){let base2=rail?open?CHAT_COPY.hideChatsWeb:CHAT_COPY.showChatsWeb:CHAT_COPY.openHistoryWeb;return unread?`${base2}${CHAT_COPY.newReplySuffix}`:base2}function PetAvatarSlot({pets:pets,activePet:activePet,styles:styles,onSelectPet:onSelectPet,onAddPet:onAddPet}){let[open,setOpen]=react.useState(false),triggerRef=react.useRef(null),name=activePet?.name?.trim()||CHAT_COPY.yourPet;return pets.length<2&&onAddPet===null||activePet===null?/* @__PURE__ */jsxRuntime.jsx("div",{role:"img","aria-label":name,style:styles.avatarSlot,children:/* @__PURE__ */jsxRuntime.jsx(AvatarRing,{pet:activePet,styles:styles})}):/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.avatarSlot,children:[
|
|
215
216
|
/* @__PURE__ */jsxRuntime.jsxs("button",{ref:triggerRef,type:"button","aria-haspopup":"dialog","aria-expanded":open,"aria-label":fillCopy(CHAT_COPY.switchActivePet,{name:name}),onClick:()=>setOpen(true),style:styles.avatarButton,children:[
|
|
216
217
|
/* @__PURE__ */jsxRuntime.jsx(AvatarRing,{pet:activePet,styles:styles}),
|
|
217
218
|
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:styles.addBadge,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.addBadgeGlyph,children:"+"})})]}),
|
|
218
219
|
/* @__PURE__ */jsxRuntime.jsx(PetSwitcherDialog,{open:open,pets:pets,activePetRef:activePet.petRef,returnFocusTo:triggerRef,onClose:()=>setOpen(false),onSelect:petRef2=>{setOpen(false),onSelectPet(petRef2)},onAddPet:onAddPet===null?null:()=>{setOpen(false),onAddPet()}})]})}function AvatarRing({pet:pet,styles:styles}){let theme=useEverfurTheme(),palette=pet===null?null:petDiscPaint(pet,isEverfurLightLook(theme),{fill:theme.color.highlight,ink:theme.color.onHighlight});/* @__PURE__ */
|
|
219
|
-
return jsxRuntime.jsx("span",{style:styles.ring,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.disc,...palette===null?styles.discEmpty:{backgroundColor:palette.background,color:palette.foreground}},children:palette===null?getInitial(null):palette.initial})})}function makeStyles4(theme){let c=theme.color,s=theme.space,r=theme.radius,t=theme.type,header=theme.slots.header;return{vetEntry:{boxSizing:"border-box",minHeight:44,padding:`0 ${s.md}px`,borderRadius:r.pill,backgroundColor:c.surfaceCream,border:`1px solid ${c.controlEdge}`,color:c.brandInk,cursor:"pointer",whiteSpace:"nowrap",...faceCss(theme,"bold"),fontSize:t.size.caption},bar:{boxSizing:"border-box",display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:s.sm,padding:`${s.sm+2}px ${s.lg}px`,backgroundColor:c.surfaceCream,...slotCss(header)},menuButton:{boxSizing:"border-box",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:0,border:"1px solid transparent",borderRadius:r.pill,background:"transparent",cursor:"pointer",color:header?.textColor??c.text.primary},menuDisc:{position:"relative",boxSizing:"border-box",width:MENU_BUTTON_SIZE,height:MENU_BUTTON_SIZE,borderRadius:r.pill,display:"inline-flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4},historyControls:{display:"flex",flexDirection:"row",alignItems:"center",flexShrink:0},unreadDot:{position:"absolute",top:6,right:6,boxSizing:"border-box",width:UNREAD_DOT_SIZE,height:UNREAD_DOT_SIZE,borderRadius:r.pill,backgroundColor:c.danger,border:`${UNREAD_DOT_RING}px solid ${header?.backgroundColor??c.surfaceCream}`},leading:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"flex-start",gap:s.sm,flex:"1 1 0"},trailing:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"flex-end",gap:s.sm,flex:"1 1 0"},centre:{flex:"0 1 auto",minWidth:0,display:"flex",alignItems:"center",justifyContent:"center"},logo:{...LOGO_STYLE,minWidth:0,flexShrink:1},avatarSlot:{position:"relative",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center"},avatarButton:{position:"relative",boxSizing:"border-box",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:0,border:0,background:"transparent",cursor:"pointer"},ring:{boxSizing:"border-box",width:HEADER_AVATAR_SIZE,height:HEADER_AVATAR_SIZE,borderRadius:r.pill,border:`${RING_WIDTH}px solid ${c.mark}`,display:"inline-flex",alignItems:"center",justifyContent:"center"},disc:{boxSizing:"border-box",width:AVATAR_INNER_SIZE,height:AVATAR_INNER_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"bold"),fontSize:Math.round(AVATAR_INNER_SIZE*.42),lineHeight:1,textTransform:"uppercase"},discEmpty:{backgroundColor:c.surfaceSubtle,color:c.text.muted},addBadge:{position:"absolute",bottom:(MIN_TOUCH_TARGET3-HEADER_AVATAR_SIZE)/2,right:(MIN_TOUCH_TARGET3-HEADER_AVATAR_SIZE)/2,boxSizing:"border-box",width:ADD_BADGE_SIZE,height:ADD_BADGE_SIZE,borderRadius:r.pill,border:`0.5px solid ${c.mark}`,backgroundColor:c.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},addBadgeGlyph:{...faceCss(theme,"bold"),fontSize:t.tierSizes.badge.small,lineHeight:1,color:c.brandInk}}}var STATIC=/* @__PURE__ */Object.freeze({kind:"static"}),CitationLinkContext=react.createContext(STATIC);function useCitationLinks(){return react.useContext(CitationLinkContext)}function useCitationLinkMode(onOpenUrl){return react.useMemo(()=>onOpenUrl===void 0?STATIC:/* @__PURE__ */Object.freeze({kind:"host",open:url=>{callHost(onOpenUrl,url,"citation")}}),[onOpenUrl])}function CitationLinksScope({onOpenUrl:onOpenUrl,children:children}){let mode=useCitationLinkMode(onOpenUrl);return react.createElement(CitationLinkContext.Provider,{value:mode},children)}var DEFAULT_ROOT_HEADING_LEVEL=2;function headingLevel(value){return typeof value!="number"||!Number.isInteger(value)?DEFAULT_ROOT_HEADING_LEVEL:value<1?1:value>6?6:value}function nextHeadingLevel(level){return level>=6?6:level+1}function headingTag(level){return`h${String(level)}`}var NESTED_HEADING_LEVEL_DEFAULT=nextHeadingLevel(DEFAULT_ROOT_HEADING_LEVEL);react.createContext(NESTED_HEADING_LEVEL_DEFAULT);var HISTORY_PANEL_WIDTH=320,MIN_THREAD_WIDTH=480,RAIL_MIN_CONTAINER_WIDTH=HISTORY_PANEL_WIDTH+MIN_THREAD_WIDTH,DESKTOP_MIN_CONTAINER_WIDTH=1024,CHAT_COLUMN_MAX_WIDTH=768,ASSISTANT_MEASURE="72ch",NARROW_LAYOUT=/* @__PURE__ */Object.freeze({rail:false,desktop:false}),RAIL_LAYOUT=/* @__PURE__ */Object.freeze({rail:true,desktop:false}),DESKTOP_LAYOUT=/* @__PURE__ */Object.freeze({rail:true,desktop:true});function layoutFor(width){return width===null||width<RAIL_MIN_CONTAINER_WIDTH?NARROW_LAYOUT:width>=DESKTOP_MIN_CONTAINER_WIDTH?DESKTOP_LAYOUT:RAIL_LAYOUT}var ChatLayoutContext=react.createContext({layout:NARROW_LAYOUT,report:()=>{},headingLevel:headingLevel(void 0)});function useChatLayout(){return react.useContext(ChatLayoutContext).layout}function useChatHeadingLevel(){return react.useContext(ChatLayoutContext).headingLevel}function ChatLayoutScope({children:children,headingLevel:hostLevel}){let[layout,setLayout]=react.useState(NARROW_LAYOUT),level=headingLevel(hostLevel),value=react.useMemo(()=>({layout:layout,report:setLayout,headingLevel:level}),[layout,level]);return react.createElement(ChatLayoutContext.Provider,{value:value},children)}function useMeasuredLayout(root){let{report:report}=react.useContext(ChatLayoutContext);react.useEffect(()=>{let node=root.current;if(node===null||typeof ResizeObserver>"u")return;let read=()=>{let width=node.getBoundingClientRect().width;report(layoutFor(width>0?Math.round(width):null))};read();let observer=new ResizeObserver(read);return observer.observe(node),()=>observer.disconnect()},[root,report])}var CHAT_EASING=/* @__PURE__ */Object.freeze({standard:EASING_CURVES.standard,emphasized:EASING_CURVES.emphasized,exit:EASING_CURVES.exit,outQuad:/* @__PURE__ */Object.freeze([.25,.46,.45,.94]),out:/* @__PURE__ */Object.freeze([.23,1,.32,1])}),cubicBezier=cssCubicBezier,CHAT_MOTION=/* @__PURE__ */Object.freeze({layoutMs:220,messageInMs:200,bannerInMs:220,bannerOutMs:160,iconInMs:180,iconOutMs:120,followUpInMs:180,followUpStaggerMs:70,citationsInMs:220,citationsRisePx:6,drawerMs:220,pressScale:.97,pressMs:140,revealTickMs:24,revealDivisor:12,dotsCycleMs:520,dotsMinOpacity:.44,dotsLiftPx:3.5,dotsStagger:/* @__PURE__ */Object.freeze([0,.18,.36]),copiedMs:1500,uploadFlashMs:600,bubbleInMs:280,bubbleFromScale:.94,bubbleRisePx:6,promptRisePx:8,reduced:false}),CHAT_MOTION_REDUCED=/* @__PURE__ */Object.freeze({...CHAT_MOTION,layoutMs:0,messageInMs:0,bannerInMs:0,bannerOutMs:0,iconInMs:0,iconOutMs:0,followUpInMs:0,followUpStaggerMs:0,citationsInMs:0,citationsRisePx:0,drawerMs:0,pressScale:1,pressMs:0,revealTickMs:0,dotsCycleMs:0,dotsMinOpacity:1,dotsLiftPx:0,bubbleInMs:0,bubbleFromScale:1,bubbleRisePx:0,promptRisePx:0,reduced:true});function chatMotion(theme){return theme.motion.reducedMotion?CHAT_MOTION_REDUCED:CHAT_MOTION}function followUpDelayMs(motion,index){return Math.max(0,index)*motion.followUpStaggerMs}function nextRevealLength(motion,visible,total){if(motion.reduced||visible>=total)return total;let step=Math.max(1,Math.ceil((total-visible)/motion.revealDivisor));return Math.min(total,visible+step)}function useChatMotion(){let theme=useEverfurTheme();return react.useMemo(()=>chatMotion(theme),[theme])}function canAnimate(node){return node!==null&&typeof node.animate=="function"}function animateEnter(node,motion){if(!canAnimate(node)||motion.durationMs<=0)return null;let translate=[motion.fromTranslateX!==void 0?`translateX(${motion.fromTranslateX})`:"",motion.fromTranslateY!==void 0&&motion.fromTranslateY!==0?`translateY(${motion.fromTranslateY}px)`:""].filter(part=>part.length>0).join(" "),from={...motion.fromOpacity!==void 0?{opacity:motion.fromOpacity}:{},...translate.length>0?{transform:translate}:{}},to={...motion.fromOpacity!==void 0?{opacity:1}:{},...translate.length>0?{transform:"none"}:{}};try{return node.animate([from,to],{duration:motion.durationMs,delay:motion.delayMs??0,easing:cubicBezier(CHAT_EASING.standard),fill:"backwards"})}catch{return null}}function popIn(node,motion){if(!canAnimate(node)||motion.bubbleInMs<=0)return null;try{return node.animate([{opacity:0,transform:`translateY(${motion.bubbleRisePx}px) scale(${motion.bubbleFromScale})`},{opacity:1,transform:"none"}],{duration:motion.bubbleInMs,easing:cubicBezier(CHAT_EASING.out),fill:"backwards"})}catch{return null}}function animateExit(node,durationMs,toTranslateX){if(!canAnimate(node)||durationMs<=0)return Promise.resolve();try{let animation=node.animate([{opacity:1,transform:"none"},{opacity:0,...toTranslateX!==void 0?{transform:`translateX(${toTranslateX})`}:{}}],{duration:durationMs,easing:cubicBezier(CHAT_EASING.exit),fill:"forwards"});return new Promise(resolve=>{animation.onfinish=()=>resolve(),animation.oncancel=()=>resolve()})}catch{return Promise.resolve()}}function usePresence(show,exitMs){let[present2,setPresent]=react.useState(show),exiting=present2&&!show;return react.useEffect(()=>{if(show){setPresent(true);return}if(!present2)return;if(exitMs<=0){setPresent(false);return}let handle=setTimeout(()=>setPresent(false),exitMs);return()=>clearTimeout(handle)},[show,exitMs,present2]),{present:present2,exiting:exiting}}function useRevealedText(text3,active,motion){let[visible,setVisible]=react.useState(active&&!motion.reduced?0:text3.length),latest=react.useRef({text:text3,active:active});return latest.current={text:text3,active:active},react.useEffect(()=>{if(!active||motion.reduced||motion.revealTickMs<=0){setVisible(latest.current.text.length);return}let handle=setInterval(()=>{setVisible(current=>nextRevealLength(motion,current,latest.current.text.length))},motion.revealTickMs);return()=>clearInterval(handle)},[active,motion]),active&&!motion.reduced?text3.slice(0,Math.min(visible,text3.length)):text3}var MIN_TOUCH_TARGET4=44,DRAWER_MAX_WIDTH="85%",DRAWER_SHADOW={y:16,blur:48,alpha:.18},SCRIM_ALPHA=.32,UNREAD_DOT_SIZE2=8,ACTIVE_ROW_ALPHA=.22,SEARCH_EDGE_WIDTH=1.5,LOAD_MORE_MARGIN="50%";function HistoryDrawer({chat:chat,history:history,mode:mode,returnFocusTo:returnFocusTo}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles5(theme,mode==="dialog"),[theme,mode]),motion=useChatMotion(),dialog=useModalDialog(mode==="dialog"&&history.open,history.close,returnFocusTo),panelRef=react.useRef(null),open=history.open,slideMs=motion.drawerMs;if(react.useEffect(()=>{if(!open||mode!=="dialog")return;let animation=animateEnter(panelRef.current,{durationMs:slideMs,fromOpacity:0,fromTranslateX:"-100%"});return()=>animation?.cancel()},[open,mode,slideMs]),!open)return null;let body=/* @__PURE__ */jsxRuntime.jsx(PanelBody,{chat:chat,history:history,styles:styles,theme:theme,rail:mode==="rail"});return mode==="rail"?/* @__PURE__ */jsxRuntime.jsx("aside",{ref:node=>{panelRef.current=node},"aria-label":HISTORY_COPY.heading,style:styles.rail,children:body}):/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.scrim,onClick:history.close,children:/* @__PURE__ */jsxRuntime.jsx("div",{ref:node=>{dialog.dialogRef.current=node,panelRef.current=node},role:"dialog","aria-modal":"true","aria-label":HISTORY_COPY.heading,tabIndex:-1,onKeyDown:dialog.onKeyDown,onClick:event=>event.stopPropagation(),style:styles.overlay,children:body})})}function PanelBody({chat:chat,history:history,styles:styles,theme:theme,rail:rail}){let{rows:rows,filtered:filtered,loading:loading,loadingMore:loadingMore,error:error,cursor:cursor2,emptyKind:emptyKind,searching:searching,query:query,setQuery:setQuery}=history,showRows=!loading&&error===null,[searchFocused,setSearchFocused]=react.useState(false),closeInk=(rail?void 0:theme.slots.dialog?.textColor)??theme.color.brandInk,searchInk=theme.slots.input?.textColor??theme.color.text.muted;/* @__PURE__ */
|
|
220
|
+
return jsxRuntime.jsx("span",{style:styles.ring,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.disc,...palette===null?styles.discEmpty:{backgroundColor:palette.background,color:palette.foreground}},children:palette===null?getInitial(null):palette.initial})})}function headerEntryPillCss(theme){let c=theme.color;return{boxSizing:"border-box",minHeight:44,padding:`0 ${theme.space.md}px`,borderRadius:theme.radius.pill,backgroundColor:c.surfaceCream,border:`1px solid ${c.controlEdge}`,color:c.brandInk,cursor:"pointer",whiteSpace:"nowrap",...faceCss(theme,"bold"),fontSize:theme.type.size.caption}}function makeStyles4(theme){let c=theme.color,s=theme.space,r=theme.radius,t=theme.type,header=theme.slots.header;return{vetEntry:headerEntryPillCss(theme),trailingGroup:{display:"flex",flexDirection:"row",alignItems:"center",gap:s.sm,flexShrink:0},bar:{boxSizing:"border-box",display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:s.sm,padding:`${s.sm+2}px ${s.lg}px`,backgroundColor:c.surfaceCream,...slotCss(header)},menuButton:{boxSizing:"border-box",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:0,border:"1px solid transparent",borderRadius:r.pill,background:"transparent",cursor:"pointer",color:header?.textColor??c.text.primary},menuDisc:{position:"relative",boxSizing:"border-box",width:MENU_BUTTON_SIZE,height:MENU_BUTTON_SIZE,borderRadius:r.pill,display:"inline-flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:4},historyControls:{display:"flex",flexDirection:"row",alignItems:"center",flexShrink:0},unreadDot:{position:"absolute",top:6,right:6,boxSizing:"border-box",width:UNREAD_DOT_SIZE,height:UNREAD_DOT_SIZE,borderRadius:r.pill,backgroundColor:c.danger,border:`${UNREAD_DOT_RING}px solid ${header?.backgroundColor??c.surfaceCream}`},leading:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"flex-start",gap:s.sm,flex:"1 1 0"},trailing:{display:"flex",flexDirection:"row",flexWrap:"wrap-reverse",alignItems:"center",justifyContent:"flex-end",gap:s.sm,flex:"1 1 0"},centre:{flex:"0 1 auto",minWidth:0,display:"flex",alignItems:"center",justifyContent:"center"},logo:{...LOGO_STYLE,minWidth:0,flexShrink:1},avatarSlot:{position:"relative",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center"},avatarButton:{position:"relative",boxSizing:"border-box",minWidth:MIN_TOUCH_TARGET3,minHeight:MIN_TOUCH_TARGET3,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,padding:0,border:0,background:"transparent",cursor:"pointer"},ring:{boxSizing:"border-box",width:HEADER_AVATAR_SIZE,height:HEADER_AVATAR_SIZE,borderRadius:r.pill,border:`${RING_WIDTH}px solid ${c.mark}`,display:"inline-flex",alignItems:"center",justifyContent:"center"},disc:{boxSizing:"border-box",width:AVATAR_INNER_SIZE,height:AVATAR_INNER_SIZE,borderRadius:r.pill,display:"inline-flex",alignItems:"center",justifyContent:"center",...faceCss(theme,"bold"),fontSize:Math.round(AVATAR_INNER_SIZE*.42),lineHeight:1,textTransform:"uppercase"},discEmpty:{backgroundColor:c.surfaceSubtle,color:c.text.muted},addBadge:{position:"absolute",bottom:(MIN_TOUCH_TARGET3-HEADER_AVATAR_SIZE)/2,right:(MIN_TOUCH_TARGET3-HEADER_AVATAR_SIZE)/2,boxSizing:"border-box",width:ADD_BADGE_SIZE,height:ADD_BADGE_SIZE,borderRadius:r.pill,border:`0.5px solid ${c.mark}`,backgroundColor:c.surface,display:"inline-flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},addBadgeGlyph:{...faceCss(theme,"bold"),fontSize:t.tierSizes.badge.small,lineHeight:1,color:c.brandInk}}}var STATIC=/* @__PURE__ */Object.freeze({kind:"static"}),CitationLinkContext=react.createContext(STATIC);function useCitationLinks(){return react.useContext(CitationLinkContext)}function useCitationLinkMode(onOpenUrl){return react.useMemo(()=>onOpenUrl===void 0?STATIC:/* @__PURE__ */Object.freeze({kind:"host",open:url=>{callHost(onOpenUrl,url,"citation")}}),[onOpenUrl])}function CitationLinksScope({onOpenUrl:onOpenUrl,children:children}){let mode=useCitationLinkMode(onOpenUrl);return react.createElement(CitationLinkContext.Provider,{value:mode},children)}var DEFAULT_ROOT_HEADING_LEVEL=2;function headingLevel(value){return typeof value!="number"||!Number.isInteger(value)?DEFAULT_ROOT_HEADING_LEVEL:value<1?1:value>6?6:value}function nextHeadingLevel(level){return level>=6?6:level+1}function headingTag(level){return`h${String(level)}`}var NESTED_HEADING_LEVEL_DEFAULT=nextHeadingLevel(DEFAULT_ROOT_HEADING_LEVEL);react.createContext(NESTED_HEADING_LEVEL_DEFAULT);var HISTORY_PANEL_WIDTH=320,MIN_THREAD_WIDTH=480,RAIL_MIN_CONTAINER_WIDTH=HISTORY_PANEL_WIDTH+MIN_THREAD_WIDTH,DESKTOP_MIN_CONTAINER_WIDTH=1024,CHAT_COLUMN_MAX_WIDTH=768,ASSISTANT_MEASURE="72ch",NARROW_LAYOUT=/* @__PURE__ */Object.freeze({rail:false,desktop:false}),RAIL_LAYOUT=/* @__PURE__ */Object.freeze({rail:true,desktop:false}),DESKTOP_LAYOUT=/* @__PURE__ */Object.freeze({rail:true,desktop:true});function layoutFor(width){return width===null||width<RAIL_MIN_CONTAINER_WIDTH?NARROW_LAYOUT:width>=DESKTOP_MIN_CONTAINER_WIDTH?DESKTOP_LAYOUT:RAIL_LAYOUT}var ChatLayoutContext=react.createContext({layout:NARROW_LAYOUT,report:()=>{},headingLevel:headingLevel(void 0)});function useChatLayout(){return react.useContext(ChatLayoutContext).layout}function useChatHeadingLevel(){return react.useContext(ChatLayoutContext).headingLevel}function ChatLayoutScope({children:children,headingLevel:hostLevel}){let[layout,setLayout]=react.useState(NARROW_LAYOUT),level=headingLevel(hostLevel),value=react.useMemo(()=>({layout:layout,report:setLayout,headingLevel:level}),[layout,level]);return react.createElement(ChatLayoutContext.Provider,{value:value},children)}function useMeasuredLayout(root){let{report:report}=react.useContext(ChatLayoutContext);react.useEffect(()=>{let node=root.current;if(node===null||typeof ResizeObserver>"u")return;let read=()=>{let width=node.getBoundingClientRect().width;report(layoutFor(width>0?Math.round(width):null))};read();let observer=new ResizeObserver(read);return observer.observe(node),()=>observer.disconnect()},[root,report])}var CHAT_EASING=/* @__PURE__ */Object.freeze({standard:EASING_CURVES.standard,emphasized:EASING_CURVES.emphasized,exit:EASING_CURVES.exit,outQuad:/* @__PURE__ */Object.freeze([.25,.46,.45,.94]),out:/* @__PURE__ */Object.freeze([.23,1,.32,1])}),cubicBezier=cssCubicBezier,CHAT_MOTION=/* @__PURE__ */Object.freeze({layoutMs:220,messageInMs:200,bannerInMs:220,bannerOutMs:160,iconInMs:180,iconOutMs:120,followUpInMs:180,followUpStaggerMs:70,citationsInMs:220,citationsRisePx:6,drawerMs:220,pressScale:.97,pressMs:140,revealTickMs:24,revealDivisor:12,dotsCycleMs:520,dotsMinOpacity:.44,dotsLiftPx:3.5,dotsStagger:/* @__PURE__ */Object.freeze([0,.18,.36]),copiedMs:1500,uploadFlashMs:600,bubbleInMs:280,bubbleFromScale:.94,bubbleRisePx:6,promptRisePx:8,reduced:false}),CHAT_MOTION_REDUCED=/* @__PURE__ */Object.freeze({...CHAT_MOTION,layoutMs:0,messageInMs:0,bannerInMs:0,bannerOutMs:0,iconInMs:0,iconOutMs:0,followUpInMs:0,followUpStaggerMs:0,citationsInMs:0,citationsRisePx:0,drawerMs:0,pressScale:1,pressMs:0,revealTickMs:0,dotsCycleMs:0,dotsMinOpacity:1,dotsLiftPx:0,bubbleInMs:0,bubbleFromScale:1,bubbleRisePx:0,promptRisePx:0,reduced:true});function chatMotion(theme){return theme.motion.reducedMotion?CHAT_MOTION_REDUCED:CHAT_MOTION}function followUpDelayMs(motion,index){return Math.max(0,index)*motion.followUpStaggerMs}function nextRevealLength(motion,visible,total){if(motion.reduced||visible>=total)return total;let step=Math.max(1,Math.ceil((total-visible)/motion.revealDivisor));return Math.min(total,visible+step)}function useChatMotion(){let theme=useEverfurTheme();return react.useMemo(()=>chatMotion(theme),[theme])}function canAnimate(node){return node!==null&&typeof node.animate=="function"}function animateEnter(node,motion){if(!canAnimate(node)||motion.durationMs<=0)return null;let translate=[motion.fromTranslateX!==void 0?`translateX(${motion.fromTranslateX})`:"",motion.fromTranslateY!==void 0&&motion.fromTranslateY!==0?`translateY(${motion.fromTranslateY}px)`:""].filter(part=>part.length>0).join(" "),from={...motion.fromOpacity!==void 0?{opacity:motion.fromOpacity}:{},...translate.length>0?{transform:translate}:{}},to={...motion.fromOpacity!==void 0?{opacity:1}:{},...translate.length>0?{transform:"none"}:{}};try{return node.animate([from,to],{duration:motion.durationMs,delay:motion.delayMs??0,easing:cubicBezier(CHAT_EASING.standard),fill:"backwards"})}catch{return null}}function popIn(node,motion){if(!canAnimate(node)||motion.bubbleInMs<=0)return null;try{return node.animate([{opacity:0,transform:`translateY(${motion.bubbleRisePx}px) scale(${motion.bubbleFromScale})`},{opacity:1,transform:"none"}],{duration:motion.bubbleInMs,easing:cubicBezier(CHAT_EASING.out),fill:"backwards"})}catch{return null}}function animateExit(node,durationMs,toTranslateX){if(!canAnimate(node)||durationMs<=0)return Promise.resolve();try{let animation=node.animate([{opacity:1,transform:"none"},{opacity:0,...toTranslateX!==void 0?{transform:`translateX(${toTranslateX})`}:{}}],{duration:durationMs,easing:cubicBezier(CHAT_EASING.exit),fill:"forwards"});return new Promise(resolve=>{animation.onfinish=()=>resolve(),animation.oncancel=()=>resolve()})}catch{return Promise.resolve()}}function usePresence(show,exitMs){let[present2,setPresent]=react.useState(show),exiting=present2&&!show;return react.useEffect(()=>{if(show){setPresent(true);return}if(!present2)return;if(exitMs<=0){setPresent(false);return}let handle=setTimeout(()=>setPresent(false),exitMs);return()=>clearTimeout(handle)},[show,exitMs,present2]),{present:present2,exiting:exiting}}function useRevealedText(text3,active,motion){let[visible,setVisible]=react.useState(active&&!motion.reduced?0:text3.length),latest=react.useRef({text:text3,active:active});return latest.current={text:text3,active:active},react.useEffect(()=>{if(!active||motion.reduced||motion.revealTickMs<=0){setVisible(latest.current.text.length);return}let handle=setInterval(()=>{setVisible(current=>nextRevealLength(motion,current,latest.current.text.length))},motion.revealTickMs);return()=>clearInterval(handle)},[active,motion]),active&&!motion.reduced?text3.slice(0,Math.min(visible,text3.length)):text3}var MIN_TOUCH_TARGET4=44,DRAWER_MAX_WIDTH="85%",DRAWER_SHADOW={y:16,blur:48,alpha:.18},SCRIM_ALPHA=.32,UNREAD_DOT_SIZE2=8,ACTIVE_ROW_ALPHA=.22,SEARCH_EDGE_WIDTH=1.5,LOAD_MORE_MARGIN="50%";function HistoryDrawer({chat:chat,history:history,mode:mode,returnFocusTo:returnFocusTo}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles5(theme,mode==="dialog"),[theme,mode]),motion=useChatMotion(),dialog=useModalDialog(mode==="dialog"&&history.open,history.close,returnFocusTo),panelRef=react.useRef(null),open=history.open,slideMs=motion.drawerMs;if(react.useEffect(()=>{if(!open||mode!=="dialog")return;let animation=animateEnter(panelRef.current,{durationMs:slideMs,fromOpacity:0,fromTranslateX:"-100%"});return()=>animation?.cancel()},[open,mode,slideMs]),!open)return null;let body=/* @__PURE__ */jsxRuntime.jsx(PanelBody,{chat:chat,history:history,styles:styles,theme:theme,rail:mode==="rail"});return mode==="rail"?/* @__PURE__ */jsxRuntime.jsx("aside",{ref:node=>{panelRef.current=node},"aria-label":HISTORY_COPY.heading,style:styles.rail,children:body}):/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.scrim,onClick:history.close,children:/* @__PURE__ */jsxRuntime.jsx("div",{ref:node=>{dialog.dialogRef.current=node,panelRef.current=node},role:"dialog","aria-modal":"true","aria-label":HISTORY_COPY.heading,tabIndex:-1,onKeyDown:dialog.onKeyDown,onClick:event=>event.stopPropagation(),style:styles.overlay,children:body})})}function PanelBody({chat:chat,history:history,styles:styles,theme:theme,rail:rail}){let{rows:rows,filtered:filtered,loading:loading,loadingMore:loadingMore,error:error,cursor:cursor2,emptyKind:emptyKind,searching:searching,query:query,setQuery:setQuery}=history,showRows=!loading&&error===null,[searchFocused,setSearchFocused]=react.useState(false),closeInk=(rail?void 0:theme.slots.dialog?.textColor)??theme.color.brandInk,searchInk=theme.slots.input?.textColor??theme.color.text.muted;/* @__PURE__ */
|
|
220
221
|
return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[
|
|
221
222
|
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.head,children:[
|
|
222
223
|
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.heading,children:HISTORY_COPY.heading}),
|
|
@@ -292,8 +293,8 @@ return jsxRuntime.jsxs("button",{type:"button","aria-pressed":selected,disabled:
|
|
|
292
293
|
/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onClose,"aria-label":CHAT_COPY.feedbackSkipA11y,disabled:pending2,style:styles.skip,children:CHAT_COPY.feedbackSkip})]})]})}function makeStyles8(theme){let c=theme.color,s=theme.space,r=theme.radius,t=theme.type,bodyLineHeight=`${Math.round(t.size.body*t.lineHeight.normal)}px`,heading=t.tierSizes.heading.heading,controlSize=t.tierSizes.control.body,dialogText=slotText(theme.slots.dialog),control={boxSizing:"border-box",minHeight:MIN_TOUCH_TARGET8,minWidth:MIN_TOUCH_TARGET8,display:"inline-flex",alignItems:"center",justifyContent:"center",margin:0,cursor:"pointer",...faceCss(theme,"medium"),fontSize:t.size.body,lineHeight:bodyLineHeight};return{sheet:{boxSizing:"border-box",position:"fixed",top:"auto",right:0,bottom:0,left:0,margin:0,width:"100%",maxWidth:"100%",maxHeight:"80vh",overflowY:"auto",padding:`${s.lg+4}px ${s.lg+4}px ${s.xxl}px`,border:0,borderRadius:`${r.lg}px ${r.lg}px 0 0`,backgroundColor:c.surface,color:c.text.primary,display:"flex",flexDirection:"column",gap:s.md,...sheetSlotCss(theme.slots.dialog)},title:{margin:0,...headingFaceCss(theme,"bold"),fontSize:heading,lineHeight:`${Math.round(heading*1.22)}px`,color:c.text.primary,...dialogText},subtitle:{margin:0,...faceCss(theme,"regular"),fontSize:t.size.body,lineHeight:bodyLineHeight,color:c.text.muted,...dialogText},options:{display:"flex",flexDirection:"column",gap:s.sm},option:{...control,width:"100%",justifyContent:"space-between",gap:s.md,padding:`${s.sm}px ${s.md}px`,borderRadius:r.md,border:`1px solid ${c.controlEdge}`,backgroundColor:c.surfaceCream,color:c.text.primary,textAlign:"left",...slotRadius(theme.slots.chip)},optionSelected:{border:`1px solid ${c.brandInk}`,backgroundColor:c.brandSoft},optionRest:slotCss(theme.slots.chip,1),optionLabel:{flex:"1 1 auto",minWidth:0},radio:{boxSizing:"border-box",flexShrink:0,width:RADIO_SIZE,height:RADIO_SIZE,borderRadius:r.pill,border:`1.5px solid ${c.brandBorderStrong}`,backgroundColor:c.surface,display:"inline-flex",alignItems:"center",justifyContent:"center"},radioSelected:{border:`1.5px solid ${c.brandInk}`,backgroundColor:c.brandInk},notes:{boxSizing:"border-box",width:"100%",minHeight:MIN_TOUCH_TARGET8,margin:0,padding:`${s.sm}px ${s.md}px`,borderRadius:r.md,border:`1px solid ${c.brandBorderStrong}`,backgroundColor:c.surfaceCream,color:c.text.primary,resize:"vertical",...faceCss(theme,"regular"),fontSize:t.size.body,lineHeight:bodyLineHeight,...slotCss(theme.slots.input,1)},failed:{margin:0,...faceCss(theme,"regular"),fontSize:t.size.caption,color:c.danger},actions:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:s.sm},submit:{...control,fontSize:controlSize,padding:`0 ${s.xl}px`,border:0,borderRadius:r.pill,backgroundColor:c.brand,color:c.onPrimary,...slotBoxCss(theme.slots.primaryButton),...slotText(theme.slots.primaryButton)},pending:{opacity:PENDING_OPACITY2,cursor:"progress"},skip:{...control,fontSize:controlSize,padding:`0 ${s.xl}px`,border:0,borderRadius:r.pill,background:"transparent",color:c.text.secondary}}}var MIN_TOUCH_TARGET9=44,GLYPH_SIZE=15,ROW_HEIGHT=16;function canCopyToClipboard(){return typeof navigator<"u"&&typeof navigator.clipboard?.writeText=="function"}function MessageFooter(props){let{role:role,text:text3,createdAt:createdAt,responseId:responseId,sentiment:sentiment,feedback:feedback}=props,theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles9(theme),[theme]),timeLabel=react.useMemo(()=>formatMessageTime(createdAt),[createdAt]),flow=useFeedbackFlow(responseId,sentiment,feedback),downRef=react.useRef(null);/* @__PURE__ */
|
|
293
294
|
return jsxRuntime.jsxs("div",{style:{...styles.footer,...role==="user"?styles.footerUser:styles.footerAssistant},children:[
|
|
294
295
|
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.row,children:[timeLabel!==null?/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.timestamp,children:timeLabel}):null,
|
|
295
|
-
/* @__PURE__ */jsxRuntime.jsx(CopyMessageButton,{role:role,text:text3}),role==="assistant"&&responseId!==void 0?SENTIMENT_OPTIONS.map(option=>{let active=sentiment===option.sentiment,color=theme.color.sentiment[option.sentiment];/* @__PURE__ */
|
|
296
|
-
return jsxRuntime.jsx("button",{ref:option.sentiment==="down"?downRef:void 0,type:"button","aria-pressed":active,"aria-label":option.label,onClick:()=>flow.onSentiment(option.sentiment),style:styles.iconButton,children:/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:option.sentiment==="up"?"thumbsUp":"thumbsDown",size:GLYPH_SIZE,color:color,fill:active?color:"transparent"
|
|
296
|
+
/* @__PURE__ */jsxRuntime.jsx(CopyMessageButton,{role:role,text:text3}),role==="assistant"&&responseId!==void 0?SENTIMENT_OPTIONS.map(option=>{let active=sentiment===option.sentiment,color=active?theme.color.sentiment[option.sentiment]:theme.color.text.timestamp;/* @__PURE__ */
|
|
297
|
+
return jsxRuntime.jsx("button",{ref:option.sentiment==="down"?downRef:void 0,type:"button","aria-pressed":active,"aria-label":option.label,onClick:()=>flow.onSentiment(option.sentiment),style:styles.iconButton,children:/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:option.sentiment==="up"?"thumbsUp":"thumbsDown",size:GLYPH_SIZE,color:color,fill:active?color:"transparent"})},option.sentiment)}):null]}),
|
|
297
298
|
/* @__PURE__ */jsxRuntime.jsx(FeedbackOutcome,{flow:flow,returnFocusTo:downRef})]})}function CopyMessageButton({role:role,text:text3,className:className}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles9(theme),[theme]),motion=useChatMotion(),copyable=role!=="vet"&&canCopyToClipboard()&&text3.length>0,[copied,setCopied]=react.useState(false),copyTimer=react.useRef(null);react.useEffect(()=>()=>{copyTimer.current!==null&&clearTimeout(copyTimer.current)},[]);let onCopy=react.useCallback(()=>{navigator.clipboard.writeText(text3).catch(()=>{}),setCopied(true),copyTimer.current!==null&&clearTimeout(copyTimer.current),copyTimer.current=setTimeout(()=>{setCopied(false),copyTimer.current=null},motion.copiedMs)},[text3,motion.copiedMs]);return copyable?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onCopy,"aria-label":copied?CHAT_COPY.copied:role==="user"?CHAT_COPY.copyUserMessage:CHAT_COPY.copyAssistantMessage,className:className,style:className?void 0:styles.iconButton,children:copied?/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"check",size:GLYPH_SIZE,color:theme.color.success}):/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"copy",size:GLYPH_SIZE,color:theme.color.text.timestamp})}):null}function useFeedbackFlow(responseId,sentiment,feedback){let[reasonsOpen,setReasonsOpen]=react.useState(false),[thanked,setThanked]=react.useState(false),[failed,setFailed]=react.useState(false),onSentiment=react.useCallback(next=>{if(responseId===void 0)return;setThanked(false),setFailed(false);let clearing=sentiment===next;feedback(responseId,next).then(result=>{result.ok||setFailed(true)}),next==="down"&&!clearing&&setReasonsOpen(true)},[responseId,sentiment,feedback]),onSubmitReason=react.useCallback(async(reason,notes)=>{if(responseId===void 0)return false;if(reason===null&¬es===null)return setThanked(true),true;let result=await feedback(responseId,"down",reason??"other",notes);return result.ok&&setThanked(true),result.ok},[responseId,feedback]),closeReasons=react.useCallback(()=>setReasonsOpen(false),[]);return{reasonsOpen:reasonsOpen,thanked:thanked,failed:failed,closeReasons:closeReasons,onSentiment:onSentiment,onSubmitReason:onSubmitReason}}function FeedbackOutcome({flow:flow,returnFocusTo:returnFocusTo}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles9(theme),[theme]);/* @__PURE__ */
|
|
298
299
|
return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[flow.thanked?/* @__PURE__ */jsxRuntime.jsx("p",{role:"status",style:styles.thanks,children:CHAT_COPY.feedbackThanks}):null,flow.failed?/* @__PURE__ */jsxRuntime.jsx("p",{role:"alert",style:styles.failed,children:CHAT_COPY.feedbackFailed}):null,flow.reasonsOpen?/* @__PURE__ */jsxRuntime.jsx(FeedbackReasons,{open:true,onSubmit:flow.onSubmitReason,onClose:flow.closeReasons,returnFocusTo:returnFocusTo}):null]})}function makeStyles9(theme){let c=theme.color,s=theme.space,t=theme.type;return{footer:{display:"flex",flexDirection:"column",gap:s.xs,paddingTop:s.xs+2},footerUser:{alignItems:"flex-end"},footerAssistant:{alignItems:"flex-start"},row:{display:"flex",flexDirection:"row",alignItems:"center",gap:s.sm+2,minHeight:ROW_HEIGHT},timestamp:{...faceCss(theme,"monoMedium"),fontSize:t.tierSizes.compact.nano,lineHeight:`${t.tierSizes.compact.nano+2}px`,color:theme.color.text.timestamp},iconButton:{boxSizing:"border-box",width:MIN_TOUCH_TARGET9,height:MIN_TOUCH_TARGET9,minWidth:MIN_TOUCH_TARGET9,minHeight:MIN_TOUCH_TARGET9,margin:`${-28/2}px 0`,padding:0,border:0,background:"transparent",display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer"},thanks:{margin:0,...faceCss(theme,"regular"),fontSize:t.size.caption,color:c.text.secondary},failed:{margin:0,...faceCss(theme,"regular"),fontSize:t.size.caption,color:c.danger}}}var INLINE_TOKEN=/\*\*([^*]+?)\*\*|\*([^*]+?)\*|`([^`]+?)`/g;function hasInlineMarkup(text3){return text3.includes("*")||text3.includes("`")}function tokenizeInlineMarkdown(text3){let runs=[],cursor2=0;INLINE_TOKEN.lastIndex=0;for(let match=INLINE_TOKEN.exec(text3);match!==null;match=INLINE_TOKEN.exec(text3)){match.index>cursor2&&runs.push({kind:"text",text:text3.slice(cursor2,match.index)});let bold=match[1],italic=match[2],code=match[3];bold!==void 0?runs.push({kind:"bold",text:bold}):italic!==void 0?runs.push({kind:"italic",text:italic}):code!==void 0&&runs.push({kind:"code",text:code}),cursor2=match.index+match[0].length}return cursor2<text3.length&&runs.push({kind:"text",text:text3.slice(cursor2)}),runs}function renderInlineMarkdown(text3,styles){return hasInlineMarkup(text3)?tokenizeInlineMarkdown(text3).map((run,key)=>{switch(run.kind){case"bold":/* @__PURE__ */
|
|
299
300
|
return jsxRuntime.jsx("strong",{style:styles.bold,children:run.text},key);case"italic":return styles.italic?/* @__PURE__ */jsxRuntime.jsx("em",{style:styles.italic,children:run.text},key):run.text;case"code":return styles.code?/* @__PURE__ */jsxRuntime.jsx("code",{style:styles.code,children:run.text},key):run.text;default:return run.text}}):text3}function tileImageUrl(url){let trimmed=url.trim();return/^\/(?![/\\])\S*$/.test(trimmed)?trimmed:hardenHttpsUrl(trimmed)}function cx(...names){let out=names.filter(name=>typeof name=="string"&&name.length>0).join(" ");return out.length>0?out:void 0}function useCardStyles(){let{theme:theme}=useChatTheme();return react.useMemo(()=>{let c=theme.color,t=theme.type,muted=c.text.muted,mono={...faceCss(theme,"mono"),fontSize:10.5,letterSpacing:".04em",textTransform:"uppercase",color:muted};return{answer:{display:"flex",flexDirection:"column",gap:12,width:"100%"},byline:{display:"flex",alignItems:"center",gap:10,margin:0,minHeight:14,...mono,letterSpacing:".06em"},body:{display:"grid",gap:10,...faceCss(theme,"regular"),fontSize:t.size.body,lineHeight:1.5,color:c.text.primary,overflowWrap:"break-word"},paragraph:{margin:0,whiteSpace:"pre-wrap"},list:{margin:0,paddingLeft:20,display:"grid",gap:4},cards:{display:"grid",gap:8},card:{width:"100%",display:"grid",gridTemplateColumns:"38px minmax(0, 1fr) auto 16px",alignItems:"center",gap:12,boxSizing:"border-box",padding:12,border:"none",borderRadius:theme.radius.lg,background:c.surface,color:c.text.primary,boxShadow:`0 0 0 1px ${c.borderRingCream}`,textAlign:"left",font:"inherit"},cardStat:{gridTemplateColumns:"minmax(0, 1fr) auto"},tile:{width:38,height:38,borderRadius:11,background:c.surfaceSubtle,display:"grid",placeItems:"center",overflow:"hidden",color:c.brandInk},title:{display:"block",...faceCss(theme,"bold"),fontSize:t.size.bodyTight,lineHeight:1.25},meta:{display:"block",marginTop:3,...mono},pill:{display:"inline-flex",alignItems:"center",minHeight:26,padding:"0 10px",borderRadius:999,background:c.surfaceSubtle,...faceCss(theme,"bold"),fontSize:13,whiteSpace:"nowrap"},value:{...faceCss(theme,"mono"),fontSize:22},feedback:{display:"flex",flexWrap:"wrap",gap:8,alignItems:"center"},chip:{minHeight:32,padding:"0 12px",borderRadius:999,border:`1px solid ${c.borderRingCream}`,background:"transparent",color:c.text.primary,...faceCss(theme,"bold"),fontSize:13.5,cursor:"pointer"},chipOn:{background:c.surfaceSubtle},followUps:{display:"grid",gap:8},label:{margin:"2px 0 0",...faceCss(theme,"bold"),fontSize:13,color:muted},row:{width:"100%",display:"grid",gridTemplateColumns:"minmax(0, 1fr) 16px",alignItems:"center",gap:10,boxSizing:"border-box",padding:"11px 12px 11px 14px",border:"none",borderRadius:14,background:c.surface,boxShadow:`0 0 0 1px ${c.borderRingCream}`,...faceCss(theme,"bold"),fontSize:t.size.bodyTight,lineHeight:1.3,color:c.brandInk,textAlign:"left",cursor:"pointer"},rowAction:{gridTemplateColumns:"20px minmax(0, 1fr) 16px",color:c.text.primary},muted:muted}},[theme])}function Chevron({options:options,color:color}){if(options?.renderIcon!==void 0)try{return options.renderIcon("chevron")}catch{}/* @__PURE__ */
|
|
@@ -346,8 +347,8 @@ return jsxRuntime.jsxs("div",{...cls?.start?{className:cls.start}:{style:styles.
|
|
|
346
347
|
/* @__PURE__ */jsxRuntime.jsx(Heading,{...cls?.title?{className:cls.title}:{style:styles.title},children:title}),
|
|
347
348
|
/* @__PURE__ */jsxRuntime.jsx("ul",{"aria-label":CHAT_COPY.suggestions,...cls?.list?{className:cls.list,style:LIST_RESET}:{style:styles.list},children:chips.map(({chip:chip,send:send,paint:paint,tinted:tinted},index)=>/* @__PURE__ */jsxRuntime.jsx("li",{children:/* @__PURE__ */jsxRuntime.jsx(Chip,{chip:chip,themed:paint??themed,delayMs:followUpDelayMs(motion,index),durationMs:motion.followUpInMs,risePx:motion.promptRisePx,style:cls?.chip?NO_STYLE:styles.chip,...cls?.chip?{className:cls.chip}:{},slotStyle:tinted&&paint!==null?{...styles.chipSlot,backgroundColor:paint.fill,color:paint.ink}:styles.chipSlot,onPress:()=>chip.intent==="vet_report"?onVetPrep?.():onSend(send)})},chip.id))})]})}function Chip({chip:chip,themed:themed,delayMs:delayMs,durationMs:durationMs,risePx:risePx,style:style,className:className,slotStyle:slotStyle,onPress:onPress}){let ref=react.useRef(null);return react.useEffect(()=>{let animation=animateEnter(ref.current,{durationMs:durationMs,delayMs:delayMs,fromOpacity:0,fromTranslateY:risePx});return()=>animation?.cancel()},[durationMs,delayMs,risePx]),/* @__PURE__ */jsxRuntime.jsx("button",{ref:ref,type:"button",...className===void 0?{}:{className:className},onClick:onPress,style:{...themed===null?{...style,backgroundColor:chip.background}:{...style,backgroundColor:themed.fill,color:themed.ink},...slotStyle},children:chip.label})}function makeStyles13(theme,desktop){let s=theme.space,r=theme.radius,t=theme.type,titleSize=tierPx(theme,"heading",desktop?TITLE_SIZE_DESKTOP:TITLE_SIZE),chipSize=t.tierSizes.compact.bodyTight;return{wrap:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:s.lg+CHIPS_OFFSET_EXTRA,width:"100%"},title:{margin:0,...headingFaceCss(theme,"medium"),fontSize:titleSize,lineHeight:`${Math.round(titleSize*TITLE_LINE_HEIGHT)}px`,letterSpacing:TITLE_LETTER_SPACING,color:theme.color.brandInk,textAlign:"left",textWrap:"balance"},list:{listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"row",flexWrap:"wrap",alignItems:"flex-start",gap:s.sm},chip:{boxSizing:"border-box",minHeight:MIN_TOUCH_TARGET13,minWidth:MIN_TOUCH_TARGET13,maxWidth:"100%",display:"inline-flex",alignItems:"center",justifyContent:"flex-start",margin:0,padding:`${s.sm-1}px ${s.lg-1}px`,border:"1px solid transparent",borderRadius:r.pill,cursor:"pointer",...faceCss(theme,"bold"),fontSize:chipSize,lineHeight:`${Math.round(chipSize*1.3)}px`,color:QUICK_PROMPT_TEXT_COLOR,textAlign:"left",whiteSpace:"normal"},chipSlot:slotCss(ownGroundSlot(theme.slots.chip),1)}}var DOT_SIZE=6,DOT_RISE=3,LOOP_MS=1e3,STAGGER_MS=150,OPACITY_REST=.25,OPACITY_STATIC=.5,DOT_INDICES=[0,1,2];function TypingIndicator({petName:petName}){let theme=useEverfurTheme(),styles=react.useMemo(()=>makeStyles14(theme),[theme]),animate=!theme.motion.reducedMotion;/* @__PURE__ */
|
|
348
349
|
return jsxRuntime.jsxs("div",{style:styles.card,children:[
|
|
349
|
-
/* @__PURE__ */jsxRuntime.jsx("
|
|
350
|
-
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true","data-everfur-reading-dots":"",style:styles.dots,children:DOT_INDICES.map(index=>animate?/* @__PURE__ */jsxRuntime.jsx(AnimatedDot,{index:index,style:styles.dot},index):/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.dot,...styles.dotStatic}},index))})]})}function AnimatedDot({index:index,style:style}){let ref=react.useRef(null);return react.useEffect(()=>{let node=ref.current;if(node===null||typeof node.animate!="function")return;let animation=node.animate([{opacity:OPACITY_REST,transform:"translateY(0)"},{opacity:1,transform:`translateY(-${DOT_RISE}px)`,offset:.4},{opacity:OPACITY_REST,transform:"translateY(0)"}],{duration:LOOP_MS,iterations:1/0,delay:index*STAGGER_MS,easing:"ease-in-out"});return()=>animation.cancel()},[index]),/* @__PURE__ */jsxRuntime.jsx("span",{ref:ref,style:{...style,opacity:OPACITY_REST}})}function makeStyles14(theme){let c=theme.color,s=theme.space,r=theme.radius
|
|
350
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{style:VISUALLY_HIDDEN,children:forPet(CHAT_COPY.reading,petName)}),
|
|
351
|
+
/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true","data-everfur-reading-dots":"",style:styles.dots,children:DOT_INDICES.map(index=>animate?/* @__PURE__ */jsxRuntime.jsx(AnimatedDot,{index:index,style:styles.dot},index):/* @__PURE__ */jsxRuntime.jsx("span",{style:{...styles.dot,...styles.dotStatic}},index))})]})}function AnimatedDot({index:index,style:style}){let ref=react.useRef(null);return react.useEffect(()=>{let node=ref.current;if(node===null||typeof node.animate!="function")return;let animation=node.animate([{opacity:OPACITY_REST,transform:"translateY(0)"},{opacity:1,transform:`translateY(-${DOT_RISE}px)`,offset:.4},{opacity:OPACITY_REST,transform:"translateY(0)"}],{duration:LOOP_MS,iterations:1/0,delay:index*STAGGER_MS,easing:"ease-in-out"});return()=>animation.cancel()},[index]),/* @__PURE__ */jsxRuntime.jsx("span",{ref:ref,style:{...style,opacity:OPACITY_REST}})}function makeStyles14(theme){let c=theme.color,s=theme.space,r=theme.radius;return{card:{position:"relative",boxSizing:"border-box",alignSelf:"flex-start",display:"flex",flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:s.sm,maxWidth:"100%",padding:`${s.md}px ${s.md+s.xs/2}px`,backgroundColor:c.surfaceSubtle,borderRadius:r.md},dots:{display:"inline-flex",flexDirection:"row",alignItems:"center",gap:s.xs},dot:{display:"inline-block",width:DOT_SIZE,height:DOT_SIZE,borderRadius:r.pill,backgroundColor:c.brandInk},dotStatic:{opacity:OPACITY_STATIC}}}function resolveTurnScrollTarget(assistantTop,userTop,inset){let replyTarget=assistantTop-inset,target=userTop!=null?Math.min(replyTarget,userTop):replyTarget;return Math.max(0,target)}function latestTurn(messages){let assistantIndex=messages.length-1,last=messages[assistantIndex];if(last===void 0||last.role!=="assistant")return null;let above=messages[assistantIndex-1];return{assistantIndex:assistantIndex,userIndex:above!==void 0&&above.role==="user"?assistantIndex-1:null}}function nextFollowOffset(anchor,current,maxOffset){let end=Math.max(0,maxOffset),target=anchor===null?end:Math.min(Math.max(0,anchor),end);return target>current+1?target:null}var ASIDE_REVEAL_MARGIN=16;function contentTop(scroller2,row){return scroller2.scrollTop+row.getBoundingClientRect().top-scroller2.getBoundingClientRect().top}function turnAnchor(scroller2,list,messages){let turn=latestTurn(messages);if(turn===null||list===null||list.children.length!==messages.length)return null;let assistant=list.children[turn.assistantIndex];if(assistant===void 0)return null;let user=turn.userIndex===null?void 0:list.children[turn.userIndex];return resolveTurnScrollTarget(contentTop(scroller2,assistant),user===void 0?null:contentTop(scroller2,user),96)}function useTranscriptFollow(messages,isStreaming,growth){let scrollerRef=react.useRef(null),listRef=react.useRef(null),asideRef=react.useRef(null),following=react.useRef(true),wasStreaming=react.useRef(isStreaming),ownTop=react.useRef(null),onScroll=react.useCallback(()=>{let node=scrollerRef.current;node!==null&&(ownTop.current!==null&&Math.abs(node.scrollTop-ownTop.current)<1||(ownTop.current=null,following.current=node.scrollHeight-node.scrollTop-node.clientHeight<=24))},[]),{awaiting:awaiting,prompts:prompts,notice:notice,reconnecting:reconnecting}=growth;react.useLayoutEffect(()=>{isStreaming&&!wasStreaming.current&&(following.current=true),wasStreaming.current=isStreaming;let node=scrollerRef.current;if(node===null||!following.current)return;let next=nextFollowOffset(turnAnchor(node,listRef.current,messages),node.scrollTop,node.scrollHeight-node.clientHeight);next!==null&&(node.scrollTop=next,ownTop.current=node.scrollTop)},[messages,isStreaming,awaiting,prompts,notice,reconnecting]);let aside=growth.aside??null;return react.useLayoutEffect(()=>{let node=scrollerRef.current,row=asideRef.current;if(aside===null||node===null||row===null||!following.current)return;let bottom=contentTop(node,row)+row.getBoundingClientRect().height,next=nextFollowOffset(bottom+ASIDE_REVEAL_MARGIN-node.clientHeight,node.scrollTop,node.scrollHeight-node.clientHeight);next!==null&&(node.scrollTop=next,ownTop.current=node.scrollTop)},[aside]),{scrollerRef:scrollerRef,listRef:listRef,onScroll:onScroll,asideRef:asideRef}}function TurnNoticeCard({notice:notice,onRetry:onRetry,onStartNew:onStartNew}){let{styles:styles}=useChatTheme(),error=notice.tone==="error";/* @__PURE__ */
|
|
351
352
|
return jsxRuntime.jsxs("div",{role:"alert",style:{...styles.turnNotice,...error?styles.turnNoticeError:null},children:[
|
|
352
353
|
/* @__PURE__ */jsxRuntime.jsx("p",{style:{...styles.turnNoticeTitle,...error?styles.turnNoticeTitleError:null},children:notice.title}),
|
|
353
354
|
/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.turnNoticeBody,children:notice.body}),
|
|
@@ -371,7 +372,9 @@ return jsxRuntime.jsx("li",{style:isUser?{...styles.row,...styles.rowUser}:{list
|
|
|
371
372
|
/* @__PURE__ */jsxRuntime.jsx("span",{style:VISUALLY_HIDDEN,children:`${CHAT_COPY.senderUser}: `}),images.length>0?/* @__PURE__ */jsxRuntime.jsx(MessageAttachments,{images:images,onPreview:onPreview}):null,questionClass?/* @__PURE__ */jsxRuntime.jsx("span",{style:{whiteSpace:"pre-wrap"},children:text3}):/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.bubbleTextUser,children:text3})]}):/* @__PURE__ */jsxRuntime.jsx("div",{ref:bubbleRef,style:{width:"100%"},children:/* @__PURE__ */jsxRuntime.jsx(CardsAnswer,{message:message,text:text3,streaming:streaming,chat:chat,options:answerCards,hiddenSender:CHAT_COPY.senderAssistant,showFooter:showFooter,renderFooter:footer})})})}/* @__PURE__ */
|
|
372
373
|
return jsxRuntime.jsxs("li",{style:{...styles.row,...isUser?styles.rowUser:styles.rowAssistant},"aria-busy":message.pending===true?true:void 0,children:[message.role==="assistant"?/* @__PURE__ */jsxRuntime.jsx(AssistantSender,{showName:showAssistantName}):null,isVet?/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.senderRow,children:/* @__PURE__ */jsxRuntime.jsx("span",{style:styles.vetSender,children:vetSenderLabel(message)})}):null,
|
|
373
374
|
/* @__PURE__ */jsxRuntime.jsxs("div",{ref:bubbleRef,style:{...styles.bubble,...isUser?styles.bubbleUser:isVet?styles.bubbleVet:styles.bubbleAssistant,...message.pending?styles.bubblePending:null},children:[hiddenSender!==null?/* @__PURE__ */jsxRuntime.jsx("span",{style:VISUALLY_HIDDEN,children:`${hiddenSender}: `}):null,images.length>0?/* @__PURE__ */jsxRuntime.jsx(MessageAttachments,{images:images,onPreview:onPreview}):null,
|
|
374
|
-
/* @__PURE__ */jsxRuntime.jsx("p",{style:isUser?styles.bubbleTextUser:isVet?styles.bubbleTextVet:styles.bubbleTextAssistant,children:message.role==="assistant"?renderInlineMarkdown(text3,{bold:styles.bubbleBold,italic:styles.bubbleItalic,code:styles.bubbleCode}):text3})]}),message.role==="assistant"&&!streaming?/* @__PURE__ */jsxRuntime.jsx(CitationCards,{citations:message.citations}):null,showFooter?footer():null]})}var URGENT_LEVELS=/* @__PURE__ */new Set(["emergency","schedule_soon"]);function textingAskThreadReady(chat){if(chat.isBootstrapping===true||chat.isLoadingHistory===true||chat.isStreaming===true||chat.status==="error"||chat.stopped===true)return false;let last=chat.messages[chat.messages.length-1];return last===void 0||last.role!=="assistant"||last.pending===true||last.checkin!==void 0||last.text.trim().length===0?false:!(typeof last.urgencyLevel=="string"&&URGENT_LEVELS.has(last.urgencyLevel))}var NO_SNAPSHOT2=()=>null;function useTextingGranted(){let{runtime:runtime}=useEverfurContext(),source=runtime.entitlements??null,subscribe2=react.useCallback(listener=>source===null?()=>{}:source.subscribe(listener),[source]),read=source===null?NO_SNAPSHOT2:source.getSnapshot,snapshot2=react.useSyncExternalStore(subscribe2,read,read);return react.useMemo(()=>snapshot2!==null&&decideCapability("texting",snapshot2.decisions,{isPending:snapshot2.isPending}).enabled,[snapshot2])}var pending=null,loaded=null;function loadTextingModule(){if(pending!==null)return pending;let started=import("@everfur/sdk/web/texting");return pending=started,started.then(module=>{loaded=module},()=>{pending===started&&(pending=null)}),started}var NOTHING=/* @__PURE__ */Object.freeze({runner:null,line:null,entry:null,stage:null});function useChatTextingAsk(enabled,chat){let{userRef:userRef2}=useEverfurContext(),granted=useTextingGranted(),wanted=enabled&&userRef2!==null&&granted,[module,setModule]=react.useState(loaded),[ask,setAsk]=react.useState(null);if(react.useEffect(()=>{if(!wanted||module!==null)return;let live=true;return loadTextingModule().then(next=>{live&&setModule(next)},()=>{}),()=>{live=false}},[wanted,module]),!wanted||module===null)return NOTHING;let runner=/* @__PURE__ */jsxRuntime.jsx(module.ChatTextingAskController,{enabled:true,ready:textingAskThreadReady(chat),onAsk:setAsk});if(ask===null||ask.stage==="hidden"||ask.stage==="dismissed")return{runner:runner,line:null,entry:null,stage:null};let lines=module.textingAskLines(ask),line=/* @__PURE__ */jsxRuntime.jsx(AskLine,{stage:ask.stage,text:ask.stage==="verified"?lines.verified:lines.line,accept:lines.accept,dismiss:lines.dismiss,onAccept:ask.accept,onDismiss:ask.dismiss}),entry=ask.stage==="enrolling"?/* @__PURE__ */jsxRuntime.jsx(module.ChatTextingAskComposer,{ask:ask}):null;return{runner:runner,line:line,entry:entry,stage:ask.stage}}function
|
|
375
|
+
/* @__PURE__ */jsxRuntime.jsx("p",{style:isUser?styles.bubbleTextUser:isVet?styles.bubbleTextVet:styles.bubbleTextAssistant,children:message.role==="assistant"?renderInlineMarkdown(text3,{bold:styles.bubbleBold,italic:styles.bubbleItalic,code:styles.bubbleCode}):text3})]}),message.role==="assistant"&&!streaming?/* @__PURE__ */jsxRuntime.jsx(CitationCards,{citations:message.citations}):null,showFooter?footer():null]})}var URGENT_LEVELS=/* @__PURE__ */new Set(["emergency","schedule_soon"]);function textingAskThreadReady(chat){if(chat.isBootstrapping===true||chat.isLoadingHistory===true||chat.isStreaming===true||chat.status==="error"||chat.stopped===true)return false;let last=chat.messages[chat.messages.length-1];return last===void 0||last.role!=="assistant"||last.pending===true||last.checkin!==void 0||last.text.trim().length===0?false:!(typeof last.urgencyLevel=="string"&&URGENT_LEVELS.has(last.urgencyLevel))}var NO_SNAPSHOT2=()=>null;function useTextingGranted(){let{runtime:runtime}=useEverfurContext(),source=runtime.entitlements??null,subscribe2=react.useCallback(listener=>source===null?()=>{}:source.subscribe(listener),[source]),read=source===null?NO_SNAPSHOT2:source.getSnapshot,snapshot2=react.useSyncExternalStore(subscribe2,read,read);return react.useMemo(()=>snapshot2!==null&&decideCapability("texting",snapshot2.decisions,{isPending:snapshot2.isPending}).enabled,[snapshot2])}var pending=null,loaded=null;function loadTextingModule(){if(pending!==null)return pending;let started=import("@everfur/sdk/web/texting");return pending=started,started.then(module=>{loaded=module},()=>{pending===started&&(pending=null)}),started}var NOTHING=/* @__PURE__ */Object.freeze({runner:null,line:null,entry:null,stage:null,headerEntry:null});function useChatTextingAsk(enabled,chat,headerEntry=false,inRow=false){let{userRef:userRef2}=useEverfurContext(),granted=useTextingGranted(),wanted=enabled&&userRef2!==null&&granted,[module,setModule]=react.useState(loaded),[ask,setAsk]=react.useState(null);if(react.useEffect(()=>{if(!wanted||module!==null)return;let live=true;return loadTextingModule().then(next=>{live&&setModule(next)},()=>{}),()=>{live=false}},[wanted,module]),!wanted||module===null)return NOTHING;let runner=/* @__PURE__ */jsxRuntime.jsx(module.ChatTextingAskController,{enabled:true,ready:textingAskThreadReady(chat),onAsk:setAsk,entry:headerEntry}),chipEntry=headerEntry&&ask!==null&&ask.canOpen?{label:module.textingAskLines(ask).accept,onOpen:ask.open}:null,chip=chipEntry===null?null:inRow?/* @__PURE__ */jsxRuntime.jsx(TextingEntryRow,{entry:chipEntry}):/* @__PURE__ */jsxRuntime.jsx(TextingEntryChip,{entry:chipEntry});if(ask===null||ask.stage==="hidden"||ask.stage==="dismissed")return{runner:runner,line:null,entry:null,stage:null,headerEntry:chip};let lines=module.textingAskLines(ask),line=/* @__PURE__ */jsxRuntime.jsx(AskLine,{stage:ask.stage,text:ask.stage==="verified"?lines.verified:lines.line,accept:lines.accept,dismiss:lines.dismiss,onAccept:ask.accept,onDismiss:ask.dismiss}),entry=ask.stage==="enrolling"?/* @__PURE__ */jsxRuntime.jsx(EntryGap,{children:/* @__PURE__ */jsxRuntime.jsx(module.ChatTextingAskComposer,{ask:ask})}):null;return{runner:runner,line:line,entry:entry,stage:ask.stage,headerEntry:chip}}function TextingEntryRow({entry:entry}){let{theme:theme}=useChatTheme(),s=theme.space;/* @__PURE__ */
|
|
376
|
+
return jsxRuntime.jsx("div",{style:{boxSizing:"border-box",display:"flex",justifyContent:"flex-end",width:`calc(100% - ${s.md*2}px)`,maxWidth:CHAT_COLUMN_MAX_WIDTH,margin:`${s.sm}px auto 0`,flexShrink:0},children:/* @__PURE__ */jsxRuntime.jsx(TextingEntryChip,{entry:entry})})}function TextingEntryChip({entry:entry}){let{theme:theme}=useChatTheme();/* @__PURE__ */
|
|
377
|
+
return jsxRuntime.jsx("button",{type:"button",onClick:entry.onOpen,"data-everfur-texting-entry":"",style:{...headerEntryPillCss(theme),maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis"},children:entry.label})}function EntryGap({children:children}){let{theme:theme}=useChatTheme(),ref=react.useRef(null);return react.useLayoutEffect(()=>{let column=ref.current?.parentElement?.parentElement;if(column!=null){for(let node of Array.from(column.querySelectorAll("*")))if(node.scrollHeight>node.clientHeight&&getComputedStyle(node).overflowY==="auto"){node.scrollTop=node.scrollHeight;return}}},[]),/* @__PURE__ */jsxRuntime.jsx("div",{ref:ref,style:{paddingTop:theme.space.md},children:children})}function AskLine({stage:stage,text:text3,accept:accept,dismiss:dismiss,onAccept:onAccept,onDismiss:onDismiss}){let{theme:theme,styles:styles}=useChatTheme(),showName=!theme.meta.hidePoweredBy;/* @__PURE__ */
|
|
375
378
|
return jsxRuntime.jsxs("div",{"data-everfur-texting-ask":stage,style:{...styles.row,...styles.rowAssistant,marginTop:theme.space.lg},children:[
|
|
376
379
|
/* @__PURE__ */jsxRuntime.jsx(AssistantSender,{showName:showName}),
|
|
377
380
|
/* @__PURE__ */jsxRuntime.jsxs("div",{style:{...styles.bubble,...styles.bubbleAssistant},children:[showName?null:/* @__PURE__ */jsxRuntime.jsx("span",{style:VISUALLY_HIDDEN,children:`${CHAT_COPY.senderAssistant}: `}),
|
|
@@ -390,9 +393,9 @@ return jsxRuntime.jsxs("div",{style:compact?{...styles.composerBlock,...COMPACT_
|
|
|
390
393
|
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.inputWrap,children:[draft.length===0?/* @__PURE__ */jsxRuntime.jsx("span",{"aria-hidden":"true",style:styles.placeholder,children:placeholder}):null,
|
|
391
394
|
/* @__PURE__ */jsxRuntime.jsx("textarea",{ref:inputRef,rows:1,value:draft,onChange:onChange,onKeyDown:onKeyDown2,onFocus:()=>setFocused(true),onBlur:()=>setFocused(false),"data-ef-focus-ring":"self","aria-label":CHAT_COPY.composerLabel,"aria-description":placeholder,style:styles.input})]}),voice.supported?/* @__PURE__ */jsxRuntime.jsx(DictationButton,{active:voice.active,listening:voice.status==="listening",elapsedMs:voice.elapsedMs,onToggle:voice.toggle}):null,isStreaming?/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onStop,"aria-label":CHAT_COPY.stop,style:{...styles.actionButton,...compact?COMPACT_SEND:null},children:/* @__PURE__ */jsxRuntime.jsx("span",{"data-everfur-send-disc":"",style:{...styles.sendDisc,...compact?COMPACT_DISC:null},children:/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"square",size:STOP_GLYPH_SIZE,color:sendInk,fill:sendInk})})}):/* @__PURE__ */jsxRuntime.jsx("button",{type:"button",onClick:onSend,"aria-label":CHAT_COPY.send,"aria-disabled":sendBlocked,style:{...styles.actionButton,...compact?COMPACT_SEND:null,...sendDimmed?styles.actionButtonDisabled:null},children:/* @__PURE__ */jsxRuntime.jsx("span",{"data-everfur-send-disc":"",style:{...styles.sendDisc,...compact?COMPACT_DISC:null},children:compact?/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"arrowUp",size:COMPACT_SEND_GLYPH,color:sendInk,strokeWidth:2.3}):/* @__PURE__ */jsxRuntime.jsx(Glyph,{name:"send",size:SEND_GLYPH_SIZE,color:sendInk})})})]}),children]})}var WEB_ATTACHMENT_TRANSPORT=createWebAttachmentTransport(),NO_IMAGES2=/* @__PURE__ */Object.freeze([]),TELEVET_HOST_SCOPE=/* @__PURE__ */Object.freeze({display:"contents"});function EverfurChat(props){let{style:style,className:className,renderPending:renderPending}=props;/* @__PURE__ */
|
|
392
395
|
return jsxRuntime.jsx(CapabilityGate,{capability:"chat",style:style,className:className,...renderPending?{renderPending:renderPending}:{},children:/* @__PURE__ */jsxRuntime.jsx(CitationLinksScope,{onOpenUrl:props.onOpenUrl,children:/* @__PURE__ */jsxRuntime.jsx(ChatLayoutScope,{headingLevel:props.headingLevel,children:/* @__PURE__ */jsxRuntime.jsx(ChatBody,{...props})})})})}function ChatBody(props){let{petRef:petRef2,conversationId:conversationId2,style:style,className:className,renderPending:renderPending,onPetChange:onPetChange,onVetPrep:onVetPrep,onFindVet:onFindVet,renderVetAction:renderVetAction,pet:pet,onAddPet:onAddPet,checkinTarget:checkinTarget,initialAsk:initialAsk,initialAskKey:initialAskKey,composerSeed:composerSeed,lifecycle:lifecycle,draftStore:draftStore,vetReturnTo:vetReturnTo,vetUsState:vetUsState,vetPrefer:vetPrefer}=props,maxPerMessage=props.attachments===false?void 0:props.attachments?.maxPerMessage,{presentation:hostPresentation,dictation:dictation,attachments:attachmentsProp,topCard:hostTopCard}=props,{presentation:presentation,isLocked:isLocked2}=useEverfurPresentationState(definedPresentation({...hostPresentation,chatComposerMic:hostPresentation?.chatComposerMic??(dictation===void 0?void 0:dictation!==false),chatComposerUpload:hostPresentation?.chatComposerUpload??(attachmentsProp===void 0?void 0:attachmentsProp!==false)})),attachmentsEnabled=presentation.chatComposerUpload,dictationEnabled=presentation.chatComposerMic,answerFooter=presentation.safetyDisclaimerPlacement==="answer_footer",sheet=presentation.chatHistoryStyle==="sheet",topCardState=useTopCardState(),{activePet:activePet}=useEverfurContext(),planPetRef=petRef2??activePet??null,planEnabled=useCapabilityEnabled("healthPlan"),wantsPlan=presentation.chatTopCard==="focus"&&hostTopCard===void 0&&planEnabled,planPage=useHealthPlanPage({petRef:planPetRef,enabled:wantsPlan}),onOpenHealthPlan=props.onOpenHealthPlan,openPlan=react.useMemo(()=>onOpenHealthPlan===void 0?void 0:()=>{callHost(onOpenHealthPlan,planPetRef)},[onOpenHealthPlan,planPetRef]),planCard=react.useMemo(()=>wantsPlan&&planPage.phase==="ready"?healthPlanTopCard(planPage.page,{onOpenPlan:openPlan}):void 0,[wantsPlan,planPage.phase,planPage.page,openPlan]),topCard=hostTopCard??planCard,showTopCard=topCard!==void 0&&presentation.chatTopCard==="focus",{theme:theme,styles:styles}=useChatTheme(),hostPoweredBy=useHostPoweredBy(),{starterPrompts:starterPrompts,renderEmptyHeader:renderEmptyHeader,emptyState:emptyState,initialAskCard:initialAskCard,answerCards:answerCards}=props,countLocked=isLocked2("chatFollowUpCount"),followUpPolicy=react.useMemo(()=>followUpPolicyFor(props.followUpPolicy,presentation,countLocked),[props.followUpPolicy,presentation,countLocked]),askPrompt=react.useMemo(()=>sanitizeSeedPrompt(initialAsk),[initialAsk]),historyBar=react.useMemo(()=>{let bar=props.historyBar;return bar===void 0||!showTopCard||topCard===void 0?bar:{...bar,extra:/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[bar.extra??null,
|
|
393
|
-
/* @__PURE__ */jsxRuntime.jsx(TopCardPill,{card:topCard,state:topCardState})]})}},[props.historyBar,showTopCard,topCard,topCardState]),chatOpts=react.useMemo(()=>buildChatOpts(petRef2,conversationId2),[petRef2,conversationId2]),chat=useEverfurChat(chatOpts),view=selectView2(chat),pets=useEverfurPets(),headerPet=react.useMemo(()=>headerPetOf(pets.pets,chat.petRef),[pets.pets,chat.petRef]),disclaimerClass=answerCards?.classNames?.disclaimer,footnoteInThread=answerFooter&&(view==="populated"||view==="empty"),barInThread=presentation.chatHistoryBar==="scroll"&&(view==="populated"||view==="empty"),footnote=/* @__PURE__ */jsxRuntime.jsx("p",{role:"note","data-everfur-footnote":"",className:footnoteInThread?disclaimerClass:void 0,style:footnoteInThread&&disclaimerClass?void 0:styles.footnote,children:forPet(CHAT_COPY.footnoteWeb,headerPet?.name)}),history=useHistoryPanel(chat),historyTrigger=react.useRef(null),threadEmpty=chat.messages.length===0,unread=(chat.hasUnreadThreads??false)||(chat.unreadCount??0)>0||history.rows.some(row=>row.unreadCount!==null&&row.unreadCount>0),historyBarNode=react.useMemo(()=>historyBar===void 0?null:/* @__PURE__ */jsxRuntime.jsx(HistoryBar,{bar:historyBar,history:history,triggerRef:historyTrigger,empty:threadEmpty,unread:unread}),[historyBar,history,threadEmpty,unread]),textingAsk=useChatTextingAsk(presentation.chatTextingAsk,chat),onTopCardAsk=react.useCallback(prompt=>{chat.send(prompt)},[chat.send]),emptyOptions=react.useMemo(()=>({...starterPrompts!==void 0?{starterPrompts:starterPrompts}:{},...renderEmptyHeader!==void 0?{renderEmptyHeader:renderEmptyHeader}:{},...emptyState!==void 0?{emptyState:emptyState}:{},...followUpPolicy!==void 0?{followUpPolicy:followUpPolicy}:{},...initialAskCard!==void 0&&askPrompt!==null?{openingCard:{card:initialAskCard,prompt:askPrompt}}:{},...presentation.chatAnswerStyle==="cards"?{answerStyle:"cards",answerCards:answerCards}:{},...footnoteInThread?{answerFooter:footnote}:{},...showTopCard&&topCard!==void 0?{topCard:/* @__PURE__ */jsxRuntime.jsx(TopCard,{card:topCard,state:topCardState,ask:onTopCardAsk})}:{},...barInThread&&historyBarNode!==null?{threadTop:historyBarNode}:{},...textingAsk.line!==null?{threadAside:textingAsk.line,...textingAsk.stage!==null?{threadAsideKey:textingAsk.stage}:{}}:{}}),[starterPrompts,renderEmptyHeader,emptyState,followUpPolicy,initialAskCard,askPrompt,presentation.chatAnswerStyle,answerCards,footnoteInThread,headerPet?.name,disclaimerClass,showTopCard,topCard,topCardState,onTopCardAsk,barInThread,historyBarNode,textingAsk.line,textingAsk.stage]),inputRef=react.useRef(null),context=useEverfurContext(),announcement=useReplyAnnouncement(chat,headerPet?.name??null),addPet=react.useMemo(()=>onAddPet===void 0?null:()=>{callHost(onAddPet)},[onAddPet]),onSelectPet=react.useCallback(next=>{context.handle.setActivePet(next),callHost(onPetChange,next)},[context.handle,onPetChange]),barShown=historyBar!==void 0,historyLoad=history.load,historyOpen=history.open;react.useEffect(()=>{barShown&&!historyOpen&&historyLoad()},[barShown,historyOpen,chat.conversationId,historyLoad]);let layout=useChatLayout();useCheckinTarget(chat.openCheckin,checkinTarget),useInitialAsk(chat.askEverfur,chat.isBootstrapping,initialAsk,initialAskKey);let seed=react.useMemo(()=>sanitizeSeedPrompt(composerSeed),[composerSeed]),lifecyclePort=react.useMemo(()=>lifecycle===void 0?createBrowserLifecycle():lifecycle??void 0,[lifecycle]);useChatLifecycle(lifecyclePort,{conversationId:chat.conversationId===null?null:String(chat.conversationId),isTurnInFlight:chat.isStreaming,refresh:chat.refreshActiveThread});let urgency=useUrgencySurface(react.useMemo(()=>latestUrgencySource(chat.messages),[chat.messages])),vetOptions=react.useMemo(()=>chatVetVisitOptions(chat.petRef,vetReturnTo===void 0&&vetUsState===void 0&&vetPrefer===void 0?void 0:{returnTo:vetReturnTo,usState:vetUsState,prefer:vetPrefer}),[chat.petRef,vetReturnTo,vetUsState,vetPrefer]),vetVisit=useVetVisit(vetOptions),openVetVisit=vetVisit.open,vetEntry=react.useMemo(()=>({available:vetVisit.available,open:()=>{openVetVisit()}}),[vetVisit.available,openVetVisit]),checkinFindVet=react.useMemo(()=>vetEntry.available?vetEntry.open:onFindVet!==void 0?()=>{callHost(onFindVet,"emergency")}:null,[vetEntry,onFindVet]),vetPrep=react.useMemo(()=>onVetPrep!==void 0?()=>{callHost(onVetPrep,chat.petRef)}:vetEntry.available?vetEntry.open:null,[onVetPrep,chat.petRef,vetEntry]),attachments=useChatAttachments({transport:WEB_ATTACHMENT_TRANSPORT,...maxPerMessage!==void 0?{maxPerMessage:maxPerMessage}:{}}),sentImages=useSentImages(chat.messages),[lightbox,setLightbox]=react.useState(null),lightboxTrigger=react.useRef(null),onPreview=react.useCallback((image,trigger)=>{lightboxTrigger.current=trigger,setLightbox(image)},[]),closeLightbox=react.useCallback(()=>setLightbox(null),[]),onSelectPrompt=react.useCallback(prompt=>{chat.send(prompt),inputRef.current?.focus()},[chat.send]),onSend=react.useCallback((text3,images)=>{sentImages.record(text3,images),attachments.s3Keys.length>0?chat.send(text3,{imageS3Keys:attachments.s3Keys}):chat.send(text3),attachments.clear()},[chat.send,attachments,sentImages]),telemetry=context.runtime.registry?.services?.telemetry??null,rootRef=react.useRef(null);return useKeyboardFocusRing(rootRef,theme.color.brandInk),useMeasuredLayout(rootRef),/* @__PURE__ */jsxRuntime.jsxs("div",{ref:rootRef,className:className,style:{...styles.container,...style},children:[props.header===false?null:/* @__PURE__ */jsxRuntime.jsx(ChatHeader,{pets:pets.pets,activePet:headerPet,unread:unread,onOpenHistory:history.open?history.close:history.show,historyTriggerRef:historyTrigger,onSelectPet:onSelectPet,onAddPet:addPet,rail:layout.rail,historyOpen:history.open,onNewChat:history.newConversation,vetEntry:vetEntry.available?vetEntry.open:null}),pet!==void 0?/* @__PURE__ */jsxRuntime.jsx(PetSetupNotice,{petRef:petRef2??null,pet:pet,onRegistered:pets.refresh}):null,
|
|
396
|
+
/* @__PURE__ */jsxRuntime.jsx(TopCardPill,{card:topCard,state:topCardState})]})}},[props.historyBar,showTopCard,topCard,topCardState]),chatOpts=react.useMemo(()=>buildChatOpts(petRef2,conversationId2),[petRef2,conversationId2]),chat=useEverfurChat(chatOpts),view=selectView2(chat),pets=useEverfurPets(),headerPet=react.useMemo(()=>headerPetOf(pets.pets,chat.petRef),[pets.pets,chat.petRef]),disclaimerClass=answerCards?.classNames?.disclaimer,footnoteInThread=answerFooter&&(view==="populated"||view==="empty"),barInThread=presentation.chatHistoryBar==="scroll"&&(view==="populated"||view==="empty"),footnote=/* @__PURE__ */jsxRuntime.jsx("p",{role:"note","data-everfur-footnote":"",className:footnoteInThread?disclaimerClass:void 0,style:footnoteInThread&&disclaimerClass?void 0:styles.footnote,children:forPet(CHAT_COPY.footnoteWeb,headerPet?.name)}),history=useHistoryPanel(chat),historyTrigger=react.useRef(null),threadEmpty=chat.messages.length===0,unread=(chat.hasUnreadThreads??false)||(chat.unreadCount??0)>0||history.rows.some(row=>row.unreadCount!==null&&row.unreadCount>0),historyBarNode=react.useMemo(()=>historyBar===void 0?null:/* @__PURE__ */jsxRuntime.jsx(HistoryBar,{bar:historyBar,history:history,triggerRef:historyTrigger,empty:threadEmpty,unread:unread}),[historyBar,history,threadEmpty,unread]),textingAsk=useChatTextingAsk(presentation.chatTextingAsk,chat,presentation.chatTextingAsk&&props.textingEntry!==false,props.header===false),onTopCardAsk=react.useCallback(prompt=>{chat.send(prompt)},[chat.send]),emptyOptions=react.useMemo(()=>({...starterPrompts!==void 0?{starterPrompts:starterPrompts}:{},...renderEmptyHeader!==void 0?{renderEmptyHeader:renderEmptyHeader}:{},...emptyState!==void 0?{emptyState:emptyState}:{},...followUpPolicy!==void 0?{followUpPolicy:followUpPolicy}:{},...initialAskCard!==void 0&&askPrompt!==null?{openingCard:{card:initialAskCard,prompt:askPrompt}}:{},...presentation.chatAnswerStyle==="cards"?{answerStyle:"cards",answerCards:answerCards}:{},...footnoteInThread?{answerFooter:footnote}:{},...showTopCard&&topCard!==void 0?{topCard:/* @__PURE__ */jsxRuntime.jsx(TopCard,{card:topCard,state:topCardState,ask:onTopCardAsk})}:{},...barInThread&&historyBarNode!==null?{threadTop:historyBarNode}:{},...textingAsk.line!==null?{threadAside:textingAsk.line,...textingAsk.stage!==null?{threadAsideKey:textingAsk.stage}:{}}:{}}),[starterPrompts,renderEmptyHeader,emptyState,followUpPolicy,initialAskCard,askPrompt,presentation.chatAnswerStyle,answerCards,footnoteInThread,headerPet?.name,disclaimerClass,showTopCard,topCard,topCardState,onTopCardAsk,barInThread,historyBarNode,textingAsk.line,textingAsk.stage]),inputRef=react.useRef(null),context=useEverfurContext(),announcement=useReplyAnnouncement(chat,headerPet?.name??null),addPet=react.useMemo(()=>onAddPet===void 0?null:()=>{callHost(onAddPet)},[onAddPet]),onSelectPet=react.useCallback(next=>{context.handle.setActivePet(next),callHost(onPetChange,next)},[context.handle,onPetChange]),barShown=historyBar!==void 0,historyLoad=history.load,historyOpen=history.open;react.useEffect(()=>{barShown&&!historyOpen&&historyLoad()},[barShown,historyOpen,chat.conversationId,historyLoad]);let layout=useChatLayout();useCheckinTarget(chat.openCheckin,checkinTarget),useInitialAsk(chat.askEverfur,chat.isBootstrapping,initialAsk,initialAskKey);let seed=react.useMemo(()=>sanitizeSeedPrompt(composerSeed),[composerSeed]),lifecyclePort=react.useMemo(()=>lifecycle===void 0?createBrowserLifecycle():lifecycle??void 0,[lifecycle]);useChatLifecycle(lifecyclePort,{conversationId:chat.conversationId===null?null:String(chat.conversationId),isTurnInFlight:chat.isStreaming,refresh:chat.refreshActiveThread});let urgency=useUrgencySurface(react.useMemo(()=>latestUrgencySource(chat.messages),[chat.messages])),vetOptions=react.useMemo(()=>chatVetVisitOptions(chat.petRef,vetReturnTo===void 0&&vetUsState===void 0&&vetPrefer===void 0?void 0:{returnTo:vetReturnTo,usState:vetUsState,prefer:vetPrefer}),[chat.petRef,vetReturnTo,vetUsState,vetPrefer]),vetVisit=useVetVisit(vetOptions),openVetVisit=vetVisit.open,vetEntry=react.useMemo(()=>({available:vetVisit.available,open:()=>{openVetVisit()}}),[vetVisit.available,openVetVisit]),checkinFindVet=react.useMemo(()=>vetEntry.available?vetEntry.open:onFindVet!==void 0?()=>{callHost(onFindVet,"emergency")}:null,[vetEntry,onFindVet]),vetPrep=react.useMemo(()=>onVetPrep!==void 0?()=>{callHost(onVetPrep,chat.petRef)}:vetEntry.available?vetEntry.open:null,[onVetPrep,chat.petRef,vetEntry]),attachments=useChatAttachments({transport:WEB_ATTACHMENT_TRANSPORT,...maxPerMessage!==void 0?{maxPerMessage:maxPerMessage}:{}}),sentImages=useSentImages(chat.messages),[lightbox,setLightbox]=react.useState(null),lightboxTrigger=react.useRef(null),onPreview=react.useCallback((image,trigger)=>{lightboxTrigger.current=trigger,setLightbox(image)},[]),closeLightbox=react.useCallback(()=>setLightbox(null),[]),onSelectPrompt=react.useCallback(prompt=>{chat.send(prompt),inputRef.current?.focus()},[chat.send]),onSend=react.useCallback((text3,images)=>{sentImages.record(text3,images),attachments.s3Keys.length>0?chat.send(text3,{imageS3Keys:attachments.s3Keys}):chat.send(text3),attachments.clear()},[chat.send,attachments,sentImages]),telemetry=context.runtime.registry?.services?.telemetry??null,rootRef=react.useRef(null);return useKeyboardFocusRing(rootRef,theme.color.brandInk),useMeasuredLayout(rootRef),/* @__PURE__ */jsxRuntime.jsxs("div",{ref:rootRef,className:className,style:{...styles.container,...style},children:[props.header===false?null:/* @__PURE__ */jsxRuntime.jsx(ChatHeader,{pets:pets.pets,activePet:headerPet,unread:unread,onOpenHistory:history.open?history.close:history.show,historyTriggerRef:historyTrigger,onSelectPet:onSelectPet,onAddPet:addPet,rail:layout.rail,historyOpen:history.open,onNewChat:history.newConversation,vetEntry:vetEntry.available?vetEntry.open:null,textingEntry:textingAsk.headerEntry}),pet!==void 0?/* @__PURE__ */jsxRuntime.jsx(PetSetupNotice,{petRef:petRef2??null,pet:pet,onRegistered:pets.refresh}):null,
|
|
394
397
|
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.split,children:[
|
|
395
|
-
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.main,children:[barInThread?null:historyBarNode,!presentation.chatGeneralBanner&&urgency.tier?.level==="general"?null:/* @__PURE__ */jsxRuntime.jsx(UrgencyBanner,{surface:urgency,vetEntry:vetEntry,renderVetAction:renderVetAction,onFindVet:onFindVet}),
|
|
398
|
+
/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.main,children:[props.header===false?textingAsk.headerEntry:null,barInThread?null:historyBarNode,!presentation.chatGeneralBanner&&urgency.tier?.level==="general"?null:/* @__PURE__ */jsxRuntime.jsx(UrgencyBanner,{surface:urgency,vetEntry:vetEntry,renderVetAction:renderVetAction,onFindVet:onFindVet}),
|
|
396
399
|
/* @__PURE__ */jsxRuntime.jsx("div",{style:styles.body,children:renderView(view,chat,onSelectPrompt,renderPending,headerPet,vetPrep,sentImages.imagesFor,onPreview,addPet,checkinFindVet,emptyOptions)}),textingAsk.runner,textingAsk.entry!==null?/* @__PURE__ */jsxRuntime.jsxs("div",{style:styles.composerBlock,children:[textingAsk.entry,footnoteInThread?null:footnote]}):/* @__PURE__ */jsxRuntime.jsx(Composer,{send:onSend,draftScope:chat.send,stop:chat.stop,isStreaming:chat.isStreaming,inputRef:inputRef,conversationId:chat.conversationId,seed:seed,draftStore:draftStore,attachments:attachmentsEnabled&&attachments.available?attachments:null,onPreview:onPreview,dictation:dictationEnabled,pet:headerPet,telemetry:telemetry,mood:composerMood(view,urgency.source?.level??null),compact:presentation.chatComposerStyle==="compact",petPlaceholder:presentation.chatComposerPlaceholder==="pet_name",dimEmptySend:presentation.chatSendButton==="dim_when_empty",children:footnoteInThread?null:footnote}),theme.meta.hidePoweredBy||hostPoweredBy?null:/* @__PURE__ */jsxRuntime.jsx("p",{style:styles.poweredBy,children:CHAT_COPY.poweredBy})]}),sheet?null:/* @__PURE__ */jsxRuntime.jsx(HistoryDrawer,{chat:chat,history:history,mode:layout.rail?"rail":"dialog",returnFocusTo:historyTrigger})]}),
|
|
397
400
|
/* @__PURE__ */jsxRuntime.jsx("div",{role:"status","aria-live":"polite","aria-atomic":"true",style:VISUALLY_HIDDEN,children:announcement}),sheet?/* @__PURE__ */jsxRuntime.jsx(HistorySheet,{chat:chat,history:history,sheet:props.historySheet,returnFocusTo:historyTrigger}):null,
|
|
398
401
|
/* @__PURE__ */jsxRuntime.jsx(AttachmentImageLightbox,{image:lightbox,onClose:closeLightbox,returnFocusTo:lightboxTrigger}),
|
package/dist/web/index.d.cts
CHANGED
|
@@ -1,43 +1,44 @@
|
|
|
1
|
+
/*! @everfur/sdk. Copyright (c) 2026 Strand Health Inc. dba Everfur. All rights reserved. Use is subject to the Everfur SDK License: https://docs.everfur.com/license */
|
|
1
2
|
import { ReactNode, CSSProperties } from 'react';
|
|
2
|
-
import { E as EverfurProviderProps } from '../context.d-
|
|
3
|
-
export { a as EverfurConfig, b as EverfurHandle, c as EverfurUser, U as UseEverfurPetProfileState, u as useCapability, d as useEverfur, e as useEverfurPetProfile, f as useEverfurTheme } from '../context.d-
|
|
3
|
+
import { E as EverfurProviderProps } from '../context.d-Ba8YyJpk.cjs';
|
|
4
|
+
export { a as EverfurConfig, b as EverfurHandle, c as EverfurUser, U as UseEverfurPetProfileState, u as useCapability, d as useEverfur, e as useEverfurPetProfile, f as useEverfurTheme } from '../context.d-Ba8YyJpk.cjs';
|
|
4
5
|
import { C as CapabilityName, a as CapabilityDecision } from '../resolve.d-CoQWUy1Y.cjs';
|
|
5
6
|
export { b as CapabilityDisabled, D as DisabledLevel } from '../resolve.d-CoQWUy1Y.cjs';
|
|
6
|
-
import { U as UrgencyDisplayLevel, E as EverfurChatDraftStore } from '../attachments.d-
|
|
7
|
-
export { C as ChatFeedbackReason, a as ChatFeedbackReasonOption, b as ChatSentiment, c as UseChatAttachmentsOptions, d as UseChatAttachmentsState, e as UseEverfurChatState, f as UseEverfurPetsState, u as useChatAttachments, g as useEverfurChat, h as useEverfurPets } from '../attachments.d-
|
|
7
|
+
import { U as UrgencyDisplayLevel, E as EverfurChatDraftStore } from '../attachments.d-DRHsJkni.cjs';
|
|
8
|
+
export { C as ChatFeedbackReason, a as ChatFeedbackReasonOption, b as ChatSentiment, c as UseChatAttachmentsOptions, d as UseChatAttachmentsState, e as UseEverfurChatState, f as UseEverfurPetsState, u as useChatAttachments, g as useEverfurChat, h as useEverfurPets } from '../attachments.d-DRHsJkni.cjs';
|
|
8
9
|
import { P as PetRef, C as ConversationId } from '../ids.d-B2GAAifq.cjs';
|
|
9
10
|
export { B as Brand, a as ClientId, b as ResponseId, U as UserRef, _ as __brand, c as conversationId, p as petRef, u as userRef } from '../ids.d-B2GAAifq.cjs';
|
|
10
|
-
import { a as ChatCheckinTarget } from '../ports.d-
|
|
11
|
-
export { C as ChatCheckin, b as ChatConversation, c as ChatConversationListOptions, d as ChatConversationPage, e as ChatFeedbackReceipt, f as ChatFeedbackType, g as ChatHistoryOptions, i as ChatMessage, h as ChatMessagePage, j as ChatMessageRole, k as ChatMessageSender, l as ChatStatus, m as Citation, P as PresignedPolicy, S as SendOptions, U as UploadPort } from '../ports.d-
|
|
11
|
+
import { a as ChatCheckinTarget } from '../ports.d-ClbPRUtx.cjs';
|
|
12
|
+
export { C as ChatCheckin, b as ChatConversation, c as ChatConversationListOptions, d as ChatConversationPage, e as ChatFeedbackReceipt, f as ChatFeedbackType, g as ChatHistoryOptions, i as ChatMessage, h as ChatMessagePage, j as ChatMessageRole, k as ChatMessageSender, l as ChatStatus, m as Citation, P as PresignedPolicy, S as SendOptions, U as UploadPort } from '../ports.d-ClbPRUtx.cjs';
|
|
12
13
|
import { i as EverfurPresentationInput } from '../presentation.d-vy8kTGfR.cjs';
|
|
13
14
|
export { D as DEFAULT_PRESENTATION, E as EverfurChatAnswerStyle, a as EverfurChatComposerPlaceholder, b as EverfurChatComposerStyle, c as EverfurChatHistoryBarSetting, d as EverfurChatHistoryStyle, e as EverfurChatSendButtonSetting, f as EverfurChatTopCardSetting, g as EverfurHealthPlanLayout, h as EverfurPresentation, l as EverfurPresentationField, j as EverfurSafetyDisclaimerPlacement, p as parsePresentation, r as resolvePresentation } from '../presentation.d-vy8kTGfR.cjs';
|
|
14
|
-
import { P as PetProfileInput } from '../petsRepository.d-
|
|
15
|
-
export { a as PetProfilePatch, R as RegisteredPet, W as WidgetPet, b as WidgetPetProfile } from '../petsRepository.d-
|
|
15
|
+
import { P as PetProfileInput } from '../petsRepository.d-Bwfe8yuR.cjs';
|
|
16
|
+
export { a as PetProfilePatch, R as RegisteredPet, W as WidgetPet, b as WidgetPetProfile } from '../petsRepository.d-Bwfe8yuR.cjs';
|
|
16
17
|
import { L as LifecyclePort } from '../LifecyclePort.d-Cr1p33a7.cjs';
|
|
17
18
|
import { E as EverfurStarterPrompt } from '../quickPrompts.d-NM_81Jc1.cjs';
|
|
18
|
-
import { h as EverfurChatEmptyHeaderContext, i as EverfurChatEmptyState, j as EverfurChatHistoryBar, k as EverfurChatOpeningCard, l as EverfurChatAnswerCards, E as EverfurChatTopCard, m as EverfurChatHistorySheet, b as EverfurHealthPlanProps } from '../threadOptions.d-
|
|
19
|
-
export { n as EverfurChatAnswerCard, o as EverfurChatAnswerContext, p as EverfurChatFollowUpAction } from '../threadOptions.d-
|
|
20
|
-
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-
|
|
21
|
-
export { C as CheckinAnswer, a as CheckinOutcome, W as WatchCase } from '../casesRepository.d-
|
|
19
|
+
import { h as EverfurChatEmptyHeaderContext, i as EverfurChatEmptyState, j as EverfurChatHistoryBar, k as EverfurChatOpeningCard, l as EverfurChatAnswerCards, E as EverfurChatTopCard, m as EverfurChatHistorySheet, b as EverfurHealthPlanProps } from '../threadOptions.d-DBrmOwmb.cjs';
|
|
20
|
+
export { n as EverfurChatAnswerCard, o as EverfurChatAnswerContext, p as EverfurChatFollowUpAction } from '../threadOptions.d-DBrmOwmb.cjs';
|
|
21
|
+
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-BQgrIDdu.cjs';
|
|
22
|
+
export { C as CheckinAnswer, a as CheckinOutcome, W as WatchCase } from '../casesRepository.d-BMOnT1fg.cjs';
|
|
22
23
|
export { E as EverfurError, a as EverfurErrorCategory, b as EverfurErrorCode, c as categoryFor, i as isRetryableCode, u as userFacingError } from '../EverfurError.d-8NHtlgzA.cjs';
|
|
23
|
-
export { A as AttachmentError, a as AttachmentErrorCode, b as AttachmentOutcome, c as AttachmentQueue, d as AttachmentState, e as AttachmentStatus } from '../attachments.d-
|
|
24
|
+
export { A as AttachmentError, a as AttachmentErrorCode, b as AttachmentOutcome, c as AttachmentQueue, d as AttachmentState, e as AttachmentStatus } from '../attachments.d-DRUC35Ti.cjs';
|
|
24
25
|
import { U as UploadTransport, F as FileHandle } from '../ports.d-BX4f4UsB.cjs';
|
|
25
26
|
export { b as FilePort, a as UploadPolicyWire } from '../ports.d-BX4f4UsB.cjs';
|
|
26
27
|
import { C as CaptureRecordsSignature } from '../clinicRequestProps.d-1dCtouGA.cjs';
|
|
27
|
-
import { E as EverfurRecordsPageProps } from '../RecordsPage.d-
|
|
28
|
-
import { E as EverfurIntroCopy, a as EverfurIntroBlank, b as EverfurRecordsRequested, d as EverfurRecordsLanded } from '../introEvents.d-
|
|
28
|
+
import { E as EverfurRecordsPageProps } from '../RecordsPage.d-Dq5gpQG0.cjs';
|
|
29
|
+
import { E as EverfurIntroCopy, a as EverfurIntroBlank, b as EverfurRecordsRequested, d as EverfurRecordsLanded } from '../introEvents.d-Dr34KIaD.cjs';
|
|
29
30
|
import { a as EverfurTabId, E as EverfurTabsCopy } from '../tabsModel.d-BfIQg6yS.cjs';
|
|
30
31
|
export { b as EVERFUR_TABS_COPY } from '../tabsModel.d-BfIQg6yS.cjs';
|
|
31
32
|
export { E as EVERFUR_RECORDS_LANDED_EVENT, a as EVERFUR_RECORDS_REQUESTED_EVENT } from '../introEvents.d-dS3fJCH1.cjs';
|
|
32
|
-
export { L as useEverfurPresentation } from '../usePresentation.d-
|
|
33
|
+
export { L as useEverfurPresentation } from '../usePresentation.d-BcdCIuEU.cjs';
|
|
33
34
|
import { K as KvPort } from '../cacheEpoch.d-DknKn3S0.cjs';
|
|
34
35
|
export { I as ImageCachePort } from '../cacheEpoch.d-DknKn3S0.cjs';
|
|
35
|
-
export { E as EverfurClientEvent, a as EverfurEventHandler, L as LogLevel, b as LogRecord, c as LogSink, P as PrepareOptions, d as PrepareResult, e as PrepareStatus, S as SecureStorePort } from '../runtimeTypes.d-
|
|
36
|
+
export { E as EverfurClientEvent, a as EverfurEventHandler, L as LogLevel, b as LogRecord, c as LogSink, P as PrepareOptions, d as PrepareResult, e as PrepareStatus, S as SecureStorePort } from '../runtimeTypes.d-Cv38YuzP.cjs';
|
|
36
37
|
export { T as TelemetryPort } from '../TelemetryPort.d-BDNr00hu.cjs';
|
|
37
38
|
export { E as ErrorPolicyPort } from '../ErrorPolicyPort.d-DirW9hgO.cjs';
|
|
38
39
|
export { C as CameraPort, a as CaptureOptions, M as MediaSource } from '../CameraPort.d-Cv31Pz7g.cjs';
|
|
39
40
|
export { a as EverfurConfigError, E as EverfurResult, b as EverfurThrownError, i as isErr, c as isOk, u as unwrap } from '../EverfurResult.d-BFH-3s6E.cjs';
|
|
40
|
-
export { M as MintedToken, T as TokenProvider } from '../identity.d-
|
|
41
|
+
export { M as MintedToken, T as TokenProvider } from '../identity.d-HbwYQ4-z.cjs';
|
|
41
42
|
export { E as EverfurFaceStyle, a as EverfurThemeAdjustment, f as face, h as headingFace, p as previewTheme, t as themeAdjustments } from '../typeStyle.d-DmlwyJq-.cjs';
|
|
42
43
|
import { E as EverfurThemeInput } from '../branding.d-Bbc6p1XY.cjs';
|
|
43
44
|
export { A as APPEARANCE_PRESETS, a as APPEARANCE_PRESET_NAMES, b as APPEARANCE_SIZE_RANGES, c as EverfurAppearance, d as EverfurAppearanceFont, e as EverfurAppearancePreset, f as EverfurAppearanceRules, g as EverfurAppearanceVariables, h as EverfurThemeFontFaceKey, i as EverfurThemeFontUrlsInput, j as EverfurThemeFontsInput, k as EverfurThemeSlotInput, l as EverfurThemeSlotsInput, m as expandAppearance } from '../branding.d-Bbc6p1XY.cjs';
|
|
@@ -45,14 +46,14 @@ import { d as EverfurFontWeight, m as EverfurTheme, a as EverfurFontFaceKey } fr
|
|
|
45
46
|
export { E as EverfurColorTokens, b as EverfurFontFamilies, c as EverfurFontSource, e as EverfurLetterSpacingTokens, f as EverfurLineHeightTokens, g as EverfurMotionDurationTokens, h as EverfurMotionTokens, i as EverfurRadiusTokens, j as EverfurSpaceTokens, k as EverfurSpringToken, l as EverfurTextColorTokens, n as EverfurThemeMeta, o as EverfurThemeSlot, p as EverfurThemeSlotKey, q as EverfurThemeSlotName, r as EverfurThemeSlots, s as EverfurTypeSizeTokens, t as EverfurTypeTokens, u as EverfurWeightTokens, T as THEME_SLOT_KEYS, v as THEME_SLOT_KEYS_BY_SLOT, w as THEME_SLOT_NAMES, x as themeSlotKeysFor } from '../tokens.d-BUVqme2D.cjs';
|
|
46
47
|
export { b as PetActivityLevel, c as PetAllergy, d as PetAllergySeverity, e as PetBirthDatePrecision, f as PetCondition, a as PetHealthProfile, P as PetHealthProfileInput, g as PetIndoorOutdoor, h as PetMedication, i as PetSex } from '../profile.d-CSs1wlXT.cjs';
|
|
47
48
|
export { C as CanonicalPetSpecies, c as canonicalPetSpecies } from '../species.d-BXAIMh7I.cjs';
|
|
48
|
-
import '../requestFunnel.d-
|
|
49
|
-
import '../focus.d-
|
|
49
|
+
import '../requestFunnel.d-JoqddYSx.cjs';
|
|
50
|
+
import '../focus.d-BHm_QtQ9.cjs';
|
|
50
51
|
import '../clinicModels.d-BXgKZqDb.cjs';
|
|
51
52
|
import '../models.d-BSqvbTE1.cjs';
|
|
52
53
|
import '../useRecords.d-BYNX01El.cjs';
|
|
53
54
|
import '../features.d-DrQxTw3-.cjs';
|
|
54
|
-
import '../screenProps.d-
|
|
55
|
-
import '../clinicBatch.d-
|
|
55
|
+
import '../screenProps.d-C-AuHoyF.cjs';
|
|
56
|
+
import '../clinicBatch.d-C5deJ4xY.cjs';
|
|
56
57
|
import '../recordsAsk.d-C5CGSi3j.cjs';
|
|
57
58
|
import '../sheetSeam.d-BBuEIVsa.cjs';
|
|
58
59
|
|
|
@@ -235,6 +236,14 @@ interface EverfurChatProps {
|
|
|
235
236
|
* Without the header there is no control that opens the history drawer on a narrow box.
|
|
236
237
|
*/
|
|
237
238
|
readonly header?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Whether the chat draws its `Turn on SMS Chat` chip for a signed-in member who has not linked a phone number
|
|
241
|
+
* (your tenant grants texting and its `chat_texting_ask` setting is on). The chip opens the number entry in the
|
|
242
|
+
* composer's place whatever the in-chat ask's schedule says, and goes once a number is linked. It sits in the header,
|
|
243
|
+
* or, with `header={false}`, on its own row at the top of the thread. Default `true`. Pass `false` to keep only the
|
|
244
|
+
* scheduled line in the thread.
|
|
245
|
+
*/
|
|
246
|
+
readonly textingEntry?: boolean;
|
|
238
247
|
/**
|
|
239
248
|
* Your own starter chips for the empty thread, in place of Everfur's four (the vet-prep chip included). Each chip
|
|
240
249
|
* shows its `label`, sends its `prompt` (the label when absent) as the member's next message, and is filled with
|