@arbidocs/blocks 0.4.146 → 0.4.150

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 (357) hide show
  1. package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs +44 -0
  2. package/dist/ConnectedNativeDocxComparison-3XQSINPQ.cjs.map +1 -0
  3. package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js +35 -0
  4. package/dist/ConnectedNativeDocxComparison-XQSXVGHR.js.map +1 -0
  5. package/dist/ConnectedNativeDocxEditor-IPEZDERL.js +33 -0
  6. package/dist/ConnectedNativeDocxEditor-IPEZDERL.js.map +1 -0
  7. package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs +46 -0
  8. package/dist/ConnectedNativeDocxEditor-OUWFMIPH.cjs.map +1 -0
  9. package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs +44 -0
  10. package/dist/ConnectedStreamedWordArtifact-D5LSMDO4.cjs.map +1 -0
  11. package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js +35 -0
  12. package/dist/ConnectedStreamedWordArtifact-UZVNBKQB.js.map +1 -0
  13. package/dist/FactTextEditor-YESAU2IJ.js +25 -0
  14. package/dist/FactTextEditor-YESAU2IJ.js.map +1 -0
  15. package/dist/FactTextEditor-YUPBCTXK.cjs +27 -0
  16. package/dist/FactTextEditor-YUPBCTXK.cjs.map +1 -0
  17. package/dist/{NativeDocxEditor-BE2OEOTJ.cjs → NativeDocxEditor-5VBNM5I7.cjs} +8 -8
  18. package/dist/{NativeDocxEditor-BE2OEOTJ.cjs.map → NativeDocxEditor-5VBNM5I7.cjs.map} +1 -1
  19. package/dist/{NativeDocxEditor-KOPFMRYW.js → NativeDocxEditor-XT5ZLFGU.js} +4 -4
  20. package/dist/{NativeDocxEditor-KOPFMRYW.js.map → NativeDocxEditor-XT5ZLFGU.js.map} +1 -1
  21. package/dist/agents/index.cjs +265 -266
  22. package/dist/agents/index.js +8 -9
  23. package/dist/calendar/index.cjs +117 -125
  24. package/dist/calendar/index.d.ts +0 -1
  25. package/dist/calendar/index.js +1 -1
  26. package/dist/calls/index.cjs +3 -3
  27. package/dist/calls/index.js +2 -2
  28. package/dist/chat/index.cjs +78 -78
  29. package/dist/chat/index.js +3 -3
  30. package/dist/{chunk-2FL7QJKJ.js → chunk-265GOG4W.js} +3 -3
  31. package/dist/{chunk-2FL7QJKJ.js.map → chunk-265GOG4W.js.map} +1 -1
  32. package/dist/{chunk-IJST4EBM.js → chunk-3E2F4AHD.js} +8 -8
  33. package/dist/{chunk-IJST4EBM.js.map → chunk-3E2F4AHD.js.map} +1 -1
  34. package/dist/chunk-3FSXWVHW.cjs +5184 -0
  35. package/dist/chunk-3FSXWVHW.cjs.map +1 -0
  36. package/dist/{chunk-LPYEUD2D.cjs → chunk-4JNKXOFZ.cjs} +3 -3
  37. package/dist/{chunk-LPYEUD2D.cjs.map → chunk-4JNKXOFZ.cjs.map} +1 -1
  38. package/dist/{chunk-ODRHHWHY.cjs → chunk-4KMLM3GY.cjs} +4 -4
  39. package/dist/chunk-4KMLM3GY.cjs.map +1 -0
  40. package/dist/{chunk-MHFF5N65.cjs → chunk-757OYF6G.cjs} +4 -38
  41. package/dist/chunk-757OYF6G.cjs.map +1 -0
  42. package/dist/chunk-AXTDDWMR.js +16 -0
  43. package/dist/chunk-AXTDDWMR.js.map +1 -0
  44. package/dist/{chunk-B3AHCIV5.js → chunk-BJ24VPOA.js} +4 -55
  45. package/dist/chunk-BJ24VPOA.js.map +1 -0
  46. package/dist/chunk-C7PTF6BQ.cjs +172 -0
  47. package/dist/chunk-C7PTF6BQ.cjs.map +1 -0
  48. package/dist/{chunk-T5B7FM7S.js → chunk-COA3S3CZ.js} +3 -3
  49. package/dist/{chunk-T5B7FM7S.js.map → chunk-COA3S3CZ.js.map} +1 -1
  50. package/dist/{chunk-C44TDH54.js → chunk-CQPFW64W.js} +5 -5
  51. package/dist/{chunk-C44TDH54.js.map → chunk-CQPFW64W.js.map} +1 -1
  52. package/dist/chunk-D3WFIFRY.cjs +659 -0
  53. package/dist/chunk-D3WFIFRY.cjs.map +1 -0
  54. package/dist/{chunk-QXMR5YHC.js → chunk-DIB4JYUY.js} +19 -3
  55. package/dist/chunk-DIB4JYUY.js.map +1 -0
  56. package/dist/chunk-DVB5ZKOF.js +22 -0
  57. package/dist/chunk-DVB5ZKOF.js.map +1 -0
  58. package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
  59. package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
  60. package/dist/chunk-EDV7CYG6.cjs +18 -0
  61. package/dist/chunk-EDV7CYG6.cjs.map +1 -0
  62. package/dist/chunk-FAXXN7KI.cjs +213 -0
  63. package/dist/chunk-FAXXN7KI.cjs.map +1 -0
  64. package/dist/{chunk-2MJWWPHY.js → chunk-G4IYES7G.js} +140 -15
  65. package/dist/chunk-G4IYES7G.js.map +1 -0
  66. package/dist/{chunk-MFMASSEO.cjs → chunk-GGTUMLCT.cjs} +93 -91
  67. package/dist/chunk-GGTUMLCT.cjs.map +1 -0
  68. package/dist/{chunk-QI6AIHWP.cjs → chunk-GOWXP5KT.cjs} +145 -14
  69. package/dist/chunk-GOWXP5KT.cjs.map +1 -0
  70. package/dist/{chunk-O6IEZDRC.cjs → chunk-GRGS5M6O.cjs} +181 -3
  71. package/dist/chunk-GRGS5M6O.cjs.map +1 -0
  72. package/dist/{chunk-A6IU4GIW.js → chunk-HGLC566X.js} +598 -13
  73. package/dist/chunk-HGLC566X.js.map +1 -0
  74. package/dist/{chunk-O2GW5IY6.cjs → chunk-ILM42LE6.cjs} +33 -33
  75. package/dist/{chunk-O2GW5IY6.cjs.map → chunk-ILM42LE6.cjs.map} +1 -1
  76. package/dist/{chunk-C3CGJK7A.cjs → chunk-IPQ5MJ4Z.cjs} +636 -31
  77. package/dist/chunk-IPQ5MJ4Z.cjs.map +1 -0
  78. package/dist/{chunk-NRFAWUVD.js → chunk-JAANWQGB.js} +157 -157
  79. package/dist/chunk-JAANWQGB.js.map +1 -0
  80. package/dist/{chunk-7RJTEWYM.js → chunk-JGOST4IL.js} +350 -64
  81. package/dist/chunk-JGOST4IL.js.map +1 -0
  82. package/dist/chunk-KHXEIEXN.js +41 -0
  83. package/dist/chunk-KHXEIEXN.js.map +1 -0
  84. package/dist/chunk-KLPRAQCE.cjs +22 -0
  85. package/dist/chunk-KLPRAQCE.cjs.map +1 -0
  86. package/dist/chunk-KQYPP72K.js +644 -0
  87. package/dist/chunk-KQYPP72K.js.map +1 -0
  88. package/dist/chunk-KUT2Y7JF.cjs +43 -0
  89. package/dist/chunk-KUT2Y7JF.cjs.map +1 -0
  90. package/dist/{chunk-6YTHQ73P.cjs → chunk-LLYZGH3L.cjs} +3 -56
  91. package/dist/chunk-LLYZGH3L.cjs.map +1 -0
  92. package/dist/{chunk-YSHIC4NJ.cjs → chunk-LXTOOUEN.cjs} +159 -154
  93. package/dist/chunk-LXTOOUEN.cjs.map +1 -0
  94. package/dist/{chunk-EVUEIBNU.js → chunk-M4S75AEJ.js} +44 -5
  95. package/dist/chunk-M4S75AEJ.js.map +1 -0
  96. package/dist/{chunk-V5OAXIBN.cjs → chunk-NPR5BGFF.cjs} +11 -11
  97. package/dist/{chunk-V5OAXIBN.cjs.map → chunk-NPR5BGFF.cjs.map} +1 -1
  98. package/dist/{chunk-PLJ7PHWU.cjs → chunk-NS7NVX4E.cjs} +3 -3
  99. package/dist/{chunk-PLJ7PHWU.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
  100. package/dist/{chunk-RB7GX2VT.cjs → chunk-NWNAYXC7.cjs} +9 -9
  101. package/dist/{chunk-RB7GX2VT.cjs.map → chunk-NWNAYXC7.cjs.map} +1 -1
  102. package/dist/chunk-Q6N6MZKO.js +5004 -0
  103. package/dist/chunk-Q6N6MZKO.js.map +1 -0
  104. package/dist/{chunk-I2QSDQQV.cjs → chunk-QT3A4PFC.cjs} +21 -2
  105. package/dist/chunk-QT3A4PFC.cjs.map +1 -0
  106. package/dist/{chunk-6HCJ3ZEU.js → chunk-R6VCPDPF.js} +178 -6
  107. package/dist/chunk-R6VCPDPF.js.map +1 -0
  108. package/dist/{chunk-ZM26YEOT.js → chunk-RY2SODRN.js} +3 -3
  109. package/dist/{chunk-ZM26YEOT.js.map → chunk-RY2SODRN.js.map} +1 -1
  110. package/dist/chunk-SDOEHEJP.js +208 -0
  111. package/dist/chunk-SDOEHEJP.js.map +1 -0
  112. package/dist/{chunk-DETZZBG2.cjs → chunk-SIB6C7P7.cjs} +43 -2
  113. package/dist/chunk-SIB6C7P7.cjs.map +1 -0
  114. package/dist/{chunk-OPTBQSCV.cjs → chunk-SMN32BQ3.cjs} +4 -183
  115. package/dist/chunk-SMN32BQ3.cjs.map +1 -0
  116. package/dist/chunk-TAWPVD6C.cjs +1956 -0
  117. package/dist/chunk-TAWPVD6C.cjs.map +1 -0
  118. package/dist/chunk-TC25LGIM.js +6584 -0
  119. package/dist/chunk-TC25LGIM.js.map +1 -0
  120. package/dist/{chunk-OBWYM25Y.js → chunk-TL45OJQE.js} +85 -83
  121. package/dist/chunk-TL45OJQE.js.map +1 -0
  122. package/dist/{chunk-AOSUHWIL.js → chunk-TZOQKV64.js} +4 -37
  123. package/dist/chunk-TZOQKV64.js.map +1 -0
  124. package/dist/chunk-UTVY63DG.js +16 -0
  125. package/dist/chunk-UTVY63DG.js.map +1 -0
  126. package/dist/chunk-V4YZXGXR.cjs +6751 -0
  127. package/dist/chunk-V4YZXGXR.cjs.map +1 -0
  128. package/dist/chunk-XRWHFMHK.js +19 -0
  129. package/dist/chunk-XRWHFMHK.js.map +1 -0
  130. package/dist/{chunk-O4YPVYPO.cjs → chunk-YAEXSCUW.cjs} +364 -60
  131. package/dist/chunk-YAEXSCUW.cjs.map +1 -0
  132. package/dist/chunk-YIFCLNII.cjs +18 -0
  133. package/dist/chunk-YIFCLNII.cjs.map +1 -0
  134. package/dist/chunk-Z27QMJ6S.cjs +25 -0
  135. package/dist/chunk-Z27QMJ6S.cjs.map +1 -0
  136. package/dist/{chunk-CSI2B2H5.js → chunk-Z4NQ3TED.js} +4 -4
  137. package/dist/chunk-Z4NQ3TED.js.map +1 -0
  138. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  139. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  140. package/dist/{chunk-FUTMU4FR.js → chunk-ZLEYLCE4.js} +8 -181
  141. package/dist/chunk-ZLEYLCE4.js.map +1 -0
  142. package/dist/chunk-ZNLTEZEF.js +170 -0
  143. package/dist/chunk-ZNLTEZEF.js.map +1 -0
  144. package/dist/chunk-ZO7PJMCO.js +1907 -0
  145. package/dist/chunk-ZO7PJMCO.js.map +1 -0
  146. package/dist/citations/index.cjs +14 -14
  147. package/dist/citations/index.js +2 -2
  148. package/dist/collaboration/index.cjs +74 -74
  149. package/dist/collaboration/index.js +3 -3
  150. package/dist/connect/docx.cjs +23 -28
  151. package/dist/connect/docx.cjs.map +1 -1
  152. package/dist/connect/docx.js +12 -28
  153. package/dist/connect/docx.js.map +1 -1
  154. package/dist/connect/index.cjs +8799 -2057
  155. package/dist/connect/index.cjs.map +1 -1
  156. package/dist/connect/index.d.ts +11 -2
  157. package/dist/connect/index.js +8578 -1884
  158. package/dist/connect/index.js.map +1 -1
  159. package/dist/connect/viewer.cjs +1229 -0
  160. package/dist/connect/viewer.cjs.map +1 -0
  161. package/dist/connect/viewer.d.ts +8 -0
  162. package/dist/connect/viewer.js +1226 -0
  163. package/dist/connect/viewer.js.map +1 -0
  164. package/dist/connection/ConnectedWorkflowsTable.d.ts +2 -12
  165. package/dist/connection/ai.d.ts +2 -9
  166. package/dist/connection/billing/AddAddonDialog.d.ts +24 -0
  167. package/dist/connection/billing/BillingCard.d.ts +18 -0
  168. package/dist/connection/billing/BillingProjectEntity.d.ts +9 -0
  169. package/dist/connection/billing/ChangePlanDialog.d.ts +20 -0
  170. package/dist/connection/billing/ChangeProPlan.d.ts +20 -0
  171. package/dist/connection/billing/CheckoutTotal.d.ts +12 -0
  172. package/dist/connection/billing/DailyCapEditor.d.ts +4 -0
  173. package/dist/connection/billing/InvoicesModal.d.ts +6 -0
  174. package/dist/connection/billing/NewProjectFlow.d.ts +14 -0
  175. package/dist/connection/billing/PlanChangeLines.d.ts +13 -0
  176. package/dist/connection/billing/PlanSelector.d.ts +50 -0
  177. package/dist/connection/billing/ProjectBilling.d.ts +24 -0
  178. package/dist/connection/billing/ProjectDetail.d.ts +16 -0
  179. package/dist/connection/billing/ProjectUsageCard.d.ts +21 -0
  180. package/dist/connection/billing/ProjectUsageContent.d.ts +18 -0
  181. package/dist/connection/billing/ProjectsTable.d.ts +13 -0
  182. package/dist/connection/billing/ReduceAddonDialog.d.ts +18 -0
  183. package/dist/connection/billing/ReferralReward.d.ts +32 -0
  184. package/dist/connection/billing/SharedProjects.d.ts +13 -0
  185. package/dist/connection/billing/StripeCheckoutModal.d.ts +32 -0
  186. package/dist/connection/billing/SubscriptionPlans.d.ts +15 -0
  187. package/dist/connection/billing/SubscriptionStatus.d.ts +10 -0
  188. package/dist/connection/billing/addon-pricing.d.ts +97 -0
  189. package/dist/connection/billing/api-error.d.ts +6 -0
  190. package/dist/connection/billing/billing-country.d.ts +14 -0
  191. package/dist/connection/billing/billing-focus.d.ts +11 -0
  192. package/dist/connection/billing/index.d.ts +22 -0
  193. package/dist/connection/billing/plan-badge.d.ts +15 -0
  194. package/dist/connection/billing/plan-change-outcome.d.ts +15 -0
  195. package/dist/connection/billing/plan-constants.d.ts +29 -0
  196. package/dist/connection/billing/plan-pricing.d.ts +67 -0
  197. package/dist/connection/billing/quota-items.d.ts +33 -0
  198. package/dist/connection/billing/referral-reward.d.ts +28 -0
  199. package/dist/connection/billing/refusal-copy.d.ts +5 -0
  200. package/dist/connection/billing/reward-balance.d.ts +19 -0
  201. package/dist/connection/billing/support.d.ts +35 -0
  202. package/dist/connection/billing/tax-quote.d.ts +36 -0
  203. package/dist/connection/billing/useAddonPurchase.d.ts +32 -0
  204. package/dist/connection/billing/useAutoRefreshPendingProjects.d.ts +11 -0
  205. package/dist/connection/billing/useCheckoutQuote.d.ts +30 -0
  206. package/dist/connection/billing/useOpenBillingPortal.d.ts +12 -0
  207. package/dist/connection/calendar/CalendarSettingsDialog.d.ts +1 -1
  208. package/dist/connection/connectors/ConnectedAppsSettings.d.ts +24 -0
  209. package/dist/connection/connectors/ConnectedDriveSyncDialog.d.ts +12 -0
  210. package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +12 -0
  211. package/dist/connection/connectors/index.d.ts +4 -0
  212. package/dist/connection/connectors/sync-labels.d.ts +21 -0
  213. package/dist/connection/facts/ConnectedFactsPage.d.ts +50 -0
  214. package/dist/connection/facts/FactMarkdownEditor.d.ts +57 -0
  215. package/dist/connection/facts/FactSourcesPopover.d.ts +38 -0
  216. package/dist/connection/facts/FactTextEditor.d.ts +2 -0
  217. package/dist/connection/facts/factNouns.d.ts +4 -0
  218. package/dist/connection/facts/factPageColumns.d.ts +37 -0
  219. package/dist/connection/facts/types.d.ts +127 -0
  220. package/dist/connection/facts/useFactActions.d.ts +10 -0
  221. package/dist/connection/facts/useFactComposer.d.ts +54 -0
  222. package/dist/connection/facts/useFactFilters.d.ts +101 -0
  223. package/dist/connection/facts/useFactSelection.d.ts +82 -0
  224. package/dist/connection/facts/useFactsGrid.d.ts +87 -0
  225. package/dist/connection/facts/useFactsPageView.d.ts +4 -0
  226. package/dist/connection/mail/ConnectedMailComposer.d.ts +3 -1
  227. package/dist/connection/mail/ConnectedMailbox.d.ts +4 -2
  228. package/dist/connection/mail/MailComposerForm.d.ts +4 -2
  229. package/dist/connection/mail/MailRecipientInput.d.ts +14 -0
  230. package/dist/connection/mail/index.d.ts +1 -1
  231. package/dist/connection/mail/types.d.ts +10 -0
  232. package/dist/connection/search/ConnectedSearchPage.d.ts +64 -0
  233. package/dist/connection/search/SearchResultRows.d.ts +38 -0
  234. package/dist/connection/search/index.d.ts +2 -0
  235. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +4 -0
  236. package/dist/connection/settings-page/index.d.ts +1 -1
  237. package/dist/connection/tags/ConnectedTagTable.d.ts +108 -0
  238. package/dist/connection/tags/ConnectedTagsPage.d.ts +55 -0
  239. package/dist/connection/tags/DocTagPassages.d.ts +25 -0
  240. package/dist/connection/tags/GlossaryExport.d.ts +7 -0
  241. package/dist/connection/tags/TagCombineFilter.d.ts +14 -0
  242. package/dist/connection/tags/TagPlacement.d.ts +16 -0
  243. package/dist/connection/tags/TagsPageSections.d.ts +36 -0
  244. package/dist/connection/tags/tagCombine.d.ts +55 -0
  245. package/dist/connection/useConnectedWorkNotifications.d.ts +7 -24
  246. package/dist/connection/viewer/ConnectedDocumentToolsProvider.d.ts +11 -0
  247. package/dist/connection/viewer/ConnectedDocumentViewer.d.ts +21 -0
  248. package/dist/connection/viewer/FinaliseTranslationButton.d.ts +15 -0
  249. package/dist/connection/viewer/ViewerPdfPane.d.ts +46 -0
  250. package/dist/connection/viewer/support.d.ts +79 -0
  251. package/dist/connection/viewer/useImageCrop.d.ts +13 -0
  252. package/dist/connection/viewer/useViewedDocument.d.ts +70 -0
  253. package/dist/connection/viewer/useViewerBlobs.d.ts +15 -0
  254. package/dist/connection/viewer/useViewerTabs.d.ts +18 -0
  255. package/dist/connection/viewer/useViewerVersions.d.ts +11 -0
  256. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +6 -0
  257. package/dist/document-tools/index.cjs +59 -652
  258. package/dist/document-tools/index.cjs.map +1 -1
  259. package/dist/document-tools/index.js +2 -641
  260. package/dist/document-tools/index.js.map +1 -1
  261. package/dist/docx/index.cjs +48 -47
  262. package/dist/docx/index.js +4 -3
  263. package/dist/facts/FactsBulkBar.d.ts +6 -3
  264. package/dist/facts/cited-version-ref.d.ts +1 -0
  265. package/dist/facts/index.cjs +206 -1942
  266. package/dist/facts/index.cjs.map +1 -1
  267. package/dist/facts/index.d.ts +1 -0
  268. package/dist/facts/index.js +15 -1897
  269. package/dist/facts/index.js.map +1 -1
  270. package/dist/files/ViewerChrome.d.ts +5 -4
  271. package/dist/files/ViewerControlBar.d.ts +12 -0
  272. package/dist/files/doc-labels.d.ts +35 -0
  273. package/dist/files/grid/FilterButton.d.ts +12 -0
  274. package/dist/files/grid/RowDensityControl.d.ts +18 -0
  275. package/dist/files/grid/row-density.d.ts +27 -0
  276. package/dist/files/index.cjs +779 -7100
  277. package/dist/files/index.cjs.map +1 -1
  278. package/dist/files/index.d.ts +5 -0
  279. package/dist/files/index.js +14 -6919
  280. package/dist/files/index.js.map +1 -1
  281. package/dist/home/index.cjs +2 -2
  282. package/dist/home/index.js +2 -2
  283. package/dist/index.cjs +1043 -1259
  284. package/dist/index.cjs.map +1 -1
  285. package/dist/index.js +27 -360
  286. package/dist/index.js.map +1 -1
  287. package/dist/retrieval/SearchSnippet.d.ts +6 -0
  288. package/dist/retrieval/index.cjs +75 -42
  289. package/dist/retrieval/index.d.ts +2 -0
  290. package/dist/retrieval/index.js +3 -2
  291. package/dist/retrieval/search-results.d.ts +46 -0
  292. package/dist/settings/Billing.d.ts +0 -66
  293. package/dist/settings/PlanBadge.d.ts +1 -1
  294. package/dist/settings/SubscriptionParts.d.ts +1 -50
  295. package/dist/settings/index.cjs +501 -3714
  296. package/dist/settings/index.cjs.map +1 -1
  297. package/dist/settings/index.d.ts +3 -2
  298. package/dist/settings/index.js +10 -3527
  299. package/dist/settings/index.js.map +1 -1
  300. package/dist/settings/inverted-index-filter.d.ts +26 -0
  301. package/dist/shell/index.cjs +2 -2
  302. package/dist/shell/index.js +2 -2
  303. package/dist/site/index.cjs +5 -5
  304. package/dist/site/index.js +1 -1
  305. package/dist/studio/index.cjs +6 -6
  306. package/dist/studio/index.js +5 -5
  307. package/dist/tags/definitions.d.ts +10 -0
  308. package/dist/tags/index.d.ts +4 -1
  309. package/dist/tags/page/ExtractEntitiesDialog.d.ts +24 -0
  310. package/dist/tags/page/TagPicker.d.ts +16 -0
  311. package/dist/tags/page/tagsPageLabels.d.ts +36 -0
  312. package/dist/workflow-canvas/index.cjs +21 -22
  313. package/dist/workflow-canvas/index.cjs.map +1 -1
  314. package/dist/workflow-canvas/index.js +8 -9
  315. package/dist/workflow-canvas/index.js.map +1 -1
  316. package/node_modules/@arbidocs/coedit/package.json +1 -1
  317. package/package.json +13 -4
  318. package/dist/calendar/access-setup.d.ts +0 -8
  319. package/dist/chunk-2MJWWPHY.js.map +0 -1
  320. package/dist/chunk-3AFWGEDJ.cjs +0 -53
  321. package/dist/chunk-3AFWGEDJ.cjs.map +0 -1
  322. package/dist/chunk-5YHEHEJT.js +0 -1667
  323. package/dist/chunk-5YHEHEJT.js.map +0 -1
  324. package/dist/chunk-6HCJ3ZEU.js.map +0 -1
  325. package/dist/chunk-6YTHQ73P.cjs.map +0 -1
  326. package/dist/chunk-7RJTEWYM.js.map +0 -1
  327. package/dist/chunk-A6IU4GIW.js.map +0 -1
  328. package/dist/chunk-AOSUHWIL.js.map +0 -1
  329. package/dist/chunk-B3AHCIV5.js.map +0 -1
  330. package/dist/chunk-C3CGJK7A.cjs.map +0 -1
  331. package/dist/chunk-CSI2B2H5.js.map +0 -1
  332. package/dist/chunk-DETZZBG2.cjs.map +0 -1
  333. package/dist/chunk-EVUEIBNU.js.map +0 -1
  334. package/dist/chunk-FUTMU4FR.js.map +0 -1
  335. package/dist/chunk-I2QSDQQV.cjs.map +0 -1
  336. package/dist/chunk-J5CWKFSC.js +0 -170
  337. package/dist/chunk-J5CWKFSC.js.map +0 -1
  338. package/dist/chunk-MFMASSEO.cjs.map +0 -1
  339. package/dist/chunk-MHFF5N65.cjs.map +0 -1
  340. package/dist/chunk-NRFAWUVD.js.map +0 -1
  341. package/dist/chunk-O4YPVYPO.cjs.map +0 -1
  342. package/dist/chunk-O6IEZDRC.cjs.map +0 -1
  343. package/dist/chunk-OBWYM25Y.js.map +0 -1
  344. package/dist/chunk-ODRHHWHY.cjs.map +0 -1
  345. package/dist/chunk-OPTBQSCV.cjs.map +0 -1
  346. package/dist/chunk-QI6AIHWP.cjs.map +0 -1
  347. package/dist/chunk-QXMR5YHC.js.map +0 -1
  348. package/dist/chunk-RFXJYIDV.js +0 -50
  349. package/dist/chunk-RFXJYIDV.js.map +0 -1
  350. package/dist/chunk-U73KPFYH.cjs +0 -1717
  351. package/dist/chunk-U73KPFYH.cjs.map +0 -1
  352. package/dist/chunk-XVUOMWMD.cjs +0 -177
  353. package/dist/chunk-XVUOMWMD.cjs.map +0 -1
  354. package/dist/chunk-YSHIC4NJ.cjs.map +0 -1
  355. package/dist/connection/ConnectedTagTable.d.ts +0 -32
  356. package/dist/connection/calendar/CopyField.d.ts +0 -9
  357. package/dist/connection/calendar/OpenAccessPanel.d.ts +0 -7
@@ -1,3751 +1,660 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkU73KPFYH_cjs = require('../chunk-U73KPFYH.cjs');
4
+ var chunk3FSXWVHW_cjs = require('../chunk-3FSXWVHW.cjs');
5
5
  var chunk223D4727_cjs = require('../chunk-223D4727.cjs');
6
- var chunkQZTNTP75_cjs = require('../chunk-QZTNTP75.cjs');
7
- var chunkNWNVWO6L_cjs = require('../chunk-NWNVWO6L.cjs');
6
+ require('../chunk-QZTNTP75.cjs');
7
+ require('../chunk-NWNVWO6L.cjs');
8
8
  var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
9
9
  var chunkRQ2Y7USX_cjs = require('../chunk-RQ2Y7USX.cjs');
10
- var chunkDVUZTGVL_cjs = require('../chunk-DVUZTGVL.cjs');
10
+ require('../chunk-DVUZTGVL.cjs');
11
11
  require('../chunk-ADOKTJHV.cjs');
12
- var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
13
- var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
14
- var chunk32HW2Q33_cjs = require('../chunk-32HW2Q33.cjs');
15
- require('../chunk-PPCATBOY.cjs');
16
- var chunkMHVNT4J3_cjs = require('../chunk-MHVNT4J3.cjs');
12
+ var chunkZAVEMQ37_cjs = require('../chunk-ZAVEMQ37.cjs');
13
+ require('../chunk-7RGLTF76.cjs');
17
14
  var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
18
- var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
15
+ require('../chunk-32HW2Q33.cjs');
16
+ require('../chunk-PPCATBOY.cjs');
17
+ require('../chunk-MHVNT4J3.cjs');
18
+ require('../chunk-KDG6FER6.cjs');
19
19
  require('../chunk-DES3K4SD.cjs');
20
- var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
21
- var ui = require('@arbidocs/react/ui');
22
- var jsxRuntime = require('react/jsx-runtime');
23
- var react = require('react');
24
- var lucideReact = require('lucide-react');
25
- var classVarianceAuthority = require('class-variance-authority');
26
-
27
- function _interopNamespace(e) {
28
- if (e && e.__esModule) return e;
29
- var n = Object.create(null);
30
- if (e) {
31
- Object.keys(e).forEach(function (k) {
32
- if (k !== 'default') {
33
- var d = Object.getOwnPropertyDescriptor(e, k);
34
- Object.defineProperty(n, k, d.get ? d : {
35
- enumerable: true,
36
- get: function () { return e[k]; }
37
- });
38
- }
39
- });
40
- }
41
- n.default = e;
42
- return Object.freeze(n);
43
- }
44
-
45
- var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
46
20
 
47
- function SegmentedControl({
48
- value,
49
- onChange,
50
- options,
51
- ariaLabel,
52
- className
53
- }) {
54
- return /* @__PURE__ */ jsxRuntime.jsx(
55
- RadioGroupPrimitive__namespace.Root,
56
- {
57
- "data-slot": "segmented-control",
58
- "aria-label": ariaLabel,
59
- value,
60
- onValueChange: (next) => onChange(next),
61
- orientation: "horizontal",
62
- className: ui.cn("inline-flex rounded-lg border border-border bg-background p-1", className),
63
- children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
64
- RadioGroupPrimitive__namespace.Item,
65
- {
66
- value: option.value,
67
- "data-testid": option.testId,
68
- className: ui.cn(
69
- "flex items-center gap-2 rounded-md px-4 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:py-2.5",
70
- option.value === value ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:text-foreground"
71
- ),
72
- children: [
73
- option.icon,
74
- option.label
75
- ]
76
- },
77
- option.value
78
- ))
79
- }
80
- );
81
- }
82
- function FloatingPanel({
83
- panelId,
84
- mode,
85
- title,
86
- subtitle,
87
- headerIcon,
88
- headerActions,
89
- tabLabel,
90
- modeSwitcher,
91
- children,
92
- footer,
93
- onPanelClick,
94
- className
95
- }) {
96
- const isRenderFunction = typeof children === "function";
97
- const content = isRenderFunction ? children({ modeSwitcher }) : children;
98
- const footerEl = footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex-shrink-0 border-t border-border p-3", children: footer });
99
- const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
100
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("flex-1", isRenderFunction ? "overflow-hidden" : "overflow-auto p-3"), children: content }),
101
- footerEl
102
- ] });
103
- if (mode === "popout") {
104
- return /* @__PURE__ */ jsxRuntime.jsxs(
105
- "div",
106
- {
107
- "data-slot": "floating-panel",
108
- className: ui.cn("flex h-screen flex-col bg-background text-foreground", className),
109
- children: [
110
- !isRenderFunction && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 items-start justify-between border-b border-border px-3 py-2", children: [
111
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
112
- (title || headerIcon) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-base font-semibold text-primary", children: [
113
- headerIcon,
114
- title && /* @__PURE__ */ jsxRuntime.jsx("span", { children: title })
115
- ] }),
116
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: subtitle }),
117
- headerActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: title ? "mt-1.5" : "", children: headerActions })
118
- ] }),
119
- modeSwitcher
120
- ] }),
121
- body
122
- ]
123
- }
124
- );
125
- }
126
- return /* @__PURE__ */ jsxRuntime.jsxs(
127
- "div",
128
- {
129
- "data-slot": "floating-panel",
130
- "data-mode": mode,
131
- className: ui.cn("flex h-full flex-col bg-background text-foreground", className),
132
- onClick: onPanelClick,
133
- children: [
134
- !isRenderFunction && /* @__PURE__ */ jsxRuntime.jsx(
135
- chunk7RGLTF76_cjs.TabHeader,
136
- {
137
- tabs: [{ id: panelId, label: tabLabel ?? title }],
138
- activeTabId: panelId,
139
- onTabChange: () => {
140
- },
141
- rightContent: modeSwitcher
142
- }
143
- ),
144
- body
145
- ]
146
- }
147
- );
148
- }
149
- var DEFAULT_CONFIG_SWITCHER_BAR_LABELS = {
150
- placeholder: "Select configuration...",
151
- save: "Save",
152
- saving: "Saving...",
153
- delete: "Delete"
154
- };
155
- var MARKERS = { default: lucideReact.Star, original: lucideReact.Undo2, "last-used": lucideReact.History };
156
- function ConfigSwitcherBar({
157
- options,
158
- value,
159
- onSelect,
160
- hasUnsavedChanges,
161
- unsavedTitle = "Unsaved Changes",
162
- unsavedSubtitle = "Changes will be lost if you switch",
163
- showNameField,
164
- name,
165
- onNameChange,
166
- namePlaceholder,
167
- saveLabel,
168
- onSave,
169
- isSaving,
170
- canDelete,
171
- onDelete,
172
- isDeleting,
173
- nameTestId,
174
- saveTestId,
175
- deleteTestId,
176
- labels,
177
- className
178
- }) {
179
- const l = react.useMemo(() => ({ ...DEFAULT_CONFIG_SWITCHER_BAR_LABELS, ...labels }), [labels]);
180
- return /* @__PURE__ */ jsxRuntime.jsx(
181
- ui.DialogFooter,
182
- {
183
- "data-slot": "config-switcher-bar",
184
- className: ui.cn("flex-shrink-0 border-t bg-muted px-4 py-4", className),
185
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full flex-col gap-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[36px] items-center gap-3", children: [
186
- /* @__PURE__ */ jsxRuntime.jsxs(
187
- ui.Select,
188
- {
189
- value: hasUnsavedChanges ? "unsaved" : value,
190
- onValueChange: (v) => {
191
- if (v !== "unsaved") onSelect(v);
192
- },
193
- children: [
194
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "h-9 min-w-0 flex-1 border-0 bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { placeholder: l.placeholder }) }),
195
- /* @__PURE__ */ jsxRuntime.jsxs(ui.SelectContent, { position: "popper", children: [
196
- hasUnsavedChanges && /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "unsaved", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
197
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: unsavedTitle }),
198
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: unsavedSubtitle })
199
- ] }) }),
200
- options.map((o) => {
201
- const Marker = o.marker ? MARKERS[o.marker] : null;
202
- return /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
203
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
204
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: o.title }),
205
- o.subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: o.subtitle })
206
- ] }),
207
- Marker && /* @__PURE__ */ jsxRuntime.jsx(Marker, { className: "mt-0.5 size-3 flex-shrink-0 text-muted-foreground" })
208
- ] }) }, o.value);
209
- })
210
- ] })
211
- ]
212
- }
213
- ),
214
- showNameField && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
215
- /* @__PURE__ */ jsxRuntime.jsx(
216
- ui.Input,
217
- {
218
- value: name,
219
- onChange: (e) => onNameChange(e.target.value),
220
- placeholder: namePlaceholder,
221
- className: "h-9 min-w-0 flex-1 bg-background",
222
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(nameTestId, { testId: "config-name-input" })
223
- }
224
- ),
225
- /* @__PURE__ */ jsxRuntime.jsx(
226
- ui.Button,
227
- {
228
- variant: "outline",
229
- size: "sm",
230
- className: "h-9",
231
- onClick: onSave,
232
- disabled: isSaving || !name.trim(),
233
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(saveTestId, { testId: "save-config-button" }),
234
- children: isSaving ? l.saving : saveLabel
235
- }
236
- )
237
- ] }),
238
- canDelete && /* @__PURE__ */ jsxRuntime.jsxs(
239
- ui.Button,
240
- {
241
- variant: "outline",
242
- size: "sm",
243
- className: "h-9 border-destructive text-destructive hover:bg-destructive hover:text-destructive-foreground",
244
- onClick: onDelete,
245
- disabled: isDeleting,
246
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(deleteTestId, { testId: "delete-config-button" }),
247
- children: [
248
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "mr-2 size-4" }),
249
- l.delete
250
- ]
251
- }
252
- )
253
- ] }) })
254
- }
255
- );
256
- }
257
- var CONVERSATION_TITLE_MAX = 50;
258
- var DEFAULT_CONVERSATION_TITLE_SECTION_LABELS = {
259
- title: "Conversation Title",
260
- placeholder: "New Conversation",
261
- share: "Share",
262
- shared: "Shared",
263
- ownerOnlyShare: "Only available to conversation owner",
264
- makePrivate: "Make private again",
265
- characters: (count, max) => `${count}/${max} characters`,
266
- saving: "Saving...",
267
- ownerOnlyEdit: "Only the conversation owner can edit the title"
268
- };
269
- var SECTION_CLASS = "rounded-md border bg-muted/50 p-4";
270
- function ConversationTitleSection({
271
- title,
272
- onTitleChange,
273
- onTitleCommit,
274
- isOwner,
275
- isShared,
276
- isSharing,
277
- isSavingTitle,
278
- onShare,
279
- onUnshare,
280
- inputTestId,
281
- shareTestId,
282
- labels
283
- }) {
284
- const l = react.useMemo(() => ({ ...DEFAULT_CONVERSATION_TITLE_SECTION_LABELS, ...labels }), [labels]);
285
- const trimmed = title.trim();
286
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: SECTION_CLASS, children: [
287
- /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { children: l.title }),
288
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
289
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
290
- /* @__PURE__ */ jsxRuntime.jsx(
291
- ui.Input,
292
- {
293
- value: title,
294
- onChange: (e) => {
295
- if (isOwner && e.target.value.length <= CONVERSATION_TITLE_MAX) {
296
- onTitleChange(e.target.value);
297
- }
298
- },
299
- onBlur: () => {
300
- if (isOwner && trimmed && trimmed.length <= CONVERSATION_TITLE_MAX) onTitleCommit();
301
- },
302
- placeholder: l.placeholder,
303
- maxLength: 60,
304
- disabled: !isOwner,
305
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(inputTestId, { testId: "conversation-title-input" })
306
- }
307
- ),
308
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
309
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { tabIndex: !isOwner ? 0 : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(
310
- ui.Button,
311
- {
312
- variant: isShared ? "secondary" : "outline",
313
- size: "sm",
314
- className: "h-9 px-3 pointer-coarse:h-11",
315
- onClick: () => {
316
- if (!isOwner) return;
317
- if (isShared) onUnshare?.();
318
- else onShare();
319
- },
320
- disabled: !isOwner || isShared && !onUnshare || isSharing,
321
- title: isOwner && isShared && onUnshare ? l.makePrivate : void 0,
322
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(shareTestId, { testId: "share-conversation-button" }),
323
- children: [
324
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Users, { className: "mr-1 size-3" }),
325
- isShared ? l.shared : l.share
326
- ]
327
- }
328
- ) }) }),
329
- !isOwner && /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: l.ownerOnlyShare }) })
330
- ] })
331
- ] }),
332
- isOwner ? /* @__PURE__ */ jsxRuntime.jsxs(
333
- "p",
334
- {
335
- className: ui.cn(
336
- "text-sm",
337
- title.length > CONVERSATION_TITLE_MAX ? "text-destructive" : "text-muted-foreground"
338
- ),
339
- children: [
340
- l.characters(title.length, CONVERSATION_TITLE_MAX),
341
- isSavingTitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-primary", children: l.saving })
342
- ]
343
- }
344
- ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.ownerOnlyEdit })
345
- ] })
346
- ] });
347
- }
348
- var DEFAULT_MODEL_SELECTION_SECTION_LABELS = {
349
- title: "AI Model Selection",
350
- description: "Select the AI model to use for this conversation",
351
- useDefaults: "Use defaults",
352
- auto: "Auto",
353
- default: "Default",
354
- lastUsed: "Last used",
355
- deepThinking: "Deep Thinking"
356
- };
357
- function ModelSelectionSection({
358
- selector,
359
- onUseDefaults,
360
- defaultsTestId,
361
- labels
362
- }) {
363
- const l = react.useMemo(() => ({ ...DEFAULT_MODEL_SELECTION_SECTION_LABELS, ...labels }), [labels]);
364
- const legend = [
365
- { icon: lucideReact.Sparkles, label: l.auto },
366
- { icon: lucideReact.Star, label: l.default },
367
- { icon: lucideReact.History, label: l.lastUsed },
368
- { icon: lucideReact.Brain, label: l.deepThinking }
369
- ];
370
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: SECTION_CLASS, children: [
371
- /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSectionTitle, { children: l.title }),
372
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
373
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.description }),
374
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
375
- selector,
376
- /* @__PURE__ */ jsxRuntime.jsxs(
377
- ui.Button,
378
- {
379
- variant: "outline",
380
- size: "sm",
381
- className: "flex h-8 items-center gap-1.5 px-3 pointer-coarse:h-11",
382
- onClick: onUseDefaults,
383
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(defaultsTestId, { testId: "use-defaults-button" }),
384
- children: [
385
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Star, { className: "size-4" }),
386
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: l.useDefaults })
387
- ]
388
- }
389
- )
390
- ] }),
391
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-muted-foreground", children: legend.map(({ icon: Icon, label }) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
392
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-3" }),
393
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
394
- ] }, label)) })
395
- ] })
396
- ] });
397
- }
398
- function ThreadPreviewDialog({
399
- open,
400
- onOpenChange,
401
- crumbs,
402
- description = "Thread visualization",
403
- width,
404
- testId,
405
- children
406
- }) {
407
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
408
- ui.DialogContent,
409
- {
410
- presentation: "sheet",
411
- className: "flex flex-col overflow-hidden p-0",
412
- style: { width: `${width}px`, maxWidth: "95vw", height: "80vh", maxHeight: "90vh" },
413
- "data-testid": testId,
414
- children: [
415
- /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalHeader, { children: [
416
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3", children: crumbs.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-3", children: [
417
- i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "/" }),
418
- c.icon,
419
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: c.label })
420
- ] }, i)) }) }),
421
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: description })
422
- ] }),
423
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children })
424
- ]
425
- }
426
- ) });
427
- }
428
- var ITEMS = { one: "item", other: "items" };
429
- function isInlineObject(data) {
430
- if (data === null || data === void 0) return true;
431
- if (typeof data !== "object") return true;
432
- if (Array.isArray(data)) return data.length === 0;
433
- const keys = Object.keys(data);
434
- if (keys.length === 0) return true;
435
- if (keys.length > 4) return false;
436
- return Object.values(data).every(
437
- (v) => v === null || v === void 0 || typeof v !== "object"
438
- );
439
- }
440
- function inlineSummary(data) {
441
- const parts = Object.entries(data).map(([k, v]) => {
442
- if (v === null) return `${k}: null`;
443
- if (typeof v === "string") return `${k}: "${v.length > 40 ? v.slice(0, 40) + "\u2026" : v}"`;
444
- return `${k}: ${String(v)}`;
445
- });
446
- return `{ ${parts.join(", ")} }`;
447
- }
448
- function arrayPreview(data) {
449
- if (data.length === 0) return "[]";
450
- const first = data[0];
451
- if (typeof first !== "object" || first === null) return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)}]`;
452
- const obj = first;
453
- const previewKeys = ["action", "step", "phase", "tool", "name", "type", "id"];
454
- const parts = previewKeys.filter((k) => obj[k] !== void 0).slice(0, 3).map((k) => `${k}: ${JSON.stringify(obj[k])}`);
455
- if (parts.length === 0) return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)}]`;
456
- return `[${chunkKDG6FER6_cjs.formatCount(data.length, ITEMS)} \u2014 { ${parts.join(", ")} }, \u2026]`;
457
- }
458
- var NAME_CLASS = "font-medium text-primary";
459
- var COPY_CLASS = "rounded p-0.5 opacity-50 transition-opacity hover:bg-muted hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center pointer-coarse:opacity-100";
460
- function valueColor(data) {
461
- if (data === null || data === void 0) return "text-muted-foreground";
462
- switch (typeof data) {
463
- case "string":
464
- return "text-primary";
465
- case "number":
466
- return "text-primary";
467
- case "boolean":
468
- return "text-purple-700 dark:text-purple-400";
469
- default:
470
- return "text-foreground";
471
- }
472
- }
473
- function plainValue(data) {
474
- if (data === null) return "null";
475
- if (data === void 0) return "undefined";
476
- return typeof data === "string" ? `"${data}"` : String(data);
477
- }
478
- function JsonTree({
479
- data,
480
- name,
481
- defaultExpanded = false,
482
- level = 0,
483
- path = [],
484
- resolveHint,
485
- formatValue: formatValue2
486
- }) {
487
- const [isExpanded, setIsExpanded] = react.useState(defaultExpanded || level < 2);
488
- const [copied, setCopied] = react.useState(false);
489
- const currentPath = name ? [...path, name] : path;
490
- const hint = name && resolveHint ? resolveHint(currentPath, name) : null;
491
- const displayName = hint?.displayName || name;
492
- const handleCopy = (value) => {
493
- const text = typeof value === "string" ? value : JSON.stringify(value, null, 2);
494
- void navigator.clipboard.writeText(text).then(() => {
495
- setCopied(true);
496
- setTimeout(() => setCopied(false), 2e3);
497
- });
498
- };
499
- const copyButton = (title, value) => /* @__PURE__ */ jsxRuntime.jsx(
500
- "button",
501
- {
502
- type: "button",
503
- onClick: () => handleCopy(value),
504
- className: COPY_CLASS,
505
- title,
506
- "aria-label": title,
507
- children: copied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { size: 12, className: "text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { size: 12 })
508
- }
509
- );
510
- const isArray = Array.isArray(data);
511
- const isObject = typeof data === "object" && data !== null && !isArray;
512
- if (!isObject && !isArray) {
513
- const displayValue = hint && formatValue2 ? formatValue2(data, hint) : plainValue(data);
514
- return /* @__PURE__ */ jsxRuntime.jsxs(
515
- "div",
516
- {
517
- "data-slot": "json-tree-leaf",
518
- className: "group flex items-center gap-2 py-0.5 font-mono text-sm",
519
- children: [
520
- displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, title: hint?.description, children: [
521
- displayName,
522
- ":"
523
- ] }),
524
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: valueColor(data), children: displayValue }),
525
- hint?.formatType === "id" && typeof data === "string" && data.length > 20 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", title: data, children: [
526
- "(full: ",
527
- data,
528
- ")"
529
- ] }),
530
- copyButton("Copy value", data)
531
- ]
532
- }
533
- );
534
- }
535
- if (isObject && isInlineObject(data)) {
536
- return /* @__PURE__ */ jsxRuntime.jsxs(
537
- "div",
538
- {
539
- "data-slot": "json-tree-leaf",
540
- className: "group flex items-center gap-2 py-0.5 font-mono text-sm",
541
- children: [
542
- displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, children: [
543
- displayName,
544
- ":"
545
- ] }),
546
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: inlineSummary(data) }),
547
- copyButton("Copy object", data)
548
- ]
549
- }
550
- );
551
- }
552
- const Icon = isExpanded ? lucideReact.ChevronDown : lucideReact.ChevronRight;
553
- const entries = isArray ? data.map((item, index) => [String(index), item]) : Object.entries(data);
554
- const collapsedPreview = isArray ? arrayPreview(data) : `{${Object.keys(data).length} fields}`;
555
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "json-tree", className: "font-mono text-sm", children: [
556
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex items-center gap-1 py-0.5", children: [
557
- /* @__PURE__ */ jsxRuntime.jsxs(
558
- "button",
559
- {
560
- type: "button",
561
- onClick: () => setIsExpanded(!isExpanded),
562
- "aria-expanded": isExpanded,
563
- className: "flex items-center gap-1 rounded p-0.5 transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
564
- title: hint?.description,
565
- children: [
566
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 14, className: "shrink-0" }),
567
- displayName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: NAME_CLASS, children: [
568
- displayName,
569
- ":"
570
- ] }),
571
- !isExpanded && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-[400px] truncate text-sm text-muted-foreground", children: collapsedPreview }),
572
- isExpanded && isArray && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
573
- data.length,
574
- " items"
575
- ] })
576
- ]
577
- }
578
- ),
579
- copyButton("Copy object", data)
580
- ] }),
581
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ml-4 border-l border-border/40 pl-2", children: entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-0.5 text-sm text-muted-foreground", children: isArray ? "empty array" : "empty object" }) : entries.map(([key, value]) => {
582
- if (isArray && typeof value === "object" && value !== null && isInlineObject(value)) {
583
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-0.5 font-mono text-sm text-muted-foreground", children: inlineSummary(value) }, key);
584
- }
585
- return /* @__PURE__ */ jsxRuntime.jsx(
586
- JsonTree,
587
- {
588
- name: isArray ? void 0 : key,
589
- data: value,
590
- level: level + 1,
591
- path: currentPath,
592
- resolveHint,
593
- formatValue: formatValue2
594
- },
595
- key
596
- );
597
- }) })
598
- ] });
599
- }
600
21
 
601
- // src/settings/message-schema-hints.ts
602
- var messageFieldHints = {
603
- role: {
604
- displayName: "Role",
605
- formatType: "enum",
606
- description: "Message role (user, assistant, or system)"
607
- },
608
- content: {
609
- displayName: "Content",
610
- formatType: "long-string",
611
- description: "Message content text"
612
- },
613
- created_at: {
614
- displayName: "Created At",
615
- formatType: "timestamp",
616
- description: "Message creation timestamp"
617
- },
618
- external_id: {
619
- displayName: "Message ID",
620
- formatType: "id",
621
- description: "External message identifier"
622
- },
623
- conversation_ext_id: {
624
- displayName: "Conversation ID",
625
- formatType: "id",
626
- description: "Parent conversation identifier"
627
- },
628
- parent_message_ext_id: {
629
- displayName: "Parent Message ID",
630
- formatType: "id",
631
- description: "Parent message identifier (null for first message)"
632
- },
633
- created_by_ext_id: {
634
- displayName: "Created By",
635
- formatType: "id",
636
- description: "User who created this message"
637
- },
638
- config_ext_id: {
639
- displayName: "Config ID",
640
- formatType: "id",
641
- description: "Configuration used for this message"
642
- },
643
- shared: {
644
- displayName: "Shared",
645
- formatType: "boolean",
646
- description: "Whether message is shared"
647
- },
648
- tools: {
649
- displayName: "Tools",
650
- formatType: "json",
651
- description: "Tool outputs (citations, retrieval, trace)"
652
- },
653
- meta: {
654
- displayName: "Metadata",
655
- formatType: "json",
656
- description: "Additional metadata"
657
- }
658
- };
659
- var traceToolFieldHints = {
660
- name: {
661
- displayName: "Tool Name",
662
- formatType: "enum",
663
- description: "Execution trace tool"
664
- },
665
- description: {
666
- displayName: "Description",
667
- formatType: "string",
668
- description: "Tool description"
669
- },
670
- trace_id: {
671
- displayName: "Trace ID",
672
- formatType: "id",
673
- description: "Unique trace identifier"
674
- },
675
- start_time: {
676
- displayName: "Start Time",
677
- formatType: "timestamp",
678
- description: "When execution started"
679
- },
680
- duration_seconds: {
681
- displayName: "Duration (seconds)",
682
- formatType: "number",
683
- description: "Total execution time"
684
- },
685
- steps: {
686
- displayName: "Execution Steps",
687
- formatType: "json",
688
- description: "Full execution trace with all steps"
689
- }
690
- };
691
- var citationToolFieldHints = {
692
- name: {
693
- displayName: "Tool Name",
694
- formatType: "enum",
695
- description: "Model citation tool"
696
- },
697
- tool_responses: {
698
- displayName: "Citations",
699
- formatType: "json",
700
- description: "Citation data mapped by citation number"
701
- }
702
- };
703
- function getFieldHint(path, fieldName) {
704
- if (path.length === 1 && path[0] === "message") {
705
- return messageFieldHints[fieldName] || null;
706
- }
707
- if (path.length >= 3 && path[0] === "message" && path[1] === "tools" && path[2] === "trace") {
708
- return traceToolFieldHints[fieldName] || null;
709
- }
710
- if (path.length >= 3 && path[0] === "message" && path[1] === "tools" && path[2] === "model_citations") {
711
- return citationToolFieldHints[fieldName] || null;
712
- }
713
- if (fieldName === "external_id" || fieldName.endsWith("_ext_id")) {
714
- return { formatType: "id", displayName: fieldName.replace(/_/g, " ") };
715
- }
716
- if (fieldName === "created_at" || fieldName === "updated_at" || fieldName.endsWith("_at")) {
717
- return { formatType: "timestamp", displayName: fieldName.replace(/_/g, " ") };
718
- }
719
- if (fieldName.includes("time") && !fieldName.includes("duration")) {
720
- return { formatType: "timestamp" };
721
- }
722
- if (fieldName.includes("duration")) {
723
- return { formatType: "number", description: "Duration in seconds" };
724
- }
725
- if (path.length >= 2 && path[path.length - 2] === "tools" && fieldName === "trace") {
726
- return {
727
- displayName: "\u{1F50D} Execution Trace",
728
- formatType: "json",
729
- description: "Complete execution trace with all steps and timing"
730
- };
731
- }
732
- return null;
733
- }
734
- function formatValue(value, hint) {
735
- if (value === null) return "null";
736
- if (value === void 0) return "undefined";
737
- if (hint?.formatType === "timestamp" && typeof value === "string") {
738
- try {
739
- const date = new Date(value);
740
- if (!isNaN(date.getTime())) {
741
- return `${date.toLocaleString()} (${value})`;
742
- }
743
- } catch {
744
- }
745
- }
746
- if (hint?.formatType === "timestamp" && typeof value === "number") {
747
- const date = new Date(value * 1e3);
748
- return `${date.toLocaleString()} (${value})`;
749
- }
750
- if (hint?.formatType === "id" && typeof value === "string") {
751
- if (value.length > 20) {
752
- return `${value.substring(0, 16)}...${value.substring(value.length - 4)}`;
753
- }
754
- }
755
- if (typeof value === "string") {
756
- if (value.length > 100) {
757
- return `"${value.substring(0, 97)}..." (${value.length} chars)`;
758
- }
759
- return `"${value}"`;
760
- }
761
- return String(value);
762
- }
763
- function MessageJsonTree(props) {
764
- return /* @__PURE__ */ jsxRuntime.jsx(JsonTree, { ...props, resolveHint: getFieldHint, formatValue });
765
- }
766
- var DEFAULT_TIPS_EDITOR_LABELS = {
767
- titleList: "Edit tips",
768
- titleNew: "New tip",
769
- titleEdit: "Edit tip",
770
- descriptionList: "All tips across every page. Change a tip's placement to move it to a page, show it everywhere, or hide it. Changes save instantly.",
771
- descriptionNew: "Create a tip and choose where it shows.",
772
- descriptionEdit: "Editing the tip below \u2014 change its copy, button, or placement.",
773
- hiddenOff: "Hidden (off)",
774
- customSuffix: " \xB7 custom",
775
- editTip: "Edit tip",
776
- deleteTip: "Delete tip",
777
- addTip: "Add tip",
778
- testerTitle: "Run a sequence (test)",
779
- run: "Run",
780
- cancel: "Cancel",
781
- newTipIdentity: "New tip",
782
- customTipIdentity: "Custom tip",
783
- builtInTipIdentity: (code) => `Built-in tip \xB7 ${code}`,
784
- yourNewTip: "Your new tip",
785
- placement: "Placement",
786
- message: "Message",
787
- button: "Button",
788
- noButton: "No button",
789
- platformAction: "Platform action",
790
- actionSequence: "Action sequence",
791
- externalLink: "External link (new window)",
792
- buttonLabel: "Button label",
793
- action: "Action",
794
- sequence: "Sequence",
795
- url: "URL",
796
- back: "Back",
797
- save: "Save",
798
- saving: "Saving\u2026"
799
- };
800
- function SelectField({
801
- label,
802
- value,
803
- onValueChange,
804
- options
805
- }) {
806
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
807
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: label }),
808
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange, children: [
809
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {}) }),
810
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: o.label }, o.value)) })
811
- ] })
812
- ] });
813
- }
814
- var ROW_BUTTON = "size-7 flex-shrink-0 pointer-coarse:size-11";
815
- function TipsEditorDialog({
816
- open,
817
- onOpenChange,
818
- form,
819
- onFormChange,
820
- onFormBack,
821
- onFormSave,
822
- rows,
823
- onEditRow,
824
- onDeleteRow,
825
- onAdd,
826
- busy,
827
- error,
828
- placementOptions,
829
- actionOptions,
830
- sequenceOptions,
831
- activeSequenceId,
832
- onRunSequence,
833
- onCancelSequence,
834
- messageMaxChars,
835
- ctaLabelMaxChars,
836
- labels
837
- }) {
838
- const tipCtaHrefId = react.useId();
839
- const tipCtaLabelId = react.useId();
840
- const tipMessageId = react.useId();
841
- const l = react.useMemo(() => ({ ...DEFAULT_TIPS_EDITOR_LABELS, ...labels }), [labels]);
842
- const isNew = form?.code === null;
843
- const title = form ? isNew ? l.titleNew : l.titleEdit : l.titleList;
844
- const description = form ? isNew ? l.descriptionNew : l.descriptionEdit : l.descriptionList;
845
- const targetOptions = [
846
- { value: "none", label: l.noButton },
847
- { value: "action", label: l.platformAction },
848
- { value: "sequence", label: l.actionSequence },
849
- { value: "url", label: l.externalLink }
850
- ];
851
- return /* @__PURE__ */ jsxRuntime.jsxs(
852
- chunkULWRNGGE_cjs.ModalScaffold,
853
- {
854
- open,
855
- onOpenChange,
856
- title,
857
- description,
858
- showDescription: true,
859
- className: "max-w-lg",
860
- children: [
861
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: error }),
862
- form ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
863
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-l-4 border-l-red-500 bg-muted/40 px-3 py-2", children: [
864
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: isNew ? l.newTipIdentity : form.isCustom ? l.customTipIdentity : l.builtInTipIdentity(form.code ?? "") }),
865
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-sm font-medium text-foreground", children: form.original || l.yourNewTip })
866
- ] }),
867
- /* @__PURE__ */ jsxRuntime.jsx(
868
- SelectField,
869
- {
870
- label: l.placement,
871
- value: form.placement,
872
- onValueChange: (placement) => onFormChange({ placement }),
873
- options: placementOptions
874
- }
875
- ),
876
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
877
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
878
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipMessageId, children: l.message }),
879
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
880
- form.message.length,
881
- "/",
882
- messageMaxChars
883
- ] })
884
- ] }),
885
- /* @__PURE__ */ jsxRuntime.jsx(
886
- ui.Textarea,
887
- {
888
- id: tipMessageId,
889
- value: form.message,
890
- onChange: (e) => onFormChange({ message: e.target.value.slice(0, messageMaxChars) }),
891
- maxLength: messageMaxChars,
892
- rows: 2
893
- }
894
- )
895
- ] }),
896
- /* @__PURE__ */ jsxRuntime.jsx(
897
- SelectField,
898
- {
899
- label: l.button,
900
- value: form.target,
901
- onValueChange: (v) => onFormChange({ target: v }),
902
- options: targetOptions
903
- }
904
- ),
905
- form.target !== "none" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
906
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipCtaLabelId, children: l.buttonLabel }),
907
- /* @__PURE__ */ jsxRuntime.jsx(
908
- ui.Input,
909
- {
910
- id: tipCtaLabelId,
911
- value: form.ctaLabel,
912
- onChange: (e) => onFormChange({ ctaLabel: e.target.value.slice(0, ctaLabelMaxChars) }),
913
- maxLength: ctaLabelMaxChars
914
- }
915
- )
916
- ] }),
917
- form.target === "action" && /* @__PURE__ */ jsxRuntime.jsx(
918
- SelectField,
919
- {
920
- label: l.action,
921
- value: form.ctaAction,
922
- onValueChange: (ctaAction) => onFormChange({ ctaAction }),
923
- options: actionOptions
924
- }
925
- ),
926
- form.target === "sequence" && /* @__PURE__ */ jsxRuntime.jsx(
927
- SelectField,
928
- {
929
- label: l.sequence,
930
- value: form.ctaSequence,
931
- onValueChange: (ctaSequence) => onFormChange({ ctaSequence }),
932
- options: sequenceOptions
933
- }
934
- ),
935
- form.target === "url" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
936
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: tipCtaHrefId, children: l.url }),
937
- /* @__PURE__ */ jsxRuntime.jsx(
938
- ui.Input,
939
- {
940
- id: tipCtaHrefId,
941
- placeholder: "https://\u2026",
942
- value: form.ctaHref,
943
- onChange: (e) => onFormChange({ ctaHref: e.target.value })
944
- }
945
- )
946
- ] }),
947
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
948
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "ghost", onClick: onFormBack, disabled: busy, children: l.back }),
949
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onFormSave, disabled: busy || !form.message.trim(), children: busy ? l.saving : l.save })
950
- ] })
951
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
952
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "max-h-[55dvh] divide-y overflow-y-auto rounded border", children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 p-2 text-sm", children: [
953
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
954
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: ui.cn(row.isHidden && "text-muted-foreground line-through"), children: row.message }),
955
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", children: [
956
- row.isHidden ? l.hiddenOff : row.placementLabel,
957
- row.isCustom && l.customSuffix
958
- ] })
959
- ] }),
960
- /* @__PURE__ */ jsxRuntime.jsx(
961
- ui.Button,
962
- {
963
- size: "icon",
964
- variant: "ghost",
965
- className: ROW_BUTTON,
966
- onClick: () => onEditRow(row.code),
967
- "aria-label": l.editTip,
968
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-3.5" })
969
- }
970
- ),
971
- row.isCustom && /* @__PURE__ */ jsxRuntime.jsx(
972
- ui.Button,
973
- {
974
- size: "icon",
975
- variant: "ghost",
976
- className: ROW_BUTTON,
977
- disabled: busy,
978
- onClick: () => onDeleteRow(row.code),
979
- "aria-label": l.deleteTip,
980
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-3.5" })
981
- }
982
- )
983
- ] }, row.code)) }),
984
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { variant: "outline", size: "sm", onClick: onAdd, children: [
985
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-1 size-4" }),
986
- " ",
987
- l.addTip
988
- ] }),
989
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 rounded border border-dashed p-2", children: [
990
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: l.testerTitle }),
991
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "divide-y rounded border", children: sequenceOptions.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 p-2 text-sm", children: [
992
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: s.label }),
993
- activeSequenceId === s.value ? /* @__PURE__ */ jsxRuntime.jsx(
994
- ui.Button,
995
- {
996
- size: "sm",
997
- variant: "outline",
998
- className: "h-7 flex-shrink-0 pointer-coarse:h-11",
999
- onClick: onCancelSequence,
1000
- children: l.cancel
1001
- }
1002
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1003
- ui.Button,
1004
- {
1005
- size: "sm",
1006
- variant: "outline",
1007
- className: "h-7 flex-shrink-0 pointer-coarse:h-11",
1008
- onClick: () => onRunSequence(s.value),
1009
- children: l.run
1010
- }
1011
- )
1012
- ] }, s.value)) })
1013
- ] })
1014
- ] })
1015
- ]
1016
- }
1017
- );
1018
- }
1019
- var DEFAULT_SYNC_DIALOG_FOOTER_LABELS = {
1020
- cancel: "Cancel",
1021
- save: "Save"
1022
- };
1023
- function SyncDialogFooter({
1024
- onCancel,
1025
- onSave,
1026
- saveDisabled,
1027
- isSaving,
1028
- cancelButton,
1029
- saveButton,
1030
- labels
1031
- }) {
1032
- const l = { ...DEFAULT_SYNC_DIALOG_FOOTER_LABELS, ...labels };
1033
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { "data-slot": "sync-dialog-footer", children: [
1034
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", size: "sm", onClick: onCancel, "data-testid": cancelButton?.testId, children: l.cancel }),
1035
- /* @__PURE__ */ jsxRuntime.jsxs(
1036
- ui.Button,
1037
- {
1038
- size: "sm",
1039
- onClick: onSave,
1040
- disabled: saveDisabled || isSaving,
1041
- "data-testid": saveButton?.testId,
1042
- children: [
1043
- isSaving && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 size-3.5 animate-spin" }),
1044
- l.save
1045
- ]
1046
- }
1047
- )
1048
- ] });
1049
- }
1050
- function SyncDialogBody({ children }) {
1051
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "sync-dialog-body", className: "space-y-4 py-2", children });
1052
- }
1053
- function SyncField({ label, htmlFor, actions, hint, children }) {
1054
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "sync-field", className: "space-y-1.5", children: [
1055
- (label || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn(actions && "flex items-center justify-between"), children: [
1056
- label && /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor, children: label }),
1057
- actions
1058
- ] }),
1059
- children,
1060
- hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: hint })
1061
- ] });
1062
- }
1063
- function SyncLinkButton({
1064
- onClick,
1065
- testId,
1066
- children
1067
- }) {
1068
- return /* @__PURE__ */ jsxRuntime.jsx(
1069
- "button",
1070
- {
1071
- type: "button",
1072
- className: "text-xs font-medium text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:px-1",
1073
- onClick,
1074
- "data-testid": testId,
1075
- children
1076
- }
1077
- );
1078
- }
1079
- function SyncLinkRow({ children }) {
1080
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3", children });
1081
- }
1082
- function SyncSelect({
1083
- id,
1084
- testId,
1085
- value,
1086
- onValueChange,
1087
- options,
1088
- placeholder
1089
- }) {
1090
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange, children: [
1091
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { id, "data-testid": testId, children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { placeholder }) }),
1092
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.value, children: o.label }, o.value)) })
1093
- ] });
1094
- }
1095
- function SyncOptionToggle({
1096
- checked,
1097
- onCheckedChange,
1098
- title,
1099
- description,
1100
- testId
1101
- }) {
1102
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex cursor-pointer items-start gap-2 text-sm", children: [
1103
- /* @__PURE__ */ jsxRuntime.jsx(
1104
- ui.Checkbox,
1105
- {
1106
- className: "mt-0.5",
1107
- checked,
1108
- onCheckedChange: (v) => onCheckedChange(v === true),
1109
- "data-testid": testId
1110
- }
1111
- ),
1112
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1113
- title,
1114
- description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs text-muted-foreground", children: description })
1115
- ] })
1116
- ] });
1117
- }
1118
- function SyncOptions({ children }) {
1119
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "sync-options", className: "space-y-2.5", children });
1120
- }
1121
- function SyncLoading({ children, compact }) {
1122
- return /* @__PURE__ */ jsxRuntime.jsxs(
1123
- "div",
1124
- {
1125
- className: ui.cn("flex items-center gap-2 text-sm text-muted-foreground", !compact && "py-2"),
1126
- children: [
1127
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3.5 animate-spin" }),
1128
- " ",
1129
- children
1130
- ]
1131
- }
1132
- );
1133
- }
1134
- function SyncNote({ children, testId }) {
1135
- return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-2 text-sm text-muted-foreground", "data-testid": testId, children });
1136
- }
1137
- function SyncSmallNote({ children, testId }) {
1138
- return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": testId, children });
1139
- }
1140
- function SyncReconnectNotice({
1141
- message,
1142
- onReconnect,
1143
- isPending,
1144
- testId,
1145
- label = "Reconnect"
1146
- }) {
1147
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 py-2", children: [
1148
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: message }),
1149
- /* @__PURE__ */ jsxRuntime.jsxs(
1150
- ui.Button,
1151
- {
1152
- type: "button",
1153
- size: "sm",
1154
- onClick: onReconnect,
1155
- disabled: isPending,
1156
- "data-testid": testId,
1157
- children: [
1158
- isPending && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 size-3.5 animate-spin" }),
1159
- label
1160
- ]
1161
- }
1162
- )
1163
- ] });
1164
- }
1165
- function SyncTreeFrame({ children }) {
1166
- return /* @__PURE__ */ jsxRuntime.jsx(ui.ScrollArea, { className: "h-72 rounded-md border p-2", children });
1167
- }
1168
- function SyncCheckList({ items, selected, onToggle }) {
1169
- return /* @__PURE__ */ jsxRuntime.jsx(ui.ScrollArea, { className: "max-h-44 rounded-md border border-border", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1 p-2", children: items.map((c) => /* @__PURE__ */ jsxRuntime.jsxs(
1170
- "label",
1171
- {
1172
- className: "flex cursor-pointer items-center gap-2 rounded px-1.5 py-1 text-sm hover:bg-muted/50 pointer-coarse:min-h-11",
1173
- children: [
1174
- /* @__PURE__ */ jsxRuntime.jsx(
1175
- ui.Checkbox,
1176
- {
1177
- checked: selected.includes(c.id),
1178
- onCheckedChange: () => onToggle(c.id),
1179
- "data-testid": c.testId
1180
- }
1181
- ),
1182
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: c.label })
1183
- ]
1184
- },
1185
- c.id
1186
- )) }) });
1187
- }
1188
- var DEFAULT_SYNC_FOLDER_ROW_LABELS = {
1189
- collapse: "Collapse folder",
1190
- expand: "Expand folder",
1191
- loading: "Loading\u2026",
1192
- noSubfolders: "No subfolders"
1193
- };
1194
- var INDENT = 18;
1195
- function SyncFolderRow({
1196
- id,
1197
- name,
1198
- depth,
1199
- hasChildren,
1200
- isExpanded,
1201
- onToggleExpanded,
1202
- isSelectable,
1203
- checked,
1204
- disabled,
1205
- onCheckedChange,
1206
- count,
1207
- isCountLoading,
1208
- children,
1209
- labels
1210
- }) {
1211
- const l = { ...DEFAULT_SYNC_FOLDER_ROW_LABELS, ...labels };
1212
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1213
- /* @__PURE__ */ jsxRuntime.jsxs(
1214
- "div",
1215
- {
1216
- className: "flex items-center gap-1.5 rounded px-1 py-1 text-sm hover:bg-muted/50 pointer-coarse:min-h-11",
1217
- style: { paddingLeft: depth * INDENT + 4 },
1218
- children: [
1219
- hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
1220
- "button",
1221
- {
1222
- type: "button",
1223
- className: "flex size-4 shrink-0 items-center justify-center text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-8",
1224
- onClick: onToggleExpanded,
1225
- "aria-label": isExpanded ? l.collapse : l.expand,
1226
- "aria-expanded": isExpanded,
1227
- children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3.5" })
1228
- }
1229
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0" }),
1230
- isSelectable ? /* @__PURE__ */ jsxRuntime.jsxs(
1231
- "label",
1232
- {
1233
- className: "flex flex-1 cursor-pointer items-center gap-2 truncate",
1234
- "data-testid": `drive-folder-row-${id}`,
1235
- children: [
1236
- /* @__PURE__ */ jsxRuntime.jsx(
1237
- ui.Checkbox,
1238
- {
1239
- checked,
1240
- disabled,
1241
- onCheckedChange,
1242
- "data-testid": `drive-folder-checkbox-${id}`
1243
- }
1244
- ),
1245
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", "data-testid": `drive-folder-name-${id}`, children: name }),
1246
- isCountLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3 shrink-0 animate-spin text-muted-foreground" }) : typeof count === "number" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 text-xs text-muted-foreground", children: [
1247
- "(",
1248
- count.toLocaleString(),
1249
- ")"
1250
- ] }) : null
1251
- ]
1252
- }
1253
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1254
- "span",
1255
- {
1256
- className: "flex flex-1 items-center truncate font-medium text-muted-foreground",
1257
- "data-testid": `drive-folder-row-${id}`,
1258
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", "data-testid": `drive-folder-name-${id}`, children: name })
1259
- }
1260
- )
1261
- ]
1262
- }
1263
- ),
1264
- isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { children })
1265
- ] });
1266
- }
1267
- function SyncFolderStatus({
1268
- depth,
1269
- kind,
1270
- labels
1271
- }) {
1272
- const l = { ...DEFAULT_SYNC_FOLDER_ROW_LABELS, ...labels };
1273
- return /* @__PURE__ */ jsxRuntime.jsx(
1274
- "div",
1275
- {
1276
- className: "flex items-center gap-2 py-1 text-xs text-muted-foreground",
1277
- style: { paddingLeft: (depth + 1) * INDENT + 4 },
1278
- children: kind === "loading" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1279
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-3 animate-spin" }),
1280
- " ",
1281
- l.loading
1282
- ] }) : l.noSubfolders
1283
- }
1284
- );
1285
- }
1286
- function FilterChip({
1287
- label,
1288
- state,
1289
- icon,
1290
- color,
1291
- onDismiss,
1292
- dismissLabel,
1293
- className,
1294
- testId
1295
- }) {
1296
- const isExclude = state === "exclude";
1297
- return /* @__PURE__ */ jsxRuntime.jsxs(
1298
- "span",
1299
- {
1300
- className: ui.cn(
1301
- "inline-flex items-center gap-1 text-xs font-medium rounded px-1.5 py-0.5 flex-shrink-0 border",
1302
- isExclude ? "bg-background text-red-text border-red-text" : "bg-primary text-white border-primary",
1303
- className
1304
- ),
1305
- "data-state": state,
1306
- "data-testid": testId,
1307
- children: [
1308
- color ? (
1309
- /* Filled square for include; empty square for exclude */
1310
- isExclude ? /* @__PURE__ */ jsxRuntime.jsx(
1311
- "span",
1312
- {
1313
- className: "w-3.5 h-3.5 rounded flex-shrink-0 border-2",
1314
- style: { borderColor: color }
1315
- }
1316
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1317
- "span",
1318
- {
1319
- className: "w-3.5 h-3.5 rounded flex items-center justify-center flex-shrink-0",
1320
- style: { backgroundColor: color },
1321
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "w-2.5 h-2.5 text-white", strokeWidth: 3 })
1322
- }
1323
- )
1324
- ) : icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-none", children: icon }),
1325
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate max-w-[80px]", title: label, children: [
1326
- isExclude && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-70 mr-0.5", children: "Not" }),
1327
- label
1328
- ] }),
1329
- onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
1330
- "button",
1331
- {
1332
- type: "button",
1333
- onClick: onDismiss,
1334
- "aria-label": dismissLabel ?? `Remove ${label}`,
1335
- className: "flex-none ml-0.5 opacity-70 hover:opacity-100",
1336
- "data-testid": testId ? `${testId}-remove` : void 0,
1337
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3 w-3", strokeWidth: 2.5 })
1338
- }
1339
- )
1340
- ]
1341
- }
1342
- );
1343
- }
1344
- var planBadgeVariants = classVarianceAuthority.cva(
1345
- "inline-flex flex-shrink-0 items-center rounded-full border font-semibold leading-none",
1346
- {
1347
- variants: {
1348
- /** free/dev = neutral, paid = accent tint, pending = payment trouble or cancelling. */
1349
- tone: {
1350
- free: `border-transparent ${chunk32HW2Q33_cjs.TONE_SURFACE.neutral}`,
1351
- dev: `border-transparent ${chunk32HW2Q33_cjs.TONE_SURFACE.neutral}`,
1352
- paid: "border-transparent bg-accent text-accent-foreground",
1353
- pending: `${chunk32HW2Q33_cjs.TONE_BORDER.warning} ${chunk32HW2Q33_cjs.TONE_SURFACE.warning}`
1354
- },
1355
- /** `sm` fits dense rows and tables; `md` holds its own beside body text. */
1356
- size: {
1357
- sm: "h-5 px-2 text-xs",
1358
- md: "h-6 px-2.5 text-sm"
1359
- }
1360
- },
1361
- defaultVariants: { tone: "free", size: "sm" }
1362
- }
1363
- );
1364
- function PlanBadge({
1365
- label,
1366
- tone,
1367
- size,
1368
- className,
1369
- testId = "project-plan-chip"
1370
- }) {
1371
- return /* @__PURE__ */ jsxRuntime.jsx(
1372
- "span",
1373
- {
1374
- "data-slot": "plan-badge",
1375
- className: ui.cn(planBadgeVariants({ tone, size }), className),
1376
- "data-testid": testId,
1377
- children: label
1378
- }
1379
- );
1380
- }
1381
- function MoreInfo({
1382
- title,
1383
- children,
1384
- label = "More info",
1385
- testId = "more-info",
1386
- className
1387
- }) {
1388
- const [open, setOpen] = react.useState(false);
1389
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1390
- /* @__PURE__ */ jsxRuntime.jsxs(
1391
- "button",
1392
- {
1393
- type: "button",
1394
- onClick: () => setOpen(true),
1395
- className: ui.cn(
1396
- "inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-sm text-xs font-medium text-muted-foreground underline-offset-2 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
1397
- className
1398
- ),
1399
- "data-slot": "more-info",
1400
- "data-testid": testId,
1401
- children: [
1402
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, { className: "size-3.5", "aria-hidden": true }),
1403
- label
1404
- ]
1405
- }
1406
- ),
1407
- /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "sm:max-w-md", "data-testid": `${testId}-dialog`, children: [
1408
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
1409
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title }),
1410
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: title })
1411
- ] }),
1412
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3 text-sm leading-relaxed text-muted-foreground", children })
1413
- ] }) })
1414
- ] });
1415
- }
1416
- function MoreInfoList({ items }) {
1417
- return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2", "data-slot": "more-info-list", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
1418
- item.term && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium text-foreground", children: [
1419
- item.term,
1420
- ". "
1421
- ] }),
1422
- item.text
1423
- ] }, item.term ?? i)) });
1424
- }
1425
- var barColor = (pct) => pct >= 100 ? "bg-red-500" : pct >= 50 ? "bg-yellow-500" : "bg-primary";
1426
- var valueColor2 = (pct) => pct >= 100 ? "text-red-text" : pct >= 80 ? "text-yellow-text" : "text-muted-foreground";
1427
- function QuotaMeter({
1428
- items,
1429
- size = "sm",
1430
- showTooltips = true,
1431
- showBars = true,
1432
- showPercent = true,
1433
- className,
1434
- testIds
1435
- }) {
1436
- if (size === "lg") {
1437
- return /* @__PURE__ */ jsxRuntime.jsx(
1438
- "div",
1439
- {
1440
- "data-slot": "quota-meter",
1441
- className: ui.cn("flex flex-wrap gap-3", className),
1442
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.root, { testId: "quota-badges-lg" }),
1443
- children: items.map(({ key, icon: Icon, label, usedOfLimit, pct }) => /* @__PURE__ */ jsxRuntime.jsxs(
1444
- "div",
1445
- {
1446
- className: "min-w-[8rem] flex-1 rounded-lg bg-muted p-3",
1447
- "data-testid": chunkMHVNT4J3_cjs.prefixedTestId(testIds?.badge, key, { testId: `quota-badge-${key}` }),
1448
- children: [
1449
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
1450
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 flex-shrink-0" }),
1451
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
1452
- ] }),
1453
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-lg font-semibold tabular-nums text-foreground", children: usedOfLimit }),
1454
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 h-1.5 overflow-hidden rounded-full bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(
1455
- "div",
1456
- {
1457
- className: ui.cn("h-full rounded-full", barColor(pct)),
1458
- style: { width: `${Math.min(pct, 100)}%` },
1459
- "data-testid": chunkMHVNT4J3_cjs.prefixedTestId(
1460
- testIds?.badge,
1461
- key,
1462
- { testId: `quota-badge-${key}-fill` },
1463
- "-fill"
1464
- )
1465
- }
1466
- ) })
1467
- ]
1468
- },
1469
- key
1470
- ))
1471
- }
1472
- );
1473
- }
1474
- return /* @__PURE__ */ jsxRuntime.jsx(
1475
- "div",
1476
- {
1477
- "data-slot": "quota-meter",
1478
- className: ui.cn("flex flex-shrink-0 items-center gap-3 text-sm tabular-nums", className),
1479
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.root, { testId: "quota-badges-sm" }),
1480
- children: items.map(({ key, icon: Icon, label, used, usedOfLimit, pct }) => {
1481
- const badge = /* @__PURE__ */ jsxRuntime.jsxs(
1482
- "span",
1483
- {
1484
- className: "inline-flex items-center gap-1",
1485
- "data-testid": chunkMHVNT4J3_cjs.prefixedTestId(testIds?.badge, key, { testId: `quota-badge-${key}` }),
1486
- children: [
1487
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4 flex-shrink-0 text-muted-foreground" }),
1488
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: showBars ? valueColor2(pct) : "text-muted-foreground", children: showBars && showPercent ? `${used} (${Math.round(pct)}%)` : used })
1489
- ]
1490
- }
1491
- );
1492
- return showTooltips ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
1493
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: badge }),
1494
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: `${usedOfLimit} ${label}` })
1495
- ] }, key) : /* @__PURE__ */ jsxRuntime.jsx(react.Fragment, { children: badge }, key);
1496
- })
1497
- }
1498
- );
1499
- }
1500
- var DEFAULT_PLAN_CARD_LABELS = {
1501
- currentPlan: "Current plan",
1502
- popular: "Popular",
1503
- noMonthlyCost: "\xA30",
1504
- perMonth: "/mo",
1505
- current: "Current",
1506
- monthly: "Monthly",
1507
- annual: "Annual",
1508
- annualBilling: "Annual billing",
1509
- save: (percent) => `Save ${percent}%`,
1510
- havePromoCode: "Have a promo code?",
1511
- promoCode: "Promo Code",
1512
- enterCode: "Enter code",
1513
- pricingExplainer: "How pricing works",
1514
- explainerTiers: [
1515
- "AI usage and storage are shared by everyone in the project. AI usage resets monthly.",
1516
- "Need more? Add \xA325 of AI usage or 25 GB at a time, at checkout or later. Add-ons renew with the plan until you reduce them.",
1517
- "Automatic top-ups add one more step when you run low, up to your monthly usage cap (\xA3100 by default; \xA30 = none; or no limit). Adding by hand is never capped.",
1518
- "Add-ons start now: AI usage is charged in full, storage only for the rest of the period. Downgrades, billing switches and reductions start at the end of the period. No refunds.",
1519
- "Annual plans are 25% off, add-ons included.",
1520
- "Prices are shown + VAT; the total for your country is shown before you pay."
1521
- ],
1522
- explainerAiUsage: "About 1p of AI usage buys one moderately complex request, or reading ~25 documents, on a Standard model. Premium models can cost 10\u2013100\xD7 more.",
1523
- seeModelList: "AI model prices \u2192"
1524
- };
1525
- function PlanCard({ plan, onSelect, labels }) {
1526
- const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
1527
- const { id, name, isFree, isCurrent, isSelected, isPopular, price, features } = plan;
1528
- return /* @__PURE__ */ jsxRuntime.jsxs(
1529
- "button",
1530
- {
1531
- type: "button",
1532
- disabled: isCurrent,
1533
- "aria-pressed": !!isSelected,
1534
- onClick: () => !isCurrent && onSelect(id),
1535
- "data-slot": "plan-card",
1536
- "data-testid": `tier-card-${id}`,
1537
- className: ui.cn(
1538
- "relative flex flex-col justify-start rounded-lg p-4 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1539
- isCurrent ? "cursor-default bg-blue-bg" : isSelected ? "bg-accent ring-1 ring-primary/50" : "bg-muted hover:bg-muted/70"
1540
- ),
1541
- children: [
1542
- isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-3 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full bg-blue-bg px-3 py-1 text-xs font-semibold leading-none text-blue-text", children: l.currentPlan }),
1543
- isPopular && !isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-3 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full bg-primary px-3 py-1 text-xs font-semibold leading-none text-primary-foreground", children: l.popular }),
1544
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-baseline gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
1545
- "span",
1546
- {
1547
- className: ui.cn(
1548
- "text-lg font-semibold leading-none tracking-tight",
1549
- isCurrent ? "text-blue-text" : "text-foreground"
1550
- ),
1551
- children: name
1552
- }
1553
- ) }),
1554
- isFree ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-2xl font-semibold leading-none tabular-nums text-foreground", children: [
1555
- l.noMonthlyCost,
1556
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-sm font-medium text-muted-foreground", children: l.perMonth })
1557
- ] }) : price && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
1558
- price.annual && price.yearlyTotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-x-2 whitespace-nowrap text-base tabular-nums", children: [
1559
- price.yearlyStrike && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-muted-foreground line-through decoration-muted-foreground/70 decoration-1", children: price.yearlyStrike }),
1560
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg font-semibold text-foreground", children: [
1561
- price.yearlyTotal,
1562
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-xs font-semibold text-muted-foreground", children: price.intervalLabel })
1563
- ] })
1564
- ] }),
1565
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-x-1.5 whitespace-nowrap", children: [
1566
- price.annual && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xl font-semibold leading-none text-muted-foreground", children: "=" }),
1567
- price.monthlyStrike && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-medium tabular-nums text-muted-foreground line-through decoration-muted-foreground/70 decoration-1", children: price.monthlyStrike }),
1568
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-2xl font-semibold leading-none tabular-nums text-foreground", children: [
1569
- price.monthly,
1570
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-0.5 text-sm font-medium text-muted-foreground", children: [
1571
- l.perMonth,
1572
- price.taxLabel && ` ${price.taxLabel}`
1573
- ] })
1574
- ] })
1575
- ] }),
1576
- price.note && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground", "data-slot": "plan-card-price-note", children: price.note })
1577
- ] }),
1578
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-4 space-y-1 border-t border-border pt-4 text-sm text-foreground", children: features.map((feature) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: feature }, feature)) })
1579
- ]
1580
- }
1581
- );
1582
- }
1583
- function PlanCardGrid({
1584
- plans,
1585
- onSelect,
1586
- labels
1587
- }) {
1588
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "@container space-y-2", "data-slot": "plan-card-grid", children: /* @__PURE__ */ jsxRuntime.jsx(
1589
- "div",
1590
- {
1591
- className: ui.cn(
1592
- "grid gap-2",
1593
- plans.length === 4 ? "grid-cols-1 @xl:grid-cols-2 @4xl:grid-cols-4" : plans.length === 2 ? "grid-cols-1 @xl:grid-cols-2" : "grid-cols-1 @2xl:grid-cols-3"
1594
- ),
1595
- children: plans.map((plan) => /* @__PURE__ */ jsxRuntime.jsx(PlanCard, { plan, onSelect, labels }, plan.id))
1596
- }
1597
- ) });
1598
- }
1599
- function PlanTierOption({
1600
- option,
1601
- onSelect,
1602
- labels
1603
- }) {
1604
- const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
1605
- return /* @__PURE__ */ jsxRuntime.jsxs(
1606
- "button",
1607
- {
1608
- type: "button",
1609
- onClick: () => onSelect(option.id),
1610
- "aria-pressed": option.isSelected,
1611
- "data-slot": "plan-tier-option",
1612
- "data-testid": `tier-option-${option.id}`,
1613
- className: ui.cn(
1614
- "flex w-full items-center justify-between rounded-lg p-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
1615
- option.isSelected ? "bg-accent ring-1 ring-primary/50" : "bg-muted hover:bg-muted/70"
1616
- ),
1617
- children: [
1618
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
1619
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-semibold text-foreground", children: option.name }),
1620
- option.isCurrent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-background px-1.5 py-0.5 text-xs font-medium text-muted-foreground", children: l.current }),
1621
- option.isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4 text-primary" })
1622
- ] }),
1623
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-right", children: [
1624
- option.total && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-semibold tabular-nums", children: [
1625
- option.total,
1626
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-normal text-muted-foreground", children: option.intervalLabel })
1627
- ] }),
1628
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs tabular-nums text-muted-foreground", children: option.summary })
1629
- ] })
1630
- ]
1631
- }
1632
- );
1633
- }
1634
- function PricingToggle({
1635
- isAnnual,
1636
- onToggle,
1637
- savingsPercent,
1638
- labels
1639
- }) {
1640
- const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
1641
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
1642
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: isAnnual ? "text-muted-foreground" : "font-medium", children: l.monthly }),
1643
- /* @__PURE__ */ jsxRuntime.jsx(
1644
- "button",
1645
- {
1646
- type: "button",
1647
- role: "switch",
1648
- "aria-checked": isAnnual,
1649
- "aria-label": l.annualBilling,
1650
- onClick: onToggle,
1651
- className: ui.cn(
1652
- "relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1653
- isAnnual ? "bg-primary" : "bg-muted"
1654
- ),
1655
- children: /* @__PURE__ */ jsxRuntime.jsx(
1656
- "span",
1657
- {
1658
- className: ui.cn(
1659
- "inline-block h-3 w-3 transform rounded-full bg-card transition-transform",
1660
- isAnnual ? "translate-x-5" : "translate-x-1"
1661
- )
1662
- }
1663
- )
1664
- }
1665
- ),
1666
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: isAnnual ? "font-medium" : "text-muted-foreground", children: l.annual }),
1667
- savingsPercent != null && savingsPercent > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-green-bg px-1.5 py-0.5 text-sm font-semibold leading-none text-green-text", children: l.save(savingsPercent) })
1668
- ] });
1669
- }
1670
- function PromoCodeInput({
1671
- value,
1672
- onChange,
1673
- labels
1674
- }) {
1675
- const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
1676
- const [expanded, setExpanded] = react.useState(false);
1677
- if (!expanded) {
1678
- return /* @__PURE__ */ jsxRuntime.jsxs(
1679
- "button",
1680
- {
1681
- type: "button",
1682
- onClick: () => setExpanded(true),
1683
- className: "flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground pointer-coarse:min-h-11",
1684
- children: [
1685
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Tag, { className: "h-3 w-3" }),
1686
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: l.havePromoCode })
1687
- ]
1688
- }
1689
- );
1690
- }
1691
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
1692
- /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-sm text-muted-foreground", children: l.promoCode }),
1693
- /* @__PURE__ */ jsxRuntime.jsx(
1694
- ui.Input,
1695
- {
1696
- value,
1697
- onChange: (e) => onChange(e.target.value),
1698
- placeholder: l.enterCode,
1699
- className: "h-8 text-sm",
1700
- autoFocus: true
1701
- }
1702
- )
1703
- ] });
1704
- }
1705
- function PlanInfoPopover({
1706
- onOpenModelList,
1707
- labels
1708
- }) {
1709
- const l = react.useMemo(() => ({ ...DEFAULT_PLAN_CARD_LABELS, ...labels }), [labels]);
1710
- return /* @__PURE__ */ jsxRuntime.jsxs(MoreInfo, { title: l.pricingExplainer, label: l.pricingExplainer, testId: "pricing-explainer", children: [
1711
- /* @__PURE__ */ jsxRuntime.jsx(MoreInfoList, { items: l.explainerTiers.map((text) => ({ text })) }),
1712
- /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
1713
- l.explainerAiUsage,
1714
- " ",
1715
- /* @__PURE__ */ jsxRuntime.jsx(
1716
- "button",
1717
- {
1718
- type: "button",
1719
- onClick: onOpenModelList,
1720
- className: "font-medium text-foreground underline underline-offset-2 hover:text-primary/80",
1721
- children: l.seeModelList
1722
- }
1723
- )
1724
- ] })
1725
- ] });
1726
- }
1727
- var DEFAULT_REFERRAL_REWARD_LABELS = {
1728
- badgeTitle: "Reward \u2014 automatically applied to your invoice period",
1729
- badge: (amount) => `${amount} reward`,
1730
- subtotal: "Subtotal",
1731
- reward: "Reward",
1732
- youPayNow: "You pay now",
1733
- rollover: (amount) => `${amount} reward rolls over to your next invoice.`,
1734
- applied: (amount) => `${amount} reward applied automatically to your invoice period.`,
1735
- note: (amount) => `Your ${amount} reward applies to your invoice period.`
1736
- };
1737
- function ReferralRewardBadge({
1738
- amountLabel,
1739
- labels,
1740
- testId
1741
- }) {
1742
- const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
1743
- return /* @__PURE__ */ jsxRuntime.jsxs(
1744
- "span",
1745
- {
1746
- className: "flex h-8 items-center gap-1.5 rounded-full bg-green-bg px-2.5 text-sm font-medium text-green-text",
1747
- title: l.badgeTitle,
1748
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-badge" }),
1749
- children: [
1750
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5" }),
1751
- l.badge(amountLabel)
1752
- ]
1753
- }
1754
- );
1755
- }
1756
- function ReferralRewardSummary({
1757
- amountLabel,
1758
- breakdown,
1759
- labels,
1760
- testId,
1761
- testIds
1762
- }) {
1763
- const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
1764
- return /* @__PURE__ */ jsxRuntime.jsx(
1765
- "div",
1766
- {
1767
- className: "rounded-lg bg-green-bg/60 p-3 text-sm",
1768
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-summary" }),
1769
- children: breakdown ? /* @__PURE__ */ jsxRuntime.jsxs("dl", { className: "space-y-1 tabular-nums", children: [
1770
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-muted-foreground", children: [
1771
- /* @__PURE__ */ jsxRuntime.jsx("dt", { children: l.subtotal }),
1772
- /* @__PURE__ */ jsxRuntime.jsx("dd", { children: breakdown.subtotal })
1773
- ] }),
1774
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-green-text", children: [
1775
- /* @__PURE__ */ jsxRuntime.jsxs("dt", { className: "flex items-center gap-1.5", children: [
1776
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5" }),
1777
- l.reward
1778
- ] }),
1779
- /* @__PURE__ */ jsxRuntime.jsxs("dd", { "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.applied, { testId: "referral-reward-applied" }), children: [
1780
- "\u2212",
1781
- breakdown.reward
1782
- ] })
1783
- ] }),
1784
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-green-border pt-1 font-semibold text-foreground", children: [
1785
- /* @__PURE__ */ jsxRuntime.jsx("dt", { children: l.youPayNow }),
1786
- /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.youPay, { testId: "referral-reward-you-pay" }), children: breakdown.youPay })
1787
- ] }),
1788
- breakdown.rollover && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "pt-0.5 text-xs font-normal text-muted-foreground", children: l.rollover(breakdown.rollover) })
1789
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 font-medium text-green-text", children: [
1790
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5 shrink-0" }),
1791
- l.applied(amountLabel)
1792
- ] })
1793
- }
1794
- );
1795
- }
1796
- function ReferralRewardNote({
1797
- amountLabel,
1798
- labels,
1799
- testId
1800
- }) {
1801
- const l = react.useMemo(() => ({ ...DEFAULT_REFERRAL_REWARD_LABELS, ...labels }), [labels]);
1802
- return /* @__PURE__ */ jsxRuntime.jsxs(
1803
- "p",
1804
- {
1805
- className: "flex items-center gap-1.5 text-sm text-green-text",
1806
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "referral-reward-note" }),
1807
- children: [
1808
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-3.5 w-3.5 shrink-0" }),
1809
- l.note(amountLabel)
1810
- ]
1811
- }
1812
- );
1813
- }
1814
- var DEFAULT_CONNECTION_CARD_LABELS = {
1815
- connectedAs: (identity) => `Connected as ${identity}`,
1816
- justConnected: "Just connected \u2713",
1817
- connected: "Connected",
1818
- disconnect: "Disconnect",
1819
- connect: "Connect",
1820
- organisationAccount: "Organisation account",
1821
- readOnlyLead: "Read-only.",
1822
- readOnlyBody: " ARBI only imports a copy of your email and files. It can\u2019t modify or delete anything in your account, and deleting an imported document here never affects the original."
1823
- };
1824
- function ConnectionCard({
1825
- connection,
1826
- onConnect,
1827
- onDisconnect,
1828
- labels
1829
- }) {
1830
- const l = react.useMemo(() => ({ ...DEFAULT_CONNECTION_CARD_LABELS, ...labels }), [labels]);
1831
- const { id, status } = connection;
1832
- const isConnected = status === "connected";
1833
- return /* @__PURE__ */ jsxRuntime.jsxs(
1834
- "div",
1835
- {
1836
- "data-slot": "connection-card",
1837
- className: "rounded-lg bg-background px-5 py-4",
1838
- "data-testid": `connector-card-${id}`,
1839
- children: [
1840
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
1841
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: connection.iconUrl ? /* @__PURE__ */ jsxRuntime.jsx(
1842
- "img",
1843
- {
1844
- src: connection.iconUrl,
1845
- alt: connection.iconAlt ?? connection.title,
1846
- className: "h-6 w-6 rounded object-contain"
1847
- }
1848
- ) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlugIcon, { className: "h-5 w-5" }) }),
1849
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
1850
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-sm font-semibold text-foreground", children: connection.title }),
1851
- connection.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-sm text-muted-foreground", children: connection.description }),
1852
- isConnected && connection.identity && /* @__PURE__ */ jsxRuntime.jsx(
1853
- "p",
1854
- {
1855
- className: "mt-1 text-xs text-muted-foreground",
1856
- "data-testid": `connector-identity-${id}`,
1857
- children: l.connectedAs(connection.identity)
1858
- }
1859
- ),
1860
- connection.warning && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-yellow-text", children: connection.warning }),
1861
- connection.note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: connection.note })
1862
- ] }),
1863
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 flex-col items-end gap-2", children: [
1864
- (isConnected || connection.justConnected) && /* @__PURE__ */ jsxRuntime.jsx(
1865
- chunkDVUZTGVL_cjs.ToneBadge,
1866
- {
1867
- tone: "success",
1868
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle2, { className: "h-3 w-3", "aria-hidden": "true" }),
1869
- children: connection.justConnected ? l.justConnected : l.connected
1870
- }
1871
- ),
1872
- isConnected ? /* @__PURE__ */ jsxRuntime.jsxs(
1873
- ui.Button,
1874
- {
1875
- variant: "outline",
1876
- size: "sm",
1877
- onClick: () => onDisconnect(id),
1878
- disabled: connection.isDisconnecting,
1879
- className: "text-destructive hover:bg-destructive/10 hover:text-destructive",
1880
- "data-testid": `connector-disconnect-${id}`,
1881
- children: [
1882
- connection.isDisconnecting && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" }),
1883
- l.disconnect
1884
- ]
1885
- }
1886
- ) : status === "available" ? /* @__PURE__ */ jsxRuntime.jsxs(
1887
- ui.Button,
1888
- {
1889
- variant: "outline",
1890
- size: "sm",
1891
- onClick: () => onConnect(id),
1892
- className: "gap-1.5",
1893
- "data-testid": `connector-connect-${id}`,
1894
- children: [
1895
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "h-3.5 w-3.5" }),
1896
- l.connect
1897
- ]
1898
- }
1899
- ) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "outline", className: "text-muted-foreground", children: l.organisationAccount })
1900
- ] })
1901
- ] }),
1902
- connection.showReadOnlyNotice && isConnected && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-start gap-2 rounded-md bg-blue-bg px-3 py-2 text-xs text-blue-text", children: [
1903
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "mt-0.5 h-4 w-4 shrink-0" }),
1904
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1905
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: l.readOnlyLead }),
1906
- l.readOnlyBody
1907
- ] })
1908
- ] })
1909
- ]
1910
- }
1911
- );
1912
- }
1913
- function ConnectionsEmpty({ message }) {
1914
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2 py-8 text-center", children: [
1915
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plug, { className: "h-8 w-8 text-muted-foreground/40" }),
1916
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: message })
1917
- ] });
1918
- }
1919
- function ConnectionsLoading({ message }) {
1920
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-12 text-muted-foreground", children: [
1921
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-4 w-4 animate-spin" }),
1922
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: message })
1923
- ] });
1924
- }
1925
- function ConnectionsError({ message }) {
1926
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 rounded-lg bg-destructive/10 px-4 py-3 text-sm text-destructive", children: [
1927
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "h-4 w-4 shrink-0" }),
1928
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: message })
1929
- ] });
1930
- }
1931
- var DEFAULT_PROJECT_LIST_LABELS = {
1932
- loading: "Loading projects...",
1933
- empty: "No projects yet. Create one to get started.",
1934
- filteredOut: "No projects match the filter."
1935
- };
1936
- var DEFAULT_SHARED_PROJECTS_SECTION_LABELS = {
1937
- title: "Shared with you"
1938
- };
1939
- var DEFAULT_PROJECT_DETAIL_HEADER_LABELS = {
1940
- renameProject: "Rename project"
1941
- };
1942
- var DEFAULT_RENAME_DIALOG_LABELS = {
1943
- title: "Rename project",
1944
- description: "Enter a new name.",
1945
- cancel: "Cancel",
1946
- save: "Save"
1947
- };
1948
- function ProjectRow({ testId, onOpen, identity, summary, usage, actions }) {
1949
- const handleKeyDown = (e) => {
1950
- if (e.key === "Enter" || e.key === " ") {
1951
- e.preventDefault();
1952
- onOpen();
1953
- }
1954
- };
1955
- return /* @__PURE__ */ jsxRuntime.jsxs(
1956
- "div",
1957
- {
1958
- role: "button",
1959
- tabIndex: 0,
1960
- onClick: onOpen,
1961
- onKeyDown: handleKeyDown,
1962
- "data-slot": "project-row",
1963
- "data-testid": testId,
1964
- className: "group flex cursor-pointer flex-wrap items-center gap-x-3 gap-y-3 px-3 py-3 transition-colors hover:bg-muted/50 focus:bg-muted/50 focus:outline-none pointer-coarse:min-h-11",
1965
- children: [
1966
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 items-center", children: identity }),
1967
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
1968
- summary && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden items-center gap-3 md:flex", children: summary }),
1969
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", onClick: (e) => e.stopPropagation(), children: actions }),
1970
- usage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "basis-full", children: usage })
1971
- ]
1972
- }
1973
- );
1974
- }
1975
- function ProjectList({
1976
- isLoading,
1977
- isEmpty,
1978
- isFilteredOut,
1979
- children,
1980
- testId = "projects-list",
1981
- labels
1982
- }) {
1983
- const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_LIST_LABELS, ...labels }), [labels]);
1984
- const message = isLoading ? l.loading : isEmpty ? l.empty : isFilteredOut ? l.filteredOut : null;
1985
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": testId, children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 px-3 py-4", "aria-busy": "true", children: [
1986
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: message }),
1987
- [0, 1].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", "aria-hidden": "true", children: [
1988
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-40 animate-pulse rounded-md bg-muted" }),
1989
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
1990
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-48 animate-pulse rounded-md bg-muted" })
1991
- ] }, i))
1992
- ] }) : message ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-3 py-6 text-sm text-muted-foreground", children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border", children }) });
1993
- }
1994
- function SharedProjectsSection({
1995
- title,
1996
- footnote,
1997
- children,
1998
- testId = "shared-projects",
1999
- labels
2000
- }) {
2001
- const l = react.useMemo(() => ({ ...DEFAULT_SHARED_PROJECTS_SECTION_LABELS, ...labels }), [labels]);
2002
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-2", "data-testid": testId, children: [
2003
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "px-1 text-sm font-semibold text-foreground", children: title ?? l.title }),
2004
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border", children }),
2005
- footnote && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-muted-foreground", children: footnote })
2006
- ] });
2007
- }
2008
- function SharedProjectRow({
2009
- testId,
2010
- identity,
2011
- allowance
2012
- }) {
2013
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4 px-3 py-2.5", "data-testid": testId, children: [
2014
- identity,
2015
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ml-auto w-44", children: allowance })
2016
- ] });
2017
- }
2018
- function ProjectDetailHeader({
2019
- icon,
2020
- name,
2021
- badge,
2022
- onRename,
2023
- action,
2024
- labels
2025
- }) {
2026
- const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_DETAIL_HEADER_LABELS, ...labels }), [labels]);
2027
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
2028
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-3", children: [
2029
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-primary [&>svg]:h-8 [&>svg]:w-8", children: icon }),
2030
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group flex items-center gap-2", children: [
2031
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "truncate text-xl font-semibold text-foreground", title: name, children: name }),
2032
- /* @__PURE__ */ jsxRuntime.jsx(
2033
- ui.Button,
2034
- {
2035
- variant: "ghost",
2036
- size: "icon",
2037
- className: "h-6 w-6 shrink-0 text-muted-foreground opacity-0 transition-opacity hover:text-primary focus-visible:opacity-100 [.group:hover_&]:opacity-100 [@media(hover:none)]:opacity-100",
2038
- title: l.renameProject,
2039
- "aria-label": l.renameProject,
2040
- "data-testid": "project-detail-rename",
2041
- onClick: onRename,
2042
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "h-3.5 w-3.5" })
2043
- }
2044
- ),
2045
- badge
2046
- ] }) })
2047
- ] }),
2048
- action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0", children: action })
2049
- ] });
2050
- }
2051
- function ProjectDetailSection({
2052
- title,
2053
- className,
2054
- children
2055
- }) {
2056
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: ui.cn("rounded-lg border border-border bg-card shadow-xs p-5", className), children: [
2057
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-4 text-base font-semibold text-foreground", children: title }),
2058
- children
2059
- ] });
2060
- }
2061
- function RenameDialog({
2062
- open,
2063
- onClose,
2064
- title,
2065
- value,
2066
- onChange,
2067
- onSave,
2068
- isSaving,
2069
- testId,
2070
- dialogTestId,
2071
- fieldLabel,
2072
- placeholder,
2073
- canSave = true,
2074
- labels
2075
- }) {
2076
- const renameInputId = react.useId();
2077
- const l = react.useMemo(() => ({ ...DEFAULT_RENAME_DIALOG_LABELS, ...labels }), [labels]);
2078
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", "data-testid": dialogTestId, children: [
2079
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
2080
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title ?? l.title }),
2081
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
2082
- ] }),
2083
- fieldLabel && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: renameInputId, className: "block text-sm font-medium", children: fieldLabel }),
2084
- /* @__PURE__ */ jsxRuntime.jsx(
2085
- ui.Input,
2086
- {
2087
- id: renameInputId,
2088
- value,
2089
- onChange: (e) => onChange(e.target.value),
2090
- placeholder,
2091
- autoFocus: true,
2092
- onKeyDown: (e) => {
2093
- if (e.key === "Enter") onSave();
2094
- if (e.key === "Escape") onClose();
2095
- },
2096
- "data-testid": testId
2097
- }
2098
- ),
2099
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
2100
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, children: l.cancel }),
2101
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onSave, disabled: isSaving || !canSave, children: l.save })
2102
- ] })
2103
- ] }) });
2104
- }
2105
- var DEFAULT_SUPPORT_PANEL_LABELS = {
2106
- support: "Support",
2107
- userGuide: "User Guide"
2108
- };
2109
- function SupportPanel({
2110
- activeTab,
2111
- onTabChange,
2112
- buildInfo = [],
2113
- modeSwitcher,
2114
- feedback,
2115
- isFeedbackLoading,
2116
- loadingIndicator,
2117
- guide,
2118
- testId = "feedback-modal",
2119
- labels
2120
- }) {
2121
- const l = react.useMemo(() => ({ ...DEFAULT_SUPPORT_PANEL_LABELS, ...labels }), [labels]);
2122
- const tabs = react.useMemo(
2123
- () => [
2124
- {
2125
- id: "feedback",
2126
- label: l.support,
2127
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleQuestionMark, { className: "h-4 w-4" }),
2128
- tooltip: l.support
2129
- },
2130
- {
2131
- id: "guide",
2132
- label: l.userGuide,
2133
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpen, { className: "h-4 w-4" }),
2134
- tooltip: l.userGuide
2135
- }
2136
- ],
2137
- [l]
2138
- );
2139
- return /* @__PURE__ */ jsxRuntime.jsxs(
2140
- "div",
2141
- {
2142
- className: "@container flex h-full flex-col bg-background",
2143
- "data-testid": testId,
2144
- "data-slot": "support-panel",
2145
- children: [
2146
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
2147
- chunk7RGLTF76_cjs.TabHeader,
2148
- {
2149
- tabs,
2150
- activeTabId: activeTab,
2151
- onTabChange: (id) => onTabChange(id),
2152
- rightContent: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2153
- buildInfo.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden text-right font-mono text-xs leading-tight text-muted-foreground/70 @2xl:block", children: buildInfo.map((line) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: line }, line)) }),
2154
- modeSwitcher
2155
- ] }),
2156
- compactBreakpoint: 360
2157
- }
2158
- ) }),
2159
- activeTab === "feedback" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-h-0 flex-1", children: [
2160
- isFeedbackLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background", children: loadingIndicator }),
2161
- feedback
2162
- ] }),
2163
- activeTab === "guide" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto p-4", children: guide })
2164
- ]
2165
- }
2166
- );
2167
- }
2168
- function SupportUnavailable({ title, message }) {
2169
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center p-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2170
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-lg font-semibold", children: title }),
2171
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: message })
2172
- ] }) });
2173
- }
2174
- var DEFAULT_WELCOME_DIALOG_LABELS = {
2175
- welcome: (firstName) => `Welcome${firstName ? `, ${firstName}` : ""}!`,
2176
- description: "Your plan, usage and rewards at a glance.",
2177
- currentPlan: "Current plan",
2178
- seeUpgradeOptions: "See upgrade options",
2179
- referralBefore: "Get ",
2180
- referralAfter: " for every invited contact who goes Pro.",
2181
- inviteContact: "Invite contact",
2182
- currentRewards: "Current rewards: ",
2183
- continue: "Continue"
2184
- };
2185
- var DEFAULT_INVITE_CONTACTS_DIALOG_LABELS = {
2186
- title: "Invite contacts",
2187
- description: "Invite contacts by email and earn the referral reward."
2188
- };
2189
- function WelcomeDialog({
2190
- open,
2191
- onClose,
2192
- firstName,
2193
- hasReward,
2194
- projectPicker,
2195
- planBadge,
2196
- quotas,
2197
- onSeePlans,
2198
- referralOfferLabel,
2199
- onInvite,
2200
- rewardBalanceLabel,
2201
- labels,
2202
- testId,
2203
- testIds
2204
- }) {
2205
- const l = react.useMemo(() => ({ ...DEFAULT_WELCOME_DIALOG_LABELS, ...labels }), [labels]);
2206
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(
2207
- ui.DialogContent,
2208
- {
2209
- className: "sm:max-w-md",
2210
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "welcome-modal" }),
2211
- hideCloseButton: true,
2212
- children: [
2213
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
2214
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-wrap items-start justify-between gap-2", children: [
2215
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogTitle, { className: "flex items-center gap-2", children: [
2216
- hasReward ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-5 w-5 text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-5 w-5 text-yellow-text" }),
2217
- l.welcome(firstName)
2218
- ] }),
2219
- projectPicker
2220
- ] }),
2221
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
2222
- ] }),
2223
- /* @__PURE__ */ jsxRuntime.jsxs(
2224
- chunkULWRNGGE_cjs.ModalSection,
2225
- {
2226
- className: "space-y-4",
2227
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.copy, { testId: "welcome-modal-copy" }),
2228
- children: [
2229
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2230
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: l.currentPlan }),
2231
- planBadge
2232
- ] }),
2233
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: quotas.map((quota) => /* @__PURE__ */ jsxRuntime.jsx(
2234
- chunkQZTNTP75_cjs.UsageMeter,
2235
- {
2236
- icon: quota.icon,
2237
- label: quota.label,
2238
- value: quota.value,
2239
- pct: quota.pct,
2240
- hint: quota.hint,
2241
- testId: chunkMHVNT4J3_cjs.prefixedTestId(testIds?.quota, quota.key, {
2242
- testId: `welcome-modal-quota-${quota.key}`
2243
- })
2244
- },
2245
- quota.key
2246
- )) }),
2247
- /* @__PURE__ */ jsxRuntime.jsx(
2248
- ui.Button,
2249
- {
2250
- variant: "outline",
2251
- className: "w-full",
2252
- onClick: onSeePlans,
2253
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.showPlans, { testId: "welcome-modal-show-plans" }),
2254
- children: l.seeUpgradeOptions
2255
- }
2256
- )
2257
- ]
2258
- }
2259
- ),
2260
- /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: "space-y-2.5", children: [
2261
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
2262
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
2263
- l.referralBefore,
2264
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: referralOfferLabel }),
2265
- l.referralAfter
2266
- ] }),
2267
- /* @__PURE__ */ jsxRuntime.jsxs(
2268
- ui.Button,
2269
- {
2270
- variant: "outline",
2271
- size: "sm",
2272
- className: "shrink-0 gap-1.5",
2273
- onClick: onInvite,
2274
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.earn, { testId: "welcome-modal-earn" }),
2275
- children: [
2276
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlus, { className: "h-3.5 w-3.5" }),
2277
- l.inviteContact
2278
- ]
2279
- }
2280
- )
2281
- ] }),
2282
- rewardBalanceLabel && // A statement, not a door: the balance applies itself to the next invoice.
2283
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 rounded-md bg-green-bg px-3 py-2 text-sm text-green-text", children: [
2284
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Gift, { className: "h-4 w-4 shrink-0" }),
2285
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "truncate", children: [
2286
- l.currentRewards,
2287
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: rewardBalanceLabel })
2288
- ] })
2289
- ] })
2290
- ] }),
2291
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(
2292
- ui.Button,
2293
- {
2294
- className: "w-full",
2295
- onClick: onClose,
2296
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.dismiss, { testId: "welcome-modal-dismiss" }),
2297
- children: l.continue
2298
- }
2299
- ) })
2300
- ]
2301
- }
2302
- ) });
2303
- }
2304
- function InviteContactsDialog({
2305
- open,
2306
- onClose,
2307
- children,
2308
- testId = "welcome-modal-invite",
2309
- labels
2310
- }) {
2311
- const l = react.useMemo(() => ({ ...DEFAULT_INVITE_CONTACTS_DIALOG_LABELS, ...labels }), [labels]);
2312
- return /* @__PURE__ */ jsxRuntime.jsx(
2313
- chunkULWRNGGE_cjs.ModalScaffold,
2314
- {
2315
- open,
2316
- onOpenChange: (next) => !next && onClose(),
2317
- title: l.title,
2318
- description: l.description,
2319
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlus, { className: "h-5 w-5 text-primary" }),
2320
- size: "lg",
2321
- className: "sm:max-w-lg",
2322
- testId,
2323
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalSection, { children })
2324
- }
2325
- );
2326
- }
2327
- var SERIES_STYLES = [
2328
- { bg: "bg-blue-500", stroke: "stroke-blue-500" },
2329
- { bg: "bg-purple-500", stroke: "stroke-purple-500" },
2330
- { bg: "bg-emerald-500", stroke: "stroke-emerald-500" },
2331
- { bg: "bg-amber-500", stroke: "stroke-amber-500" },
2332
- { bg: "bg-rose-500", stroke: "stroke-rose-500" },
2333
- { bg: "bg-cyan-500", stroke: "stroke-cyan-500" },
2334
- { bg: "bg-indigo-500", stroke: "stroke-indigo-500" },
2335
- { bg: "bg-orange-500", stroke: "stroke-orange-500" }
2336
- ];
2337
- var styleAt = (index) => SERIES_STYLES[index % SERIES_STYLES.length];
2338
- var DEFAULT_USAGE_LINE_CHART_LABELS = {
2339
- noDailyData: "No daily data"
2340
- };
2341
- var DEFAULT_USAGE_PROPORTION_BAR_LABELS = {
2342
- tokens: (formatted) => `${formatted} tokens`,
2343
- gbp: (formatted) => formatted,
2344
- tokensShort: (formatted) => `${formatted} tok`
2345
- };
2346
- var DEFAULT_USAGE_PANEL_LABELS = {
2347
- empty: "No usage yet.",
2348
- error: "Failed to load usage data"
2349
- };
2350
- var CHART_W = 440;
2351
- var CHART_H = 120;
2352
- var PAD = { top: 8, right: 8, bottom: 20, left: 40 };
2353
- function UsageLineChart({
2354
- dates,
2355
- series,
2356
- formatDate,
2357
- formatValue: formatValue2,
2358
- emptyLabel,
2359
- labels
2360
- }) {
2361
- const l = react.useMemo(() => ({ ...DEFAULT_USAGE_LINE_CHART_LABELS, ...labels }), [labels]);
2362
- const [hoverIdx, setHoverIdx] = react.useState(null);
2363
- if (!dates.length || !series.length) {
2364
- return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyLabel ?? l.noDailyData });
2365
- }
2366
- const maxVal = Math.max(...series.flatMap((s) => s.values), 1);
2367
- const plotW = CHART_W - PAD.left - PAD.right;
2368
- const plotH = CHART_H - PAD.top - PAD.bottom;
2369
- const xStep = dates.length > 1 ? plotW / (dates.length - 1) : plotW;
2370
- const yScale = (v) => PAD.top + plotH - v / maxVal * plotH;
2371
- const yTicks = [0, maxVal / 2, maxVal].map((v) => ({
2372
- v,
2373
- y: yScale(v),
2374
- label: v >= 1e3 ? `${Math.round(v / 1e3)}k` : String(Math.round(v * 100) / 100)
2375
- }));
2376
- const labelCount = Math.min(dates.length, 5);
2377
- const labelStep = Math.max(1, Math.floor((dates.length - 1) / (labelCount - 1)));
2378
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", "data-slot": "usage-line-chart", children: [
2379
- /* @__PURE__ */ jsxRuntime.jsxs(
2380
- "svg",
2381
- {
2382
- viewBox: `0 0 ${CHART_W} ${CHART_H}`,
2383
- className: "h-auto w-full",
2384
- preserveAspectRatio: "xMidYMid meet",
2385
- onMouseLeave: () => setHoverIdx(null),
2386
- children: [
2387
- yTicks.map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
2388
- /* @__PURE__ */ jsxRuntime.jsx(
2389
- "line",
2390
- {
2391
- x1: PAD.left,
2392
- x2: CHART_W - PAD.right,
2393
- y1: t.y,
2394
- y2: t.y,
2395
- className: "stroke-border",
2396
- strokeDasharray: "2,2"
2397
- }
2398
- ),
2399
- /* @__PURE__ */ jsxRuntime.jsx(
2400
- "text",
2401
- {
2402
- x: PAD.left - 4,
2403
- y: t.y + 3,
2404
- textAnchor: "end",
2405
- className: "fill-muted-foreground text-xs",
2406
- children: t.label
2407
- }
2408
- )
2409
- ] }, t.v)),
2410
- series.map((s, si) => /* @__PURE__ */ jsxRuntime.jsx(
2411
- "polyline",
2412
- {
2413
- points: s.values.map((v, i) => `${PAD.left + i * xStep},${yScale(v)}`).join(" "),
2414
- fill: "none",
2415
- className: styleAt(si).stroke,
2416
- strokeWidth: 1.5,
2417
- strokeLinejoin: "round"
2418
- },
2419
- s.key
2420
- )),
2421
- dates.map((date, i) => /* @__PURE__ */ jsxRuntime.jsx(
2422
- "rect",
2423
- {
2424
- x: PAD.left + i * xStep - xStep / 2,
2425
- y: PAD.top,
2426
- width: xStep,
2427
- height: plotH,
2428
- fill: "transparent",
2429
- onMouseEnter: () => setHoverIdx(i),
2430
- onClick: () => setHoverIdx(i)
2431
- },
2432
- date
2433
- )),
2434
- hoverIdx !== null && /* @__PURE__ */ jsxRuntime.jsx(
2435
- "line",
2436
- {
2437
- x1: PAD.left + hoverIdx * xStep,
2438
- x2: PAD.left + hoverIdx * xStep,
2439
- y1: PAD.top,
2440
- y2: PAD.top + plotH,
2441
- className: "stroke-muted-foreground",
2442
- strokeDasharray: "3,3"
2443
- }
2444
- ),
2445
- dates.map((d, i) => {
2446
- const isLast = i === dates.length - 1;
2447
- if (!isLast && (i % labelStep !== 0 || dates.length - 1 - i < labelStep / 2)) return null;
2448
- return /* @__PURE__ */ jsxRuntime.jsx(
2449
- "text",
2450
- {
2451
- x: PAD.left + i * xStep,
2452
- y: CHART_H - 2,
2453
- textAnchor: i === 0 ? "start" : isLast ? "end" : "middle",
2454
- className: "fill-muted-foreground text-xs",
2455
- children: formatDate(d)
2456
- },
2457
- d
2458
- );
2459
- })
2460
- ]
2461
- }
2462
- ),
2463
- hoverIdx !== null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute right-0 top-0 rounded-md border bg-card/90 px-2 py-1 text-sm shadow-lg", children: [
2464
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: dates[hoverIdx] }),
2465
- series.map((s, si) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
2466
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("inline-block h-2 w-2 rounded-full", styleAt(si).bg) }),
2467
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
2468
- s.key,
2469
- ":"
2470
- ] }),
2471
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium tabular-nums", children: formatValue2(s.values[hoverIdx]) })
2472
- ] }, s.key))
2473
- ] })
2474
- ] });
2475
- }
2476
- function UsageLegend({ series }) {
2477
- if (series.length <= 1 && series[0]?.key === "Total") return null;
2478
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-x-3 gap-y-1", children: series.map((s, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 text-sm", children: [
2479
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("inline-block h-2.5 w-2.5 rounded-full", styleAt(i).bg) }),
2480
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: s.key })
2481
- ] }, s.key)) });
2482
- }
2483
- function UsageProportionBar({
2484
- items,
2485
- metric,
2486
- labels
2487
- }) {
2488
- const l = react.useMemo(() => ({ ...DEFAULT_USAGE_PROPORTION_BAR_LABELS, ...labels }), [labels]);
2489
- const total = items.reduce((sum, item) => sum + item.amount, 0);
2490
- if (!items.length || total === 0) return null;
2491
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2492
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", children: items.map((item, i) => {
2493
- const pct = item.amount / total * 100;
2494
- if (pct < 0.5) return null;
2495
- return /* @__PURE__ */ jsxRuntime.jsx(
2496
- "div",
2497
- {
2498
- className: ui.cn("h-full first:rounded-l-full last:rounded-r-full", styleAt(i).bg),
2499
- style: { width: `${pct}%` },
2500
- title: `${item.label}: ${metric === "tokens" ? l.tokens(item.tokens) : l.gbp(item.gbp)}`
2501
- },
2502
- item.label
2503
- );
2504
- }) }),
2505
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
2506
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-1.5", children: [
2507
- /* @__PURE__ */ jsxRuntime.jsx(
2508
- "span",
2509
- {
2510
- className: ui.cn("inline-block h-2.5 w-2.5 flex-shrink-0 rounded-full", styleAt(i).bg)
2511
- }
2512
- ),
2513
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: item.label })
2514
- ] }),
2515
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-2 flex flex-shrink-0 items-center gap-2 tabular-nums", children: [
2516
- /* @__PURE__ */ jsxRuntime.jsx(
2517
- "span",
2518
- {
2519
- className: ui.cn(
2520
- "flex items-center gap-0.5",
2521
- metric === "gbp" ? "font-medium text-muted-foreground" : "text-muted-foreground/60"
2522
- ),
2523
- children: item.gbp
2524
- }
2525
- ),
2526
- /* @__PURE__ */ jsxRuntime.jsx(
2527
- "span",
2528
- {
2529
- className: metric === "tokens" ? "font-medium text-muted-foreground" : "text-muted-foreground/60",
2530
- children: l.tokensShort(item.tokens)
2531
- }
2532
- ),
2533
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "w-8 text-right text-muted-foreground/40", children: [
2534
- (item.amount / total * 100).toFixed(0),
2535
- "%"
2536
- ] })
2537
- ] })
2538
- ] }, item.label)) })
2539
- ] });
2540
- }
2541
- function UsageSummary({ stats }) {
2542
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2 text-center", children: stats.map((stat) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg bg-muted p-3", children: [
2543
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center gap-1 text-base font-semibold tabular-nums", children: stat.value }),
2544
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: stat.label })
2545
- ] }, stat.key)) });
2546
- }
2547
- function UsageToggle({
2548
- value,
2549
- onChange,
2550
- options,
2551
- ariaLabel,
2552
- size = "compact"
2553
- }) {
2554
- return /* @__PURE__ */ jsxRuntime.jsx(
2555
- RadioGroupPrimitive__namespace.Root,
2556
- {
2557
- "aria-label": ariaLabel,
2558
- value,
2559
- onValueChange: (next) => onChange(next),
2560
- orientation: "horizontal",
2561
- className: "flex gap-1 rounded-md border border-border bg-background p-0.5 print:hidden",
2562
- children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
2563
- RadioGroupPrimitive__namespace.Item,
2564
- {
2565
- value: option.value,
2566
- className: ui.cn(
2567
- "rounded-md px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:py-2.5",
2568
- size === "fill" && "flex-1 px-2 py-1.5",
2569
- option.value === value ? "bg-accent font-medium text-accent-foreground" : "text-muted-foreground hover:text-foreground"
2570
- ),
2571
- children: option.label
2572
- },
2573
- option.value
2574
- ))
2575
- }
2576
- );
2577
- }
2578
- function UsagePanel({
2579
- state,
2580
- period,
2581
- actions,
2582
- dateRange,
2583
- emptyMessage,
2584
- errorMessage,
2585
- labels,
2586
- children
2587
- }) {
2588
- const l = react.useMemo(() => ({ ...DEFAULT_USAGE_PANEL_LABELS, ...labels }), [labels]);
2589
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", "data-slot": "usage-panel", children: [
2590
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
2591
- period,
2592
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: actions })
2593
- ] }),
2594
- dateRange && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: dateRange }),
2595
- state === "loading" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) }),
2596
- state === "error" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-4 text-sm text-destructive", children: errorMessage ?? l.error }),
2597
- state === "empty" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center gap-2 py-10 text-center", children: [
2598
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChartNoAxesColumn, { className: "h-8 w-8 text-muted-foreground/40" }),
2599
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage ?? l.empty })
2600
- ] }),
2601
- state === "ready" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children })
2602
- ] });
2603
- }
2604
- var DEFAULT_INVOICES_DIALOG_LABELS = {
2605
- title: (projectName) => `Receipts \xB7 ${projectName}`,
2606
- description: (projectName) => `Receipts for ${projectName}`,
2607
- noReceipts: "No receipts yet.",
2608
- paid: "Paid"
2609
- };
2610
- var DEFAULT_DAILY_CAP_FIELD_LABELS = {
2611
- noLimit: "No limit",
2612
- ariaLabel: "Daily AI usage limit per collaborator (\xA3)",
2613
- unit: "\xA3 / user / day",
2614
- save: "Save"
2615
- };
2616
- var DEFAULT_MEMBER_PROJECT_ROW_LABELS = {
2617
- noDailyLimit: "No daily limit"
2618
- };
2619
- var DEFAULT_INLINE_NAME_EDITOR_LABELS = {
2620
- saveName: "Save name",
2621
- cancelRename: "Cancel rename"
2622
- };
2623
- var DEFAULT_PROJECT_CARD_VIEW_LABELS = {
2624
- collapseProject: "Collapse project",
2625
- expandProject: "Expand project"
2626
- };
2627
- function InvoicesDialog({
2628
- open,
2629
- onOpenChange,
2630
- projectName,
2631
- isLoading,
2632
- invoices,
2633
- labels
2634
- }) {
2635
- const l = react.useMemo(() => ({ ...DEFAULT_INVOICES_DIALOG_LABELS, ...labels }), [labels]);
2636
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", className: "max-w-lg", children: [
2637
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
2638
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title(projectName) }),
2639
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description(projectName) })
2640
- ] }),
2641
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
2642
- isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) }),
2643
- !isLoading && invoices.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-4 text-center text-sm text-muted-foreground", children: l.noReceipts }),
2644
- !isLoading && invoices.map((invoice) => /* @__PURE__ */ jsxRuntime.jsxs(
2645
- "div",
2646
- {
2647
- className: "flex items-center justify-between border-b py-2 text-sm last:border-0",
2648
- children: [
2649
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-0.5", children: [
2650
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums text-muted-foreground", children: invoice.date }),
2651
- invoice.kind && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: invoice.kind }),
2652
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium tabular-nums", children: invoice.amount }),
2653
- invoice.amountNote && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: invoice.amountNote }),
2654
- /* @__PURE__ */ jsxRuntime.jsx(
2655
- ui.Badge,
2656
- {
2657
- variant: "outline",
2658
- className: ui.cn(
2659
- "h-4 px-1.5 py-0 text-sm",
2660
- invoice.isPaid && "border-green-border text-green-text"
2661
- ),
2662
- children: invoice.isPaid ? l.paid : invoice.status
2663
- }
2664
- )
2665
- ] }),
2666
- invoice.href && /* @__PURE__ */ jsxRuntime.jsxs(
2667
- "a",
2668
- {
2669
- href: invoice.href,
2670
- target: "_blank",
2671
- rel: "noopener noreferrer",
2672
- className: "flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground",
2673
- children: [
2674
- invoice.linkLabel,
2675
- " ",
2676
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "h-3 w-3" })
2677
- ]
2678
- }
2679
- )
2680
- ]
2681
- },
2682
- invoice.key
2683
- ))
2684
- ] })
2685
- ] }) });
2686
- }
2687
- function DailyCapField({
2688
- value,
2689
- onChange,
2690
- onSave,
2691
- canSave,
2692
- isSaving,
2693
- labels
2694
- }) {
2695
- const l = react.useMemo(() => ({ ...DEFAULT_DAILY_CAP_FIELD_LABELS, ...labels }), [labels]);
2696
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
2697
- /* @__PURE__ */ jsxRuntime.jsx(
2698
- ui.Input,
2699
- {
2700
- type: "number",
2701
- min: 0,
2702
- step: 0.01,
2703
- value,
2704
- onChange: (e) => onChange(e.target.value),
2705
- onKeyDown: (e) => {
2706
- if (e.key === "Enter") onSave();
2707
- },
2708
- placeholder: l.noLimit,
2709
- className: "h-9 w-40",
2710
- "aria-label": l.ariaLabel
2711
- }
2712
- ),
2713
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: l.unit }),
2714
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { size: "sm", className: "h-9 px-4", disabled: !canSave || isSaving, onClick: onSave, children: l.save })
2715
- ] });
2716
- }
2717
- function MemberProjectRow({ icon, name, owner, allowance, labels }) {
2718
- const l = react.useMemo(() => ({ ...DEFAULT_MEMBER_PROJECT_ROW_LABELS, ...labels }), [labels]);
2719
- const barColor2 = allowance && allowance.pct >= 100 ? "bg-red-500" : allowance && allowance.pct >= 90 ? "bg-yellow-500" : "bg-primary";
2720
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 rounded-lg bg-muted p-3", children: [
2721
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-muted-foreground", children: icon }),
2722
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2723
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm font-medium", children: name }),
2724
- owner
2725
- ] }) }),
2726
- allowance === null ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 text-sm text-muted-foreground", children: l.noDailyLimit }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 flex-col items-end gap-0.5 text-sm tabular-nums", children: [
2727
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: allowance.text }),
2728
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-1 w-24 overflow-hidden rounded-full bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(
2729
- "span",
2730
- {
2731
- className: ui.cn("block h-full rounded-full", barColor2),
2732
- style: { width: `${allowance.pct}%` }
2733
- }
2734
- ) })
2735
- ] })
2736
- ] });
2737
- }
2738
- function InlineNameEditor({
2739
- value,
2740
- onChange,
2741
- onSave,
2742
- onCancel,
2743
- labels
2744
- }) {
2745
- const l = react.useMemo(() => ({ ...DEFAULT_INLINE_NAME_EDITOR_LABELS, ...labels }), [labels]);
2746
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-1", children: [
2747
- /* @__PURE__ */ jsxRuntime.jsx(
2748
- ui.Input,
2749
- {
2750
- value,
2751
- onChange: (e) => onChange(e.target.value),
2752
- className: "h-7 text-sm",
2753
- autoFocus: true,
2754
- onKeyDown: (e) => {
2755
- if (e.key === "Enter") onSave();
2756
- if (e.key === "Escape") onCancel();
2757
- }
2758
- }
2759
- ),
2760
- /* @__PURE__ */ jsxRuntime.jsx(
2761
- ui.Button,
2762
- {
2763
- variant: "ghost",
2764
- size: "icon",
2765
- className: "h-6 w-6",
2766
- "aria-label": l.saveName,
2767
- onClick: onSave,
2768
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5" })
2769
- }
2770
- ),
2771
- /* @__PURE__ */ jsxRuntime.jsx(
2772
- ui.Button,
2773
- {
2774
- variant: "ghost",
2775
- size: "icon",
2776
- className: "h-6 w-6",
2777
- "aria-label": l.cancelRename,
2778
- onClick: onCancel,
2779
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-3.5 w-3.5" })
2780
- }
2781
- )
2782
- ] });
2783
- }
2784
- function ProjectCardView({
2785
- expanded,
2786
- onToggleExpanded,
2787
- rowRef,
2788
- icon,
2789
- identity,
2790
- actions,
2791
- badge,
2792
- buttons,
2793
- summary,
2794
- children,
2795
- overlays,
2796
- labels
2797
- }) {
2798
- const l = react.useMemo(() => ({ ...DEFAULT_PROJECT_CARD_VIEW_LABELS, ...labels }), [labels]);
2799
- return /* @__PURE__ */ jsxRuntime.jsxs(
2800
- "div",
2801
- {
2802
- "data-slot": "project-card",
2803
- className: ui.cn("rounded-lg bg-muted transition-colors", expanded && "ring-1 ring-primary/40"),
2804
- children: [
2805
- /* @__PURE__ */ jsxRuntime.jsxs(
2806
- "div",
2807
- {
2808
- ref: rowRef,
2809
- className: ui.cn(
2810
- "flex items-center gap-2 p-3 transition-colors",
2811
- expanded ? "bg-blue-bg/60" : "hover:bg-muted/50"
2812
- ),
2813
- children: [
2814
- icon,
2815
- identity,
2816
- actions,
2817
- badge,
2818
- buttons,
2819
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
2820
- summary,
2821
- /* @__PURE__ */ jsxRuntime.jsx(
2822
- "button",
2823
- {
2824
- type: "button",
2825
- onClick: onToggleExpanded,
2826
- "aria-expanded": expanded,
2827
- "aria-label": expanded ? l.collapseProject : l.expandProject,
2828
- className: "flex-shrink-0 rounded p-1 hover:bg-muted pointer-coarse:p-3",
2829
- children: expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4 text-muted-foreground" })
2830
- }
2831
- )
2832
- ]
2833
- }
2834
- ),
2835
- expanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4 border-t px-4 py-3", children }),
2836
- overlays
2837
- ]
2838
- }
2839
- );
2840
- }
2841
- var DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS = {
2842
- title: "Email this workspace",
2843
- description: "Send documents and questions here from your registered email address \u2014 your Assistant reads the email and replies.",
2844
- compose: "Compose email",
2845
- paHintBefore: "Don\u2019t need this specific workspace? Send general questions to ",
2846
- paHintAfter: " instead.",
2847
- checking: "Checking your Assistant\u2019s access\u2026",
2848
- noAssistant: "You don\u2019t have a default Assistant yet \u2014 one is created automatically the first time you email a workspace.",
2849
- authorizedExpires: (ttl) => `Authorized \u2014 expires in ${ttl}`,
2850
- end: "End",
2851
- authorizePrompt: (ttl) => `Authorize your Assistant to act in this workspace${ttl ? ` for ${ttl}` : ""}, so it\u2019s ready as soon as it wakes.`,
2852
- authorize: "Authorize",
2853
- authorizing: "Authorizing\u2026",
2854
- advanced: "Advanced",
2855
- alreadyGranted: "Your Assistant already has standing access to this workspace.",
2856
- standingWarning: "Standing access never expires and doesn\u2019t need re-authorizing \u2014 only use it if you trust the Assistant\u2019s environment long-term.",
2857
- grant: "Grant standing access",
2858
- granting: "Granting\u2026"
2859
- };
2860
- function EmailWorkspaceDialogView({
2861
- open,
2862
- onOpenChange,
2863
- email,
2864
- mailtoHref,
2865
- paDomain,
2866
- copyButton,
2867
- access,
2868
- standing,
2869
- labels
2870
- }) {
2871
- const l = react.useMemo(() => ({ ...DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS, ...labels }), [labels]);
2872
- const [advancedOpen, setAdvancedOpen] = react.useState(false);
2873
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "sm:max-w-md", "data-testid": "email-workspace-dialog", children: [
2874
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "-m-6 mb-4 bg-muted p-6 pb-4", children: [
2875
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
2876
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, { className: "size-6" }),
2877
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title })
2878
- ] }),
2879
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.description })
2880
- ] }),
2881
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-2", children: [
2882
- /* @__PURE__ */ jsxRuntime.jsx("code", { className: "flex-1 truncate font-mono text-sm", "data-testid": "email-workspace-address", children: email }),
2883
- copyButton
2884
- ] }),
2885
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { asChild: true, "data-testid": "email-workspace-compose-button", children: /* @__PURE__ */ jsxRuntime.jsxs("a", { href: mailtoHref, children: [
2886
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Send, { className: "mr-1.5 size-4" }),
2887
- l.compose
2888
- ] }) }),
2889
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "email-workspace-pa-hint", children: [
2890
- l.paHintBefore,
2891
- /* @__PURE__ */ jsxRuntime.jsxs("code", { className: "font-mono", children: [
2892
- "pa@",
2893
- paDomain
2894
- ] }),
2895
- l.paHintAfter
2896
- ] }),
2897
- access && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 rounded-md border border-border bg-muted/30 p-3", children: [
2898
- access.kind === "loading" ? /* @__PURE__ */ jsxRuntime.jsx(
2899
- "p",
2900
- {
2901
- className: "text-xs text-muted-foreground",
2902
- "data-testid": "email-workspace-authorize-loading",
2903
- children: l.checking
2904
- }
2905
- ) : access.kind === "none" ? /* @__PURE__ */ jsxRuntime.jsx(
2906
- "p",
2907
- {
2908
- className: "text-xs text-muted-foreground",
2909
- "data-testid": "email-workspace-no-assistant",
2910
- children: l.noAssistant
2911
- }
2912
- ) : access.kind === "session" ? /* @__PURE__ */ jsxRuntime.jsxs(
2913
- "div",
2914
- {
2915
- className: "flex items-center justify-between gap-3",
2916
- "data-testid": "email-workspace-active-session",
2917
- children: [
2918
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
2919
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-3.5" }),
2920
- l.authorizedExpires(access.expiresIn)
2921
- ] }),
2922
- /* @__PURE__ */ jsxRuntime.jsxs(
2923
- ui.Button,
2924
- {
2925
- variant: "ghost",
2926
- size: "sm",
2927
- onClick: access.onEnd,
2928
- disabled: access.isEnding,
2929
- className: "h-7 shrink-0 gap-1 px-2 text-xs text-destructive hover:bg-destructive/10 hover:text-destructive pointer-coarse:h-11",
2930
- "data-testid": "email-workspace-end-session-button",
2931
- children: [
2932
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-3" }),
2933
- l.end
2934
- ]
2935
- }
2936
- )
2937
- ]
2938
- }
2939
- ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
2940
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.authorizePrompt(access.defaultTtl) }),
2941
- /* @__PURE__ */ jsxRuntime.jsxs(
2942
- ui.Button,
2943
- {
2944
- variant: "outline",
2945
- size: "sm",
2946
- onClick: access.onAuthorize,
2947
- disabled: access.isAuthorizing,
2948
- className: "shrink-0 gap-1.5",
2949
- "data-testid": "email-workspace-authorize-button",
2950
- children: [
2951
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-3.5" }),
2952
- access.isAuthorizing ? l.authorizing : l.authorize
2953
- ]
2954
- }
2955
- )
2956
- ] }),
2957
- /* @__PURE__ */ jsxRuntime.jsx(
2958
- "button",
2959
- {
2960
- type: "button",
2961
- onClick: () => setAdvancedOpen((o) => !o),
2962
- "aria-expanded": advancedOpen,
2963
- className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
2964
- "data-testid": "email-workspace-advanced-toggle",
2965
- children: l.advanced
2966
- }
2967
- ),
2968
- advancedOpen && standing && (standing.alreadyGranted ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
2969
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "size-3.5 text-green-solid" }),
2970
- l.alreadyGranted
2971
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2972
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.standingWarning }),
2973
- /* @__PURE__ */ jsxRuntime.jsxs(
2974
- ui.Button,
2975
- {
2976
- variant: "outline",
2977
- size: "sm",
2978
- onClick: standing.onGrant,
2979
- disabled: standing.isGranting,
2980
- className: "gap-1.5",
2981
- "data-testid": "email-workspace-grant-access-button",
2982
- children: [
2983
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Infinity, { className: "size-3.5" }),
2984
- standing.isGranting ? l.granting : l.grant
2985
- ]
2986
- }
2987
- )
2988
- ] }))
2989
- ] })
2990
- ] }) });
2991
- }
2992
- function PlanNotice({
2993
- tone = "muted",
2994
- className,
2995
- testId,
2996
- children
2997
- }) {
2998
- return /* @__PURE__ */ jsxRuntime.jsx(
2999
- "p",
3000
- {
3001
- "data-slot": "plan-notice",
3002
- "data-testid": testId,
3003
- className: ui.cn(
3004
- "text-sm",
3005
- tone === "error" ? "text-destructive" : "text-muted-foreground",
3006
- className
3007
- ),
3008
- children
3009
- }
3010
- );
3011
- }
3012
- function PlanStack({
3013
- gap = 3,
3014
- testId,
3015
- className,
3016
- children
3017
- }) {
3018
- const GAP = { 2: "space-y-2", 3: "space-y-3", 4: "space-y-4", 5: "space-y-5 pt-2" };
3019
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "plan-stack", "data-testid": testId, className: ui.cn(GAP[gap], className), children });
3020
- }
3021
- function PlanTransition({ from, to }) {
3022
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "plan-transition", className: "flex flex-wrap items-center gap-2 text-sm", children: [
3023
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-xs font-semibold text-muted-foreground", children: from }),
3024
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "size-4 text-muted-foreground", "aria-hidden": true }),
3025
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-primary px-2 py-0.5 text-xs font-semibold text-white", children: to })
3026
- ] });
3027
- }
3028
- function PlanPickerHeader({
3029
- title,
3030
- info,
3031
- infoPlacement = "title",
3032
- toggle,
3033
- className
3034
- }) {
3035
- return /* @__PURE__ */ jsxRuntime.jsxs(
3036
- "div",
3037
- {
3038
- "data-slot": "plan-picker-header",
3039
- className: ui.cn("flex flex-wrap items-center justify-between gap-x-3 gap-y-2", className),
3040
- children: [
3041
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3042
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold", children: title }),
3043
- infoPlacement === "title" && info
3044
- ] }),
3045
- infoPlacement === "toggle" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-2", children: [
3046
- info,
3047
- toggle
3048
- ] }) : toggle
3049
- ]
3050
- }
3051
- );
3052
- }
3053
- function PlanPickerCard({ children }) {
3054
- return /* @__PURE__ */ jsxRuntime.jsx(
3055
- "div",
3056
- {
3057
- "data-slot": "plan-picker-card",
3058
- className: "space-y-4 rounded-lg border border-border bg-card shadow-xs p-4",
3059
- children
3060
- }
3061
- );
3062
- }
3063
- function PlanActionRow({ children }) {
3064
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "plan-action-row", className: "flex flex-col-reverse gap-2 @xl:flex-row", children });
3065
- }
3066
- function PlanActionButton({
3067
- tone = "primary",
3068
- fill,
3069
- ...props
3070
- }) {
3071
- return /* @__PURE__ */ jsxRuntime.jsx(
3072
- ui.Button,
3073
- {
3074
- "data-slot": "plan-action-button",
3075
- variant: tone === "muted" ? "ghost" : "default",
3076
- ...props,
3077
- className: ui.cn(
3078
- "w-full",
3079
- fill && "sm:flex-1",
3080
- tone === "muted" && "text-muted-foreground",
3081
- props.className
3082
- )
3083
- }
3084
- );
3085
- }
3086
- var DEFAULT_SUBSCRIPTION_STATUS_LABELS = {
3087
- aiUsageResets: (date) => `AI usage resets ${date}`,
3088
- cancelsAtPeriodEnd: "\xB7 Cancels at period end",
3089
- cancelsAtEndOfBillingPeriod: "Cancels at end of billing period"
3090
- };
3091
- function SubscriptionStatusView({
3092
- resetDate,
3093
- isCanceling,
3094
- meters,
3095
- testIdPrefix,
3096
- labels
3097
- }) {
3098
- const l = { ...DEFAULT_SUBSCRIPTION_STATUS_LABELS, ...labels };
3099
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subscription-status", className: "space-y-3", children: [
3100
- resetDate && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
3101
- l.aiUsageResets(resetDate),
3102
- isCanceling && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-yellow-text", children: l.cancelsAtPeriodEnd })
3103
- ] }),
3104
- !resetDate && isCanceling && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-yellow-text", children: l.cancelsAtEndOfBillingPeriod }),
3105
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: meters.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
3106
- chunkQZTNTP75_cjs.UsageMeter,
3107
- {
3108
- icon: m.icon,
3109
- label: m.label,
3110
- value: m.value,
3111
- pct: m.pct,
3112
- testId: chunkMHVNT4J3_cjs.prefixedTestId(testIdPrefix, m.key, { testId: `project-quota-${m.key}` })
3113
- },
3114
- m.key
3115
- )) })
3116
- ] });
3117
- }
3118
- function PlanDialogFrame({
3119
- open,
3120
- onOpenChange,
3121
- title,
3122
- description,
3123
- isDescriptionHidden,
3124
- projectName,
3125
- projectTestId,
3126
- children,
3127
- labels
3128
- }) {
3129
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "max-w-5xl", children: [
3130
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "flex-row items-start justify-between gap-3 space-y-0 pr-8", children: [
3131
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
3132
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: title }),
3133
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: isDescriptionHidden ? "sr-only" : void 0, children: description })
3134
- ] }),
3135
- projectName !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(
3136
- "span",
3137
- {
3138
- className: "shrink-0 text-sm text-muted-foreground",
3139
- "data-testid": chunkMHVNT4J3_cjs.testIdOr(projectTestId, { testId: "change-plan-project" }),
3140
- children: [
3141
- labels?.project ?? "Project:",
3142
- " ",
3143
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: projectName })
3144
- ]
3145
- }
3146
- )
3147
- ] }),
3148
- children
3149
- ] }) });
3150
- }
3151
- var DEFAULT_CHECKOUT_DIALOG_LABELS = {
3152
- unavailableTitle: "Stripe Not Configured",
3153
- unavailableDescription: "Stripe checkout is not available. Please contact support.",
3154
- title: "Payment",
3155
- description: "Enter your card to start the plan",
3156
- loading: "Loading\u2026",
3157
- error: "Checkout didn't load. Try again."
3158
- };
3159
- function CheckoutDialogFrame({
3160
- open,
3161
- onOpenChange,
3162
- isUnavailable,
3163
- isLoading,
3164
- hasError,
3165
- children,
3166
- labels
3167
- }) {
3168
- const l = { ...DEFAULT_CHECKOUT_DIALOG_LABELS, ...labels };
3169
- if (isUnavailable) {
3170
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(ui.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
3171
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.unavailableTitle }),
3172
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.unavailableDescription })
3173
- ] }) }) });
3174
- }
3175
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
3176
- ui.DialogContent,
3177
- {
3178
- presentation: "sheet",
3179
- className: "flex max-h-[calc(100dvh-2rem)] max-w-2xl flex-col gap-0 overflow-hidden p-0",
3180
- onInteractOutside: (e) => e.preventDefault(),
3181
- onEscapeKeyDown: (e) => e.preventDefault(),
3182
- children: [
3183
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "flex-shrink-0 px-6 pb-3 pt-6", children: [
3184
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title }),
3185
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.description })
3186
- ] }),
3187
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-6", children: [
3188
- isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-muted-foreground", children: l.loading }),
3189
- hasError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-8 text-center text-destructive", children: l.error }),
3190
- children
3191
- ] })
3192
- ]
3193
- }
3194
- ) });
3195
- }
3196
- var DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS = {
3197
- title: "AI usage used up",
3198
- projectUsage: "Project usage",
3199
- progress: "AI usage this month",
3200
- project: "Project:",
3201
- close: "Not now",
3202
- upgrade: "Upgrade"
3203
- };
3204
- function QuotaExceededDialogView({
3205
- open,
3206
- onClose,
3207
- onUpgrade,
3208
- message,
3209
- usage,
3210
- actions,
3211
- extra,
3212
- labels
3213
- }) {
3214
- const l = { ...DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS, ...labels };
3215
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange: (o) => !o && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { className: "max-w-md", "data-testid": "quota-exceeded-modal", children: [
3216
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
3217
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title }),
3218
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: message })
3219
- ] }),
3220
- usage && /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { className: "space-y-2", children: [
3221
- /* @__PURE__ */ jsxRuntime.jsx(ui.Progress, { value: usage.percent, "aria-label": l.progress }),
3222
- /* @__PURE__ */ jsxRuntime.jsxs(
3223
- "div",
3224
- {
3225
- className: "flex flex-wrap items-center justify-between gap-x-3 text-sm text-muted-foreground",
3226
- "data-testid": "quota-usage-readout",
3227
- children: [
3228
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: usage.readout }),
3229
- usage.projectId && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: usage.projectId })
3230
- ]
3231
- }
3232
- )
3233
- ] }),
3234
- extra,
3235
- /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogFooter, { children: [
3236
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, "data-testid": "quota-close-button", children: l.close }),
3237
- actions ?? /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: onUpgrade, "data-testid": "quota-upgrade-button", children: l.upgrade })
3238
- ] })
3239
- ] }) });
3240
- }
3241
- function WelcomeProjectPicker({
3242
- value,
3243
- options,
3244
- onChange,
3245
- testId = "welcome-modal-project-select"
3246
- }) {
3247
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value, onValueChange: onChange, children: [
3248
- /* @__PURE__ */ jsxRuntime.jsx(
3249
- ui.SelectTrigger,
3250
- {
3251
- className: "h-7 w-auto max-w-[9.5rem] shrink-0 gap-1 border-none bg-muted px-2 text-xs font-medium pointer-coarse:h-11",
3252
- "data-testid": testId,
3253
- children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {})
3254
- }
3255
- ),
3256
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { align: "end", children: options.map((o) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: o.id, children: o.name }, o.id)) })
3257
- ] });
3258
- }
3259
- var DEFAULT_SUBSCRIPTION_SECTION_LABELS = {
3260
- loading: "Loading projects...",
3261
- empty: "No projects yet \u2014 create one above."
3262
- };
3263
- function SubscriptionSectionView({
3264
- intro,
3265
- isLoading,
3266
- isEmpty,
3267
- children,
3268
- labels
3269
- }) {
3270
- const l = { ...DEFAULT_SUBSCRIPTION_SECTION_LABELS, ...labels };
3271
- if (isLoading) {
3272
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4 text-sm text-muted-foreground", children: l.loading });
3273
- }
3274
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subscription-section", className: "space-y-4", children: [
3275
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: intro }),
3276
- isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg bg-muted py-8 text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) }) : children
3277
- ] });
3278
- }
3279
- function ProjectGroup({ children }) {
3280
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-group", className: "space-y-2", children });
3281
- }
3282
- function ProjectPlanPicker({ children }) {
3283
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-plan-picker", className: "border-b pb-3", children });
3284
- }
3285
- function ProjectNameLabel({ children }) {
3286
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm font-medium", children });
3287
- }
3288
- function ProjectRowActions({ children }) {
3289
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "project-row-actions", className: "flex flex-shrink-0 items-center gap-0.5", children });
3290
- }
3291
- function RowIconAction({
3292
- label,
3293
- tooltip,
3294
- icon,
3295
- tone = "primary",
3296
- disabled,
3297
- onClick
3298
- }) {
3299
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
3300
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(
3301
- ui.Button,
3302
- {
3303
- variant: "ghost",
3304
- size: "icon",
3305
- className: ui.cn(
3306
- "size-6 text-muted-foreground/50 pointer-coarse:size-11",
3307
- tone === "destructive" ? "hover:text-destructive" : "hover:text-primary"
3308
- ),
3309
- "aria-label": label,
3310
- disabled,
3311
- onClick,
3312
- children: icon
3313
- }
3314
- ) }) }),
3315
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: tooltip ?? label })
3316
- ] });
3317
- }
3318
- function RowButton({
3319
- icon,
3320
- children,
3321
- onClick
3322
- }) {
3323
- return /* @__PURE__ */ jsxRuntime.jsxs(
3324
- ui.Button,
3325
- {
3326
- variant: "outline",
3327
- size: "sm",
3328
- className: "h-7 gap-1 px-2.5 text-sm pointer-coarse:h-11",
3329
- onClick,
3330
- children: [
3331
- icon,
3332
- children
3333
- ]
3334
- }
3335
- );
3336
- }
3337
- function UsageActionButton({
3338
- label,
3339
- icon,
3340
- onClick
3341
- }) {
3342
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
3343
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3344
- ui.Button,
3345
- {
3346
- variant: "ghost",
3347
- size: "icon",
3348
- className: "size-6 text-muted-foreground hover:text-foreground pointer-coarse:size-11",
3349
- "aria-label": label,
3350
- onClick,
3351
- children: icon
3352
- }
3353
- ) }),
3354
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: label })
3355
- ] });
3356
- }
3357
- function UsageQuotaHint({ children }) {
3358
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 tabular-nums", children });
3359
- }
3360
- function UsageSection({
3361
- title,
3362
- action,
3363
- children,
3364
- footer,
3365
- gap = "sm"
3366
- }) {
3367
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "usage-section", className: gap === "md" ? "space-y-3" : void 0, children: [
3368
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("flex items-center justify-between", gap === "sm" && "mb-2"), children: [
3369
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium text-muted-foreground", children: title }),
3370
- action
3371
- ] }),
3372
- children,
3373
- footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: footer })
3374
- ] });
3375
- }
3376
- var DEFAULT_ERROR_DIALOG_LABELS = {
3377
- title: "Something Went Wrong",
3378
- srDescription: "Error dialog",
3379
- reportHint: "Please click below to report the error to our support team if you have not done so already.",
3380
- refreshHint: "Clicking Refresh Session will attempt to refresh your session, which may help resolve the error.",
3381
- hideDetails: "Hide Details",
3382
- viewDetails: "View Details",
3383
- toggleDetailsAria: "Toggle error details",
3384
- copyAria: "Copy error details",
3385
- copy: "Copy error",
3386
- copied: "Copied",
3387
- refreshSession: "Refresh Session",
3388
- logout: "Logout"
3389
- };
3390
- function ErrorDialogView({
3391
- details,
3392
- report,
3393
- onRefresh,
3394
- onLogout,
3395
- labels
3396
- }) {
3397
- const l = { ...DEFAULT_ERROR_DIALOG_LABELS, ...labels };
3398
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open: true, onOpenChange: () => {
3399
- }, children: /* @__PURE__ */ jsxRuntime.jsxs(
3400
- ui.DialogContent,
3401
- {
3402
- presentation: "sheet",
3403
- className: "flex max-h-panel w-modal max-w-modal-vw flex-col overflow-hidden p-0",
3404
- "data-testid": "error-boundary-modal",
3405
- hideCloseButton: true,
3406
- children: [
3407
- /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalHeader, { children: [
3408
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3409
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { className: "text-red-text", size: 24 }),
3410
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: l.title })
3411
- ] }) }),
3412
- /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: l.srDescription })
3413
- ] }),
3414
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto px-6 pb-6", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkULWRNGGE_cjs.ModalSection, { "data-testid": "error-boundary", children: [
3415
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: l.reportHint }),
3416
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: l.refreshHint }),
3417
- details?.isShown && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 rounded border border-border bg-background p-3", children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "max-h-96 overflow-auto whitespace-pre-wrap font-mono text-sm", children: details.text }) }),
3418
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col gap-2", children: [
3419
- details && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full gap-2", children: [
3420
- /* @__PURE__ */ jsxRuntime.jsxs(
3421
- ui.Button,
3422
- {
3423
- variant: "outline",
3424
- className: "flex-1",
3425
- onClick: details.onToggle,
3426
- "aria-label": l.toggleDetailsAria,
3427
- "data-testid": "error-boundary-view-details",
3428
- children: [
3429
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "mr-2 size-4" }),
3430
- details.isShown ? l.hideDetails : l.viewDetails
3431
- ]
3432
- }
3433
- ),
3434
- /* @__PURE__ */ jsxRuntime.jsxs(
3435
- ui.Button,
3436
- {
3437
- variant: "outline",
3438
- className: "flex-1",
3439
- onClick: details.onCopy,
3440
- "aria-label": l.copyAria,
3441
- "data-testid": "error-boundary-copy-details",
3442
- children: [
3443
- details.isCopied ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "mr-2 size-4 text-green-text" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "mr-2 size-4" }),
3444
- details.isCopied ? l.copied : l.copy
3445
- ]
3446
- }
3447
- )
3448
- ] }),
3449
- report,
3450
- /* @__PURE__ */ jsxRuntime.jsxs(
3451
- ui.Button,
3452
- {
3453
- variant: "outline",
3454
- className: "w-full",
3455
- onClick: onRefresh,
3456
- "aria-label": "Refresh session",
3457
- children: [
3458
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "mr-2 size-4" }),
3459
- l.refreshSession
3460
- ]
3461
- }
3462
- ),
3463
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { variant: "outline", className: "w-full", onClick: onLogout, "aria-label": "Logout", children: [
3464
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LogOut, { className: "mr-2 size-4" }),
3465
- l.logout
3466
- ] })
3467
- ] })
3468
- ] }) })
3469
- ]
3470
- }
3471
- ) });
3472
- }
3473
- var SCHEME_OPTIONS = [
3474
- { value: "light", label: "Light", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sun, { className: "h-4 w-4" }) },
3475
- { value: "dark", label: "Dark", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Moon, { className: "h-4 w-4" }) }
3476
- ].map((option) => ({ ...option, testId: `appearance-scheme-${option.value}` }));
3477
- var TEXT_SIZE_OPTIONS = [
3478
- { value: "default", label: "Default" },
3479
- { value: "large", label: "Large" },
3480
- { value: "larger", label: "Larger" }
3481
- ].map((option) => ({ ...option, testId: `appearance-text-size-${option.value}` }));
3482
- var DEFAULT_APPEARANCE_PAIRING_IDS = [
3483
- "office",
3484
- "inter",
3485
- "fraunces-inter",
3486
- "montserrat-nunito"
3487
- ];
3488
- function AppearanceSettings({
3489
- colorScheme,
3490
- onColorSchemeChange,
3491
- textSize,
3492
- onTextSizeChange,
3493
- pairingId,
3494
- onPairingChange,
3495
- pairingIds = DEFAULT_APPEARANCE_PAIRING_IDS,
3496
- onReset
3497
- }) {
3498
- const activePairing = chunkNWNVWO6L_cjs.getFontPairing(pairingId) ?? chunkNWNVWO6L_cjs.getFontPairing(pairingIds[0]);
3499
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsPanel, { testId: "settings-appearance", children: [
3500
- /* @__PURE__ */ jsxRuntime.jsx(
3501
- chunkU73KPFYH_cjs.SettingsSection,
3502
- {
3503
- title: "Colour scheme",
3504
- action: onReset && /* @__PURE__ */ jsxRuntime.jsxs(
3505
- "button",
3506
- {
3507
- type: "button",
3508
- onClick: onReset,
3509
- className: "flex items-center gap-1.5 py-1 text-sm text-muted-foreground hover:text-foreground pointer-coarse:min-h-11",
3510
- "data-testid": "appearance-reset",
3511
- children: [
3512
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RotateCcw, { className: "h-3 w-3" }),
3513
- "Reset"
3514
- ]
3515
- }
3516
- ),
3517
- children: /* @__PURE__ */ jsxRuntime.jsx(
3518
- SegmentedControl,
3519
- {
3520
- value: colorScheme,
3521
- onChange: onColorSchemeChange,
3522
- options: SCHEME_OPTIONS,
3523
- ariaLabel: "Colour scheme"
3524
- }
3525
- )
3526
- }
3527
- ),
3528
- /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { title: "Text size", children: [
3529
- /* @__PURE__ */ jsxRuntime.jsx(
3530
- SegmentedControl,
3531
- {
3532
- value: textSize,
3533
- onChange: onTextSizeChange,
3534
- options: TEXT_SIZE_OPTIONS,
3535
- ariaLabel: "Text size"
3536
- }
3537
- ),
3538
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Makes all text larger, including documents in the viewer and citations. Applied straight away and remembered on this device." })
3539
- ] }),
3540
- /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { title: "Typeface", children: [
3541
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Select, { value: pairingId, onValueChange: onPairingChange, children: [
3542
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { className: "w-full", "data-testid": "appearance-typeface-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: activePairing && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: activePairing.display }, children: activePairing.label }) }) }),
3543
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: pairingIds.map((id) => {
3544
- const pairing = chunkNWNVWO6L_cjs.getFontPairing(id);
3545
- if (!pairing) return null;
3546
- return /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: id, "data-testid": `appearance-typeface-${id}`, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: pairing.display }, children: pairing.label }) }, id);
3547
- }) })
3548
- ] }),
3549
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Sets the headings and body text across the app. Applied straight away and remembered on this device." })
3550
- ] })
3551
- ] });
3552
- }
3553
22
 
3554
23
  Object.defineProperty(exports, "ActiveSessionsDialog", {
3555
24
  enumerable: true,
3556
- get: function () { return chunkU73KPFYH_cjs.ActiveSessionsDialog; }
25
+ get: function () { return chunk3FSXWVHW_cjs.ActiveSessionsDialog; }
26
+ });
27
+ Object.defineProperty(exports, "AppearanceSettings", {
28
+ enumerable: true,
29
+ get: function () { return chunk3FSXWVHW_cjs.AppearanceSettings; }
3557
30
  });
3558
31
  Object.defineProperty(exports, "AvatarPicker", {
3559
32
  enumerable: true,
3560
- get: function () { return chunkU73KPFYH_cjs.AvatarPicker; }
33
+ get: function () { return chunk3FSXWVHW_cjs.AvatarPicker; }
34
+ });
35
+ Object.defineProperty(exports, "CONVERSATION_TITLE_MAX", {
36
+ enumerable: true,
37
+ get: function () { return chunk3FSXWVHW_cjs.CONVERSATION_TITLE_MAX; }
38
+ });
39
+ Object.defineProperty(exports, "CheckoutDialogFrame", {
40
+ enumerable: true,
41
+ get: function () { return chunk3FSXWVHW_cjs.CheckoutDialogFrame; }
42
+ });
43
+ Object.defineProperty(exports, "ConfigSwitcherBar", {
44
+ enumerable: true,
45
+ get: function () { return chunk3FSXWVHW_cjs.ConfigSwitcherBar; }
46
+ });
47
+ Object.defineProperty(exports, "ConnectionCard", {
48
+ enumerable: true,
49
+ get: function () { return chunk3FSXWVHW_cjs.ConnectionCard; }
50
+ });
51
+ Object.defineProperty(exports, "ConnectionsEmpty", {
52
+ enumerable: true,
53
+ get: function () { return chunk3FSXWVHW_cjs.ConnectionsEmpty; }
54
+ });
55
+ Object.defineProperty(exports, "ConnectionsError", {
56
+ enumerable: true,
57
+ get: function () { return chunk3FSXWVHW_cjs.ConnectionsError; }
58
+ });
59
+ Object.defineProperty(exports, "ConnectionsLoading", {
60
+ enumerable: true,
61
+ get: function () { return chunk3FSXWVHW_cjs.ConnectionsLoading; }
62
+ });
63
+ Object.defineProperty(exports, "ConversationTitleSection", {
64
+ enumerable: true,
65
+ get: function () { return chunk3FSXWVHW_cjs.ConversationTitleSection; }
3561
66
  });
3562
67
  Object.defineProperty(exports, "DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS", {
3563
68
  enumerable: true,
3564
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
69
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS; }
70
+ });
71
+ Object.defineProperty(exports, "DEFAULT_APPEARANCE_PAIRING_IDS", {
72
+ enumerable: true,
73
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_APPEARANCE_PAIRING_IDS; }
3565
74
  });
3566
75
  Object.defineProperty(exports, "DEFAULT_AVATAR_PICKER_LABELS", {
3567
76
  enumerable: true,
3568
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
77
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_AVATAR_PICKER_LABELS; }
78
+ });
79
+ Object.defineProperty(exports, "DEFAULT_CHECKOUT_DIALOG_LABELS", {
80
+ enumerable: true,
81
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CHECKOUT_DIALOG_LABELS; }
82
+ });
83
+ Object.defineProperty(exports, "DEFAULT_CONFIG_SWITCHER_BAR_LABELS", {
84
+ enumerable: true,
85
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONFIG_SWITCHER_BAR_LABELS; }
86
+ });
87
+ Object.defineProperty(exports, "DEFAULT_CONNECTION_CARD_LABELS", {
88
+ enumerable: true,
89
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONNECTION_CARD_LABELS; }
90
+ });
91
+ Object.defineProperty(exports, "DEFAULT_CONVERSATION_TITLE_SECTION_LABELS", {
92
+ enumerable: true,
93
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_CONVERSATION_TITLE_SECTION_LABELS; }
94
+ });
95
+ Object.defineProperty(exports, "DEFAULT_DAILY_CAP_FIELD_LABELS", {
96
+ enumerable: true,
97
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_DAILY_CAP_FIELD_LABELS; }
3569
98
  });
3570
99
  Object.defineProperty(exports, "DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS", {
3571
100
  enumerable: true,
3572
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
101
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS; }
102
+ });
103
+ Object.defineProperty(exports, "DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS", {
104
+ enumerable: true,
105
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS; }
106
+ });
107
+ Object.defineProperty(exports, "DEFAULT_ERROR_DIALOG_LABELS", {
108
+ enumerable: true,
109
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_ERROR_DIALOG_LABELS; }
3573
110
  });
3574
111
  Object.defineProperty(exports, "DEFAULT_IDENTITY_VERIFICATION_LABELS", {
3575
112
  enumerable: true,
3576
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
113
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_IDENTITY_VERIFICATION_LABELS; }
114
+ });
115
+ Object.defineProperty(exports, "DEFAULT_INVITE_CONTACTS_DIALOG_LABELS", {
116
+ enumerable: true,
117
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_INVITE_CONTACTS_DIALOG_LABELS; }
118
+ });
119
+ Object.defineProperty(exports, "DEFAULT_INVOICES_DIALOG_LABELS", {
120
+ enumerable: true,
121
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_INVOICES_DIALOG_LABELS; }
3577
122
  });
3578
123
  Object.defineProperty(exports, "DEFAULT_LOGOUT_DIALOG_LABELS", {
3579
124
  enumerable: true,
3580
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
125
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_LOGOUT_DIALOG_LABELS; }
126
+ });
127
+ Object.defineProperty(exports, "DEFAULT_MODEL_SELECTION_SECTION_LABELS", {
128
+ enumerable: true,
129
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_MODEL_SELECTION_SECTION_LABELS; }
3581
130
  });
3582
131
  Object.defineProperty(exports, "DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS", {
3583
132
  enumerable: true,
3584
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
133
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS; }
134
+ });
135
+ Object.defineProperty(exports, "DEFAULT_PLAN_CARD_LABELS", {
136
+ enumerable: true,
137
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PLAN_CARD_LABELS; }
3585
138
  });
3586
139
  Object.defineProperty(exports, "DEFAULT_PROFILE_CARD_LABELS", {
3587
140
  enumerable: true,
3588
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_PROFILE_CARD_LABELS; }
141
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROFILE_CARD_LABELS; }
142
+ });
143
+ Object.defineProperty(exports, "DEFAULT_PROJECT_DETAIL_HEADER_LABELS", {
144
+ enumerable: true,
145
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROJECT_DETAIL_HEADER_LABELS; }
146
+ });
147
+ Object.defineProperty(exports, "DEFAULT_PROJECT_LIST_LABELS", {
148
+ enumerable: true,
149
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_PROJECT_LIST_LABELS; }
150
+ });
151
+ Object.defineProperty(exports, "DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS", {
152
+ enumerable: true,
153
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS; }
154
+ });
155
+ Object.defineProperty(exports, "DEFAULT_REFERRAL_REWARD_LABELS", {
156
+ enumerable: true,
157
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_REFERRAL_REWARD_LABELS; }
158
+ });
159
+ Object.defineProperty(exports, "DEFAULT_RENAME_DIALOG_LABELS", {
160
+ enumerable: true,
161
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_RENAME_DIALOG_LABELS; }
3589
162
  });
3590
163
  Object.defineProperty(exports, "DEFAULT_SETTINGS_DANGER_ZONE_LABELS", {
3591
164
  enumerable: true,
3592
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
165
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SETTINGS_DANGER_ZONE_LABELS; }
166
+ });
167
+ Object.defineProperty(exports, "DEFAULT_SHARED_PROJECTS_SECTION_LABELS", {
168
+ enumerable: true,
169
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SHARED_PROJECTS_SECTION_LABELS; }
170
+ });
171
+ Object.defineProperty(exports, "DEFAULT_SUBSCRIPTION_STATUS_LABELS", {
172
+ enumerable: true,
173
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SUBSCRIPTION_STATUS_LABELS; }
174
+ });
175
+ Object.defineProperty(exports, "DEFAULT_SUPPORT_PANEL_LABELS", {
176
+ enumerable: true,
177
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SUPPORT_PANEL_LABELS; }
178
+ });
179
+ Object.defineProperty(exports, "DEFAULT_SYNC_DIALOG_FOOTER_LABELS", {
180
+ enumerable: true,
181
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SYNC_DIALOG_FOOTER_LABELS; }
182
+ });
183
+ Object.defineProperty(exports, "DEFAULT_SYNC_FOLDER_ROW_LABELS", {
184
+ enumerable: true,
185
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_SYNC_FOLDER_ROW_LABELS; }
186
+ });
187
+ Object.defineProperty(exports, "DEFAULT_TIPS_EDITOR_LABELS", {
188
+ enumerable: true,
189
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_TIPS_EDITOR_LABELS; }
190
+ });
191
+ Object.defineProperty(exports, "DEFAULT_USAGE_LINE_CHART_LABELS", {
192
+ enumerable: true,
193
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_LINE_CHART_LABELS; }
194
+ });
195
+ Object.defineProperty(exports, "DEFAULT_USAGE_PANEL_LABELS", {
196
+ enumerable: true,
197
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_PANEL_LABELS; }
198
+ });
199
+ Object.defineProperty(exports, "DEFAULT_USAGE_PROPORTION_BAR_LABELS", {
200
+ enumerable: true,
201
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_USAGE_PROPORTION_BAR_LABELS; }
202
+ });
203
+ Object.defineProperty(exports, "DEFAULT_WELCOME_DIALOG_LABELS", {
204
+ enumerable: true,
205
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_WELCOME_DIALOG_LABELS; }
3593
206
  });
3594
207
  Object.defineProperty(exports, "DEFAULT_WORK_OFFLINE_LABELS", {
3595
208
  enumerable: true,
3596
- get: function () { return chunkU73KPFYH_cjs.DEFAULT_WORK_OFFLINE_LABELS; }
209
+ get: function () { return chunk3FSXWVHW_cjs.DEFAULT_WORK_OFFLINE_LABELS; }
210
+ });
211
+ Object.defineProperty(exports, "DailyCapField", {
212
+ enumerable: true,
213
+ get: function () { return chunk3FSXWVHW_cjs.DailyCapField; }
3597
214
  });
3598
215
  Object.defineProperty(exports, "DeleteAccountDialog", {
3599
216
  enumerable: true,
3600
- get: function () { return chunkU73KPFYH_cjs.DeleteAccountDialog; }
217
+ get: function () { return chunk3FSXWVHW_cjs.DeleteAccountDialog; }
3601
218
  });
3602
219
  Object.defineProperty(exports, "DraggableHeader", {
3603
220
  enumerable: true,
3604
- get: function () { return chunkU73KPFYH_cjs.DraggableHeader; }
221
+ get: function () { return chunk3FSXWVHW_cjs.DraggableHeader; }
3605
222
  });
3606
223
  Object.defineProperty(exports, "EMAIL_NOTIFICATION_CATEGORIES", {
3607
224
  enumerable: true,
3608
- get: function () { return chunkU73KPFYH_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
225
+ get: function () { return chunk3FSXWVHW_cjs.EMAIL_NOTIFICATION_CATEGORIES; }
3609
226
  });
3610
227
  Object.defineProperty(exports, "EMAIL_NOTIFICATION_KEYS", {
3611
228
  enumerable: true,
3612
- get: function () { return chunkU73KPFYH_cjs.EMAIL_NOTIFICATION_KEYS; }
229
+ get: function () { return chunk3FSXWVHW_cjs.EMAIL_NOTIFICATION_KEYS; }
230
+ });
231
+ Object.defineProperty(exports, "EmailWorkspaceDialogView", {
232
+ enumerable: true,
233
+ get: function () { return chunk3FSXWVHW_cjs.EmailWorkspaceDialogView; }
234
+ });
235
+ Object.defineProperty(exports, "ErrorDialogView", {
236
+ enumerable: true,
237
+ get: function () { return chunk3FSXWVHW_cjs.ErrorDialogView; }
238
+ });
239
+ Object.defineProperty(exports, "FilterChip", {
240
+ enumerable: true,
241
+ get: function () { return chunk3FSXWVHW_cjs.FilterChip; }
242
+ });
243
+ Object.defineProperty(exports, "FloatingPanel", {
244
+ enumerable: true,
245
+ get: function () { return chunk3FSXWVHW_cjs.FloatingPanel; }
3613
246
  });
3614
247
  Object.defineProperty(exports, "IdentityVerificationCard", {
3615
248
  enumerable: true,
3616
- get: function () { return chunkU73KPFYH_cjs.IdentityVerificationCard; }
249
+ get: function () { return chunk3FSXWVHW_cjs.IdentityVerificationCard; }
3617
250
  });
3618
251
  Object.defineProperty(exports, "IdentityVerificationDialog", {
3619
252
  enumerable: true,
3620
- get: function () { return chunkU73KPFYH_cjs.IdentityVerificationDialog; }
253
+ get: function () { return chunk3FSXWVHW_cjs.IdentityVerificationDialog; }
254
+ });
255
+ Object.defineProperty(exports, "InviteContactsDialog", {
256
+ enumerable: true,
257
+ get: function () { return chunk3FSXWVHW_cjs.InviteContactsDialog; }
258
+ });
259
+ Object.defineProperty(exports, "InvoicesDialog", {
260
+ enumerable: true,
261
+ get: function () { return chunk3FSXWVHW_cjs.InvoicesDialog; }
262
+ });
263
+ Object.defineProperty(exports, "JsonTree", {
264
+ enumerable: true,
265
+ get: function () { return chunk3FSXWVHW_cjs.JsonTree; }
3621
266
  });
3622
267
  Object.defineProperty(exports, "LogoutDialog", {
3623
268
  enumerable: true,
3624
- get: function () { return chunkU73KPFYH_cjs.LogoutDialog; }
269
+ get: function () { return chunk3FSXWVHW_cjs.LogoutDialog; }
270
+ });
271
+ Object.defineProperty(exports, "MessageJsonTree", {
272
+ enumerable: true,
273
+ get: function () { return chunk3FSXWVHW_cjs.MessageJsonTree; }
3625
274
  });
3626
275
  Object.defineProperty(exports, "ModelProviderLabel", {
3627
276
  enumerable: true,
3628
- get: function () { return chunkU73KPFYH_cjs.ModelProviderLabel; }
277
+ get: function () { return chunk3FSXWVHW_cjs.ModelProviderLabel; }
278
+ });
279
+ Object.defineProperty(exports, "ModelSelectionSection", {
280
+ enumerable: true,
281
+ get: function () { return chunk3FSXWVHW_cjs.ModelSelectionSection; }
282
+ });
283
+ Object.defineProperty(exports, "MoreInfo", {
284
+ enumerable: true,
285
+ get: function () { return chunk3FSXWVHW_cjs.MoreInfo; }
286
+ });
287
+ Object.defineProperty(exports, "MoreInfoList", {
288
+ enumerable: true,
289
+ get: function () { return chunk3FSXWVHW_cjs.MoreInfoList; }
3629
290
  });
3630
291
  Object.defineProperty(exports, "NotificationCategoryList", {
3631
292
  enumerable: true,
3632
- get: function () { return chunkU73KPFYH_cjs.NotificationCategoryList; }
293
+ get: function () { return chunk3FSXWVHW_cjs.NotificationCategoryList; }
3633
294
  });
3634
295
  Object.defineProperty(exports, "PanelActionsRow", {
3635
296
  enumerable: true,
3636
- get: function () { return chunkU73KPFYH_cjs.PanelActionsRow; }
297
+ get: function () { return chunk3FSXWVHW_cjs.PanelActionsRow; }
3637
298
  });
3638
299
  Object.defineProperty(exports, "PanelAddButton", {
3639
300
  enumerable: true,
3640
- get: function () { return chunkU73KPFYH_cjs.PanelAddButton; }
301
+ get: function () { return chunk3FSXWVHW_cjs.PanelAddButton; }
3641
302
  });
3642
303
  Object.defineProperty(exports, "PanelFrame", {
3643
304
  enumerable: true,
3644
- get: function () { return chunkU73KPFYH_cjs.PanelFrame; }
305
+ get: function () { return chunk3FSXWVHW_cjs.PanelFrame; }
3645
306
  });
3646
307
  Object.defineProperty(exports, "PanelFrameBody", {
3647
308
  enumerable: true,
3648
- get: function () { return chunkU73KPFYH_cjs.PanelFrameBody; }
309
+ get: function () { return chunk3FSXWVHW_cjs.PanelFrameBody; }
3649
310
  });
3650
311
  Object.defineProperty(exports, "PanelNote", {
3651
312
  enumerable: true,
3652
- get: function () { return chunkU73KPFYH_cjs.PanelNote; }
313
+ get: function () { return chunk3FSXWVHW_cjs.PanelNote; }
3653
314
  });
3654
315
  Object.defineProperty(exports, "PanelScroll", {
3655
316
  enumerable: true,
3656
- get: function () { return chunkU73KPFYH_cjs.PanelScroll; }
317
+ get: function () { return chunk3FSXWVHW_cjs.PanelScroll; }
3657
318
  });
3658
319
  Object.defineProperty(exports, "PanelTitleBar", {
3659
320
  enumerable: true,
3660
- get: function () { return chunkU73KPFYH_cjs.PanelTitleBar; }
321
+ get: function () { return chunk3FSXWVHW_cjs.PanelTitleBar; }
3661
322
  });
3662
323
  Object.defineProperty(exports, "PasswordChangeDialog", {
3663
324
  enumerable: true,
3664
- get: function () { return chunkU73KPFYH_cjs.PasswordChangeDialog; }
325
+ get: function () { return chunk3FSXWVHW_cjs.PasswordChangeDialog; }
326
+ });
327
+ Object.defineProperty(exports, "PlanActionButton", {
328
+ enumerable: true,
329
+ get: function () { return chunk3FSXWVHW_cjs.PlanActionButton; }
330
+ });
331
+ Object.defineProperty(exports, "PlanActionRow", {
332
+ enumerable: true,
333
+ get: function () { return chunk3FSXWVHW_cjs.PlanActionRow; }
334
+ });
335
+ Object.defineProperty(exports, "PlanBadge", {
336
+ enumerable: true,
337
+ get: function () { return chunk3FSXWVHW_cjs.PlanBadge; }
338
+ });
339
+ Object.defineProperty(exports, "PlanCard", {
340
+ enumerable: true,
341
+ get: function () { return chunk3FSXWVHW_cjs.PlanCard; }
342
+ });
343
+ Object.defineProperty(exports, "PlanCardGrid", {
344
+ enumerable: true,
345
+ get: function () { return chunk3FSXWVHW_cjs.PlanCardGrid; }
346
+ });
347
+ Object.defineProperty(exports, "PlanDialogFrame", {
348
+ enumerable: true,
349
+ get: function () { return chunk3FSXWVHW_cjs.PlanDialogFrame; }
350
+ });
351
+ Object.defineProperty(exports, "PlanInfoPopover", {
352
+ enumerable: true,
353
+ get: function () { return chunk3FSXWVHW_cjs.PlanInfoPopover; }
354
+ });
355
+ Object.defineProperty(exports, "PlanNotice", {
356
+ enumerable: true,
357
+ get: function () { return chunk3FSXWVHW_cjs.PlanNotice; }
358
+ });
359
+ Object.defineProperty(exports, "PlanPickerCard", {
360
+ enumerable: true,
361
+ get: function () { return chunk3FSXWVHW_cjs.PlanPickerCard; }
362
+ });
363
+ Object.defineProperty(exports, "PlanPickerHeader", {
364
+ enumerable: true,
365
+ get: function () { return chunk3FSXWVHW_cjs.PlanPickerHeader; }
366
+ });
367
+ Object.defineProperty(exports, "PlanStack", {
368
+ enumerable: true,
369
+ get: function () { return chunk3FSXWVHW_cjs.PlanStack; }
370
+ });
371
+ Object.defineProperty(exports, "PlanTierOption", {
372
+ enumerable: true,
373
+ get: function () { return chunk3FSXWVHW_cjs.PlanTierOption; }
3665
374
  });
3666
375
  Object.defineProperty(exports, "PremiumModelsFrame", {
3667
376
  enumerable: true,
3668
- get: function () { return chunkU73KPFYH_cjs.PremiumModelsFrame; }
377
+ get: function () { return chunk3FSXWVHW_cjs.PremiumModelsFrame; }
378
+ });
379
+ Object.defineProperty(exports, "PricingToggle", {
380
+ enumerable: true,
381
+ get: function () { return chunk3FSXWVHW_cjs.PricingToggle; }
3669
382
  });
3670
383
  Object.defineProperty(exports, "ProfileCard", {
3671
384
  enumerable: true,
3672
- get: function () { return chunkU73KPFYH_cjs.ProfileCard; }
385
+ get: function () { return chunk3FSXWVHW_cjs.ProfileCard; }
386
+ });
387
+ Object.defineProperty(exports, "ProjectDetailHeader", {
388
+ enumerable: true,
389
+ get: function () { return chunk3FSXWVHW_cjs.ProjectDetailHeader; }
390
+ });
391
+ Object.defineProperty(exports, "ProjectDetailSection", {
392
+ enumerable: true,
393
+ get: function () { return chunk3FSXWVHW_cjs.ProjectDetailSection; }
394
+ });
395
+ Object.defineProperty(exports, "ProjectGroup", {
396
+ enumerable: true,
397
+ get: function () { return chunk3FSXWVHW_cjs.ProjectGroup; }
398
+ });
399
+ Object.defineProperty(exports, "ProjectList", {
400
+ enumerable: true,
401
+ get: function () { return chunk3FSXWVHW_cjs.ProjectList; }
402
+ });
403
+ Object.defineProperty(exports, "ProjectRow", {
404
+ enumerable: true,
405
+ get: function () { return chunk3FSXWVHW_cjs.ProjectRow; }
406
+ });
407
+ Object.defineProperty(exports, "PromoCodeInput", {
408
+ enumerable: true,
409
+ get: function () { return chunk3FSXWVHW_cjs.PromoCodeInput; }
410
+ });
411
+ Object.defineProperty(exports, "QuotaExceededDialogView", {
412
+ enumerable: true,
413
+ get: function () { return chunk3FSXWVHW_cjs.QuotaExceededDialogView; }
414
+ });
415
+ Object.defineProperty(exports, "QuotaMeter", {
416
+ enumerable: true,
417
+ get: function () { return chunk3FSXWVHW_cjs.QuotaMeter; }
418
+ });
419
+ Object.defineProperty(exports, "ReferralRewardBadge", {
420
+ enumerable: true,
421
+ get: function () { return chunk3FSXWVHW_cjs.ReferralRewardBadge; }
422
+ });
423
+ Object.defineProperty(exports, "ReferralRewardNote", {
424
+ enumerable: true,
425
+ get: function () { return chunk3FSXWVHW_cjs.ReferralRewardNote; }
426
+ });
427
+ Object.defineProperty(exports, "ReferralRewardSummary", {
428
+ enumerable: true,
429
+ get: function () { return chunk3FSXWVHW_cjs.ReferralRewardSummary; }
430
+ });
431
+ Object.defineProperty(exports, "RenameDialog", {
432
+ enumerable: true,
433
+ get: function () { return chunk3FSXWVHW_cjs.RenameDialog; }
3673
434
  });
3674
435
  Object.defineProperty(exports, "RequireVerified", {
3675
436
  enumerable: true,
3676
- get: function () { return chunkU73KPFYH_cjs.RequireVerified; }
437
+ get: function () { return chunk3FSXWVHW_cjs.RequireVerified; }
438
+ });
439
+ Object.defineProperty(exports, "SegmentedControl", {
440
+ enumerable: true,
441
+ get: function () { return chunk3FSXWVHW_cjs.SegmentedControl; }
3677
442
  });
3678
443
  Object.defineProperty(exports, "ServerConnectionButton", {
3679
444
  enumerable: true,
3680
- get: function () { return chunkU73KPFYH_cjs.ServerConnectionButton; }
445
+ get: function () { return chunk3FSXWVHW_cjs.ServerConnectionButton; }
3681
446
  });
3682
447
  Object.defineProperty(exports, "SettingsActionRow", {
3683
448
  enumerable: true,
3684
- get: function () { return chunkU73KPFYH_cjs.SettingsActionRow; }
449
+ get: function () { return chunk3FSXWVHW_cjs.SettingsActionRow; }
3685
450
  });
3686
451
  Object.defineProperty(exports, "SettingsCard", {
3687
452
  enumerable: true,
3688
- get: function () { return chunkU73KPFYH_cjs.SettingsCard; }
453
+ get: function () { return chunk3FSXWVHW_cjs.SettingsCard; }
3689
454
  });
3690
455
  Object.defineProperty(exports, "SettingsDangerZone", {
3691
456
  enumerable: true,
3692
- get: function () { return chunkU73KPFYH_cjs.SettingsDangerZone; }
457
+ get: function () { return chunk3FSXWVHW_cjs.SettingsDangerZone; }
3693
458
  });
3694
459
  Object.defineProperty(exports, "SettingsPage", {
3695
460
  enumerable: true,
3696
- get: function () { return chunkU73KPFYH_cjs.SettingsPage; }
461
+ get: function () { return chunk3FSXWVHW_cjs.SettingsPage; }
3697
462
  });
3698
463
  Object.defineProperty(exports, "SettingsPanel", {
3699
464
  enumerable: true,
3700
- get: function () { return chunkU73KPFYH_cjs.SettingsPanel; }
465
+ get: function () { return chunk3FSXWVHW_cjs.SettingsPanel; }
3701
466
  });
3702
467
  Object.defineProperty(exports, "SettingsRow", {
3703
468
  enumerable: true,
3704
- get: function () { return chunkU73KPFYH_cjs.SettingsRow; }
469
+ get: function () { return chunk3FSXWVHW_cjs.SettingsRow; }
3705
470
  });
3706
471
  Object.defineProperty(exports, "SettingsSection", {
3707
472
  enumerable: true,
3708
- get: function () { return chunkU73KPFYH_cjs.SettingsSection; }
473
+ get: function () { return chunk3FSXWVHW_cjs.SettingsSection; }
3709
474
  });
3710
475
  Object.defineProperty(exports, "SettingsSwitchGroup", {
3711
476
  enumerable: true,
3712
- get: function () { return chunkU73KPFYH_cjs.SettingsSwitchGroup; }
477
+ get: function () { return chunk3FSXWVHW_cjs.SettingsSwitchGroup; }
3713
478
  });
3714
479
  Object.defineProperty(exports, "SettingsSwitchRow", {
3715
480
  enumerable: true,
3716
- get: function () { return chunkU73KPFYH_cjs.SettingsSwitchRow; }
481
+ get: function () { return chunk3FSXWVHW_cjs.SettingsSwitchRow; }
482
+ });
483
+ Object.defineProperty(exports, "SharedProjectRow", {
484
+ enumerable: true,
485
+ get: function () { return chunk3FSXWVHW_cjs.SharedProjectRow; }
486
+ });
487
+ Object.defineProperty(exports, "SharedProjectsSection", {
488
+ enumerable: true,
489
+ get: function () { return chunk3FSXWVHW_cjs.SharedProjectsSection; }
490
+ });
491
+ Object.defineProperty(exports, "SubscriptionStatusView", {
492
+ enumerable: true,
493
+ get: function () { return chunk3FSXWVHW_cjs.SubscriptionStatusView; }
494
+ });
495
+ Object.defineProperty(exports, "SupportPanel", {
496
+ enumerable: true,
497
+ get: function () { return chunk3FSXWVHW_cjs.SupportPanel; }
498
+ });
499
+ Object.defineProperty(exports, "SupportUnavailable", {
500
+ enumerable: true,
501
+ get: function () { return chunk3FSXWVHW_cjs.SupportUnavailable; }
502
+ });
503
+ Object.defineProperty(exports, "SyncCheckList", {
504
+ enumerable: true,
505
+ get: function () { return chunk3FSXWVHW_cjs.SyncCheckList; }
506
+ });
507
+ Object.defineProperty(exports, "SyncDialogBody", {
508
+ enumerable: true,
509
+ get: function () { return chunk3FSXWVHW_cjs.SyncDialogBody; }
510
+ });
511
+ Object.defineProperty(exports, "SyncDialogFooter", {
512
+ enumerable: true,
513
+ get: function () { return chunk3FSXWVHW_cjs.SyncDialogFooter; }
514
+ });
515
+ Object.defineProperty(exports, "SyncField", {
516
+ enumerable: true,
517
+ get: function () { return chunk3FSXWVHW_cjs.SyncField; }
518
+ });
519
+ Object.defineProperty(exports, "SyncFolderRow", {
520
+ enumerable: true,
521
+ get: function () { return chunk3FSXWVHW_cjs.SyncFolderRow; }
522
+ });
523
+ Object.defineProperty(exports, "SyncFolderStatus", {
524
+ enumerable: true,
525
+ get: function () { return chunk3FSXWVHW_cjs.SyncFolderStatus; }
526
+ });
527
+ Object.defineProperty(exports, "SyncLinkButton", {
528
+ enumerable: true,
529
+ get: function () { return chunk3FSXWVHW_cjs.SyncLinkButton; }
530
+ });
531
+ Object.defineProperty(exports, "SyncLinkRow", {
532
+ enumerable: true,
533
+ get: function () { return chunk3FSXWVHW_cjs.SyncLinkRow; }
534
+ });
535
+ Object.defineProperty(exports, "SyncLoading", {
536
+ enumerable: true,
537
+ get: function () { return chunk3FSXWVHW_cjs.SyncLoading; }
538
+ });
539
+ Object.defineProperty(exports, "SyncNote", {
540
+ enumerable: true,
541
+ get: function () { return chunk3FSXWVHW_cjs.SyncNote; }
542
+ });
543
+ Object.defineProperty(exports, "SyncOptionToggle", {
544
+ enumerable: true,
545
+ get: function () { return chunk3FSXWVHW_cjs.SyncOptionToggle; }
546
+ });
547
+ Object.defineProperty(exports, "SyncOptions", {
548
+ enumerable: true,
549
+ get: function () { return chunk3FSXWVHW_cjs.SyncOptions; }
550
+ });
551
+ Object.defineProperty(exports, "SyncReconnectNotice", {
552
+ enumerable: true,
553
+ get: function () { return chunk3FSXWVHW_cjs.SyncReconnectNotice; }
554
+ });
555
+ Object.defineProperty(exports, "SyncSelect", {
556
+ enumerable: true,
557
+ get: function () { return chunk3FSXWVHW_cjs.SyncSelect; }
558
+ });
559
+ Object.defineProperty(exports, "SyncSmallNote", {
560
+ enumerable: true,
561
+ get: function () { return chunk3FSXWVHW_cjs.SyncSmallNote; }
562
+ });
563
+ Object.defineProperty(exports, "SyncTreeFrame", {
564
+ enumerable: true,
565
+ get: function () { return chunk3FSXWVHW_cjs.SyncTreeFrame; }
566
+ });
567
+ Object.defineProperty(exports, "ThreadPreviewDialog", {
568
+ enumerable: true,
569
+ get: function () { return chunk3FSXWVHW_cjs.ThreadPreviewDialog; }
570
+ });
571
+ Object.defineProperty(exports, "TipsEditorDialog", {
572
+ enumerable: true,
573
+ get: function () { return chunk3FSXWVHW_cjs.TipsEditorDialog; }
574
+ });
575
+ Object.defineProperty(exports, "UsageActionButton", {
576
+ enumerable: true,
577
+ get: function () { return chunk3FSXWVHW_cjs.UsageActionButton; }
578
+ });
579
+ Object.defineProperty(exports, "UsageLegend", {
580
+ enumerable: true,
581
+ get: function () { return chunk3FSXWVHW_cjs.UsageLegend; }
582
+ });
583
+ Object.defineProperty(exports, "UsageLineChart", {
584
+ enumerable: true,
585
+ get: function () { return chunk3FSXWVHW_cjs.UsageLineChart; }
586
+ });
587
+ Object.defineProperty(exports, "UsagePanel", {
588
+ enumerable: true,
589
+ get: function () { return chunk3FSXWVHW_cjs.UsagePanel; }
590
+ });
591
+ Object.defineProperty(exports, "UsageProportionBar", {
592
+ enumerable: true,
593
+ get: function () { return chunk3FSXWVHW_cjs.UsageProportionBar; }
594
+ });
595
+ Object.defineProperty(exports, "UsageQuotaHint", {
596
+ enumerable: true,
597
+ get: function () { return chunk3FSXWVHW_cjs.UsageQuotaHint; }
598
+ });
599
+ Object.defineProperty(exports, "UsageSection", {
600
+ enumerable: true,
601
+ get: function () { return chunk3FSXWVHW_cjs.UsageSection; }
602
+ });
603
+ Object.defineProperty(exports, "UsageSummary", {
604
+ enumerable: true,
605
+ get: function () { return chunk3FSXWVHW_cjs.UsageSummary; }
606
+ });
607
+ Object.defineProperty(exports, "UsageToggle", {
608
+ enumerable: true,
609
+ get: function () { return chunk3FSXWVHW_cjs.UsageToggle; }
610
+ });
611
+ Object.defineProperty(exports, "WelcomeDialog", {
612
+ enumerable: true,
613
+ get: function () { return chunk3FSXWVHW_cjs.WelcomeDialog; }
614
+ });
615
+ Object.defineProperty(exports, "WelcomeProjectPicker", {
616
+ enumerable: true,
617
+ get: function () { return chunk3FSXWVHW_cjs.WelcomeProjectPicker; }
3717
618
  });
3718
619
  Object.defineProperty(exports, "WorkOfflineToggle", {
3719
620
  enumerable: true,
3720
- get: function () { return chunkU73KPFYH_cjs.WorkOfflineToggle; }
621
+ get: function () { return chunk3FSXWVHW_cjs.WorkOfflineToggle; }
622
+ });
623
+ Object.defineProperty(exports, "applyInvertedIndexFilter", {
624
+ enumerable: true,
625
+ get: function () { return chunk3FSXWVHW_cjs.applyInvertedIndexFilter; }
626
+ });
627
+ Object.defineProperty(exports, "buildInvertedIndex", {
628
+ enumerable: true,
629
+ get: function () { return chunk3FSXWVHW_cjs.buildInvertedIndex; }
3721
630
  });
3722
631
  Object.defineProperty(exports, "formatSessionTtl", {
3723
632
  enumerable: true,
3724
- get: function () { return chunkU73KPFYH_cjs.formatSessionTtl; }
633
+ get: function () { return chunk3FSXWVHW_cjs.formatSessionTtl; }
3725
634
  });
3726
635
  Object.defineProperty(exports, "resolveSettingsSection", {
3727
636
  enumerable: true,
3728
- get: function () { return chunkU73KPFYH_cjs.resolveSettingsSection; }
637
+ get: function () { return chunk3FSXWVHW_cjs.resolveSettingsSection; }
3729
638
  });
3730
639
  Object.defineProperty(exports, "serverConnectionView", {
3731
640
  enumerable: true,
3732
- get: function () { return chunkU73KPFYH_cjs.serverConnectionView; }
641
+ get: function () { return chunk3FSXWVHW_cjs.serverConnectionView; }
3733
642
  });
3734
643
  Object.defineProperty(exports, "toActiveSessionViews", {
3735
644
  enumerable: true,
3736
- get: function () { return chunkU73KPFYH_cjs.toActiveSessionViews; }
645
+ get: function () { return chunk3FSXWVHW_cjs.toActiveSessionViews; }
3737
646
  });
3738
647
  Object.defineProperty(exports, "toDeleteBlockerViews", {
3739
648
  enumerable: true,
3740
- get: function () { return chunkU73KPFYH_cjs.toDeleteBlockerViews; }
649
+ get: function () { return chunk3FSXWVHW_cjs.toDeleteBlockerViews; }
3741
650
  });
3742
651
  Object.defineProperty(exports, "toLogoutSessionViews", {
3743
652
  enumerable: true,
3744
- get: function () { return chunkU73KPFYH_cjs.toLogoutSessionViews; }
653
+ get: function () { return chunk3FSXWVHW_cjs.toLogoutSessionViews; }
3745
654
  });
3746
655
  Object.defineProperty(exports, "toNotificationCategories", {
3747
656
  enumerable: true,
3748
- get: function () { return chunkU73KPFYH_cjs.toNotificationCategories; }
657
+ get: function () { return chunk3FSXWVHW_cjs.toNotificationCategories; }
3749
658
  });
3750
659
  Object.defineProperty(exports, "ModalBreadcrumbHeader", {
3751
660
  enumerable: true,
@@ -3777,11 +686,11 @@ Object.defineProperty(exports, "TriStateFilterMenu", {
3777
686
  });
3778
687
  Object.defineProperty(exports, "ConfirmDialog", {
3779
688
  enumerable: true,
3780
- get: function () { return chunkDWZXSPMB_cjs.ConfirmDialog; }
689
+ get: function () { return chunkZAVEMQ37_cjs.ConfirmDialog; }
3781
690
  });
3782
691
  Object.defineProperty(exports, "DEFAULT_CONFIRM_DIALOG_LABELS", {
3783
692
  enumerable: true,
3784
- get: function () { return chunkDWZXSPMB_cjs.DEFAULT_CONFIRM_DIALOG_LABELS; }
693
+ get: function () { return chunkZAVEMQ37_cjs.DEFAULT_CONFIRM_DIALOG_LABELS; }
3785
694
  });
3786
695
  Object.defineProperty(exports, "MODAL_SECTION_TITLE_CLASS", {
3787
696
  enumerable: true,
@@ -3803,127 +712,5 @@ Object.defineProperty(exports, "ModalSectionTitle", {
3803
712
  enumerable: true,
3804
713
  get: function () { return chunkULWRNGGE_cjs.ModalSectionTitle; }
3805
714
  });
3806
- exports.AppearanceSettings = AppearanceSettings;
3807
- exports.CONVERSATION_TITLE_MAX = CONVERSATION_TITLE_MAX;
3808
- exports.CheckoutDialogFrame = CheckoutDialogFrame;
3809
- exports.ConfigSwitcherBar = ConfigSwitcherBar;
3810
- exports.ConnectionCard = ConnectionCard;
3811
- exports.ConnectionsEmpty = ConnectionsEmpty;
3812
- exports.ConnectionsError = ConnectionsError;
3813
- exports.ConnectionsLoading = ConnectionsLoading;
3814
- exports.ConversationTitleSection = ConversationTitleSection;
3815
- exports.DEFAULT_APPEARANCE_PAIRING_IDS = DEFAULT_APPEARANCE_PAIRING_IDS;
3816
- exports.DEFAULT_CHECKOUT_DIALOG_LABELS = DEFAULT_CHECKOUT_DIALOG_LABELS;
3817
- exports.DEFAULT_CONFIG_SWITCHER_BAR_LABELS = DEFAULT_CONFIG_SWITCHER_BAR_LABELS;
3818
- exports.DEFAULT_CONNECTION_CARD_LABELS = DEFAULT_CONNECTION_CARD_LABELS;
3819
- exports.DEFAULT_CONVERSATION_TITLE_SECTION_LABELS = DEFAULT_CONVERSATION_TITLE_SECTION_LABELS;
3820
- exports.DEFAULT_DAILY_CAP_FIELD_LABELS = DEFAULT_DAILY_CAP_FIELD_LABELS;
3821
- exports.DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS = DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS;
3822
- exports.DEFAULT_ERROR_DIALOG_LABELS = DEFAULT_ERROR_DIALOG_LABELS;
3823
- exports.DEFAULT_INLINE_NAME_EDITOR_LABELS = DEFAULT_INLINE_NAME_EDITOR_LABELS;
3824
- exports.DEFAULT_INVITE_CONTACTS_DIALOG_LABELS = DEFAULT_INVITE_CONTACTS_DIALOG_LABELS;
3825
- exports.DEFAULT_INVOICES_DIALOG_LABELS = DEFAULT_INVOICES_DIALOG_LABELS;
3826
- exports.DEFAULT_MEMBER_PROJECT_ROW_LABELS = DEFAULT_MEMBER_PROJECT_ROW_LABELS;
3827
- exports.DEFAULT_MODEL_SELECTION_SECTION_LABELS = DEFAULT_MODEL_SELECTION_SECTION_LABELS;
3828
- exports.DEFAULT_PLAN_CARD_LABELS = DEFAULT_PLAN_CARD_LABELS;
3829
- exports.DEFAULT_PROJECT_CARD_VIEW_LABELS = DEFAULT_PROJECT_CARD_VIEW_LABELS;
3830
- exports.DEFAULT_PROJECT_DETAIL_HEADER_LABELS = DEFAULT_PROJECT_DETAIL_HEADER_LABELS;
3831
- exports.DEFAULT_PROJECT_LIST_LABELS = DEFAULT_PROJECT_LIST_LABELS;
3832
- exports.DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS = DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS;
3833
- exports.DEFAULT_REFERRAL_REWARD_LABELS = DEFAULT_REFERRAL_REWARD_LABELS;
3834
- exports.DEFAULT_RENAME_DIALOG_LABELS = DEFAULT_RENAME_DIALOG_LABELS;
3835
- exports.DEFAULT_SHARED_PROJECTS_SECTION_LABELS = DEFAULT_SHARED_PROJECTS_SECTION_LABELS;
3836
- exports.DEFAULT_SUBSCRIPTION_SECTION_LABELS = DEFAULT_SUBSCRIPTION_SECTION_LABELS;
3837
- exports.DEFAULT_SUBSCRIPTION_STATUS_LABELS = DEFAULT_SUBSCRIPTION_STATUS_LABELS;
3838
- exports.DEFAULT_SUPPORT_PANEL_LABELS = DEFAULT_SUPPORT_PANEL_LABELS;
3839
- exports.DEFAULT_SYNC_DIALOG_FOOTER_LABELS = DEFAULT_SYNC_DIALOG_FOOTER_LABELS;
3840
- exports.DEFAULT_SYNC_FOLDER_ROW_LABELS = DEFAULT_SYNC_FOLDER_ROW_LABELS;
3841
- exports.DEFAULT_TIPS_EDITOR_LABELS = DEFAULT_TIPS_EDITOR_LABELS;
3842
- exports.DEFAULT_USAGE_LINE_CHART_LABELS = DEFAULT_USAGE_LINE_CHART_LABELS;
3843
- exports.DEFAULT_USAGE_PANEL_LABELS = DEFAULT_USAGE_PANEL_LABELS;
3844
- exports.DEFAULT_USAGE_PROPORTION_BAR_LABELS = DEFAULT_USAGE_PROPORTION_BAR_LABELS;
3845
- exports.DEFAULT_WELCOME_DIALOG_LABELS = DEFAULT_WELCOME_DIALOG_LABELS;
3846
- exports.DailyCapField = DailyCapField;
3847
- exports.EmailWorkspaceDialogView = EmailWorkspaceDialogView;
3848
- exports.ErrorDialogView = ErrorDialogView;
3849
- exports.FilterChip = FilterChip;
3850
- exports.FloatingPanel = FloatingPanel;
3851
- exports.InlineNameEditor = InlineNameEditor;
3852
- exports.InviteContactsDialog = InviteContactsDialog;
3853
- exports.InvoicesDialog = InvoicesDialog;
3854
- exports.JsonTree = JsonTree;
3855
- exports.MemberProjectRow = MemberProjectRow;
3856
- exports.MessageJsonTree = MessageJsonTree;
3857
- exports.ModelSelectionSection = ModelSelectionSection;
3858
- exports.MoreInfo = MoreInfo;
3859
- exports.MoreInfoList = MoreInfoList;
3860
- exports.PlanActionButton = PlanActionButton;
3861
- exports.PlanActionRow = PlanActionRow;
3862
- exports.PlanBadge = PlanBadge;
3863
- exports.PlanCard = PlanCard;
3864
- exports.PlanCardGrid = PlanCardGrid;
3865
- exports.PlanDialogFrame = PlanDialogFrame;
3866
- exports.PlanInfoPopover = PlanInfoPopover;
3867
- exports.PlanNotice = PlanNotice;
3868
- exports.PlanPickerCard = PlanPickerCard;
3869
- exports.PlanPickerHeader = PlanPickerHeader;
3870
- exports.PlanStack = PlanStack;
3871
- exports.PlanTierOption = PlanTierOption;
3872
- exports.PlanTransition = PlanTransition;
3873
- exports.PricingToggle = PricingToggle;
3874
- exports.ProjectCardView = ProjectCardView;
3875
- exports.ProjectDetailHeader = ProjectDetailHeader;
3876
- exports.ProjectDetailSection = ProjectDetailSection;
3877
- exports.ProjectGroup = ProjectGroup;
3878
- exports.ProjectList = ProjectList;
3879
- exports.ProjectNameLabel = ProjectNameLabel;
3880
- exports.ProjectPlanPicker = ProjectPlanPicker;
3881
- exports.ProjectRow = ProjectRow;
3882
- exports.ProjectRowActions = ProjectRowActions;
3883
- exports.PromoCodeInput = PromoCodeInput;
3884
- exports.QuotaExceededDialogView = QuotaExceededDialogView;
3885
- exports.QuotaMeter = QuotaMeter;
3886
- exports.ReferralRewardBadge = ReferralRewardBadge;
3887
- exports.ReferralRewardNote = ReferralRewardNote;
3888
- exports.ReferralRewardSummary = ReferralRewardSummary;
3889
- exports.RenameDialog = RenameDialog;
3890
- exports.RowButton = RowButton;
3891
- exports.RowIconAction = RowIconAction;
3892
- exports.SegmentedControl = SegmentedControl;
3893
- exports.SharedProjectRow = SharedProjectRow;
3894
- exports.SharedProjectsSection = SharedProjectsSection;
3895
- exports.SubscriptionSectionView = SubscriptionSectionView;
3896
- exports.SubscriptionStatusView = SubscriptionStatusView;
3897
- exports.SupportPanel = SupportPanel;
3898
- exports.SupportUnavailable = SupportUnavailable;
3899
- exports.SyncCheckList = SyncCheckList;
3900
- exports.SyncDialogBody = SyncDialogBody;
3901
- exports.SyncDialogFooter = SyncDialogFooter;
3902
- exports.SyncField = SyncField;
3903
- exports.SyncFolderRow = SyncFolderRow;
3904
- exports.SyncFolderStatus = SyncFolderStatus;
3905
- exports.SyncLinkButton = SyncLinkButton;
3906
- exports.SyncLinkRow = SyncLinkRow;
3907
- exports.SyncLoading = SyncLoading;
3908
- exports.SyncNote = SyncNote;
3909
- exports.SyncOptionToggle = SyncOptionToggle;
3910
- exports.SyncOptions = SyncOptions;
3911
- exports.SyncReconnectNotice = SyncReconnectNotice;
3912
- exports.SyncSelect = SyncSelect;
3913
- exports.SyncSmallNote = SyncSmallNote;
3914
- exports.SyncTreeFrame = SyncTreeFrame;
3915
- exports.ThreadPreviewDialog = ThreadPreviewDialog;
3916
- exports.TipsEditorDialog = TipsEditorDialog;
3917
- exports.UsageActionButton = UsageActionButton;
3918
- exports.UsageLegend = UsageLegend;
3919
- exports.UsageLineChart = UsageLineChart;
3920
- exports.UsagePanel = UsagePanel;
3921
- exports.UsageProportionBar = UsageProportionBar;
3922
- exports.UsageQuotaHint = UsageQuotaHint;
3923
- exports.UsageSection = UsageSection;
3924
- exports.UsageSummary = UsageSummary;
3925
- exports.UsageToggle = UsageToggle;
3926
- exports.WelcomeDialog = WelcomeDialog;
3927
- exports.WelcomeProjectPicker = WelcomeProjectPicker;
3928
715
  //# sourceMappingURL=index.cjs.map
3929
716
  //# sourceMappingURL=index.cjs.map