@athenaintel/react 0.28.1 → 0.32.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 +479 -10
- package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
- package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
- package/dist/agent-runtime/src/athena-asset-drag.cjs +44 -0
- package/dist/agent-runtime/src/athena-asset-drag.cjs.map +1 -0
- package/dist/agent-runtime/src/athena-asset-drag.js +44 -0
- package/dist/agent-runtime/src/athena-asset-drag.js.map +1 -0
- package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
- package/dist/agent-runtime/src/auth-denial.js.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
- package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
- package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
- package/dist/agent-runtime/src/client-tools.js.map +1 -0
- package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
- package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
- package/dist/agent-runtime/src/composer-markdown.js +124 -0
- package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
- package/dist/agent-runtime/src/config-mutations.cjs +59 -0
- package/dist/agent-runtime/src/config-mutations.cjs.map +1 -0
- package/dist/agent-runtime/src/config-mutations.js +59 -0
- package/dist/agent-runtime/src/config-mutations.js.map +1 -0
- package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
- package/dist/agent-runtime/src/conversation-index.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
- package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
- package/dist/agent-runtime/src/conversation-list.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
- package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
- package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
- package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
- package/dist/agent-runtime/src/edit-command.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
- package/dist/agent-runtime/src/errors.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
- package/dist/agent-runtime/src/errors.js.map +1 -0
- package/dist/agent-runtime/src/execute-output.cjs +41 -0
- package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
- package/dist/agent-runtime/src/execute-output.js +41 -0
- package/dist/agent-runtime/src/execute-output.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +16 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +16 -2
- package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
- package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
- package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
- package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
- package/dist/agent-runtime/src/interrupts.js.map +1 -0
- package/dist/agent-runtime/src/message-author.cjs.map +1 -0
- package/dist/agent-runtime/src/message-author.js.map +1 -0
- package/dist/agent-runtime/src/message-window.cjs.map +1 -0
- package/dist/agent-runtime/src/message-window.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
- package/dist/agent-runtime/src/messages.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
- package/dist/agent-runtime/src/messages.js.map +1 -0
- package/dist/agent-runtime/src/model-context.cjs.map +1 -0
- package/dist/agent-runtime/src/model-context.js.map +1 -0
- package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
- package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
- package/dist/agent-runtime/src/protocol.cjs.map +1 -0
- package/dist/agent-runtime/src/protocol.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
- package/dist/agent-runtime/src/queue.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
- package/dist/agent-runtime/src/queue.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +71 -13
- package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +73 -15
- package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
- package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
- package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
- package/dist/agent-runtime/src/screen-point.js.map +1 -0
- package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
- package/dist/agent-runtime/src/send-recovery.js.map +1 -0
- package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
- package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
- package/dist/agent-runtime/src/statewire-state.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
- package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
- package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
- package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
- package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
- package/dist/agent-runtime/src/statewire-transport.js +43 -0
- package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
- package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
- package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
- package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
- package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
- package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
- package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
- package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-extras.js.map +1 -0
- package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
- package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
- package/dist/agent-runtime/src/thread-status.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +304 -9
- package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +304 -9
- package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
- package/dist/agent-runtime/src/tool-names.cjs +5 -0
- package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-names.js +5 -0
- package/dist/agent-runtime/src/tool-names.js.map +1 -0
- package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
- package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
- package/dist/agent-runtime/src/tool-result.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
- package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
- package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-config.cjs +129 -0
- package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-config.js +129 -0
- package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
- package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
- package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
- package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
- package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
- package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
- package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
- package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
- package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
- package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
- package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
- package/dist/assets/AthenaAssetEmbed.cjs +13 -2
- package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
- package/dist/assets/AthenaAssetEmbed.d.ts +10 -0
- package/dist/assets/AthenaAssetEmbed.js +14 -3
- package/dist/assets/AthenaAssetEmbed.js.map +1 -1
- package/dist/assets/AthenaLayout.cjs +97 -31
- package/dist/assets/AthenaLayout.cjs.map +1 -1
- package/dist/assets/AthenaLayout.d.ts +13 -0
- package/dist/assets/AthenaLayout.js +98 -32
- package/dist/assets/AthenaLayout.js.map +1 -1
- package/dist/assets/asset-embed-messages.cjs +6 -0
- package/dist/assets/asset-embed-messages.cjs.map +1 -1
- package/dist/assets/asset-embed-messages.d.ts +13 -0
- package/dist/assets/asset-embed-messages.js +6 -0
- package/dist/assets/asset-embed-messages.js.map +1 -1
- package/dist/assets/asset-panel-store.cjs +68 -32
- package/dist/assets/asset-panel-store.cjs.map +1 -1
- package/dist/assets/asset-panel-store.d.ts +47 -1
- package/dist/assets/asset-panel-store.js +68 -32
- package/dist/assets/asset-panel-store.js.map +1 -1
- package/dist/assets/use-asset-embed.cjs +29 -8
- package/dist/assets/use-asset-embed.cjs.map +1 -1
- package/dist/assets/use-asset-embed.d.ts +7 -0
- package/dist/assets/use-asset-embed.js +29 -8
- package/dist/assets/use-asset-embed.js.map +1 -1
- package/dist/catalog/chat-pickers.cjs +152 -0
- package/dist/catalog/chat-pickers.cjs.map +1 -0
- package/dist/catalog/chat-pickers.d.ts +22 -0
- package/dist/catalog/chat-pickers.js +152 -0
- package/dist/catalog/chat-pickers.js.map +1 -0
- package/dist/catalog/runtime-catalog.cjs +181 -0
- package/dist/catalog/runtime-catalog.cjs.map +1 -0
- package/dist/catalog/runtime-catalog.d.ts +100 -0
- package/dist/catalog/runtime-catalog.js +181 -0
- package/dist/catalog/runtime-catalog.js.map +1 -0
- package/dist/chat/AthenaChat.cjs +122 -67
- package/dist/chat/AthenaChat.cjs.map +1 -1
- package/dist/chat/AthenaChat.d.ts +21 -4
- package/dist/chat/AthenaChat.js +124 -69
- package/dist/chat/AthenaChat.js.map +1 -1
- package/dist/chat/StatewireApprovalCard.cjs +38 -37
- package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
- package/dist/chat/StatewireApprovalCard.d.ts +2 -0
- package/dist/chat/StatewireApprovalCard.js +39 -38
- package/dist/chat/StatewireApprovalCard.js.map +1 -1
- package/dist/chat/StatewireClientToolBridge.cjs +2 -2
- package/dist/chat/StatewireClientToolBridge.js +2 -2
- package/dist/chat/StatewireQueuedMessages.cjs +15 -12
- package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
- package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
- package/dist/chat/StatewireQueuedMessages.js +15 -12
- package/dist/chat/StatewireQueuedMessages.js.map +1 -1
- package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
- package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
- package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
- package/dist/chat/StatewireRunRefusalNotice.js +48 -0
- package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
- package/dist/chat/WaitingOnYouBanner.cjs +2 -2
- package/dist/chat/WaitingOnYouBanner.js +2 -2
- package/dist/chat/athena-citation-links.cjs +19 -15
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-citation-links.js +19 -15
- package/dist/chat/athena-citation-links.js.map +1 -1
- package/dist/chat/run-activity.cjs +9 -1
- package/dist/chat/run-activity.cjs.map +1 -1
- package/dist/chat/run-activity.d.ts +6 -0
- package/dist/chat/run-activity.js +10 -2
- package/dist/chat/run-activity.js.map +1 -1
- package/dist/chat/statewire-banners.cjs +30 -1
- package/dist/chat/statewire-banners.cjs.map +1 -1
- package/dist/chat/statewire-banners.d.ts +20 -1
- package/dist/chat/statewire-banners.js +32 -3
- package/dist/chat/statewire-banners.js.map +1 -1
- package/dist/chat/statewire-client-tools.cjs +1 -1
- package/dist/chat/statewire-client-tools.js +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
- package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.cjs +38 -16
- package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingCard.d.ts +21 -4
- package/dist/chat/super-grouping/SuperGroupingCard.js +39 -17
- package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +377 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.js +377 -0
- package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
- package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
- package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
- package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
- package/dist/chat/super-grouping/ToolTimeline.js +13 -2
- package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.cjs +69 -29
- package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
- package/dist/chat/super-grouping/activity-timeline.d.ts +60 -9
- package/dist/chat/super-grouping/activity-timeline.js +70 -30
- package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
- package/dist/chat/super-grouping/index.cjs +14 -0
- package/dist/chat/super-grouping/index.cjs.map +1 -1
- package/dist/chat/super-grouping/index.d.ts +7 -2
- package/dist/chat/super-grouping/index.js +16 -2
- package/dist/chat/super-grouping/index.js.map +1 -1
- package/dist/chat/super-grouping/timeline-step.cjs +14 -5
- package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
- package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
- package/dist/chat/super-grouping/timeline-step.js +15 -6
- package/dist/chat/super-grouping/timeline-step.js.map +1 -1
- package/dist/chat/super-grouping/toolkit-map.cjs +1 -0
- package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -1
- package/dist/chat/super-grouping/toolkit-map.js +1 -0
- package/dist/chat/super-grouping/toolkit-map.js.map +1 -1
- package/dist/chat/super-grouping/turn-segments.cjs +82 -0
- package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
- package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
- package/dist/chat/super-grouping/turn-segments.js +82 -0
- package/dist/chat/super-grouping/turn-segments.js.map +1 -0
- package/dist/chat/super-grouping/turn-timing.cjs +110 -0
- package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
- package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
- package/dist/chat/super-grouping/turn-timing.js +110 -0
- package/dist/chat/super-grouping/turn-timing.js.map +1 -0
- package/dist/chat/tiptap-text.cjs +1 -1
- package/dist/chat/tiptap-text.js +1 -1
- package/dist/chat/use-athena-run-live.cjs +1 -1
- package/dist/chat/use-athena-run-live.js +1 -1
- package/dist/chat/use-statewire-approval-request.cjs +73 -4
- package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
- package/dist/chat/use-statewire-approval-request.js +74 -5
- package/dist/chat/use-statewire-approval-request.js.map +1 -1
- package/dist/chat-ui/composer/composer-message.cjs +284 -0
- package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
- package/dist/chat-ui/composer/composer-message.d.ts +152 -0
- package/dist/chat-ui/composer/composer-message.js +284 -0
- package/dist/chat-ui/composer/composer-message.js.map +1 -0
- package/dist/chat-ui/composer/tiptap-composer.cjs +97 -15
- package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
- package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
- package/dist/chat-ui/composer/tiptap-composer.js +97 -15
- package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
- package/dist/chat-ui/index.cjs +4 -1
- package/dist/chat-ui/index.cjs.map +1 -1
- package/dist/chat-ui/index.d.ts +3 -2
- package/dist/chat-ui/index.js +5 -2
- package/dist/chat-ui/index.js.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +31 -3
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.d.ts +2 -5
- package/dist/chat-ui/mentions/mention-chip.js +33 -5
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.cjs +9 -3
- package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-extension.js +9 -3
- package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
- package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
- package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
- package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
- package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs +61 -0
- package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +3 -0
- package/dist/chat-ui/mentions/use-account-workspace-id.js +61 -0
- package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -0
- package/dist/chat-ui/mentions/use-member-avatar.cjs +75 -0
- package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -0
- package/dist/chat-ui/mentions/use-member-avatar.d.ts +2 -0
- package/dist/chat-ui/mentions/use-member-avatar.js +75 -0
- package/dist/chat-ui/mentions/use-member-avatar.js.map +1 -0
- package/dist/chat-ui/messages/message-components.cjs +30 -10
- package/dist/chat-ui/messages/message-components.cjs.map +1 -1
- package/dist/chat-ui/messages/message-components.d.ts +21 -1
- package/dist/chat-ui/messages/message-components.js +30 -10
- package/dist/chat-ui/messages/message-components.js.map +1 -1
- package/dist/chat-ui/messages/runtime-message.cjs +1 -1
- package/dist/chat-ui/messages/runtime-message.js +1 -1
- package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
- package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
- package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
- package/dist/chat-ui/messages/user-edit-composer.js +1 -1
- package/dist/chat-ui/messages/wake-marker.cjs +39 -4
- package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
- package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
- package/dist/chat-ui/messages/wake-marker.js +40 -5
- package/dist/chat-ui/messages/wake-marker.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
- package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
- package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
- package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
- package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
- package/dist/chat-ui/statewire.cjs +1 -1
- package/dist/chat-ui/statewire.d.ts +1 -1
- package/dist/chat-ui/statewire.js +1 -1
- package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
- package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
- package/dist/collab/client.cjs +282 -16
- package/dist/collab/client.cjs.map +1 -1
- package/dist/collab/client.d.ts +127 -2
- package/dist/collab/client.js +285 -20
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.cjs +2 -0
- package/dist/collab/index.cjs.map +1 -1
- package/dist/collab/index.d.ts +1 -1
- package/dist/collab/index.js +3 -1
- package/dist/composer/AttachmentContext.cjs +38 -12
- package/dist/composer/AttachmentContext.cjs.map +1 -1
- package/dist/composer/AttachmentContext.d.ts +22 -1
- package/dist/composer/AttachmentContext.js +40 -14
- package/dist/composer/AttachmentContext.js.map +1 -1
- package/dist/composer/QuoteContext.cjs +80 -28
- package/dist/composer/QuoteContext.cjs.map +1 -1
- package/dist/composer/QuoteContext.d.ts +35 -6
- package/dist/composer/QuoteContext.js +82 -30
- package/dist/composer/QuoteContext.js.map +1 -1
- package/dist/composer/build-composed-message.cjs +27 -0
- package/dist/composer/build-composed-message.cjs.map +1 -1
- package/dist/composer/build-composed-message.d.ts +21 -0
- package/dist/composer/build-composed-message.js +28 -1
- package/dist/composer/build-composed-message.js.map +1 -1
- package/dist/composer/composer-handoff.cjs +13 -1
- package/dist/composer/composer-handoff.cjs.map +1 -1
- package/dist/composer/composer-handoff.d.ts +12 -0
- package/dist/composer/composer-handoff.js +15 -3
- package/dist/composer/composer-handoff.js.map +1 -1
- package/dist/composer/index.d.ts +6 -3
- package/dist/composer/useReadComposerDraft.cjs +16 -0
- package/dist/composer/useReadComposerDraft.cjs.map +1 -0
- package/dist/composer/useReadComposerDraft.d.ts +6 -0
- package/dist/composer/useReadComposerDraft.js +16 -0
- package/dist/composer/useReadComposerDraft.js.map +1 -0
- package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
- package/dist/diagnostics/athena-diagnostics.d.ts +3 -1
- package/dist/diagnostics/athena-diagnostics.js.map +1 -1
- package/dist/diagnostics/errors.cjs +6 -0
- package/dist/diagnostics/errors.cjs.map +1 -1
- package/dist/diagnostics/errors.d.ts +6 -0
- package/dist/diagnostics/errors.js +6 -0
- package/dist/diagnostics/errors.js.map +1 -1
- package/dist/index.cjs +163 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +55 -12
- package/dist/index.js +170 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/owner-document.cjs +32 -0
- package/dist/lib/owner-document.cjs.map +1 -0
- package/dist/lib/owner-document.d.ts +17 -0
- package/dist/lib/owner-document.js +32 -0
- package/dist/lib/owner-document.js.map +1 -0
- package/dist/lib/portal-surface.cjs +55 -0
- package/dist/lib/portal-surface.cjs.map +1 -0
- package/dist/lib/portal-surface.d.ts +37 -0
- package/dist/lib/portal-surface.js +55 -0
- package/dist/lib/portal-surface.js.map +1 -0
- package/dist/lib/use-athena-rest-query.cjs +34 -0
- package/dist/lib/use-athena-rest-query.cjs.map +1 -0
- package/dist/lib/use-athena-rest-query.d.ts +31 -0
- package/dist/lib/use-athena-rest-query.js +34 -0
- package/dist/lib/use-athena-rest-query.js.map +1 -0
- package/dist/provider/AthenaProvider.cjs +70 -10
- package/dist/provider/AthenaProvider.cjs.map +1 -1
- package/dist/provider/AthenaProvider.d.ts +27 -2
- package/dist/provider/AthenaProvider.js +74 -14
- package/dist/provider/AthenaProvider.js.map +1 -1
- package/dist/provider/citation-links.d.ts +10 -2
- package/dist/{packages/react → react}/package.json.cjs +1 -1
- package/dist/{packages/react → react}/package.json.js +1 -1
- package/dist/runtime/StatewireModelLaneSync.cjs +96 -0
- package/dist/runtime/StatewireModelLaneSync.cjs.map +1 -0
- package/dist/runtime/StatewireModelLaneSync.d.ts +45 -0
- package/dist/runtime/StatewireModelLaneSync.js +96 -0
- package/dist/runtime/StatewireModelLaneSync.js.map +1 -0
- package/dist/runtime/statewire-lifecycle.cjs +20 -5
- package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
- package/dist/runtime/statewire-lifecycle.d.ts +11 -0
- package/dist/runtime/statewire-lifecycle.js +20 -5
- package/dist/runtime/statewire-lifecycle.js.map +1 -1
- package/dist/runtime/statewire-model-lane.cjs +28 -0
- package/dist/runtime/statewire-model-lane.cjs.map +1 -0
- package/dist/runtime/statewire-model-lane.d.ts +64 -0
- package/dist/runtime/statewire-model-lane.js +28 -0
- package/dist/runtime/statewire-model-lane.js.map +1 -0
- package/dist/runtime/statewire-run-config.cjs +16 -2
- package/dist/runtime/statewire-run-config.cjs.map +1 -1
- package/dist/runtime/statewire-run-config.d.ts +10 -0
- package/dist/runtime/statewire-run-config.js +16 -2
- package/dist/runtime/statewire-run-config.js.map +1 -1
- package/dist/runtime/statewire-server-lane-context.cjs +24 -0
- package/dist/runtime/statewire-server-lane-context.cjs.map +1 -0
- package/dist/runtime/statewire-server-lane-context.d.ts +30 -0
- package/dist/runtime/statewire-server-lane-context.js +24 -0
- package/dist/runtime/statewire-server-lane-context.js.map +1 -0
- package/dist/runtime/useAthenaStatewireRuntime.cjs +47 -23
- package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
- package/dist/runtime/useAthenaStatewireRuntime.d.ts +8 -1
- package/dist/runtime/useAthenaStatewireRuntime.js +48 -24
- package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
- package/dist/search/useAthenaRepoSearch.cjs +5 -13
- package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
- package/dist/search/useAthenaRepoSearch.d.ts +3 -3
- package/dist/search/useAthenaRepoSearch.js +6 -14
- package/dist/search/useAthenaRepoSearch.js.map +1 -1
- package/dist/sheet-range/a1.cjs +162 -0
- package/dist/sheet-range/a1.cjs.map +1 -0
- package/dist/sheet-range/a1.d.ts +91 -0
- package/dist/sheet-range/a1.js +162 -0
- package/dist/sheet-range/a1.js.map +1 -0
- package/dist/sheet-range/index.cjs +22 -0
- package/dist/sheet-range/index.cjs.map +1 -0
- package/dist/sheet-range/index.d.ts +12 -0
- package/dist/sheet-range/index.js +22 -0
- package/dist/sheet-range/index.js.map +1 -0
- package/dist/sheet-range/range-preview-table.cjs +75 -0
- package/dist/sheet-range/range-preview-table.cjs.map +1 -0
- package/dist/sheet-range/range-preview-table.d.ts +20 -0
- package/dist/sheet-range/range-preview-table.js +75 -0
- package/dist/sheet-range/range-preview-table.js.map +1 -0
- package/dist/sheet-range/range-preview.cjs +116 -0
- package/dist/sheet-range/range-preview.cjs.map +1 -0
- package/dist/sheet-range/range-preview.d.ts +67 -0
- package/dist/sheet-range/range-preview.js +116 -0
- package/dist/sheet-range/range-preview.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/threads/Inbox.cjs +289 -0
- package/dist/threads/Inbox.cjs.map +1 -0
- package/dist/threads/Inbox.d.ts +46 -0
- package/dist/threads/Inbox.js +289 -0
- package/dist/threads/Inbox.js.map +1 -0
- package/dist/threads/SessionList.cjs +51 -126
- package/dist/threads/SessionList.cjs.map +1 -1
- package/dist/threads/SessionList.d.ts +26 -1
- package/dist/threads/SessionList.js +45 -120
- package/dist/threads/SessionList.js.map +1 -1
- package/dist/threads/SessionsPage.cjs +753 -0
- package/dist/threads/SessionsPage.cjs.map +1 -0
- package/dist/threads/SessionsPage.d.ts +35 -0
- package/dist/threads/SessionsPage.js +753 -0
- package/dist/threads/SessionsPage.js.map +1 -0
- package/dist/threads/api.cjs +23 -2
- package/dist/threads/api.cjs.map +1 -1
- package/dist/threads/api.d.ts +60 -0
- package/dist/threads/api.js +23 -2
- package/dist/threads/api.js.map +1 -1
- package/dist/threads/conversation-list-fetcher.cjs +9 -2
- package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
- package/dist/threads/conversation-list-fetcher.d.ts +14 -1
- package/dist/threads/conversation-list-fetcher.js +9 -2
- package/dist/threads/conversation-list-fetcher.js.map +1 -1
- package/dist/threads/index.d.ts +2 -1
- package/dist/threads/pull-request-display.cjs +25 -0
- package/dist/threads/pull-request-display.cjs.map +1 -0
- package/dist/threads/pull-request-display.d.ts +15 -0
- package/dist/threads/pull-request-display.js +25 -0
- package/dist/threads/pull-request-display.js.map +1 -0
- package/dist/threads/session-list-model.cjs +16 -2
- package/dist/threads/session-list-model.cjs.map +1 -1
- package/dist/threads/session-list-model.d.ts +10 -0
- package/dist/threads/session-list-model.js +16 -2
- package/dist/threads/session-list-model.js.map +1 -1
- package/dist/threads/session-row-parts.cjs +152 -0
- package/dist/threads/session-row-parts.cjs.map +1 -0
- package/dist/threads/session-row-parts.d.ts +50 -0
- package/dist/threads/session-row-parts.js +152 -0
- package/dist/threads/session-row-parts.js.map +1 -0
- package/dist/threads/sessions-page-model.cjs +305 -0
- package/dist/threads/sessions-page-model.cjs.map +1 -0
- package/dist/threads/sessions-page-model.d.ts +86 -0
- package/dist/threads/sessions-page-model.js +305 -0
- package/dist/threads/sessions-page-model.js.map +1 -0
- package/dist/threads/sessions-page-storage.cjs +93 -0
- package/dist/threads/sessions-page-storage.cjs.map +1 -0
- package/dist/threads/sessions-page-storage.d.ts +23 -0
- package/dist/threads/sessions-page-storage.js +93 -0
- package/dist/threads/sessions-page-storage.js.map +1 -0
- package/dist/threads/sessions-query.cjs +235 -0
- package/dist/threads/sessions-query.cjs.map +1 -0
- package/dist/threads/sessions-query.d.ts +119 -0
- package/dist/threads/sessions-query.js +235 -0
- package/dist/threads/sessions-query.js.map +1 -0
- package/dist/threads/statewire-thread-list.cjs +133 -40
- package/dist/threads/statewire-thread-list.cjs.map +1 -1
- package/dist/threads/statewire-thread-list.d.ts +83 -2
- package/dist/threads/statewire-thread-list.js +134 -41
- package/dist/threads/statewire-thread-list.js.map +1 -1
- package/dist/threads/use-athena-sessions.cjs +198 -0
- package/dist/threads/use-athena-sessions.cjs.map +1 -0
- package/dist/threads/use-athena-sessions.d.ts +81 -0
- package/dist/threads/use-athena-sessions.js +198 -0
- package/dist/threads/use-athena-sessions.js.map +1 -0
- package/dist/threads/use-athena-thread-model.cjs +14 -0
- package/dist/threads/use-athena-thread-model.cjs.map +1 -0
- package/dist/threads/use-athena-thread-model.d.ts +22 -0
- package/dist/threads/use-athena-thread-model.js +14 -0
- package/dist/threads/use-athena-thread-model.js.map +1 -0
- package/dist/threads/use-rest-conversation-history.cjs +1 -1
- package/dist/threads/use-rest-conversation-history.js +1 -1
- package/dist/threads/use-statewire-conversation-history.cjs +1 -1
- package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
- package/dist/threads/use-statewire-conversation-history.js +1 -1
- package/dist/threads/use-thread-read-state.cjs +73 -0
- package/dist/threads/use-thread-read-state.cjs.map +1 -0
- package/dist/threads/use-thread-read-state.d.ts +51 -0
- package/dist/threads/use-thread-read-state.js +73 -0
- package/dist/threads/use-thread-read-state.js.map +1 -0
- package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
- package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
- package/dist/tools/auto-open-tools.cjs +2 -0
- package/dist/tools/auto-open-tools.cjs.map +1 -1
- package/dist/tools/auto-open-tools.js +2 -0
- package/dist/tools/auto-open-tools.js.map +1 -1
- package/dist/tools/file-tool-uis.cjs +18 -43
- package/dist/tools/file-tool-uis.cjs.map +1 -1
- package/dist/tools/file-tool-uis.d.ts +1 -2
- package/dist/tools/file-tool-uis.js +18 -42
- package/dist/tools/file-tool-uis.js.map +1 -1
- package/dist/tools/index.cjs +6 -2
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +6 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/misc-tool-uis.cjs +2 -2
- package/dist/tools/misc-tool-uis.js +2 -2
- package/dist/tools/primitives.cjs +1 -1
- package/dist/tools/primitives.js +1 -1
- package/dist/tools/read-asset-tool-ui.cjs +21 -70
- package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
- package/dist/tools/read-asset-tool-ui.js +21 -70
- package/dist/tools/read-asset-tool-ui.js.map +1 -1
- package/dist/tools/step-text.cjs +21 -0
- package/dist/tools/step-text.cjs.map +1 -0
- package/dist/tools/step-text.d.ts +10 -0
- package/dist/tools/step-text.js +21 -0
- package/dist/tools/step-text.js.map +1 -0
- package/dist/tools/tool-fallback.cjs +24 -5
- package/dist/tools/tool-fallback.cjs.map +1 -1
- package/dist/tools/tool-fallback.d.ts +3 -1
- package/dist/tools/tool-fallback.js +24 -5
- package/dist/tools/tool-fallback.js.map +1 -1
- package/dist/tools/tool-summary.cjs +661 -0
- package/dist/tools/tool-summary.cjs.map +1 -0
- package/dist/tools/tool-summary.d.ts +99 -0
- package/dist/tools/tool-summary.js +661 -0
- package/dist/tools/tool-summary.js.map +1 -0
- package/dist/tools/tool-uis.cjs +37 -95
- package/dist/tools/tool-uis.cjs.map +1 -1
- package/dist/tools/tool-uis.js +37 -95
- package/dist/tools/tool-uis.js.map +1 -1
- package/dist/tools/voice-update-tool-ui.cjs +1 -1
- package/dist/tools/voice-update-tool-ui.js +1 -1
- package/dist/tools/write-todos-tool-ui.cjs +3 -2
- package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
- package/dist/tools/write-todos-tool-ui.d.ts +5 -0
- package/dist/tools/write-todos-tool-ui.js +5 -4
- package/dist/tools/write-todos-tool-ui.js.map +1 -1
- package/dist/ui/popover.cjs +6 -6
- package/dist/ui/popover.cjs.map +1 -1
- package/dist/ui/popover.js +6 -6
- package/dist/ui/popover.js.map +1 -1
- package/dist/ui/tooltip.cjs +16 -2
- package/dist/ui/tooltip.cjs.map +1 -1
- package/dist/ui/tooltip.d.ts +1 -1
- package/dist/ui/tooltip.js +16 -2
- package/dist/ui/tooltip.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/use-athena-voice-session.cjs.map +1 -1
- package/dist/voice/use-athena-voice-session.d.ts +3 -3
- package/dist/voice/use-athena-voice-session.js.map +1 -1
- package/dist/workbench/SessionWorkbench.cjs +378 -0
- package/dist/workbench/SessionWorkbench.cjs.map +1 -0
- package/dist/workbench/SessionWorkbench.d.ts +30 -0
- package/dist/workbench/SessionWorkbench.js +378 -0
- package/dist/workbench/SessionWorkbench.js.map +1 -0
- package/dist/workbench/session-workbench-context.cjs +26 -0
- package/dist/workbench/session-workbench-context.cjs.map +1 -0
- package/dist/workbench/session-workbench-context.d.ts +55 -0
- package/dist/workbench/session-workbench-context.js +26 -0
- package/dist/workbench/session-workbench-context.js.map +1 -0
- package/dist/workbench/session-workbench-model.cjs +288 -0
- package/dist/workbench/session-workbench-model.cjs.map +1 -0
- package/dist/workbench/session-workbench-model.d.ts +168 -0
- package/dist/workbench/session-workbench-model.js +288 -0
- package/dist/workbench/session-workbench-model.js.map +1 -0
- package/dist/workbench/session-workbench-panes.cjs +580 -0
- package/dist/workbench/session-workbench-panes.cjs.map +1 -0
- package/dist/workbench/session-workbench-panes.d.ts +16 -0
- package/dist/workbench/session-workbench-panes.js +580 -0
- package/dist/workbench/session-workbench-panes.js.map +1 -0
- package/dist/workbench/session-workspace-api.cjs +157 -0
- package/dist/workbench/session-workspace-api.cjs.map +1 -0
- package/dist/workbench/session-workspace-api.d.ts +70 -0
- package/dist/workbench/session-workspace-api.js +157 -0
- package/dist/workbench/session-workspace-api.js.map +1 -0
- package/dist/workbench/use-session-workspace.cjs +100 -0
- package/dist/workbench/use-session-workspace.cjs.map +1 -0
- package/dist/workbench/use-session-workspace.d.ts +45 -0
- package/dist/workbench/use-session-workspace.js +100 -0
- package/dist/workbench/use-session-workspace.js.map +1 -0
- package/dist/workbench/workbench-layout-context.cjs +10 -0
- package/dist/workbench/workbench-layout-context.cjs.map +1 -0
- package/dist/workbench/workbench-layout-context.d.ts +17 -0
- package/dist/workbench/workbench-layout-context.js +10 -0
- package/dist/workbench/workbench-layout-context.js.map +1 -0
- package/package.json +21 -10
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
- package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
- package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
- package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
- package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
- package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
- package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
- package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/errors.js.map +0 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
- package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
- package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
- package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
- package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
- package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/messages.js.map +0 -1
- package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
- package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
- package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
- package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/queue.js.map +0 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
- package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
- package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
- package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
- package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
- package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
- package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
- package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
- package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs +0 -13
- package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-config.js +0 -13
- package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
- package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
- package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
- package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
- package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
- package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
- /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
- /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
- /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
- /package/dist/{packages/react → react}/package.json.js.map +0 -0
- /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
- /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const rangePreview = require("./range-preview.cjs");
|
|
5
|
+
const cnfast = require("cnfast");
|
|
6
|
+
const COUNT = new Intl.NumberFormat("en-US");
|
|
7
|
+
function moreOf(count, noun) {
|
|
8
|
+
return count > 0 ? `${COUNT.format(count)} more ${noun}${count === 1 ? "" : "s"}` : null;
|
|
9
|
+
}
|
|
10
|
+
const HEADER_CELL = "sticky top-0 z-10 border-b border-r border-border bg-muted px-2 py-1 font-medium text-muted-foreground";
|
|
11
|
+
function RangePreviewTable({
|
|
12
|
+
preview,
|
|
13
|
+
maxRows = rangePreview.RANGE_PREVIEW_MAX_ROWS,
|
|
14
|
+
maxColumns = rangePreview.RANGE_PREVIEW_MAX_COLUMNS,
|
|
15
|
+
caption = "Spreadsheet range",
|
|
16
|
+
className
|
|
17
|
+
}) {
|
|
18
|
+
const columnLabels = preview.columnLabels.slice(0, Math.max(0, maxColumns));
|
|
19
|
+
const rows = preview.rows.slice(0, Math.max(0, maxRows));
|
|
20
|
+
const hidden = [
|
|
21
|
+
moreOf(Math.max(preview.totalRows, preview.rows.length) - rows.length, "row"),
|
|
22
|
+
moreOf(Math.max(preview.totalColumns, preview.columnLabels.length) - columnLabels.length, "column")
|
|
23
|
+
].filter((part) => part !== null);
|
|
24
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
25
|
+
"div",
|
|
26
|
+
{
|
|
27
|
+
"data-slot": "range-preview",
|
|
28
|
+
className: cnfast.cn("overflow-hidden rounded-md border border-border bg-background text-xs", className),
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-96 overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full border-separate border-spacing-0 [&>tbody>tr:last-child>*]:border-b-0", children: [
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsx("caption", { className: "sr-only", children: caption }),
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { scope: "col", className: cnfast.cn(HEADER_CELL, "w-10 px-1.5 text-center"), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Row" }) }),
|
|
34
|
+
columnLabels.map((label, index) => /* @__PURE__ */ jsxRuntime.jsx("th", { scope: "col", className: cnfast.cn(HEADER_CELL, "text-left last:border-r-0"), children: label }, `${index}-${label}`))
|
|
35
|
+
] }) }),
|
|
36
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: columnLabels.length + 1, className: "px-2 py-2 text-center text-muted-foreground", children: "Empty range" }) }) : rows.map((row, rowIndex) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "even:bg-muted/30", children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
38
|
+
"th",
|
|
39
|
+
{
|
|
40
|
+
scope: "row",
|
|
41
|
+
className: "border-b border-r border-border bg-muted/50 px-1.5 py-1 text-center font-medium tabular-nums text-muted-foreground",
|
|
42
|
+
children: row.label
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
columnLabels.map((label, columnIndex) => {
|
|
46
|
+
const text = row.cells[columnIndex] ?? "";
|
|
47
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
48
|
+
"td",
|
|
49
|
+
{
|
|
50
|
+
title: text || void 0,
|
|
51
|
+
className: cnfast.cn(
|
|
52
|
+
"max-w-[16rem] truncate border-b border-r border-border/60 px-2 py-1 text-foreground last:border-r-0",
|
|
53
|
+
text.startsWith("=") && "font-mono text-primary"
|
|
54
|
+
),
|
|
55
|
+
children: text
|
|
56
|
+
},
|
|
57
|
+
`${columnIndex}-${label}`
|
|
58
|
+
);
|
|
59
|
+
})
|
|
60
|
+
] }, `${rowIndex}-${row.label}`)) })
|
|
61
|
+
] }) }),
|
|
62
|
+
hidden.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
+
"p",
|
|
64
|
+
{
|
|
65
|
+
"data-slot": "range-preview-hidden",
|
|
66
|
+
className: "border-t border-border bg-muted/40 px-3 py-1.5 text-center text-[11px] text-muted-foreground",
|
|
67
|
+
children: hidden.join(" · ")
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
exports.RangePreviewTable = RangePreviewTable;
|
|
75
|
+
//# sourceMappingURL=range-preview-table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-preview-table.cjs","sources":["../../src/sheet-range/range-preview-table.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport { RANGE_PREVIEW_MAX_COLUMNS, RANGE_PREVIEW_MAX_ROWS, type RangePreview } from './range-preview';\n\nexport interface RangePreviewTableProps {\n preview: RangePreview;\n /** Rows drawn before the rest are counted under the table. Default 200. */\n maxRows?: number;\n /** Columns drawn before the rest are counted under the table. Default 50. */\n maxColumns?: number;\n /** The table's accessible name, e.g. `Sales A1:C3`. */\n caption?: string;\n className?: string;\n}\n\nconst COUNT = new Intl.NumberFormat('en-US');\n\nfunction moreOf(count: number, noun: string): string | null {\n return count > 0 ? `${COUNT.format(count)} more ${noun}${count === 1 ? '' : 's'}` : null;\n}\n\nconst HEADER_CELL =\n 'sticky top-0 z-10 border-b border-r border-border bg-muted px-2 py-1 font-medium text-muted-foreground';\n\n/**\n * A read-only preview of a spreadsheet range: column letters across the top,\n * row numbers down the side, each cell's text truncated to one line (the full\n * text on hover), and a note under the table counting the rows and columns it\n * leaves out. A real `<table>`: the letters and numbers are column and row\n * headers. Text that starts with `=` reads as a formula. Draws \"Empty range\"\n * for a preview without rows.\n */\nexport function RangePreviewTable({\n preview,\n maxRows = RANGE_PREVIEW_MAX_ROWS,\n maxColumns = RANGE_PREVIEW_MAX_COLUMNS,\n caption = 'Spreadsheet range',\n className,\n}: RangePreviewTableProps) {\n const columnLabels = preview.columnLabels.slice(0, Math.max(0, maxColumns));\n const rows = preview.rows.slice(0, Math.max(0, maxRows));\n const hidden = [\n moreOf(Math.max(preview.totalRows, preview.rows.length) - rows.length, 'row'),\n moreOf(Math.max(preview.totalColumns, preview.columnLabels.length) - columnLabels.length, 'column'),\n ].filter((part): part is string => part !== null);\n\n return (\n <div\n data-slot=\"range-preview\"\n className={cn('overflow-hidden rounded-md border border-border bg-background text-xs', className)}\n >\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"w-full border-separate border-spacing-0 [&>tbody>tr:last-child>*]:border-b-0\">\n <caption className=\"sr-only\">{caption}</caption>\n <thead>\n <tr>\n <th scope=\"col\" className={cn(HEADER_CELL, 'w-10 px-1.5 text-center')}>\n <span className=\"sr-only\">Row</span>\n </th>\n {columnLabels.map((label, index) => (\n <th key={`${index}-${label}`} scope=\"col\" className={cn(HEADER_CELL, 'text-left last:border-r-0')}>\n {label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td colSpan={columnLabels.length + 1} className=\"px-2 py-2 text-center text-muted-foreground\">\n Empty range\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => (\n <tr key={`${rowIndex}-${row.label}`} className=\"even:bg-muted/30\">\n <th\n scope=\"row\"\n className=\"border-b border-r border-border bg-muted/50 px-1.5 py-1 text-center font-medium tabular-nums text-muted-foreground\"\n >\n {row.label}\n </th>\n {columnLabels.map((label, columnIndex) => {\n const text = row.cells[columnIndex] ?? '';\n return (\n <td\n key={`${columnIndex}-${label}`}\n title={text || undefined}\n className={cn(\n 'max-w-[16rem] truncate border-b border-r border-border/60 px-2 py-1 text-foreground last:border-r-0',\n text.startsWith('=') && 'font-mono text-primary',\n )}\n >\n {text}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n {hidden.length > 0 && (\n <p\n data-slot=\"range-preview-hidden\"\n className=\"border-t border-border bg-muted/40 px-3 py-1.5 text-center text-[11px] text-muted-foreground\"\n >\n {hidden.join(' · ')}\n </p>\n )}\n </div>\n );\n}\n"],"names":["RANGE_PREVIEW_MAX_ROWS","RANGE_PREVIEW_MAX_COLUMNS","jsxs","cn","jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type RangePreview } from './range-preview';
|
|
2
|
+
export interface RangePreviewTableProps {
|
|
3
|
+
preview: RangePreview;
|
|
4
|
+
/** Rows drawn before the rest are counted under the table. Default 200. */
|
|
5
|
+
maxRows?: number;
|
|
6
|
+
/** Columns drawn before the rest are counted under the table. Default 50. */
|
|
7
|
+
maxColumns?: number;
|
|
8
|
+
/** The table's accessible name, e.g. `Sales A1:C3`. */
|
|
9
|
+
caption?: string;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A read-only preview of a spreadsheet range: column letters across the top,
|
|
14
|
+
* row numbers down the side, each cell's text truncated to one line (the full
|
|
15
|
+
* text on hover), and a note under the table counting the rows and columns it
|
|
16
|
+
* leaves out. A real `<table>`: the letters and numbers are column and row
|
|
17
|
+
* headers. Text that starts with `=` reads as a formula. Draws "Empty range"
|
|
18
|
+
* for a preview without rows.
|
|
19
|
+
*/
|
|
20
|
+
export declare function RangePreviewTable({ preview, maxRows, maxColumns, caption, className, }: RangePreviewTableProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { RANGE_PREVIEW_MAX_COLUMNS, RANGE_PREVIEW_MAX_ROWS } from "./range-preview.js";
|
|
3
|
+
import { cn } from "cnfast";
|
|
4
|
+
const COUNT = new Intl.NumberFormat("en-US");
|
|
5
|
+
function moreOf(count, noun) {
|
|
6
|
+
return count > 0 ? `${COUNT.format(count)} more ${noun}${count === 1 ? "" : "s"}` : null;
|
|
7
|
+
}
|
|
8
|
+
const HEADER_CELL = "sticky top-0 z-10 border-b border-r border-border bg-muted px-2 py-1 font-medium text-muted-foreground";
|
|
9
|
+
function RangePreviewTable({
|
|
10
|
+
preview,
|
|
11
|
+
maxRows = RANGE_PREVIEW_MAX_ROWS,
|
|
12
|
+
maxColumns = RANGE_PREVIEW_MAX_COLUMNS,
|
|
13
|
+
caption = "Spreadsheet range",
|
|
14
|
+
className
|
|
15
|
+
}) {
|
|
16
|
+
const columnLabels = preview.columnLabels.slice(0, Math.max(0, maxColumns));
|
|
17
|
+
const rows = preview.rows.slice(0, Math.max(0, maxRows));
|
|
18
|
+
const hidden = [
|
|
19
|
+
moreOf(Math.max(preview.totalRows, preview.rows.length) - rows.length, "row"),
|
|
20
|
+
moreOf(Math.max(preview.totalColumns, preview.columnLabels.length) - columnLabels.length, "column")
|
|
21
|
+
].filter((part) => part !== null);
|
|
22
|
+
return /* @__PURE__ */ jsxs(
|
|
23
|
+
"div",
|
|
24
|
+
{
|
|
25
|
+
"data-slot": "range-preview",
|
|
26
|
+
className: cn("overflow-hidden rounded-md border border-border bg-background text-xs", className),
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsx("div", { className: "max-h-96 overflow-auto", children: /* @__PURE__ */ jsxs("table", { className: "w-full border-separate border-spacing-0 [&>tbody>tr:last-child>*]:border-b-0", children: [
|
|
29
|
+
/* @__PURE__ */ jsx("caption", { className: "sr-only", children: caption }),
|
|
30
|
+
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
31
|
+
/* @__PURE__ */ jsx("th", { scope: "col", className: cn(HEADER_CELL, "w-10 px-1.5 text-center"), children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Row" }) }),
|
|
32
|
+
columnLabels.map((label, index) => /* @__PURE__ */ jsx("th", { scope: "col", className: cn(HEADER_CELL, "text-left last:border-r-0"), children: label }, `${index}-${label}`))
|
|
33
|
+
] }) }),
|
|
34
|
+
/* @__PURE__ */ jsx("tbody", { children: rows.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: columnLabels.length + 1, className: "px-2 py-2 text-center text-muted-foreground", children: "Empty range" }) }) : rows.map((row, rowIndex) => /* @__PURE__ */ jsxs("tr", { className: "even:bg-muted/30", children: [
|
|
35
|
+
/* @__PURE__ */ jsx(
|
|
36
|
+
"th",
|
|
37
|
+
{
|
|
38
|
+
scope: "row",
|
|
39
|
+
className: "border-b border-r border-border bg-muted/50 px-1.5 py-1 text-center font-medium tabular-nums text-muted-foreground",
|
|
40
|
+
children: row.label
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
columnLabels.map((label, columnIndex) => {
|
|
44
|
+
const text = row.cells[columnIndex] ?? "";
|
|
45
|
+
return /* @__PURE__ */ jsx(
|
|
46
|
+
"td",
|
|
47
|
+
{
|
|
48
|
+
title: text || void 0,
|
|
49
|
+
className: cn(
|
|
50
|
+
"max-w-[16rem] truncate border-b border-r border-border/60 px-2 py-1 text-foreground last:border-r-0",
|
|
51
|
+
text.startsWith("=") && "font-mono text-primary"
|
|
52
|
+
),
|
|
53
|
+
children: text
|
|
54
|
+
},
|
|
55
|
+
`${columnIndex}-${label}`
|
|
56
|
+
);
|
|
57
|
+
})
|
|
58
|
+
] }, `${rowIndex}-${row.label}`)) })
|
|
59
|
+
] }) }),
|
|
60
|
+
hidden.length > 0 && /* @__PURE__ */ jsx(
|
|
61
|
+
"p",
|
|
62
|
+
{
|
|
63
|
+
"data-slot": "range-preview-hidden",
|
|
64
|
+
className: "border-t border-border bg-muted/40 px-3 py-1.5 text-center text-[11px] text-muted-foreground",
|
|
65
|
+
children: hidden.join(" · ")
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
RangePreviewTable
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=range-preview-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-preview-table.js","sources":["../../src/sheet-range/range-preview-table.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport { RANGE_PREVIEW_MAX_COLUMNS, RANGE_PREVIEW_MAX_ROWS, type RangePreview } from './range-preview';\n\nexport interface RangePreviewTableProps {\n preview: RangePreview;\n /** Rows drawn before the rest are counted under the table. Default 200. */\n maxRows?: number;\n /** Columns drawn before the rest are counted under the table. Default 50. */\n maxColumns?: number;\n /** The table's accessible name, e.g. `Sales A1:C3`. */\n caption?: string;\n className?: string;\n}\n\nconst COUNT = new Intl.NumberFormat('en-US');\n\nfunction moreOf(count: number, noun: string): string | null {\n return count > 0 ? `${COUNT.format(count)} more ${noun}${count === 1 ? '' : 's'}` : null;\n}\n\nconst HEADER_CELL =\n 'sticky top-0 z-10 border-b border-r border-border bg-muted px-2 py-1 font-medium text-muted-foreground';\n\n/**\n * A read-only preview of a spreadsheet range: column letters across the top,\n * row numbers down the side, each cell's text truncated to one line (the full\n * text on hover), and a note under the table counting the rows and columns it\n * leaves out. A real `<table>`: the letters and numbers are column and row\n * headers. Text that starts with `=` reads as a formula. Draws \"Empty range\"\n * for a preview without rows.\n */\nexport function RangePreviewTable({\n preview,\n maxRows = RANGE_PREVIEW_MAX_ROWS,\n maxColumns = RANGE_PREVIEW_MAX_COLUMNS,\n caption = 'Spreadsheet range',\n className,\n}: RangePreviewTableProps) {\n const columnLabels = preview.columnLabels.slice(0, Math.max(0, maxColumns));\n const rows = preview.rows.slice(0, Math.max(0, maxRows));\n const hidden = [\n moreOf(Math.max(preview.totalRows, preview.rows.length) - rows.length, 'row'),\n moreOf(Math.max(preview.totalColumns, preview.columnLabels.length) - columnLabels.length, 'column'),\n ].filter((part): part is string => part !== null);\n\n return (\n <div\n data-slot=\"range-preview\"\n className={cn('overflow-hidden rounded-md border border-border bg-background text-xs', className)}\n >\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"w-full border-separate border-spacing-0 [&>tbody>tr:last-child>*]:border-b-0\">\n <caption className=\"sr-only\">{caption}</caption>\n <thead>\n <tr>\n <th scope=\"col\" className={cn(HEADER_CELL, 'w-10 px-1.5 text-center')}>\n <span className=\"sr-only\">Row</span>\n </th>\n {columnLabels.map((label, index) => (\n <th key={`${index}-${label}`} scope=\"col\" className={cn(HEADER_CELL, 'text-left last:border-r-0')}>\n {label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td colSpan={columnLabels.length + 1} className=\"px-2 py-2 text-center text-muted-foreground\">\n Empty range\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => (\n <tr key={`${rowIndex}-${row.label}`} className=\"even:bg-muted/30\">\n <th\n scope=\"row\"\n className=\"border-b border-r border-border bg-muted/50 px-1.5 py-1 text-center font-medium tabular-nums text-muted-foreground\"\n >\n {row.label}\n </th>\n {columnLabels.map((label, columnIndex) => {\n const text = row.cells[columnIndex] ?? '';\n return (\n <td\n key={`${columnIndex}-${label}`}\n title={text || undefined}\n className={cn(\n 'max-w-[16rem] truncate border-b border-r border-border/60 px-2 py-1 text-foreground last:border-r-0',\n text.startsWith('=') && 'font-mono text-primary',\n )}\n >\n {text}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n {hidden.length > 0 && (\n <p\n data-slot=\"range-preview-hidden\"\n className=\"border-t border-border bg-muted/40 px-3 py-1.5 text-center text-[11px] text-muted-foreground\"\n >\n {hidden.join(' · ')}\n </p>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;AAcA,MAAM,QAAQ,IAAI,KAAK,aAAa,OAAO;AAE3C,SAAS,OAAO,OAAe,MAA6B;AAC1D,SAAO,QAAQ,IAAI,GAAG,MAAM,OAAO,KAAK,CAAC,SAAS,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG,KAAK;AACtF;AAEA,MAAM,cACJ;AAUK,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,EACV;AACF,GAA2B;AACzB,QAAM,eAAe,QAAQ,aAAa,MAAM,GAAG,KAAK,IAAI,GAAG,UAAU,CAAC;AAC1E,QAAM,OAAO,QAAQ,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC;AACvD,QAAM,SAAS;AAAA,IACb,OAAO,KAAK,IAAI,QAAQ,WAAW,QAAQ,KAAK,MAAM,IAAI,KAAK,QAAQ,KAAK;AAAA,IAC5E,OAAO,KAAK,IAAI,QAAQ,cAAc,QAAQ,aAAa,MAAM,IAAI,aAAa,QAAQ,QAAQ;AAAA,EAAA,EAClG,OAAO,CAAC,SAAyB,SAAS,IAAI;AAEhD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,yEAAyE,SAAS;AAAA,MAEhG,UAAA;AAAA,QAAA,oBAAC,SAAI,WAAU,0BACb,UAAA,qBAAC,SAAA,EAAM,WAAU,gFACf,UAAA;AAAA,UAAA,oBAAC,WAAA,EAAQ,WAAU,WAAW,UAAA,SAAQ;AAAA,UACtC,oBAAC,SAAA,EACC,UAAA,qBAAC,MAAA,EACC,UAAA;AAAA,YAAA,oBAAC,MAAA,EAAG,OAAM,OAAM,WAAW,GAAG,aAAa,yBAAyB,GAClE,UAAA,oBAAC,QAAA,EAAK,WAAU,WAAU,iBAAG,GAC/B;AAAA,YACC,aAAa,IAAI,CAAC,OAAO,UACxB,oBAAC,MAAA,EAA6B,OAAM,OAAM,WAAW,GAAG,aAAa,2BAA2B,GAC7F,UAAA,MAAA,GADM,GAAG,KAAK,IAAI,KAAK,EAE1B,CACD;AAAA,UAAA,EAAA,CACH,EAAA,CACF;AAAA,UACA,oBAAC,SAAA,EACE,UAAA,KAAK,WAAW,IACf,oBAAC,MAAA,EACC,UAAA,oBAAC,MAAA,EAAG,SAAS,aAAa,SAAS,GAAG,WAAU,+CAA8C,UAAA,cAAA,CAE9F,EAAA,CACF,IAEA,KAAK,IAAI,CAAC,KAAK,aACb,qBAAC,MAAA,EAAoC,WAAU,oBAC7C,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,WAAU;AAAA,gBAET,UAAA,IAAI;AAAA,cAAA;AAAA,YAAA;AAAA,YAEN,aAAa,IAAI,CAAC,OAAO,gBAAgB;AACxC,oBAAM,OAAO,IAAI,MAAM,WAAW,KAAK;AACvC,qBACE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,OAAO,QAAQ;AAAA,kBACf,WAAW;AAAA,oBACT;AAAA,oBACA,KAAK,WAAW,GAAG,KAAK;AAAA,kBAAA;AAAA,kBAGzB,UAAA;AAAA,gBAAA;AAAA,gBAPI,GAAG,WAAW,IAAI,KAAK;AAAA,cAAA;AAAA,YAUlC,CAAC;AAAA,UAAA,EAAA,GArBM,GAAG,QAAQ,IAAI,IAAI,KAAK,EAsBjC,CACD,EAAA,CAEL;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QACC,OAAO,SAAS,KACf;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET,UAAA,OAAO,KAAK,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACpB;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const a1 = require("./a1.cjs");
|
|
4
|
+
const RANGE_PREVIEW_MAX_ROWS = 200;
|
|
5
|
+
const RANGE_PREVIEW_MAX_COLUMNS = 50;
|
|
6
|
+
const CELL_KEY = /^([A-Za-z]{1,3})(\d{1,7})$/;
|
|
7
|
+
function limit(value, fallback) {
|
|
8
|
+
if (value === void 0 || Number.isNaN(value)) return fallback;
|
|
9
|
+
return Math.max(0, Math.floor(value));
|
|
10
|
+
}
|
|
11
|
+
function previewOf({
|
|
12
|
+
bounds,
|
|
13
|
+
maxRows,
|
|
14
|
+
maxColumns,
|
|
15
|
+
cellText
|
|
16
|
+
}) {
|
|
17
|
+
const totalRows = bounds.endRow - bounds.startRow + 1;
|
|
18
|
+
const totalColumns = bounds.endColumn - bounds.startColumn + 1;
|
|
19
|
+
const columnLabels = Array.from(
|
|
20
|
+
{ length: Math.min(totalColumns, maxColumns) },
|
|
21
|
+
(_, offset) => a1.columnNumberToLetters(bounds.startColumn + offset)
|
|
22
|
+
);
|
|
23
|
+
const rows = Array.from({ length: Math.min(totalRows, maxRows) }, (_, rowOffset) => ({
|
|
24
|
+
label: String(bounds.startRow + rowOffset),
|
|
25
|
+
cells: columnLabels.map((columnLabel, columnOffset) => cellText(rowOffset, columnOffset, columnLabel))
|
|
26
|
+
}));
|
|
27
|
+
return { columnLabels, rows, totalRows, totalColumns };
|
|
28
|
+
}
|
|
29
|
+
function boundsWithinCells(range, cells) {
|
|
30
|
+
if (range.kind === "cell" || range.kind === "range") return range;
|
|
31
|
+
let first = Number.POSITIVE_INFINITY;
|
|
32
|
+
let last = Number.NEGATIVE_INFINITY;
|
|
33
|
+
for (const key of Object.keys(cells)) {
|
|
34
|
+
const match = CELL_KEY.exec(key);
|
|
35
|
+
const column = match ? a1.columnLettersToNumber(match[1]) : null;
|
|
36
|
+
const row = match ? Number(match[2]) : 0;
|
|
37
|
+
if (column === null || row < 1 || row > a1.SHEET_MAX_ROW) continue;
|
|
38
|
+
const inSpan = range.kind === "columns" ? column >= range.startColumn && column <= range.endColumn : row >= range.startRow && row <= range.endRow;
|
|
39
|
+
if (!inSpan) continue;
|
|
40
|
+
const along = range.kind === "columns" ? row : column;
|
|
41
|
+
first = Math.min(first, along);
|
|
42
|
+
last = Math.max(last, along);
|
|
43
|
+
}
|
|
44
|
+
if (first > last) return null;
|
|
45
|
+
return range.kind === "columns" ? { startRow: first, endRow: last, startColumn: range.startColumn, endColumn: range.endColumn } : { startRow: range.startRow, endRow: range.endRow, startColumn: first, endColumn: last };
|
|
46
|
+
}
|
|
47
|
+
function cellValue(cells, key) {
|
|
48
|
+
if (Object.hasOwn(cells, key)) return cells[key];
|
|
49
|
+
const lower = key.toLowerCase();
|
|
50
|
+
return Object.hasOwn(cells, lower) ? cells[lower] : void 0;
|
|
51
|
+
}
|
|
52
|
+
function rangePreviewFromCellMap({
|
|
53
|
+
range,
|
|
54
|
+
cells,
|
|
55
|
+
formatCell,
|
|
56
|
+
maxRows,
|
|
57
|
+
maxColumns
|
|
58
|
+
}) {
|
|
59
|
+
const parsed = typeof range === "string" || range == null ? a1.parseA1Range(range) : range;
|
|
60
|
+
if (!parsed) return null;
|
|
61
|
+
const bounds = boundsWithinCells(parsed, cells);
|
|
62
|
+
if (!bounds) return null;
|
|
63
|
+
return previewOf({
|
|
64
|
+
bounds,
|
|
65
|
+
maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),
|
|
66
|
+
maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),
|
|
67
|
+
cellText: (rowOffset, _columnOffset, columnLabel) => formatCell(cellValue(cells, `${columnLabel}${bounds.startRow + rowOffset}`))
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function rangePreviewFromRows({
|
|
71
|
+
anchor,
|
|
72
|
+
rows,
|
|
73
|
+
formatCell,
|
|
74
|
+
maxRows,
|
|
75
|
+
maxColumns
|
|
76
|
+
}) {
|
|
77
|
+
const topLeft = anchorCell(anchor);
|
|
78
|
+
if (!topLeft) return null;
|
|
79
|
+
let widest = 0;
|
|
80
|
+
for (const row of rows) {
|
|
81
|
+
if (Array.isArray(row) && row.length > widest) widest = row.length;
|
|
82
|
+
}
|
|
83
|
+
const totalRows = Math.min(rows.length, a1.SHEET_MAX_ROW - topLeft.row + 1);
|
|
84
|
+
const totalColumns = Math.min(widest, a1.SHEET_MAX_COLUMN - topLeft.column + 1);
|
|
85
|
+
if (totalRows === 0 || totalColumns === 0) return null;
|
|
86
|
+
return previewOf({
|
|
87
|
+
bounds: {
|
|
88
|
+
startRow: topLeft.row,
|
|
89
|
+
endRow: topLeft.row + totalRows - 1,
|
|
90
|
+
startColumn: topLeft.column,
|
|
91
|
+
endColumn: topLeft.column + totalColumns - 1
|
|
92
|
+
},
|
|
93
|
+
maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),
|
|
94
|
+
maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),
|
|
95
|
+
cellText: (rowOffset, columnOffset) => {
|
|
96
|
+
const row = rows[rowOffset];
|
|
97
|
+
return formatCell(Array.isArray(row) ? row[columnOffset] : void 0);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function anchorCell(anchor) {
|
|
102
|
+
if (anchor == null) return null;
|
|
103
|
+
if (typeof anchor === "string") return a1.a1AnchorCell(anchor);
|
|
104
|
+
const { row, column } = anchor;
|
|
105
|
+
const inSheet = Number.isInteger(row) && Number.isInteger(column) && row >= 1 && row <= a1.SHEET_MAX_ROW && column >= 1 && column <= a1.SHEET_MAX_COLUMN;
|
|
106
|
+
return inSheet ? { row, column } : null;
|
|
107
|
+
}
|
|
108
|
+
function rangePreviewToTableData({ columnLabels, rows }) {
|
|
109
|
+
return [["", ...columnLabels], ...rows.map(({ label, cells }) => [label, ...cells])];
|
|
110
|
+
}
|
|
111
|
+
exports.RANGE_PREVIEW_MAX_COLUMNS = RANGE_PREVIEW_MAX_COLUMNS;
|
|
112
|
+
exports.RANGE_PREVIEW_MAX_ROWS = RANGE_PREVIEW_MAX_ROWS;
|
|
113
|
+
exports.rangePreviewFromCellMap = rangePreviewFromCellMap;
|
|
114
|
+
exports.rangePreviewFromRows = rangePreviewFromRows;
|
|
115
|
+
exports.rangePreviewToTableData = rangePreviewToTableData;
|
|
116
|
+
//# sourceMappingURL=range-preview.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-preview.cjs","sources":["../../src/sheet-range/range-preview.ts"],"sourcesContent":["import {\n type A1Range,\n a1AnchorCell,\n columnLettersToNumber,\n columnNumberToLetters,\n parseA1Range,\n SHEET_MAX_COLUMN,\n SHEET_MAX_ROW,\n type SheetRangeBounds,\n} from './a1';\n\n/**\n * A rectangle of cell texts ready to draw: the column letters across the top,\n * the sheet row numbers down the side. A preview carries at most the rows and\n * columns it was built with; `totalRows` / `totalColumns` count the whole\n * range, so a table can say how much more there is.\n */\nexport interface RangePreview {\n /** Column header labels, left to right (`B`, `C`, …). */\n columnLabels: string[];\n /** Rows top to bottom: the row header label (the sheet row number) and one text per column label. */\n rows: RangePreviewRow[];\n /** Rows in the whole range, at least `rows.length`. */\n totalRows: number;\n /** Columns in the whole range, at least `columnLabels.length`. */\n totalColumns: number;\n}\n\nexport interface RangePreviewRow {\n label: string;\n cells: string[];\n}\n\n/** The most of a range a preview carries; pass `Infinity` for all of it. */\nexport interface RangePreviewLimits {\n maxRows?: number;\n maxColumns?: number;\n}\n\n/** Rows a preview carries by default. */\nexport const RANGE_PREVIEW_MAX_ROWS = 200;\n/** Columns a preview carries by default. */\nexport const RANGE_PREVIEW_MAX_COLUMNS = 50;\n\nconst CELL_KEY = /^([A-Za-z]{1,3})(\\d{1,7})$/;\n\nfunction limit(value: number | undefined, fallback: number): number {\n if (value === undefined || Number.isNaN(value)) return fallback;\n return Math.max(0, Math.floor(value));\n}\n\nfunction previewOf({\n bounds,\n maxRows,\n maxColumns,\n cellText,\n}: {\n bounds: SheetRangeBounds;\n maxRows: number;\n maxColumns: number;\n cellText: (rowOffset: number, columnOffset: number, columnLabel: string) => string;\n}): RangePreview {\n const totalRows = bounds.endRow - bounds.startRow + 1;\n const totalColumns = bounds.endColumn - bounds.startColumn + 1;\n const columnLabels = Array.from({ length: Math.min(totalColumns, maxColumns) }, (_, offset) =>\n columnNumberToLetters(bounds.startColumn + offset),\n );\n const rows = Array.from({ length: Math.min(totalRows, maxRows) }, (_, rowOffset) => ({\n label: String(bounds.startRow + rowOffset),\n cells: columnLabels.map((columnLabel, columnOffset) => cellText(rowOffset, columnOffset, columnLabel)),\n }));\n return { columnLabels, rows, totalRows, totalColumns };\n}\n\n/**\n * Where the cells of whole columns or rows actually are: the rows the map\n * holds a cell for under those columns (or the columns under those rows).\n * Null when it holds none. Only whole columns or rows read the map's keys; a\n * cell or a rectangle is its own extent.\n */\nfunction boundsWithinCells(range: A1Range, cells: Readonly<Record<string, unknown>>): SheetRangeBounds | null {\n if (range.kind === 'cell' || range.kind === 'range') return range;\n let first = Number.POSITIVE_INFINITY;\n let last = Number.NEGATIVE_INFINITY;\n for (const key of Object.keys(cells)) {\n const match = CELL_KEY.exec(key);\n const column = match ? columnLettersToNumber(match[1]) : null;\n const row = match ? Number(match[2]) : 0;\n if (column === null || row < 1 || row > SHEET_MAX_ROW) continue;\n const inSpan =\n range.kind === 'columns'\n ? column >= range.startColumn && column <= range.endColumn\n : row >= range.startRow && row <= range.endRow;\n if (!inSpan) continue;\n const along = range.kind === 'columns' ? row : column;\n first = Math.min(first, along);\n last = Math.max(last, along);\n }\n if (first > last) return null;\n return range.kind === 'columns'\n ? { startRow: first, endRow: last, startColumn: range.startColumn, endColumn: range.endColumn }\n : { startRow: range.startRow, endRow: range.endRow, startColumn: first, endColumn: last };\n}\n\n/** A cell's value under its A1 key: in capitals (`B2`), as the backend writes keys, else in lower case. */\nfunction cellValue<V>(cells: Readonly<Record<string, V>>, key: string): V | undefined {\n if (Object.hasOwn(cells, key)) return cells[key];\n const lower = key.toLowerCase();\n return Object.hasOwn(cells, lower) ? cells[lower] : undefined;\n}\n\n/**\n * The preview of a range read as a map from A1 keys to values — a workbook\n * sheet's `cells` under its `dimension`, a `query_sheet_range` result under its\n * range. Every cell of the range is drawn, with the map's value for its key\n * (`formatCell(undefined)` when it has none); whole columns or rows span the\n * rows or columns the map holds cells for. Null when the range does not parse,\n * or names whole columns or rows the map holds nothing under.\n */\nexport function rangePreviewFromCellMap<V>({\n range,\n cells,\n formatCell,\n maxRows,\n maxColumns,\n}: {\n range: string | A1Range | null | undefined;\n cells: Readonly<Record<string, V>>;\n formatCell: (value: V | undefined) => string;\n} & RangePreviewLimits): RangePreview | null {\n const parsed = typeof range === 'string' || range == null ? parseA1Range(range) : range;\n if (!parsed) return null;\n const bounds = boundsWithinCells(parsed, cells);\n if (!bounds) return null;\n return previewOf({\n bounds,\n maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),\n maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),\n cellText: (rowOffset, _columnOffset, columnLabel) =>\n formatCell(cellValue(cells, `${columnLabel}${bounds.startRow + rowOffset}`)),\n });\n}\n\n/**\n * The preview of rows of values written from an anchor — `update_sheet_range`\n * cells, `set_sheet_values` values. The anchor is an A1 reference whose first\n * cell as written takes the first value (`D6` of `D6:C5`, where the backend\n * writes from; row 1 of whole columns, column A of whole rows), or a 1-based\n * row and column. The width is the longest row's; shorter rows read\n * `formatCell(undefined)` past their end, and a row that is not an array reads\n * as empty. Nothing past the sheet's last row or column (XFD) is drawn. Null\n * when the anchor does not parse or there is no cell to draw.\n */\nexport function rangePreviewFromRows<V>({\n anchor,\n rows,\n formatCell,\n maxRows,\n maxColumns,\n}: {\n anchor: string | { row: number; column: number } | null | undefined;\n rows: ReadonlyArray<ReadonlyArray<V> | null | undefined>;\n formatCell: (value: V | undefined) => string;\n} & RangePreviewLimits): RangePreview | null {\n const topLeft = anchorCell(anchor);\n if (!topLeft) return null;\n let widest = 0;\n for (const row of rows) {\n if (Array.isArray(row) && row.length > widest) widest = row.length;\n }\n const totalRows = Math.min(rows.length, SHEET_MAX_ROW - topLeft.row + 1);\n const totalColumns = Math.min(widest, SHEET_MAX_COLUMN - topLeft.column + 1);\n if (totalRows === 0 || totalColumns === 0) return null;\n return previewOf({\n bounds: {\n startRow: topLeft.row,\n endRow: topLeft.row + totalRows - 1,\n startColumn: topLeft.column,\n endColumn: topLeft.column + totalColumns - 1,\n },\n maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),\n maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),\n cellText: (rowOffset, columnOffset) => {\n const row = rows[rowOffset];\n return formatCell(Array.isArray(row) ? row[columnOffset] : undefined);\n },\n });\n}\n\nfunction anchorCell(\n anchor: string | { row: number; column: number } | null | undefined,\n): { row: number; column: number } | null {\n if (anchor == null) return null;\n if (typeof anchor === 'string') return a1AnchorCell(anchor);\n const { row, column } = anchor;\n const inSheet =\n Number.isInteger(row) &&\n Number.isInteger(column) &&\n row >= 1 &&\n row <= SHEET_MAX_ROW &&\n column >= 1 &&\n column <= SHEET_MAX_COLUMN;\n return inSheet ? { row, column } : null;\n}\n\n/**\n * A preview as rows of text with the header row first (an empty corner, then\n * the column letters) and each row led by its number — the shape a copy as\n * tab-separated values or a markdown table is made from.\n */\nexport function rangePreviewToTableData({ columnLabels, rows }: RangePreview): string[][] {\n return [['', ...columnLabels], ...rows.map(({ label, cells }) => [label, ...cells])];\n}\n"],"names":["columnNumberToLetters","columnLettersToNumber","SHEET_MAX_ROW","parseA1Range","SHEET_MAX_COLUMN","a1AnchorCell"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type A1Range } from './a1';
|
|
2
|
+
/**
|
|
3
|
+
* A rectangle of cell texts ready to draw: the column letters across the top,
|
|
4
|
+
* the sheet row numbers down the side. A preview carries at most the rows and
|
|
5
|
+
* columns it was built with; `totalRows` / `totalColumns` count the whole
|
|
6
|
+
* range, so a table can say how much more there is.
|
|
7
|
+
*/
|
|
8
|
+
export interface RangePreview {
|
|
9
|
+
/** Column header labels, left to right (`B`, `C`, …). */
|
|
10
|
+
columnLabels: string[];
|
|
11
|
+
/** Rows top to bottom: the row header label (the sheet row number) and one text per column label. */
|
|
12
|
+
rows: RangePreviewRow[];
|
|
13
|
+
/** Rows in the whole range, at least `rows.length`. */
|
|
14
|
+
totalRows: number;
|
|
15
|
+
/** Columns in the whole range, at least `columnLabels.length`. */
|
|
16
|
+
totalColumns: number;
|
|
17
|
+
}
|
|
18
|
+
export interface RangePreviewRow {
|
|
19
|
+
label: string;
|
|
20
|
+
cells: string[];
|
|
21
|
+
}
|
|
22
|
+
/** The most of a range a preview carries; pass `Infinity` for all of it. */
|
|
23
|
+
export interface RangePreviewLimits {
|
|
24
|
+
maxRows?: number;
|
|
25
|
+
maxColumns?: number;
|
|
26
|
+
}
|
|
27
|
+
/** Rows a preview carries by default. */
|
|
28
|
+
export declare const RANGE_PREVIEW_MAX_ROWS = 200;
|
|
29
|
+
/** Columns a preview carries by default. */
|
|
30
|
+
export declare const RANGE_PREVIEW_MAX_COLUMNS = 50;
|
|
31
|
+
/**
|
|
32
|
+
* The preview of a range read as a map from A1 keys to values — a workbook
|
|
33
|
+
* sheet's `cells` under its `dimension`, a `query_sheet_range` result under its
|
|
34
|
+
* range. Every cell of the range is drawn, with the map's value for its key
|
|
35
|
+
* (`formatCell(undefined)` when it has none); whole columns or rows span the
|
|
36
|
+
* rows or columns the map holds cells for. Null when the range does not parse,
|
|
37
|
+
* or names whole columns or rows the map holds nothing under.
|
|
38
|
+
*/
|
|
39
|
+
export declare function rangePreviewFromCellMap<V>({ range, cells, formatCell, maxRows, maxColumns, }: {
|
|
40
|
+
range: string | A1Range | null | undefined;
|
|
41
|
+
cells: Readonly<Record<string, V>>;
|
|
42
|
+
formatCell: (value: V | undefined) => string;
|
|
43
|
+
} & RangePreviewLimits): RangePreview | null;
|
|
44
|
+
/**
|
|
45
|
+
* The preview of rows of values written from an anchor — `update_sheet_range`
|
|
46
|
+
* cells, `set_sheet_values` values. The anchor is an A1 reference whose first
|
|
47
|
+
* cell as written takes the first value (`D6` of `D6:C5`, where the backend
|
|
48
|
+
* writes from; row 1 of whole columns, column A of whole rows), or a 1-based
|
|
49
|
+
* row and column. The width is the longest row's; shorter rows read
|
|
50
|
+
* `formatCell(undefined)` past their end, and a row that is not an array reads
|
|
51
|
+
* as empty. Nothing past the sheet's last row or column (XFD) is drawn. Null
|
|
52
|
+
* when the anchor does not parse or there is no cell to draw.
|
|
53
|
+
*/
|
|
54
|
+
export declare function rangePreviewFromRows<V>({ anchor, rows, formatCell, maxRows, maxColumns, }: {
|
|
55
|
+
anchor: string | {
|
|
56
|
+
row: number;
|
|
57
|
+
column: number;
|
|
58
|
+
} | null | undefined;
|
|
59
|
+
rows: ReadonlyArray<ReadonlyArray<V> | null | undefined>;
|
|
60
|
+
formatCell: (value: V | undefined) => string;
|
|
61
|
+
} & RangePreviewLimits): RangePreview | null;
|
|
62
|
+
/**
|
|
63
|
+
* A preview as rows of text with the header row first (an empty corner, then
|
|
64
|
+
* the column letters) and each row led by its number — the shape a copy as
|
|
65
|
+
* tab-separated values or a markdown table is made from.
|
|
66
|
+
*/
|
|
67
|
+
export declare function rangePreviewToTableData({ columnLabels, rows }: RangePreview): string[][];
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { parseA1Range, SHEET_MAX_ROW, SHEET_MAX_COLUMN, columnLettersToNumber, columnNumberToLetters, a1AnchorCell } from "./a1.js";
|
|
2
|
+
const RANGE_PREVIEW_MAX_ROWS = 200;
|
|
3
|
+
const RANGE_PREVIEW_MAX_COLUMNS = 50;
|
|
4
|
+
const CELL_KEY = /^([A-Za-z]{1,3})(\d{1,7})$/;
|
|
5
|
+
function limit(value, fallback) {
|
|
6
|
+
if (value === void 0 || Number.isNaN(value)) return fallback;
|
|
7
|
+
return Math.max(0, Math.floor(value));
|
|
8
|
+
}
|
|
9
|
+
function previewOf({
|
|
10
|
+
bounds,
|
|
11
|
+
maxRows,
|
|
12
|
+
maxColumns,
|
|
13
|
+
cellText
|
|
14
|
+
}) {
|
|
15
|
+
const totalRows = bounds.endRow - bounds.startRow + 1;
|
|
16
|
+
const totalColumns = bounds.endColumn - bounds.startColumn + 1;
|
|
17
|
+
const columnLabels = Array.from(
|
|
18
|
+
{ length: Math.min(totalColumns, maxColumns) },
|
|
19
|
+
(_, offset) => columnNumberToLetters(bounds.startColumn + offset)
|
|
20
|
+
);
|
|
21
|
+
const rows = Array.from({ length: Math.min(totalRows, maxRows) }, (_, rowOffset) => ({
|
|
22
|
+
label: String(bounds.startRow + rowOffset),
|
|
23
|
+
cells: columnLabels.map((columnLabel, columnOffset) => cellText(rowOffset, columnOffset, columnLabel))
|
|
24
|
+
}));
|
|
25
|
+
return { columnLabels, rows, totalRows, totalColumns };
|
|
26
|
+
}
|
|
27
|
+
function boundsWithinCells(range, cells) {
|
|
28
|
+
if (range.kind === "cell" || range.kind === "range") return range;
|
|
29
|
+
let first = Number.POSITIVE_INFINITY;
|
|
30
|
+
let last = Number.NEGATIVE_INFINITY;
|
|
31
|
+
for (const key of Object.keys(cells)) {
|
|
32
|
+
const match = CELL_KEY.exec(key);
|
|
33
|
+
const column = match ? columnLettersToNumber(match[1]) : null;
|
|
34
|
+
const row = match ? Number(match[2]) : 0;
|
|
35
|
+
if (column === null || row < 1 || row > SHEET_MAX_ROW) continue;
|
|
36
|
+
const inSpan = range.kind === "columns" ? column >= range.startColumn && column <= range.endColumn : row >= range.startRow && row <= range.endRow;
|
|
37
|
+
if (!inSpan) continue;
|
|
38
|
+
const along = range.kind === "columns" ? row : column;
|
|
39
|
+
first = Math.min(first, along);
|
|
40
|
+
last = Math.max(last, along);
|
|
41
|
+
}
|
|
42
|
+
if (first > last) return null;
|
|
43
|
+
return range.kind === "columns" ? { startRow: first, endRow: last, startColumn: range.startColumn, endColumn: range.endColumn } : { startRow: range.startRow, endRow: range.endRow, startColumn: first, endColumn: last };
|
|
44
|
+
}
|
|
45
|
+
function cellValue(cells, key) {
|
|
46
|
+
if (Object.hasOwn(cells, key)) return cells[key];
|
|
47
|
+
const lower = key.toLowerCase();
|
|
48
|
+
return Object.hasOwn(cells, lower) ? cells[lower] : void 0;
|
|
49
|
+
}
|
|
50
|
+
function rangePreviewFromCellMap({
|
|
51
|
+
range,
|
|
52
|
+
cells,
|
|
53
|
+
formatCell,
|
|
54
|
+
maxRows,
|
|
55
|
+
maxColumns
|
|
56
|
+
}) {
|
|
57
|
+
const parsed = typeof range === "string" || range == null ? parseA1Range(range) : range;
|
|
58
|
+
if (!parsed) return null;
|
|
59
|
+
const bounds = boundsWithinCells(parsed, cells);
|
|
60
|
+
if (!bounds) return null;
|
|
61
|
+
return previewOf({
|
|
62
|
+
bounds,
|
|
63
|
+
maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),
|
|
64
|
+
maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),
|
|
65
|
+
cellText: (rowOffset, _columnOffset, columnLabel) => formatCell(cellValue(cells, `${columnLabel}${bounds.startRow + rowOffset}`))
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function rangePreviewFromRows({
|
|
69
|
+
anchor,
|
|
70
|
+
rows,
|
|
71
|
+
formatCell,
|
|
72
|
+
maxRows,
|
|
73
|
+
maxColumns
|
|
74
|
+
}) {
|
|
75
|
+
const topLeft = anchorCell(anchor);
|
|
76
|
+
if (!topLeft) return null;
|
|
77
|
+
let widest = 0;
|
|
78
|
+
for (const row of rows) {
|
|
79
|
+
if (Array.isArray(row) && row.length > widest) widest = row.length;
|
|
80
|
+
}
|
|
81
|
+
const totalRows = Math.min(rows.length, SHEET_MAX_ROW - topLeft.row + 1);
|
|
82
|
+
const totalColumns = Math.min(widest, SHEET_MAX_COLUMN - topLeft.column + 1);
|
|
83
|
+
if (totalRows === 0 || totalColumns === 0) return null;
|
|
84
|
+
return previewOf({
|
|
85
|
+
bounds: {
|
|
86
|
+
startRow: topLeft.row,
|
|
87
|
+
endRow: topLeft.row + totalRows - 1,
|
|
88
|
+
startColumn: topLeft.column,
|
|
89
|
+
endColumn: topLeft.column + totalColumns - 1
|
|
90
|
+
},
|
|
91
|
+
maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),
|
|
92
|
+
maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),
|
|
93
|
+
cellText: (rowOffset, columnOffset) => {
|
|
94
|
+
const row = rows[rowOffset];
|
|
95
|
+
return formatCell(Array.isArray(row) ? row[columnOffset] : void 0);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function anchorCell(anchor) {
|
|
100
|
+
if (anchor == null) return null;
|
|
101
|
+
if (typeof anchor === "string") return a1AnchorCell(anchor);
|
|
102
|
+
const { row, column } = anchor;
|
|
103
|
+
const inSheet = Number.isInteger(row) && Number.isInteger(column) && row >= 1 && row <= SHEET_MAX_ROW && column >= 1 && column <= SHEET_MAX_COLUMN;
|
|
104
|
+
return inSheet ? { row, column } : null;
|
|
105
|
+
}
|
|
106
|
+
function rangePreviewToTableData({ columnLabels, rows }) {
|
|
107
|
+
return [["", ...columnLabels], ...rows.map(({ label, cells }) => [label, ...cells])];
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
RANGE_PREVIEW_MAX_COLUMNS,
|
|
111
|
+
RANGE_PREVIEW_MAX_ROWS,
|
|
112
|
+
rangePreviewFromCellMap,
|
|
113
|
+
rangePreviewFromRows,
|
|
114
|
+
rangePreviewToTableData
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=range-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-preview.js","sources":["../../src/sheet-range/range-preview.ts"],"sourcesContent":["import {\n type A1Range,\n a1AnchorCell,\n columnLettersToNumber,\n columnNumberToLetters,\n parseA1Range,\n SHEET_MAX_COLUMN,\n SHEET_MAX_ROW,\n type SheetRangeBounds,\n} from './a1';\n\n/**\n * A rectangle of cell texts ready to draw: the column letters across the top,\n * the sheet row numbers down the side. A preview carries at most the rows and\n * columns it was built with; `totalRows` / `totalColumns` count the whole\n * range, so a table can say how much more there is.\n */\nexport interface RangePreview {\n /** Column header labels, left to right (`B`, `C`, …). */\n columnLabels: string[];\n /** Rows top to bottom: the row header label (the sheet row number) and one text per column label. */\n rows: RangePreviewRow[];\n /** Rows in the whole range, at least `rows.length`. */\n totalRows: number;\n /** Columns in the whole range, at least `columnLabels.length`. */\n totalColumns: number;\n}\n\nexport interface RangePreviewRow {\n label: string;\n cells: string[];\n}\n\n/** The most of a range a preview carries; pass `Infinity` for all of it. */\nexport interface RangePreviewLimits {\n maxRows?: number;\n maxColumns?: number;\n}\n\n/** Rows a preview carries by default. */\nexport const RANGE_PREVIEW_MAX_ROWS = 200;\n/** Columns a preview carries by default. */\nexport const RANGE_PREVIEW_MAX_COLUMNS = 50;\n\nconst CELL_KEY = /^([A-Za-z]{1,3})(\\d{1,7})$/;\n\nfunction limit(value: number | undefined, fallback: number): number {\n if (value === undefined || Number.isNaN(value)) return fallback;\n return Math.max(0, Math.floor(value));\n}\n\nfunction previewOf({\n bounds,\n maxRows,\n maxColumns,\n cellText,\n}: {\n bounds: SheetRangeBounds;\n maxRows: number;\n maxColumns: number;\n cellText: (rowOffset: number, columnOffset: number, columnLabel: string) => string;\n}): RangePreview {\n const totalRows = bounds.endRow - bounds.startRow + 1;\n const totalColumns = bounds.endColumn - bounds.startColumn + 1;\n const columnLabels = Array.from({ length: Math.min(totalColumns, maxColumns) }, (_, offset) =>\n columnNumberToLetters(bounds.startColumn + offset),\n );\n const rows = Array.from({ length: Math.min(totalRows, maxRows) }, (_, rowOffset) => ({\n label: String(bounds.startRow + rowOffset),\n cells: columnLabels.map((columnLabel, columnOffset) => cellText(rowOffset, columnOffset, columnLabel)),\n }));\n return { columnLabels, rows, totalRows, totalColumns };\n}\n\n/**\n * Where the cells of whole columns or rows actually are: the rows the map\n * holds a cell for under those columns (or the columns under those rows).\n * Null when it holds none. Only whole columns or rows read the map's keys; a\n * cell or a rectangle is its own extent.\n */\nfunction boundsWithinCells(range: A1Range, cells: Readonly<Record<string, unknown>>): SheetRangeBounds | null {\n if (range.kind === 'cell' || range.kind === 'range') return range;\n let first = Number.POSITIVE_INFINITY;\n let last = Number.NEGATIVE_INFINITY;\n for (const key of Object.keys(cells)) {\n const match = CELL_KEY.exec(key);\n const column = match ? columnLettersToNumber(match[1]) : null;\n const row = match ? Number(match[2]) : 0;\n if (column === null || row < 1 || row > SHEET_MAX_ROW) continue;\n const inSpan =\n range.kind === 'columns'\n ? column >= range.startColumn && column <= range.endColumn\n : row >= range.startRow && row <= range.endRow;\n if (!inSpan) continue;\n const along = range.kind === 'columns' ? row : column;\n first = Math.min(first, along);\n last = Math.max(last, along);\n }\n if (first > last) return null;\n return range.kind === 'columns'\n ? { startRow: first, endRow: last, startColumn: range.startColumn, endColumn: range.endColumn }\n : { startRow: range.startRow, endRow: range.endRow, startColumn: first, endColumn: last };\n}\n\n/** A cell's value under its A1 key: in capitals (`B2`), as the backend writes keys, else in lower case. */\nfunction cellValue<V>(cells: Readonly<Record<string, V>>, key: string): V | undefined {\n if (Object.hasOwn(cells, key)) return cells[key];\n const lower = key.toLowerCase();\n return Object.hasOwn(cells, lower) ? cells[lower] : undefined;\n}\n\n/**\n * The preview of a range read as a map from A1 keys to values — a workbook\n * sheet's `cells` under its `dimension`, a `query_sheet_range` result under its\n * range. Every cell of the range is drawn, with the map's value for its key\n * (`formatCell(undefined)` when it has none); whole columns or rows span the\n * rows or columns the map holds cells for. Null when the range does not parse,\n * or names whole columns or rows the map holds nothing under.\n */\nexport function rangePreviewFromCellMap<V>({\n range,\n cells,\n formatCell,\n maxRows,\n maxColumns,\n}: {\n range: string | A1Range | null | undefined;\n cells: Readonly<Record<string, V>>;\n formatCell: (value: V | undefined) => string;\n} & RangePreviewLimits): RangePreview | null {\n const parsed = typeof range === 'string' || range == null ? parseA1Range(range) : range;\n if (!parsed) return null;\n const bounds = boundsWithinCells(parsed, cells);\n if (!bounds) return null;\n return previewOf({\n bounds,\n maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),\n maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),\n cellText: (rowOffset, _columnOffset, columnLabel) =>\n formatCell(cellValue(cells, `${columnLabel}${bounds.startRow + rowOffset}`)),\n });\n}\n\n/**\n * The preview of rows of values written from an anchor — `update_sheet_range`\n * cells, `set_sheet_values` values. The anchor is an A1 reference whose first\n * cell as written takes the first value (`D6` of `D6:C5`, where the backend\n * writes from; row 1 of whole columns, column A of whole rows), or a 1-based\n * row and column. The width is the longest row's; shorter rows read\n * `formatCell(undefined)` past their end, and a row that is not an array reads\n * as empty. Nothing past the sheet's last row or column (XFD) is drawn. Null\n * when the anchor does not parse or there is no cell to draw.\n */\nexport function rangePreviewFromRows<V>({\n anchor,\n rows,\n formatCell,\n maxRows,\n maxColumns,\n}: {\n anchor: string | { row: number; column: number } | null | undefined;\n rows: ReadonlyArray<ReadonlyArray<V> | null | undefined>;\n formatCell: (value: V | undefined) => string;\n} & RangePreviewLimits): RangePreview | null {\n const topLeft = anchorCell(anchor);\n if (!topLeft) return null;\n let widest = 0;\n for (const row of rows) {\n if (Array.isArray(row) && row.length > widest) widest = row.length;\n }\n const totalRows = Math.min(rows.length, SHEET_MAX_ROW - topLeft.row + 1);\n const totalColumns = Math.min(widest, SHEET_MAX_COLUMN - topLeft.column + 1);\n if (totalRows === 0 || totalColumns === 0) return null;\n return previewOf({\n bounds: {\n startRow: topLeft.row,\n endRow: topLeft.row + totalRows - 1,\n startColumn: topLeft.column,\n endColumn: topLeft.column + totalColumns - 1,\n },\n maxRows: limit(maxRows, RANGE_PREVIEW_MAX_ROWS),\n maxColumns: limit(maxColumns, RANGE_PREVIEW_MAX_COLUMNS),\n cellText: (rowOffset, columnOffset) => {\n const row = rows[rowOffset];\n return formatCell(Array.isArray(row) ? row[columnOffset] : undefined);\n },\n });\n}\n\nfunction anchorCell(\n anchor: string | { row: number; column: number } | null | undefined,\n): { row: number; column: number } | null {\n if (anchor == null) return null;\n if (typeof anchor === 'string') return a1AnchorCell(anchor);\n const { row, column } = anchor;\n const inSheet =\n Number.isInteger(row) &&\n Number.isInteger(column) &&\n row >= 1 &&\n row <= SHEET_MAX_ROW &&\n column >= 1 &&\n column <= SHEET_MAX_COLUMN;\n return inSheet ? { row, column } : null;\n}\n\n/**\n * A preview as rows of text with the header row first (an empty corner, then\n * the column letters) and each row led by its number — the shape a copy as\n * tab-separated values or a markdown table is made from.\n */\nexport function rangePreviewToTableData({ columnLabels, rows }: RangePreview): string[][] {\n return [['', ...columnLabels], ...rows.map(({ label, cells }) => [label, ...cells])];\n}\n"],"names":[],"mappings":"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"}
|