@athenaintel/react 0.19.0 → 0.20.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/README.md +97 -11
- package/dist/assets/AssetPanel.cjs +277 -0
- package/dist/assets/AssetPanel.cjs.map +1 -0
- package/dist/assets/AssetPanel.js +277 -0
- package/dist/assets/AssetPanel.js.map +1 -0
- package/dist/assets/AthenaAssetEmbed.cjs +151 -0
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -0
- package/dist/assets/AthenaAssetEmbed.js +151 -0
- package/dist/assets/AthenaAssetEmbed.js.map +1 -0
- package/dist/assets/AthenaLayout.cjs +69 -0
- package/dist/assets/AthenaLayout.cjs.map +1 -0
- package/dist/assets/AthenaLayout.js +69 -0
- package/dist/assets/AthenaLayout.js.map +1 -0
- package/dist/assets/asset-embed-messages.cjs +39 -0
- package/dist/assets/asset-embed-messages.cjs.map +1 -0
- package/dist/assets/asset-embed-messages.js +39 -0
- package/dist/assets/asset-embed-messages.js.map +1 -0
- package/dist/assets/asset-panel-store.cjs +124 -0
- package/dist/assets/asset-panel-store.cjs.map +1 -0
- package/dist/assets/asset-panel-store.js +124 -0
- package/dist/assets/asset-panel-store.js.map +1 -0
- package/dist/assets/asset-panel-url.cjs +40 -0
- package/dist/assets/asset-panel-url.cjs.map +1 -0
- package/dist/assets/asset-panel-url.js +40 -0
- package/dist/assets/asset-panel-url.js.map +1 -0
- package/dist/assets/use-asset-embed.cjs +362 -0
- package/dist/assets/use-asset-embed.cjs.map +1 -0
- package/dist/assets/use-asset-embed.js +362 -0
- package/dist/assets/use-asset-embed.js.map +1 -0
- package/dist/{AthenaAuthContext-B3AwLA5Z.cjs → auth/AthenaAuthContext.cjs} +5 -4
- package/dist/auth/AthenaAuthContext.cjs.map +1 -0
- package/dist/{AthenaAuthContext-DQsdayH2.js → auth/AthenaAuthContext.js} +3 -3
- package/dist/auth/AthenaAuthContext.js.map +1 -0
- package/dist/auth/AthenaAuthProvider.cjs +141 -0
- package/dist/auth/AthenaAuthProvider.cjs.map +1 -0
- package/dist/auth/AthenaAuthProvider.js +141 -0
- package/dist/auth/AthenaAuthProvider.js.map +1 -0
- package/dist/{auth.cjs → auth/AthenaSSOProvider.cjs} +14 -151
- package/dist/auth/AthenaSSOProvider.cjs.map +1 -0
- package/dist/{auth.js → auth/AthenaSSOProvider.js} +4 -142
- package/dist/auth/AthenaSSOProvider.js.map +1 -0
- package/dist/auth/index.cjs +10 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.js +10 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/chat/AthenaChat.cjs +753 -0
- package/dist/chat/AthenaChat.cjs.map +1 -0
- package/dist/chat/AthenaChat.d.ts +3 -2
- package/dist/chat/AthenaChat.js +753 -0
- package/dist/chat/AthenaChat.js.map +1 -0
- package/dist/chat/AthenaChatErrorBoundary.cjs +53 -0
- package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -0
- package/dist/chat/AthenaChatErrorBoundary.js +53 -0
- package/dist/chat/AthenaChatErrorBoundary.js.map +1 -0
- package/dist/chat/StatewireApprovalCard.cjs +171 -0
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -0
- package/dist/chat/StatewireApprovalCard.js +171 -0
- package/dist/chat/StatewireApprovalCard.js.map +1 -0
- package/dist/chat/StatewireClientToolBridge.cjs +50 -0
- package/dist/chat/StatewireClientToolBridge.cjs.map +1 -0
- package/dist/chat/StatewireClientToolBridge.js +50 -0
- package/dist/chat/StatewireClientToolBridge.js.map +1 -0
- package/dist/chat/StatewireQueuedMessages.cjs +432 -0
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -0
- package/dist/chat/StatewireQueuedMessages.d.ts +3 -4
- package/dist/chat/StatewireQueuedMessages.js +432 -0
- package/dist/chat/StatewireQueuedMessages.js.map +1 -0
- package/dist/chat/athena-citation-links.cjs +326 -0
- package/dist/chat/athena-citation-links.cjs.map +1 -0
- package/dist/chat/athena-citation-links.js +326 -0
- package/dist/chat/athena-citation-links.js.map +1 -0
- package/dist/chat/run-activity.cjs +28 -0
- package/dist/chat/run-activity.cjs.map +1 -0
- package/dist/chat/run-activity.js +28 -0
- package/dist/chat/run-activity.js.map +1 -0
- package/dist/chat/statewire-banners.cjs +83 -0
- package/dist/chat/statewire-banners.cjs.map +1 -0
- package/dist/chat/statewire-banners.js +83 -0
- package/dist/chat/statewire-banners.js.map +1 -0
- package/dist/chat/statewire-client-tools.cjs +73 -0
- package/dist/chat/statewire-client-tools.cjs.map +1 -0
- package/dist/chat/statewire-client-tools.js +73 -0
- package/dist/chat/statewire-client-tools.js.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +158 -0
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -0
- package/dist/chat/super-grouping/CollapsibleGroup.js +158 -0
- package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +361 -0
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +4 -1
- package/dist/chat/super-grouping/SuperGroupingCard.js +361 -0
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -0
- package/dist/chat/super-grouping/activity-timeline.cjs +151 -0
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -0
- package/dist/chat/super-grouping/activity-timeline.d.ts +3 -3
- package/dist/chat/super-grouping/activity-timeline.js +151 -0
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -0
- package/dist/chat/super-grouping/grouping-function.cjs +55 -0
- package/dist/chat/super-grouping/grouping-function.cjs.map +1 -0
- package/dist/chat/super-grouping/grouping-function.js +55 -0
- package/dist/chat/super-grouping/grouping-function.js.map +1 -0
- package/dist/chat/super-grouping/index.cjs +26 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -0
- package/dist/chat/super-grouping/index.js +26 -0
- package/dist/chat/super-grouping/index.js.map +1 -0
- package/dist/chat/super-grouping/toolkit-map.cjs +96 -0
- package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -0
- package/dist/chat/super-grouping/toolkit-map.js +96 -0
- package/dist/chat/super-grouping/toolkit-map.js.map +1 -0
- package/dist/chat/tiptap-text.cjs +101 -0
- package/dist/chat/tiptap-text.cjs.map +1 -0
- package/dist/chat/tiptap-text.js +101 -0
- package/dist/chat/tiptap-text.js.map +1 -0
- package/dist/chat/tooltip-icon-button.cjs +32 -0
- package/dist/chat/tooltip-icon-button.cjs.map +1 -0
- package/dist/chat/tooltip-icon-button.js +32 -0
- package/dist/chat/tooltip-icon-button.js.map +1 -0
- package/dist/chat/use-athena-run-live.cjs +23 -0
- package/dist/chat/use-athena-run-live.cjs.map +1 -0
- package/dist/chat/use-athena-run-live.d.ts +10 -0
- package/dist/chat/use-athena-run-live.js +23 -0
- package/dist/chat/use-athena-run-live.js.map +1 -0
- package/dist/chat/use-statewire-approval-request.cjs +46 -0
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -0
- package/dist/chat/use-statewire-approval-request.js +46 -0
- package/dist/chat/use-statewire-approval-request.js.map +1 -0
- package/dist/chat-ui/auth/sign-in-card.cjs +128 -0
- package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -0
- package/dist/chat-ui/auth/sign-in-card.js +128 -0
- package/dist/chat-ui/auth/sign-in-card.js.map +1 -0
- package/dist/chat-ui/composer/composer-action.cjs +11 -0
- package/dist/chat-ui/composer/composer-action.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-action.d.ts +5 -8
- package/dist/chat-ui/composer/composer-action.js +11 -0
- package/dist/chat-ui/composer/composer-action.js.map +1 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.cjs +25 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.cjs.map +1 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.js +25 -0
- package/dist/chat-ui/composer/pending-attachment-uploads.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +590 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.d.ts +44 -7
- package/dist/chat-ui/composer/tiptap-composer.js +590 -0
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -0
- package/dist/chat-ui/header/chat-header.cjs +33 -0
- package/dist/chat-ui/header/chat-header.cjs.map +1 -0
- package/dist/chat-ui/header/chat-header.js +33 -0
- package/dist/chat-ui/header/chat-header.js.map +1 -0
- package/dist/chat-ui/header/conversation-history-panel.cjs +369 -0
- package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -0
- package/dist/chat-ui/header/conversation-history-panel.js +369 -0
- package/dist/chat-ui/header/conversation-history-panel.js.map +1 -0
- package/dist/chat-ui/index.cjs +139 -0
- package/dist/chat-ui/index.cjs.map +1 -0
- package/dist/chat-ui/index.d.ts +4 -3
- package/dist/chat-ui/index.js +139 -0
- package/dist/chat-ui/index.js.map +1 -0
- package/dist/chat-ui/lib/asset-urls.cjs +18 -0
- package/dist/chat-ui/lib/asset-urls.cjs.map +1 -0
- package/dist/chat-ui/lib/asset-urls.js +18 -0
- package/dist/chat-ui/lib/asset-urls.js.map +1 -0
- package/dist/chat-ui/mentions/mention-chip.cjs +208 -0
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -0
- package/dist/chat-ui/mentions/mention-chip.js +208 -0
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -0
- package/dist/chat-ui/mentions/mention-extension.cjs +184 -0
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -0
- package/dist/chat-ui/mentions/mention-extension.d.ts +24 -2
- package/dist/chat-ui/mentions/mention-extension.js +184 -0
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +35 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +35 -0
- package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +95 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +5 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +95 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +116 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +116 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +31 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +31 -0
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs +27 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js +27 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +62 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js +62 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +63 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js +63 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs +11 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js +11 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs +33 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.js +33 -0
- package/dist/chat-ui/mentions/suggestions/components/menu-summary.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +58 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js +58 -0
- package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +81 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js +81 -0
- package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.cjs +18 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.js +18 -0
- package/dist/chat-ui/mentions/suggestions/components/utils.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +123 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +10 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js +123 -0
- package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs +37 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.js +37 -0
- package/dist/chat-ui/mentions/suggestions/data/item-cache.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +134 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +134 -0
- package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs +91 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.js +91 -0
- package/dist/chat-ui/mentions/suggestions/data/scope-registry.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +137 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +137 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +375 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +16 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +375 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/types.cjs +9 -0
- package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/types.d.ts +14 -0
- package/dist/chat-ui/mentions/suggestions/data/types.js +9 -0
- package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +173 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +14 -4
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +173 -0
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +45 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +45 -0
- package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs +43 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js +43 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs +14 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js +14 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs +48 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js +48 -0
- package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js.map +1 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +71 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +71 -0
- package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -0
- package/dist/chat-ui/messages/continue-pill.cjs +54 -0
- package/dist/chat-ui/messages/continue-pill.cjs.map +1 -0
- package/dist/chat-ui/messages/continue-pill.js +54 -0
- package/dist/chat-ui/messages/continue-pill.js.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.cjs +12 -0
- package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -0
- package/dist/chat-ui/messages/message-actions-config.js +12 -0
- package/dist/chat-ui/messages/message-actions-config.js.map +1 -0
- package/dist/chat-ui/messages/message-components.cjs +343 -0
- package/dist/chat-ui/messages/message-components.cjs.map +1 -0
- package/dist/chat-ui/messages/message-components.d.ts +13 -1
- package/dist/chat-ui/messages/message-components.js +343 -0
- package/dist/chat-ui/messages/message-components.js.map +1 -0
- package/dist/chat-ui/messages/running-indicator.cjs +49 -0
- package/dist/chat-ui/messages/running-indicator.cjs.map +1 -0
- package/dist/chat-ui/messages/running-indicator.js +49 -0
- package/dist/chat-ui/messages/running-indicator.js.map +1 -0
- package/dist/chat-ui/messages/runtime-message.cjs +65 -0
- package/dist/chat-ui/messages/runtime-message.cjs.map +1 -0
- package/dist/chat-ui/messages/runtime-message.js +65 -0
- package/dist/chat-ui/messages/runtime-message.js.map +1 -0
- package/dist/{statewire-continue-run-nE9VCKUh.cjs → chat-ui/messages/statewire-continue-run.cjs} +39 -16
- package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
- package/dist/chat-ui/messages/statewire-continue-run.d.ts +5 -1
- package/dist/{statewire-continue-run-D34gS7_1.js → chat-ui/messages/statewire-continue-run.js} +29 -7
- package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs +61 -0
- package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -0
- package/dist/chat-ui/messages/user-edit-composer.js +61 -0
- package/dist/chat-ui/messages/user-edit-composer.js.map +1 -0
- package/dist/chat-ui/messages/voice-delegation-card.cjs +51 -0
- package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -0
- package/dist/chat-ui/messages/voice-delegation-card.d.ts +26 -0
- package/dist/chat-ui/messages/voice-delegation-card.js +51 -0
- package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -0
- package/dist/chat-ui/statewire.cjs +39 -0
- package/dist/chat-ui/statewire.cjs.map +1 -0
- package/dist/chat-ui/statewire.js +39 -0
- package/dist/chat-ui/statewire.js.map +1 -0
- package/dist/chat-ui/thread/chat-composer-dock.cjs +37 -0
- package/dist/chat-ui/thread/chat-composer-dock.cjs.map +1 -0
- package/dist/chat-ui/thread/chat-composer-dock.js +37 -0
- package/dist/chat-ui/thread/chat-composer-dock.js.map +1 -0
- package/dist/chat-ui/thread/chat-thread-shell.cjs +102 -0
- package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -0
- package/dist/chat-ui/thread/chat-thread-shell.js +102 -0
- package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -0
- package/dist/chat-ui/thread/composer-send-or-stop.cjs +75 -0
- package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -0
- package/dist/chat-ui/thread/composer-send-or-stop.d.ts +0 -6
- package/dist/chat-ui/thread/composer-send-or-stop.js +75 -0
- package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs +134 -0
- package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -0
- package/dist/chat-ui/thread/statewire-history-edge.js +134 -0
- package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -0
- package/dist/{collab.cjs → collab/client.cjs} +6 -166
- package/dist/collab/client.cjs.map +1 -0
- package/dist/{collab.js → collab/client.js} +5 -164
- package/dist/collab/client.js.map +1 -0
- package/dist/collab/close-policy.cjs +14 -0
- package/dist/collab/close-policy.cjs.map +1 -0
- package/dist/collab/close-policy.js +14 -0
- package/dist/collab/close-policy.js.map +1 -0
- package/dist/collab/index.cjs +17 -0
- package/dist/collab/index.cjs.map +1 -0
- package/dist/collab/index.js +17 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/mint.cjs +59 -0
- package/dist/collab/mint.cjs.map +1 -0
- package/dist/collab/mint.js +59 -0
- package/dist/collab/mint.js.map +1 -0
- package/dist/collab/react.cjs +58 -0
- package/dist/collab/react.cjs.map +1 -0
- package/dist/collab/react.js +58 -0
- package/dist/collab/react.js.map +1 -0
- package/dist/collab/shape.cjs +45 -0
- package/dist/collab/shape.cjs.map +1 -0
- package/dist/collab/shape.js +45 -0
- package/dist/collab/shape.js.map +1 -0
- package/dist/composer/AttachmentContext.cjs +40 -0
- package/dist/composer/AttachmentContext.cjs.map +1 -0
- package/dist/composer/AttachmentContext.js +40 -0
- package/dist/composer/AttachmentContext.js.map +1 -0
- package/dist/composer/ComposerAttachmentPreview.cjs +39 -0
- package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -0
- package/dist/composer/ComposerAttachmentPreview.js +39 -0
- package/dist/composer/ComposerAttachmentPreview.js.map +1 -0
- package/dist/composer/ComposerDropZone.cjs +61 -0
- package/dist/composer/ComposerDropZone.cjs.map +1 -0
- package/dist/composer/ComposerDropZone.d.ts +1 -1
- package/dist/composer/ComposerDropZone.js +61 -0
- package/dist/composer/ComposerDropZone.js.map +1 -0
- package/dist/composer/ComposerQuotePreview.cjs +42 -0
- package/dist/composer/ComposerQuotePreview.cjs.map +1 -0
- package/dist/composer/ComposerQuotePreview.js +42 -0
- package/dist/composer/ComposerQuotePreview.js.map +1 -0
- package/dist/composer/FileUploadButton.cjs +65 -0
- package/dist/composer/FileUploadButton.cjs.map +1 -0
- package/dist/composer/FileUploadButton.d.ts +1 -1
- package/dist/composer/FileUploadButton.js +65 -0
- package/dist/composer/FileUploadButton.js.map +1 -0
- package/dist/composer/QuoteContext.cjs +68 -0
- package/dist/composer/QuoteContext.cjs.map +1 -0
- package/dist/composer/QuoteContext.js +68 -0
- package/dist/composer/QuoteContext.js.map +1 -0
- package/dist/composer/build-composed-message.cjs +25 -0
- package/dist/composer/build-composed-message.cjs.map +1 -0
- package/dist/composer/build-composed-message.js +25 -0
- package/dist/composer/build-composed-message.js.map +1 -0
- package/dist/composer/clipboard.cjs +62 -0
- package/dist/composer/clipboard.cjs.map +1 -0
- package/dist/composer/clipboard.d.ts +27 -3
- package/dist/composer/clipboard.js +62 -0
- package/dist/composer/clipboard.js.map +1 -0
- package/dist/composer/useAppendToComposer.cjs +21 -0
- package/dist/composer/useAppendToComposer.cjs.map +1 -0
- package/dist/composer/useAppendToComposer.js +21 -0
- package/dist/composer/useAppendToComposer.js.map +1 -0
- package/dist/composer/useAttachFiles.cjs +40 -0
- package/dist/composer/useAttachFiles.cjs.map +1 -0
- package/dist/composer/useAttachFiles.d.ts +24 -0
- package/dist/composer/useAttachFiles.js +40 -0
- package/dist/composer/useAttachFiles.js.map +1 -0
- package/dist/composer/useComposerAttachment.cjs +25 -0
- package/dist/composer/useComposerAttachment.cjs.map +1 -0
- package/dist/composer/useComposerAttachment.js +25 -0
- package/dist/composer/useComposerAttachment.js.map +1 -0
- package/dist/composer/useFileUpload.cjs +123 -0
- package/dist/composer/useFileUpload.cjs.map +1 -0
- package/dist/composer/useFileUpload.js +123 -0
- package/dist/composer/useFileUpload.js.map +1 -0
- package/dist/composer/useSendMessage.cjs +22 -0
- package/dist/composer/useSendMessage.cjs.map +1 -0
- package/dist/composer/useSendMessage.js +22 -0
- package/dist/composer/useSendMessage.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs +329 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -0
- package/dist/diagnostics/athena-diagnostics.js +329 -0
- package/dist/diagnostics/athena-diagnostics.js.map +1 -0
- package/dist/diagnostics/errors.cjs +89 -0
- package/dist/diagnostics/errors.cjs.map +1 -0
- package/dist/diagnostics/errors.js +89 -0
- package/dist/diagnostics/errors.js.map +1 -0
- package/dist/diagnostics/useAthenaDiagnostics.cjs +16 -0
- package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -0
- package/dist/diagnostics/useAthenaDiagnostics.js +16 -0
- package/dist/diagnostics/useAthenaDiagnostics.js.map +1 -0
- package/dist/index.cjs +274 -27882
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +161 -27759
- package/dist/index.js.map +1 -1
- package/dist/lib/athena-urls.cjs +194 -0
- package/dist/lib/athena-urls.cjs.map +1 -0
- package/dist/lib/athena-urls.d.ts +20 -5
- package/dist/lib/athena-urls.js +194 -0
- package/dist/lib/athena-urls.js.map +1 -0
- package/dist/lib/posthog/before-send.cjs +58 -0
- package/dist/lib/posthog/before-send.cjs.map +1 -0
- package/dist/lib/posthog/before-send.js +58 -0
- package/dist/lib/posthog/before-send.js.map +1 -0
- package/dist/lib/posthog/capture-gate.cjs +322 -0
- package/dist/lib/posthog/capture-gate.cjs.map +1 -0
- package/dist/lib/posthog/capture-gate.js +322 -0
- package/dist/lib/posthog/capture-gate.js.map +1 -0
- package/dist/lib/posthog/wrap-posthog-client.cjs +163 -0
- package/dist/lib/posthog/wrap-posthog-client.cjs.map +1 -0
- package/dist/lib/posthog/wrap-posthog-client.js +163 -0
- package/dist/lib/posthog/wrap-posthog-client.js.map +1 -0
- package/dist/lib/utils.cjs +12 -0
- package/dist/lib/utils.cjs.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +77 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +77 -0
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +181 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +1 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +181 -0
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +1 -0
- package/dist/packages/agent-runtime/src/asset-attachment.cjs +19 -0
- package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/asset-attachment.js +19 -0
- package/dist/packages/agent-runtime/src/asset-attachment.js.map +1 -0
- package/dist/packages/agent-runtime/src/auth-denial.cjs +28 -0
- package/dist/packages/agent-runtime/src/auth-denial.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/auth-denial.js +28 -0
- package/dist/packages/agent-runtime/src/auth-denial.js.map +1 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +270 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.js +270 -0
- package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -0
- package/dist/packages/agent-runtime/src/client-tools.cjs +137 -0
- package/dist/packages/agent-runtime/src/client-tools.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/client-tools.js +137 -0
- package/dist/packages/agent-runtime/src/client-tools.js.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-index.cjs +80 -0
- package/dist/packages/agent-runtime/src/conversation-index.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-index.js +80 -0
- package/dist/packages/agent-runtime/src/conversation-index.js.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-list.cjs +86 -0
- package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/conversation-list.js +86 -0
- package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs +55 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js +55 -0
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
- package/dist/packages/agent-runtime/src/edit-command.cjs +89 -0
- package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/edit-command.js +89 -0
- package/dist/packages/agent-runtime/src/edit-command.js.map +1 -0
- package/dist/packages/agent-runtime/src/errors.cjs +95 -0
- package/dist/packages/agent-runtime/src/errors.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/errors.js +95 -0
- package/dist/packages/agent-runtime/src/errors.js.map +1 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +236 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +236 -0
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
- package/dist/packages/agent-runtime/src/interrupts.cjs +117 -0
- package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/interrupts.js +117 -0
- package/dist/packages/agent-runtime/src/interrupts.js.map +1 -0
- package/dist/packages/agent-runtime/src/message-author.cjs +31 -0
- package/dist/packages/agent-runtime/src/message-author.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/message-author.js +31 -0
- package/dist/packages/agent-runtime/src/message-author.js.map +1 -0
- package/dist/packages/agent-runtime/src/message-window.cjs +85 -0
- package/dist/packages/agent-runtime/src/message-window.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/message-window.js +85 -0
- package/dist/packages/agent-runtime/src/message-window.js.map +1 -0
- package/dist/packages/agent-runtime/src/messages.cjs +433 -0
- package/dist/packages/agent-runtime/src/messages.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/messages.js +433 -0
- package/dist/packages/agent-runtime/src/messages.js.map +1 -0
- package/dist/packages/agent-runtime/src/model-context.cjs +13 -0
- package/dist/packages/agent-runtime/src/model-context.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/model-context.js +13 -0
- package/dist/packages/agent-runtime/src/model-context.js.map +1 -0
- package/dist/packages/agent-runtime/src/optimistic-content.cjs +17 -0
- package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/optimistic-content.js +17 -0
- package/dist/packages/agent-runtime/src/optimistic-content.js.map +1 -0
- package/dist/packages/agent-runtime/src/protocol.cjs +33 -0
- package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/protocol.js +33 -0
- package/dist/packages/agent-runtime/src/protocol.js.map +1 -0
- package/dist/packages/agent-runtime/src/queue.cjs +67 -0
- package/dist/packages/agent-runtime/src/queue.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/queue.js +67 -0
- package/dist/packages/agent-runtime/src/queue.js.map +1 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +47 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +47 -0
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
- package/dist/packages/agent-runtime/src/runtime-messages.cjs +187 -0
- package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/runtime-messages.js +187 -0
- package/dist/packages/agent-runtime/src/runtime-messages.js.map +1 -0
- package/dist/packages/agent-runtime/src/send-recovery.cjs +128 -0
- package/dist/packages/agent-runtime/src/send-recovery.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/send-recovery.js +128 -0
- package/dist/packages/agent-runtime/src/send-recovery.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs +249 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js +249 -0
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-state.cjs +16 -0
- package/dist/packages/agent-runtime/src/statewire-state.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-state.js +16 -0
- package/dist/packages/agent-runtime/src/statewire-state.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs +41 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.js +41 -0
- package/dist/packages/agent-runtime/src/statewire-suspended.js.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -0
- package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/statewire-transport.js +6 -0
- package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs +214 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.js +214 -0
- package/dist/packages/agent-runtime/src/streaming-markdown.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-extras.cjs +38 -0
- package/dist/packages/agent-runtime/src/thread-extras.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-extras.js +38 -0
- package/dist/packages/agent-runtime/src/thread-extras.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +90 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +90 -0
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
- package/dist/packages/agent-runtime/src/thread-status.cjs +49 -0
- package/dist/packages/agent-runtime/src/thread-status.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/thread-status.js +49 -0
- package/dist/packages/agent-runtime/src/thread-status.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-metadata.cjs +1802 -0
- package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-metadata.js +1802 -0
- package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-outputs.cjs +46 -0
- package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-outputs.js +46 -0
- package/dist/packages/agent-runtime/src/tool-outputs.js.map +1 -0
- package/dist/packages/agent-runtime/src/tool-result.cjs +151 -0
- package/dist/packages/agent-runtime/src/tool-result.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/tool-result.js +151 -0
- package/dist/packages/agent-runtime/src/tool-result.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs +139 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.js +139 -0
- package/dist/packages/agent-runtime/src/use-conversation-list.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +28 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +28 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +138 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +138 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +387 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +387 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs +133 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js +133 -0
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
- package/dist/packages/agent-runtime/src/voice-presentation.cjs +37 -0
- package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -0
- package/dist/packages/agent-runtime/src/voice-presentation.js +37 -0
- package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -0
- package/dist/packages/react/package.json.cjs +9 -0
- package/dist/packages/react/package.json.cjs.map +1 -0
- package/dist/packages/react/package.json.js +9 -0
- package/dist/packages/react/package.json.js.map +1 -0
- package/dist/{AthenaContext-B1QMhIP-.cjs → provider/AthenaContext.cjs} +5 -4
- package/dist/provider/AthenaContext.cjs.map +1 -0
- package/dist/{AthenaContext-MOslgOmE.js → provider/AthenaContext.js} +3 -3
- package/dist/provider/AthenaContext.js.map +1 -0
- package/dist/provider/AthenaProvider.cjs +403 -0
- package/dist/provider/AthenaProvider.cjs.map +1 -0
- package/dist/provider/AthenaProvider.js +403 -0
- package/dist/provider/AthenaProvider.js.map +1 -0
- package/dist/provider/PostHogProvider.cjs +81 -0
- package/dist/provider/PostHogProvider.cjs.map +1 -0
- package/dist/provider/PostHogProvider.js +59 -0
- package/dist/provider/PostHogProvider.js.map +1 -0
- package/dist/provider/config.d.ts +8 -7
- package/dist/provider/statewire-lifecycle-context.cjs +10 -0
- package/dist/provider/statewire-lifecycle-context.cjs.map +1 -0
- package/dist/provider/statewire-lifecycle-context.js +10 -0
- package/dist/provider/statewire-lifecycle-context.js.map +1 -0
- package/dist/provider/statewire-window-context.cjs +10 -0
- package/dist/provider/statewire-window-context.cjs.map +1 -0
- package/dist/provider/statewire-window-context.js +10 -0
- package/dist/provider/statewire-window-context.js.map +1 -0
- package/dist/runtime/auth.cjs +309 -0
- package/dist/runtime/auth.cjs.map +1 -0
- package/dist/runtime/auth.d.ts +19 -18
- package/dist/runtime/auth.js +309 -0
- package/dist/runtime/auth.js.map +1 -0
- package/dist/runtime/statewire-auth-headers.cjs +18 -0
- package/dist/runtime/statewire-auth-headers.cjs.map +1 -0
- package/dist/runtime/statewire-auth-headers.js +18 -0
- package/dist/runtime/statewire-auth-headers.js.map +1 -0
- package/dist/runtime/statewire-lifecycle.cjs +67 -0
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -0
- package/dist/runtime/statewire-lifecycle.js +67 -0
- package/dist/runtime/statewire-lifecycle.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +68 -0
- package/dist/runtime/statewire-run-config.cjs.map +1 -0
- package/dist/runtime/statewire-run-config.js +68 -0
- package/dist/runtime/statewire-run-config.js.map +1 -0
- package/dist/runtime/statewire-session-key.cjs +11 -0
- package/dist/runtime/statewire-session-key.cjs.map +1 -0
- package/dist/runtime/statewire-session-key.js +11 -0
- package/dist/runtime/statewire-session-key.js.map +1 -0
- package/dist/runtime/useAthenaStatewireRuntime.cjs +179 -0
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -0
- package/dist/runtime/useAthenaStatewireRuntime.js +180 -0
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme/index.cjs +182 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.js +182 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/threads/ThreadList.cjs +55 -0
- package/dist/threads/ThreadList.cjs.map +1 -0
- package/dist/threads/ThreadList.js +55 -0
- package/dist/threads/ThreadList.js.map +1 -0
- package/dist/threads/api.cjs +208 -0
- package/dist/threads/api.cjs.map +1 -0
- package/dist/threads/api.js +208 -0
- package/dist/threads/api.js.map +1 -0
- package/dist/threads/conversation-list-fetcher.cjs +70 -0
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -0
- package/dist/threads/conversation-list-fetcher.js +70 -0
- package/dist/threads/conversation-list-fetcher.js.map +1 -0
- package/dist/threads/mint-thread-id.cjs +7 -0
- package/dist/threads/mint-thread-id.cjs.map +1 -0
- package/dist/threads/mint-thread-id.js +7 -0
- package/dist/threads/mint-thread-id.js.map +1 -0
- package/dist/threads/statewire-thread-list.cjs +231 -0
- package/dist/threads/statewire-thread-list.cjs.map +1 -0
- package/dist/threads/statewire-thread-list.js +231 -0
- package/dist/threads/statewire-thread-list.js.map +1 -0
- package/dist/threads/thread-id-context.cjs +22 -0
- package/dist/threads/thread-id-context.cjs.map +1 -0
- package/dist/threads/thread-id-context.d.ts +9 -0
- package/dist/threads/thread-id-context.js +22 -0
- package/dist/threads/thread-id-context.js.map +1 -0
- package/dist/threads/title.cjs +95 -0
- package/dist/threads/title.cjs.map +1 -0
- package/dist/threads/title.js +95 -0
- package/dist/threads/title.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.cjs +79 -0
- package/dist/threads/use-rest-conversation-history.cjs.map +1 -0
- package/dist/threads/use-rest-conversation-history.js +79 -0
- package/dist/threads/use-rest-conversation-history.js.map +1 -0
- package/dist/threads/use-statewire-conversation-history.cjs +243 -0
- package/dist/threads/use-statewire-conversation-history.cjs.map +1 -0
- package/dist/threads/use-statewire-conversation-history.js +243 -0
- package/dist/threads/use-statewire-conversation-history.js.map +1 -0
- package/dist/threads/useAthenaThreadManager.cjs +24 -0
- package/dist/threads/useAthenaThreadManager.cjs.map +1 -0
- package/dist/threads/useAthenaThreadManager.js +24 -0
- package/dist/threads/useAthenaThreadManager.js.map +1 -0
- package/dist/toolkits/index.cjs +279 -0
- package/dist/toolkits/index.cjs.map +1 -0
- package/dist/toolkits/index.js +279 -0
- package/dist/toolkits/index.js.map +1 -0
- package/dist/tools/NestedPtcMessages.cjs +46 -0
- package/dist/tools/NestedPtcMessages.cjs.map +1 -0
- package/dist/tools/NestedPtcMessages.js +46 -0
- package/dist/tools/NestedPtcMessages.js.map +1 -0
- package/dist/tools/append-document-tool-ui.cjs +145 -0
- package/dist/tools/append-document-tool-ui.cjs.map +1 -0
- package/dist/tools/append-document-tool-ui.js +145 -0
- package/dist/tools/append-document-tool-ui.js.map +1 -0
- package/dist/tools/asset-utils.cjs +16 -0
- package/dist/tools/asset-utils.cjs.map +1 -0
- package/dist/tools/asset-utils.js +16 -0
- package/dist/tools/asset-utils.js.map +1 -0
- package/dist/tools/auto-open-tools.cjs +121 -0
- package/dist/tools/auto-open-tools.cjs.map +1 -0
- package/dist/tools/auto-open-tools.js +121 -0
- package/dist/tools/auto-open-tools.js.map +1 -0
- package/dist/tools/file-tool-uis.cjs +108 -0
- package/dist/tools/file-tool-uis.cjs.map +1 -0
- package/dist/tools/file-tool-uis.js +108 -0
- package/dist/tools/file-tool-uis.js.map +1 -0
- package/dist/tools/index.cjs +56 -0
- package/dist/tools/index.cjs.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +56 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/misc-tool-uis.cjs +54 -0
- package/dist/tools/misc-tool-uis.cjs.map +1 -0
- package/dist/{misc-tool-uis-gAiQw0Yl.js → tools/misc-tool-uis.js} +17 -7
- package/dist/tools/misc-tool-uis.js.map +1 -0
- package/dist/tools/primitives.cjs +166 -0
- package/dist/tools/primitives.cjs.map +1 -0
- package/dist/tools/primitives.js +166 -0
- package/dist/tools/primitives.js.map +1 -0
- package/dist/tools/read-asset-tool-ui.cjs +284 -0
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -0
- package/dist/tools/read-asset-tool-ui.js +284 -0
- package/dist/tools/read-asset-tool-ui.js.map +1 -0
- package/dist/tools/todo-plan-store.cjs +88 -0
- package/dist/tools/todo-plan-store.cjs.map +1 -0
- package/dist/tools/todo-plan-store.js +88 -0
- package/dist/tools/todo-plan-store.js.map +1 -0
- package/dist/tools/tool-fallback.cjs +667 -0
- package/dist/tools/tool-fallback.cjs.map +1 -0
- package/dist/tools/tool-fallback.js +667 -0
- package/dist/tools/tool-fallback.js.map +1 -0
- package/dist/tools/tool-icons.cjs +61 -0
- package/dist/tools/tool-icons.cjs.map +1 -0
- package/dist/tools/tool-icons.js +61 -0
- package/dist/tools/tool-icons.js.map +1 -0
- package/dist/tools/tool-uis.cjs +3049 -0
- package/dist/tools/tool-uis.cjs.map +1 -0
- package/dist/tools/tool-uis.js +3049 -0
- package/dist/tools/tool-uis.js.map +1 -0
- package/dist/tools/voice-update-tool-ui.cjs +89 -0
- package/dist/tools/voice-update-tool-ui.cjs.map +1 -0
- package/dist/tools/voice-update-tool-ui.d.ts +27 -0
- package/dist/tools/voice-update-tool-ui.js +89 -0
- package/dist/tools/voice-update-tool-ui.js.map +1 -0
- package/dist/tools/write-todos-tool-ui.cjs +270 -0
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -0
- package/dist/tools/write-todos-tool-ui.js +270 -0
- package/dist/tools/write-todos-tool-ui.js.map +1 -0
- package/dist/ui/button.cjs +57 -0
- package/dist/ui/button.cjs.map +1 -0
- package/dist/ui/button.js +57 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/collapsible.cjs +17 -0
- package/dist/ui/collapsible.cjs.map +1 -0
- package/dist/ui/collapsible.js +17 -0
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/ui/tooltip.cjs +48 -0
- package/dist/ui/tooltip.cjs.map +1 -0
- package/dist/ui/tooltip.js +48 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/version.cjs +6 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +18 -20
- package/dist/AthenaAuthContext-B3AwLA5Z.cjs.map +0 -1
- package/dist/AthenaAuthContext-DQsdayH2.js.map +0 -1
- package/dist/AthenaContext-B1QMhIP-.cjs.map +0 -1
- package/dist/AthenaContext-MOslgOmE.js.map +0 -1
- package/dist/SuperGroupingCard-BsWbHyV_.js +0 -795
- package/dist/SuperGroupingCard-BsWbHyV_.js.map +0 -1
- package/dist/SuperGroupingCard-CRRFUgjN.cjs +0 -794
- package/dist/SuperGroupingCard-CRRFUgjN.cjs.map +0 -1
- package/dist/auth.cjs.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/chat/ComposerEditorContext.d.ts +0 -36
- package/dist/chat/tiptap-composer.d.ts +0 -7
- package/dist/chat-ui-statewire.cjs +0 -25
- package/dist/chat-ui-statewire.cjs.map +0 -1
- package/dist/chat-ui-statewire.js +0 -25
- package/dist/chat-ui-statewire.js.map +0 -1
- package/dist/chat-ui.cjs +0 -2484
- package/dist/chat-ui.cjs.map +0 -1
- package/dist/chat-ui.js +0 -2486
- package/dist/chat-ui.js.map +0 -1
- package/dist/collab.cjs.map +0 -1
- package/dist/collab.js.map +0 -1
- package/dist/mentions/composer-keybinds.d.ts +0 -5
- package/dist/mentions/mention-extension.d.ts +0 -6
- package/dist/mentions/mention-icons.d.ts +0 -4
- package/dist/mentions/mention-node-view.d.ts +0 -2
- package/dist/mentions/mention-suggestion-list.d.ts +0 -14
- package/dist/mentions/mention-suggestion-popup.d.ts +0 -15
- package/dist/mentions/mention-suggestions-extension.d.ts +0 -11
- package/dist/mentions/mention-types.d.ts +0 -21
- package/dist/mentions/mention-utils.d.ts +0 -23
- package/dist/mentions/use-mention-suggestions.d.ts +0 -29
- package/dist/misc-tool-uis-B2e0Okkn.cjs +0 -43
- package/dist/misc-tool-uis-B2e0Okkn.cjs.map +0 -1
- package/dist/misc-tool-uis-gAiQw0Yl.js.map +0 -1
- package/dist/statewire-continue-run-D34gS7_1.js.map +0 -1
- package/dist/statewire-continue-run-nE9VCKUh.cjs.map +0 -1
- package/dist/statewire-history-edge-C8uyTEjX.cjs +0 -1711
- package/dist/statewire-history-edge-C8uyTEjX.cjs.map +0 -1
- package/dist/statewire-history-edge-CPohUKMt.js +0 -1712
- package/dist/statewire-history-edge-CPohUKMt.js.map +0 -1
- package/dist/super-grouping.cjs +0 -22
- package/dist/super-grouping.cjs.map +0 -1
- package/dist/super-grouping.js +0 -22
- package/dist/super-grouping.js.map +0 -1
- package/dist/tool-fallback-DkQ3DLkn.js +0 -4281
- package/dist/tool-fallback-DkQ3DLkn.js.map +0 -1
- package/dist/tool-fallback-kfhpJQZa.cjs +0 -4297
- package/dist/tool-fallback-kfhpJQZa.cjs.map +0 -1
- package/dist/tools.cjs +0 -41
- package/dist/tools.cjs.map +0 -1
- package/dist/tools.js +0 -41
- package/dist/tools.js.map +0 -1
- package/dist/trash-2-B5OaNAL7.cjs +0 -5096
- package/dist/trash-2-B5OaNAL7.cjs.map +0 -1
- package/dist/trash-2-CCwSURL-.js +0 -5081
- package/dist/trash-2-CCwSURL-.js.map +0 -1
- package/dist/use-rest-conversation-history-Cm8qMRxp.cjs +0 -32397
- package/dist/use-rest-conversation-history-Cm8qMRxp.cjs.map +0 -1
- package/dist/use-rest-conversation-history-veDZS-oL.js +0 -32361
- package/dist/use-rest-conversation-history-veDZS-oL.js.map +0 -1
- package/dist/wrench-BEf72cyP.cjs +0 -417
- package/dist/wrench-BEf72cyP.cjs.map +0 -1
- package/dist/wrench-CbrOlVYm.js +0 -418
- package/dist/wrench-CbrOlVYm.js.map +0 -1
- package/dist/x-Dfd2NzK0.cjs +0 -42
- package/dist/x-Dfd2NzK0.cjs.map +0 -1
- package/dist/x-_DntAa_a.js +0 -43
- package/dist/x-_DntAa_a.js.map +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Loader2Icon, AlertCircleIcon, PaperclipIcon } from "lucide-react";
|
|
3
|
+
import { useRef, useCallback } from "react";
|
|
4
|
+
import { useAttachFiles } from "./useAttachFiles.js";
|
|
5
|
+
import { cn } from "cnfast";
|
|
6
|
+
const FileUploadButton = ({
|
|
7
|
+
className,
|
|
8
|
+
onUpload,
|
|
9
|
+
accept
|
|
10
|
+
}) => {
|
|
11
|
+
const inputRef = useRef(null);
|
|
12
|
+
const { attachFiles, isUploading, error, clearError } = useAttachFiles();
|
|
13
|
+
const handleClick = useCallback(() => {
|
|
14
|
+
var _a;
|
|
15
|
+
clearError();
|
|
16
|
+
(_a = inputRef.current) == null ? void 0 : _a.click();
|
|
17
|
+
}, [clearError]);
|
|
18
|
+
const handleFiles = useCallback(
|
|
19
|
+
async (files) => {
|
|
20
|
+
if (!files || files.length === 0) return;
|
|
21
|
+
const assets = await attachFiles(Array.from(files), "paperclip");
|
|
22
|
+
if (assets.length > 0) {
|
|
23
|
+
onUpload == null ? void 0 : onUpload(assets);
|
|
24
|
+
}
|
|
25
|
+
if (inputRef.current) {
|
|
26
|
+
inputRef.current.value = "";
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
[attachFiles, onUpload]
|
|
30
|
+
);
|
|
31
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
32
|
+
/* @__PURE__ */ jsx(
|
|
33
|
+
"input",
|
|
34
|
+
{
|
|
35
|
+
ref: inputRef,
|
|
36
|
+
type: "file",
|
|
37
|
+
multiple: true,
|
|
38
|
+
accept,
|
|
39
|
+
className: "hidden",
|
|
40
|
+
onChange: (e) => handleFiles(e.target.files),
|
|
41
|
+
"aria-label": "Upload files"
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
"button",
|
|
46
|
+
{
|
|
47
|
+
type: "button",
|
|
48
|
+
onClick: handleClick,
|
|
49
|
+
disabled: isUploading,
|
|
50
|
+
className: cn(
|
|
51
|
+
"aui-file-upload-btn flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50 disabled:pointer-events-none",
|
|
52
|
+
error && "text-destructive",
|
|
53
|
+
className
|
|
54
|
+
),
|
|
55
|
+
title: error ?? (isUploading ? "Uploading..." : "Attach files"),
|
|
56
|
+
"aria-label": isUploading ? "Uploading files" : "Attach files",
|
|
57
|
+
children: isUploading ? /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" }) : error ? /* @__PURE__ */ jsx(AlertCircleIcon, { className: "size-4" }) : /* @__PURE__ */ jsx(PaperclipIcon, { className: "size-4" })
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
] });
|
|
61
|
+
};
|
|
62
|
+
export {
|
|
63
|
+
FileUploadButton
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=FileUploadButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploadButton.js","sources":["../../src/composer/FileUploadButton.tsx"],"sourcesContent":["import { PaperclipIcon, Loader2Icon, AlertCircleIcon } from 'lucide-react';\nimport { useCallback, useRef, type FC } from 'react';\nimport { useAttachFiles } from './useAttachFiles';\nimport type { UploadedAsset } from './useFileUpload';\nimport { cn } from '../lib/utils';\n\nexport interface FileUploadButtonProps {\n className?: string;\n /** Called after files are uploaded successfully. Receives the created assets. */\n onUpload?: (assets: UploadedAsset[]) => void;\n /** Accepted file types (MIME pattern). Defaults to all files. */\n accept?: string;\n}\n\n/**\n * Paperclip button that opens a file picker and uploads selected files to Athena.\n * After upload, adds files to the attachment context so they appear as pills\n * above the composer and get included when the message is sent.\n */\nexport const FileUploadButton: FC<FileUploadButtonProps> = ({\n className,\n onUpload,\n accept,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { attachFiles, isUploading, error, clearError } = useAttachFiles();\n\n const handleClick = useCallback(() => {\n clearError();\n inputRef.current?.click();\n }, [clearError]);\n\n const handleFiles = useCallback(\n async (files: FileList | null) => {\n if (!files || files.length === 0) return;\n\n const assets = await attachFiles(Array.from(files), 'paperclip');\n if (assets.length > 0) {\n onUpload?.(assets);\n }\n\n // Reset input so the same file can be re-selected\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n },\n [attachFiles, onUpload],\n );\n\n return (\n <>\n <input\n ref={inputRef}\n type=\"file\"\n multiple\n accept={accept}\n className=\"hidden\"\n onChange={(e) => handleFiles(e.target.files)}\n aria-label=\"Upload files\"\n />\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isUploading}\n className={cn(\n 'aui-file-upload-btn flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50 disabled:pointer-events-none',\n error && 'text-destructive',\n className,\n )}\n title={error ?? (isUploading ? 'Uploading...' : 'Attach files')}\n aria-label={isUploading ? 'Uploading files' : 'Attach files'}\n >\n {isUploading ? (\n <Loader2Icon className=\"size-4 animate-spin\" />\n ) : error ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <PaperclipIcon className=\"size-4\" />\n )}\n </button>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAmBO,MAAM,mBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,WAAW,OAAyB,IAAI;AAC9C,QAAM,EAAE,aAAa,aAAa,OAAO,WAAA,IAAe,eAAA;AAExD,QAAM,cAAc,YAAY,MAAM;;AACpC,eAAA;AACA,mBAAS,YAAT,mBAAkB;AAAA,EACpB,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,cAAc;AAAA,IAClB,OAAO,UAA2B;AAChC,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAElC,YAAM,SAAS,MAAM,YAAY,MAAM,KAAK,KAAK,GAAG,WAAW;AAC/D,UAAI,OAAO,SAAS,GAAG;AACrB,6CAAW;AAAA,MACb;AAGA,UAAI,SAAS,SAAS;AACpB,iBAAS,QAAQ,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,aAAa,QAAQ;AAAA,EAAA;AAGxB,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,UAAQ;AAAA,QACR;AAAA,QACA,WAAU;AAAA,QACV,UAAU,CAAC,MAAM,YAAY,EAAE,OAAO,KAAK;AAAA,QAC3C,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAEb;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA,SAAS;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,OAAO,UAAU,cAAc,iBAAiB;AAAA,QAChD,cAAY,cAAc,oBAAoB;AAAA,QAE7C,UAAA,cACC,oBAAC,aAAA,EAAY,WAAU,uBAAsB,IAC3C,QACF,oBAAC,iBAAA,EAAgB,WAAU,UAAS,IAEpC,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAEtC,GACF;AAEJ;"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const QuoteCtx = react.createContext(null);
|
|
6
|
+
function QuoteProvider({ children }) {
|
|
7
|
+
const [quote, setQuote] = react.useState(null);
|
|
8
|
+
const clearQuote = react.useCallback(() => setQuote(null), []);
|
|
9
|
+
const value = react.useMemo(() => ({ quote, setQuote, clearQuote }), [quote, setQuote, clearQuote]);
|
|
10
|
+
return /* @__PURE__ */ jsxRuntime.jsx(QuoteCtx.Provider, { value, children });
|
|
11
|
+
}
|
|
12
|
+
function useQuote() {
|
|
13
|
+
const ctx = react.useContext(QuoteCtx);
|
|
14
|
+
if (!ctx) {
|
|
15
|
+
throw new Error("[AthenaSDK] useQuote must be used within <QuoteProvider>");
|
|
16
|
+
}
|
|
17
|
+
return ctx;
|
|
18
|
+
}
|
|
19
|
+
function useQuoteFromPostMessage() {
|
|
20
|
+
const { setQuote } = useQuote();
|
|
21
|
+
react.useEffect(() => {
|
|
22
|
+
const handleKeydown = (e) => {
|
|
23
|
+
var _a;
|
|
24
|
+
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "l") {
|
|
25
|
+
const sel = window.getSelection();
|
|
26
|
+
const selection = (_a = sel == null ? void 0 : sel.toString()) == null ? void 0 : _a.trim();
|
|
27
|
+
if (selection && selection.length > 0) {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
let messageId;
|
|
30
|
+
let role;
|
|
31
|
+
let node = sel == null ? void 0 : sel.anchorNode;
|
|
32
|
+
while (node && node !== document.body) {
|
|
33
|
+
if (node instanceof HTMLElement) {
|
|
34
|
+
const dataRole = node.getAttribute("data-role");
|
|
35
|
+
if (dataRole === "assistant" || dataRole === "user") {
|
|
36
|
+
role = dataRole;
|
|
37
|
+
messageId = node.getAttribute("data-message-id") ?? void 0;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
node = node.parentElement;
|
|
42
|
+
}
|
|
43
|
+
setQuote({ text: selection, sourceRole: role, sourceMessageId: messageId });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const handleMessage = (event) => {
|
|
48
|
+
const data = event.data;
|
|
49
|
+
if (data && typeof data === "object" && data.type === "athena-add-to-composer" && typeof data.text === "string" && data.text.trim().length > 0) {
|
|
50
|
+
setQuote({
|
|
51
|
+
text: data.text,
|
|
52
|
+
sourceTitle: data.sourceTitle,
|
|
53
|
+
sourceAssetId: data.sourceAssetId
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
document.addEventListener("keydown", handleKeydown, true);
|
|
58
|
+
window.addEventListener("message", handleMessage);
|
|
59
|
+
return () => {
|
|
60
|
+
document.removeEventListener("keydown", handleKeydown, true);
|
|
61
|
+
window.removeEventListener("message", handleMessage);
|
|
62
|
+
};
|
|
63
|
+
}, [setQuote]);
|
|
64
|
+
}
|
|
65
|
+
exports.QuoteProvider = QuoteProvider;
|
|
66
|
+
exports.useQuote = useQuote;
|
|
67
|
+
exports.useQuoteFromPostMessage = useQuoteFromPostMessage;
|
|
68
|
+
//# sourceMappingURL=QuoteContext.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteContext.cjs","sources":["../../src/composer/QuoteContext.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode } from 'react';\n\nexport interface QuoteData {\n /** The selected/quoted text. */\n text: string;\n /** Title of the source (e.g., asset title, document name). */\n sourceTitle?: string;\n /** Asset ID of the source (for attribution). */\n sourceAssetId?: string;\n /** Message ID of the source message (when quoting from chat). */\n sourceMessageId?: string;\n /** Role of the source message ('assistant' | 'user'). */\n sourceRole?: string;\n}\n\ninterface QuoteContextValue {\n quote: QuoteData | null;\n setQuote: (quote: QuoteData | null) => void;\n clearQuote: () => void;\n}\n\nconst QuoteCtx = createContext<QuoteContextValue | null>(null);\n\nexport function QuoteProvider({ children }: { children: ReactNode }) {\n const [quote, setQuote] = useState<QuoteData | null>(null);\n const clearQuote = useCallback(() => setQuote(null), []);\n\n const value = useMemo(() => ({ quote, setQuote, clearQuote }), [quote, setQuote, clearQuote]);\n\n return (\n <QuoteCtx.Provider value={value}>\n {children}\n </QuoteCtx.Provider>\n );\n}\n\nexport function useQuote(): QuoteContextValue {\n const ctx = useContext(QuoteCtx);\n if (!ctx) {\n throw new Error('[AthenaSDK] useQuote must be used within <QuoteProvider>');\n }\n return ctx;\n}\n\n/**\n * Listens for:\n * 1. Cmd+L / Ctrl+L keydown — grabs the current text selection and sets it as a quote.\n * `preventDefault` stops the browser from focusing the URL bar.\n * 2. PostMessage events from child iframes (asset panels, embedded content)\n * with type `athena-add-to-composer`.\n *\n * Mount this once inside AthenaProvider.\n */\nexport function useQuoteFromPostMessage() {\n const { setQuote } = useQuote();\n\n useEffect(() => {\n // ── Cmd+L / Ctrl+L keyboard handler ──────────────────────────────\n const handleKeydown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'l') {\n const sel = window.getSelection();\n const selection = sel?.toString()?.trim();\n\n if (selection && selection.length > 0) {\n e.preventDefault();\n\n // Walk up from the selection anchor to find the message container.\n // assistant-ui message roots have data-role=\"assistant\" or data-role=\"user\".\n let messageId: string | undefined;\n let role: string | undefined;\n let node = sel?.anchorNode as HTMLElement | null;\n while (node && node !== document.body) {\n if (node instanceof HTMLElement) {\n const dataRole = node.getAttribute('data-role');\n if (dataRole === 'assistant' || dataRole === 'user') {\n role = dataRole;\n // assistant-ui sets data-message-id on message roots\n messageId = node.getAttribute('data-message-id') ?? undefined;\n break;\n }\n }\n node = node.parentElement;\n }\n\n setQuote({ text: selection, sourceRole: role, sourceMessageId: messageId });\n }\n }\n };\n\n // ── PostMessage handler (from iframes) ───────────────────────────\n // NOTE: Accepts messages from any origin by design. The SDK consumer\n // controls which iframes are embedded, defining the trust boundary.\n // A future `allowedOrigins` config could restrict this if needed.\n const handleMessage = (event: MessageEvent) => {\n const data = event.data;\n if (\n data &&\n typeof data === 'object' &&\n data.type === 'athena-add-to-composer' &&\n typeof data.text === 'string' &&\n data.text.trim().length > 0\n ) {\n setQuote({\n text: data.text,\n sourceTitle: data.sourceTitle,\n sourceAssetId: data.sourceAssetId,\n });\n }\n };\n\n document.addEventListener('keydown', handleKeydown, true); // capture phase to beat the browser\n window.addEventListener('message', handleMessage);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown, true);\n window.removeEventListener('message', handleMessage);\n };\n }, [setQuote]);\n}\n"],"names":["createContext","useState","useCallback","useMemo","jsx","useContext","useEffect"],"mappings":";;;;AAqBA,MAAM,WAAWA,MAAAA,cAAwC,IAAI;AAEtD,SAAS,cAAc,EAAE,YAAqC;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAIC,MAAAA,SAA2B,IAAI;AACzD,QAAM,aAAaC,MAAAA,YAAY,MAAM,SAAS,IAAI,GAAG,CAAA,CAAE;AAEvD,QAAM,QAAQC,MAAAA,QAAQ,OAAO,EAAE,OAAO,UAAU,WAAA,IAAe,CAAC,OAAO,UAAU,UAAU,CAAC;AAE5F,SACEC,2BAAAA,IAAC,SAAS,UAAT,EAAkB,OAChB,SAAA,CACH;AAEJ;AAEO,SAAS,WAA8B;AAC5C,QAAM,MAAMC,MAAAA,WAAW,QAAQ;AAC/B,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,SAAO;AACT;AAWO,SAAS,0BAA0B;AACxC,QAAM,EAAE,SAAA,IAAa,SAAA;AAErBC,QAAAA,UAAU,MAAM;AAEd,UAAM,gBAAgB,CAAC,MAAqB;;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,YAAA,MAAkB,KAAK;AAC3D,cAAM,MAAM,OAAO,aAAA;AACnB,cAAM,aAAY,gCAAK,eAAL,mBAAiB;AAEnC,YAAI,aAAa,UAAU,SAAS,GAAG;AACrC,YAAE,eAAA;AAIF,cAAI;AACJ,cAAI;AACJ,cAAI,OAAO,2BAAK;AAChB,iBAAO,QAAQ,SAAS,SAAS,MAAM;AACrC,gBAAI,gBAAgB,aAAa;AAC/B,oBAAM,WAAW,KAAK,aAAa,WAAW;AAC9C,kBAAI,aAAa,eAAe,aAAa,QAAQ;AACnD,uBAAO;AAEP,4BAAY,KAAK,aAAa,iBAAiB,KAAK;AACpD;AAAA,cACF;AAAA,YACF;AACA,mBAAO,KAAK;AAAA,UACd;AAEA,mBAAS,EAAE,MAAM,WAAW,YAAY,MAAM,iBAAiB,WAAW;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AAMA,UAAM,gBAAgB,CAAC,UAAwB;AAC7C,YAAM,OAAO,MAAM;AACnB,UACE,QACA,OAAO,SAAS,YAChB,KAAK,SAAS,4BACd,OAAO,KAAK,SAAS,YACrB,KAAK,KAAK,KAAA,EAAO,SAAS,GAC1B;AACA,iBAAS;AAAA,UACP,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,eAAe,KAAK;AAAA,QAAA,CACrB;AAAA,MACH;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,eAAe,IAAI;AACxD,WAAO,iBAAiB,WAAW,aAAa;AAEhD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,eAAe,IAAI;AAC3D,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AACf;;;;"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState, useCallback, useMemo, createContext, useEffect } from "react";
|
|
3
|
+
const QuoteCtx = createContext(null);
|
|
4
|
+
function QuoteProvider({ children }) {
|
|
5
|
+
const [quote, setQuote] = useState(null);
|
|
6
|
+
const clearQuote = useCallback(() => setQuote(null), []);
|
|
7
|
+
const value = useMemo(() => ({ quote, setQuote, clearQuote }), [quote, setQuote, clearQuote]);
|
|
8
|
+
return /* @__PURE__ */ jsx(QuoteCtx.Provider, { value, children });
|
|
9
|
+
}
|
|
10
|
+
function useQuote() {
|
|
11
|
+
const ctx = useContext(QuoteCtx);
|
|
12
|
+
if (!ctx) {
|
|
13
|
+
throw new Error("[AthenaSDK] useQuote must be used within <QuoteProvider>");
|
|
14
|
+
}
|
|
15
|
+
return ctx;
|
|
16
|
+
}
|
|
17
|
+
function useQuoteFromPostMessage() {
|
|
18
|
+
const { setQuote } = useQuote();
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const handleKeydown = (e) => {
|
|
21
|
+
var _a;
|
|
22
|
+
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "l") {
|
|
23
|
+
const sel = window.getSelection();
|
|
24
|
+
const selection = (_a = sel == null ? void 0 : sel.toString()) == null ? void 0 : _a.trim();
|
|
25
|
+
if (selection && selection.length > 0) {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
let messageId;
|
|
28
|
+
let role;
|
|
29
|
+
let node = sel == null ? void 0 : sel.anchorNode;
|
|
30
|
+
while (node && node !== document.body) {
|
|
31
|
+
if (node instanceof HTMLElement) {
|
|
32
|
+
const dataRole = node.getAttribute("data-role");
|
|
33
|
+
if (dataRole === "assistant" || dataRole === "user") {
|
|
34
|
+
role = dataRole;
|
|
35
|
+
messageId = node.getAttribute("data-message-id") ?? void 0;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
node = node.parentElement;
|
|
40
|
+
}
|
|
41
|
+
setQuote({ text: selection, sourceRole: role, sourceMessageId: messageId });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const handleMessage = (event) => {
|
|
46
|
+
const data = event.data;
|
|
47
|
+
if (data && typeof data === "object" && data.type === "athena-add-to-composer" && typeof data.text === "string" && data.text.trim().length > 0) {
|
|
48
|
+
setQuote({
|
|
49
|
+
text: data.text,
|
|
50
|
+
sourceTitle: data.sourceTitle,
|
|
51
|
+
sourceAssetId: data.sourceAssetId
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
document.addEventListener("keydown", handleKeydown, true);
|
|
56
|
+
window.addEventListener("message", handleMessage);
|
|
57
|
+
return () => {
|
|
58
|
+
document.removeEventListener("keydown", handleKeydown, true);
|
|
59
|
+
window.removeEventListener("message", handleMessage);
|
|
60
|
+
};
|
|
61
|
+
}, [setQuote]);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
QuoteProvider,
|
|
65
|
+
useQuote,
|
|
66
|
+
useQuoteFromPostMessage
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=QuoteContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteContext.js","sources":["../../src/composer/QuoteContext.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode } from 'react';\n\nexport interface QuoteData {\n /** The selected/quoted text. */\n text: string;\n /** Title of the source (e.g., asset title, document name). */\n sourceTitle?: string;\n /** Asset ID of the source (for attribution). */\n sourceAssetId?: string;\n /** Message ID of the source message (when quoting from chat). */\n sourceMessageId?: string;\n /** Role of the source message ('assistant' | 'user'). */\n sourceRole?: string;\n}\n\ninterface QuoteContextValue {\n quote: QuoteData | null;\n setQuote: (quote: QuoteData | null) => void;\n clearQuote: () => void;\n}\n\nconst QuoteCtx = createContext<QuoteContextValue | null>(null);\n\nexport function QuoteProvider({ children }: { children: ReactNode }) {\n const [quote, setQuote] = useState<QuoteData | null>(null);\n const clearQuote = useCallback(() => setQuote(null), []);\n\n const value = useMemo(() => ({ quote, setQuote, clearQuote }), [quote, setQuote, clearQuote]);\n\n return (\n <QuoteCtx.Provider value={value}>\n {children}\n </QuoteCtx.Provider>\n );\n}\n\nexport function useQuote(): QuoteContextValue {\n const ctx = useContext(QuoteCtx);\n if (!ctx) {\n throw new Error('[AthenaSDK] useQuote must be used within <QuoteProvider>');\n }\n return ctx;\n}\n\n/**\n * Listens for:\n * 1. Cmd+L / Ctrl+L keydown — grabs the current text selection and sets it as a quote.\n * `preventDefault` stops the browser from focusing the URL bar.\n * 2. PostMessage events from child iframes (asset panels, embedded content)\n * with type `athena-add-to-composer`.\n *\n * Mount this once inside AthenaProvider.\n */\nexport function useQuoteFromPostMessage() {\n const { setQuote } = useQuote();\n\n useEffect(() => {\n // ── Cmd+L / Ctrl+L keyboard handler ──────────────────────────────\n const handleKeydown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'l') {\n const sel = window.getSelection();\n const selection = sel?.toString()?.trim();\n\n if (selection && selection.length > 0) {\n e.preventDefault();\n\n // Walk up from the selection anchor to find the message container.\n // assistant-ui message roots have data-role=\"assistant\" or data-role=\"user\".\n let messageId: string | undefined;\n let role: string | undefined;\n let node = sel?.anchorNode as HTMLElement | null;\n while (node && node !== document.body) {\n if (node instanceof HTMLElement) {\n const dataRole = node.getAttribute('data-role');\n if (dataRole === 'assistant' || dataRole === 'user') {\n role = dataRole;\n // assistant-ui sets data-message-id on message roots\n messageId = node.getAttribute('data-message-id') ?? undefined;\n break;\n }\n }\n node = node.parentElement;\n }\n\n setQuote({ text: selection, sourceRole: role, sourceMessageId: messageId });\n }\n }\n };\n\n // ── PostMessage handler (from iframes) ───────────────────────────\n // NOTE: Accepts messages from any origin by design. The SDK consumer\n // controls which iframes are embedded, defining the trust boundary.\n // A future `allowedOrigins` config could restrict this if needed.\n const handleMessage = (event: MessageEvent) => {\n const data = event.data;\n if (\n data &&\n typeof data === 'object' &&\n data.type === 'athena-add-to-composer' &&\n typeof data.text === 'string' &&\n data.text.trim().length > 0\n ) {\n setQuote({\n text: data.text,\n sourceTitle: data.sourceTitle,\n sourceAssetId: data.sourceAssetId,\n });\n }\n };\n\n document.addEventListener('keydown', handleKeydown, true); // capture phase to beat the browser\n window.addEventListener('message', handleMessage);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown, true);\n window.removeEventListener('message', handleMessage);\n };\n }, [setQuote]);\n}\n"],"names":[],"mappings":";;AAqBA,MAAM,WAAW,cAAwC,IAAI;AAEtD,SAAS,cAAc,EAAE,YAAqC;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA2B,IAAI;AACzD,QAAM,aAAa,YAAY,MAAM,SAAS,IAAI,GAAG,CAAA,CAAE;AAEvD,QAAM,QAAQ,QAAQ,OAAO,EAAE,OAAO,UAAU,WAAA,IAAe,CAAC,OAAO,UAAU,UAAU,CAAC;AAE5F,SACE,oBAAC,SAAS,UAAT,EAAkB,OAChB,SAAA,CACH;AAEJ;AAEO,SAAS,WAA8B;AAC5C,QAAM,MAAM,WAAW,QAAQ;AAC/B,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,SAAO;AACT;AAWO,SAAS,0BAA0B;AACxC,QAAM,EAAE,SAAA,IAAa,SAAA;AAErB,YAAU,MAAM;AAEd,UAAM,gBAAgB,CAAC,MAAqB;;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,YAAA,MAAkB,KAAK;AAC3D,cAAM,MAAM,OAAO,aAAA;AACnB,cAAM,aAAY,gCAAK,eAAL,mBAAiB;AAEnC,YAAI,aAAa,UAAU,SAAS,GAAG;AACrC,YAAE,eAAA;AAIF,cAAI;AACJ,cAAI;AACJ,cAAI,OAAO,2BAAK;AAChB,iBAAO,QAAQ,SAAS,SAAS,MAAM;AACrC,gBAAI,gBAAgB,aAAa;AAC/B,oBAAM,WAAW,KAAK,aAAa,WAAW;AAC9C,kBAAI,aAAa,eAAe,aAAa,QAAQ;AACnD,uBAAO;AAEP,4BAAY,KAAK,aAAa,iBAAiB,KAAK;AACpD;AAAA,cACF;AAAA,YACF;AACA,mBAAO,KAAK;AAAA,UACd;AAEA,mBAAS,EAAE,MAAM,WAAW,YAAY,MAAM,iBAAiB,WAAW;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AAMA,UAAM,gBAAgB,CAAC,UAAwB;AAC7C,YAAM,OAAO,MAAM;AACnB,UACE,QACA,OAAO,SAAS,YAChB,KAAK,SAAS,4BACd,OAAO,KAAK,SAAS,YACrB,KAAK,KAAK,KAAA,EAAO,SAAS,GAC1B;AACA,iBAAS;AAAA,UACP,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,eAAe,KAAK;AAAA,QAAA,CACrB;AAAA,MACH;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,eAAe,IAAI;AACxD,WAAO,iBAAiB,WAAW,aAAa;AAEhD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,eAAe,IAAI;AAC3D,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AACf;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const AttachmentContext = require("./AttachmentContext.cjs");
|
|
4
|
+
function buildComposedMessage(opts) {
|
|
5
|
+
var _a;
|
|
6
|
+
const parts = [];
|
|
7
|
+
if (opts.attachments && opts.attachments.length > 0) {
|
|
8
|
+
const attachmentMd = AttachmentContext.buildAttachmentMarkdownWithAppUrl({
|
|
9
|
+
attachments: opts.attachments,
|
|
10
|
+
appUrl: opts.appUrl
|
|
11
|
+
});
|
|
12
|
+
if (attachmentMd) parts.push(attachmentMd);
|
|
13
|
+
}
|
|
14
|
+
if (opts.quote) {
|
|
15
|
+
const quotedLines = opts.quote.text.split("\n").map((l) => `> ${l}`).join("\n");
|
|
16
|
+
const sourceLabel = opts.quote.sourceTitle ? `From "${opts.quote.sourceTitle}"` : opts.quote.sourceRole === "assistant" ? "Quoting assistant" : "Quoting";
|
|
17
|
+
parts.push(`${sourceLabel}:
|
|
18
|
+
${quotedLines}`);
|
|
19
|
+
}
|
|
20
|
+
const trimmed = (_a = opts.userText) == null ? void 0 : _a.trim();
|
|
21
|
+
if (trimmed) parts.push(trimmed);
|
|
22
|
+
return parts.join("\n\n");
|
|
23
|
+
}
|
|
24
|
+
exports.buildComposedMessage = buildComposedMessage;
|
|
25
|
+
//# sourceMappingURL=build-composed-message.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-composed-message.cjs","sources":["../../src/composer/build-composed-message.ts"],"sourcesContent":["import type { UploadedAsset } from './useFileUpload';\nimport type { QuoteData } from './QuoteContext';\nimport { buildAttachmentMarkdownWithAppUrl } from './AttachmentContext';\n\n/**\n * Assembles a composed message from attachments, a quote, and user text.\n * Used by both the TipTap Enter-key submit and the send-button click handler\n * to avoid duplicating the message-assembly logic.\n *\n * Returns an empty string if all inputs are empty.\n */\nexport function buildComposedMessage(opts: {\n attachments?: UploadedAsset[];\n quote?: QuoteData | null;\n userText?: string;\n appUrl?: string;\n}): string {\n const parts: string[] = [];\n\n if (opts.attachments && opts.attachments.length > 0) {\n const attachmentMd = buildAttachmentMarkdownWithAppUrl({\n attachments: opts.attachments,\n appUrl: opts.appUrl,\n });\n if (attachmentMd) parts.push(attachmentMd);\n }\n\n if (opts.quote) {\n const quotedLines = opts.quote.text.split('\\n').map((l) => `> ${l}`).join('\\n');\n const sourceLabel = opts.quote.sourceTitle\n ? `From \"${opts.quote.sourceTitle}\"`\n : opts.quote.sourceRole === 'assistant'\n ? 'Quoting assistant'\n : 'Quoting';\n parts.push(`${sourceLabel}:\\n${quotedLines}`);\n }\n\n const trimmed = opts.userText?.trim();\n if (trimmed) parts.push(trimmed);\n\n return parts.join('\\n\\n');\n}\n"],"names":["buildAttachmentMarkdownWithAppUrl"],"mappings":";;;AAWO,SAAS,qBAAqB,MAK1B;;AACT,QAAM,QAAkB,CAAA;AAExB,MAAI,KAAK,eAAe,KAAK,YAAY,SAAS,GAAG;AACnD,UAAM,eAAeA,kBAAAA,kCAAkC;AAAA,MACrD,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,IAAA,CACd;AACD,QAAI,aAAc,OAAM,KAAK,YAAY;AAAA,EAC3C;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,cAAc,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAC9E,UAAM,cAAc,KAAK,MAAM,cAC3B,SAAS,KAAK,MAAM,WAAW,MAC/B,KAAK,MAAM,eAAe,cACxB,sBACA;AACN,UAAM,KAAK,GAAG,WAAW;AAAA,EAAM,WAAW,EAAE;AAAA,EAC9C;AAEA,QAAM,WAAU,UAAK,aAAL,mBAAe;AAC/B,MAAI,QAAS,OAAM,KAAK,OAAO;AAE/B,SAAO,MAAM,KAAK,MAAM;AAC1B;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { buildAttachmentMarkdownWithAppUrl } from "./AttachmentContext.js";
|
|
2
|
+
function buildComposedMessage(opts) {
|
|
3
|
+
var _a;
|
|
4
|
+
const parts = [];
|
|
5
|
+
if (opts.attachments && opts.attachments.length > 0) {
|
|
6
|
+
const attachmentMd = buildAttachmentMarkdownWithAppUrl({
|
|
7
|
+
attachments: opts.attachments,
|
|
8
|
+
appUrl: opts.appUrl
|
|
9
|
+
});
|
|
10
|
+
if (attachmentMd) parts.push(attachmentMd);
|
|
11
|
+
}
|
|
12
|
+
if (opts.quote) {
|
|
13
|
+
const quotedLines = opts.quote.text.split("\n").map((l) => `> ${l}`).join("\n");
|
|
14
|
+
const sourceLabel = opts.quote.sourceTitle ? `From "${opts.quote.sourceTitle}"` : opts.quote.sourceRole === "assistant" ? "Quoting assistant" : "Quoting";
|
|
15
|
+
parts.push(`${sourceLabel}:
|
|
16
|
+
${quotedLines}`);
|
|
17
|
+
}
|
|
18
|
+
const trimmed = (_a = opts.userText) == null ? void 0 : _a.trim();
|
|
19
|
+
if (trimmed) parts.push(trimmed);
|
|
20
|
+
return parts.join("\n\n");
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
buildComposedMessage
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=build-composed-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-composed-message.js","sources":["../../src/composer/build-composed-message.ts"],"sourcesContent":["import type { UploadedAsset } from './useFileUpload';\nimport type { QuoteData } from './QuoteContext';\nimport { buildAttachmentMarkdownWithAppUrl } from './AttachmentContext';\n\n/**\n * Assembles a composed message from attachments, a quote, and user text.\n * Used by both the TipTap Enter-key submit and the send-button click handler\n * to avoid duplicating the message-assembly logic.\n *\n * Returns an empty string if all inputs are empty.\n */\nexport function buildComposedMessage(opts: {\n attachments?: UploadedAsset[];\n quote?: QuoteData | null;\n userText?: string;\n appUrl?: string;\n}): string {\n const parts: string[] = [];\n\n if (opts.attachments && opts.attachments.length > 0) {\n const attachmentMd = buildAttachmentMarkdownWithAppUrl({\n attachments: opts.attachments,\n appUrl: opts.appUrl,\n });\n if (attachmentMd) parts.push(attachmentMd);\n }\n\n if (opts.quote) {\n const quotedLines = opts.quote.text.split('\\n').map((l) => `> ${l}`).join('\\n');\n const sourceLabel = opts.quote.sourceTitle\n ? `From \"${opts.quote.sourceTitle}\"`\n : opts.quote.sourceRole === 'assistant'\n ? 'Quoting assistant'\n : 'Quoting';\n parts.push(`${sourceLabel}:\\n${quotedLines}`);\n }\n\n const trimmed = opts.userText?.trim();\n if (trimmed) parts.push(trimmed);\n\n return parts.join('\\n\\n');\n}\n"],"names":[],"mappings":";AAWO,SAAS,qBAAqB,MAK1B;;AACT,QAAM,QAAkB,CAAA;AAExB,MAAI,KAAK,eAAe,KAAK,YAAY,SAAS,GAAG;AACnD,UAAM,eAAe,kCAAkC;AAAA,MACrD,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,IAAA,CACd;AACD,QAAI,aAAc,OAAM,KAAK,YAAY;AAAA,EAC3C;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,cAAc,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAC9E,UAAM,cAAc,KAAK,MAAM,cAC3B,SAAS,KAAK,MAAM,WAAW,MAC/B,KAAK,MAAM,eAAe,cACxB,sBACA;AACN,UAAM,KAAK,GAAG,WAAW;AAAA,EAAM,WAAW,EAAE;AAAA,EAC9C;AAEA,QAAM,WAAU,UAAK,aAAL,mBAAe;AAC/B,MAAI,QAAS,OAAM,KAAK,OAAO;AAE/B,SAAO,MAAM,KAAK,MAAM;AAC1B;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const IMAGE_EXTENSION_BY_MIME_TYPE = {
|
|
4
|
+
"image/avif": "avif",
|
|
5
|
+
"image/bmp": "bmp",
|
|
6
|
+
"image/gif": "gif",
|
|
7
|
+
"image/heic": "heic",
|
|
8
|
+
"image/jpeg": "jpg",
|
|
9
|
+
"image/png": "png",
|
|
10
|
+
"image/svg+xml": "svg",
|
|
11
|
+
"image/tiff": "tiff",
|
|
12
|
+
"image/webp": "webp"
|
|
13
|
+
};
|
|
14
|
+
const IMAGE_FILE_NAME = /^[^\s\\/]+\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;
|
|
15
|
+
function clipboardHasMeaningfulText({
|
|
16
|
+
clipboardData,
|
|
17
|
+
pastedFileNames = []
|
|
18
|
+
}) {
|
|
19
|
+
const types = Array.from(clipboardData.types ?? []);
|
|
20
|
+
if (typeof clipboardData.getData !== "function") return false;
|
|
21
|
+
if (types.includes("text/plain")) {
|
|
22
|
+
const plainText = clipboardData.getData("text/plain").trim();
|
|
23
|
+
const isFileName = pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);
|
|
24
|
+
if (plainText.length > 0 && !isFileName) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (types.includes("text/html")) {
|
|
29
|
+
const html = clipboardData.getData("text/html");
|
|
30
|
+
const textContent = html.replace(/<[^>]*>/g, "").trim();
|
|
31
|
+
if (textContent.length > 0) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
function extractPastedImages({
|
|
38
|
+
clipboardData
|
|
39
|
+
}) {
|
|
40
|
+
const stamp = Date.now();
|
|
41
|
+
const images = [];
|
|
42
|
+
for (const item of Array.from(clipboardData.items ?? [])) {
|
|
43
|
+
if (!item.type.startsWith("image/")) continue;
|
|
44
|
+
const blob = item.getAsFile();
|
|
45
|
+
if (!blob) continue;
|
|
46
|
+
const originalName = blob.name || "";
|
|
47
|
+
const ordinal = images.length === 0 ? "" : `-${images.length + 1}`;
|
|
48
|
+
const extension = IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ?? item.type.slice("image/".length).replace(/[^a-z0-9]/gi, "");
|
|
49
|
+
images.push({
|
|
50
|
+
file: new File(
|
|
51
|
+
[blob, new Blob([])],
|
|
52
|
+
`pasted-image-${stamp}${ordinal}.${extension || "png"}`,
|
|
53
|
+
{ type: item.type }
|
|
54
|
+
),
|
|
55
|
+
originalName
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return images;
|
|
59
|
+
}
|
|
60
|
+
exports.clipboardHasMeaningfulText = clipboardHasMeaningfulText;
|
|
61
|
+
exports.extractPastedImages = extractPastedImages;
|
|
62
|
+
//# sourceMappingURL=clipboard.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.cjs","sources":["../../src/composer/clipboard.ts"],"sourcesContent":["const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {\n 'image/avif': 'avif',\n 'image/bmp': 'bmp',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'image/tiff': 'tiff',\n 'image/webp': 'webp',\n};\n\n/** A lone image file name — what Finder and Explorer put in `text/plain` beside a copied image file. */\nconst IMAGE_FILE_NAME = /^[^\\s\\\\/]+\\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;\n\n/**\n * Whether a clipboard carries text the user meant to paste: non-blank\n * `text/plain`, or `text/html` with text content once tags are stripped. An\n * Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —\n * the text is the payload and the image is incidental; a copied web image\n * carries only an `<img>` tag, which has no text content; a copied image\n * *file* carries its own name in `text/plain` (Finder, Explorer), which is\n * not content either — pass the pasted files' names so it is recognized.\n * Tolerates the partial `DataTransfer` shapes test environments hand out.\n */\nexport function clipboardHasMeaningfulText({\n clipboardData,\n pastedFileNames = [],\n}: {\n clipboardData: DataTransfer;\n pastedFileNames?: readonly string[];\n}): boolean {\n const types = Array.from(clipboardData.types ?? []);\n if (typeof clipboardData.getData !== 'function') return false;\n\n if (types.includes('text/plain')) {\n const plainText = clipboardData.getData('text/plain').trim();\n const isFileName =\n pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);\n if (plainText.length > 0 && !isFileName) {\n return true;\n }\n }\n\n if (types.includes('text/html')) {\n const html = clipboardData.getData('text/html');\n const textContent = html.replace(/<[^>]*>/g, '').trim();\n if (textContent.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface PastedImage {\n /** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */\n file: File;\n /** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */\n originalName: string;\n}\n\n/**\n * The image files of a paste, from the clipboard's items. Each is renamed\n * `pasted-image-<stamp>.<ext>` (the second and later of one paste get a\n * `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a\n * pasted bitmap becomes an asset titled by the paste rather than the\n * browser's `image.png` default.\n */\nexport function extractPastedImages({\n clipboardData,\n}: {\n clipboardData: DataTransfer;\n}): PastedImage[] {\n const stamp = Date.now();\n const images: PastedImage[] = [];\n for (const item of Array.from(clipboardData.items ?? [])) {\n if (!item.type.startsWith('image/')) continue;\n const blob = item.getAsFile();\n if (!blob) continue;\n const originalName = blob.name || '';\n const ordinal = images.length === 0 ? '' : `-${images.length + 1}`;\n const extension =\n IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ??\n item.type.slice('image/'.length).replace(/[^a-z0-9]/gi, '');\n // Two parts on purpose: a File built from a single File part shares that\n // part's name handle in some runtimes (Bun 1.3), so the rename would\n // either be lost or applied to the clipboard's file as well.\n images.push({\n file: new File(\n [blob, new Blob([])],\n `pasted-image-${stamp}${ordinal}.${extension || 'png'}`,\n { type: item.type },\n ),\n originalName,\n });\n }\n return images;\n}\n"],"names":[],"mappings":";;AAAA,MAAM,+BAAuD;AAAA,EAC3D,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAChB;AAGA,MAAM,kBAAkB;AAYjB,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA,kBAAkB,CAAA;AACpB,GAGY;AACV,QAAM,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE;AAClD,MAAI,OAAO,cAAc,YAAY,WAAY,QAAO;AAExD,MAAI,MAAM,SAAS,YAAY,GAAG;AAChC,UAAM,YAAY,cAAc,QAAQ,YAAY,EAAE,KAAA;AACtD,UAAM,aACJ,gBAAgB,SAAS,SAAS,KAAK,gBAAgB,KAAK,SAAS;AACvE,QAAI,UAAU,SAAS,KAAK,CAAC,YAAY;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,UAAM,OAAO,cAAc,QAAQ,WAAW;AAC9C,UAAM,cAAc,KAAK,QAAQ,YAAY,EAAE,EAAE,KAAA;AACjD,QAAI,YAAY,SAAS,GAAG;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAgBO,SAAS,oBAAoB;AAAA,EAClC;AACF,GAEkB;AAChB,QAAM,QAAQ,KAAK,IAAA;AACnB,QAAM,SAAwB,CAAA;AAC9B,aAAW,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE,GAAG;AACxD,QAAI,CAAC,KAAK,KAAK,WAAW,QAAQ,EAAG;AACrC,UAAM,OAAO,KAAK,UAAA;AAClB,QAAI,CAAC,KAAM;AACX,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,UAAU,OAAO,WAAW,IAAI,KAAK,IAAI,OAAO,SAAS,CAAC;AAChE,UAAM,YACJ,6BAA6B,KAAK,IAAI,KACtC,KAAK,KAAK,MAAM,SAAS,MAAM,EAAE,QAAQ,eAAe,EAAE;AAI5D,WAAO,KAAK;AAAA,MACV,MAAM,IAAI;AAAA,QACR,CAAC,MAAM,IAAI,KAAK,CAAA,CAAE,CAAC;AAAA,QACnB,gBAAgB,KAAK,GAAG,OAAO,IAAI,aAAa,KAAK;AAAA,QACrD,EAAE,MAAM,KAAK,KAAA;AAAA,MAAK;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;;;"}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Whether a clipboard carries text the user meant to paste: non-blank
|
|
3
|
+
* `text/plain`, or `text/html` with text content once tags are stripped. An
|
|
4
|
+
* Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —
|
|
5
|
+
* the text is the payload and the image is incidental; a copied web image
|
|
6
|
+
* carries only an `<img>` tag, which has no text content; a copied image
|
|
7
|
+
* *file* carries its own name in `text/plain` (Finder, Explorer), which is
|
|
8
|
+
* not content either — pass the pasted files' names so it is recognized.
|
|
9
|
+
* Tolerates the partial `DataTransfer` shapes test environments hand out.
|
|
10
|
+
*/
|
|
11
|
+
export declare function clipboardHasMeaningfulText({ clipboardData, pastedFileNames, }: {
|
|
2
12
|
clipboardData: DataTransfer;
|
|
13
|
+
pastedFileNames?: readonly string[];
|
|
3
14
|
}): boolean;
|
|
4
|
-
export
|
|
15
|
+
export interface PastedImage {
|
|
16
|
+
/** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */
|
|
17
|
+
file: File;
|
|
18
|
+
/** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */
|
|
19
|
+
originalName: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The image files of a paste, from the clipboard's items. Each is renamed
|
|
23
|
+
* `pasted-image-<stamp>.<ext>` (the second and later of one paste get a
|
|
24
|
+
* `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a
|
|
25
|
+
* pasted bitmap becomes an asset titled by the paste rather than the
|
|
26
|
+
* browser's `image.png` default.
|
|
27
|
+
*/
|
|
28
|
+
export declare function extractPastedImages({ clipboardData, }: {
|
|
5
29
|
clipboardData: DataTransfer;
|
|
6
|
-
}):
|
|
30
|
+
}): PastedImage[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const IMAGE_EXTENSION_BY_MIME_TYPE = {
|
|
2
|
+
"image/avif": "avif",
|
|
3
|
+
"image/bmp": "bmp",
|
|
4
|
+
"image/gif": "gif",
|
|
5
|
+
"image/heic": "heic",
|
|
6
|
+
"image/jpeg": "jpg",
|
|
7
|
+
"image/png": "png",
|
|
8
|
+
"image/svg+xml": "svg",
|
|
9
|
+
"image/tiff": "tiff",
|
|
10
|
+
"image/webp": "webp"
|
|
11
|
+
};
|
|
12
|
+
const IMAGE_FILE_NAME = /^[^\s\\/]+\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;
|
|
13
|
+
function clipboardHasMeaningfulText({
|
|
14
|
+
clipboardData,
|
|
15
|
+
pastedFileNames = []
|
|
16
|
+
}) {
|
|
17
|
+
const types = Array.from(clipboardData.types ?? []);
|
|
18
|
+
if (typeof clipboardData.getData !== "function") return false;
|
|
19
|
+
if (types.includes("text/plain")) {
|
|
20
|
+
const plainText = clipboardData.getData("text/plain").trim();
|
|
21
|
+
const isFileName = pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);
|
|
22
|
+
if (plainText.length > 0 && !isFileName) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (types.includes("text/html")) {
|
|
27
|
+
const html = clipboardData.getData("text/html");
|
|
28
|
+
const textContent = html.replace(/<[^>]*>/g, "").trim();
|
|
29
|
+
if (textContent.length > 0) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function extractPastedImages({
|
|
36
|
+
clipboardData
|
|
37
|
+
}) {
|
|
38
|
+
const stamp = Date.now();
|
|
39
|
+
const images = [];
|
|
40
|
+
for (const item of Array.from(clipboardData.items ?? [])) {
|
|
41
|
+
if (!item.type.startsWith("image/")) continue;
|
|
42
|
+
const blob = item.getAsFile();
|
|
43
|
+
if (!blob) continue;
|
|
44
|
+
const originalName = blob.name || "";
|
|
45
|
+
const ordinal = images.length === 0 ? "" : `-${images.length + 1}`;
|
|
46
|
+
const extension = IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ?? item.type.slice("image/".length).replace(/[^a-z0-9]/gi, "");
|
|
47
|
+
images.push({
|
|
48
|
+
file: new File(
|
|
49
|
+
[blob, new Blob([])],
|
|
50
|
+
`pasted-image-${stamp}${ordinal}.${extension || "png"}`,
|
|
51
|
+
{ type: item.type }
|
|
52
|
+
),
|
|
53
|
+
originalName
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return images;
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
clipboardHasMeaningfulText,
|
|
60
|
+
extractPastedImages
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sources":["../../src/composer/clipboard.ts"],"sourcesContent":["const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {\n 'image/avif': 'avif',\n 'image/bmp': 'bmp',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'image/tiff': 'tiff',\n 'image/webp': 'webp',\n};\n\n/** A lone image file name — what Finder and Explorer put in `text/plain` beside a copied image file. */\nconst IMAGE_FILE_NAME = /^[^\\s\\\\/]+\\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;\n\n/**\n * Whether a clipboard carries text the user meant to paste: non-blank\n * `text/plain`, or `text/html` with text content once tags are stripped. An\n * Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —\n * the text is the payload and the image is incidental; a copied web image\n * carries only an `<img>` tag, which has no text content; a copied image\n * *file* carries its own name in `text/plain` (Finder, Explorer), which is\n * not content either — pass the pasted files' names so it is recognized.\n * Tolerates the partial `DataTransfer` shapes test environments hand out.\n */\nexport function clipboardHasMeaningfulText({\n clipboardData,\n pastedFileNames = [],\n}: {\n clipboardData: DataTransfer;\n pastedFileNames?: readonly string[];\n}): boolean {\n const types = Array.from(clipboardData.types ?? []);\n if (typeof clipboardData.getData !== 'function') return false;\n\n if (types.includes('text/plain')) {\n const plainText = clipboardData.getData('text/plain').trim();\n const isFileName =\n pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);\n if (plainText.length > 0 && !isFileName) {\n return true;\n }\n }\n\n if (types.includes('text/html')) {\n const html = clipboardData.getData('text/html');\n const textContent = html.replace(/<[^>]*>/g, '').trim();\n if (textContent.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface PastedImage {\n /** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */\n file: File;\n /** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */\n originalName: string;\n}\n\n/**\n * The image files of a paste, from the clipboard's items. Each is renamed\n * `pasted-image-<stamp>.<ext>` (the second and later of one paste get a\n * `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a\n * pasted bitmap becomes an asset titled by the paste rather than the\n * browser's `image.png` default.\n */\nexport function extractPastedImages({\n clipboardData,\n}: {\n clipboardData: DataTransfer;\n}): PastedImage[] {\n const stamp = Date.now();\n const images: PastedImage[] = [];\n for (const item of Array.from(clipboardData.items ?? [])) {\n if (!item.type.startsWith('image/')) continue;\n const blob = item.getAsFile();\n if (!blob) continue;\n const originalName = blob.name || '';\n const ordinal = images.length === 0 ? '' : `-${images.length + 1}`;\n const extension =\n IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ??\n item.type.slice('image/'.length).replace(/[^a-z0-9]/gi, '');\n // Two parts on purpose: a File built from a single File part shares that\n // part's name handle in some runtimes (Bun 1.3), so the rename would\n // either be lost or applied to the clipboard's file as well.\n images.push({\n file: new File(\n [blob, new Blob([])],\n `pasted-image-${stamp}${ordinal}.${extension || 'png'}`,\n { type: item.type },\n ),\n originalName,\n });\n }\n return images;\n}\n"],"names":[],"mappings":"AAAA,MAAM,+BAAuD;AAAA,EAC3D,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAChB;AAGA,MAAM,kBAAkB;AAYjB,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA,kBAAkB,CAAA;AACpB,GAGY;AACV,QAAM,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE;AAClD,MAAI,OAAO,cAAc,YAAY,WAAY,QAAO;AAExD,MAAI,MAAM,SAAS,YAAY,GAAG;AAChC,UAAM,YAAY,cAAc,QAAQ,YAAY,EAAE,KAAA;AACtD,UAAM,aACJ,gBAAgB,SAAS,SAAS,KAAK,gBAAgB,KAAK,SAAS;AACvE,QAAI,UAAU,SAAS,KAAK,CAAC,YAAY;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,UAAM,OAAO,cAAc,QAAQ,WAAW;AAC9C,UAAM,cAAc,KAAK,QAAQ,YAAY,EAAE,EAAE,KAAA;AACjD,QAAI,YAAY,SAAS,GAAG;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAgBO,SAAS,oBAAoB;AAAA,EAClC;AACF,GAEkB;AAChB,QAAM,QAAQ,KAAK,IAAA;AACnB,QAAM,SAAwB,CAAA;AAC9B,aAAW,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE,GAAG;AACxD,QAAI,CAAC,KAAK,KAAK,WAAW,QAAQ,EAAG;AACrC,UAAM,OAAO,KAAK,UAAA;AAClB,QAAI,CAAC,KAAM;AACX,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,UAAU,OAAO,WAAW,IAAI,KAAK,IAAI,OAAO,SAAS,CAAC;AAChE,UAAM,YACJ,6BAA6B,KAAK,IAAI,KACtC,KAAK,KAAK,MAAM,SAAS,MAAM,EAAE,QAAQ,eAAe,EAAE;AAI5D,WAAO,KAAK;AAAA,MACV,MAAM,IAAI;AAAA,QACR,CAAC,MAAM,IAAI,KAAK,CAAA,CAAE,CAAC;AAAA,QACnB,gBAAgB,KAAK,GAAG,OAAO,IAAI,aAAa,KAAK;AAAA,QACrD,EAAE,MAAM,KAAK,KAAA;AAAA,MAAK;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react$1 = require("react");
|
|
4
|
+
const react = require("@assistant-ui/react");
|
|
5
|
+
function useAppendToComposer() {
|
|
6
|
+
const aui = react.useAui();
|
|
7
|
+
return react$1.useCallback(
|
|
8
|
+
(text, opts) => {
|
|
9
|
+
if (opts == null ? void 0 : opts.replace) {
|
|
10
|
+
aui.composer.setText(text);
|
|
11
|
+
} else {
|
|
12
|
+
const current = aui.composer.getState().text;
|
|
13
|
+
aui.composer.setText(current ? `${current}
|
|
14
|
+
${text}` : text);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
[aui]
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
exports.useAppendToComposer = useAppendToComposer;
|
|
21
|
+
//# sourceMappingURL=useAppendToComposer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppendToComposer.cjs","sources":["../../src/composer/useAppendToComposer.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook to programmatically append text to the composer without sending it.\n *\n * Use `useSendMessage()` for workflow shortcuts or other UI that should\n * immediately submit a prompt.\n *\n * Usage:\n * const append = useAppendToComposer();\n * append(\"some text to add\");\n * append(\"quoted text\", { replace: true }); // replaces existing text\n */\nexport function useAppendToComposer() {\n const aui = useAui();\n\n return useCallback(\n (text: string, opts?: { replace?: boolean }) => {\n if (opts?.replace) {\n aui.composer.setText(text);\n } else {\n const current = aui.composer.getState().text;\n aui.composer.setText(current ? `${current}\\n${text}` : text);\n }\n },\n [aui],\n );\n}\n"],"names":["useAui","useCallback"],"mappings":";;;;AAcO,SAAS,sBAAsB;AACpC,QAAM,MAAMA,MAAAA,OAAA;AAEZ,SAAOC,QAAAA;AAAAA,IACL,CAAC,MAAc,SAAiC;AAC9C,UAAI,6BAAM,SAAS;AACjB,YAAI,SAAS,QAAQ,IAAI;AAAA,MAC3B,OAAO;AACL,cAAM,UAAU,IAAI,SAAS,SAAA,EAAW;AACxC,YAAI,SAAS,QAAQ,UAAU,GAAG,OAAO;AAAA,EAAK,IAAI,KAAK,IAAI;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAER;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useAui } from "@assistant-ui/react";
|
|
3
|
+
function useAppendToComposer() {
|
|
4
|
+
const aui = useAui();
|
|
5
|
+
return useCallback(
|
|
6
|
+
(text, opts) => {
|
|
7
|
+
if (opts == null ? void 0 : opts.replace) {
|
|
8
|
+
aui.composer.setText(text);
|
|
9
|
+
} else {
|
|
10
|
+
const current = aui.composer.getState().text;
|
|
11
|
+
aui.composer.setText(current ? `${current}
|
|
12
|
+
${text}` : text);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
[aui]
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
useAppendToComposer
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=useAppendToComposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppendToComposer.js","sources":["../../src/composer/useAppendToComposer.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook to programmatically append text to the composer without sending it.\n *\n * Use `useSendMessage()` for workflow shortcuts or other UI that should\n * immediately submit a prompt.\n *\n * Usage:\n * const append = useAppendToComposer();\n * append(\"some text to add\");\n * append(\"quoted text\", { replace: true }); // replaces existing text\n */\nexport function useAppendToComposer() {\n const aui = useAui();\n\n return useCallback(\n (text: string, opts?: { replace?: boolean }) => {\n if (opts?.replace) {\n aui.composer.setText(text);\n } else {\n const current = aui.composer.getState().text;\n aui.composer.setText(current ? `${current}\\n${text}` : text);\n }\n },\n [aui],\n );\n}\n"],"names":[],"mappings":";;AAcO,SAAS,sBAAsB;AACpC,QAAM,MAAM,OAAA;AAEZ,SAAO;AAAA,IACL,CAAC,MAAc,SAAiC;AAC9C,UAAI,6BAAM,SAAS;AACjB,YAAI,SAAS,QAAQ,IAAI;AAAA,MAC3B,OAAO;AACL,cAAM,UAAU,IAAI,SAAS,SAAA,EAAW;AACxC,YAAI,SAAS,QAAQ,UAAU,GAAG,OAAO;AAAA,EAAK,IAAI,KAAK,IAAI;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const athenaDiagnostics = require("../diagnostics/athena-diagnostics.cjs");
|
|
5
|
+
const AttachmentContext = require("./AttachmentContext.cjs");
|
|
6
|
+
const useFileUpload = require("./useFileUpload.cjs");
|
|
7
|
+
const ATTACH_FAILURE_MESSAGE = {
|
|
8
|
+
paperclip: "Failed to attach the selected files",
|
|
9
|
+
drop: "Failed to attach the dropped files",
|
|
10
|
+
paste: "Failed to attach the pasted images"
|
|
11
|
+
};
|
|
12
|
+
function useAttachFiles() {
|
|
13
|
+
const { upload, isUploading, error, clearError } = useFileUpload.useFileUpload();
|
|
14
|
+
const { addAttachments, setIsUploading } = AttachmentContext.useAttachments();
|
|
15
|
+
const attachFiles = react.useCallback(
|
|
16
|
+
async (files, source) => {
|
|
17
|
+
if (files.length === 0) return [];
|
|
18
|
+
setIsUploading(true);
|
|
19
|
+
try {
|
|
20
|
+
const assets = await upload([...files]);
|
|
21
|
+
if (assets.length > 0) addAttachments(assets);
|
|
22
|
+
return assets;
|
|
23
|
+
} catch (error2) {
|
|
24
|
+
athenaDiagnostics.athenaDiagnostics.error(
|
|
25
|
+
"composer.attachment.error",
|
|
26
|
+
error2,
|
|
27
|
+
{ code: "attachment_failed", message: ATTACH_FAILURE_MESSAGE[source] },
|
|
28
|
+
{ source, count: files.length }
|
|
29
|
+
);
|
|
30
|
+
return [];
|
|
31
|
+
} finally {
|
|
32
|
+
setIsUploading(false);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
[addAttachments, setIsUploading, upload]
|
|
36
|
+
);
|
|
37
|
+
return { attachFiles, isUploading, error, clearError };
|
|
38
|
+
}
|
|
39
|
+
exports.useAttachFiles = useAttachFiles;
|
|
40
|
+
//# sourceMappingURL=useAttachFiles.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAttachFiles.cjs","sources":["../../src/composer/useAttachFiles.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { athenaDiagnostics } from '../diagnostics/athena-diagnostics';\nimport { useAttachments } from './AttachmentContext';\nimport { useFileUpload, type UploadedAsset } from './useFileUpload';\n\n/** Which intake the files came through — carried on the diagnostics event. */\nexport type AttachFilesSource = 'paperclip' | 'drop' | 'paste';\n\nconst ATTACH_FAILURE_MESSAGE: Record<AttachFilesSource, string> = {\n paperclip: 'Failed to attach the selected files',\n drop: 'Failed to attach the dropped files',\n paste: 'Failed to attach the pasted images',\n};\n\nexport interface UseAttachFilesReturn {\n /**\n * Upload files as Athena assets and add them to the attachment pills.\n * Resolves to the assets attached; a failed upload resolves to `[]` after\n * recording `composer.attachment.error` on the diagnostics bus (and in\n * `error`).\n */\n attachFiles: (files: readonly File[], source: AttachFilesSource) => Promise<UploadedAsset[]>;\n /** This intake's own upload in flight. */\n isUploading: boolean;\n /** Last failure of this intake, for its own affordance. */\n error: string | null;\n clearError: () => void;\n}\n\n/**\n * The one intake path for the attachment pills: the paperclip, the drop zone\n * and the composer's paste all upload through here, so a failure reaches the\n * diagnostics bus the same way and the shared `isUploading` flag — which\n * parks every submit path — is set for exactly the upload's duration.\n */\nexport function useAttachFiles(): UseAttachFilesReturn {\n const { upload, isUploading, error, clearError } = useFileUpload();\n const { addAttachments, setIsUploading } = useAttachments();\n\n const attachFiles = useCallback(\n async (files: readonly File[], source: AttachFilesSource): Promise<UploadedAsset[]> => {\n if (files.length === 0) return [];\n setIsUploading(true);\n try {\n const assets = await upload([...files]);\n if (assets.length > 0) addAttachments(assets);\n return assets;\n } catch (error) {\n athenaDiagnostics.error(\n 'composer.attachment.error',\n error,\n { code: 'attachment_failed', message: ATTACH_FAILURE_MESSAGE[source] },\n { source, count: files.length },\n );\n return [];\n } finally {\n setIsUploading(false);\n }\n },\n [addAttachments, setIsUploading, upload],\n );\n\n return { attachFiles, isUploading, error, clearError };\n}\n"],"names":["useFileUpload","useAttachments","useCallback","error","athenaDiagnostics"],"mappings":";;;;;;AAQA,MAAM,yBAA4D;AAAA,EAChE,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AACT;AAuBO,SAAS,iBAAuC;AACrD,QAAM,EAAE,QAAQ,aAAa,OAAO,WAAA,IAAeA,cAAAA,cAAA;AACnD,QAAM,EAAE,gBAAgB,eAAA,IAAmBC,iCAAA;AAE3C,QAAM,cAAcC,MAAAA;AAAAA,IAClB,OAAO,OAAwB,WAAwD;AACrF,UAAI,MAAM,WAAW,EAAG,QAAO,CAAA;AAC/B,qBAAe,IAAI;AACnB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,CAAC,GAAG,KAAK,CAAC;AACtC,YAAI,OAAO,SAAS,EAAG,gBAAe,MAAM;AAC5C,eAAO;AAAA,MACT,SAASC,QAAO;AACdC,0BAAAA,kBAAkB;AAAA,UAChB;AAAA,UACAD;AAAAA,UACA,EAAE,MAAM,qBAAqB,SAAS,uBAAuB,MAAM,EAAA;AAAA,UACnE,EAAE,QAAQ,OAAO,MAAM,OAAA;AAAA,QAAO;AAEhC,eAAO,CAAA;AAAA,MACT,UAAA;AACE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,gBAAgB,gBAAgB,MAAM;AAAA,EAAA;AAGzC,SAAO,EAAE,aAAa,aAAa,OAAO,WAAA;AAC5C;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type UploadedAsset } from './useFileUpload';
|
|
2
|
+
/** Which intake the files came through — carried on the diagnostics event. */
|
|
3
|
+
export type AttachFilesSource = 'paperclip' | 'drop' | 'paste';
|
|
4
|
+
export interface UseAttachFilesReturn {
|
|
5
|
+
/**
|
|
6
|
+
* Upload files as Athena assets and add them to the attachment pills.
|
|
7
|
+
* Resolves to the assets attached; a failed upload resolves to `[]` after
|
|
8
|
+
* recording `composer.attachment.error` on the diagnostics bus (and in
|
|
9
|
+
* `error`).
|
|
10
|
+
*/
|
|
11
|
+
attachFiles: (files: readonly File[], source: AttachFilesSource) => Promise<UploadedAsset[]>;
|
|
12
|
+
/** This intake's own upload in flight. */
|
|
13
|
+
isUploading: boolean;
|
|
14
|
+
/** Last failure of this intake, for its own affordance. */
|
|
15
|
+
error: string | null;
|
|
16
|
+
clearError: () => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The one intake path for the attachment pills: the paperclip, the drop zone
|
|
20
|
+
* and the composer's paste all upload through here, so a failure reaches the
|
|
21
|
+
* diagnostics bus the same way and the shared `isUploading` flag — which
|
|
22
|
+
* parks every submit path — is set for exactly the upload's duration.
|
|
23
|
+
*/
|
|
24
|
+
export declare function useAttachFiles(): UseAttachFilesReturn;
|