@athenaintel/react 0.28.0 → 0.30.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.
Files changed (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +12 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +12 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +365 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +365 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +39 -97
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +39 -97
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -0,0 +1,162 @@
1
+ const SHEET_MAX_ROW = 1048576;
2
+ const SHEET_MAX_COLUMN = 16384;
3
+ const CELL_REFERENCE = /^\$?([A-Za-z]{1,3})\$?(\d{1,7})$/;
4
+ const COLUMN_REFERENCE = /^\$?([A-Za-z]{1,3})$/;
5
+ const ROW_REFERENCE = /^\$?(\d{1,7})$/;
6
+ function columnLettersToNumber(letters) {
7
+ if (!/^[A-Za-z]{1,3}$/.test(letters)) return null;
8
+ let column = 0;
9
+ for (const letter of letters.toUpperCase()) column = column * 26 + (letter.charCodeAt(0) - 64);
10
+ return column <= SHEET_MAX_COLUMN ? column : null;
11
+ }
12
+ function columnNumberToLetters(column) {
13
+ if (!Number.isInteger(column) || column < 1) return "";
14
+ let letters = "";
15
+ for (let rest = column; rest > 0; rest = Math.floor((rest - 1) / 26)) {
16
+ letters = String.fromCharCode(65 + (rest - 1) % 26) + letters;
17
+ }
18
+ return letters;
19
+ }
20
+ function formatA1Cell({ row, column }) {
21
+ return `${columnNumberToLetters(column)}${row}`;
22
+ }
23
+ function formatA1Range({ startRow, endRow, startColumn, endColumn }) {
24
+ const start = formatA1Cell({ row: startRow, column: startColumn });
25
+ if (startRow === endRow && startColumn === endColumn) return start;
26
+ return `${start}:${formatA1Cell({ row: endRow, column: endColumn })}`;
27
+ }
28
+ function splitSheetPrefix(reference) {
29
+ if (reference.startsWith("'")) {
30
+ let name2 = "";
31
+ let index = 1;
32
+ while (index < reference.length) {
33
+ const char = reference[index];
34
+ if (char === "'") {
35
+ if (reference[index + 1] !== "'") break;
36
+ name2 += "'";
37
+ index += 2;
38
+ continue;
39
+ }
40
+ name2 += char;
41
+ index += 1;
42
+ }
43
+ if (name2 === "" || reference[index] !== "'" || reference[index + 1] !== "!") return null;
44
+ return { sheetName: name2, address: reference.slice(index + 2) };
45
+ }
46
+ const bang = reference.indexOf("!");
47
+ if (bang === -1) return { sheetName: null, address: reference };
48
+ const name = reference.slice(0, bang);
49
+ if (name === "" || name.includes("'")) return null;
50
+ return { sheetName: name, address: reference.slice(bang + 1) };
51
+ }
52
+ function parseRow(digits) {
53
+ const row = Number(digits);
54
+ return Number.isInteger(row) && row >= 1 && row <= SHEET_MAX_ROW ? row : null;
55
+ }
56
+ function parseCell(part) {
57
+ const match = CELL_REFERENCE.exec(part);
58
+ if (!match) return null;
59
+ const column = columnLettersToNumber(match[1]);
60
+ const row = parseRow(match[2]);
61
+ return column === null || row === null ? null : { row, column };
62
+ }
63
+ function parseColumn(part) {
64
+ const match = COLUMN_REFERENCE.exec(part);
65
+ return match ? columnLettersToNumber(match[1]) : null;
66
+ }
67
+ function parseWholeRow(part) {
68
+ const match = ROW_REFERENCE.exec(part);
69
+ return match ? parseRow(match[1]) : null;
70
+ }
71
+ function parseA1Range(reference) {
72
+ if (typeof reference !== "string") return null;
73
+ const qualified = splitSheetPrefix(reference.trim());
74
+ if (!qualified) return null;
75
+ const { sheetName } = qualified;
76
+ const parts = qualified.address.split(":").map((part) => part.trim());
77
+ if (parts.length > 2 || parts.some((part) => part === "")) return null;
78
+ if (parts.length === 1) {
79
+ const cell = parseCell(parts[0]);
80
+ if (!cell) return null;
81
+ return {
82
+ kind: "cell",
83
+ sheetName,
84
+ startRow: cell.row,
85
+ endRow: cell.row,
86
+ startColumn: cell.column,
87
+ endColumn: cell.column
88
+ };
89
+ }
90
+ const [first, second] = parts;
91
+ const startCell = parseCell(first);
92
+ const endCell = parseCell(second);
93
+ if (startCell && endCell) {
94
+ return {
95
+ kind: "range",
96
+ sheetName,
97
+ startRow: Math.min(startCell.row, endCell.row),
98
+ endRow: Math.max(startCell.row, endCell.row),
99
+ startColumn: Math.min(startCell.column, endCell.column),
100
+ endColumn: Math.max(startCell.column, endCell.column)
101
+ };
102
+ }
103
+ const startColumn = parseColumn(first);
104
+ const endColumn = parseColumn(second);
105
+ if (startColumn !== null && endColumn !== null) {
106
+ return {
107
+ kind: "columns",
108
+ sheetName,
109
+ startRow: null,
110
+ endRow: null,
111
+ startColumn: Math.min(startColumn, endColumn),
112
+ endColumn: Math.max(startColumn, endColumn)
113
+ };
114
+ }
115
+ const startRow = parseWholeRow(first);
116
+ const endRow = parseWholeRow(second);
117
+ if (startRow !== null && endRow !== null) {
118
+ return {
119
+ kind: "rows",
120
+ sheetName,
121
+ startRow: Math.min(startRow, endRow),
122
+ endRow: Math.max(startRow, endRow),
123
+ startColumn: null,
124
+ endColumn: null
125
+ };
126
+ }
127
+ return null;
128
+ }
129
+ function a1AnchorCell(reference) {
130
+ if (typeof reference !== "string" || !parseA1Range(reference)) return null;
131
+ const qualified = splitSheetPrefix(reference.trim());
132
+ const first = (qualified == null ? void 0 : qualified.address.split(":")[0].trim()) ?? "";
133
+ const cell = parseCell(first);
134
+ if (cell) return cell;
135
+ const column = parseColumn(first);
136
+ if (column !== null) return { row: 1, column };
137
+ const row = parseWholeRow(first);
138
+ return row === null ? null : { row, column: 1 };
139
+ }
140
+ function a1RangeBounds(reference) {
141
+ const range = parseA1Range(reference);
142
+ if (!range || range.kind !== "cell" && range.kind !== "range") return null;
143
+ return {
144
+ startRow: range.startRow,
145
+ endRow: range.endRow,
146
+ startColumn: range.startColumn,
147
+ endColumn: range.endColumn
148
+ };
149
+ }
150
+ export {
151
+ SHEET_MAX_COLUMN,
152
+ SHEET_MAX_ROW,
153
+ a1AnchorCell,
154
+ a1RangeBounds,
155
+ columnLettersToNumber,
156
+ columnNumberToLetters,
157
+ formatA1Cell,
158
+ formatA1Range,
159
+ parseA1Range,
160
+ splitSheetPrefix
161
+ };
162
+ //# sourceMappingURL=a1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a1.js","sources":["../../src/sheet-range/a1.ts"],"sourcesContent":["/**\n * A1 references, read and written the way every spreadsheet surface outside\n * the grid reads them: the SDK's sheet tool cards, and Olympus's sheet tool\n * cards, citation previews and citation navigation. Pure: no React, no engine.\n *\n * Rows and columns are 1-based, as the sheets engine counts them: `A1` is row\n * 1, column 1.\n */\n\n/** The last row a sheet addresses (Excel and the sheets engine). */\nexport const SHEET_MAX_ROW = 1_048_576;\n/** The last column a sheet addresses: XFD. */\nexport const SHEET_MAX_COLUMN = 16_384;\n\n/** A rectangle of cells, 1-based and inclusive on both ends. */\nexport interface SheetRangeBounds {\n startRow: number;\n endRow: number;\n startColumn: number;\n endColumn: number;\n}\n\ninterface SheetQualifier {\n /** The sheet a `Sales!` or `'Q1 Plan'!` prefix names (quotes removed, `''` read as `'`); null without one. */\n sheetName: string | null;\n}\n\n/**\n * A parsed A1 reference. A cell or a rectangle carries all four bounds\n * (normalized so start ≤ end, as `C5:A1` means `A1:C5`); whole columns (`A:C`)\n * leave the rows open and whole rows (`3:5`) the columns.\n */\nexport type A1Range =\n | (SheetQualifier & SheetRangeBounds & { kind: 'cell' | 'range' })\n | (SheetQualifier & {\n kind: 'columns';\n startRow: null;\n endRow: null;\n startColumn: number;\n endColumn: number;\n })\n | (SheetQualifier & {\n kind: 'rows';\n startRow: number;\n endRow: number;\n startColumn: null;\n endColumn: null;\n });\n\n/** A cell (`B7`, `$B$7`); the column is 1–3 letters, the row 1–7 digits. */\nconst CELL_REFERENCE = /^\\$?([A-Za-z]{1,3})\\$?(\\d{1,7})$/;\n/** One side of whole columns (`A`, `$A`). */\nconst COLUMN_REFERENCE = /^\\$?([A-Za-z]{1,3})$/;\n/** One side of whole rows (`3`, `$3`). */\nconst ROW_REFERENCE = /^\\$?(\\d{1,7})$/;\n\n/** Column letters to the 1-based column (`A` → 1, `AA` → 27); null past XFD or for anything but letters. */\nexport function columnLettersToNumber(letters: string): number | null {\n if (!/^[A-Za-z]{1,3}$/.test(letters)) return null;\n let column = 0;\n for (const letter of letters.toUpperCase()) column = column * 26 + (letter.charCodeAt(0) - 64);\n return column <= SHEET_MAX_COLUMN ? column : null;\n}\n\n/** A 1-based column to its letters (1 → `A`, 27 → `AA`); empty for anything below 1 or fractional. */\nexport function columnNumberToLetters(column: number): string {\n if (!Number.isInteger(column) || column < 1) return '';\n let letters = '';\n for (let rest = column; rest > 0; rest = Math.floor((rest - 1) / 26)) {\n letters = String.fromCharCode(65 + ((rest - 1) % 26)) + letters;\n }\n return letters;\n}\n\n/** A cell's A1 address: `{ row: 7, column: 2 }` → `B7`. */\nexport function formatA1Cell({ row, column }: { row: number; column: number }): string {\n return `${columnNumberToLetters(column)}${row}`;\n}\n\n/** A rectangle's A1 address: `A1:C5`, or `A1` alone when it is one cell. */\nexport function formatA1Range({ startRow, endRow, startColumn, endColumn }: SheetRangeBounds): string {\n const start = formatA1Cell({ row: startRow, column: startColumn });\n if (startRow === endRow && startColumn === endColumn) return start;\n return `${start}:${formatA1Cell({ row: endRow, column: endColumn })}`;\n}\n\n/**\n * Split the sheet prefix off a reference: `'Q1 Plan'!A1:B2` → `Q1 Plan` and\n * `A1:B2`, `Sales!B7` → `Sales` and `B7`, `B7` → no sheet and `B7`. A quoted\n * name runs to the first quote that is not doubled (`'Bob''s'!A1` names\n * `Bob's`); an unquoted one runs to the first `!` and holds no quote. Null for\n * a prefix that is not one (an empty name, an unclosed quote, a quote without\n * its `!`).\n */\nexport function splitSheetPrefix(reference: string): { sheetName: string | null; address: string } | null {\n if (reference.startsWith(\"'\")) {\n let name = '';\n let index = 1;\n while (index < reference.length) {\n const char = reference[index];\n if (char === \"'\") {\n if (reference[index + 1] !== \"'\") break;\n name += \"'\";\n index += 2;\n continue;\n }\n name += char;\n index += 1;\n }\n if (name === '' || reference[index] !== \"'\" || reference[index + 1] !== '!') return null;\n return { sheetName: name, address: reference.slice(index + 2) };\n }\n const bang = reference.indexOf('!');\n if (bang === -1) return { sheetName: null, address: reference };\n const name = reference.slice(0, bang);\n if (name === '' || name.includes(\"'\")) return null;\n return { sheetName: name, address: reference.slice(bang + 1) };\n}\n\nfunction parseRow(digits: string): number | null {\n const row = Number(digits);\n return Number.isInteger(row) && row >= 1 && row <= SHEET_MAX_ROW ? row : null;\n}\n\nfunction parseCell(part: string): { row: number; column: number } | null {\n const match = CELL_REFERENCE.exec(part);\n if (!match) return null;\n const column = columnLettersToNumber(match[1]);\n const row = parseRow(match[2]);\n return column === null || row === null ? null : { row, column };\n}\n\nfunction parseColumn(part: string): number | null {\n const match = COLUMN_REFERENCE.exec(part);\n return match ? columnLettersToNumber(match[1]) : null;\n}\n\nfunction parseWholeRow(part: string): number | null {\n const match = ROW_REFERENCE.exec(part);\n return match ? parseRow(match[1]) : null;\n}\n\n/**\n * Read an A1 reference: a cell (`B7`), a rectangle (`A1:C5`), whole columns\n * (`A:C`) or whole rows (`3:5`), with an optional sheet prefix (`Sales!`,\n * `'Q1 Plan'!`), `$` absolute markers and any letter case. Whitespace around\n * the reference and around its `:` is ignored. Null for anything else: a named\n * range, a column past XFD, row 0 or a row past 1,048,576, a lone column or\n * row, mixed sides (`A1:C`), three parts.\n */\nexport function parseA1Range(reference: string | null | undefined): A1Range | null {\n if (typeof reference !== 'string') return null;\n const qualified = splitSheetPrefix(reference.trim());\n if (!qualified) return null;\n const { sheetName } = qualified;\n const parts = qualified.address.split(':').map((part) => part.trim());\n if (parts.length > 2 || parts.some((part) => part === '')) return null;\n\n if (parts.length === 1) {\n const cell = parseCell(parts[0]);\n if (!cell) return null;\n return {\n kind: 'cell',\n sheetName,\n startRow: cell.row,\n endRow: cell.row,\n startColumn: cell.column,\n endColumn: cell.column,\n };\n }\n\n const [first, second] = parts;\n const startCell = parseCell(first);\n const endCell = parseCell(second);\n if (startCell && endCell) {\n return {\n kind: 'range',\n sheetName,\n startRow: Math.min(startCell.row, endCell.row),\n endRow: Math.max(startCell.row, endCell.row),\n startColumn: Math.min(startCell.column, endCell.column),\n endColumn: Math.max(startCell.column, endCell.column),\n };\n }\n const startColumn = parseColumn(first);\n const endColumn = parseColumn(second);\n if (startColumn !== null && endColumn !== null) {\n return {\n kind: 'columns',\n sheetName,\n startRow: null,\n endRow: null,\n startColumn: Math.min(startColumn, endColumn),\n endColumn: Math.max(startColumn, endColumn),\n };\n }\n const startRow = parseWholeRow(first);\n const endRow = parseWholeRow(second);\n if (startRow !== null && endRow !== null) {\n return {\n kind: 'rows',\n sheetName,\n startRow: Math.min(startRow, endRow),\n endRow: Math.max(startRow, endRow),\n startColumn: null,\n endColumn: null,\n };\n }\n return null;\n}\n\n/**\n * The cell a reference starts from as written, its first part: `D6` for\n * `D6:C5`, row 1 of column C for `C:A`, column A of row 5 for `5:3`. A write\n * anchored at a range starts there; the backend does not reorder a range\n * written backwards. Null for anything `parseA1Range` cannot read.\n */\nexport function a1AnchorCell(reference: string | null | undefined): { row: number; column: number } | null {\n if (typeof reference !== 'string' || !parseA1Range(reference)) return null;\n const qualified = splitSheetPrefix(reference.trim());\n const first = qualified?.address.split(':')[0].trim() ?? '';\n const cell = parseCell(first);\n if (cell) return cell;\n const column = parseColumn(first);\n if (column !== null) return { row: 1, column };\n const row = parseWholeRow(first);\n return row === null ? null : { row, column: 1 };\n}\n\n/**\n * The rectangle a cell or rectangle reference covers. Null for whole columns\n * or rows, whose extent is open, and for anything `parseA1Range` cannot read.\n */\nexport function a1RangeBounds(reference: string | null | undefined): SheetRangeBounds | null {\n const range = parseA1Range(reference);\n if (!range || (range.kind !== 'cell' && range.kind !== 'range')) return null;\n return {\n startRow: range.startRow,\n endRow: range.endRow,\n startColumn: range.startColumn,\n endColumn: range.endColumn,\n };\n}\n"],"names":["name"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const a1 = require("./a1.cjs");
4
+ const rangePreview = require("./range-preview.cjs");
5
+ const rangePreviewTable = require("./range-preview-table.cjs");
6
+ exports.SHEET_MAX_COLUMN = a1.SHEET_MAX_COLUMN;
7
+ exports.SHEET_MAX_ROW = a1.SHEET_MAX_ROW;
8
+ exports.a1AnchorCell = a1.a1AnchorCell;
9
+ exports.a1RangeBounds = a1.a1RangeBounds;
10
+ exports.columnLettersToNumber = a1.columnLettersToNumber;
11
+ exports.columnNumberToLetters = a1.columnNumberToLetters;
12
+ exports.formatA1Cell = a1.formatA1Cell;
13
+ exports.formatA1Range = a1.formatA1Range;
14
+ exports.parseA1Range = a1.parseA1Range;
15
+ exports.splitSheetPrefix = a1.splitSheetPrefix;
16
+ exports.RANGE_PREVIEW_MAX_COLUMNS = rangePreview.RANGE_PREVIEW_MAX_COLUMNS;
17
+ exports.RANGE_PREVIEW_MAX_ROWS = rangePreview.RANGE_PREVIEW_MAX_ROWS;
18
+ exports.rangePreviewFromCellMap = rangePreview.rangePreviewFromCellMap;
19
+ exports.rangePreviewFromRows = rangePreview.rangePreviewFromRows;
20
+ exports.rangePreviewToTableData = rangePreview.rangePreviewToTableData;
21
+ exports.RangePreviewTable = rangePreviewTable.RangePreviewTable;
22
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Spreadsheet ranges outside the grid: reading and writing A1 references, and
3
+ * drawing a read-only preview of a range's values. The SDK's sheet tool cards
4
+ * draw it, and so do Olympus's sheet tool cards and citation previews. Pure
5
+ * apart from the one table component, and free of the chat runtime, so a
6
+ * host's shell can import it without loading the chat.
7
+ *
8
+ * Published as the `@athenaintel/react/sheet-range` sub-path.
9
+ */
10
+ export { type A1Range, a1AnchorCell, a1RangeBounds, columnLettersToNumber, columnNumberToLetters, formatA1Cell, formatA1Range, parseA1Range, SHEET_MAX_COLUMN, SHEET_MAX_ROW, type SheetRangeBounds, splitSheetPrefix, } from './a1';
11
+ export { RANGE_PREVIEW_MAX_COLUMNS, RANGE_PREVIEW_MAX_ROWS, type RangePreview, type RangePreviewLimits, type RangePreviewRow, rangePreviewFromCellMap, rangePreviewFromRows, rangePreviewToTableData, } from './range-preview';
12
+ export { RangePreviewTable, type RangePreviewTableProps } from './range-preview-table';
@@ -0,0 +1,22 @@
1
+ import { SHEET_MAX_COLUMN, SHEET_MAX_ROW, a1AnchorCell, a1RangeBounds, columnLettersToNumber, columnNumberToLetters, formatA1Cell, formatA1Range, parseA1Range, splitSheetPrefix } from "./a1.js";
2
+ import { RANGE_PREVIEW_MAX_COLUMNS, RANGE_PREVIEW_MAX_ROWS, rangePreviewFromCellMap, rangePreviewFromRows, rangePreviewToTableData } from "./range-preview.js";
3
+ import { RangePreviewTable } from "./range-preview-table.js";
4
+ export {
5
+ RANGE_PREVIEW_MAX_COLUMNS,
6
+ RANGE_PREVIEW_MAX_ROWS,
7
+ RangePreviewTable,
8
+ SHEET_MAX_COLUMN,
9
+ SHEET_MAX_ROW,
10
+ a1AnchorCell,
11
+ a1RangeBounds,
12
+ columnLettersToNumber,
13
+ columnNumberToLetters,
14
+ formatA1Cell,
15
+ formatA1Range,
16
+ parseA1Range,
17
+ rangePreviewFromCellMap,
18
+ rangePreviewFromRows,
19
+ rangePreviewToTableData,
20
+ splitSheetPrefix
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -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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"}