@chatsdk-dev/elements 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{api-CIYPz72L.d.ts → api-BP4g92-0.d.ts} +1 -1
- package/dist/{api-CIYPz72L.d.ts.map → api-BP4g92-0.d.ts.map} +1 -1
- package/dist/approval-BODP4NVA.d.ts +5 -0
- package/dist/approval-BODP4NVA.d.ts.map +1 -0
- package/dist/avatar-CK5WGu6N.d.ts +5 -0
- package/dist/avatar-CK5WGu6N.d.ts.map +1 -0
- package/dist/{callbacks-PIvHXeEI.d.ts → callbacks-CQelTSwD.d.ts} +1 -1
- package/dist/{callbacks-PIvHXeEI.d.ts.map → callbacks-CQelTSwD.d.ts.map} +1 -1
- package/dist/chat-element-BbBl5CDM.d.ts +131 -0
- package/dist/chat-element-BbBl5CDM.d.ts.map +1 -0
- package/dist/chat-error-CST-PRdq.d.ts +15 -0
- package/dist/chat-error-CST-PRdq.d.ts.map +1 -0
- package/dist/{chatsdk-provider-BhlChLFd.d.ts → chatsdk-provider-t1GEgRPY.d.ts} +2 -2
- package/dist/chatsdk-provider-t1GEgRPY.d.ts.map +1 -0
- package/dist/{config-CqihvSgz.d.ts → config-BGIY5Hkg.d.ts} +20 -19
- package/dist/config-BGIY5Hkg.d.ts.map +1 -0
- package/dist/config-Wk7C7AJs.js +95 -0
- package/dist/config-Wk7C7AJs.js.map +1 -0
- package/dist/config-f4Go--5s.d.ts +194 -0
- package/dist/config-f4Go--5s.d.ts.map +1 -0
- package/dist/content-BoiPVwgM.d.ts +10 -0
- package/dist/content-BoiPVwgM.d.ts.map +1 -0
- package/dist/{context-aSaHw-ac.d.ts → context-D4dOffYT.d.ts} +1 -1
- package/dist/context-D4dOffYT.d.ts.map +1 -0
- package/dist/conversation-CtpcctHL.d.ts +8 -0
- package/dist/conversation-CtpcctHL.d.ts.map +1 -0
- package/dist/copy-BPB94kUd.d.ts +5 -0
- package/dist/copy-BPB94kUd.d.ts.map +1 -0
- package/dist/{element-provider-C_nBsftD.d.ts → element-provider-C95jVJV9.d.ts} +4 -5
- package/dist/element-provider-C95jVJV9.d.ts.map +1 -0
- package/dist/features/chat/chat-element.d.ts +2 -2
- package/dist/features/chat/chat-element.js +2 -2
- package/dist/features/chat/conversation/conversation.d.ts +2 -0
- package/dist/features/chat/conversation/conversation.js +73 -0
- package/dist/features/chat/conversation/conversation.js.map +1 -0
- package/dist/features/chat/conversation/message/activity.d.ts +12 -0
- package/dist/features/chat/conversation/message/activity.d.ts.map +1 -0
- package/dist/features/chat/conversation/message/activity.js +48 -0
- package/dist/features/chat/conversation/message/activity.js.map +1 -0
- package/dist/features/chat/conversation/message/approval.d.ts +2 -0
- package/dist/features/chat/conversation/message/approval.js +62 -0
- package/dist/features/chat/conversation/message/approval.js.map +1 -0
- package/dist/features/chat/conversation/message/avatar.d.ts +2 -0
- package/dist/features/chat/conversation/message/avatar.js +18 -0
- package/dist/features/chat/conversation/message/avatar.js.map +1 -0
- package/dist/features/chat/conversation/message/content.d.ts +2 -0
- package/dist/features/chat/conversation/message/content.js +11 -0
- package/dist/features/chat/conversation/message/content.js.map +1 -0
- package/dist/features/chat/conversation/message/copy.d.ts +2 -0
- package/dist/features/chat/conversation/message/copy.js +30 -0
- package/dist/features/chat/conversation/message/copy.js.map +1 -0
- package/dist/features/chat/conversation/message/feedback.d.ts +2 -0
- package/dist/features/chat/conversation/message/feedback.js +36 -0
- package/dist/features/chat/conversation/message/feedback.js.map +1 -0
- package/dist/features/chat/conversation/message/footer.d.ts +2 -0
- package/dist/features/chat/conversation/message/footer.js +20 -0
- package/dist/features/chat/conversation/message/footer.js.map +1 -0
- package/dist/features/chat/conversation/message/frame.d.ts +2 -0
- package/dist/features/chat/conversation/message/frame.js +18 -0
- package/dist/features/chat/conversation/message/frame.js.map +1 -0
- package/dist/features/chat/conversation/message/index.d.ts +2 -0
- package/dist/features/chat/conversation/message/index.js +2 -0
- package/dist/features/chat/conversation/message/index.parts.d.ts +22 -0
- package/dist/features/chat/conversation/message/index.parts.d.ts.map +1 -0
- package/dist/features/chat/conversation/message/index.parts.js +36 -0
- package/dist/features/chat/conversation/message/index.parts.js.map +1 -0
- package/dist/features/chat/conversation/message/message.d.ts +1 -0
- package/dist/features/chat/conversation/message/message.js +1 -0
- package/dist/features/chat/conversation/message/part.d.ts +2 -0
- package/dist/features/chat/conversation/message/part.js +35 -0
- package/dist/features/chat/conversation/message/part.js.map +1 -0
- package/dist/features/chat/conversation/message/provider.d.ts +2 -0
- package/dist/features/chat/conversation/message/provider.js +26 -0
- package/dist/features/chat/conversation/message/provider.js.map +1 -0
- package/dist/features/chat/conversation/message/reasoning.d.ts +2 -0
- package/dist/features/chat/conversation/message/reasoning.js +33 -0
- package/dist/features/chat/conversation/message/reasoning.js.map +1 -0
- package/dist/features/chat/conversation/message/sources.d.ts +2 -0
- package/dist/features/chat/conversation/message/sources.js +20 -0
- package/dist/features/chat/conversation/message/sources.js.map +1 -0
- package/dist/features/chat/conversation/message/text.d.ts +2 -0
- package/dist/features/chat/conversation/message/text.js +29 -0
- package/dist/features/chat/conversation/message/text.js.map +1 -0
- package/dist/features/chat/conversation/message/timestamp.d.ts +2 -0
- package/dist/features/chat/conversation/message/timestamp.js +36 -0
- package/dist/features/chat/conversation/message/timestamp.js.map +1 -0
- package/dist/features/chat/conversation/message/tool.d.ts +2 -0
- package/dist/features/chat/conversation/message/tool.js +56 -0
- package/dist/features/chat/conversation/message/tool.js.map +1 -0
- package/dist/features/chat/error/chat-error.d.ts +2 -0
- package/dist/features/chat/error/chat-error.js +46 -0
- package/dist/features/chat/error/chat-error.js.map +1 -0
- package/dist/features/chat/frame/frame.d.ts +2 -0
- package/dist/features/chat/frame/frame.js +52 -0
- package/dist/features/chat/frame/frame.js.map +1 -0
- package/dist/features/chat/frame/header-menu.d.ts +8 -0
- package/dist/features/chat/frame/header-menu.d.ts.map +1 -0
- package/dist/features/chat/{chat-header/chat-menu.js → frame/header-menu.js} +12 -13
- package/dist/features/chat/frame/header-menu.js.map +1 -0
- package/dist/features/chat/frame/header.d.ts +2 -0
- package/dist/features/chat/frame/header.js +50 -0
- package/dist/features/chat/frame/header.js.map +1 -0
- package/dist/features/chat/history/history-empty.d.ts +8 -0
- package/dist/features/chat/history/history-empty.d.ts.map +1 -0
- package/dist/features/chat/{chat-history/chat-history-empty.js → history/history-empty.js} +9 -8
- package/dist/features/chat/history/history-empty.js.map +1 -0
- package/dist/features/chat/history/history.d.ts +2 -0
- package/dist/features/chat/history/history.js +65 -0
- package/dist/features/chat/history/history.js.map +1 -0
- package/dist/features/chat/history/use-history.d.ts +2 -0
- package/dist/features/chat/history/use-history.js +30 -0
- package/dist/features/chat/history/use-history.js.map +1 -0
- package/dist/features/chat/index.d.ts +2 -2
- package/dist/features/chat/index.js +29 -2
- package/dist/features/chat/index.js.map +1 -0
- package/dist/features/chat/index.parts.d.ts +9 -0
- package/dist/features/chat/index.parts.js +24 -0
- package/dist/features/chat/index.parts.js.map +1 -0
- package/dist/features/chat/main/main.d.ts +2 -0
- package/dist/features/chat/main/main.js +40 -0
- package/dist/features/chat/main/main.js.map +1 -0
- package/dist/features/chat/main/prompt-input.d.ts +2 -0
- package/dist/features/chat/main/prompt-input.js +70 -0
- package/dist/features/chat/main/prompt-input.js.map +1 -0
- package/dist/features/chat/main/use-create-new-chat.d.ts +2 -0
- package/dist/features/chat/main/use-create-new-chat.js +24 -0
- package/dist/features/chat/main/use-create-new-chat.js.map +1 -0
- package/dist/features/chat/main/use-prompt-input.d.ts +2 -0
- package/dist/features/chat/main/use-prompt-input.js +27 -0
- package/dist/features/chat/main/use-prompt-input.js.map +1 -0
- package/dist/features/chat/provider/provider.d.ts +2 -0
- package/dist/features/chat/provider/provider.js +3 -0
- package/dist/features/chat/provider/use-ai-sdk-chat.d.ts +26 -0
- package/dist/features/chat/provider/use-ai-sdk-chat.d.ts.map +1 -0
- package/dist/features/chat/provider/use-ai-sdk-chat.js +3 -0
- package/dist/features/chat/provider/use-create-chat-store.d.ts +2 -0
- package/dist/features/chat/provider/use-create-chat-store.js +42 -0
- package/dist/features/chat/provider/use-create-chat-store.js.map +1 -0
- package/dist/features/chat/provider/use-visible-messages.d.ts +13 -0
- package/dist/features/chat/provider/use-visible-messages.d.ts.map +1 -0
- package/dist/features/chat/provider/use-visible-messages.js +23 -0
- package/dist/features/chat/provider/use-visible-messages.js.map +1 -0
- package/dist/features/chat/queries/query-keys.d.ts +3 -3
- package/dist/features/chat/queries/query-keys.d.ts.map +1 -1
- package/dist/features/chat/queries/query-keys.js +5 -5
- package/dist/features/chat/queries/query-keys.js.map +1 -1
- package/dist/features/chat/queries/use-create-conversation-mutation.d.ts +13 -14
- package/dist/features/chat/queries/use-create-conversation-mutation.d.ts.map +1 -1
- package/dist/features/chat/queries/use-create-conversation-mutation.js +4 -4
- package/dist/features/chat/queries/use-create-conversation-mutation.js.map +1 -1
- package/dist/features/chat/queries/use-get-agent-query.d.ts +2 -0
- package/dist/features/chat/queries/use-get-agent-query.js +2 -0
- package/dist/features/chat/queries/use-get-conversation-query.d.ts +2 -72
- package/dist/features/chat/queries/use-get-conversation-query.js +1 -1
- package/dist/features/chat/queries/use-list-conversations-query.d.ts +2 -33
- package/dist/features/chat/queries/use-list-conversations-query.js +23 -1
- package/dist/features/chat/queries/use-list-conversations-query.js.map +1 -0
- package/dist/features/chat/queries/use-record-feedback-mutation.d.ts +26 -0
- package/dist/features/chat/queries/use-record-feedback-mutation.d.ts.map +1 -0
- package/dist/features/chat/queries/use-record-feedback-mutation.js +2 -0
- package/dist/features/chat/utils.d.ts +7 -2
- package/dist/features/chat/utils.d.ts.map +1 -1
- package/dist/features/chat/utils.js +12 -1
- package/dist/features/chat/utils.js.map +1 -1
- package/dist/features/data-fetching/use-api-client.d.ts +1 -3
- package/dist/features/data-fetching/use-api-client.d.ts.map +1 -1
- package/dist/features/data-fetching/use-api-client.js +1 -1
- package/dist/features/element/chatsdk-provider.d.ts +1 -1
- package/dist/features/element/chatsdk-provider.js +5 -5
- package/dist/features/element/chatsdk-provider.js.map +1 -1
- package/dist/features/element/element-provider.d.ts +1 -1
- package/dist/features/element/element-provider.js +14 -9
- package/dist/features/element/element-provider.js.map +1 -1
- package/dist/features/element/store.d.ts +1 -1
- package/dist/features/element/store.js.map +1 -1
- package/dist/features/element/types/api.d.ts +1 -1
- package/dist/features/element/types/callbacks.d.ts +1 -1
- package/dist/features/element/types/config.d.ts +1 -1
- package/dist/features/element/types/context.d.ts +1 -1
- package/dist/features/element/types/locale.d.ts +1 -1
- package/dist/features/element/types/theme.d.ts +1 -1
- package/dist/features/element/types/translations.d.ts +1 -1
- package/dist/features/element/use-element-config.d.ts +14 -33
- package/dist/features/element/use-element-config.d.ts.map +1 -1
- package/dist/features/element/use-element-config.js +7 -15
- package/dist/features/element/use-element-config.js.map +1 -1
- package/dist/features/element/use-merge-global-config.d.ts +6 -7
- package/dist/features/element/use-merge-global-config.d.ts.map +1 -1
- package/dist/features/element/use-merge-global-config.js +2 -2
- package/dist/features/element/use-merge-global-config.js.map +1 -1
- package/dist/features/element/utils.d.ts +1 -1
- package/dist/features/element/utils.js.map +1 -1
- package/dist/features/errors/use-app-error-message.d.ts +2 -0
- package/dist/features/errors/use-app-error-message.js +25 -0
- package/dist/features/errors/use-app-error-message.js.map +1 -0
- package/dist/features/logging/logger-provider.d.ts +2 -0
- package/dist/features/logging/logger-provider.js +20 -0
- package/dist/features/logging/logger-provider.js.map +1 -0
- package/dist/feedback-hofC2MHC.d.ts +5 -0
- package/dist/feedback-hofC2MHC.d.ts.map +1 -0
- package/dist/footer-BdcVsDmw.d.ts +11 -0
- package/dist/footer-BdcVsDmw.d.ts.map +1 -0
- package/dist/frame-BCN71hMj.d.ts +17 -0
- package/dist/frame-BCN71hMj.d.ts.map +1 -0
- package/dist/frame-D_ce2ErP.d.ts +10 -0
- package/dist/frame-D_ce2ErP.d.ts.map +1 -0
- package/dist/header-BDGB3zKD.d.ts +8 -0
- package/dist/header-BDGB3zKD.d.ts.map +1 -0
- package/dist/history-DDUj4LMJ.d.ts +8 -0
- package/dist/history-DDUj4LMJ.d.ts.map +1 -0
- package/dist/i18n/config.d.ts +1 -1
- package/dist/i18n/config.js +1 -1
- package/dist/i18n/i18next.d.ts +1 -1377
- package/dist/i18n/i18next.d.ts.map +1 -1
- package/dist/i18n/i18next.js +1 -2
- package/dist/i18n/i18next.js.map +1 -1
- package/dist/i18n/utils.d.ts +1 -1
- package/dist/i18n/utils.d.ts.map +1 -1
- package/dist/i18n/utils.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.js +12 -59
- package/dist/index.js.map +1 -1
- package/dist/{locale-W5Kyyi4X.d.ts → locale-v_zPGRhE.d.ts} +2 -2
- package/dist/locale-v_zPGRhE.d.ts.map +1 -0
- package/dist/logger-provider-whBIV3Gt.d.ts +16 -0
- package/dist/logger-provider-whBIV3Gt.d.ts.map +1 -0
- package/dist/main-D8VgMjmL.d.ts +15 -0
- package/dist/main-D8VgMjmL.d.ts.map +1 -0
- package/dist/part-C8ZA6iZn.d.ts +25 -0
- package/dist/part-C8ZA6iZn.d.ts.map +1 -0
- package/dist/prompt-input-bclKhGu3.d.ts +15 -0
- package/dist/prompt-input-bclKhGu3.d.ts.map +1 -0
- package/dist/provider-CkkKc2aq.d.ts +21 -0
- package/dist/provider-CkkKc2aq.d.ts.map +1 -0
- package/dist/provider-Cps0PPXa.js +383 -0
- package/dist/provider-Cps0PPXa.js.map +1 -0
- package/dist/reasoning-BRNu_n6T.d.ts +5 -0
- package/dist/reasoning-BRNu_n6T.d.ts.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/sources-BXoSxNYc.d.ts +5 -0
- package/dist/sources-BXoSxNYc.d.ts.map +1 -0
- package/dist/{store-CGX9oRlE.d.ts → store-CkswgmIQ.d.ts} +8 -10
- package/dist/store-CkswgmIQ.d.ts.map +1 -0
- package/dist/styles.css +1677 -948
- package/dist/text-Cio_Hj_h.d.ts +5 -0
- package/dist/text-Cio_Hj_h.d.ts.map +1 -0
- package/dist/{theme-Cb-RBWbR.d.ts → theme-K7rbPHc1.d.ts} +1 -1
- package/dist/{theme-Cb-RBWbR.d.ts.map → theme-K7rbPHc1.d.ts.map} +1 -1
- package/dist/timestamp-CbU3bLa3.d.ts +5 -0
- package/dist/timestamp-CbU3bLa3.d.ts.map +1 -0
- package/dist/tool-DskTWxZb.d.ts +5 -0
- package/dist/tool-DskTWxZb.d.ts.map +1 -0
- package/dist/use-app-error-message-DAHQ4oR_.d.ts +12 -0
- package/dist/use-app-error-message-DAHQ4oR_.d.ts.map +1 -0
- package/dist/use-create-chat-store-Ccd5tvho.d.ts +26 -0
- package/dist/use-create-chat-store-Ccd5tvho.d.ts.map +1 -0
- package/dist/use-create-new-chat-H4kM3hPt.d.ts +7 -0
- package/dist/use-create-new-chat-H4kM3hPt.d.ts.map +1 -0
- package/dist/use-get-agent-query-hQ4uOjfL.d.ts +10 -0
- package/dist/use-get-agent-query-hQ4uOjfL.d.ts.map +1 -0
- package/dist/use-get-conversation-query-D5bRlewH.d.ts +73 -0
- package/dist/use-get-conversation-query-D5bRlewH.d.ts.map +1 -0
- package/dist/use-history-DH2KkVDP.d.ts +30 -0
- package/dist/use-history-DH2KkVDP.d.ts.map +1 -0
- package/dist/use-list-conversations-query-Ny-nP5cZ.d.ts +29 -0
- package/dist/use-list-conversations-query-Ny-nP5cZ.d.ts.map +1 -0
- package/package.json +27 -24
- package/dist/chat-element-CCsDDFif.js +0 -441
- package/dist/chat-element-CCsDDFif.js.map +0 -1
- package/dist/chat-element-CSpa62Te.d.ts +0 -53
- package/dist/chat-element-CSpa62Te.d.ts.map +0 -1
- package/dist/chatsdk-provider-BhlChLFd.d.ts.map +0 -1
- package/dist/common/utils.d.ts +0 -14
- package/dist/common/utils.d.ts.map +0 -1
- package/dist/common/utils.js +0 -26
- package/dist/common/utils.js.map +0 -1
- package/dist/components/info-card.d.ts +0 -23
- package/dist/components/info-card.d.ts.map +0 -1
- package/dist/components/info-card.js +0 -38
- package/dist/components/info-card.js.map +0 -1
- package/dist/config-BigIL6TQ.js +0 -29
- package/dist/config-BigIL6TQ.js.map +0 -1
- package/dist/config-CqihvSgz.d.ts.map +0 -1
- package/dist/config-D_jVTH_D.d.ts +0 -58
- package/dist/config-D_jVTH_D.d.ts.map +0 -1
- package/dist/context-aSaHw-ac.d.ts.map +0 -1
- package/dist/element-provider-C_nBsftD.d.ts.map +0 -1
- package/dist/features/chat/chat-card.d.ts +0 -7
- package/dist/features/chat/chat-card.d.ts.map +0 -1
- package/dist/features/chat/chat-card.js +0 -2
- package/dist/features/chat/chat-header/chat-header.d.ts +0 -12
- package/dist/features/chat/chat-header/chat-header.d.ts.map +0 -1
- package/dist/features/chat/chat-header/chat-header.js +0 -2
- package/dist/features/chat/chat-header/chat-menu.d.ts +0 -7
- package/dist/features/chat/chat-header/chat-menu.d.ts.map +0 -1
- package/dist/features/chat/chat-header/chat-menu.js.map +0 -1
- package/dist/features/chat/chat-history/chat-history-empty.d.ts +0 -7
- package/dist/features/chat/chat-history/chat-history-empty.d.ts.map +0 -1
- package/dist/features/chat/chat-history/chat-history-empty.js.map +0 -1
- package/dist/features/chat/chat-history/chat-history.d.ts +0 -7
- package/dist/features/chat/chat-history/chat-history.d.ts.map +0 -1
- package/dist/features/chat/chat-history/chat-history.js +0 -2
- package/dist/features/chat/chat-main/chat-main.d.ts +0 -10
- package/dist/features/chat/chat-main/chat-main.d.ts.map +0 -1
- package/dist/features/chat/chat-main/chat-main.js +0 -3
- package/dist/features/chat/chat-main/use-chat.d.ts +0 -23
- package/dist/features/chat/chat-main/use-chat.d.ts.map +0 -1
- package/dist/features/chat/chat-main/use-chat.js +0 -3
- package/dist/features/chat/chat-main/use-initial-messages.d.ts +0 -22
- package/dist/features/chat/chat-main/use-initial-messages.d.ts.map +0 -1
- package/dist/features/chat/chat-main/use-initial-messages.js +0 -2
- package/dist/features/chat/chat-prompt-input.d.ts +0 -24
- package/dist/features/chat/chat-prompt-input.d.ts.map +0 -1
- package/dist/features/chat/chat-prompt-input.js +0 -3
- package/dist/features/chat/chat.context.d.ts +0 -28
- package/dist/features/chat/chat.context.d.ts.map +0 -1
- package/dist/features/chat/chat.context.js +0 -10
- package/dist/features/chat/chat.context.js.map +0 -1
- package/dist/features/chat/queries/use-get-chat-query.d.ts +0 -13
- package/dist/features/chat/queries/use-get-chat-query.d.ts.map +0 -1
- package/dist/features/chat/queries/use-get-chat-query.js +0 -2
- package/dist/features/chat/queries/use-get-conversation-query.d.ts.map +0 -1
- package/dist/features/chat/queries/use-list-conversations-query.d.ts.map +0 -1
- package/dist/features/chat/store.d.ts +0 -15
- package/dist/features/chat/store.d.ts.map +0 -1
- package/dist/features/chat/store.js +0 -15
- package/dist/features/chat/store.js.map +0 -1
- package/dist/features/logger/logger.d.ts +0 -2
- package/dist/features/logger/logger.js +0 -15
- package/dist/features/logger/logger.js.map +0 -1
- package/dist/locale-W5Kyyi4X.d.ts.map +0 -1
- package/dist/logger-BvmhODdq.d.ts +0 -11
- package/dist/logger-BvmhODdq.d.ts.map +0 -1
- package/dist/store-CGX9oRlE.d.ts.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { t as Callbacks } from "./callbacks-
|
|
2
|
-
import { r as RootConfig } from "./config-
|
|
1
|
+
import { t as Callbacks } from "./callbacks-CQelTSwD.js";
|
|
2
|
+
import { r as RootConfig } from "./config-BGIY5Hkg.js";
|
|
3
3
|
import React from "react";
|
|
4
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
4
|
|
|
6
5
|
//#region src/features/element/element-provider.d.ts
|
|
7
6
|
interface ElementContextType<T, W> {
|
|
@@ -31,10 +30,10 @@ declare function createElementContext<T, W>({
|
|
|
31
30
|
component,
|
|
32
31
|
callbacks,
|
|
33
32
|
children
|
|
34
|
-
}: ElementProviderProps<T, W>):
|
|
33
|
+
}: ElementProviderProps<T, W>): React.JSX.Element;
|
|
35
34
|
displayName: string;
|
|
36
35
|
};
|
|
37
36
|
};
|
|
38
37
|
//#endregion
|
|
39
38
|
export { ElementProviderProps as n, createElementContext as r, ElementContextType as t };
|
|
40
|
-
//# sourceMappingURL=element-provider-
|
|
39
|
+
//# sourceMappingURL=element-provider-C95jVJV9.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-provider-C95jVJV9.d.ts","names":[],"sources":["../src/features/element/element-provider.tsx"],"mappings":";;;;;UA+DiB,kBAAA;EACf,MAAA,EAAQ,UAAA;EACR,SAAA,EAAW,CAAA;EACX,SAAA,EAAW,SAAA,CAAU,CAAA;AAAA;AAAA,UAGN,oBAAA;EACf,MAAA,EAAQ,UAAA;EACR,SAAA,EAAW,CAAA;EACX,QAAA,EAAU,KAAA,CAAM,SAAA;EAChB,SAAA,EAAW,SAAA,CAAU,CAAA;AAAA;AAAA,UAGb,0BAAA;EACR,IAAI;AAAA;AAAA,iBAGU,oBAAA;EACd;AAAA,GACC,0BAAA;EAAA;;;;;;;;;;OA6BE,oBAAA,CAAqB,CAAA,EAAG,CAAA,IAAE,KAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { ChatElement
|
|
1
|
+
import { t as ChatElement } from "../../chat-element-BbBl5CDM.js";
|
|
2
|
+
export { ChatElement };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { ChatElement
|
|
1
|
+
import { ChatElement } from "./index.js";
|
|
2
|
+
export { ChatElement };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { c as useElementComponent, i as useChat } from "../../../provider-Cps0PPXa.js";
|
|
3
|
+
import { useVisibleMessages } from "../provider/use-visible-messages.js";
|
|
4
|
+
import { Activity } from "./message/activity.js";
|
|
5
|
+
import { MessageProvider } from "./message/provider.js";
|
|
6
|
+
import { MessageParts } from "./message/part.js";
|
|
7
|
+
import { MessageApproval } from "./message/approval.js";
|
|
8
|
+
import { MessageContent } from "./message/content.js";
|
|
9
|
+
import { MessageCopy } from "./message/copy.js";
|
|
10
|
+
import { MessageFeedback } from "./message/feedback.js";
|
|
11
|
+
import { MessageFooter } from "./message/footer.js";
|
|
12
|
+
import { MessageFrame } from "./message/frame.js";
|
|
13
|
+
import { MessageReasoning } from "./message/reasoning.js";
|
|
14
|
+
import { MessageSources } from "./message/sources.js";
|
|
15
|
+
import { MessageText } from "./message/text.js";
|
|
16
|
+
import { MessageTimestamp } from "./message/timestamp.js";
|
|
17
|
+
import { MessageTool } from "./message/tool.js";
|
|
18
|
+
import { useState } from "react";
|
|
19
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
+
import { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport } from "@chatsdk-dev/ui/atoms/message-scroller";
|
|
21
|
+
//#region src/features/chat/conversation/conversation.tsx
|
|
22
|
+
function Conversation() {
|
|
23
|
+
const { status } = useChat();
|
|
24
|
+
const { visibleMessages } = useVisibleMessages();
|
|
25
|
+
const { withTools, withReasoning, autoScrollWhileStreaming } = useElementComponent();
|
|
26
|
+
const isBusy = status === "submitted" || status === "streaming";
|
|
27
|
+
const [followStream, setFollowStream] = useState(false);
|
|
28
|
+
const [prevBusy, setPrevBusy] = useState(isBusy);
|
|
29
|
+
if (prevBusy !== isBusy) {
|
|
30
|
+
setPrevBusy(isBusy);
|
|
31
|
+
setFollowStream(false);
|
|
32
|
+
}
|
|
33
|
+
const autoScroll = autoScrollWhileStreaming || followStream || !isBusy;
|
|
34
|
+
let lastUserId;
|
|
35
|
+
for (const message of visibleMessages) if (message.role === "user") lastUserId = message.id;
|
|
36
|
+
return /* @__PURE__ */ jsx("div", {
|
|
37
|
+
className: "flex-1 min-h-0 overflow-hidden",
|
|
38
|
+
children: /* @__PURE__ */ jsx(MessageScrollerProvider, {
|
|
39
|
+
autoScroll,
|
|
40
|
+
scrollEdgeThreshold: 32,
|
|
41
|
+
children: /* @__PURE__ */ jsxs(MessageScroller, { children: [/* @__PURE__ */ jsx(MessageScrollerViewport, { children: /* @__PURE__ */ jsxs(MessageScrollerContent, {
|
|
42
|
+
className: "p-6 pb-10 [&>[data-slot=message-scroller-item]:has([data-role=assistant])+[data-slot=message-scroller-item]:has([data-role=assistant])]:-mt-6",
|
|
43
|
+
children: [visibleMessages.map((message, index) => /* @__PURE__ */ jsx(MessageScrollerItem, {
|
|
44
|
+
messageId: message.id,
|
|
45
|
+
scrollAnchor: message.id === lastUserId,
|
|
46
|
+
children: /* @__PURE__ */ jsx(MessageProvider, {
|
|
47
|
+
message,
|
|
48
|
+
messageIndex: index,
|
|
49
|
+
children: /* @__PURE__ */ jsx(MessageFrame, { children: /* @__PURE__ */ jsxs(MessageContent, { children: [
|
|
50
|
+
/* @__PURE__ */ jsx(MessageSources, {}),
|
|
51
|
+
/* @__PURE__ */ jsxs(MessageParts, { children: [
|
|
52
|
+
/* @__PURE__ */ jsx(MessageText, {}),
|
|
53
|
+
withReasoning && /* @__PURE__ */ jsx(MessageReasoning, {}),
|
|
54
|
+
withTools && /* @__PURE__ */ jsx(MessageTool, {}),
|
|
55
|
+
/* @__PURE__ */ jsx(MessageApproval, {})
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ jsxs(MessageFooter, { children: [
|
|
58
|
+
/* @__PURE__ */ jsx(MessageTimestamp, {}),
|
|
59
|
+
/* @__PURE__ */ jsx(MessageFeedback, {}),
|
|
60
|
+
/* @__PURE__ */ jsx(MessageCopy, {})
|
|
61
|
+
] })
|
|
62
|
+
] }) })
|
|
63
|
+
})
|
|
64
|
+
}, message.id)), /* @__PURE__ */ jsx(Activity, {})]
|
|
65
|
+
}) }), /* @__PURE__ */ jsx(MessageScrollerButton, { onClick: () => setFollowStream(true) })] })
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
Conversation.displayName = "ChatConversation";
|
|
70
|
+
//#endregion
|
|
71
|
+
export { Conversation };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","names":["Message.Provider","Message.Frame","Message.Content","Message.Sources","Message.Parts","Message.Text","Message.Reasoning","Message.Tool","Message.Approval","Message.Footer","Message.Timestamp","Message.Feedback","Message.Copy"],"sources":["../../../../src/features/chat/conversation/conversation.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nimport {\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n} from \"@chatsdk-dev/ui/atoms/message-scroller\";\n\nimport { useChat, useElementComponent } from \"../provider/provider\";\nimport { useVisibleMessages } from \"../provider/use-visible-messages\";\nimport { Activity } from \"./message/activity\";\nimport { Message } from \"./message\";\n\nexport function Conversation() {\n const { status } = useChat();\n const { visibleMessages } = useVisibleMessages();\n const { withTools, withReasoning, autoScrollWhileStreaming } =\n useElementComponent();\n\n // Auto-scroll only when idle: an in-flight turn streams smoothly into the\n // reserved canvas (no chase). When idle, autoScroll re-engages but only acts at\n // the live edge (it releases when scrolled up), so the net effect is \"follow\n // only when idle AND at the bottom\" — e.g. re-pin when the input grows.\n // Opt in via `autoScrollWhileStreaming` to instead chase the live edge mid-stream.\n const isBusy = status === \"submitted\" || status === \"streaming\";\n\n // Clicking scroll-to-end mid-stream is an explicit \"watch the live edge\":\n // enable autoScroll so the scroller re-engages follow when the scroll lands\n // (scrolling up still releases it). Reset per turn transition.\n const [followStream, setFollowStream] = useState(false);\n const [prevBusy, setPrevBusy] = useState(isBusy);\n if (prevBusy !== isBusy) {\n setPrevBusy(isBusy);\n setFollowStream(false);\n }\n\n const autoScroll = autoScrollWhileStreaming || followStream || !isBusy;\n\n // Anchor only the active turn's user message. Marking every user message an\n // anchor leaves bulk-loaded history anchors unregistered in the scroller, so\n // its \"first unhandled anchor\" logic jumps to the first message on the next\n // equal-count mutation (e.g. activity to assistant swap).\n let lastUserId: string | undefined;\n for (const message of visibleMessages) {\n if (message.role === \"user\") lastUserId = message.id;\n }\n\n return (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <MessageScrollerProvider autoScroll={autoScroll} scrollEdgeThreshold={32}>\n <MessageScroller>\n <MessageScrollerViewport>\n {/* Consecutive assistant messages come from approval continuations\n (the resumed stream is a new message). Collapse the gap so they\n feel like one turn. */}\n <MessageScrollerContent className=\"p-6 pb-10 [&>[data-slot=message-scroller-item]:has([data-role=assistant])+[data-slot=message-scroller-item]:has([data-role=assistant])]:-mt-6\">\n {visibleMessages.map((message, index) => (\n <MessageScrollerItem\n key={message.id}\n messageId={message.id}\n scrollAnchor={message.id === lastUserId}\n >\n <Message.Provider message={message} messageIndex={index}>\n <Message.Frame>\n <Message.Content>\n <Message.Sources />\n <Message.Parts>\n <Message.Text />\n {withReasoning && <Message.Reasoning />}\n {withTools && <Message.Tool />}\n <Message.Approval />\n </Message.Parts>\n <Message.Footer>\n <Message.Timestamp />\n <Message.Feedback />\n <Message.Copy />\n </Message.Footer>\n </Message.Content>\n </Message.Frame>\n </Message.Provider>\n </MessageScrollerItem>\n ))}\n <Activity />\n </MessageScrollerContent>\n </MessageScrollerViewport>\n <MessageScrollerButton onClick={() => setFollowStream(true)} />\n </MessageScroller>\n </MessageScrollerProvider>\n </div>\n );\n}\n\nConversation.displayName = \"ChatConversation\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,eAAe;CAC7B,MAAM,EAAE,WAAW,QAAQ;CAC3B,MAAM,EAAE,oBAAoB,mBAAmB;CAC/C,MAAM,EAAE,WAAW,eAAe,6BAChC,oBAAoB;CAOtB,MAAM,SAAS,WAAW,eAAe,WAAW;CAKpD,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAC/C,IAAI,aAAa,QAAQ;EACvB,YAAY,MAAM;EAClB,gBAAgB,KAAK;CACvB;CAEA,MAAM,aAAa,4BAA4B,gBAAgB,CAAC;CAMhE,IAAI;CACJ,KAAK,MAAM,WAAW,iBACpB,IAAI,QAAQ,SAAS,QAAQ,aAAa,QAAQ;CAGpD,OACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,yBAAD;GAAqC;GAAY,qBAAqB;aACpE,qBAAC,iBAAD,EAAA,UAAA,CACE,oBAAC,yBAAD,EAAA,UAIE,qBAAC,wBAAD;IAAwB,WAAU;cAAlC,CACG,gBAAgB,KAAK,SAAS,UAC7B,oBAAC,qBAAD;KAEE,WAAW,QAAQ;KACnB,cAAc,QAAQ,OAAO;eAE7B,oBAACA,iBAAD;MAA2B;MAAS,cAAc;gBAChD,oBAACC,cAAD,EAAA,UACE,qBAACC,gBAAD,EAAA,UAAA;OACE,oBAACC,gBAAD,CAAkB,CAAA;OAClB,qBAACC,cAAD,EAAA,UAAA;QACE,oBAACC,aAAD,CAAe,CAAA;QACd,iBAAiB,oBAACC,kBAAD,CAAoB,CAAA;QACrC,aAAa,oBAACC,aAAD,CAAe,CAAA;QAC7B,oBAACC,iBAAD,CAAmB,CAAA;OACN,EAAA,CAAA;OACf,qBAACC,eAAD,EAAA,UAAA;QACE,oBAACC,kBAAD,CAAoB,CAAA;QACpB,oBAACC,iBAAD,CAAmB,CAAA;QACnB,oBAACC,aAAD,CAAe,CAAA;OACD,EAAA,CAAA;MACD,EAAA,CAAA,EACJ,CAAA;KACC,CAAA;IACC,GAtBd,QAAQ,EAsBM,CACtB,GACD,oBAAC,UAAD,CAAW,CAAA,CACW;MACD,CAAA,GACzB,oBAAC,uBAAD,EAAuB,eAAe,gBAAgB,IAAI,EAAI,CAAA,CAC/C,EAAA,CAAA;EACM,CAAA;CACtB,CAAA;AAET;AAEA,aAAa,cAAc"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ChatStatus, UIMessage } from "ai";
|
|
2
|
+
|
|
3
|
+
//#region src/features/chat/conversation/message/activity.d.ts
|
|
4
|
+
type AgentActivity = "thinking" | "working" | null;
|
|
5
|
+
declare function getAgentActivity(messages: UIMessage[], status: ChatStatus, opts: {
|
|
6
|
+
withTools?: boolean;
|
|
7
|
+
withReasoning?: boolean;
|
|
8
|
+
}): AgentActivity;
|
|
9
|
+
declare function Activity(): import("react").JSX.Element | null;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Activity, AgentActivity, getAgentActivity };
|
|
12
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","names":[],"sources":["../../../../../src/features/chat/conversation/message/activity.tsx"],"mappings":";;;KASY,aAAA;AAAA,iBAII,gBAAA,CACd,QAAA,EAAU,SAAA,IACV,MAAA,EAAQ,UAAA,EACR,IAAA;EAAQ,SAAA;EAAqB,aAAA;AAAA,IAC5B,aAAA;AAAA,iBAmCa,QAAA,oBAAQ,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { c as useElementComponent, i as useChat } from "../../../../provider-Cps0PPXa.js";
|
|
2
|
+
import { isMessagePartVisible } from "../../utils.js";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { MessageScrollerItem } from "@chatsdk-dev/ui/atoms/message-scroller";
|
|
6
|
+
import { Marker, MarkerContent } from "@chatsdk-dev/ui/atoms/marker";
|
|
7
|
+
//#region src/features/chat/conversation/message/activity.tsx
|
|
8
|
+
function getAgentActivity(messages, status, opts) {
|
|
9
|
+
if (status === "submitted") return "thinking";
|
|
10
|
+
if (status !== "streaming") return null;
|
|
11
|
+
const last = messages[messages.length - 1];
|
|
12
|
+
if (last?.role !== "assistant") return "thinking";
|
|
13
|
+
const part = last.parts[last.parts.length - 1];
|
|
14
|
+
if (!part) return "thinking";
|
|
15
|
+
const type = part.type;
|
|
16
|
+
const isTool = type === "dynamic-tool" || type.startsWith("tool-");
|
|
17
|
+
if (isTool) {
|
|
18
|
+
const { approval, state } = part;
|
|
19
|
+
if (approval?.id && (state === "approval-responded" || state === "output-available" || state === "output-denied")) return "working";
|
|
20
|
+
}
|
|
21
|
+
if (isMessagePartVisible(part, opts)) return null;
|
|
22
|
+
return isTool ? "working" : "thinking";
|
|
23
|
+
}
|
|
24
|
+
function Activity() {
|
|
25
|
+
const { t } = useTranslation("chatsdk_elements");
|
|
26
|
+
const { messages, status } = useChat();
|
|
27
|
+
const { withTools, withReasoning } = useElementComponent();
|
|
28
|
+
const activity = getAgentActivity(messages, status, {
|
|
29
|
+
withTools,
|
|
30
|
+
withReasoning
|
|
31
|
+
});
|
|
32
|
+
if (!activity) return null;
|
|
33
|
+
return /* @__PURE__ */ jsx(MessageScrollerItem, {
|
|
34
|
+
scrollAnchor: false,
|
|
35
|
+
children: /* @__PURE__ */ jsx(Marker, {
|
|
36
|
+
role: "status",
|
|
37
|
+
"data-role": "assistant",
|
|
38
|
+
children: /* @__PURE__ */ jsx(MarkerContent, {
|
|
39
|
+
className: "shimmer shimmer-duration-1000",
|
|
40
|
+
children: activity === "working" ? t("conversation.activity.working") : t("conversation.activity.thinking")
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { Activity, getAgentActivity };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/activity.tsx"],"sourcesContent":["import { type ChatStatus, type UIMessage } from \"ai\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Marker, MarkerContent } from \"@chatsdk-dev/ui/atoms/marker\";\nimport { MessageScrollerItem } from \"@chatsdk-dev/ui/atoms/message-scroller\";\n\nimport { useChat, useElementComponent } from \"../../provider/provider\";\nimport { isMessagePartVisible } from \"../../utils\";\n\nexport type AgentActivity = \"thinking\" | \"working\" | null;\n\n// Current activity of the latest agent turn, for the trailing indicator. Null\n// once the turn renders its own content (visible reasoning/tool/text).\nexport function getAgentActivity(\n messages: UIMessage[],\n status: ChatStatus,\n opts: { withTools?: boolean; withReasoning?: boolean },\n): AgentActivity {\n if (status === \"submitted\") return \"thinking\";\n if (status !== \"streaming\") return null;\n\n const last = messages[messages.length - 1];\n if (last?.role !== \"assistant\") return \"thinking\";\n\n const part = last.parts[last.parts.length - 1];\n if (!part) return \"thinking\";\n\n const type = part.type as string;\n const isTool = type === \"dynamic-tool\" || type.startsWith(\"tool-\");\n // The continuation streams into the gated message, so its answered tool part\n // is the last part while the approved tool executes and completes. Those\n // state flips (responded → completed/denied) aren't new content — keep the\n // indicator up until a genuinely new part streams in.\n if (isTool) {\n const { approval, state } = part as {\n approval?: { id?: string };\n state?: string;\n };\n if (\n approval?.id &&\n (state === \"approval-responded\" ||\n state === \"output-available\" ||\n state === \"output-denied\")\n ) {\n return \"working\";\n }\n }\n\n if (isMessagePartVisible(part, opts)) return null;\n return isTool ? \"working\" : \"thinking\";\n}\n\nexport function Activity() {\n const { t } = useTranslation(\"chatsdk_elements\");\n const { messages, status } = useChat();\n\n const { withTools, withReasoning } = useElementComponent();\n\n const activity = getAgentActivity(messages, status, {\n withTools,\n withReasoning,\n });\n\n if (!activity) {\n return null;\n }\n\n return (\n <MessageScrollerItem scrollAnchor={false}>\n {/* data-role: stands in for the upcoming assistant content, so the\n consecutive-assistant gap collapse also applies to the indicator. */}\n <Marker role=\"status\" data-role=\"assistant\">\n <MarkerContent className=\"shimmer shimmer-duration-1000\">\n {activity === \"working\"\n ? t(\"conversation.activity.working\")\n : t(\"conversation.activity.thinking\")}\n </MarkerContent>\n </Marker>\n </MessageScrollerItem>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAgB,iBACd,UACA,QACA,MACe;CACf,IAAI,WAAW,aAAa,OAAO;CACnC,IAAI,WAAW,aAAa,OAAO;CAEnC,MAAM,OAAO,SAAS,SAAS,SAAS;CACxC,IAAI,MAAM,SAAS,aAAa,OAAO;CAEvC,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS;CAC5C,IAAI,CAAC,MAAM,OAAO;CAElB,MAAM,OAAO,KAAK;CAClB,MAAM,SAAS,SAAS,kBAAkB,KAAK,WAAW,OAAO;CAKjE,IAAI,QAAQ;EACV,MAAM,EAAE,UAAU,UAAU;EAI5B,IACE,UAAU,OACT,UAAU,wBACT,UAAU,sBACV,UAAU,kBAEZ,OAAO;CAEX;CAEA,IAAI,qBAAqB,MAAM,IAAI,GAAG,OAAO;CAC7C,OAAO,SAAS,YAAY;AAC9B;AAEA,SAAgB,WAAW;CACzB,MAAM,EAAE,MAAM,eAAe,kBAAkB;CAC/C,MAAM,EAAE,UAAU,WAAW,QAAQ;CAErC,MAAM,EAAE,WAAW,kBAAkB,oBAAoB;CAEzD,MAAM,WAAW,iBAAiB,UAAU,QAAQ;EAClD;EACA;CACF,CAAC;CAED,IAAI,CAAC,UACH,OAAO;CAGT,OACE,oBAAC,qBAAD;EAAqB,cAAc;YAGjC,oBAAC,QAAD;GAAQ,MAAK;GAAS,aAAU;aAC9B,oBAAC,eAAD;IAAe,WAAU;cACtB,aAAa,YACV,EAAE,+BAA+B,IACjC,EAAE,gCAAgC;GACzB,CAAA;EACT,CAAA;CACW,CAAA;AAEzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { i as useChat } from "../../../../provider-Cps0PPXa.js";
|
|
3
|
+
import { usePart } from "./part.js";
|
|
4
|
+
import { Trans, useTranslation } from "react-i18next";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { getToolName } from "ai";
|
|
7
|
+
import { Confirmation, ConfirmationAccepted, ConfirmationAction, ConfirmationActions, ConfirmationRejected, ConfirmationRequest, ConfirmationTitle } from "@chatsdk-dev/ui/molecules/ai/confirmation";
|
|
8
|
+
//#region src/features/chat/conversation/message/approval.tsx
|
|
9
|
+
function MessageApproval() {
|
|
10
|
+
const { t } = useTranslation("chatsdk_elements");
|
|
11
|
+
const { status, respondToToolApproval } = useChat();
|
|
12
|
+
const claimed = usePart("tool");
|
|
13
|
+
if (!claimed) return null;
|
|
14
|
+
const toolPart = claimed.part;
|
|
15
|
+
const approval = toolPart.approval;
|
|
16
|
+
const approvalId = approval?.id;
|
|
17
|
+
const showsApproval = toolPart.state === "approval-requested" || toolPart.state === "approval-responded" || toolPart.state === "output-denied" || toolPart.state === "output-available";
|
|
18
|
+
if (!approvalId || !showsApproval) return null;
|
|
19
|
+
const title = toolPart.title ?? getToolName(toolPart);
|
|
20
|
+
const disabled = status === "submitted" || status === "streaming";
|
|
21
|
+
return /* @__PURE__ */ jsxs(Confirmation, {
|
|
22
|
+
approval,
|
|
23
|
+
state: toolPart.state,
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx(ConfirmationRequest, { children: /* @__PURE__ */ jsx(ConfirmationTitle, { children: /* @__PURE__ */ jsx(Trans, {
|
|
26
|
+
i18nKey: "conversation.tool-approval.request-prompt",
|
|
27
|
+
values: { title },
|
|
28
|
+
components: { strong: /* @__PURE__ */ jsx("strong", { className: "text-foreground font-semibold" }) }
|
|
29
|
+
}) }) }),
|
|
30
|
+
/* @__PURE__ */ jsx(ConfirmationAccepted, { children: /* @__PURE__ */ jsx(ConfirmationTitle, { children: /* @__PURE__ */ jsx(Trans, {
|
|
31
|
+
i18nKey: "conversation.tool-approval.accepted-note",
|
|
32
|
+
values: { title },
|
|
33
|
+
components: { strong: /* @__PURE__ */ jsx("strong", { className: "text-foreground font-semibold" }) }
|
|
34
|
+
}) }) }),
|
|
35
|
+
/* @__PURE__ */ jsx(ConfirmationRejected, { children: /* @__PURE__ */ jsx(ConfirmationTitle, { children: /* @__PURE__ */ jsx(Trans, {
|
|
36
|
+
i18nKey: "conversation.tool-approval.denied-note",
|
|
37
|
+
values: { title },
|
|
38
|
+
components: { strong: /* @__PURE__ */ jsx("strong", { className: "text-foreground font-semibold" }) }
|
|
39
|
+
}) }) }),
|
|
40
|
+
/* @__PURE__ */ jsxs(ConfirmationActions, { children: [/* @__PURE__ */ jsx(ConfirmationAction, {
|
|
41
|
+
variant: "outline",
|
|
42
|
+
disabled,
|
|
43
|
+
onClick: () => respondToToolApproval({
|
|
44
|
+
approvalId,
|
|
45
|
+
approved: false
|
|
46
|
+
}),
|
|
47
|
+
children: t("conversation.tool-approval.deny")
|
|
48
|
+
}), /* @__PURE__ */ jsx(ConfirmationAction, {
|
|
49
|
+
disabled,
|
|
50
|
+
onClick: () => respondToToolApproval({
|
|
51
|
+
approvalId,
|
|
52
|
+
approved: true
|
|
53
|
+
}),
|
|
54
|
+
children: t("conversation.tool-approval.accept")
|
|
55
|
+
})] })
|
|
56
|
+
]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { MessageApproval };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/approval.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ToolUIPart } from \"ai\";\nimport { getToolName } from \"ai\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport {\n Confirmation,\n ConfirmationAccepted,\n ConfirmationAction,\n ConfirmationActions,\n ConfirmationRejected,\n ConfirmationRequest,\n ConfirmationTitle,\n} from \"@chatsdk-dev/ui/molecules/ai/confirmation\";\nimport { type ToolPart } from \"@chatsdk-dev/ui/molecules/ai/tool\";\n\nimport { useChat } from \"../../provider/provider\";\nimport { usePart } from \"./part\";\n\n// Approval gates a paused turn — a blocking interaction, not tool-detail chrome.\n// Its own file so it renders even when `Message.Tool` is left out.\nexport function MessageApproval() {\n const { t } = useTranslation(\"chatsdk_elements\");\n const { status, respondToToolApproval } = useChat();\n const claimed = usePart(\"tool\");\n if (!claimed) return null;\n\n const toolPart = claimed.part as unknown as ToolPart;\n const approval = toolPart.approval;\n const approvalId = approval?.id;\n // Answered approvals keep rendering as a resolved note (audit trail survives\n // the persisted-turn reseed and history). Other states (streaming input,\n // post-approval error) would render an empty Confirmation shell — skip.\n const showsApproval =\n toolPart.state === \"approval-requested\" ||\n toolPart.state === \"approval-responded\" ||\n toolPart.state === \"output-denied\" ||\n toolPart.state === \"output-available\";\n if (!approvalId || !showsApproval) {\n return null;\n }\n\n const title =\n toolPart.title ?? getToolName(toolPart as unknown as ToolUIPart);\n // Disable while a turn is in flight (incl. the optimistic flip) to prevent\n // double-submit.\n const disabled = status === \"submitted\" || status === \"streaming\";\n\n return (\n <Confirmation approval={approval} state={toolPart.state}>\n <ConfirmationRequest>\n <ConfirmationTitle>\n <Trans\n i18nKey=\"conversation.tool-approval.request-prompt\"\n values={{ title }}\n components={{\n strong: <strong className=\"text-foreground font-semibold\" />,\n }}\n />\n </ConfirmationTitle>\n </ConfirmationRequest>\n <ConfirmationAccepted>\n <ConfirmationTitle>\n <Trans\n i18nKey=\"conversation.tool-approval.accepted-note\"\n values={{ title }}\n components={{\n strong: <strong className=\"text-foreground font-semibold\" />,\n }}\n />\n </ConfirmationTitle>\n </ConfirmationAccepted>\n <ConfirmationRejected>\n <ConfirmationTitle>\n <Trans\n i18nKey=\"conversation.tool-approval.denied-note\"\n values={{ title }}\n components={{\n strong: <strong className=\"text-foreground font-semibold\" />,\n }}\n />\n </ConfirmationTitle>\n </ConfirmationRejected>\n <ConfirmationActions>\n <ConfirmationAction\n variant=\"outline\"\n disabled={disabled}\n onClick={() => respondToToolApproval({ approvalId, approved: false })}\n >\n {t(\"conversation.tool-approval.deny\")}\n </ConfirmationAction>\n <ConfirmationAction\n disabled={disabled}\n onClick={() => respondToToolApproval({ approvalId, approved: true })}\n >\n {t(\"conversation.tool-approval.accept\")}\n </ConfirmationAction>\n </ConfirmationActions>\n </Confirmation>\n );\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,kBAAkB;CAChC,MAAM,EAAE,MAAM,eAAe,kBAAkB;CAC/C,MAAM,EAAE,QAAQ,0BAA0B,QAAQ;CAClD,MAAM,UAAU,QAAQ,MAAM;CAC9B,IAAI,CAAC,SAAS,OAAO;CAErB,MAAM,WAAW,QAAQ;CACzB,MAAM,WAAW,SAAS;CAC1B,MAAM,aAAa,UAAU;CAI7B,MAAM,gBACJ,SAAS,UAAU,wBACnB,SAAS,UAAU,wBACnB,SAAS,UAAU,mBACnB,SAAS,UAAU;CACrB,IAAI,CAAC,cAAc,CAAC,eAClB,OAAO;CAGT,MAAM,QACJ,SAAS,SAAS,YAAY,QAAiC;CAGjE,MAAM,WAAW,WAAW,eAAe,WAAW;CAEtD,OACE,qBAAC,cAAD;EAAwB;EAAU,OAAO,SAAS;YAAlD;GACE,oBAAC,qBAAD,EAAA,UACE,oBAAC,mBAAD,EAAA,UACE,oBAAC,OAAD;IACE,SAAQ;IACR,QAAQ,EAAE,MAAM;IAChB,YAAY,EACV,QAAQ,oBAAC,UAAD,EAAQ,WAAU,gCAAiC,CAAA,EAC7D;GACD,CAAA,EACgB,CAAA,EACA,CAAA;GACrB,oBAAC,sBAAD,EAAA,UACE,oBAAC,mBAAD,EAAA,UACE,oBAAC,OAAD;IACE,SAAQ;IACR,QAAQ,EAAE,MAAM;IAChB,YAAY,EACV,QAAQ,oBAAC,UAAD,EAAQ,WAAU,gCAAiC,CAAA,EAC7D;GACD,CAAA,EACgB,CAAA,EACC,CAAA;GACtB,oBAAC,sBAAD,EAAA,UACE,oBAAC,mBAAD,EAAA,UACE,oBAAC,OAAD;IACE,SAAQ;IACR,QAAQ,EAAE,MAAM;IAChB,YAAY,EACV,QAAQ,oBAAC,UAAD,EAAQ,WAAU,gCAAiC,CAAA,EAC7D;GACD,CAAA,EACgB,CAAA,EACC,CAAA;GACtB,qBAAC,qBAAD,EAAA,UAAA,CACE,oBAAC,oBAAD;IACE,SAAQ;IACE;IACV,eAAe,sBAAsB;KAAE;KAAY,UAAU;IAAM,CAAC;cAEnE,EAAE,iCAAiC;GAClB,CAAA,GACpB,oBAAC,oBAAD;IACY;IACV,eAAe,sBAAsB;KAAE;KAAY,UAAU;IAAK,CAAC;cAElE,EAAE,mCAAmC;GACpB,CAAA,CACD,EAAA,CAAA;EACT;;AAElB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useMessage } from "./provider.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { BotIcon, UserIcon } from "lucide-react";
|
|
4
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
5
|
+
//#region src/features/chat/conversation/message/avatar.tsx
|
|
6
|
+
function MessageAvatar() {
|
|
7
|
+
const { message } = useMessage();
|
|
8
|
+
const isUser = message.role === "user";
|
|
9
|
+
const isAssistant = message.role === "assistant";
|
|
10
|
+
return /* @__PURE__ */ jsx("div", {
|
|
11
|
+
className: cn("flex size-8 shrink-0 items-center justify-center rounded-full border text-xs mt-0.25", isUser ? "bg-primary text-primary-foreground border-primary" : isAssistant ? "bg-zinc-100 text-zinc-600 border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700" : "bg-amber-50 text-amber-600 border-amber-200 dark:bg-amber-950 dark:text-amber-400 dark:border-amber-800"),
|
|
12
|
+
children: isUser ? /* @__PURE__ */ jsx(UserIcon, { className: "size-4" }) : /* @__PURE__ */ jsx(BotIcon, { className: "size-4" })
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { MessageAvatar };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/avatar.tsx"],"sourcesContent":["import { BotIcon, UserIcon } from \"lucide-react\";\n\nimport { cn } from \"@chatsdk-dev/ui/lib/utils\";\n\nimport { useMessage } from \"./provider\";\n\nexport function MessageAvatar() {\n const { message } = useMessage();\n\n const isUser = message.role === \"user\";\n const isAssistant = message.role === \"assistant\";\n return (\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-full border text-xs mt-0.25\",\n isUser\n ? \"bg-primary text-primary-foreground border-primary\"\n : isAssistant\n ? \"bg-zinc-100 text-zinc-600 border-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700\"\n : \"bg-amber-50 text-amber-600 border-amber-200 dark:bg-amber-950 dark:text-amber-400 dark:border-amber-800\",\n )}\n >\n {isUser ? (\n <UserIcon className=\"size-4\" />\n ) : (\n <BotIcon className=\"size-4\" />\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAMA,SAAgB,gBAAgB;CAC9B,MAAM,EAAE,YAAY,WAAW;CAE/B,MAAM,SAAS,QAAQ,SAAS;CAChC,MAAM,cAAc,QAAQ,SAAS;CACrC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,wFACA,SACI,sDACA,cACE,uGACA,yGACR;YAEC,SACC,oBAAC,UAAD,EAAU,WAAU,SAAU,CAAA,IAE9B,oBAAC,SAAD,EAAS,WAAU,SAAU,CAAA;CAE5B,CAAA;AAET"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { MessageContent as MessageContent$1 } from "@chatsdk-dev/ui/atoms/message";
|
|
4
|
+
//#region src/features/chat/conversation/message/content.tsx
|
|
5
|
+
function MessageContent({ children }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(MessageContent$1, { children });
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { MessageContent };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","names":["UIMessageContent"],"sources":["../../../../../src/features/chat/conversation/message/content.tsx"],"sourcesContent":["\"use client\";\n\nimport { MessageContent as UIMessageContent } from \"@chatsdk-dev/ui/atoms/message\";\n\ninterface ContentProps {\n children: React.ReactNode;\n}\n\n// The content column beside the avatar: header, bubble(s), footer.\nexport function MessageContent({ children }: ContentProps) {\n return <UIMessageContent>{children}</UIMessageContent>;\n}\n"],"mappings":";;;;AASA,SAAgB,eAAe,EAAE,YAA0B;CACzD,OAAO,oBAACA,kBAAD,EAAmB,SAA2B,CAAA;AACvD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMessage } from "./provider.js";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
6
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "@chatsdk-dev/ui/atoms/tooltip";
|
|
7
|
+
import { useCopyToClipboard } from "@chatsdk-dev/ui/hooks/use-copy-to-clipboard";
|
|
8
|
+
import { Action } from "@chatsdk-dev/ui/molecules/ai/action";
|
|
9
|
+
//#region src/features/chat/conversation/message/copy.tsx
|
|
10
|
+
function MessageCopy() {
|
|
11
|
+
const { t } = useTranslation("chatsdk_elements");
|
|
12
|
+
const { copied, copyToClipboard } = useCopyToClipboard();
|
|
13
|
+
const { message } = useMessage();
|
|
14
|
+
const text = message.parts.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
15
|
+
return /* @__PURE__ */ jsxs(Tooltip, {
|
|
16
|
+
open: copied,
|
|
17
|
+
children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: /* @__PURE__ */ jsxs(Action, {
|
|
18
|
+
onClick: () => copyToClipboard?.(text),
|
|
19
|
+
label: t("conversation.message.copy"),
|
|
20
|
+
children: [copied ? /* @__PURE__ */ jsx(CheckIcon, { className: "size-3" }) : /* @__PURE__ */ jsx(CopyIcon, { className: "size-3" }), /* @__PURE__ */ jsx("span", {
|
|
21
|
+
className: "sr-only",
|
|
22
|
+
children: t("copied")
|
|
23
|
+
})]
|
|
24
|
+
}) }), /* @__PURE__ */ jsx(TooltipContent, { children: t("copied") })]
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { MessageCopy };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/copy.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@chatsdk-dev/ui/atoms/tooltip\";\nimport { useCopyToClipboard } from \"@chatsdk-dev/ui/hooks/use-copy-to-clipboard\";\nimport { Action } from \"@chatsdk-dev/ui/molecules/ai/action\";\n\nimport { useMessage } from \"./provider\";\n\nexport function MessageCopy() {\n const { t } = useTranslation(\"chatsdk_elements\");\n const { copied, copyToClipboard } = useCopyToClipboard();\n const { message } = useMessage();\n const text = message.parts\n .filter((part) => part.type === \"text\")\n .map((part) => (part as { text: string }).text)\n .join(\"\\n\");\n\n return (\n <Tooltip open={copied}>\n <TooltipTrigger\n render={\n <Action\n onClick={() => copyToClipboard?.(text)}\n label={t(\"conversation.message.copy\")}\n >\n {copied ? (\n <CheckIcon className=\"size-3\" />\n ) : (\n <CopyIcon className=\"size-3\" />\n )}\n <span className=\"sr-only\">{t(\"copied\")}</span>\n </Action>\n }\n />\n <TooltipContent>{t(\"copied\")}</TooltipContent>\n </Tooltip>\n );\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,cAAc;CAC5B,MAAM,EAAE,MAAM,eAAe,kBAAkB;CAC/C,MAAM,EAAE,QAAQ,oBAAoB,mBAAmB;CACvD,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,OAAO,QAAQ,MAClB,QAAQ,SAAS,KAAK,SAAS,MAAM,CAAC,CACtC,KAAK,SAAU,KAA0B,IAAI,CAAC,CAC9C,KAAK,IAAI;CAEZ,OACE,qBAAC,SAAD;EAAS,MAAM;YAAf,CACE,oBAAC,gBAAD,EACE,QACE,qBAAC,QAAD;GACE,eAAe,kBAAkB,IAAI;GACrC,OAAO,EAAE,2BAA2B;aAFtC,CAIG,SACC,oBAAC,WAAD,EAAW,WAAU,SAAU,CAAA,IAE/B,oBAAC,UAAD,EAAU,WAAU,SAAU,CAAA,GAEhC,oBAAC,QAAD;IAAM,WAAU;cAAW,EAAE,QAAQ;GAAQ,CAAA,CACvC;KAEX,CAAA,GACD,oBAAC,gBAAD,EAAA,UAAiB,EAAE,QAAQ,EAAkB,CAAA,CACtC;;AAEb"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { i as useChat } from "../../../../provider-Cps0PPXa.js";
|
|
3
|
+
import { useMessage } from "./provider.js";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { ThumbsDown, ThumbsUp } from "lucide-react";
|
|
7
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
8
|
+
import { Action } from "@chatsdk-dev/ui/molecules/ai/action";
|
|
9
|
+
//#region src/features/chat/conversation/message/feedback.tsx
|
|
10
|
+
function MessageFeedback() {
|
|
11
|
+
const { t } = useTranslation("chatsdk_elements");
|
|
12
|
+
const { message } = useMessage();
|
|
13
|
+
const { conversation, recordMessageFeedback } = useChat();
|
|
14
|
+
const active = conversation?.feedback?.[message.id] ?? null;
|
|
15
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Action, {
|
|
16
|
+
label: t("conversation.message.like"),
|
|
17
|
+
className: cn(active === "positive" && "text-primary"),
|
|
18
|
+
onClick: () => recordMessageFeedback({
|
|
19
|
+
messageId: message.id,
|
|
20
|
+
sentiment: "positive"
|
|
21
|
+
}),
|
|
22
|
+
children: /* @__PURE__ */ jsx(ThumbsUp, { className: "size-3 mb-1" })
|
|
23
|
+
}), /* @__PURE__ */ jsx(Action, {
|
|
24
|
+
label: t("conversation.message.dislike"),
|
|
25
|
+
className: cn(active === "negative" && "text-destructive"),
|
|
26
|
+
onClick: () => recordMessageFeedback({
|
|
27
|
+
messageId: message.id,
|
|
28
|
+
sentiment: "negative"
|
|
29
|
+
}),
|
|
30
|
+
children: /* @__PURE__ */ jsx(ThumbsDown, { className: "size-3" })
|
|
31
|
+
})] });
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { MessageFeedback };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/feedback.tsx"],"sourcesContent":["\"use client\";\n\nimport { ThumbsDown, ThumbsUp } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"@chatsdk-dev/ui/lib/utils\";\nimport { Action } from \"@chatsdk-dev/ui/molecules/ai/action\";\n\nimport { useChat } from \"../../provider/provider\";\nimport { useMessage } from \"./provider\";\n\nexport function MessageFeedback() {\n const { t } = useTranslation(\"chatsdk_elements\");\n const { message } = useMessage();\n const { conversation, recordMessageFeedback } = useChat();\n const active = conversation?.feedback?.[message.id] ?? null;\n\n return (\n <>\n <Action\n label={t(\"conversation.message.like\")}\n className={cn(active === \"positive\" && \"text-primary\")}\n onClick={() =>\n recordMessageFeedback({\n messageId: message.id,\n sentiment: \"positive\",\n })\n }\n >\n <ThumbsUp className=\"size-3 mb-1\" />\n </Action>\n <Action\n label={t(\"conversation.message.dislike\")}\n className={cn(active === \"negative\" && \"text-destructive\")}\n onClick={() =>\n recordMessageFeedback({\n messageId: message.id,\n sentiment: \"negative\",\n })\n }\n >\n <ThumbsDown className=\"size-3\" />\n </Action>\n </>\n );\n}\n"],"mappings":";;;;;;;;;AAWA,SAAgB,kBAAkB;CAChC,MAAM,EAAE,MAAM,eAAe,kBAAkB;CAC/C,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,EAAE,cAAc,0BAA0B,QAAQ;CACxD,MAAM,SAAS,cAAc,WAAW,QAAQ,OAAO;CAEvD,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;EACE,OAAO,EAAE,2BAA2B;EACpC,WAAW,GAAG,WAAW,cAAc,cAAc;EACrD,eACE,sBAAsB;GACpB,WAAW,QAAQ;GACnB,WAAW;EACb,CAAC;YAGH,oBAAC,UAAD,EAAU,WAAU,cAAe,CAAA;CAC7B,CAAA,GACR,oBAAC,QAAD;EACE,OAAO,EAAE,8BAA8B;EACvC,WAAW,GAAG,WAAW,cAAc,kBAAkB;EACzD,eACE,sBAAsB;GACpB,WAAW,QAAQ;GACnB,WAAW;EACb,CAAC;YAGH,oBAAC,YAAD,EAAY,WAAU,SAAU,CAAA;CAC1B,CAAA,CACR,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMessage } from "./provider.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
5
|
+
import { MessageFooter as MessageFooter$1 } from "@chatsdk-dev/ui/atoms/message";
|
|
6
|
+
//#region src/features/chat/conversation/message/footer.tsx
|
|
7
|
+
function MessageFooter({ children, className }) {
|
|
8
|
+
const { message, isFirst } = useMessage();
|
|
9
|
+
const hasText = message.parts.some((part) => part.type === "text" && (part.text?.length ?? 0) > 0);
|
|
10
|
+
const pendingApproval = message.parts.some((part) => (part.type === "dynamic-tool" || part.type.startsWith("tool-")) && part.state === "approval-requested");
|
|
11
|
+
if (message.role !== "assistant" || isFirst || !hasText || pendingApproval) return null;
|
|
12
|
+
return /* @__PURE__ */ jsx(MessageFooter$1, {
|
|
13
|
+
className: cn("-mt-2", className),
|
|
14
|
+
children
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { MessageFooter };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.js","names":["UIMessageFooter"],"sources":["../../../../../src/features/chat/conversation/message/footer.tsx"],"sourcesContent":["\"use client\";\n\nimport { MessageFooter as UIMessageFooter } from \"@chatsdk-dev/ui/atoms/message\";\nimport { cn } from \"@chatsdk-dev/ui/lib/utils\";\n\nimport { useMessage } from \"./provider\";\n\n// Layout + visibility for the per-turn action bar. Composed children\n// (timestamp, copy, feedback) are the features; omit one to drop it on a surface.\nexport function MessageFooter({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n const { message, isFirst } = useMessage();\n // Show under a completed textual answer; never on the greeting or a paused\n // approval turn (which ends on the tool part awaiting a response).\n const hasText = message.parts.some(\n (part) =>\n part.type === \"text\" &&\n ((part as { text?: string }).text?.length ?? 0) > 0,\n );\n const pendingApproval = message.parts.some(\n (part) =>\n (part.type === \"dynamic-tool\" ||\n (part.type as string).startsWith(\"tool-\")) &&\n (part as { state?: string }).state === \"approval-requested\",\n );\n if (message.role !== \"assistant\" || isFirst || !hasText || pendingApproval) {\n return null;\n }\n\n // Tuck the action bar against its answer instead of inheriting the\n // `MessageContent` inter-part gap, so it reads as part of the turn.\n return (\n <UIMessageFooter className={cn(\"-mt-2\", className)}>\n {children}\n </UIMessageFooter>\n );\n}\n"],"mappings":";;;;;;AASA,SAAgB,cAAc,EAC5B,UACA,aAIC;CACD,MAAM,EAAE,SAAS,YAAY,WAAW;CAGxC,MAAM,UAAU,QAAQ,MAAM,MAC3B,SACC,KAAK,SAAS,WACZ,KAA2B,MAAM,UAAU,KAAK,CACtD;CACA,MAAM,kBAAkB,QAAQ,MAAM,MACnC,UACE,KAAK,SAAS,kBACZ,KAAK,KAAgB,WAAW,OAAO,MACzC,KAA4B,UAAU,oBAC3C;CACA,IAAI,QAAQ,SAAS,eAAe,WAAW,CAAC,WAAW,iBACzD,OAAO;CAKT,OACE,oBAACA,iBAAD;EAAiB,WAAW,GAAG,SAAS,SAAS;EAC9C;CACc,CAAA;AAErB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMessage } from "./provider.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Message } from "@chatsdk-dev/ui/atoms/message";
|
|
5
|
+
//#region src/features/chat/conversation/message/frame.tsx
|
|
6
|
+
function MessageFrame({ children }) {
|
|
7
|
+
const { message } = useMessage();
|
|
8
|
+
return /* @__PURE__ */ jsx(Message, {
|
|
9
|
+
align: message.role === "user" ? "end" : "start",
|
|
10
|
+
"data-message-id": message.id,
|
|
11
|
+
"data-role": message.role,
|
|
12
|
+
children
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { MessageFrame };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","names":["UIMessage"],"sources":["../../../../../src/features/chat/conversation/message/frame.tsx"],"sourcesContent":["\"use client\";\n\nimport { Message as UIMessage } from \"@chatsdk-dev/ui/atoms/message\";\n\nimport { useMessage } from \"./provider\";\n\ninterface MessageProps {\n children?: React.ReactNode;\n}\n\nexport function MessageFrame({ children }: MessageProps) {\n const { message } = useMessage();\n\n const isUser = message.role === \"user\";\n return (\n <UIMessage\n align={isUser ? \"end\" : \"start\"}\n data-message-id={message.id}\n data-role={message.role}\n >\n {children}\n </UIMessage>\n );\n}\n"],"mappings":";;;;;AAUA,SAAgB,aAAa,EAAE,YAA0B;CACvD,MAAM,EAAE,YAAY,WAAW;CAG/B,OACE,oBAACA,SAAD;EACE,OAHW,QAAQ,SAAS,SAGZ,QAAQ;EACxB,mBAAiB,QAAQ;EACzB,aAAW,QAAQ;EAElB;CACQ,CAAA;AAEf"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as MessageApproval } from "../../../../approval-BODP4NVA.js";
|
|
2
|
+
import { t as MessageAvatar } from "../../../../avatar-CK5WGu6N.js";
|
|
3
|
+
import { t as MessageContent } from "../../../../content-BoiPVwgM.js";
|
|
4
|
+
import { t as MessageCopy } from "../../../../copy-BPB94kUd.js";
|
|
5
|
+
import { t as MessageFeedback } from "../../../../feedback-hofC2MHC.js";
|
|
6
|
+
import { t as MessageFooter } from "../../../../footer-BdcVsDmw.js";
|
|
7
|
+
import { t as MessageFrame } from "../../../../frame-D_ce2ErP.js";
|
|
8
|
+
import { t as MessageParts } from "../../../../part-C8ZA6iZn.js";
|
|
9
|
+
import { n as MessageProvider } from "../../../../provider-CkkKc2aq.js";
|
|
10
|
+
import { t as MessageReasoning } from "../../../../reasoning-BRNu_n6T.js";
|
|
11
|
+
import { t as MessageSources } from "../../../../sources-BXoSxNYc.js";
|
|
12
|
+
import { t as MessageText } from "../../../../text-Cio_Hj_h.js";
|
|
13
|
+
import { t as MessageTimestamp } from "../../../../timestamp-CbU3bLa3.js";
|
|
14
|
+
import { t as MessageTool } from "../../../../tool-DskTWxZb.js";
|
|
15
|
+
|
|
16
|
+
//#region src/features/chat/conversation/message/index.parts.d.ts
|
|
17
|
+
declare namespace index_parts_d_exports {
|
|
18
|
+
export { MessageApproval as Approval, MessageAvatar as Avatar, MessageContent as Content, MessageCopy as Copy, MessageFeedback as Feedback, MessageFooter as Footer, MessageFrame as Frame, MessageParts as Parts, MessageProvider as Provider, MessageReasoning as Reasoning, MessageSources as Sources, MessageText as Text, MessageTimestamp as Timestamp, MessageTool as Tool };
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { MessageApproval as Approval, MessageAvatar as Avatar, MessageContent as Content, MessageCopy as Copy, MessageFeedback as Feedback, MessageFooter as Footer, MessageFrame as Frame, MessageParts as Parts, MessageProvider as Provider, MessageReasoning as Reasoning, MessageSources as Sources, MessageText as Text, MessageTimestamp as Timestamp, MessageTool as Tool, index_parts_d_exports as t };
|
|
22
|
+
//# sourceMappingURL=index.parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../../../src/features/chat/conversation/message/index.parts.ts"],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { t as __exportAll } from "../../../../rolldown-runtime-D7D4PA-g.js";
|
|
2
|
+
import { MessageProvider } from "./provider.js";
|
|
3
|
+
import { MessageParts } from "./part.js";
|
|
4
|
+
import { MessageApproval } from "./approval.js";
|
|
5
|
+
import { MessageAvatar } from "./avatar.js";
|
|
6
|
+
import { MessageContent } from "./content.js";
|
|
7
|
+
import { MessageCopy } from "./copy.js";
|
|
8
|
+
import { MessageFeedback } from "./feedback.js";
|
|
9
|
+
import { MessageFooter } from "./footer.js";
|
|
10
|
+
import { MessageFrame } from "./frame.js";
|
|
11
|
+
import { MessageReasoning } from "./reasoning.js";
|
|
12
|
+
import { MessageSources } from "./sources.js";
|
|
13
|
+
import { MessageText } from "./text.js";
|
|
14
|
+
import { MessageTimestamp } from "./timestamp.js";
|
|
15
|
+
import { MessageTool } from "./tool.js";
|
|
16
|
+
//#region src/features/chat/conversation/message/index.parts.ts
|
|
17
|
+
var index_parts_exports = /* @__PURE__ */ __exportAll({
|
|
18
|
+
Approval: () => MessageApproval,
|
|
19
|
+
Avatar: () => MessageAvatar,
|
|
20
|
+
Content: () => MessageContent,
|
|
21
|
+
Copy: () => MessageCopy,
|
|
22
|
+
Feedback: () => MessageFeedback,
|
|
23
|
+
Footer: () => MessageFooter,
|
|
24
|
+
Frame: () => MessageFrame,
|
|
25
|
+
Parts: () => MessageParts,
|
|
26
|
+
Provider: () => MessageProvider,
|
|
27
|
+
Reasoning: () => MessageReasoning,
|
|
28
|
+
Sources: () => MessageSources,
|
|
29
|
+
Text: () => MessageText,
|
|
30
|
+
Timestamp: () => MessageTimestamp,
|
|
31
|
+
Tool: () => MessageTool
|
|
32
|
+
});
|
|
33
|
+
//#endregion
|
|
34
|
+
export { MessageApproval as Approval, MessageAvatar as Avatar, MessageContent as Content, MessageCopy as Copy, MessageFeedback as Feedback, MessageFooter as Footer, MessageFrame as Frame, MessageParts as Parts, MessageProvider as Provider, MessageReasoning as Reasoning, MessageSources as Sources, MessageText as Text, MessageTimestamp as Timestamp, MessageTool as Tool, index_parts_exports as t };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=index.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.js","names":[],"sources":["../../../../../src/features/chat/conversation/message/index.parts.ts"],"sourcesContent":["export { MessageApproval as Approval } from \"./approval\";\nexport { MessageAvatar as Avatar } from \"./avatar\";\nexport { MessageContent as Content } from \"./content\";\nexport { MessageCopy as Copy } from \"./copy\";\nexport { MessageFeedback as Feedback } from \"./feedback\";\nexport { MessageFooter as Footer } from \"./footer\";\nexport { MessageFrame as Frame } from \"./frame\";\nexport { MessageParts as Parts } from \"./part\";\nexport { MessageProvider as Provider } from \"./provider\";\nexport { MessageReasoning as Reasoning } from \"./reasoning\";\nexport { MessageSources as Sources } from \"./sources\";\nexport { MessageText as Text } from \"./text\";\nexport { MessageTimestamp as Timestamp } from \"./timestamp\";\nexport { MessageTool as Tool } from \"./tool\";\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|