@stigmer/react 0.3.4 → 0.4.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 (442) hide show
  1. package/billing/AutoRechargeCard.d.ts +38 -0
  2. package/billing/AutoRechargeCard.d.ts.map +1 -0
  3. package/billing/AutoRechargeCard.js +90 -0
  4. package/billing/AutoRechargeCard.js.map +1 -0
  5. package/billing/BillingSection.d.ts +32 -0
  6. package/billing/BillingSection.d.ts.map +1 -0
  7. package/billing/BillingSection.js +81 -0
  8. package/billing/BillingSection.js.map +1 -0
  9. package/billing/CreditBalanceCard.d.ts +25 -0
  10. package/billing/CreditBalanceCard.d.ts.map +1 -0
  11. package/billing/CreditBalanceCard.js +28 -0
  12. package/billing/CreditBalanceCard.js.map +1 -0
  13. package/billing/CreditLedgerTable.d.ts +22 -0
  14. package/billing/CreditLedgerTable.d.ts.map +1 -0
  15. package/billing/CreditLedgerTable.js +75 -0
  16. package/billing/CreditLedgerTable.js.map +1 -0
  17. package/billing/CreditPackGrid.d.ts +31 -0
  18. package/billing/CreditPackGrid.d.ts.map +1 -0
  19. package/billing/CreditPackGrid.js +35 -0
  20. package/billing/CreditPackGrid.js.map +1 -0
  21. package/billing/LowBalanceBanner.d.ts +26 -0
  22. package/billing/LowBalanceBanner.d.ts.map +1 -0
  23. package/billing/LowBalanceBanner.js +33 -0
  24. package/billing/LowBalanceBanner.js.map +1 -0
  25. package/billing/PaymentMethodCard.d.ts +35 -0
  26. package/billing/PaymentMethodCard.d.ts.map +1 -0
  27. package/billing/PaymentMethodCard.js +48 -0
  28. package/billing/PaymentMethodCard.js.map +1 -0
  29. package/billing/credit-packs.d.ts +25 -0
  30. package/billing/credit-packs.d.ts.map +1 -0
  31. package/billing/credit-packs.js +39 -0
  32. package/billing/credit-packs.js.map +1 -0
  33. package/billing/format.d.ts +39 -0
  34. package/billing/format.d.ts.map +1 -0
  35. package/billing/format.js +90 -0
  36. package/billing/format.js.map +1 -0
  37. package/billing/index.d.ts +32 -0
  38. package/billing/index.d.ts.map +1 -0
  39. package/billing/index.js +21 -0
  40. package/billing/index.js.map +1 -0
  41. package/billing/useBillingAccount.d.ts +40 -0
  42. package/billing/useBillingAccount.d.ts.map +1 -0
  43. package/billing/useBillingAccount.js +35 -0
  44. package/billing/useBillingAccount.js.map +1 -0
  45. package/billing/useBillingUsageReport.d.ts +42 -0
  46. package/billing/useBillingUsageReport.d.ts.map +1 -0
  47. package/billing/useBillingUsageReport.js +43 -0
  48. package/billing/useBillingUsageReport.js.map +1 -0
  49. package/billing/useCreateBillingPortalSession.d.ts +35 -0
  50. package/billing/useCreateBillingPortalSession.d.ts.map +1 -0
  51. package/billing/useCreateBillingPortalSession.js +50 -0
  52. package/billing/useCreateBillingPortalSession.js.map +1 -0
  53. package/billing/useCreateCheckoutSession.d.ts +54 -0
  54. package/billing/useCreateCheckoutSession.d.ts.map +1 -0
  55. package/billing/useCreateCheckoutSession.js +58 -0
  56. package/billing/useCreateCheckoutSession.js.map +1 -0
  57. package/billing/useCreditLedger.d.ts +48 -0
  58. package/billing/useCreditLedger.d.ts.map +1 -0
  59. package/billing/useCreditLedger.js +39 -0
  60. package/billing/useCreditLedger.js.map +1 -0
  61. package/billing/useCustomerModelPricing.d.ts +41 -0
  62. package/billing/useCustomerModelPricing.d.ts.map +1 -0
  63. package/billing/useCustomerModelPricing.js +37 -0
  64. package/billing/useCustomerModelPricing.js.map +1 -0
  65. package/billing/useSetAutoRechargeConfig.d.ts +50 -0
  66. package/billing/useSetAutoRechargeConfig.d.ts.map +1 -0
  67. package/billing/useSetAutoRechargeConfig.js +53 -0
  68. package/billing/useSetAutoRechargeConfig.js.map +1 -0
  69. package/composer/ComposerToolbar.js +1 -1
  70. package/composer/ComposerToolbar.js.map +1 -1
  71. package/composer/SessionComposer.d.ts +1 -1
  72. package/composer/SessionComposer.d.ts.map +1 -1
  73. package/composer/SessionComposer.js +19 -4
  74. package/composer/SessionComposer.js.map +1 -1
  75. package/composer/__tests__/SessionComposer-memo.test.d.ts +2 -0
  76. package/composer/__tests__/SessionComposer-memo.test.d.ts.map +1 -0
  77. package/composer/__tests__/SessionComposer-memo.test.js +23 -0
  78. package/composer/__tests__/SessionComposer-memo.test.js.map +1 -0
  79. package/execution/ApprovalCard.d.ts +5 -1
  80. package/execution/ApprovalCard.d.ts.map +1 -1
  81. package/execution/ApprovalCard.js +7 -3
  82. package/execution/ApprovalCard.js.map +1 -1
  83. package/execution/ExecutionPhaseBadge.d.ts +1 -1
  84. package/execution/ExecutionPhaseBadge.d.ts.map +1 -1
  85. package/execution/ExecutionPhaseBadge.js +3 -2
  86. package/execution/ExecutionPhaseBadge.js.map +1 -1
  87. package/execution/MessageEntry.d.ts +7 -3
  88. package/execution/MessageEntry.d.ts.map +1 -1
  89. package/execution/MessageEntry.js +19 -8
  90. package/execution/MessageEntry.js.map +1 -1
  91. package/execution/MessageThread.d.ts +84 -3
  92. package/execution/MessageThread.d.ts.map +1 -1
  93. package/execution/MessageThread.js +113 -65
  94. package/execution/MessageThread.js.map +1 -1
  95. package/execution/SetupProgress.d.ts +1 -1
  96. package/execution/SetupProgress.d.ts.map +1 -1
  97. package/execution/SetupProgress.js +3 -3
  98. package/execution/SetupProgress.js.map +1 -1
  99. package/execution/SubAgentSection.d.ts +5 -1
  100. package/execution/SubAgentSection.d.ts.map +1 -1
  101. package/execution/SubAgentSection.js +13 -7
  102. package/execution/SubAgentSection.js.map +1 -1
  103. package/execution/ThreadSkeleton.d.ts +22 -0
  104. package/execution/ThreadSkeleton.d.ts.map +1 -0
  105. package/execution/ThreadSkeleton.js +26 -0
  106. package/execution/ThreadSkeleton.js.map +1 -0
  107. package/execution/ToolCallGroup.d.ts +16 -1
  108. package/execution/ToolCallGroup.d.ts.map +1 -1
  109. package/execution/ToolCallGroup.js +31 -3
  110. package/execution/ToolCallGroup.js.map +1 -1
  111. package/execution/UsageWidget.d.ts +1 -1
  112. package/execution/__tests__/message-entry.test.d.ts +2 -0
  113. package/execution/__tests__/message-entry.test.d.ts.map +1 -0
  114. package/execution/__tests__/message-entry.test.js +178 -0
  115. package/execution/__tests__/message-entry.test.js.map +1 -0
  116. package/execution/__tests__/thread-keys.test.d.ts +2 -0
  117. package/execution/__tests__/thread-keys.test.d.ts.map +1 -0
  118. package/execution/__tests__/thread-keys.test.js +289 -0
  119. package/execution/__tests__/thread-keys.test.js.map +1 -0
  120. package/execution/__tests__/thread-memoization.test.d.ts +2 -0
  121. package/execution/__tests__/thread-memoization.test.d.ts.map +1 -0
  122. package/execution/__tests__/thread-memoization.test.js +262 -0
  123. package/execution/__tests__/thread-memoization.test.js.map +1 -0
  124. package/execution/__tests__/thread-skeleton.test.d.ts +2 -0
  125. package/execution/__tests__/thread-skeleton.test.d.ts.map +1 -0
  126. package/execution/__tests__/thread-skeleton.test.js +35 -0
  127. package/execution/__tests__/thread-skeleton.test.js.map +1 -0
  128. package/execution/__tests__/useExecutionStream.test.js +73 -10
  129. package/execution/__tests__/useExecutionStream.test.js.map +1 -1
  130. package/execution/__tests__/useSessionVariables-stability.test.d.ts +2 -0
  131. package/execution/__tests__/useSessionVariables-stability.test.d.ts.map +1 -0
  132. package/execution/__tests__/useSessionVariables-stability.test.js +69 -0
  133. package/execution/__tests__/useSessionVariables-stability.test.js.map +1 -0
  134. package/execution/__tests__/virtualized-thread.test.d.ts +2 -0
  135. package/execution/__tests__/virtualized-thread.test.d.ts.map +1 -0
  136. package/execution/__tests__/virtualized-thread.test.js +274 -0
  137. package/execution/__tests__/virtualized-thread.test.js.map +1 -0
  138. package/execution/index.d.ts +2 -0
  139. package/execution/index.d.ts.map +1 -1
  140. package/execution/index.js +1 -0
  141. package/execution/index.js.map +1 -1
  142. package/execution/useExecutionStream.d.ts +35 -10
  143. package/execution/useExecutionStream.d.ts.map +1 -1
  144. package/execution/useExecutionStream.js +79 -40
  145. package/execution/useExecutionStream.js.map +1 -1
  146. package/execution/useSessionVariables.d.ts.map +1 -1
  147. package/execution/useSessionVariables.js +4 -3
  148. package/execution/useSessionVariables.js.map +1 -1
  149. package/github/useGitHubConnection.d.ts.map +1 -1
  150. package/github/useGitHubConnection.js +5 -4
  151. package/github/useGitHubConnection.js.map +1 -1
  152. package/identity-account/index.d.ts +2 -0
  153. package/identity-account/index.d.ts.map +1 -0
  154. package/identity-account/index.js +2 -0
  155. package/identity-account/index.js.map +1 -0
  156. package/identity-account/useIdentityAccountGate.d.ts +81 -0
  157. package/identity-account/useIdentityAccountGate.d.ts.map +1 -0
  158. package/identity-account/useIdentityAccountGate.js +100 -0
  159. package/identity-account/useIdentityAccountGate.js.map +1 -0
  160. package/index.d.ts +10 -4
  161. package/index.d.ts.map +1 -1
  162. package/index.js +8 -2
  163. package/index.js.map +1 -1
  164. package/internal/FetchCacheProvider.d.ts +44 -0
  165. package/internal/FetchCacheProvider.d.ts.map +1 -0
  166. package/internal/FetchCacheProvider.js +61 -0
  167. package/internal/FetchCacheProvider.js.map +1 -0
  168. package/internal/JumpToLatestButton.d.ts +14 -0
  169. package/internal/JumpToLatestButton.d.ts.map +1 -0
  170. package/internal/JumpToLatestButton.js +19 -0
  171. package/internal/JumpToLatestButton.js.map +1 -0
  172. package/internal/ThreadItemWrapper.d.ts +20 -0
  173. package/internal/ThreadItemWrapper.d.ts.map +1 -0
  174. package/internal/ThreadItemWrapper.js +44 -0
  175. package/internal/ThreadItemWrapper.js.map +1 -0
  176. package/internal/VirtualizedThread.d.ts +25 -0
  177. package/internal/VirtualizedThread.d.ts.map +1 -0
  178. package/internal/VirtualizedThread.js +58 -0
  179. package/internal/VirtualizedThread.js.map +1 -0
  180. package/internal/__tests__/fetch-cache.test.d.ts +2 -0
  181. package/internal/__tests__/fetch-cache.test.d.ts.map +1 -0
  182. package/internal/__tests__/fetch-cache.test.js +182 -0
  183. package/internal/__tests__/fetch-cache.test.js.map +1 -0
  184. package/internal/__tests__/stream-controller.test.d.ts +2 -0
  185. package/internal/__tests__/stream-controller.test.d.ts.map +1 -0
  186. package/internal/__tests__/stream-controller.test.js +294 -0
  187. package/internal/__tests__/stream-controller.test.js.map +1 -0
  188. package/internal/__tests__/thread-animation.test.d.ts +2 -0
  189. package/internal/__tests__/thread-animation.test.d.ts.map +1 -0
  190. package/internal/__tests__/thread-animation.test.js +79 -0
  191. package/internal/__tests__/thread-animation.test.js.map +1 -0
  192. package/internal/__tests__/useAutoScroll.test.d.ts +2 -0
  193. package/internal/__tests__/useAutoScroll.test.d.ts.map +1 -0
  194. package/internal/__tests__/useAutoScroll.test.js +188 -0
  195. package/internal/__tests__/useAutoScroll.test.js.map +1 -0
  196. package/internal/__tests__/useFetch-cache.test.d.ts +2 -0
  197. package/internal/__tests__/useFetch-cache.test.d.ts.map +1 -0
  198. package/internal/__tests__/useFetch-cache.test.js +137 -0
  199. package/internal/__tests__/useFetch-cache.test.js.map +1 -0
  200. package/internal/dev/__tests__/use-key-stability.test.d.ts +2 -0
  201. package/internal/dev/__tests__/use-key-stability.test.d.ts.map +1 -0
  202. package/internal/dev/__tests__/use-key-stability.test.js +72 -0
  203. package/internal/dev/__tests__/use-key-stability.test.js.map +1 -0
  204. package/internal/dev/__tests__/use-render-tracer.test.d.ts +2 -0
  205. package/internal/dev/__tests__/use-render-tracer.test.d.ts.map +1 -0
  206. package/internal/dev/__tests__/use-render-tracer.test.js +55 -0
  207. package/internal/dev/__tests__/use-render-tracer.test.js.map +1 -0
  208. package/internal/dev/dom-counter.d.ts +14 -0
  209. package/internal/dev/dom-counter.d.ts.map +1 -0
  210. package/internal/dev/dom-counter.js +39 -0
  211. package/internal/dev/dom-counter.js.map +1 -0
  212. package/internal/dev/index.d.ts +6 -0
  213. package/internal/dev/index.d.ts.map +1 -0
  214. package/internal/dev/index.js +6 -0
  215. package/internal/dev/index.js.map +1 -0
  216. package/internal/dev/profiler-wrapper.d.ts +16 -0
  217. package/internal/dev/profiler-wrapper.d.ts.map +1 -0
  218. package/internal/dev/profiler-wrapper.js +31 -0
  219. package/internal/dev/profiler-wrapper.js.map +1 -0
  220. package/internal/dev/use-key-stability.d.ts +22 -0
  221. package/internal/dev/use-key-stability.d.ts.map +1 -0
  222. package/internal/dev/use-key-stability.js +67 -0
  223. package/internal/dev/use-key-stability.js.map +1 -0
  224. package/internal/dev/use-render-tracer.d.ts +13 -0
  225. package/internal/dev/use-render-tracer.d.ts.map +1 -0
  226. package/internal/dev/use-render-tracer.js +57 -0
  227. package/internal/dev/use-render-tracer.js.map +1 -0
  228. package/internal/dev/use-stream-rate.d.ts +23 -0
  229. package/internal/dev/use-stream-rate.d.ts.map +1 -0
  230. package/internal/dev/use-stream-rate.js +94 -0
  231. package/internal/dev/use-stream-rate.js.map +1 -0
  232. package/internal/fetch-cache.d.ts +72 -0
  233. package/internal/fetch-cache.d.ts.map +1 -0
  234. package/internal/fetch-cache.js +118 -0
  235. package/internal/fetch-cache.js.map +1 -0
  236. package/internal/store/__tests__/conversation-store.test.d.ts +2 -0
  237. package/internal/store/__tests__/conversation-store.test.d.ts.map +1 -0
  238. package/internal/store/__tests__/conversation-store.test.js +200 -0
  239. package/internal/store/__tests__/conversation-store.test.js.map +1 -0
  240. package/internal/store/__tests__/structural-share.test.d.ts +2 -0
  241. package/internal/store/__tests__/structural-share.test.d.ts.map +1 -0
  242. package/internal/store/__tests__/structural-share.test.js +368 -0
  243. package/internal/store/__tests__/structural-share.test.js.map +1 -0
  244. package/internal/store/conversation-store.d.ts +62 -0
  245. package/internal/store/conversation-store.d.ts.map +1 -0
  246. package/internal/store/conversation-store.js +95 -0
  247. package/internal/store/conversation-store.js.map +1 -0
  248. package/internal/store/index.d.ts +31 -0
  249. package/internal/store/index.d.ts.map +1 -0
  250. package/internal/store/index.js +54 -0
  251. package/internal/store/index.js.map +1 -0
  252. package/internal/store/structural-share.d.ts +13 -0
  253. package/internal/store/structural-share.d.ts.map +1 -0
  254. package/internal/store/structural-share.js +240 -0
  255. package/internal/store/structural-share.js.map +1 -0
  256. package/internal/stream-controller.d.ts +85 -0
  257. package/internal/stream-controller.d.ts.map +1 -0
  258. package/internal/stream-controller.js +146 -0
  259. package/internal/stream-controller.js.map +1 -0
  260. package/internal/useAutoScroll.d.ts +32 -0
  261. package/internal/useAutoScroll.d.ts.map +1 -0
  262. package/internal/useAutoScroll.js +97 -0
  263. package/internal/useAutoScroll.js.map +1 -0
  264. package/internal/useFetch.d.ts +14 -0
  265. package/internal/useFetch.d.ts.map +1 -1
  266. package/internal/useFetch.js +32 -2
  267. package/internal/useFetch.js.map +1 -1
  268. package/package.json +7 -5
  269. package/session/__tests__/useNewSessionFlow.test.js +16 -0
  270. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  271. package/session/__tests__/usePersistedModel.test.d.ts +2 -0
  272. package/session/__tests__/usePersistedModel.test.d.ts.map +1 -0
  273. package/session/__tests__/usePersistedModel.test.js +82 -0
  274. package/session/__tests__/usePersistedModel.test.js.map +1 -0
  275. package/session/__tests__/useSession.test.d.ts +2 -0
  276. package/session/__tests__/useSession.test.d.ts.map +1 -0
  277. package/session/__tests__/useSession.test.js +130 -0
  278. package/session/__tests__/useSession.test.js.map +1 -0
  279. package/session/useNewSessionFlow.d.ts.map +1 -1
  280. package/session/useNewSessionFlow.js +12 -6
  281. package/session/useNewSessionFlow.js.map +1 -1
  282. package/session/usePersistedModel.d.ts +3 -0
  283. package/session/usePersistedModel.d.ts.map +1 -1
  284. package/session/usePersistedModel.js +27 -2
  285. package/session/usePersistedModel.js.map +1 -1
  286. package/session/useSession.d.ts.map +1 -1
  287. package/session/useSession.js +1 -1
  288. package/session/useSession.js.map +1 -1
  289. package/session/useSessionConversation.d.ts.map +1 -1
  290. package/session/useSessionConversation.js +9 -1
  291. package/session/useSessionConversation.js.map +1 -1
  292. package/session/useSessionExecutions.d.ts.map +1 -1
  293. package/session/useSessionExecutions.js +1 -1
  294. package/session/useSessionExecutions.js.map +1 -1
  295. package/session/useSessionPageFlow.js +1 -1
  296. package/session/useSessionPageFlow.js.map +1 -1
  297. package/session/useSessionUsage.d.ts +24 -40
  298. package/session/useSessionUsage.d.ts.map +1 -1
  299. package/session/useSessionUsage.js +64 -97
  300. package/session/useSessionUsage.js.map +1 -1
  301. package/settings/BillingSection.d.ts +3 -0
  302. package/settings/BillingSection.d.ts.map +1 -0
  303. package/settings/BillingSection.js +3 -0
  304. package/settings/BillingSection.js.map +1 -0
  305. package/settings/index.d.ts +2 -0
  306. package/settings/index.d.ts.map +1 -1
  307. package/settings/index.js +1 -0
  308. package/settings/index.js.map +1 -1
  309. package/settings/settings-nav.js +1 -1
  310. package/settings/settings-nav.js.map +1 -1
  311. package/src/billing/AutoRechargeCard.tsx +274 -0
  312. package/src/billing/BillingSection.tsx +255 -0
  313. package/src/billing/CreditBalanceCard.tsx +81 -0
  314. package/src/billing/CreditLedgerTable.tsx +281 -0
  315. package/src/billing/CreditPackGrid.tsx +132 -0
  316. package/src/billing/LowBalanceBanner.tsx +67 -0
  317. package/src/billing/PaymentMethodCard.tsx +133 -0
  318. package/src/billing/credit-packs.ts +54 -0
  319. package/src/billing/format.ts +97 -0
  320. package/src/billing/index.ts +51 -0
  321. package/src/billing/useBillingAccount.ts +64 -0
  322. package/src/billing/useBillingUsageReport.ts +73 -0
  323. package/src/billing/useCreateBillingPortalSession.ts +76 -0
  324. package/src/billing/useCreateCheckoutSession.ts +101 -0
  325. package/src/billing/useCreditLedger.ts +79 -0
  326. package/src/billing/useCustomerModelPricing.ts +67 -0
  327. package/src/billing/useSetAutoRechargeConfig.ts +90 -0
  328. package/src/composer/ComposerToolbar.tsx +1 -1
  329. package/src/composer/SessionComposer.tsx +22 -4
  330. package/src/composer/__tests__/SessionComposer-memo.test.ts +26 -0
  331. package/src/execution/ApprovalCard.tsx +7 -3
  332. package/src/execution/ExecutionPhaseBadge.tsx +3 -2
  333. package/src/execution/MessageEntry.tsx +27 -16
  334. package/src/execution/MessageThread.tsx +308 -131
  335. package/src/execution/SetupProgress.tsx +3 -3
  336. package/src/execution/SubAgentSection.tsx +14 -6
  337. package/src/execution/ThreadSkeleton.tsx +73 -0
  338. package/src/execution/ToolCallGroup.tsx +36 -3
  339. package/src/execution/UsageWidget.tsx +1 -1
  340. package/src/execution/__tests__/message-entry.test.tsx +236 -0
  341. package/src/execution/__tests__/thread-keys.test.ts +409 -0
  342. package/src/execution/__tests__/thread-memoization.test.ts +320 -0
  343. package/src/execution/__tests__/thread-skeleton.test.tsx +44 -0
  344. package/src/execution/__tests__/useExecutionStream.test.tsx +109 -12
  345. package/src/execution/__tests__/useSessionVariables-stability.test.ts +95 -0
  346. package/src/execution/__tests__/virtualized-thread.test.tsx +401 -0
  347. package/src/execution/index.ts +3 -0
  348. package/src/execution/useExecutionStream.ts +123 -48
  349. package/src/execution/useSessionVariables.ts +17 -12
  350. package/src/github/useGitHubConnection.ts +18 -13
  351. package/src/identity-account/index.ts +5 -0
  352. package/src/identity-account/useIdentityAccountGate.ts +163 -0
  353. package/src/index.ts +73 -0
  354. package/src/internal/FetchCacheProvider.tsx +74 -0
  355. package/src/internal/JumpToLatestButton.tsx +61 -0
  356. package/src/internal/ThreadItemWrapper.tsx +65 -0
  357. package/src/internal/VirtualizedThread.tsx +162 -0
  358. package/src/internal/__tests__/fetch-cache.test.ts +230 -0
  359. package/src/internal/__tests__/stream-controller.test.ts +395 -0
  360. package/src/internal/__tests__/thread-animation.test.tsx +121 -0
  361. package/src/internal/__tests__/useAutoScroll.test.tsx +261 -0
  362. package/src/internal/__tests__/useFetch-cache.test.ts +214 -0
  363. package/src/internal/dev/__tests__/use-key-stability.test.ts +124 -0
  364. package/src/internal/dev/__tests__/use-render-tracer.test.ts +78 -0
  365. package/src/internal/dev/dom-counter.ts +47 -0
  366. package/src/internal/dev/index.ts +5 -0
  367. package/src/internal/dev/profiler-wrapper.tsx +52 -0
  368. package/src/internal/dev/use-key-stability.ts +86 -0
  369. package/src/internal/dev/use-render-tracer.ts +70 -0
  370. package/src/internal/dev/use-stream-rate.ts +138 -0
  371. package/src/internal/fetch-cache.ts +155 -0
  372. package/src/internal/store/__tests__/conversation-store.test.ts +257 -0
  373. package/src/internal/store/__tests__/structural-share.test.ts +454 -0
  374. package/src/internal/store/conversation-store.ts +128 -0
  375. package/src/internal/store/index.ts +68 -0
  376. package/src/internal/store/structural-share.ts +318 -0
  377. package/src/internal/stream-controller.ts +201 -0
  378. package/src/internal/useAutoScroll.ts +121 -0
  379. package/src/internal/useFetch.ts +51 -2
  380. package/src/session/__tests__/useNewSessionFlow.test.tsx +22 -0
  381. package/src/session/__tests__/usePersistedModel.test.tsx +117 -0
  382. package/src/session/__tests__/useSession.test.tsx +187 -0
  383. package/src/session/useNewSessionFlow.ts +12 -6
  384. package/src/session/usePersistedModel.ts +28 -2
  385. package/src/session/useSession.ts +1 -0
  386. package/src/session/useSessionConversation.ts +11 -2
  387. package/src/session/useSessionExecutions.ts +1 -0
  388. package/src/session/useSessionPageFlow.ts +1 -1
  389. package/src/session/useSessionUsage.ts +102 -123
  390. package/src/settings/BillingSection.tsx +4 -0
  391. package/src/settings/index.ts +2 -0
  392. package/src/settings/settings-nav.ts +1 -1
  393. package/src/styles.css +31 -0
  394. package/src/usage/AgentBreakdownList.tsx +147 -0
  395. package/src/usage/CreditRunwayIndicator.tsx +71 -0
  396. package/src/usage/ExportButton.tsx +115 -0
  397. package/src/usage/HarnessSplitCard.tsx +103 -0
  398. package/src/usage/OrgUsagePanel.tsx +109 -45
  399. package/src/usage/index.ts +15 -0
  400. package/src/usage/useExportCSV.ts +115 -0
  401. package/src/usage/useOrgUsageReport.ts +2 -1
  402. package/src/workspace/__tests__/useWorkspaceEntries-stability.test.ts +76 -0
  403. package/src/workspace/useWorkspaceEntries.ts +16 -11
  404. package/styles.css +1 -1
  405. package/usage/AgentBreakdownList.d.ts +21 -0
  406. package/usage/AgentBreakdownList.d.ts.map +1 -0
  407. package/usage/AgentBreakdownList.js +44 -0
  408. package/usage/AgentBreakdownList.js.map +1 -0
  409. package/usage/CreditRunwayIndicator.d.ts +21 -0
  410. package/usage/CreditRunwayIndicator.d.ts.map +1 -0
  411. package/usage/CreditRunwayIndicator.js +38 -0
  412. package/usage/CreditRunwayIndicator.js.map +1 -0
  413. package/usage/ExportButton.d.ts +20 -0
  414. package/usage/ExportButton.d.ts.map +1 -0
  415. package/usage/ExportButton.js +36 -0
  416. package/usage/ExportButton.js.map +1 -0
  417. package/usage/HarnessSplitCard.d.ts +17 -0
  418. package/usage/HarnessSplitCard.d.ts.map +1 -0
  419. package/usage/HarnessSplitCard.js +38 -0
  420. package/usage/HarnessSplitCard.js.map +1 -0
  421. package/usage/OrgUsagePanel.d.ts.map +1 -1
  422. package/usage/OrgUsagePanel.js +30 -22
  423. package/usage/OrgUsagePanel.js.map +1 -1
  424. package/usage/index.d.ts +10 -0
  425. package/usage/index.d.ts.map +1 -1
  426. package/usage/index.js +5 -0
  427. package/usage/index.js.map +1 -1
  428. package/usage/useExportCSV.d.ts +23 -0
  429. package/usage/useExportCSV.d.ts.map +1 -0
  430. package/usage/useExportCSV.js +81 -0
  431. package/usage/useExportCSV.js.map +1 -0
  432. package/usage/useOrgUsageReport.d.ts +2 -1
  433. package/usage/useOrgUsageReport.d.ts.map +1 -1
  434. package/usage/useOrgUsageReport.js +2 -1
  435. package/usage/useOrgUsageReport.js.map +1 -1
  436. package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts +2 -0
  437. package/workspace/__tests__/useWorkspaceEntries-stability.test.d.ts.map +1 -0
  438. package/workspace/__tests__/useWorkspaceEntries-stability.test.js +57 -0
  439. package/workspace/__tests__/useWorkspaceEntries-stability.test.js.map +1 -0
  440. package/workspace/useWorkspaceEntries.d.ts.map +1 -1
  441. package/workspace/useWorkspaceEntries.js +5 -4
  442. package/workspace/useWorkspaceEntries.js.map +1 -1
@@ -0,0 +1,38 @@
1
+ import type { AutoRechargeConfig } from "@stigmer/protos/ai/stigmer/billing/v1/billing_account_pb";
2
+ import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
3
+ /** Props for {@link AutoRechargeCard}. */
4
+ export interface AutoRechargeCardProps {
5
+ /** Organization ID. */
6
+ readonly orgId: string;
7
+ /** Current auto-recharge configuration from the billing account. */
8
+ readonly autoRecharge?: AutoRechargeConfig;
9
+ /** Whether the account has a saved payment method. */
10
+ readonly hasPaymentMethod: boolean;
11
+ /** Account status — config disabled when suspended or closed. */
12
+ readonly accountStatus: BillingAccountStatus;
13
+ /** Called after a successful save so the parent can refresh account data. */
14
+ readonly onSaved?: () => void;
15
+ /** Additional CSS class names. */
16
+ readonly className?: string;
17
+ }
18
+ /**
19
+ * Auto-recharge configuration card for the billing settings page.
20
+ *
21
+ * Shows a toggle to enable/disable auto-recharge, with input fields
22
+ * for threshold, recharge amount, and monthly cap. Displays a
23
+ * disabled state with an explanatory message when no payment method
24
+ * is on file. Validates inputs client-side before submitting.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * <AutoRechargeCard
29
+ * orgId={orgId}
30
+ * autoRecharge={account.autoRecharge}
31
+ * hasPaymentMethod={!!account.defaultPaymentMethod?.paymentMethodId}
32
+ * accountStatus={account.status}
33
+ * onSaved={refetch}
34
+ * />
35
+ * ```
36
+ */
37
+ export declare function AutoRechargeCard({ orgId, autoRecharge, hasPaymentMethod, accountStatus, onSaved, className, }: AutoRechargeCardProps): import("react/jsx-runtime").JSX.Element;
38
+ //# sourceMappingURL=AutoRechargeCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoRechargeCard.d.ts","sourceRoot":"","sources":["../../src/billing/AutoRechargeCard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAIrF,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAC3C,sDAAsD;IACtD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAgBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,SAAS,GACV,EAAE,qBAAqB,2CA+JvB"}
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback, useEffect } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
6
+ import { getUserMessage } from "@stigmer/sdk";
7
+ import { useSetAutoRechargeConfig } from "./useSetAutoRechargeConfig";
8
+ const MICROS_PER_DOLLAR = BigInt(1_000_000);
9
+ function microsToDollars(micros) {
10
+ if (micros === BigInt(0))
11
+ return "";
12
+ const dollars = Number(micros) / 1_000_000;
13
+ return dollars.toString();
14
+ }
15
+ function dollarsToMicros(value) {
16
+ const num = parseFloat(value);
17
+ if (isNaN(num) || num < 0)
18
+ return BigInt(0);
19
+ return BigInt(Math.round(num * 1_000_000));
20
+ }
21
+ /**
22
+ * Auto-recharge configuration card for the billing settings page.
23
+ *
24
+ * Shows a toggle to enable/disable auto-recharge, with input fields
25
+ * for threshold, recharge amount, and monthly cap. Displays a
26
+ * disabled state with an explanatory message when no payment method
27
+ * is on file. Validates inputs client-side before submitting.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <AutoRechargeCard
32
+ * orgId={orgId}
33
+ * autoRecharge={account.autoRecharge}
34
+ * hasPaymentMethod={!!account.defaultPaymentMethod?.paymentMethodId}
35
+ * accountStatus={account.status}
36
+ * onSaved={refetch}
37
+ * />
38
+ * ```
39
+ */
40
+ export function AutoRechargeCard({ orgId, autoRecharge, hasPaymentMethod, accountStatus, onSaved, className, }) {
41
+ const { setConfig, isSubmitting, error, clearError } = useSetAutoRechargeConfig();
42
+ const [enabled, setEnabled] = useState(autoRecharge?.enabled ?? false);
43
+ const [threshold, setThreshold] = useState(microsToDollars(autoRecharge?.thresholdMicros ?? BigInt(0)));
44
+ const [amount, setAmount] = useState(microsToDollars(autoRecharge?.rechargeAmountMicros ?? BigInt(0)));
45
+ const [cap, setCap] = useState(microsToDollars(autoRecharge?.monthlyCapMicros ?? BigInt(0)));
46
+ const [saved, setSaved] = useState(false);
47
+ useEffect(() => {
48
+ if (!autoRecharge)
49
+ return;
50
+ setEnabled(autoRecharge.enabled);
51
+ setThreshold(microsToDollars(autoRecharge.thresholdMicros));
52
+ setAmount(microsToDollars(autoRecharge.rechargeAmountMicros));
53
+ setCap(microsToDollars(autoRecharge.monthlyCapMicros));
54
+ }, [autoRecharge]);
55
+ const isAccountActive = accountStatus === BillingAccountStatus.billing_account_active;
56
+ const canConfigure = hasPaymentMethod && isAccountActive;
57
+ const hasChanges = enabled !== (autoRecharge?.enabled ?? false) ||
58
+ dollarsToMicros(threshold) !==
59
+ (autoRecharge?.thresholdMicros ?? BigInt(0)) ||
60
+ dollarsToMicros(amount) !==
61
+ (autoRecharge?.rechargeAmountMicros ?? BigInt(0)) ||
62
+ dollarsToMicros(cap) !== (autoRecharge?.monthlyCapMicros ?? BigInt(0));
63
+ const handleSave = useCallback(async () => {
64
+ clearError();
65
+ setSaved(false);
66
+ try {
67
+ await setConfig({
68
+ orgId,
69
+ enabled,
70
+ thresholdMicros: dollarsToMicros(threshold),
71
+ rechargeAmountMicros: dollarsToMicros(amount),
72
+ monthlyCapMicros: dollarsToMicros(cap),
73
+ });
74
+ setSaved(true);
75
+ onSaved?.();
76
+ setTimeout(() => setSaved(false), 3000);
77
+ }
78
+ catch {
79
+ // error state is managed by the hook
80
+ }
81
+ }, [orgId, enabled, threshold, amount, cap, setConfig, clearError, onSaved]);
82
+ return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card px-4 py-4", className), children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-xs font-semibold text-foreground", children: "Auto-Recharge" }), _jsx("p", { className: "mt-0.5 text-[0.7rem] text-muted-foreground", children: "Automatically add credits when your balance runs low." })] }), _jsx("button", { type: "button", role: "switch", "aria-checked": enabled, disabled: !canConfigure || isSubmitting, onClick: () => setEnabled((prev) => !prev), className: cn("relative inline-flex h-5 w-9 shrink-0 rounded-full transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", "disabled:cursor-not-allowed disabled:opacity-50", enabled ? "bg-primary" : "bg-muted"), children: _jsx("span", { className: cn("pointer-events-none block size-4 rounded-full bg-background shadow-sm ring-0 transition-transform", enabled ? "translate-x-4" : "translate-x-0.5", "mt-0.5") }) })] }), !hasPaymentMethod && (_jsx("p", { className: "mt-3 text-xs text-muted-foreground", children: "A saved payment method is required to enable auto-recharge. Purchase a credit pack first to save a card." })), canConfigure && (_jsxs("div", { className: "mt-4 space-y-3", children: [_jsx(DollarInput, { id: "ar-threshold", label: "When balance drops below", value: threshold, onChange: setThreshold, disabled: isSubmitting, placeholder: "e.g. 5" }), _jsx(DollarInput, { id: "ar-amount", label: "Recharge amount", value: amount, onChange: setAmount, disabled: isSubmitting, placeholder: "e.g. 50" }), _jsx(DollarInput, { id: "ar-cap", label: "Monthly cap", value: cap, onChange: setCap, disabled: isSubmitting, placeholder: "e.g. 200" }), _jsxs("div", { className: "flex items-center gap-3 pt-1", children: [_jsx("button", { type: "button", disabled: !hasChanges || isSubmitting, onClick: handleSave, className: cn("rounded-md px-3 py-1.5 text-xs font-medium transition-colors", "bg-primary text-primary-foreground hover:bg-primary/90", "disabled:pointer-events-none disabled:opacity-50"), "aria-busy": isSubmitting, children: isSubmitting ? "Saving\u2026" : "Save" }), saved && (_jsx("span", { className: "text-xs text-emerald-600 dark:text-emerald-400", children: "Saved" }))] }), error && (_jsx("p", { className: "text-xs text-destructive", role: "alert", children: getUserMessage(error) }))] }))] }));
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // DollarInput (internal)
86
+ // ---------------------------------------------------------------------------
87
+ function DollarInput({ id, label, value, onChange, disabled, placeholder, }) {
88
+ return (_jsxs("div", { children: [_jsx("label", { htmlFor: id, className: "block text-xs text-muted-foreground", children: label }), _jsxs("div", { className: "relative mt-1", children: [_jsx("span", { className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-xs text-muted-foreground", children: "$" }), _jsx("input", { id: id, type: "number", min: "0", step: "any", value: value, onChange: (e) => onChange(e.target.value), disabled: disabled, placeholder: placeholder, className: cn("w-full rounded-md border border-input bg-background py-1.5 pl-6 pr-3 text-xs tabular-nums", "text-foreground placeholder:text-muted-foreground/60", "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", "disabled:cursor-not-allowed disabled:opacity-50") })] })] }));
89
+ }
90
+ //# sourceMappingURL=AutoRechargeCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoRechargeCard.js","sourceRoot":"","sources":["../../src/billing/AutoRechargeCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /** Props for {@link BillingSection}. */
2
+ export interface BillingSectionProps {
3
+ /**
4
+ * Whether a checkout just completed (e.g., `?checkout=success`).
5
+ *
6
+ * When `true`, an optimistic banner is shown indicating that
7
+ * credits will appear shortly. This prop is typically driven
8
+ * by the host application's URL query parameters.
9
+ */
10
+ readonly checkoutSuccess?: boolean;
11
+ /** Callback to dismiss the checkout success banner. */
12
+ readonly onDismissCheckoutSuccess?: () => void;
13
+ /** Additional CSS class names. */
14
+ readonly className?: string;
15
+ }
16
+ /**
17
+ * Top-level billing settings section.
18
+ *
19
+ * Composes the billing sub-components into a cohesive settings page:
20
+ * low-balance warning, checkout success banner, credit balance display,
21
+ * credit pack purchase grid, and transaction history. Handles the
22
+ * deployment mode gate (billing unavailable in local mode) and the
23
+ * org-not-selected state.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * // In a settings page:
28
+ * <BillingSection checkoutSuccess={searchParams.checkout === "success"} />
29
+ * ```
30
+ */
31
+ export declare function BillingSection({ checkoutSuccess, onDismissCheckoutSuccess, className, }: BillingSectionProps): import("react/jsx-runtime").JSX.Element;
32
+ //# sourceMappingURL=BillingSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillingSection.d.ts","sourceRoot":"","sources":["../../src/billing/BillingSection.tsx"],"names":[],"mappings":"AAmBA,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,uDAAuD;IACvD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/C,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,EAC7B,eAAe,EACf,wBAAwB,EACxB,SAAS,GACV,EAAE,mBAAmB,2CAmCrB"}
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useCallback } from "react";
4
+ import { getUserMessage } from "@stigmer/sdk";
5
+ import { useDeploymentMode } from "../deployment-mode";
6
+ import { CloudFeatureNotice } from "../internal/CloudFeatureNotice";
7
+ import { useOrg } from "../organization/OrgProvider";
8
+ import { useBillingAccount } from "./useBillingAccount";
9
+ import { useCreateCheckoutSession } from "./useCreateCheckoutSession";
10
+ import { useCreateBillingPortalSession } from "./useCreateBillingPortalSession";
11
+ import { CreditBalanceCard } from "./CreditBalanceCard";
12
+ import { PaymentMethodCard } from "./PaymentMethodCard";
13
+ import { AutoRechargeCard } from "./AutoRechargeCard";
14
+ import { CreditPackGrid } from "./CreditPackGrid";
15
+ import { CreditLedgerTable } from "./CreditLedgerTable";
16
+ import { LowBalanceBanner } from "./LowBalanceBanner";
17
+ /**
18
+ * Top-level billing settings section.
19
+ *
20
+ * Composes the billing sub-components into a cohesive settings page:
21
+ * low-balance warning, checkout success banner, credit balance display,
22
+ * credit pack purchase grid, and transaction history. Handles the
23
+ * deployment mode gate (billing unavailable in local mode) and the
24
+ * org-not-selected state.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * // In a settings page:
29
+ * <BillingSection checkoutSuccess={searchParams.checkout === "success"} />
30
+ * ```
31
+ */
32
+ export function BillingSection({ checkoutSuccess, onDismissCheckoutSuccess, className, }) {
33
+ const { activeOrg } = useOrg();
34
+ const mode = useDeploymentMode();
35
+ const orgId = activeOrg?.metadata?.id ?? "";
36
+ return (_jsxs("section", { "aria-labelledby": "billing-heading", className: className, children: [_jsx("h2", { id: "billing-heading", className: "text-foreground mb-1 text-sm font-semibold", children: "Billing" }), _jsx("p", { className: "text-muted-foreground mb-4 text-xs", children: "Manage credits, purchase credit packs, and view transaction history." }), mode === "local" ? (_jsx(CloudFeatureNotice, { children: "Billing is available on Stigmer Cloud. Connect to a Cloud organization to manage credits and purchase credit packs." })) : !orgId ? (_jsx("p", { className: "text-muted-foreground py-4 text-center text-xs", children: "Select an organization to view billing." })) : (_jsx(BillingContent, { orgId: orgId, checkoutSuccess: checkoutSuccess, onDismissCheckoutSuccess: onDismissCheckoutSuccess }))] }));
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // BillingContent (internal)
40
+ // ---------------------------------------------------------------------------
41
+ function BillingContent({ orgId, checkoutSuccess, onDismissCheckoutSuccess, }) {
42
+ const { account, isLoading, error, refetch } = useBillingAccount(orgId);
43
+ const { createSession, isSubmitting, error: checkoutError, clearError } = useCreateCheckoutSession();
44
+ const { openPortal, isLoading: isPortalLoading } = useCreateBillingPortalSession();
45
+ const [purchasingPackId, setPurchasingPackId] = useState(null);
46
+ const handlePurchase = useCallback((packId) => {
47
+ setPurchasingPackId(packId);
48
+ clearError();
49
+ const baseUrl = typeof window !== "undefined" ? window.location.origin : "";
50
+ const billingPath = `${baseUrl}/settings/billing`;
51
+ createSession({
52
+ orgId,
53
+ packId,
54
+ successUrl: `${billingPath}?checkout=success`,
55
+ cancelUrl: billingPath,
56
+ }).catch(() => {
57
+ setPurchasingPackId(null);
58
+ });
59
+ }, [orgId, createSession, clearError]);
60
+ if (isLoading) {
61
+ return (_jsxs("div", { className: "space-y-4", "aria-busy": "true", "aria-label": "Loading billing", children: [_jsx("div", { className: "h-24 animate-pulse rounded-lg bg-muted-subtle" }), _jsx("div", { className: "grid grid-cols-3 gap-3", children: Array.from({ length: 3 }, (_, i) => (_jsx("div", { className: "h-36 animate-pulse rounded-lg bg-muted-subtle" }, i))) }), _jsx("div", { className: "h-48 animate-pulse rounded-lg bg-muted-subtle" })] }));
62
+ }
63
+ if (error) {
64
+ return (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(error) }));
65
+ }
66
+ if (!account)
67
+ return null;
68
+ const balance = account.balance;
69
+ if (!balance)
70
+ return null;
71
+ const isLowBalance = balance.availableMicros < account.lowBalanceThresholdMicros;
72
+ return (_jsxs("div", { className: "space-y-6", children: [checkoutSuccess && (_jsx(CheckoutSuccessBanner, { onDismiss: onDismissCheckoutSuccess })), _jsx(LowBalanceBanner, { availableMicros: balance.availableMicros, thresholdMicros: account.lowBalanceThresholdMicros }), _jsx(CreditBalanceCard, { balance: balance, isLowBalance: isLowBalance }), _jsx(PaymentMethodCard, { paymentMethod: account.defaultPaymentMethod, accountStatus: account.status, isPortalLoading: isPortalLoading, onManage: () => openPortal(orgId) }), _jsx(AutoRechargeCard, { orgId: orgId, autoRecharge: account.autoRecharge, hasPaymentMethod: account.defaultPaymentMethod != null &&
73
+ account.defaultPaymentMethod.paymentMethodId !== "", accountStatus: account.status, onSaved: refetch }), _jsx(CreditPackGrid, { accountStatus: account.status, purchasingPackId: isSubmitting ? purchasingPackId : null, onPurchase: handlePurchase }), checkoutError && (_jsx("p", { className: "text-destructive text-xs", role: "alert", children: getUserMessage(checkoutError) })), _jsx(CreditLedgerTable, { orgId: orgId })] }));
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // CheckoutSuccessBanner (internal)
77
+ // ---------------------------------------------------------------------------
78
+ function CheckoutSuccessBanner({ onDismiss, }) {
79
+ return (_jsxs("div", { role: "status", className: "flex items-center justify-between gap-3 rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3.5 py-3 text-xs text-emerald-700 dark:text-emerald-300", children: [_jsxs("p", { children: [_jsx("span", { className: "font-medium", children: "Payment received" }), " \u2014 ", "credits will appear in your balance shortly."] }), onDismiss && (_jsx("button", { type: "button", onClick: onDismiss, className: "shrink-0 rounded p-0.5 transition-colors hover:bg-emerald-500/10", "aria-label": "Dismiss", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M18 6 6 18" }), _jsx("path", { d: "m6 6 12 12" })] }) }))] }));
80
+ }
81
+ //# sourceMappingURL=BillingSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillingSection.js","sourceRoot":"","sources":["../../src/billing/BillingSection.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { CreditBalance } from "@stigmer/protos/ai/stigmer/billing/v1/billing_account_pb";
2
+ /** Props for {@link CreditBalanceCard}. */
3
+ export interface CreditBalanceCardProps {
4
+ /** The credit balance breakdown from the billing account. */
5
+ readonly balance: CreditBalance;
6
+ /** Whether the balance is below the low-balance threshold. */
7
+ readonly isLowBalance?: boolean;
8
+ /** Additional CSS class names. */
9
+ readonly className?: string;
10
+ }
11
+ /**
12
+ * Prominent display of the organization's available credit balance.
13
+ *
14
+ * Shows the total available balance as the primary figure, with
15
+ * a secondary breakdown of promotional vs. purchased credits and
16
+ * any reserved amount. Uses semantic colors to indicate balance
17
+ * health: green for healthy, amber for low, red for zero/negative.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <CreditBalanceCard balance={account.balance} isLowBalance={isLow} />
22
+ * ```
23
+ */
24
+ export declare function CreditBalanceCard({ balance, isLowBalance, className, }: CreditBalanceCardProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=CreditBalanceCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditBalanceCard.d.ts","sourceRoot":"","sources":["../../src/billing/CreditBalanceCard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0DAA0D,CAAC;AAG9F,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,YAAY,EACZ,SAAS,GACV,EAAE,sBAAsB,2CA+CxB"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "@stigmer/theme";
4
+ import { formatCreditBalance } from "./format";
5
+ /**
6
+ * Prominent display of the organization's available credit balance.
7
+ *
8
+ * Shows the total available balance as the primary figure, with
9
+ * a secondary breakdown of promotional vs. purchased credits and
10
+ * any reserved amount. Uses semantic colors to indicate balance
11
+ * health: green for healthy, amber for low, red for zero/negative.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <CreditBalanceCard balance={account.balance} isLowBalance={isLow} />
16
+ * ```
17
+ */
18
+ export function CreditBalanceCard({ balance, isLowBalance, className, }) {
19
+ const available = balance.availableMicros;
20
+ const zero = BigInt(0);
21
+ const isZeroOrNegative = available <= zero;
22
+ return (_jsxs("div", { className: cn("rounded-lg border border-border bg-card px-4 py-4", className), children: [_jsx("div", { className: "text-xs font-medium text-muted-foreground", children: "Available Credits" }), _jsx("div", { className: cn("mt-1 text-2xl font-bold tabular-nums", isZeroOrNegative
23
+ ? "text-destructive"
24
+ : isLowBalance
25
+ ? "text-warning-foreground"
26
+ : "text-foreground"), children: formatCreditBalance(available) }), _jsxs("div", { className: "mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs tabular-nums text-muted-foreground", children: [balance.purchasedMicros > zero && (_jsxs("span", { children: ["Purchased: ", formatCreditBalance(balance.purchasedMicros)] })), balance.promotionalMicros > zero && (_jsxs("span", { children: ["Promotional: ", formatCreditBalance(balance.promotionalMicros)] })), balance.reservedMicros > zero && (_jsxs("span", { children: ["Reserved: ", formatCreditBalance(balance.reservedMicros)] }))] })] }));
27
+ }
28
+ //# sourceMappingURL=CreditBalanceCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditBalanceCard.js","sourceRoot":"","sources":["../../src/billing/CreditBalanceCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAY/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,OAAO,EACP,YAAY,EACZ,SAAS,GACc;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,gBAAgB,GAAG,SAAS,IAAI,IAAI,CAAC;IAE3C,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,mDAAmD,EACnD,SAAS,CACV,aAED,cAAK,SAAS,EAAC,2CAA2C,kCAEpD,EACN,cACE,SAAS,EAAE,EAAE,CACX,sCAAsC,EACtC,gBAAgB;oBACd,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,YAAY;wBACZ,CAAC,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,iBAAiB,CACxB,YAEA,mBAAmB,CAAC,SAAS,CAAC,GAC3B,EAEN,eAAK,SAAS,EAAC,gFAAgF,aAC5F,OAAO,CAAC,eAAe,GAAG,IAAI,IAAI,CACjC,0CACc,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,IACnD,CACR,EACA,OAAO,CAAC,iBAAiB,GAAG,IAAI,IAAI,CACnC,4CACgB,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,IACvD,CACR,EACA,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,CAChC,yCACa,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,IACjD,CACR,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** Props for {@link CreditLedgerTable}. */
2
+ export interface CreditLedgerTableProps {
3
+ /** Organization ID to fetch ledger entries for. */
4
+ readonly orgId: string;
5
+ /** Additional CSS class names. */
6
+ readonly className?: string;
7
+ }
8
+ /**
9
+ * Paginated transaction history table showing credit ledger entries.
10
+ *
11
+ * Displays entries with type badges, signed amounts, and running
12
+ * balance. Supports pagination with simple prev/next controls.
13
+ * Uses semantic colors: green for credits, red for debits, gray
14
+ * for holds and releases.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <CreditLedgerTable orgId={activeOrg.metadata.id} />
19
+ * ```
20
+ */
21
+ export declare function CreditLedgerTable({ orgId, className, }: CreditLedgerTableProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=CreditLedgerTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditLedgerTable.d.ts","sourceRoot":"","sources":["../../src/billing/CreditLedgerTable.tsx"],"names":[],"mappings":"AAgBA,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,GACV,EAAE,sBAAsB,2CA8DxB"}
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage } from "@stigmer/sdk";
6
+ import { formatLedgerAmount, formatCreditBalance, formatLedgerDate, ledgerEntryLabel, isCredit, isHold, } from "./format";
7
+ import { useCreditLedger } from "./useCreditLedger";
8
+ /**
9
+ * Paginated transaction history table showing credit ledger entries.
10
+ *
11
+ * Displays entries with type badges, signed amounts, and running
12
+ * balance. Supports pagination with simple prev/next controls.
13
+ * Uses semantic colors: green for credits, red for debits, gray
14
+ * for holds and releases.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <CreditLedgerTable orgId={activeOrg.metadata.id} />
19
+ * ```
20
+ */
21
+ export function CreditLedgerTable({ orgId, className, }) {
22
+ const [pageNum, setPageNum] = useState(1);
23
+ const options = { pageNum, pageSize: 10 };
24
+ const { ledger, isLoading, error } = useCreditLedger(orgId, options);
25
+ if (isLoading) {
26
+ return (_jsxs("div", { className: cn("space-y-2", className), "aria-busy": "true", children: [_jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted-subtle" }), Array.from({ length: 5 }, (_, i) => (_jsx("div", { className: "h-10 animate-pulse rounded-lg bg-muted-subtle" }, i)))] }));
27
+ }
28
+ if (error) {
29
+ return (_jsx("p", { className: cn("text-destructive text-xs", className), role: "alert", children: getUserMessage(error) }));
30
+ }
31
+ const entries = ledger?.entries ?? [];
32
+ const totalPages = ledger?.totalPages ?? 0;
33
+ return (_jsxs("div", { className: className, children: [_jsx("h3", { className: "mb-2 text-xs font-semibold text-foreground", children: "Transaction History" }), entries.length === 0 ? (_jsx(EmptyLedger, {})) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "rounded-lg border border-border bg-card", role: "table", "aria-label": "Credit ledger", children: [_jsx(LedgerHeader, {}), entries.map((entry) => (_jsx(LedgerRow, { entry: entry }, entry.entryId)))] }), totalPages > 1 && (_jsx(Pagination, { pageNum: pageNum, totalPages: totalPages, onPageChange: setPageNum }))] }))] }));
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // LedgerHeader (internal)
37
+ // ---------------------------------------------------------------------------
38
+ function LedgerHeader() {
39
+ return (_jsxs("div", { role: "row", className: "grid grid-cols-[1fr_auto_auto] gap-x-4 border-b border-border px-3.5 py-2 text-[0.65rem] font-medium uppercase tracking-wider text-muted-foreground sm:grid-cols-[auto_1fr_auto_auto]", children: [_jsx("span", { role: "columnheader", className: "hidden sm:block", children: "Date" }), _jsx("span", { role: "columnheader", children: "Type" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Amount" }), _jsx("span", { role: "columnheader", className: "text-right", children: "Balance" })] }));
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // LedgerRow (internal)
43
+ // ---------------------------------------------------------------------------
44
+ function LedgerRow({ entry }) {
45
+ const entryType = entry.type;
46
+ const credit = isCredit(entryType);
47
+ const hold = isHold(entryType);
48
+ return (_jsxs("div", { role: "row", className: "grid grid-cols-[1fr_auto_auto] items-center gap-x-4 border-b border-border-muted px-3.5 py-2.5 last:border-b-0 sm:grid-cols-[auto_1fr_auto_auto]", children: [_jsx("span", { role: "cell", className: "hidden text-xs tabular-nums text-muted-foreground sm:block sm:w-36", children: entry.createdAt
49
+ ? formatLedgerDate(entry.createdAt.seconds)
50
+ : "\u2014" }), _jsxs("div", { role: "cell", className: "min-w-0", children: [_jsx("span", { className: cn("inline-block rounded-full px-2 py-0.5 text-[0.65rem] font-medium", credit
51
+ ? "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"
52
+ : hold
53
+ ? "bg-muted text-muted-foreground"
54
+ : "bg-destructive/10 text-destructive"), children: ledgerEntryLabel(entryType) }), entry.source?.description && (_jsx("span", { className: "ml-2 text-xs text-muted-foreground", children: entry.source.description })), entry.createdAt && (_jsx("span", { className: "mt-0.5 block text-[0.6rem] tabular-nums text-muted-foreground sm:hidden", children: formatLedgerDate(entry.createdAt.seconds) }))] }), _jsx("span", { role: "cell", className: cn("text-right text-xs font-medium tabular-nums", credit
55
+ ? "text-emerald-600 dark:text-emerald-400"
56
+ : hold
57
+ ? "text-muted-foreground"
58
+ : "text-destructive"), children: formatLedgerAmount(entry.amountMicros) }), _jsx("span", { role: "cell", className: "text-right text-xs tabular-nums text-muted-foreground", children: formatCreditBalance(entry.balanceAfterMicros) })] }));
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Pagination (internal)
62
+ // ---------------------------------------------------------------------------
63
+ function Pagination({ pageNum, totalPages, onPageChange, }) {
64
+ return (_jsxs("div", { className: "mt-3 flex items-center justify-between", role: "navigation", "aria-label": "Ledger pagination", children: [_jsx("button", { type: "button", disabled: pageNum <= 1, onClick: () => onPageChange(pageNum - 1), className: "rounded-md px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-40", children: "Previous" }), _jsxs("span", { className: "text-xs tabular-nums text-muted-foreground", children: ["Page ", pageNum, " of ", totalPages] }), _jsx("button", { type: "button", disabled: pageNum >= totalPages, onClick: () => onPageChange(pageNum + 1), className: "rounded-md px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-40", children: "Next" })] }));
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // EmptyLedger (internal)
68
+ // ---------------------------------------------------------------------------
69
+ function EmptyLedger() {
70
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center rounded-lg border border-border bg-card py-10 text-center", children: [_jsx(ReceiptIcon, { className: "text-muted-foreground mb-3 size-8" }), _jsx("p", { className: "text-sm font-medium text-foreground", children: "No transactions yet" }), _jsx("p", { className: "mt-1 max-w-xs text-xs text-muted-foreground", children: "Credit purchases and usage charges will appear here as your organization runs agent executions." })] }));
71
+ }
72
+ function ReceiptIcon({ className }) {
73
+ return (_jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: className, "aria-hidden": "true", children: [_jsx("path", { d: "M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z" }), _jsx("path", { d: "M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8" }), _jsx("path", { d: "M12 17.5v.5M12 6v.5" })] }));
74
+ }
75
+ //# sourceMappingURL=CreditLedgerTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditLedgerTable.js","sourceRoot":"","sources":["../../src/billing/CreditLedgerTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
2
+ /** Props for {@link CreditPackGrid}. */
3
+ export interface CreditPackGridProps {
4
+ /** Account status — purchases disabled when suspended or closed. */
5
+ readonly accountStatus: BillingAccountStatus;
6
+ /** ID of the pack currently being purchased (shows loading state). */
7
+ readonly purchasingPackId?: string | null;
8
+ /** Called when the user clicks a pack's buy button. */
9
+ readonly onPurchase: (packId: string) => void;
10
+ /** Additional CSS class names. */
11
+ readonly className?: string;
12
+ }
13
+ /**
14
+ * Grid of credit pack cards with purchase buttons.
15
+ *
16
+ * Displays the 3 self-serve credit packs (Starter, Growth, Team)
17
+ * in a responsive grid. Each card shows the pack name, price,
18
+ * credit count, and a buy button. Buttons are disabled when the
19
+ * account is suspended/closed or a purchase is in progress.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <CreditPackGrid
24
+ * accountStatus={account.status}
25
+ * purchasingPackId={isSubmitting ? activePackId : null}
26
+ * onPurchase={(packId) => createSession({ orgId, packId, ... })}
27
+ * />
28
+ * ```
29
+ */
30
+ export declare function CreditPackGrid({ accountStatus, purchasingPackId, onPurchase, className, }: CreditPackGridProps): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=CreditPackGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditPackGrid.d.ts","sourceRoot":"","sources":["../../src/billing/CreditPackGrid.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAQrF,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,sEAAsE;IACtE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,GACV,EAAE,mBAAmB,2CAmCrB"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "@stigmer/theme";
4
+ import { BillingAccountStatus } from "@stigmer/protos/ai/stigmer/billing/v1/enum_pb";
5
+ import { CREDIT_PACKS, formatPackPrice, formatCreditCount, } from "./credit-packs";
6
+ /**
7
+ * Grid of credit pack cards with purchase buttons.
8
+ *
9
+ * Displays the 3 self-serve credit packs (Starter, Growth, Team)
10
+ * in a responsive grid. Each card shows the pack name, price,
11
+ * credit count, and a buy button. Buttons are disabled when the
12
+ * account is suspended/closed or a purchase is in progress.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <CreditPackGrid
17
+ * accountStatus={account.status}
18
+ * purchasingPackId={isSubmitting ? activePackId : null}
19
+ * onPurchase={(packId) => createSession({ orgId, packId, ... })}
20
+ * />
21
+ * ```
22
+ */
23
+ export function CreditPackGrid({ accountStatus, purchasingPackId, onPurchase, className, }) {
24
+ const isAccountActive = accountStatus === BillingAccountStatus.billing_account_active;
25
+ return (_jsxs("div", { children: [_jsx("h3", { className: "mb-2 text-xs font-semibold text-foreground", children: "Purchase Credits" }), _jsx("div", { className: cn("grid gap-3 sm:grid-cols-3", className), role: "group", "aria-label": "Credit packs", children: CREDIT_PACKS.map((pack) => (_jsx(PackCard, { pack: pack, isPurchasing: purchasingPackId === pack.packId, isDisabled: !isAccountActive || purchasingPackId != null, onPurchase: onPurchase }, pack.packId))) }), !isAccountActive && (_jsxs("p", { className: "mt-2 text-xs text-muted-foreground", children: ["Credit purchases are unavailable while your billing account is", " ", accountStatus === BillingAccountStatus.billing_account_suspended
26
+ ? "suspended"
27
+ : "closed", "."] }))] }));
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // PackCard (internal)
31
+ // ---------------------------------------------------------------------------
32
+ function PackCard({ pack, isPurchasing, isDisabled, onPurchase, }) {
33
+ return (_jsxs("div", { className: "flex flex-col rounded-lg border border-border bg-card px-4 py-4", children: [_jsx("div", { className: "text-sm font-semibold text-foreground", children: pack.displayName }), _jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: pack.description }), _jsx("div", { className: "mt-3 flex items-baseline gap-1", children: _jsx("span", { className: "text-xl font-bold tabular-nums text-foreground", children: formatPackPrice(pack.priceCents) }) }), _jsxs("div", { className: "mt-0.5 text-xs tabular-nums text-muted-foreground", children: [formatCreditCount(pack.credits), " credits"] }), _jsx("button", { type: "button", disabled: isDisabled, onClick: () => onPurchase(pack.packId), className: cn("mt-4 w-full rounded-md px-3 py-1.5 text-xs font-medium transition-colors", "bg-primary text-primary-foreground", "hover:bg-primary/90", "disabled:pointer-events-none disabled:opacity-50"), "aria-busy": isPurchasing, children: isPurchasing ? "Redirecting\u2026" : "Buy" })] }));
34
+ }
35
+ //# sourceMappingURL=CreditPackGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreditPackGrid.js","sourceRoot":"","sources":["../../src/billing/CreditPackGrid.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AAcxB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,GACW;IACpB,MAAM,eAAe,GACnB,aAAa,KAAK,oBAAoB,CAAC,sBAAsB,CAAC;IAEhE,OAAO,CACL,0BACE,aAAI,SAAS,EAAC,4CAA4C,iCAErD,EACL,cACE,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,EACrD,IAAI,EAAC,OAAO,gBACD,cAAc,YAExB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1B,KAAC,QAAQ,IAEP,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC,MAAM,EAC9C,UAAU,EAAE,CAAC,eAAe,IAAI,gBAAgB,IAAI,IAAI,EACxD,UAAU,EAAE,UAAU,IAJjB,IAAI,CAAC,MAAM,CAKhB,CACH,CAAC,GACE,EACL,CAAC,eAAe,IAAI,CACnB,aAAG,SAAS,EAAC,oCAAoC,+EACgB,GAAG,EACjE,aAAa,KAAK,oBAAoB,CAAC,yBAAyB;wBAC/D,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,QAAQ,SAEV,CACL,IACG,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,UAAU,GAMX;IACC,OAAO,CACL,eAAK,SAAS,EAAC,iEAAiE,aAC9E,cAAK,SAAS,EAAC,uCAAuC,YACnD,IAAI,CAAC,WAAW,GACb,EACN,cAAK,SAAS,EAAC,sCAAsC,YAClD,IAAI,CAAC,WAAW,GACb,EAEN,cAAK,SAAS,EAAC,gCAAgC,YAC7C,eAAM,SAAS,EAAC,gDAAgD,YAC7D,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,GAC5B,GACH,EACN,eAAK,SAAS,EAAC,mDAAmD,aAC/D,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAC5B,EAEN,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC,SAAS,EAAE,EAAE,CACX,0EAA0E,EAC1E,oCAAoC,EACpC,qBAAqB,EACrB,kDAAkD,CACnD,eACU,YAAY,YAEtB,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,GACpC,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ /** Props for {@link LowBalanceBanner}. */
2
+ export interface LowBalanceBannerProps {
3
+ /** Available balance in micro-USD. */
4
+ readonly availableMicros: bigint;
5
+ /** Threshold in micro-USD below which the warning is shown. */
6
+ readonly thresholdMicros: bigint;
7
+ /** Additional CSS class names. */
8
+ readonly className?: string;
9
+ }
10
+ /**
11
+ * Conditional banner that warns when the available credit balance
12
+ * is below the configured threshold.
13
+ *
14
+ * Renders nothing when the balance is healthy. Not dismissible —
15
+ * it reflects a real account state that the user should address.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <LowBalanceBanner
20
+ * availableMicros={account.balance.availableMicros}
21
+ * thresholdMicros={account.lowBalanceThresholdMicros}
22
+ * />
23
+ * ```
24
+ */
25
+ export declare function LowBalanceBanner({ availableMicros, thresholdMicros, className, }: LowBalanceBannerProps): import("react/jsx-runtime").JSX.Element | null;
26
+ //# sourceMappingURL=LowBalanceBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LowBalanceBanner.d.ts","sourceRoot":"","sources":["../../src/billing/LowBalanceBanner.tsx"],"names":[],"mappings":"AAMA,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,eAAe,EACf,SAAS,GACV,EAAE,qBAAqB,kDA+BvB"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from "@stigmer/theme";
4
+ import { AlertTriangle } from "lucide-react";
5
+ import { formatCreditBalance } from "./format";
6
+ /**
7
+ * Conditional banner that warns when the available credit balance
8
+ * is below the configured threshold.
9
+ *
10
+ * Renders nothing when the balance is healthy. Not dismissible —
11
+ * it reflects a real account state that the user should address.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <LowBalanceBanner
16
+ * availableMicros={account.balance.availableMicros}
17
+ * thresholdMicros={account.lowBalanceThresholdMicros}
18
+ * />
19
+ * ```
20
+ */
21
+ export function LowBalanceBanner({ availableMicros, thresholdMicros, className, }) {
22
+ if (availableMicros >= thresholdMicros)
23
+ return null;
24
+ const isZeroOrNegative = availableMicros <= BigInt(0);
25
+ return (_jsxs("div", { role: "alert", className: cn("flex items-start gap-2.5 rounded-lg border px-3.5 py-3 text-xs", isZeroOrNegative
26
+ ? "border-destructive/30 bg-destructive/5 text-destructive"
27
+ : "border-warning/30 bg-warning/5 text-warning-foreground", className), children: [_jsx(AlertTriangle, { className: "mt-0.5 size-3.5 shrink-0", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("p", { className: "font-medium", children: isZeroOrNegative
28
+ ? "Credit balance exhausted"
29
+ : "Low credit balance" }), _jsx("p", { className: "mt-0.5 opacity-80", children: isZeroOrNegative
30
+ ? "Your credit balance is zero. Purchase credits to continue running agent executions."
31
+ : `Your balance (${formatCreditBalance(availableMicros)}) is below the warning threshold. Consider purchasing additional credits.` })] })] }));
32
+ }
33
+ //# sourceMappingURL=LowBalanceBanner.js.map