@feathery/react 2.54.1 → 2.55.1

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 (268) hide show
  1. package/cjs/Form/index.d.ts.map +1 -1
  2. package/cjs/assistant/AssistantChat.d.ts +5 -1
  3. package/cjs/assistant/AssistantChat.d.ts.map +1 -1
  4. package/cjs/assistant/AttachmentParts.d.ts +28 -0
  5. package/cjs/assistant/AttachmentParts.d.ts.map +1 -0
  6. package/cjs/assistant/ToolStatus.d.ts +3 -1
  7. package/cjs/assistant/ToolStatus.d.ts.map +1 -1
  8. package/cjs/assistant/attachmentIcon.d.ts +11 -0
  9. package/cjs/assistant/attachmentIcon.d.ts.map +1 -0
  10. package/cjs/assistant/attachments.d.ts +39 -0
  11. package/cjs/assistant/attachments.d.ts.map +1 -0
  12. package/cjs/assistant/icons.d.ts +2 -0
  13. package/cjs/assistant/icons.d.ts.map +1 -1
  14. package/cjs/assistant/useChatAttachments.d.ts +23 -0
  15. package/cjs/assistant/useChatAttachments.d.ts.map +1 -0
  16. package/cjs/{fthry_AssistantChat.DC9xTDBq.js → fthry_AssistantChat.DgeXP4lR.js} +1006 -96
  17. package/cjs/fthry_AssistantChat.DgeXP4lR.js.map +1 -0
  18. package/cjs/{fthry_FormControl.Bdf7uZbI.js → fthry_FormControl.CK-nw2Oj.js} +2 -1
  19. package/cjs/fthry_FormControl.CK-nw2Oj.js.map +1 -0
  20. package/cjs/{fthry_InlineTooltip.2VyC_zlO.js → fthry_InlineTooltip.Cy9h9gjn.js} +2 -1
  21. package/cjs/fthry_InlineTooltip.Cy9h9gjn.js.map +1 -0
  22. package/cjs/{fthry_PaymentMethodField.DX_e5Cso.js → fthry_PaymentMethodField.IXXHxOHO.js} +4 -3
  23. package/cjs/fthry_PaymentMethodField.IXXHxOHO.js.map +1 -0
  24. package/cjs/{fthry_Placeholder.ChSA2IUD.js → fthry_Placeholder.DXYnaNAe.js} +2 -1
  25. package/cjs/fthry_Placeholder.DXYnaNAe.js.map +1 -0
  26. package/cjs/{fthry_ShowEyeIcon.BygC4iZn.js → fthry_ShowEyeIcon.DTnZ6S_4.js} +2 -1
  27. package/cjs/fthry_ShowEyeIcon.DTnZ6S_4.js.map +1 -0
  28. package/cjs/{fthry_TabsElement.CtLQwrj7.js → fthry_TabsElement.DV-ewkUb.js} +2 -1
  29. package/cjs/fthry_TabsElement.DV-ewkUb.js.map +1 -0
  30. package/cjs/{fthry_auto-track.CsRLwF_7.js → fthry_auto-track.o5MhPfNs.js} +3 -2
  31. package/cjs/fthry_auto-track.o5MhPfNs.js.map +1 -0
  32. package/cjs/fthry_clsx.BtxeOLZW.js +1 -0
  33. package/cjs/fthry_clsx.BtxeOLZW.js.map +1 -0
  34. package/cjs/{fthry_highlighted-body-TPN3WLV5.9jZwkvuV.js → fthry_highlighted-body-TPN3WLV5.Qq_hZNwX.js} +4 -3
  35. package/cjs/fthry_highlighted-body-TPN3WLV5.Qq_hZNwX.js.map +1 -0
  36. package/cjs/{fthry_index.BIMFZ8jD.js → fthry_index.3h4evNKu.js} +2 -1
  37. package/cjs/fthry_index.3h4evNKu.js.map +1 -0
  38. package/cjs/{fthry_index.vE97mYTi.js → fthry_index.B0EPSx8B.js} +6 -5
  39. package/cjs/fthry_index.B0EPSx8B.js.map +1 -0
  40. package/cjs/{fthry_index.CQjWjwkb.js → fthry_index.B1KmTkBf.js} +3 -2
  41. package/cjs/fthry_index.B1KmTkBf.js.map +1 -0
  42. package/cjs/{fthry_index.rLo-GP4e.js → fthry_index.B5yMmHZ_.js} +3 -2
  43. package/cjs/fthry_index.B5yMmHZ_.js.map +1 -0
  44. package/cjs/{fthry_index.DVYmg2dL.js → fthry_index.BLexJ9Ob.js} +2 -1
  45. package/cjs/fthry_index.BLexJ9Ob.js.map +1 -0
  46. package/cjs/{fthry_index.DHfH5dUT.js → fthry_index.BO3IuDGb.js} +2 -1
  47. package/cjs/fthry_index.BO3IuDGb.js.map +1 -0
  48. package/cjs/{fthry_index.ChNOkT2I.js → fthry_index.Bc5vYOys.js} +36 -33
  49. package/cjs/fthry_index.Bc5vYOys.js.map +1 -0
  50. package/cjs/{fthry_index.BSW1HMfh.js → fthry_index.BgPd0Kt0.js} +3 -2
  51. package/cjs/fthry_index.BgPd0Kt0.js.map +1 -0
  52. package/cjs/{fthry_index.CA0CmgZ4.js → fthry_index.BgnYzxsO.js} +2 -1
  53. package/cjs/fthry_index.BgnYzxsO.js.map +1 -0
  54. package/cjs/{fthry_index.CqeDMnGC.js → fthry_index.BpPUySki.js} +4 -3
  55. package/cjs/fthry_index.BpPUySki.js.map +1 -0
  56. package/cjs/{fthry_index.DzwK56rK.js → fthry_index.Bq7WQVUY.js} +3 -2
  57. package/cjs/fthry_index.Bq7WQVUY.js.map +1 -0
  58. package/cjs/{fthry_index.DLcJ6-kL.js → fthry_index.C1Tqc9wb.js} +5 -4
  59. package/cjs/fthry_index.C1Tqc9wb.js.map +1 -0
  60. package/cjs/{fthry_index.BCsydmxn.js → fthry_index.CKsNZIop.js} +6 -5
  61. package/cjs/fthry_index.CKsNZIop.js.map +1 -0
  62. package/cjs/{fthry_index.-t8SJQod.js → fthry_index.COXEN1Il.js} +6 -5
  63. package/cjs/fthry_index.COXEN1Il.js.map +1 -0
  64. package/cjs/{fthry_index.DmrFRKyN.js → fthry_index.Ckx-5LoW.js} +2 -1
  65. package/cjs/fthry_index.Ckx-5LoW.js.map +1 -0
  66. package/cjs/{fthry_index.BIIaLCnQ.js → fthry_index.CtU4UkMt.js} +3 -2
  67. package/cjs/fthry_index.CtU4UkMt.js.map +1 -0
  68. package/cjs/{fthry_index.C9_33yc4.js → fthry_index.D-jjx-MA.js} +5 -4
  69. package/cjs/fthry_index.D-jjx-MA.js.map +1 -0
  70. package/cjs/{fthry_index.CzDrCb8q.js → fthry_index.D4Wi-qf5.js} +2 -1
  71. package/cjs/fthry_index.D4Wi-qf5.js.map +1 -0
  72. package/cjs/{fthry_index.Bd4Ki2jq.js → fthry_index.D62ZkEeC.js} +3 -2
  73. package/cjs/fthry_index.D62ZkEeC.js.map +1 -0
  74. package/cjs/{fthry_index.CFV4pCZG.js → fthry_index.DALpwxqy.js} +2 -1
  75. package/cjs/fthry_index.DALpwxqy.js.map +1 -0
  76. package/cjs/{fthry_index.D-RpAapg.js → fthry_index.DAg5c_3N.js} +6 -5
  77. package/cjs/fthry_index.DAg5c_3N.js.map +1 -0
  78. package/cjs/{fthry_index.BQ1PDK75.js → fthry_index.DPL9ppHU.js} +8 -7
  79. package/cjs/fthry_index.DPL9ppHU.js.map +1 -0
  80. package/cjs/{fthry_index.DUgslBs4.js → fthry_index.DtwZgKWK.js} +2 -1
  81. package/cjs/fthry_index.DtwZgKWK.js.map +1 -0
  82. package/cjs/{fthry_index.CvWhzgMd.js → fthry_index.Du8ElnCt.js} +2 -1
  83. package/cjs/fthry_index.Du8ElnCt.js.map +1 -0
  84. package/cjs/{fthry_index.g_KiTGIC.js → fthry_index.DxYbxMKf.js} +5 -4
  85. package/cjs/fthry_index.DxYbxMKf.js.map +1 -0
  86. package/cjs/fthry_index.KDrRVPx5.js +1 -0
  87. package/cjs/fthry_index.KDrRVPx5.js.map +1 -0
  88. package/cjs/{fthry_index.DDFvIZR1.js → fthry_index.KwN_oKSO.js} +11 -10
  89. package/cjs/fthry_index.KwN_oKSO.js.map +1 -0
  90. package/cjs/{fthry_index.Czq6v8vF.js → fthry_index.NNxFIJmX.js} +3 -2
  91. package/cjs/fthry_index.NNxFIJmX.js.map +1 -0
  92. package/cjs/fthry_index.NshYktAt.js +1 -0
  93. package/cjs/fthry_index.NshYktAt.js.map +1 -0
  94. package/cjs/{fthry_index.D2b6CFHh.js → fthry_index.a4NQkjOo.js} +4 -3
  95. package/cjs/fthry_index.a4NQkjOo.js.map +1 -0
  96. package/cjs/{fthry_index.NRIwQAZb.js → fthry_index.h7QfI9IO.js} +2 -1
  97. package/cjs/fthry_index.h7QfI9IO.js.map +1 -0
  98. package/cjs/{fthry_index.DYDegaGW.js → fthry_index.qS39ayQN.js} +2 -1
  99. package/cjs/fthry_index.qS39ayQN.js.map +1 -0
  100. package/cjs/{fthry_index.DEwX9wLw.js → fthry_index.sF59y24v.js} +4 -3
  101. package/cjs/fthry_index.sF59y24v.js.map +1 -0
  102. package/cjs/{fthry_index.DAMJSPDY.js → fthry_index.tLwcoSGn.js} +5 -4
  103. package/cjs/fthry_index.tLwcoSGn.js.map +1 -0
  104. package/cjs/{fthry_index.umd.oim0GOsP.js → fthry_index.umd.1B8g3dTG.js} +2 -1
  105. package/cjs/fthry_index.umd.1B8g3dTG.js.map +1 -0
  106. package/cjs/{fthry_input.CaVTEiAk.js → fthry_input.pZnS08Cl.js} +2 -1
  107. package/cjs/fthry_input.pZnS08Cl.js.map +1 -0
  108. package/cjs/fthry_is-plan-event-enabled.nMt_kVye.js +1 -0
  109. package/cjs/fthry_is-plan-event-enabled.nMt_kVye.js.map +1 -0
  110. package/cjs/fthry_logging.B-EvoWue.js +1 -0
  111. package/cjs/fthry_logging.B-EvoWue.js.map +1 -0
  112. package/cjs/{fthry_logging.BOawaGT3.js → fthry_logging.C_6rR4zX.js} +2 -1
  113. package/cjs/fthry_logging.C_6rR4zX.js.map +1 -0
  114. package/cjs/fthry_mermaid-O7DHMXV3.dTwA6zLz.js +15 -0
  115. package/cjs/fthry_mermaid-O7DHMXV3.dTwA6zLz.js.map +1 -0
  116. package/cjs/{fthry_script.CIquRYMv.js → fthry_script.AqPdMfwQ.js} +2 -1
  117. package/cjs/fthry_script.AqPdMfwQ.js.map +1 -0
  118. package/cjs/{fthry_styles.wtdZ0TVk.js → fthry_styles.DBeqEAjH.js} +2 -1
  119. package/cjs/fthry_styles.DBeqEAjH.js.map +1 -0
  120. package/cjs/{fthry_useElementSize.CoMSw1CX.js → fthry_useElementSize.M_UHUnNy.js} +2 -1
  121. package/cjs/fthry_useElementSize.M_UHUnNy.js.map +1 -0
  122. package/cjs/{fthry_useSalesforceSync.DLst19Gd.js → fthry_useSalesforceSync.BhDUSOck.js} +2 -1
  123. package/cjs/fthry_useSalesforceSync.BhDUSOck.js.map +1 -0
  124. package/cjs/{fthry_webfontloader.Cc0PNQPM.js → fthry_webfontloader.BDXkgdUD.js} +2 -1
  125. package/cjs/fthry_webfontloader.BDXkgdUD.js.map +1 -0
  126. package/cjs/index.js +2 -1
  127. package/cjs/index.js.map +1 -0
  128. package/cjs/thumbnail-renderer.js +2 -1
  129. package/cjs/thumbnail-renderer.js.map +1 -0
  130. package/cjs/utils/formHelperFunctions.d.ts +1 -0
  131. package/cjs/utils/formHelperFunctions.d.ts.map +1 -1
  132. package/dist/Form/index.d.ts.map +1 -1
  133. package/dist/assistant/AssistantChat.d.ts +5 -1
  134. package/dist/assistant/AssistantChat.d.ts.map +1 -1
  135. package/dist/assistant/AttachmentParts.d.ts +28 -0
  136. package/dist/assistant/AttachmentParts.d.ts.map +1 -0
  137. package/dist/assistant/ToolStatus.d.ts +3 -1
  138. package/dist/assistant/ToolStatus.d.ts.map +1 -1
  139. package/dist/assistant/attachmentIcon.d.ts +11 -0
  140. package/dist/assistant/attachmentIcon.d.ts.map +1 -0
  141. package/dist/assistant/attachments.d.ts +39 -0
  142. package/dist/assistant/attachments.d.ts.map +1 -0
  143. package/dist/assistant/icons.d.ts +2 -0
  144. package/dist/assistant/icons.d.ts.map +1 -1
  145. package/dist/assistant/useChatAttachments.d.ts +23 -0
  146. package/dist/assistant/useChatAttachments.d.ts.map +1 -0
  147. package/dist/{fthry_AssistantChat.CPE5WlOV.js → fthry_AssistantChat.CFzkd8QB.js} +1006 -96
  148. package/dist/fthry_AssistantChat.CFzkd8QB.js.map +1 -0
  149. package/dist/{fthry_FormControl.C_9IBGCz.js → fthry_FormControl.BDCpoHHv.js} +2 -1
  150. package/dist/fthry_FormControl.BDCpoHHv.js.map +1 -0
  151. package/dist/{fthry_InlineTooltip.X4qb_h52.js → fthry_InlineTooltip.9A6g4ZKn.js} +2 -1
  152. package/dist/fthry_InlineTooltip.9A6g4ZKn.js.map +1 -0
  153. package/dist/{fthry_PaymentMethodField.Co9wIIWl.js → fthry_PaymentMethodField.COv2CSdd.js} +4 -3
  154. package/dist/fthry_PaymentMethodField.COv2CSdd.js.map +1 -0
  155. package/dist/{fthry_Placeholder.tXEd80yu.js → fthry_Placeholder.DY8DKI2u.js} +2 -1
  156. package/dist/fthry_Placeholder.DY8DKI2u.js.map +1 -0
  157. package/dist/{fthry_ShowEyeIcon.BL4SODVQ.js → fthry_ShowEyeIcon.uiiaRGN7.js} +2 -1
  158. package/dist/fthry_ShowEyeIcon.uiiaRGN7.js.map +1 -0
  159. package/dist/{fthry_TabsElement.CefoTVIr.js → fthry_TabsElement.CA94VYAs.js} +2 -1
  160. package/dist/fthry_TabsElement.CA94VYAs.js.map +1 -0
  161. package/dist/{fthry_auto-track.K-xWX3KP.js → fthry_auto-track.CvItNw22.js} +3 -2
  162. package/dist/fthry_auto-track.CvItNw22.js.map +1 -0
  163. package/dist/fthry_clsx.ChV9xqsO.js +1 -0
  164. package/dist/fthry_clsx.ChV9xqsO.js.map +1 -0
  165. package/dist/{fthry_highlighted-body-TPN3WLV5.CqH7kZh1.js → fthry_highlighted-body-TPN3WLV5.WdY3U2m3.js} +4 -3
  166. package/dist/fthry_highlighted-body-TPN3WLV5.WdY3U2m3.js.map +1 -0
  167. package/dist/{fthry_index.CGYJ3nnH.js → fthry_index.B-vTZkL-.js} +3 -2
  168. package/dist/fthry_index.B-vTZkL-.js.map +1 -0
  169. package/dist/{fthry_index.DsfyJrK_.js → fthry_index.B1c0gGmA.js} +3 -2
  170. package/dist/fthry_index.B1c0gGmA.js.map +1 -0
  171. package/dist/{fthry_index.8HF4sRHu.js → fthry_index.B5dBmpnA.js} +5 -4
  172. package/dist/fthry_index.B5dBmpnA.js.map +1 -0
  173. package/dist/{fthry_index.D2uuo-Hp.js → fthry_index.B87z2-To.js} +8 -7
  174. package/dist/fthry_index.B87z2-To.js.map +1 -0
  175. package/dist/{fthry_index.B80HhVUt.js → fthry_index.B9KemIrt.js} +5 -4
  176. package/dist/fthry_index.B9KemIrt.js.map +1 -0
  177. package/dist/{fthry_index.DVKk9DNh.js → fthry_index.BJvyzCAc.js} +2 -1
  178. package/dist/fthry_index.BJvyzCAc.js.map +1 -0
  179. package/dist/{fthry_index.GTJWvsNs.js → fthry_index.BLX-FjCy.js} +2 -1
  180. package/dist/fthry_index.BLX-FjCy.js.map +1 -0
  181. package/dist/fthry_index.BNrDR7Qm.js +1 -0
  182. package/dist/fthry_index.BNrDR7Qm.js.map +1 -0
  183. package/dist/{fthry_index.B5gAQiuF.js → fthry_index.BktHb4Vt.js} +4 -3
  184. package/dist/fthry_index.BktHb4Vt.js.map +1 -0
  185. package/dist/{fthry_index.CYa-BeVL.js → fthry_index.C-GrPQho.js} +5 -4
  186. package/dist/fthry_index.C-GrPQho.js.map +1 -0
  187. package/dist/{fthry_index.zsPt4ANk.js → fthry_index.C8RhaMmp.js} +5 -4
  188. package/dist/fthry_index.C8RhaMmp.js.map +1 -0
  189. package/dist/{fthry_index.D6GyUvFt.js → fthry_index.CAr-0vsn.js} +6 -5
  190. package/dist/fthry_index.CAr-0vsn.js.map +1 -0
  191. package/dist/{fthry_index.J4ksi0Sm.js → fthry_index.CM3VELMn.js} +2 -1
  192. package/dist/fthry_index.CM3VELMn.js.map +1 -0
  193. package/dist/{fthry_index.B4fdBk_2.js → fthry_index.CNE4RarQ.js} +6 -5
  194. package/dist/fthry_index.CNE4RarQ.js.map +1 -0
  195. package/dist/{fthry_index.AnuSOreY.js → fthry_index.CiiUKa2z.js} +4 -3
  196. package/dist/fthry_index.CiiUKa2z.js.map +1 -0
  197. package/dist/{fthry_index.-NrRAjJG.js → fthry_index.Cim--Moj.js} +2 -1
  198. package/dist/fthry_index.Cim--Moj.js.map +1 -0
  199. package/dist/{fthry_index.vvzR2QO1.js → fthry_index.Cm0fLnwB.js} +4 -3
  200. package/dist/fthry_index.Cm0fLnwB.js.map +1 -0
  201. package/dist/{fthry_index.QmJ7llJy.js → fthry_index.CpMkP7mx.js} +2 -1
  202. package/dist/fthry_index.CpMkP7mx.js.map +1 -0
  203. package/dist/{fthry_index.B_lMLNyy.js → fthry_index.Cv3HgvWY.js} +2 -1
  204. package/dist/fthry_index.Cv3HgvWY.js.map +1 -0
  205. package/dist/{fthry_index.8G4DCva4.js → fthry_index.D03xJSkf.js} +2 -1
  206. package/dist/fthry_index.D03xJSkf.js.map +1 -0
  207. package/dist/{fthry_index.Dt6tQ9YA.js → fthry_index.DIG_50Aa.js} +2 -1
  208. package/dist/fthry_index.DIG_50Aa.js.map +1 -0
  209. package/dist/{fthry_index.BRN8lHtb.js → fthry_index.DLKx0XPo.js} +3 -2
  210. package/dist/fthry_index.DLKx0XPo.js.map +1 -0
  211. package/dist/{fthry_index.BS4E7I-K.js → fthry_index.DLhX3WjM.js} +2 -1
  212. package/dist/fthry_index.DLhX3WjM.js.map +1 -0
  213. package/dist/{fthry_index.CC8Uh5gL.js → fthry_index.DWzk6WCB.js} +2 -1
  214. package/dist/fthry_index.DWzk6WCB.js.map +1 -0
  215. package/dist/{fthry_index.DMwfwUer.js → fthry_index.DgGokcJe.js} +6 -5
  216. package/dist/fthry_index.DgGokcJe.js.map +1 -0
  217. package/dist/{fthry_index.DXLRXJ4G.js → fthry_index.DncR6xCH.js} +2 -1
  218. package/dist/fthry_index.DncR6xCH.js.map +1 -0
  219. package/dist/{fthry_index.eUA7gKd_.js → fthry_index.DrkIUiwy.js} +3 -2
  220. package/dist/fthry_index.DrkIUiwy.js.map +1 -0
  221. package/dist/{fthry_index.DfnBmlMN.js → fthry_index.DwVKx9mo.js} +11 -10
  222. package/dist/fthry_index.DwVKx9mo.js.map +1 -0
  223. package/dist/{fthry_index.C4ZsKex6.js → fthry_index.Dz5RrWXg.js} +5 -4
  224. package/dist/fthry_index.Dz5RrWXg.js.map +1 -0
  225. package/dist/fthry_index.JD44HVFL.js +1 -0
  226. package/dist/fthry_index.JD44HVFL.js.map +1 -0
  227. package/dist/{fthry_index.CXo7Ei4g.js → fthry_index.NJsUjX7N.js} +3 -2
  228. package/dist/fthry_index.NJsUjX7N.js.map +1 -0
  229. package/dist/{fthry_index.CIUN5omC.js → fthry_index._KlQAXCm.js} +36 -33
  230. package/dist/fthry_index._KlQAXCm.js.map +1 -0
  231. package/dist/{fthry_index.DqUkarFt.js → fthry_index.a7icLqJC.js} +3 -2
  232. package/dist/fthry_index.a7icLqJC.js.map +1 -0
  233. package/dist/{fthry_index.CC3ua88H.js → fthry_index.uWJ8AuQl.js} +3 -2
  234. package/dist/fthry_index.uWJ8AuQl.js.map +1 -0
  235. package/dist/{fthry_index.umd.DHsdRPRZ.js → fthry_index.umd.B9NzGVMs.js} +2 -1
  236. package/dist/fthry_index.umd.B9NzGVMs.js.map +1 -0
  237. package/dist/{fthry_input.Ci7lyHy3.js → fthry_input.5SIzhr0g.js} +2 -1
  238. package/dist/fthry_input.5SIzhr0g.js.map +1 -0
  239. package/dist/fthry_is-plan-event-enabled.mXX0dwl-.js +1 -0
  240. package/dist/fthry_is-plan-event-enabled.mXX0dwl-.js.map +1 -0
  241. package/dist/fthry_logging.B1LWsZ3K.js +1 -0
  242. package/dist/fthry_logging.B1LWsZ3K.js.map +1 -0
  243. package/dist/{fthry_logging.DQALXb9A.js → fthry_logging.CMeHXzJL.js} +2 -1
  244. package/dist/fthry_logging.CMeHXzJL.js.map +1 -0
  245. package/dist/fthry_mermaid-O7DHMXV3.tCh8V3S1.js +9 -0
  246. package/dist/fthry_mermaid-O7DHMXV3.tCh8V3S1.js.map +1 -0
  247. package/dist/{fthry_script.BDiZrpF8.js → fthry_script.BAKVG8R-.js} +2 -1
  248. package/dist/fthry_script.BAKVG8R-.js.map +1 -0
  249. package/dist/{fthry_styles.fEY_n086.js → fthry_styles.V-UcQczk.js} +2 -1
  250. package/dist/fthry_styles.V-UcQczk.js.map +1 -0
  251. package/dist/{fthry_useElementSize.CEbFfmei.js → fthry_useElementSize.BLZ0FahQ.js} +2 -1
  252. package/dist/fthry_useElementSize.BLZ0FahQ.js.map +1 -0
  253. package/dist/{fthry_useSalesforceSync.BfAudVDV.js → fthry_useSalesforceSync.AbvbUMbq.js} +2 -1
  254. package/dist/fthry_useSalesforceSync.AbvbUMbq.js.map +1 -0
  255. package/dist/{fthry_webfontloader.CCmkUKka.js → fthry_webfontloader.CzvMzsko.js} +2 -1
  256. package/dist/fthry_webfontloader.CzvMzsko.js.map +1 -0
  257. package/dist/index.js +3 -2
  258. package/dist/index.js.map +1 -0
  259. package/dist/thumbnail-renderer.js +2 -1
  260. package/dist/thumbnail-renderer.js.map +1 -0
  261. package/dist/utils/formHelperFunctions.d.ts +1 -0
  262. package/dist/utils/formHelperFunctions.d.ts.map +1 -1
  263. package/package.json +1 -1
  264. package/umd/AssistantChat.a02f39def28c4345c2a3.js +1 -0
  265. package/umd/index.js +1 -1
  266. package/cjs/fthry_mermaid-O7DHMXV3.BUbH9Bc_.js +0 -14
  267. package/dist/fthry_mermaid-O7DHMXV3.D6DhpWPU.js +0 -8
  268. package/umd/AssistantChat.e42d65ae6bc7cfc4b909.js +0 -1
@@ -1,9 +1,9 @@
1
- import { x as getDefaultExportFromCjs, j as jsx, _ as __assign, b as jsxs, w as featheryWindow, s as __awaiter, t as __generator, e as __read, T as __spreadArray, ad as v4, l as css, aU as internalState, aV as getPositionKey, a1 as __values, aW as loadCompletedSteps, aX as initState, aY as getRepeatedContainers, aZ as getRepeatedContainer, a_ as getDefaultFieldValue, a$ as ACTION_BACK, b0 as getPrevStepKey, b1 as ACTION_NEXT, b2 as nextStepKey, b3 as isButtonDisabled, A as replaceTextVariables, b4 as getCompletedStepKeys, b5 as isStepperStepVisible, b6 as isStepperStepReachable, b7 as loadPhoneValidator, a0 as phoneLibPromise, Y as phoneLib, b8 as initInfo, b9 as getCookie, B as featheryDoc, y as Fragment$1 } from './fthry_index.CIUN5omC.js';
1
+ import { x as getDefaultExportFromCjs, j as jsx, _ as __assign, b as jsxs, T as __spreadArray, e as __read, s as __awaiter, t as __generator, B as featheryDoc, q as __rest, w as featheryWindow, ad as v4, l as css, aU as internalState, aV as getPositionKey, a1 as __values, aW as loadCompletedSteps, aX as initState, aY as getRepeatedContainers, aZ as getRepeatedContainer, a_ as getDefaultFieldValue, a$ as ACTION_BACK, b0 as getPrevStepKey, b1 as ACTION_NEXT, b2 as nextStepKey, b3 as isButtonDisabled, A as replaceTextVariables, b4 as getCompletedStepKeys, b5 as isStepperStepVisible, b6 as isStepperStepReachable, b7 as loadPhoneValidator, a0 as phoneLibPromise, Y as phoneLib, b8 as initInfo, b9 as getCookie, y as Fragment$1 } from './fthry_index._KlQAXCm.js';
2
2
  import { useRef, useCallback, useSyncExternalStore, useEffect, useState, memo, useId, useTransition, useMemo, cloneElement, createElement, createContext, isValidElement, useContext, Suspense, lazy as lazy$1, Fragment as Fragment$2 } from 'react';
3
3
  import { c as clsx } from './fthry_clsx.ChV9xqsO.js';
4
4
  import { jsx as jsx$1, jsxs as jsxs$1, Fragment } from 'react/jsx-runtime';
5
5
  import { createPortal } from 'react-dom';
6
- import { s as stateMap } from './fthry_index.J4ksi0Sm.js';
6
+ import { s as stateMap } from './fthry_index.CM3VELMn.js';
7
7
 
8
8
  // src/errors/ai-sdk-error.ts
9
9
  var marker = "vercel.ai.error";
@@ -9763,7 +9763,774 @@ var ChevronsLeftIcon = function (props) { return (jsxs("svg", __assign({ width:
9763
9763
  var ChevronsRightIcon = function (props) { return (jsxs("svg", __assign({ width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'm6 17 5-5-5-5', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("path", { d: 'm13 17 5-5-5-5', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' })] }))); };
9764
9764
  var LinkIcon = function (props) { return (jsxs("svg", __assign({ width: '12', height: '12', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("path", { d: 'M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' })] }))); };
9765
9765
  var MicIcon = function (props) { return (jsxs("svg", __assign({ width: '20', height: '20', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("rect", { x: '9', y: '3', width: '6', height: '12', rx: '3', stroke: 'currentColor', strokeWidth: '2' }), jsx("path", { d: 'M5 11a7 7 0 0 0 14 0', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M12 18v3', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' })] }))); };
9766
- var WaveformIcon = function (props) { return (jsxs("svg", __assign({ width: '18', height: '18', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'M4 12v0', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M8 9v6', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M12 5v14', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M16 9v6', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M20 11v2', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' })] }))); };
9766
+ var WaveformIcon = function (props) { return (jsxs("svg", __assign({ width: '18', height: '18', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'M4 12v0', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M8 9v6', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M12 5v14', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M16 9v6', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }), jsx("path", { d: 'M20 11v2', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' })] }))); };
9767
+ var PaperclipIcon = function (props) { return (jsx("svg", __assign({ width: '18', height: '18', viewBox: '0 0 24 24', fill: 'none' }, props, { children: jsx("path", { d: 'm21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }) }))); };
9768
+ var DocumentIcon = function (props) { return (jsxs("svg", __assign({ width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("path", { d: 'M14 2v6h6', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' })] }))); };
9769
+
9770
+ var MAX_DIMENSION = 1568;
9771
+ var MAX_FILE_SIZE = 25 * 1024 * 1024;
9772
+ var MAX_ATTACHMENTS = 5;
9773
+ var IMAGE_MEDIA_TYPES = new Set([
9774
+ 'image/png',
9775
+ 'image/jpeg',
9776
+ 'image/gif',
9777
+ 'image/webp'
9778
+ ]);
9779
+ // Mirrors MEDIA_TYPE_TO_EXTENSION on the ai-services side
9780
+ // (src/modules/robin/attachment/mediaTypes.ts), keep in sync
9781
+ var DOC_MEDIA_TYPES = new Set([
9782
+ 'application/pdf',
9783
+ 'application/msword',
9784
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
9785
+ 'application/rtf',
9786
+ 'text/rtf',
9787
+ 'application/vnd.ms-powerpoint',
9788
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
9789
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
9790
+ 'application/vnd.ms-excel.sheet.macroEnabled.12',
9791
+ 'application/vnd.ms-excel',
9792
+ 'text/csv'
9793
+ ]);
9794
+ var ALLOWED_MEDIA_TYPES = new Set(__spreadArray(__spreadArray([], __read(IMAGE_MEDIA_TYPES), false), __read(DOC_MEDIA_TYPES), false));
9795
+ var ACCEPT_ATTR = [
9796
+ 'image/png',
9797
+ 'image/jpeg',
9798
+ 'image/gif',
9799
+ 'image/webp',
9800
+ 'application/pdf',
9801
+ '.pdf',
9802
+ 'application/msword',
9803
+ '.doc',
9804
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
9805
+ '.docx',
9806
+ 'application/rtf',
9807
+ 'text/rtf',
9808
+ '.rtf',
9809
+ 'application/vnd.ms-powerpoint',
9810
+ '.ppt',
9811
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
9812
+ '.pptx',
9813
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
9814
+ '.xlsx',
9815
+ 'application/vnd.ms-excel.sheet.macroEnabled.12',
9816
+ '.xlsm',
9817
+ 'application/vnd.ms-excel',
9818
+ '.xls',
9819
+ 'text/csv',
9820
+ '.csv'
9821
+ ].join(',');
9822
+ var isImageType = function (mediaType) {
9823
+ return IMAGE_MEDIA_TYPES.has(mediaType);
9824
+ };
9825
+ var isTerminalStatus = function (s) { return s === 'ready' || s === 'failed' || s === 'skipped'; };
9826
+ // Attachment endpoints are the /agent/attachment/ sibling of the chat base,
9827
+ // same origin (threadsBase precedent in utils.ts)
9828
+ var attachmentBase = function (baseUrl) {
9829
+ return new URL('/agent/attachment/', baseUrl).href;
9830
+ };
9831
+ // The thread id doubles as the attachment session key (builder convention:
9832
+ // a new chat mints the uuid that becomes the thread id on first message)
9833
+ var chatSessionIds = new WeakMap();
9834
+ var setChatSessionId = function (chat, sessionId) {
9835
+ return chatSessionIds.set(chat, sessionId);
9836
+ };
9837
+ var getChatSessionId = function (chat) {
9838
+ return chatSessionIds.get(chat);
9839
+ };
9840
+ function compressImage(file) {
9841
+ return __awaiter(this, void 0, void 0, function () {
9842
+ var bitmap, width, height, scale, canvas_1, ctx, blob;
9843
+ return __generator(this, function (_b) {
9844
+ switch (_b.label) {
9845
+ case 0:
9846
+ _b.trys.push([0, 3, , 4]);
9847
+ return [4 /*yield*/, createImageBitmap(file)];
9848
+ case 1:
9849
+ bitmap = _b.sent();
9850
+ width = bitmap.width, height = bitmap.height;
9851
+ if (width <= MAX_DIMENSION &&
9852
+ height <= MAX_DIMENSION &&
9853
+ file.type === 'image/jpeg') {
9854
+ bitmap.close();
9855
+ return [2 /*return*/, file];
9856
+ }
9857
+ scale = Math.min(MAX_DIMENSION / width, MAX_DIMENSION / height, 1);
9858
+ canvas_1 = featheryDoc().createElement('canvas');
9859
+ canvas_1.width = Math.round(width * scale);
9860
+ canvas_1.height = Math.round(height * scale);
9861
+ ctx = canvas_1.getContext('2d');
9862
+ if (!ctx)
9863
+ return [2 /*return*/, file];
9864
+ ctx.drawImage(bitmap, 0, 0, canvas_1.width, canvas_1.height);
9865
+ bitmap.close();
9866
+ return [4 /*yield*/, new Promise(function (resolve) {
9867
+ return canvas_1.toBlob(resolve, 'image/jpeg', 0.85);
9868
+ })];
9869
+ case 2:
9870
+ blob = _b.sent();
9871
+ if (!blob)
9872
+ return [2 /*return*/, file];
9873
+ return [2 /*return*/, new File([blob], file.name.replace(/\.\w+$/, '.jpg'), {
9874
+ type: 'image/jpeg'
9875
+ })];
9876
+ case 3:
9877
+ _b.sent();
9878
+ return [2 /*return*/, file];
9879
+ case 4: return [2 /*return*/];
9880
+ }
9881
+ });
9882
+ });
9883
+ }
9884
+ function uploadAttachment(file, baseUrl, headers, sessionId, signal) {
9885
+ return __awaiter(this, void 0, void 0, function () {
9886
+ var form, response, message, body, err;
9887
+ return __generator(this, function (_b) {
9888
+ switch (_b.label) {
9889
+ case 0:
9890
+ form = new FormData();
9891
+ form.append('file', file);
9892
+ return [4 /*yield*/, fetch(attachmentBase(baseUrl), {
9893
+ method: 'POST',
9894
+ headers: __assign(__assign({}, headers()), { 'X-Session-ID': sessionId }),
9895
+ body: form,
9896
+ signal: signal
9897
+ })];
9898
+ case 1:
9899
+ response = _b.sent();
9900
+ if (!!response.ok) return [3 /*break*/, 6];
9901
+ message = "Upload failed (".concat(response.status, ")");
9902
+ _b.label = 2;
9903
+ case 2:
9904
+ _b.trys.push([2, 4, , 5]);
9905
+ return [4 /*yield*/, response.json()];
9906
+ case 3:
9907
+ body = _b.sent();
9908
+ if (body === null || body === void 0 ? void 0 : body.error)
9909
+ message = body.error;
9910
+ return [3 /*break*/, 5];
9911
+ case 4:
9912
+ _b.sent();
9913
+ return [3 /*break*/, 5];
9914
+ case 5:
9915
+ err = new Error(message);
9916
+ err.status = response.status;
9917
+ throw err;
9918
+ case 6: return [2 /*return*/, response.json()];
9919
+ }
9920
+ });
9921
+ });
9922
+ }
9923
+ var POLL_INTERVAL_MS = 2000;
9924
+ var POLL_TIMEOUT_MS = 390000; // ~6.5 min: pipeline budget (~6 min) + slack
9925
+ var delay = function (ms, signal) {
9926
+ return new Promise(function (resolve, reject) {
9927
+ if (signal.aborted) {
9928
+ reject(new DOMException('Aborted', 'AbortError'));
9929
+ return;
9930
+ }
9931
+ var onAbort = function () {
9932
+ clearTimeout(t);
9933
+ reject(new DOMException('Aborted', 'AbortError'));
9934
+ };
9935
+ var t = setTimeout(function () {
9936
+ signal.removeEventListener('abort', onAbort);
9937
+ resolve();
9938
+ }, ms);
9939
+ signal.addEventListener('abort', onAbort, { once: true });
9940
+ });
9941
+ };
9942
+ // Poll GET /:id/url/ until the row reaches a terminal state, upload
9943
+ // auto-dispatches embedding server-side so polling is the whole client
9944
+ // contract
9945
+ function pollAttachmentStatus(attachmentId, baseUrl, headers, sessionId, signal) {
9946
+ return __awaiter(this, void 0, void 0, function () {
9947
+ var id, deadline, resp, err_1, body;
9948
+ return __generator(this, function (_a) {
9949
+ switch (_a.label) {
9950
+ case 0:
9951
+ id = encodeURIComponent(attachmentId);
9952
+ deadline = Date.now() + POLL_TIMEOUT_MS;
9953
+ _a.label = 1;
9954
+ case 1:
9955
+ resp = null;
9956
+ _a.label = 2;
9957
+ case 2:
9958
+ _a.trys.push([2, 4, , 5]);
9959
+ return [4 /*yield*/, fetch("".concat(attachmentBase(baseUrl)).concat(id, "/url/"), {
9960
+ method: 'GET',
9961
+ headers: __assign(__assign({}, headers()), { 'X-Session-ID': sessionId }),
9962
+ signal: signal
9963
+ })];
9964
+ case 3:
9965
+ resp = _a.sent();
9966
+ return [3 /*break*/, 5];
9967
+ case 4:
9968
+ err_1 = _a.sent();
9969
+ // Network blips retry until the deadline, aborts exit the loop
9970
+ if (signal.aborted)
9971
+ throw err_1;
9972
+ return [3 /*break*/, 5];
9973
+ case 5:
9974
+ if (!(resp === null || resp === void 0 ? void 0 : resp.ok)) return [3 /*break*/, 7];
9975
+ return [4 /*yield*/, resp.json()];
9976
+ case 6:
9977
+ body = (_a.sent());
9978
+ if (isTerminalStatus(body.processingStatus)) {
9979
+ return [2 /*return*/, body];
9980
+ }
9981
+ return [3 /*break*/, 8];
9982
+ case 7:
9983
+ if (resp && [401, 403, 404].includes(resp.status)) {
9984
+ // Definitive 4xx won't heal, 5xx retries until the deadline
9985
+ throw new Error("Attachment status check failed (".concat(resp.status, ")"));
9986
+ }
9987
+ _a.label = 8;
9988
+ case 8:
9989
+ if (Date.now() >= deadline) {
9990
+ throw new Error("Embedding timed out after ".concat(Math.round(POLL_TIMEOUT_MS / 1000), "s"));
9991
+ }
9992
+ return [4 /*yield*/, delay(POLL_INTERVAL_MS, signal)];
9993
+ case 9:
9994
+ _a.sent();
9995
+ return [3 /*break*/, 1];
9996
+ case 10: return [2 /*return*/];
9997
+ }
9998
+ });
9999
+ });
10000
+ }
10001
+ function getFilePart(attachment) {
10002
+ var _a, _b, _c;
10003
+ return __assign({ type: 'file', mediaType: (_a = attachment.uploadedMediaType) !== null && _a !== void 0 ? _a : attachment.file.type, filename: (_b = attachment.uploadedFilename) !== null && _b !== void 0 ? _b : attachment.file.name, url: (_c = attachment.uploadedUrl) !== null && _c !== void 0 ? _c : attachment.previewUrl }, (attachment.id
10004
+ ? { providerMetadata: { feathery: { attachmentId: attachment.id } } }
10005
+ : {}));
10006
+ }
10007
+
10008
+ var DEFAULT_CHAT_COLOR = '#6b7280';
10009
+ var GRAY_50 = '#f9fafb';
10010
+ var GRAY_100 = '#f3f4f6';
10011
+ var GRAY_200 = '#e5e7eb';
10012
+ var GRAY_400 = '#9ca3af';
10013
+ var GRAY_500 = '#6b7280';
10014
+ var GRAY_800 = '#1f2937';
10015
+ var RED_500 = '#ef4444';
10016
+ // Generate lighter/darker variants from hex color
10017
+ var adjustColor = function (hex, percent) {
10018
+ var num = parseInt(hex.replace('#', ''), 16);
10019
+ var r = Math.min(255, Math.max(0, (num >> 16) + Math.round(2.55 * percent)));
10020
+ var g = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + Math.round(2.55 * percent)));
10021
+ var b = Math.min(255, Math.max(0, (num & 0x0000ff) + Math.round(2.55 * percent)));
10022
+ return "#".concat(((r << 16) | (g << 8) | b).toString(16).padStart(6, '0'));
10023
+ };
10024
+ var blendToWhite = function (hex, percent) {
10025
+ var num = parseInt(hex.replace('#', ''), 16);
10026
+ var r = (num >> 16) & 0xff;
10027
+ var g = (num >> 8) & 0xff;
10028
+ var b = num & 0xff;
10029
+ var blend = percent / 100;
10030
+ var newR = Math.round(r + (255 - r) * blend);
10031
+ var newG = Math.round(g + (255 - g) * blend);
10032
+ var newB = Math.round(b + (255 - b) * blend);
10033
+ return "#".concat(((newR << 16) | (newG << 8) | newB)
10034
+ .toString(16)
10035
+ .padStart(6, '0'));
10036
+ };
10037
+ // Compute all color variants from primary
10038
+ var getChatColors = function (primary) { return ({
10039
+ primary: primary,
10040
+ hover: adjustColor(primary, -15),
10041
+ disabled: adjustColor(primary, 30),
10042
+ light: blendToWhite(primary, 90) // Light: assistant bubbles
10043
+ }); };
10044
+
10045
+ function FilePageGlyph(_a) {
10046
+ var label = _a.label, props = __rest(_a, ["label"]);
10047
+ return (jsxs("svg", __assign({ viewBox: '0 0 24 24', fill: 'none', "aria-hidden": 'true' }, props, { children: [jsx("path", { d: 'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z', stroke: 'currentColor', strokeWidth: 1.75, strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("path", { d: 'M14 2v6h6', stroke: 'currentColor', strokeWidth: 1.75, strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("text", __assign({ x: 12, y: 18, textAnchor: 'middle', fontSize: 6, fontWeight: 700, fontFamily: 'ui-sans-serif, system-ui, -apple-system, sans-serif', letterSpacing: -0.2, fill: 'currentColor', stroke: 'none' }, { children: label }))] })));
10048
+ }
10049
+ var PdfIcon = function (props) { return (jsx(FilePageGlyph, __assign({ label: 'PDF' }, props))); };
10050
+ var WordIcon = function (props) { return (jsx(FilePageGlyph, __assign({ label: 'DOC' }, props))); };
10051
+ var ExcelIcon = function (props) { return (jsx(FilePageGlyph, __assign({ label: 'XLS' }, props))); };
10052
+ var PowerpointIcon = function (props) { return (jsx(FilePageGlyph, __assign({ label: 'PPT' }, props))); };
10053
+ var CsvIcon = function (props) { return (jsx(FilePageGlyph, __assign({ label: 'CSV' }, props))); };
10054
+ function getAttachmentIcon(file) {
10055
+ var _a, _b, _c, _d;
10056
+ var mime = (_a = file.type) !== null && _a !== void 0 ? _a : '';
10057
+ var ext = (_d = (_c = (_b = file.name) === null || _b === void 0 ? void 0 : _b.split('.').pop()) === null || _c === void 0 ? void 0 : _c.toLowerCase()) !== null && _d !== void 0 ? _d : '';
10058
+ if (mime === 'application/pdf' || ext === 'pdf') {
10059
+ return { Icon: PdfIcon, color: '#fb7185' };
10060
+ }
10061
+ if (mime === 'application/msword' ||
10062
+ mime ===
10063
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
10064
+ mime === 'application/rtf' ||
10065
+ mime === 'text/rtf' ||
10066
+ ext === 'doc' ||
10067
+ ext === 'docx' ||
10068
+ ext === 'rtf') {
10069
+ return { Icon: WordIcon, color: '#38bdf8' };
10070
+ }
10071
+ if (mime === 'application/vnd.ms-excel' ||
10072
+ mime ===
10073
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
10074
+ mime === 'application/vnd.ms-excel.sheet.macroEnabled.12' ||
10075
+ ext === 'xls' ||
10076
+ ext === 'xlsx' ||
10077
+ ext === 'xlsm') {
10078
+ return { Icon: ExcelIcon, color: '#34d399' };
10079
+ }
10080
+ if (mime === 'application/vnd.ms-powerpoint' ||
10081
+ mime ===
10082
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' ||
10083
+ ext === 'ppt' ||
10084
+ ext === 'pptx') {
10085
+ return { Icon: PowerpointIcon, color: '#fb923c' };
10086
+ }
10087
+ if (mime === 'text/csv' || ext === 'csv') {
10088
+ return { Icon: CsvIcon, color: '#2dd4bf' };
10089
+ }
10090
+ return null;
10091
+ }
10092
+
10093
+ // pdf.js loads from the CDN at runtime, never bundled (the UMD build and
10094
+ // consumer bundlers choke on pdfjs-dist's ESM), same version pin as the
10095
+ // dashboard document editor, new Function hides the import from bundlers
10096
+ var PDFJS_VERSION = '5.4.296';
10097
+ var PDFJS_CDN = "https://cdn.jsdelivr.net/npm/pdfjs-dist@".concat(PDFJS_VERSION, "/build/pdf.min.mjs");
10098
+ var PDFJS_WORKER_CDN = "https://cdn.jsdelivr.net/npm/pdfjs-dist@".concat(PDFJS_VERSION, "/build/pdf.worker.min.mjs");
10099
+ // eslint-disable-next-line no-new-func
10100
+ var importFromCdn = new Function('url', 'return import(url)');
10101
+ var pdfjsPromise = null;
10102
+ var loadPdfjs = function () {
10103
+ if (!pdfjsPromise) {
10104
+ pdfjsPromise = importFromCdn(PDFJS_CDN)
10105
+ .then(function (mod) {
10106
+ mod.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_CDN;
10107
+ return mod;
10108
+ })
10109
+ .catch(function (err) {
10110
+ console.warn('[feathery] pdf.js failed to load from CDN', err);
10111
+ // Retry on the next thumbnail instead of caching the failure
10112
+ pdfjsPromise = null;
10113
+ return null;
10114
+ });
10115
+ }
10116
+ return pdfjsPromise;
10117
+ };
10118
+ // Colored per-type glyph (PDF/DOC/XLS/PPT/CSV), gray generic icon otherwise
10119
+ var TypedFileIcon = function (_a) {
10120
+ var mediaType = _a.mediaType, filename = _a.filename, _b = _a.size, size = _b === void 0 ? 24 : _b;
10121
+ var typed = getAttachmentIcon({ type: mediaType, name: filename });
10122
+ if (!typed) {
10123
+ return (jsx(DocumentIcon, { css: { width: size, height: size, color: GRAY_400 } }));
10124
+ }
10125
+ var Icon = typed.Icon, color = typed.color;
10126
+ return jsx(Icon, { css: { width: size, height: size, color: color, flexShrink: 0 } });
10127
+ };
10128
+ var LazyPdfThumbnail = memo(function LazyPdfThumbnail(_a) {
10129
+ var _this = this;
10130
+ var url = _a.url, _b = _a.width, width = _b === void 0 ? 140 : _b, glyph = _a.glyph;
10131
+ var canvasRef = useRef(null);
10132
+ var _c = __read(useState('loading'), 2), state = _c[0], setState = _c[1];
10133
+ useEffect(function () {
10134
+ var cancelled = false;
10135
+ // no reset to 'loading' here, when the optimistic blob URL swaps to the
10136
+ // signed URL the old render stays visible until the new one lands
10137
+ (function () { return __awaiter(_this, void 0, void 0, function () {
10138
+ var pdfjs, doc, page, base, viewport, canvas, err_1;
10139
+ return __generator(this, function (_a) {
10140
+ switch (_a.label) {
10141
+ case 0: return [4 /*yield*/, loadPdfjs()];
10142
+ case 1:
10143
+ pdfjs = _a.sent();
10144
+ if (cancelled)
10145
+ return [2 /*return*/];
10146
+ if (!pdfjs) {
10147
+ setState('error');
10148
+ return [2 /*return*/];
10149
+ }
10150
+ _a.label = 2;
10151
+ case 2:
10152
+ _a.trys.push([2, 6, , 7]);
10153
+ return [4 /*yield*/, pdfjs.getDocument({ url: url }).promise];
10154
+ case 3:
10155
+ doc = _a.sent();
10156
+ return [4 /*yield*/, doc.getPage(1)];
10157
+ case 4:
10158
+ page = _a.sent();
10159
+ base = page.getViewport({ scale: 1 });
10160
+ viewport = page.getViewport({ scale: width / base.width });
10161
+ canvas = canvasRef.current;
10162
+ if (!canvas || cancelled)
10163
+ return [2 /*return*/];
10164
+ canvas.width = viewport.width;
10165
+ canvas.height = viewport.height;
10166
+ return [4 /*yield*/, page.render({
10167
+ canvasContext: canvas.getContext('2d'),
10168
+ viewport: viewport
10169
+ }).promise];
10170
+ case 5:
10171
+ _a.sent();
10172
+ if (!cancelled)
10173
+ setState('ready');
10174
+ return [3 /*break*/, 7];
10175
+ case 6:
10176
+ err_1 = _a.sent();
10177
+ console.warn('[feathery] PDF preview failed to load', { url: url, err: err_1 });
10178
+ if (!cancelled)
10179
+ setState('error');
10180
+ return [3 /*break*/, 7];
10181
+ case 7: return [2 /*return*/];
10182
+ }
10183
+ });
10184
+ }); })();
10185
+ return function () {
10186
+ cancelled = true;
10187
+ };
10188
+ }, [url, width]);
10189
+ // Fixed-size slice, builder parity (h-28 w-[140px]), the page renders at
10190
+ // full width and the box crops the rest, loading/error is the same box as
10191
+ // a flat gray square so the swap never shifts layout
10192
+ var height = Math.round(width * 0.8);
10193
+ var ready = state === 'ready';
10194
+ return (jsxs("div", __assign({ css: __assign({ width: "".concat(width, "px"), height: "".concat(height, "px"), overflow: 'hidden', borderRadius: '8px', border: "1px solid ".concat(GRAY_200), backgroundColor: ready ? 'white' : GRAY_100 }, (ready
10195
+ ? {}
10196
+ : {
10197
+ display: 'flex',
10198
+ alignItems: 'center',
10199
+ justifyContent: 'center',
10200
+ color: GRAY_400
10201
+ })) }, { children: [!ready && (glyph === undefined ? jsx(DocumentIcon, {}) : glyph), jsx("canvas", { ref: canvasRef, css: {
10202
+ display: ready ? 'block' : 'none',
10203
+ maxWidth: '100%'
10204
+ } })] })));
10205
+ });
10206
+ // Composer chip: thumbnail or typed icon + truncated name, failed badge,
10207
+ // per-chip remove, no processing indicator (builder parity, in-flight shows
10208
+ // on the optimistic message thumbnail)
10209
+ var AttachmentChip = function (_a) {
10210
+ var _b, _c;
10211
+ var attachment = _a.attachment, onRemove = _a.onRemove;
10212
+ var mediaType = (_b = attachment.uploadedMediaType) !== null && _b !== void 0 ? _b : attachment.file.type;
10213
+ var filename = (_c = attachment.uploadedFilename) !== null && _c !== void 0 ? _c : attachment.file.name;
10214
+ var failed = attachment.processingStatus === 'failed';
10215
+ return (jsxs("div", __assign({ css: {
10216
+ position: 'relative',
10217
+ display: 'flex',
10218
+ alignItems: 'center',
10219
+ gap: '6px',
10220
+ padding: '4px 6px',
10221
+ border: "1px solid ".concat(failed ? '#fca5a5' : GRAY_200),
10222
+ borderRadius: '8px',
10223
+ backgroundColor: 'white',
10224
+ maxWidth: '160px',
10225
+ flexShrink: 0
10226
+ } }, { children: [isImageType(mediaType) ? (jsx("img", { src: attachment.previewUrl, alt: filename, css: {
10227
+ width: '28px',
10228
+ height: '28px',
10229
+ objectFit: 'cover',
10230
+ borderRadius: '4px',
10231
+ flexShrink: 0
10232
+ } })) : (jsx(TypedFileIcon, { mediaType: mediaType, filename: filename, size: 24 })), jsxs("div", __assign({ css: { minWidth: 0 } }, { children: [jsx("div", __assign({ css: {
10233
+ fontSize: '11px',
10234
+ color: GRAY_800,
10235
+ whiteSpace: 'nowrap',
10236
+ overflow: 'hidden',
10237
+ textOverflow: 'ellipsis'
10238
+ } }, { children: filename })), failed && (jsx("div", __assign({ css: { fontSize: '10px', color: '#dc2626' } }, { children: "Index failed" })))] })), jsx("button", __assign({ type: 'button', onClick: onRemove, "aria-label": 'Remove attachment', css: {
10239
+ position: 'absolute',
10240
+ top: '-6px',
10241
+ right: '-6px',
10242
+ width: '16px',
10243
+ height: '16px',
10244
+ display: 'flex',
10245
+ alignItems: 'center',
10246
+ justifyContent: 'center',
10247
+ borderRadius: '50%',
10248
+ border: "1px solid ".concat(GRAY_200),
10249
+ backgroundColor: 'white',
10250
+ color: GRAY_800,
10251
+ cursor: 'pointer',
10252
+ padding: 0,
10253
+ '& svg': { width: '10px', height: '10px' }
10254
+ } }, { children: jsx(CloseIcon, {}) }))] })));
10255
+ };
10256
+ // Attachment in a sent message: images inline, docs via the page-1
10257
+ // thumbnail (converted docs point at a PDF), click opens the viewer
10258
+ // overlay, in-flight uploads dim under a spinner
10259
+ var MessageAttachment = function (_a) {
10260
+ var mediaType = _a.mediaType, filename = _a.filename, url = _a.url, onOpen = _a.onOpen, _b = _a.inFlight, inFlight = _b === void 0 ? false : _b;
10261
+ // Persisted attachment URLs are time-limited presigns, old history falls
10262
+ // back to the doc icon instead of a broken image
10263
+ var _c = __read(useState(false), 2), imgErrored = _c[0], setImgErrored = _c[1];
10264
+ var content = isImageType(mediaType) ? (!imgErrored ? (jsx("img", { src: url, alt: filename !== null && filename !== void 0 ? filename : 'attachment', onError: function () { return setImgErrored(true); }, css: {
10265
+ maxWidth: '140px',
10266
+ maxHeight: '112px',
10267
+ borderRadius: '8px',
10268
+ objectFit: 'cover',
10269
+ display: 'block'
10270
+ } })) : (jsx("div", __assign({ css: {
10271
+ width: '140px',
10272
+ height: '112px',
10273
+ display: 'flex',
10274
+ alignItems: 'center',
10275
+ justifyContent: 'center',
10276
+ borderRadius: '8px',
10277
+ border: "1px solid ".concat(GRAY_200),
10278
+ backgroundColor: GRAY_100,
10279
+ color: GRAY_400
10280
+ } }, { children: jsx(DocumentIcon, {}) })))) : (jsx(LazyPdfThumbnail, { url: url, width: 140, glyph: inFlight ? null : (jsx(TypedFileIcon, { mediaType: mediaType, filename: filename, size: 28 })) }));
10281
+ return (jsxs("div", __assign({ onClick: inFlight ? undefined : onOpen, title: filename, css: { position: 'relative', cursor: inFlight ? 'default' : 'pointer' } }, { children: [jsx("div", __assign({ css: { opacity: inFlight ? 0.6 : 1 } }, { children: content })), inFlight && (jsx("div", __assign({ css: {
10282
+ position: 'absolute',
10283
+ inset: 0,
10284
+ display: 'flex',
10285
+ alignItems: 'center',
10286
+ justifyContent: 'center'
10287
+ } }, { children: jsx(SpinnerIcon, {}) })))] })));
10288
+ };
10289
+ // Full-size viewer overlay, builder parity: PDFs via the browser's native
10290
+ // iframe viewer, images inline, filename pill below, dismiss on backdrop
10291
+ // click or Escape
10292
+ var AttachmentPreviewOverlay = function (_a) {
10293
+ var _b, _c;
10294
+ var preview = _a.preview, onClose = _a.onClose;
10295
+ useEffect(function () {
10296
+ var onKeyDown = function (e) {
10297
+ if (e.key === 'Escape')
10298
+ onClose();
10299
+ };
10300
+ featheryDoc().addEventListener('keydown', onKeyDown);
10301
+ return function () { return featheryDoc().removeEventListener('keydown', onKeyDown); };
10302
+ }, [onClose]);
10303
+ return (jsxs("div", __assign({ onClick: onClose, css: {
10304
+ position: 'fixed',
10305
+ inset: 0,
10306
+ zIndex: 1002,
10307
+ display: 'flex',
10308
+ flexDirection: 'column',
10309
+ alignItems: 'center',
10310
+ justifyContent: 'center',
10311
+ backgroundColor: 'rgba(0, 0, 0, 0.6)'
10312
+ } }, { children: [preview.mediaType === 'application/pdf' ? (jsx("iframe", { src: preview.url, title: (_b = preview.filename) !== null && _b !== void 0 ? _b : 'PDF preview', onClick: function (e) { return e.stopPropagation(); }, css: {
10313
+ height: '85vh',
10314
+ width: '85vw',
10315
+ maxWidth: '1000px',
10316
+ borderRadius: '8px',
10317
+ border: 'none',
10318
+ backgroundColor: 'white'
10319
+ } })) : (jsx("img", { src: preview.url, alt: (_c = preview.filename) !== null && _c !== void 0 ? _c : 'Image preview', onClick: function (e) { return e.stopPropagation(); }, onError: onClose, css: {
10320
+ maxHeight: '85vh',
10321
+ maxWidth: '85vw',
10322
+ borderRadius: '8px',
10323
+ objectFit: 'contain'
10324
+ } })), preview.filename && (jsx("span", __assign({ css: {
10325
+ marginTop: '12px',
10326
+ maxWidth: '85vw',
10327
+ whiteSpace: 'nowrap',
10328
+ overflow: 'hidden',
10329
+ textOverflow: 'ellipsis',
10330
+ borderRadius: '9999px',
10331
+ backgroundColor: 'white',
10332
+ padding: '4px 12px',
10333
+ fontSize: '13px',
10334
+ color: GRAY_800
10335
+ } }, { children: preview.filename })))] })));
10336
+ };
10337
+
10338
+ // Owns the composer's staged-attachment lifecycle, validate + compress on
10339
+ // add, upload, poll until terminal, per-chip abort on remove, full reset on
10340
+ // chat switch (another thread's session can't send them)
10341
+ function useChatAttachments(_a) {
10342
+ var _this = this;
10343
+ var activeChat = _a.activeChat, baseUrl = _a.baseUrl, headers = _a.headers;
10344
+ var _b = __read(useState([]), 2), attachments = _b[0], setAttachments = _b[1];
10345
+ var _c = __read(useState(null), 2), attachmentError = _c[0], setAttachmentError = _c[1];
10346
+ var _d = __read(useState(false), 2), isDragging = _d[0], setIsDragging = _d[1];
10347
+ var attachmentsRef = useRef(attachments);
10348
+ attachmentsRef.current = attachments;
10349
+ // AbortController per previewUrl so removing a chip cancels its upload+poll
10350
+ var uploadControllersRef = useRef(new Map());
10351
+ var fileInputRef = useRef(null);
10352
+ useEffect(function () {
10353
+ var controllers = uploadControllersRef.current;
10354
+ return function () {
10355
+ controllers.forEach(function (controller) { return controller.abort(); });
10356
+ controllers.clear();
10357
+ attachmentsRef.current.forEach(function (attachment) {
10358
+ return URL.revokeObjectURL(attachment.previewUrl);
10359
+ });
10360
+ setAttachments([]);
10361
+ setAttachmentError(null);
10362
+ };
10363
+ }, [activeChat]);
10364
+ var uploadAndTrack = useCallback(function (previewUrl, file) { return __awaiter(_this, void 0, void 0, function () {
10365
+ var sessionId, controller, stamp, uploaded, processed, err_1, message;
10366
+ var _a;
10367
+ return __generator(this, function (_b) {
10368
+ switch (_b.label) {
10369
+ case 0:
10370
+ sessionId = getChatSessionId(activeChat);
10371
+ if (!sessionId)
10372
+ return [2 /*return*/];
10373
+ controller = new AbortController();
10374
+ uploadControllersRef.current.set(previewUrl, controller);
10375
+ stamp = function (updates) {
10376
+ return setAttachments(function (prev) {
10377
+ return prev.map(function (a) {
10378
+ return a.previewUrl === previewUrl ? __assign(__assign({}, a), updates) : a;
10379
+ });
10380
+ });
10381
+ };
10382
+ _b.label = 1;
10383
+ case 1:
10384
+ _b.trys.push([1, 4, 5, 6]);
10385
+ return [4 /*yield*/, uploadAttachment(file, baseUrl, headers, sessionId, controller.signal)];
10386
+ case 2:
10387
+ uploaded = _b.sent();
10388
+ if (controller.signal.aborted)
10389
+ return [2 /*return*/];
10390
+ stamp({
10391
+ id: uploaded.id,
10392
+ uploadedUrl: uploaded.url,
10393
+ uploadedFilename: uploaded.filename,
10394
+ uploadedMediaType: uploaded.mediaType,
10395
+ processingStatus: uploaded.processingStatus
10396
+ });
10397
+ if (isTerminalStatus(uploaded.processingStatus))
10398
+ return [2 /*return*/];
10399
+ return [4 /*yield*/, pollAttachmentStatus(uploaded.id, baseUrl, headers, sessionId, controller.signal)];
10400
+ case 3:
10401
+ processed = _b.sent();
10402
+ if (controller.signal.aborted)
10403
+ return [2 /*return*/];
10404
+ stamp({
10405
+ uploadedUrl: (_a = processed.url) !== null && _a !== void 0 ? _a : uploaded.url,
10406
+ uploadedFilename: processed.filename,
10407
+ uploadedMediaType: processed.mediaType,
10408
+ processingStatus: processed.processingStatus
10409
+ });
10410
+ return [3 /*break*/, 6];
10411
+ case 4:
10412
+ err_1 = _b.sent();
10413
+ if (controller.signal.aborted)
10414
+ return [2 /*return*/];
10415
+ message = err_1 instanceof Error ? err_1.message : 'Failed to upload attachment.';
10416
+ if (err_1.status === 403) {
10417
+ // Anonymous fillers can't attach, drop the chip + surface inline
10418
+ setAttachments(function (prev) {
10419
+ return prev.filter(function (a) { return a.previewUrl !== previewUrl; });
10420
+ });
10421
+ URL.revokeObjectURL(previewUrl);
10422
+ setAttachmentError(message);
10423
+ }
10424
+ else {
10425
+ stamp({ processingStatus: 'failed', uploadError: message });
10426
+ }
10427
+ return [3 /*break*/, 6];
10428
+ case 5:
10429
+ uploadControllersRef.current.delete(previewUrl);
10430
+ return [7 /*endfinally*/];
10431
+ case 6: return [2 /*return*/];
10432
+ }
10433
+ });
10434
+ }); }, [activeChat, baseUrl, headers]);
10435
+ var addFiles = useCallback(function (files) { return __awaiter(_this, void 0, void 0, function () {
10436
+ var validFiles, processedFiles, remaining, additions;
10437
+ return __generator(this, function (_a) {
10438
+ switch (_a.label) {
10439
+ case 0:
10440
+ setAttachmentError(null);
10441
+ validFiles = files.filter(function (file) {
10442
+ return ALLOWED_MEDIA_TYPES.has(file.type) && file.size <= MAX_FILE_SIZE;
10443
+ });
10444
+ if (validFiles.length < files.length) {
10445
+ setAttachmentError('Only images, PDFs, Word documents, Excel spreadsheets, and Powerpoints up to 25MB are supported.');
10446
+ }
10447
+ if (!validFiles.length)
10448
+ return [2 /*return*/];
10449
+ return [4 /*yield*/, Promise.all(validFiles.map(function (file) {
10450
+ return isImageType(file.type) ? compressImage(file) : file;
10451
+ }))];
10452
+ case 1:
10453
+ processedFiles = _a.sent();
10454
+ remaining = Math.max(0, MAX_ATTACHMENTS - attachmentsRef.current.length);
10455
+ if (processedFiles.length > remaining) {
10456
+ setAttachmentError("You can attach up to ".concat(MAX_ATTACHMENTS, " files."));
10457
+ }
10458
+ if (remaining === 0)
10459
+ return [2 /*return*/];
10460
+ additions = processedFiles.slice(0, remaining).map(function (file) { return ({
10461
+ file: file,
10462
+ previewUrl: URL.createObjectURL(file),
10463
+ processingStatus: 'uploading'
10464
+ }); });
10465
+ setAttachments(function (prev) { return __spreadArray(__spreadArray([], __read(prev), false), __read(additions), false); });
10466
+ additions.forEach(function (a) {
10467
+ uploadAndTrack(a.previewUrl, a.file);
10468
+ });
10469
+ return [2 /*return*/];
10470
+ }
10471
+ });
10472
+ }); }, [uploadAndTrack]);
10473
+ var removeFile = useCallback(function (previewUrl) {
10474
+ var controller = uploadControllersRef.current.get(previewUrl);
10475
+ if (controller) {
10476
+ controller.abort();
10477
+ uploadControllersRef.current.delete(previewUrl);
10478
+ }
10479
+ URL.revokeObjectURL(previewUrl);
10480
+ setAttachments(function (prev) { return prev.filter(function (a) { return a.previewUrl !== previewUrl; }); });
10481
+ }, []);
10482
+ // Hands staged attachments to the caller and clears them from the
10483
+ // composer, previewUrls narrows to one batch (late additions stay for the
10484
+ // next message), caller owns revoking the preview URLs
10485
+ var takeAttachments = useCallback(function (previewUrls) {
10486
+ var all = attachmentsRef.current;
10487
+ if (!previewUrls) {
10488
+ setAttachments([]);
10489
+ setAttachmentError(null);
10490
+ return all;
10491
+ }
10492
+ var taken = all.filter(function (a) { return previewUrls.includes(a.previewUrl); });
10493
+ setAttachments(all.filter(function (a) { return !previewUrls.includes(a.previewUrl); }));
10494
+ return taken;
10495
+ }, []);
10496
+ var handlePaste = useCallback(function (e) {
10497
+ var pastedFiles = Array.from(e.clipboardData.items)
10498
+ .filter(function (item) { return item.kind === 'file' && ALLOWED_MEDIA_TYPES.has(item.type); })
10499
+ .map(function (item) { return item.getAsFile(); })
10500
+ .filter(Boolean);
10501
+ if (pastedFiles.length)
10502
+ addFiles(pastedFiles);
10503
+ }, [addFiles]);
10504
+ var handleDragOver = useCallback(function (e) {
10505
+ if (e.dataTransfer.types.includes('Files')) {
10506
+ e.preventDefault();
10507
+ setIsDragging(true);
10508
+ }
10509
+ }, []);
10510
+ var handleDragLeave = useCallback(function () { return setIsDragging(false); }, []);
10511
+ var handleDrop = useCallback(function (e) {
10512
+ e.preventDefault();
10513
+ setIsDragging(false);
10514
+ if (e.dataTransfer.files.length > 0) {
10515
+ addFiles(Array.from(e.dataTransfer.files));
10516
+ }
10517
+ }, [addFiles]);
10518
+ var attachmentsInFlight = attachments.some(function (a) { return !isTerminalStatus(a.processingStatus); });
10519
+ return {
10520
+ attachments: attachments,
10521
+ attachmentError: attachmentError,
10522
+ attachmentsInFlight: attachmentsInFlight,
10523
+ isDragging: isDragging,
10524
+ fileInputRef: fileInputRef,
10525
+ addFiles: addFiles,
10526
+ removeFile: removeFile,
10527
+ takeAttachments: takeAttachments,
10528
+ handlePaste: handlePaste,
10529
+ handleDragOver: handleDragOver,
10530
+ handleDragLeave: handleDragLeave,
10531
+ handleDrop: handleDrop
10532
+ };
10533
+ }
9767
10534
 
9768
10535
  function base64ToBytes(base64) {
9769
10536
  var binary = featheryWindow().atob(base64);
@@ -9931,10 +10698,10 @@ var VoiceMic = /** @class */ (function () {
9931
10698
  switch (_d.label) {
9932
10699
  case 0:
9933
10700
  _d.trys.push([0, 4, , 5]);
9934
- return [4 /*yield*/, import('./fthry_index.DVKk9DNh.js').then(function (n) { return n.i; })];
10701
+ return [4 /*yield*/, import('./fthry_index.BJvyzCAc.js').then(function (n) { return n.i; })];
9935
10702
  case 1:
9936
10703
  _a = _d.sent(), MicVAD_1 = _a.MicVAD, vadUtils_1 = _a.utils;
9937
- return [4 /*yield*/, import('./fthry_logging.DQALXb9A.js').then(function (n) { return n.l; })];
10704
+ return [4 /*yield*/, import('./fthry_logging.CMeHXzJL.js').then(function (n) { return n.l; })];
9938
10705
  case 2:
9939
10706
  vadLog = (_d.sent()).log;
9940
10707
  vadLog.debug = function () { return undefined; };
@@ -10200,43 +10967,6 @@ function useAssistantVoice(_a) {
10200
10967
  };
10201
10968
  }
10202
10969
 
10203
- var DEFAULT_CHAT_COLOR = '#6b7280';
10204
- var GRAY_50 = '#f9fafb';
10205
- var GRAY_100 = '#f3f4f6';
10206
- var GRAY_200 = '#e5e7eb';
10207
- var GRAY_400 = '#9ca3af';
10208
- var GRAY_500 = '#6b7280';
10209
- var GRAY_800 = '#1f2937';
10210
- var RED_500 = '#ef4444';
10211
- // Generate lighter/darker variants from hex color
10212
- var adjustColor = function (hex, percent) {
10213
- var num = parseInt(hex.replace('#', ''), 16);
10214
- var r = Math.min(255, Math.max(0, (num >> 16) + Math.round(2.55 * percent)));
10215
- var g = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + Math.round(2.55 * percent)));
10216
- var b = Math.min(255, Math.max(0, (num & 0x0000ff) + Math.round(2.55 * percent)));
10217
- return "#".concat(((r << 16) | (g << 8) | b).toString(16).padStart(6, '0'));
10218
- };
10219
- var blendToWhite = function (hex, percent) {
10220
- var num = parseInt(hex.replace('#', ''), 16);
10221
- var r = (num >> 16) & 0xff;
10222
- var g = (num >> 8) & 0xff;
10223
- var b = num & 0xff;
10224
- var blend = percent / 100;
10225
- var newR = Math.round(r + (255 - r) * blend);
10226
- var newG = Math.round(g + (255 - g) * blend);
10227
- var newB = Math.round(b + (255 - b) * blend);
10228
- return "#".concat(((newR << 16) | (newG << 8) | newB)
10229
- .toString(16)
10230
- .padStart(6, '0'));
10231
- };
10232
- // Compute all color variants from primary
10233
- var getChatColors = function (primary) { return ({
10234
- primary: primary,
10235
- hover: adjustColor(primary, -15),
10236
- disabled: adjustColor(primary, 30),
10237
- light: blendToWhite(primary, 90) // Light: assistant bubbles
10238
- }); };
10239
-
10240
10970
  var TOOL_LABELS = {
10241
10971
  searchWeb: {
10242
10972
  running: 'Searching the web...',
@@ -10275,6 +11005,10 @@ var TOOL_LABELS = {
10275
11005
  running: 'Running table action...',
10276
11006
  done: 'Ran the table action'
10277
11007
  },
11008
+ queryAttachmentSemantic: {
11009
+ running: 'Reading attachments...',
11010
+ done: 'Read the attachments'
11011
+ },
10278
11012
  getPanelSnapshot: {
10279
11013
  running: 'Reading the form...',
10280
11014
  done: 'Reviewed the form'
@@ -10549,7 +11283,8 @@ var ToolChunkRow = function (_a) {
10549
11283
  } }))] })), expandable && expanded && (jsx(ToolRowDetail, { row: row, linkColor: linkColor }))] })));
10550
11284
  };
10551
11285
  // Mimics the chunk header so a real tool arriving doesn't reflow the layout
10552
- var ToolChunkPlaceholder = function () {
11286
+ var ToolChunkPlaceholder = function (_a) {
11287
+ var _b = _a.label, label = _b === void 0 ? 'Working on it...' : _b;
10553
11288
  return (jsx("div", __assign({ css: {
10554
11289
  display: 'flex',
10555
11290
  flexDirection: 'column',
@@ -10567,7 +11302,7 @@ var ToolChunkPlaceholder = function () {
10567
11302
  color: GRAY_500,
10568
11303
  fontSize: '13px',
10569
11304
  alignSelf: 'flex-start'
10570
- } }, { children: jsx("span", __assign({ css: shimmerCss }, { children: "Working on it..." })) })) })));
11305
+ } }, { children: jsx("span", __assign({ css: shimmerCss }, { children: label })) })) })));
10571
11306
  };
10572
11307
 
10573
11308
  /**
@@ -51738,14 +52473,14 @@ ${e}</tr>
51738
52473
  Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error occurred:</p><pre>"+T(n.message+"",true)+"</pre>";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L$1=new D;function g(u,e){return L$1.parse(u,e)}g.options=g.setOptions=function(u){return L$1.setOptions(u),g.defaults=L$1.defaults,G(g.defaults),g};g.getDefaults=M;g.defaults=O;g.use=function(...u){return L$1.use(...u),g.defaults=L$1.defaults,G(g.defaults),g};g.walkTokens=function(u,e){return L$1.walkTokens(u,e)};g.parseInline=L$1.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y$1;g.TextRenderer=$;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;g.options;g.setOptions;g.use;g.walkTokens;g.parseInline;b.parse;x.lex;
51739
52474
 
51740
52475
  var En=300,Hn="300px",Dn=500;function Lt(e={}){let{immediate:t=false,debounceDelay:o=En,rootMargin:n=Hn,idleTimeout:r=Dn}=e,[s,a]=useState(false),l=useRef(null),i=useRef(null),c=useRef(null),d=useMemo(()=>p=>{let g=Date.now();return window.setTimeout(()=>{p({didTimeout:false,timeRemaining:()=>Math.max(0,50-(Date.now()-g))});},1)},[]),u=useMemo(()=>typeof window!="undefined"&&window.requestIdleCallback?(p,g)=>window.requestIdleCallback(p,g):d,[d]),m=useMemo(()=>typeof window!="undefined"&&window.cancelIdleCallback?p=>window.cancelIdleCallback(p):p=>{clearTimeout(p);},[]);return useEffect(()=>{if(t){a(true);return}let p=l.current;if(!p)return;i.current&&(clearTimeout(i.current),i.current=null),c.current&&(m(c.current),c.current=null);let g=()=>{i.current&&(clearTimeout(i.current),i.current=null),c.current&&(m(c.current),c.current=null);},h=x=>{c.current=u(w=>{w.timeRemaining()>0||w.didTimeout?(a(true),x.disconnect()):c.current=u(()=>{a(true),x.disconnect();},{timeout:r/2});},{timeout:r});},b=x=>{g(),i.current=window.setTimeout(()=>{var I,H;let w=x.takeRecords();(w.length===0||(H=(I=w.at(-1))==null?void 0:I.isIntersecting)!=null&&H)&&h(x);},o);},f=(x,w)=>{x.isIntersecting?b(w):g();},T=new IntersectionObserver(x=>{for(let w of x)f(w,T);},{rootMargin:n,threshold:0});return T.observe(p),()=>{i.current&&clearTimeout(i.current),c.current&&m(c.current),T.disconnect();}},[t,o,n,r,m,u]),{shouldRender:s,containerRef:l}}var Rt=/\s/,On=/^\s+$/,Vn=new Set(["code","pre","svg","math","annotation"]),jn=e=>typeof e=="object"&&e!==null&&"type"in e&&e.type==="element",Fn=e=>e.some(t=>jn(t)&&Vn.has(t.tagName)),zn=e=>{let t=[],o="",n=false;for(let r of e){let s=Rt.test(r);s!==n&&o&&(t.push(o),o=""),o+=r,n=s;}return o&&t.push(o),t},_n=e=>{let t=[],o="";for(let n of e)Rt.test(n)?o+=n:(o&&(t.push(o),o=""),t.push(n));return o&&t.push(o),t},qn=(e,t,o,n,r)=>({type:"element",tagName:"span",properties:{"data-sd-animate":true,style:r?`--sd-animation:sd-${t};--sd-duration:0ms;--sd-easing:${n}`:`--sd-animation:sd-${t};--sd-duration:${o}ms;--sd-easing:${n}`},children:[{type:"text",value:e}]}),$n=(e,t,o,n,r)=>{let s=t.at(-1);if(!(s&&"children"in s))return;if(Fn(t))return SKIP;let a=s,l=a.children.indexOf(e);if(l===-1)return;let i=e.value;if(!i.trim()){r.count+=i.length;return}let c=o.sep==="char"?_n(i):zn(i),d=n.prevContentLength,u=c.map(m=>{let p=r.count;if(r.count+=m.length,On.test(m))return {type:"text",value:m};let g=d>0&&p<d;return qn(m,o.animation,o.duration,o.easing,g)});return a.children.splice(l,1,...u),l+u.length},Wn=0;function be(e){var s,a,l,i;let t={animation:(s=e==null?void 0:e.animation)!=null?s:"fadeIn",duration:(a=e==null?void 0:e.duration)!=null?a:150,easing:(l=e==null?void 0:e.easing)!=null?l:"ease",sep:(i=e==null?void 0:e.sep)!=null?i:"word"},o={prevContentLength:0,lastRenderCharCount:0},n=Wn++,r=()=>c=>{let d={count:0};visitParents(c,"text",(u,m)=>$n(u,m,t,o,d)),o.lastRenderCharCount=d.count,o.prevContentLength=0;};return Object.defineProperty(r,"name",{value:`rehypeAnimate$${n}`}),{name:"animate",type:"animate",rehypePlugin:r,setPrevContentLength(c){o.prevContentLength=c;},getLastRenderCharCount(){let c=o.lastRenderCharCount;return o.lastRenderCharCount=0,c}}}be();var Qe=createContext(false),et=()=>useContext(Qe);var he=(...e)=>twMerge(clsx(e)),Jn=(e,t)=>{if(!e||!t)return t;let o=`${e}:`;return t.split(/\s+/).filter(Boolean).map(n=>n.startsWith(o)?n:`${e}:${n}`).join(" ")},Ht=e=>e?(...t)=>Jn(e,twMerge(clsx(t))):he,J=(e,t,o)=>{let n=typeof t=="string"?new Blob([t],{type:o}):t,r=URL.createObjectURL(n),s=document.createElement("a");s.href=r,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(r);};var Se=createContext(he),y=()=>useContext(Se);var Yn=he("block","before:content-[counter(line)]","before:inline-block","before:[counter-increment:line]","before:w-6","before:mr-4","before:text-[13px]","before:text-right","before:text-muted-foreground/50","before:font-mono","before:select-none"),Qn=e=>{let t={};for(let o of e.split(";")){let n=o.indexOf(":");if(n>0){let r=o.slice(0,n).trim(),s=o.slice(n+1).trim();r&&s&&(t[r]=s);}}return t},Bt=memo(({children:e,result:t,language:o,className:n,startLine:r,...s})=>{let a=y(),l=useMemo(()=>a(Yn),[a]),i=useMemo(()=>{let c={};return t.bg&&(c["--sdm-bg"]=t.bg),t.fg&&(c["--sdm-fg"]=t.fg),t.rootStyle&&Object.assign(c,Qn(t.rootStyle)),c},[t.bg,t.fg,t.rootStyle]);return jsx$1("div",{className:a(n,"overflow-hidden rounded-md border border-border bg-background p-4 text-sm"),"data-language":o,"data-streamdown":"code-block-body",...s,children:jsx$1("pre",{className:a(n,"bg-[var(--sdm-bg,inherit]","dark:bg-[var(--shiki-dark-bg,var(--sdm-bg,inherit)]"),style:i,children:jsx$1("code",{className:a("[counter-increment:line_0] [counter-reset:line]"),style:r&&r>1?{counterReset:`line ${r-1}`}:void 0,children:t.tokens.map((c,d)=>jsx$1("span",{className:l,children:c.length===0||c.length===1&&c[0].content===""?`
51741
- `:c.map((u,m)=>{let p={},g=!!u.bgColor;if(u.color&&(p["--sdm-c"]=u.color),u.bgColor&&(p["--sdm-tbg"]=u.bgColor),u.htmlStyle)for(let[h,b]of Object.entries(u.htmlStyle))h==="color"?p["--sdm-c"]=b:h==="background-color"?(p["--sdm-tbg"]=b,g=true):p[h]=b;return jsx$1("span",{className:a("text-[var(--sdm-c,inherit)]","dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]",g&&"bg-[var(--sdm-tbg)]",g&&"dark:bg-[var(--shiki-dark-bg,var(--sdm-tbg))]"),style:p,...u.htmlAttrs,children:u.content},m)})},d))})})})},(e,t)=>e.result===t.result&&e.language===t.language&&e.className===t.className&&e.startLine===t.startLine);var tt=({className:e,language:t,style:o,isIncomplete:n,...r})=>{let s=y();return jsx$1("div",{className:s("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2",e),"data-incomplete":n||void 0,"data-language":t,"data-streamdown":"code-block",style:{contentVisibility:"auto",containIntrinsicSize:"auto 200px",...o},...r})};var ot=createContext({code:""}),Ee=()=>useContext(ot);var nt=({language:e})=>{let t=y();return jsx$1("div",{className:t("flex h-8 items-center text-muted-foreground text-xs"),"data-language":e,"data-streamdown":"code-block-header",children:jsx$1("span",{className:t("ml-1 font-mono lowercase"),children:e})})};var sr=/\n+$/,ar=lazy$1(()=>import('./fthry_highlighted-body-TPN3WLV5.CqH7kZh1.js').then(e=>({default:e.HighlightedCodeBlockBody}))),rt=({code:e,language:t,className:o,children:n,isIncomplete:r=false,startLine:s,...a})=>{let l=y(),i=useMemo(()=>e.replace(sr,""),[e]),c=useMemo(()=>({bg:"transparent",fg:"inherit",tokens:i.split(`
52476
+ `:c.map((u,m)=>{let p={},g=!!u.bgColor;if(u.color&&(p["--sdm-c"]=u.color),u.bgColor&&(p["--sdm-tbg"]=u.bgColor),u.htmlStyle)for(let[h,b]of Object.entries(u.htmlStyle))h==="color"?p["--sdm-c"]=b:h==="background-color"?(p["--sdm-tbg"]=b,g=true):p[h]=b;return jsx$1("span",{className:a("text-[var(--sdm-c,inherit)]","dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]",g&&"bg-[var(--sdm-tbg)]",g&&"dark:bg-[var(--shiki-dark-bg,var(--sdm-tbg))]"),style:p,...u.htmlAttrs,children:u.content},m)})},d))})})})},(e,t)=>e.result===t.result&&e.language===t.language&&e.className===t.className&&e.startLine===t.startLine);var tt=({className:e,language:t,style:o,isIncomplete:n,...r})=>{let s=y();return jsx$1("div",{className:s("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2",e),"data-incomplete":n||void 0,"data-language":t,"data-streamdown":"code-block",style:{contentVisibility:"auto",containIntrinsicSize:"auto 200px",...o},...r})};var ot=createContext({code:""}),Ee=()=>useContext(ot);var nt=({language:e})=>{let t=y();return jsx$1("div",{className:t("flex h-8 items-center text-muted-foreground text-xs"),"data-language":e,"data-streamdown":"code-block-header",children:jsx$1("span",{className:t("ml-1 font-mono lowercase"),children:e})})};var sr=/\n+$/,ar=lazy$1(()=>import('./fthry_highlighted-body-TPN3WLV5.WdY3U2m3.js').then(e=>({default:e.HighlightedCodeBlockBody}))),rt=({code:e,language:t,className:o,children:n,isIncomplete:r=false,startLine:s,...a})=>{let l=y(),i=useMemo(()=>e.replace(sr,""),[e]),c=useMemo(()=>({bg:"transparent",fg:"inherit",tokens:i.split(`
51742
52477
  `).map(d=>[{content:d,color:"inherit",bgColor:"transparent",htmlStyle:{},offset:0}])}),[i]);return jsx$1(ot.Provider,{value:{code:e},children:jsxs$1(tt,{isIncomplete:r,language:t,children:[jsx$1(nt,{language:t}),n?jsx$1("div",{className:l("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"),children:jsx$1("div",{className:l("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"),"data-streamdown":"code-block-actions",children:n})}):null,jsx$1(Suspense,{fallback:jsx$1(Bt,{className:o,language:t,result:c,startLine:s,...a}),children:jsx$1(ar,{className:o,code:i,language:t,raw:c,startLine:s,...a})})]})})};var Vt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z",fill:"currentColor",fillRule:"evenodd"})}),jt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z",fill:"currentColor",fillRule:"evenodd"})}),Ft=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M8.75 1V1.75V8.68934L10.7197 6.71967L11.25 6.18934L12.3107 7.25L11.7803 7.78033L8.70711 10.8536C8.31658 11.2441 7.68342 11.2441 7.29289 10.8536L4.21967 7.78033L3.68934 7.25L4.75 6.18934L5.28033 6.71967L7.25 8.68934V1.75V1H8.75ZM13.5 9.25V13.5H2.5V9.25V8.5H1V9.25V14C1 14.5523 1.44771 15 2 15H14C14.5523 15 15 14.5523 15 14V9.25V8.5H13.5V9.25Z",fill:"currentColor",fillRule:"evenodd"})}),zt=e=>jsxs$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:[jsx$1("path",{d:"M8 0V4",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M8 16V12",opacity:"0.5",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M3.29773 1.52783L5.64887 4.7639",opacity:"0.9",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M12.7023 1.52783L10.3511 4.7639",opacity:"0.1",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M12.7023 14.472L10.3511 11.236",opacity:"0.4",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M3.29773 14.472L5.64887 11.236",opacity:"0.6",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M15.6085 5.52783L11.8043 6.7639",opacity:"0.2",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M0.391602 10.472L4.19583 9.23598",opacity:"0.7",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M15.6085 10.4722L11.8043 9.2361",opacity:"0.3",stroke:"currentColor",strokeWidth:"1.5"}),jsx$1("path",{d:"M0.391602 5.52783L4.19583 6.7639",opacity:"0.8",stroke:"currentColor",strokeWidth:"1.5"})]}),_t=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M1 5.25V6H2.5V5.25V2.5H5.25H6V1H5.25H2C1.44772 1 1 1.44772 1 2V5.25ZM5.25 14.9994H6V13.4994H5.25H2.5V10.7494V9.99939H1V10.7494V13.9994C1 14.5517 1.44772 14.9994 2 14.9994H5.25ZM15 10V10.75V14C15 14.5523 14.5523 15 14 15H10.75H10V13.5H10.75H13.5V10.75V10H15ZM10.75 1H10V2.5H10.75H13.5V5.25V6H15V5.25V2C15 1.44772 14.5523 1 14 1H10.75Z",fill:"currentColor",fillRule:"evenodd"})}),qt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M13.5 8C13.5 4.96643 11.0257 2.5 7.96452 2.5C5.42843 2.5 3.29365 4.19393 2.63724 6.5H5.25H6V8H5.25H0.75C0.335787 8 0 7.66421 0 7.25V2.75V2H1.5V2.75V5.23347C2.57851 2.74164 5.06835 1 7.96452 1C11.8461 1 15 4.13001 15 8C15 11.87 11.8461 15 7.96452 15C5.62368 15 3.54872 13.8617 2.27046 12.1122L1.828 11.5066L3.03915 10.6217L3.48161 11.2273C4.48831 12.6051 6.12055 13.5 7.96452 13.5C11.0257 13.5 13.5 11.0336 13.5 8Z",fill:"currentColor",fillRule:"evenodd"})}),$t=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z",fill:"currentColor",fillRule:"evenodd"})}),Wt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M13.5 10.25V13.25C13.5 13.3881 13.3881 13.5 13.25 13.5H2.75C2.61193 13.5 2.5 13.3881 2.5 13.25L2.5 2.75C2.5 2.61193 2.61193 2.5 2.75 2.5H5.75H6.5V1H5.75H2.75C1.7835 1 1 1.7835 1 2.75V13.25C1 14.2165 1.7835 15 2.75 15H13.25C14.2165 15 15 14.2165 15 13.25V10.25V9.5H13.5V10.25ZM9 1H9.75H14.2495C14.6637 1 14.9995 1.33579 14.9995 1.75V6.25V7H13.4995V6.25V3.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L12.4388 2.5H9.75H9V1Z",fill:"currentColor",fillRule:"evenodd"})}),Zt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M1.5 6.5C1.5 3.73858 3.73858 1.5 6.5 1.5C9.26142 1.5 11.5 3.73858 11.5 6.5C11.5 9.26142 9.26142 11.5 6.5 11.5C3.73858 11.5 1.5 9.26142 1.5 6.5ZM6.5 0C2.91015 0 0 2.91015 0 6.5C0 10.0899 2.91015 13 6.5 13C8.02469 13 9.42677 12.475 10.5353 11.596L13.9697 15.0303L14.5 15.5607L15.5607 14.5L15.0303 13.9697L11.596 10.5353C12.475 9.42677 13 8.02469 13 6.5C13 2.91015 10.0899 0 6.5 0ZM4.125 5.875H4.75H5.875V4.75V4.125H7.125V4.75V5.875H8.25H8.875V7.125H8.25H7.125V8.25V8.875H5.875V8.25V7.125H4.75H4.125V5.875Z",fill:"currentColor",fillRule:"evenodd"})}),Xt=e=>jsx$1("svg",{color:"currentColor",height:16,strokeLinejoin:"round",viewBox:"0 0 16 16",width:16,...e,children:jsx$1("path",{clipRule:"evenodd",d:"M1.5 6.5C1.5 3.73858 3.73858 1.5 6.5 1.5C9.26142 1.5 11.5 3.73858 11.5 6.5C11.5 9.26142 9.26142 11.5 6.5 11.5C3.73858 11.5 1.5 9.26142 1.5 6.5ZM6.5 0C2.91015 0 0 2.91015 0 6.5C0 10.0899 2.91015 13 6.5 13C8.02469 13 9.42677 12.475 10.5353 11.596L13.9697 15.0303L14.5 15.5607L15.5607 14.5L15.0303 13.9697L11.596 10.5353C12.475 9.42677 13 8.02469 13 6.5C13 2.91015 10.0899 0 6.5 0ZM4.125 5.875H4.75H8.25H8.875V7.125H8.25H4.75H4.125V5.875Z",fill:"currentColor",fillRule:"evenodd"})});var we={CheckIcon:Vt,CopyIcon:jt,DownloadIcon:Ft,ExternalLinkIcon:Wt,Loader2Icon:zt,Maximize2Icon:_t,RotateCcwIcon:qt,XIcon:$t,ZoomInIcon:Zt,ZoomOutIcon:Xt},Kt=createContext(we),mr=(e,t)=>{if(e===t)return true;if(!(e&&t))return e===t;let o=Object.keys(e),n=Object.keys(t);return o.length!==n.length?false:o.every(r=>e[r]===t[r])},st=({icons:e,children:t})=>{let o=useRef(e),n=useRef(e?{...we,...e}:we);mr(o.current,e)||(o.current=e,n.current=e?{...we,...e}:we);let r=n.current;return jsx$1(Kt.Provider,{value:r,children:t})},L=()=>useContext(Kt);var He={copyCode:"Copy Code",downloadFile:"Download file",downloadDiagram:"Download diagram",downloadDiagramAsSvg:"Download diagram as SVG",downloadDiagramAsPng:"Download diagram as PNG",downloadDiagramAsMmd:"Download diagram as MMD",viewFullscreen:"View fullscreen",exitFullscreen:"Exit fullscreen",mermaidFormatSvg:"SVG",mermaidFormatPng:"PNG",mermaidFormatMmd:"MMD",copyTable:"Copy table",copyTableAsMarkdown:"Copy table as Markdown",copyTableAsCsv:"Copy table as CSV",copyTableAsTsv:"Copy table as TSV",downloadTable:"Download table",downloadTableAsCsv:"Download table as CSV",downloadTableAsMarkdown:"Download table as Markdown",tableFormatMarkdown:"Markdown",tableFormatCsv:"CSV",tableFormatTsv:"TSV",imageNotAvailable:"Image not available",downloadImage:"Download image",openExternalLink:"Open external link?",externalLinkWarning:"You're about to visit an external website.",close:"Close",copyLink:"Copy link",copied:"Copied",openLink:"Open link"},De=createContext(He),B=()=>useContext(De);var Be=({onCopy:e,onError:t,timeout:o=2e3,children:n,className:r,code:s,...a})=>{let l=y(),[i,c]=useState(false),d=useRef(0),{code:u}=Ee(),{isAnimating:m}=useContext(R),p=B(),g=s!=null?s:u,h=async()=>{var T;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.writeText)){t==null||t(new Error("Clipboard API not available"));return}try{i||(await navigator.clipboard.writeText(g),c(!0),e==null||e(),d.current=window.setTimeout(()=>c(!1),o));}catch(x){t==null||t(x);}};useEffect(()=>()=>{window.clearTimeout(d.current);},[]);let b=L(),f=i?b.CheckIcon:b.CopyIcon;return jsx$1("button",{className:l("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),"data-streamdown":"code-block-copy-button",disabled:m,onClick:h,title:p.copyCode,type:"button",...a,children:n!=null?n:jsx$1(f,{size:14})})};var Gt={"1c":"1c","1c-query":"1cq",abap:"abap","actionscript-3":"as",ada:"ada",adoc:"adoc","angular-html":"html","angular-ts":"ts",apache:"conf",apex:"cls",apl:"apl",applescript:"applescript",ara:"ara",asciidoc:"adoc",asm:"asm",astro:"astro",awk:"awk",ballerina:"bal",bash:"sh",bat:"bat",batch:"bat",be:"be",beancount:"beancount",berry:"berry",bibtex:"bib",bicep:"bicep",blade:"blade.php",bsl:"bsl",c:"c","c#":"cs","c++":"cpp",cadence:"cdc",cairo:"cairo",cdc:"cdc",clarity:"clar",clj:"clj",clojure:"clj","closure-templates":"soy",cmake:"cmake",cmd:"cmd",cobol:"cob",codeowners:"CODEOWNERS",codeql:"ql",coffee:"coffee",coffeescript:"coffee","common-lisp":"lisp",console:"sh",coq:"v",cpp:"cpp",cql:"cql",crystal:"cr",cs:"cs",csharp:"cs",css:"css",csv:"csv",cue:"cue",cypher:"cql",d:"d",dart:"dart",dax:"dax",desktop:"desktop",diff:"diff",docker:"dockerfile",dockerfile:"dockerfile",dotenv:"env","dream-maker":"dm",edge:"edge",elisp:"el",elixir:"ex",elm:"elm","emacs-lisp":"el",erb:"erb",erl:"erl",erlang:"erl",f:"f","f#":"fs",f03:"f03",f08:"f08",f18:"f18",f77:"f77",f90:"f90",f95:"f95",fennel:"fnl",fish:"fish",fluent:"ftl",for:"for","fortran-fixed-form":"f","fortran-free-form":"f90",fs:"fs",fsharp:"fs",fsl:"fsl",ftl:"ftl",gdresource:"tres",gdscript:"gd",gdshader:"gdshader",genie:"gs",gherkin:"feature","git-commit":"gitcommit","git-rebase":"gitrebase",gjs:"js",gleam:"gleam","glimmer-js":"js","glimmer-ts":"ts",glsl:"glsl",gnuplot:"plt",go:"go",gql:"gql",graphql:"graphql",groovy:"groovy",gts:"gts",hack:"hack",haml:"haml",handlebars:"hbs",haskell:"hs",haxe:"hx",hbs:"hbs",hcl:"hcl",hjson:"hjson",hlsl:"hlsl",hs:"hs",html:"html","html-derivative":"html",http:"http",hxml:"hxml",hy:"hy",imba:"imba",ini:"ini",jade:"jade",java:"java",javascript:"js",jinja:"jinja",jison:"jison",jl:"jl",js:"js",json:"json",json5:"json5",jsonc:"jsonc",jsonl:"jsonl",jsonnet:"jsonnet",jssm:"jssm",jsx:"jsx",julia:"jl",kotlin:"kt",kql:"kql",kt:"kt",kts:"kts",kusto:"kql",latex:"tex",lean:"lean",lean4:"lean",less:"less",liquid:"liquid",lisp:"lisp",lit:"lit",llvm:"ll",log:"log",logo:"logo",lua:"lua",luau:"luau",make:"mak",makefile:"mak",markdown:"md",marko:"marko",matlab:"m",md:"md",mdc:"mdc",mdx:"mdx",mediawiki:"wiki",mermaid:"mmd",mips:"s",mipsasm:"s",mmd:"mmd",mojo:"mojo",move:"move",nar:"nar",narrat:"narrat",nextflow:"nf",nf:"nf",nginx:"conf",nim:"nim",nix:"nix",nu:"nu",nushell:"nu",objc:"m","objective-c":"m","objective-cpp":"mm",ocaml:"ml",pascal:"pas",perl:"pl",perl6:"p6",php:"php",plsql:"pls",po:"po",polar:"polar",postcss:"pcss",pot:"pot",potx:"potx",powerquery:"pq",powershell:"ps1",prisma:"prisma",prolog:"pl",properties:"properties",proto:"proto",protobuf:"proto",ps:"ps",ps1:"ps1",pug:"pug",puppet:"pp",purescript:"purs",py:"py",python:"py",ql:"ql",qml:"qml",qmldir:"qmldir",qss:"qss",r:"r",racket:"rkt",raku:"raku",razor:"cshtml",rb:"rb",reg:"reg",regex:"regex",regexp:"regexp",rel:"rel",riscv:"s",rs:"rs",rst:"rst",ruby:"rb",rust:"rs",sas:"sas",sass:"sass",scala:"scala",scheme:"scm",scss:"scss",sdbl:"sdbl",sh:"sh",shader:"shader",shaderlab:"shader",shell:"sh",shellscript:"sh",shellsession:"sh",smalltalk:"st",solidity:"sol",soy:"soy",sparql:"rq",spl:"spl",splunk:"spl",sql:"sql","ssh-config":"config",stata:"do",styl:"styl",stylus:"styl",svelte:"svelte",swift:"swift","system-verilog":"sv",systemd:"service",talon:"talon",talonscript:"talon",tasl:"tasl",tcl:"tcl",templ:"templ",terraform:"tf",tex:"tex",tf:"tf",tfvars:"tfvars",toml:"toml",ts:"ts","ts-tags":"ts",tsp:"tsp",tsv:"tsv",tsx:"tsx",turtle:"ttl",twig:"twig",typ:"typ",typescript:"ts",typespec:"tsp",typst:"typ",v:"v",vala:"vala",vb:"vb",verilog:"v",vhdl:"vhdl",vim:"vim",viml:"vim",vimscript:"vim",vue:"vue","vue-html":"html","vue-vine":"vine",vy:"vy",vyper:"vy",wasm:"wasm",wenyan:"wy",wgsl:"wgsl",wiki:"wiki",wikitext:"wiki",wit:"wit",wl:"wl",wolfram:"wl",xml:"xml",xsl:"xsl",yaml:"yaml",yml:"yml",zenscript:"zs",zig:"zig",zsh:"zsh",\u6587\u8A00:"wy"},at=({onDownload:e,onError:t,language:o,children:n,className:r,code:s,...a})=>{let l=y(),{code:i}=Ee(),{isAnimating:c}=useContext(R),d=B(),u=L(),m=s!=null?s:i,g=`file.${o&&o in Gt?Gt[o]:"txt"}`,h="text/plain",b=()=>{try{J(g,m,h),e==null||e();}catch(f){t==null||t(f);}};return jsx$1("button",{className:l("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),"data-streamdown":"code-block-download-button",disabled:c,onClick:b,title:d.downloadFile,type:"button",...a,children:n!=null?n:jsx$1(u.DownloadIcon,{size:14})})};var Ae=()=>{let{Loader2Icon:e}=L(),t=y();return jsxs$1("div",{className:t("w-full divide-y divide-border overflow-hidden rounded-xl border border-border"),children:[jsx$1("div",{className:t("h-[46px] w-full bg-muted/80")}),jsx$1("div",{className:t("flex w-full items-center justify-center p-4"),children:jsx$1(e,{className:t("size-4 animate-spin")})})]})};var xr=/\.[^/.]+$/,to=({node:e,className:t,src:o,alt:n,onLoad:r,onError:s,...a})=>{let{DownloadIcon:l}=L(),i=y(),c=useRef(null),[d,u]=useState(false),[m,p]=useState(false),g=B(),h=a.width!=null||a.height!=null,b=(d||h)&&!m,f=m&&!h;useEffect(()=>{let k=c.current;if(k!=null&&k.complete){let I=k.naturalWidth>0;u(I),p(!I);}},[]);let T=useCallback(k=>{u(true),p(false),r==null||r(k);},[r]),x=useCallback(k=>{u(false),p(true),s==null||s(k);},[s]),w=async()=>{if(o)try{let I=await(await fetch(o)).blob(),S=new URL(o,window.location.origin).pathname.split("/").pop()||"",F=S.split(".").pop(),z=S.includes(".")&&F!==void 0&&F.length<=4,q="";if(z)q=S;else {let A=I.type,K="png";A.includes("jpeg")||A.includes("jpg")?K="jpg":A.includes("png")?K="png":A.includes("svg")?K="svg":A.includes("gif")?K="gif":A.includes("webp")&&(K="webp"),q=`${(n||S||"image").replace(xr,"")}.${K}`;}J(q,I,I.type);}catch(k){window.open(o,"_blank");}};return o?jsxs$1("div",{className:i("group relative my-4 inline-block"),"data-streamdown":"image-wrapper",children:[jsx$1("img",{alt:n,className:i("max-w-full rounded-lg",f&&"hidden",t),"data-streamdown":"image",onError:x,onLoad:T,ref:c,src:o,...a}),f&&jsx$1("span",{className:i("text-muted-foreground text-xs italic"),"data-streamdown":"image-fallback",children:g.imageNotAvailable}),jsx$1("div",{className:i("pointer-events-none absolute inset-0 hidden rounded-lg bg-black/10 group-hover:block")}),b&&jsx$1("button",{className:i("absolute right-2 bottom-2 flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-background","opacity-0 group-hover:opacity-100"),onClick:w,title:g.downloadImage,type:"button",children:jsx$1(l,{size:14})})]}):null};var ke=0,le=()=>{ke+=1,ke===1&&(document.body.style.overflow="hidden");},ce=()=>{ke=Math.max(0,ke-1),ke===0&&(document.body.style.overflow="");};var ro=({url:e,isOpen:t,onClose:o,onConfirm:n})=>{let{CheckIcon:r,CopyIcon:s,ExternalLinkIcon:a,XIcon:l}=L(),i=y(),[c,d]=useState(false),u=B(),m=useCallback(async()=>{try{await navigator.clipboard.writeText(e),d(!0),setTimeout(()=>d(!1),2e3);}catch(g){}},[e]),p=useCallback(()=>{n(),o();},[n,o]);return useEffect(()=>{if(t){le();let g=h=>{h.key==="Escape"&&o();};return document.addEventListener("keydown",g),()=>{document.removeEventListener("keydown",g),ce();}}},[t,o]),t?jsx$1("div",{className:i("fixed inset-0 z-50 flex items-center justify-center bg-background/50 backdrop-blur-sm"),"data-streamdown":"link-safety-modal",onClick:o,onKeyDown:g=>{g.key==="Escape"&&o();},role:"button",tabIndex:0,children:jsxs$1("div",{className:i("relative mx-4 flex w-full max-w-md flex-col gap-4 rounded-xl border bg-background p-6 shadow-lg"),onClick:g=>g.stopPropagation(),onKeyDown:g=>g.stopPropagation(),role:"presentation",children:[jsx$1("button",{className:i("absolute top-4 right-4 rounded-md p-1 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:o,title:u.close,type:"button",children:jsx$1(l,{size:16})}),jsxs$1("div",{className:i("flex flex-col gap-2"),children:[jsxs$1("div",{className:i("flex items-center gap-2 font-semibold text-lg"),children:[jsx$1(a,{size:20}),jsx$1("span",{children:u.openExternalLink})]}),jsx$1("p",{className:i("text-muted-foreground text-sm"),children:u.externalLinkWarning})]}),jsx$1("div",{className:i("break-all rounded-md bg-muted p-3 font-mono text-sm",e.length>100&&"max-h-32 overflow-y-auto"),children:e}),jsxs$1("div",{className:i("flex gap-2"),children:[jsx$1("button",{className:i("flex flex-1 items-center justify-center gap-2 rounded-md border bg-background px-4 py-2 font-medium text-sm transition-all hover:bg-muted"),onClick:m,type:"button",children:c?jsxs$1(Fragment,{children:[jsx$1(r,{size:14}),jsx$1("span",{children:u.copied})]}):jsxs$1(Fragment,{children:[jsx$1(s,{size:14}),jsx$1("span",{children:u.copyLink})]})}),jsxs$1("button",{className:i("flex flex-1 items-center justify-center gap-2 rounded-md bg-primary px-4 py-2 font-medium text-primary-foreground text-sm transition-all hover:bg-primary/90"),onClick:p,type:"button",children:[jsx$1(a,{size:14}),jsx$1("span",{children:u.openLink})]})]})]})}):null};var Oe=createContext(null),lt=()=>useContext(Oe),Mi=()=>{var t;let e=lt();return (t=e==null?void 0:e.code)!=null?t:null},de=()=>{var t;let e=lt();return (t=e==null?void 0:e.mermaid)!=null?t:null};var so=e=>{var o;let t=lt();return t!=null&&t.renderers&&e&&(o=t.renderers.find(n=>Array.isArray(n.language)?n.language.includes(e):n.language===e))!=null?o:null};var ao=(e,t)=>{var n;let o=(n=void 0)!=null?n:5;return new Promise((r,s)=>{let a="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(e))),l=new Image;l.crossOrigin="anonymous",l.onload=()=>{let i=document.createElement("canvas"),c=l.width*o,d=l.height*o;i.width=c,i.height=d;let u=i.getContext("2d");if(!u){s(new Error("Failed to create 2D canvas context for PNG export"));return}u.drawImage(l,0,0,c,d),i.toBlob(m=>{if(!m){s(new Error("Failed to create PNG blob"));return}r(m);},"image/png");},l.onerror=()=>s(new Error("Failed to load SVG image")),l.src=a;})};var lo=({chart:e,children:t,className:o,onDownload:n,config:r,onError:s})=>{let a=y(),[l,i]=useState(false),c=useRef(null),{isAnimating:d}=useContext(R),u=L(),m=de(),p=B(),g=async h=>{try{if(h==="mmd"){J("diagram.mmd",e,"text/plain"),i(!1),n==null||n(h);return}if(!m){s==null||s(new Error("Mermaid plugin not available"));return}let b=m.getMermaid(r),f=e.split("").reduce((w,k)=>(w<<5)-w+k.charCodeAt(0)|0,0),T=`mermaid-${Math.abs(f)}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,{svg:x}=await b.render(T,e);if(!x){s==null||s(new Error("SVG not found. Please wait for the diagram to render."));return}if(h==="svg"){J("diagram.svg",x,"image/svg+xml"),i(!1),n==null||n(h);return}if(h==="png"){let w=await ao(x);J("diagram.png",w,"image/png"),n==null||n(h),i(!1);return}}catch(b){s==null||s(b);}};return useEffect(()=>{let h=b=>{let f=b.composedPath();c.current&&!f.includes(c.current)&&i(false);};return document.addEventListener("mousedown",h),()=>{document.removeEventListener("mousedown",h);}},[]),jsxs$1("div",{className:a("relative"),ref:c,children:[jsx$1("button",{className:a("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",o),disabled:d,onClick:()=>i(!l),title:p.downloadDiagram,type:"button",children:t!=null?t:jsx$1(u.DownloadIcon,{size:14})}),l?jsxs$1("div",{className:a("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[jsx$1("button",{className:a("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("svg"),title:p.downloadDiagramAsSvg,type:"button",children:p.mermaidFormatSvg}),jsx$1("button",{className:a("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("png"),title:p.downloadDiagramAsPng,type:"button",children:p.mermaidFormatPng}),jsx$1("button",{className:a("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("mmd"),title:p.downloadDiagramAsMmd,type:"button",children:p.mermaidFormatMmd})]}):null]})};var po=({chart:e,config:t,onFullscreen:o,onExit:n,className:r,...s})=>{let{Maximize2Icon:a,XIcon:l}=L(),i=y(),[c,d]=useState(false),{isAnimating:u,controls:m}=useContext(R),p=B(),g=(()=>{if(typeof m=="boolean")return m;let b=m.mermaid;return b===false?false:b===true||b===void 0?true:b.panZoom!==false})(),h=()=>{d(!c);};return useEffect(()=>{if(c){le();let b=f=>{f.key==="Escape"&&d(false);};return document.addEventListener("keydown",b),()=>{document.removeEventListener("keydown",b),ce();}}},[c]),useEffect(()=>{c?o==null||o():n&&n();},[c,o,n]),jsxs$1(Fragment,{children:[jsx$1("button",{className:i("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",r),disabled:u,onClick:h,title:p.viewFullscreen,type:"button",...s,children:jsx$1(a,{size:14})}),c?createPortal(jsxs$1("div",{className:i("fixed inset-0 z-50 flex items-center justify-center bg-background/95 backdrop-blur-sm"),onClick:h,onKeyDown:b=>{b.key==="Escape"&&h();},role:"button",tabIndex:0,children:[jsx$1("button",{className:i("absolute top-4 right-4 z-10 rounded-md p-2 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:h,title:p.exitFullscreen,type:"button",children:jsx$1(l,{size:20})}),jsx$1("div",{className:i("flex size-full items-center justify-center p-4"),onClick:b=>b.stopPropagation(),onKeyDown:b=>b.stopPropagation(),role:"presentation",children:jsx$1(uo,{chart:e,className:i("size-full [&_svg]:h-auto [&_svg]:w-auto"),config:t,fullscreen:true,showControls:g})})]}),document.body):null]})};var ue=e=>{var s,a;let t=[],o=[],n=e.querySelectorAll("thead th");for(let l of n)t.push(((s=l.textContent)==null?void 0:s.trim())||"");let r=e.querySelectorAll("tbody tr");for(let l of r){let i=[],c=l.querySelectorAll("td");for(let d of c)i.push(((a=d.textContent)==null?void 0:a.trim())||"");o.push(i);}return {headers:t,rows:o}},oe=e=>{let{headers:t,rows:o}=e,n=l=>{let i=false,c=false;for(let d of l){if(d==='"'){i=true,c=true;break}(d===","||d===`
51743
52478
  `)&&(i=true);}return i?c?`"${l.replace(/"/g,'""')}"`:`"${l}"`:l},r=t.length>0?o.length+1:o.length,s=new Array(r),a=0;t.length>0&&(s[a]=t.map(n).join(","),a+=1);for(let l of o)s[a]=l.map(n).join(","),a+=1;return s.join(`
51744
52479
  `)},ct=e=>{let{headers:t,rows:o}=e,n=l=>{let i=false;for(let d of l)if(d===" "||d===`
51745
52480
  `||d==="\r"){i=true;break}if(!i)return l;let c=[];for(let d of l)d===" "?c.push("\\t"):d===`
51746
52481
  `?c.push("\\n"):d==="\r"?c.push("\\r"):c.push(d);return c.join("")},r=t.length>0?o.length+1:o.length,s=new Array(r),a=0;t.length>0&&(s[a]=t.map(n).join(" "),a+=1);for(let l of o)s[a]=l.map(n).join(" "),a+=1;return s.join(`
51747
52482
  `)},Ve=e=>{let t=false;for(let n of e)if(n==="\\"||n==="|"){t=true;break}if(!t)return e;let o=[];for(let n of e)n==="\\"?o.push("\\\\"):n==="|"?o.push("\\|"):o.push(n);return o.join("")},ne=e=>{let{headers:t,rows:o}=e;if(t.length===0)return "";let n=new Array(o.length+2),r=0,s=t.map(l=>Ve(l));n[r]=`| ${s.join(" | ")} |`,r+=1;let a=new Array(t.length);for(let l=0;l<t.length;l+=1)a[l]="---";n[r]=`| ${a.join(" | ")} |`,r+=1;for(let l of o)if(l.length<t.length){let i=new Array(t.length);for(let c=0;c<t.length;c+=1)i[c]=c<l.length?Ve(l[c]):"";n[r]=`| ${i.join(" | ")} |`,r+=1;}else {let i=l.map(c=>Ve(c));n[r]=`| ${i.join(" | ")} |`,r+=1;}return n.join(`
51748
- `)};var Te=({children:e,className:t,onCopy:o,onError:n,timeout:r=2e3})=>{let s=y(),[a,l]=useState(false),[i,c]=useState(false),d=useRef(null),u=useRef(0),{isAnimating:m}=useContext(R),p=B(),g=async f=>{var T,x;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.write)){n==null||n(new Error("Clipboard API not available"));return}try{let w=(x=d.current)==null?void 0:x.closest('[data-streamdown="table-wrapper"]'),k=w==null?void 0:w.querySelector("table");if(!k){n==null||n(new Error("Table not found"));return}let I=ue(k),F=({csv:oe,tsv:ct,md:ne}[f]||ne)(I),z=new ClipboardItem({"text/plain":new Blob([F],{type:"text/plain"}),"text/html":new Blob([k.outerHTML],{type:"text/html"})});await navigator.clipboard.write([z]),c(!0),l(!1),o==null||o(f),u.current=window.setTimeout(()=>c(!1),r);}catch(w){n==null||n(w);}};useEffect(()=>{let f=T=>{let x=T.composedPath();d.current&&!x.includes(d.current)&&l(false);};return document.addEventListener("mousedown",f),()=>{document.removeEventListener("mousedown",f),window.clearTimeout(u.current);}},[]);let h=L(),b=i?h.CheckIcon:h.CopyIcon;return jsxs$1("div",{className:s("relative"),ref:d,children:[jsx$1("button",{className:s("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:m,onClick:()=>l(!a),title:p.copyTable,type:"button",children:e!=null?e:jsx$1(b,{height:14,width:14})}),a?jsxs$1("div",{className:s("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("md"),title:p.copyTableAsMarkdown,type:"button",children:p.tableFormatMarkdown}),jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("csv"),title:p.copyTableAsCsv,type:"button",children:p.tableFormatCsv}),jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("tsv"),title:p.copyTableAsTsv,type:"button",children:p.tableFormatTsv})]}):null]})};var Pe=({children:e,className:t,onDownload:o,onError:n})=>{let r=y(),[s,a]=useState(false),l=useRef(null),{isAnimating:i}=useContext(R),c=B(),d=L(),u=m=>{var p;try{let g=(p=l.current)==null?void 0:p.closest('[data-streamdown="table-wrapper"]'),h=g==null?void 0:g.querySelector("table");if(!h){n==null||n(new Error("Table not found"));return}let b=ue(h),f=m==="csv"?oe(b):ne(b);J(`table.${m==="csv"?"csv":"md"}`,f,m==="csv"?"text/csv":"text/markdown"),a(!1),o==null||o(m);}catch(g){n==null||n(g);}};return useEffect(()=>{let m=p=>{let g=p.composedPath();l.current&&!g.includes(l.current)&&a(false);};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m);}},[]),jsxs$1("div",{className:r("relative"),ref:l,children:[jsx$1("button",{className:r("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:i,onClick:()=>a(!s),title:c.downloadTable,type:"button",children:e!=null?e:jsx$1(d.DownloadIcon,{size:14})}),s?jsxs$1("div",{className:r("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[jsx$1("button",{className:r("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>u("csv"),title:c.downloadTableAsCsv,type:"button",children:c.tableFormatCsv}),jsx$1("button",{className:r("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>u("markdown"),title:c.downloadTableAsMarkdown,type:"button",children:c.tableFormatMarkdown})]}):null]})};var wo=({children:e,className:t,showCopy:o=true,showDownload:n=true})=>{let{Maximize2Icon:r,XIcon:s}=L(),a=y(),[l,i]=useState(false),{isAnimating:c}=useContext(R),d=B(),u=()=>{i(true);},m=()=>{i(false);};return useEffect(()=>{if(l){le();let p=g=>{g.key==="Escape"&&i(false);};return document.addEventListener("keydown",p),()=>{document.removeEventListener("keydown",p),ce();}}},[l]),jsxs$1(Fragment,{children:[jsx$1("button",{className:a("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:c,onClick:u,title:d.viewFullscreen,type:"button",children:jsx$1(r,{size:14})}),l?createPortal(jsx$1("div",{"aria-label":d.viewFullscreen,"aria-modal":"true",className:a("fixed inset-0 z-50 flex flex-col bg-background"),"data-streamdown":"table-fullscreen",onClick:m,onKeyDown:p=>{p.key==="Escape"&&m();},role:"dialog",children:jsxs$1("div",{className:a("flex h-full flex-col"),onClick:p=>p.stopPropagation(),onKeyDown:p=>p.stopPropagation(),role:"presentation",children:[jsxs$1("div",{className:a("flex items-center justify-end gap-1 p-4"),children:[o?jsx$1(Te,{}):null,n?jsx$1(Pe,{}):null,jsx$1("button",{className:a("rounded-md p-1 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:m,title:d.exitFullscreen,type:"button",children:jsx$1(s,{size:20})})]}),jsx$1("div",{className:a("flex-1 overflow-auto p-4 pt-0 [&_thead]:sticky [&_thead]:top-0 [&_thead]:z-10"),children:jsx$1("table",{className:a("w-full border-collapse border border-border"),"data-streamdown":"table",children:e})})]})}),document.body):null]})};var ko=({children:e,className:t,showControls:o,showCopy:n=true,showDownload:r=true,showFullscreen:s=true,...a})=>{let l=y(),i=o&&n,c=o&&r,d=o&&s,u=i||c||d;return jsxs$1("div",{className:l("my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2"),"data-streamdown":"table-wrapper",children:[u?jsxs$1("div",{className:l("flex items-center justify-end gap-1"),children:[i?jsx$1(Te,{}):null,c?jsx$1(Pe,{}):null,d?jsx$1(wo,{showCopy:i,showDownload:c,children:e}):null]}):null,jsx$1("div",{className:l("border-collapse overflow-x-auto overflow-y-auto rounded-md border border-border bg-background"),children:jsx$1("table",{className:l("w-full divide-y divide-border",t),"data-streamdown":"table",...a,children:e})})]})};var Gr=/startLine=(\d+)/,Yr=lazy$1(()=>import('./fthry_mermaid-O7DHMXV3.D6DhpWPU.js').then(e=>({default:e.Mermaid}))),Qr=/language-([^\s]+)/;function _e(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return true;if(!(e!=null&&e.position&&(t!=null&&t.position)))return false;let o=e.position.start,n=t.position.start,r=e.position.end,s=t.position.end;return (o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(r==null?void 0:r.line)===(s==null?void 0:s.line)&&(r==null?void 0:r.column)===(s==null?void 0:s.column)}function E(e,t){return e.className===t.className&&_e(e.node,t.node)}var pt=(e,t)=>typeof e=="boolean"?e:e[t]!==false,ut=(e,t)=>{if(typeof e=="boolean")return e;let o=e.table;return o===false?false:o===true||o===void 0?true:o[t]!==false},xo=(e,t)=>{if(typeof e=="boolean")return e;let o=e.code;return o===false?false:o===true||o===void 0?true:o[t]!==false},je=(e,t)=>{if(typeof e=="boolean")return e;let o=e.mermaid;return o===false?false:o===true||o===void 0?true:o[t]!==false},gt=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("ol",{className:r("list-inside list-decimal whitespace-normal [li_&]:pl-6",t),"data-streamdown":"ordered-list",...n,children:e})},(e,t)=>E(e,t));gt.displayName="MarkdownOl";var To=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("li",{className:r("py-1 [&>p]:inline",t),"data-streamdown":"list-item",...n,children:e})},(e,t)=>e.className===t.className&&_e(e.node,t.node));To.displayName="MarkdownLi";var Po=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("ul",{className:r("list-inside list-disc whitespace-normal [li_&]:pl-6",t),"data-streamdown":"unordered-list",...n,children:e})},(e,t)=>E(e,t));Po.displayName="MarkdownUl";var Mo=memo(({className:e,node:t,...o})=>{let n=y();return jsx$1("hr",{className:n("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o})},(e,t)=>E(e,t));Mo.displayName="MarkdownHr";var Io=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("span",{className:r("font-semibold",t),"data-streamdown":"strong",...n,children:e})},(e,t)=>E(e,t));Io.displayName="MarkdownStrong";var es=({children:e,className:t,href:o,node:n,...r})=>{let s=y(),{linkSafety:a}=useContext(R),[l,i]=useState(false),c=o==="streamdown:incomplete-link",d=useCallback(async g=>{if(!(!(a!=null&&a.enabled&&o)||c)){if(g.preventDefault(),a.onLinkCheck&&await a.onLinkCheck(o)){window.open(o,"_blank","noreferrer");return}i(true);}},[a,o,c]),u=useCallback(()=>{o&&window.open(o,"_blank","noreferrer");},[o]),m=useCallback(()=>{i(false);},[]),p={url:o!=null?o:"",isOpen:l,onClose:m,onConfirm:u};return a!=null&&a.enabled&&o?jsxs$1(Fragment,{children:[jsx$1("button",{className:s("wrap-anywhere appearance-none text-left font-medium text-primary underline",t),"data-incomplete":c,"data-streamdown":"link",onClick:d,type:"button",children:e}),a.renderModal?a.renderModal(p):jsx$1(ro,{...p})]}):jsx$1("a",{className:s("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":c,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...r,children:e})},No=memo(es,(e,t)=>E(e,t)&&e.href===t.href);No.displayName="MarkdownA";var Lo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h1",{className:r("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e})},(e,t)=>E(e,t));Lo.displayName="MarkdownH1";var Ro=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h2",{className:r("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e})},(e,t)=>E(e,t));Ro.displayName="MarkdownH2";var So=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h3",{className:r("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e})},(e,t)=>E(e,t));So.displayName="MarkdownH3";var Eo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h4",{className:r("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e})},(e,t)=>E(e,t));Eo.displayName="MarkdownH4";var Ho=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h5",{className:r("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e})},(e,t)=>E(e,t));Ho.displayName="MarkdownH5";var Do=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h6",{className:r("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e})},(e,t)=>E(e,t));Do.displayName="MarkdownH6";var Bo=memo(({children:e,className:t,node:o,...n})=>{let{controls:r}=useContext(R),s=pt(r,"table"),a=ut(r,"copy"),l=ut(r,"download"),i=ut(r,"fullscreen");return jsx$1(ko,{className:t,showControls:s,showCopy:a,showDownload:l,showFullscreen:i,...n,children:e})},(e,t)=>E(e,t));Bo.displayName="MarkdownTable";var Ao=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("thead",{className:r("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e})},(e,t)=>E(e,t));Ao.displayName="MarkdownThead";var Oo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("tbody",{className:r("divide-y divide-border",t),"data-streamdown":"table-body",...n,children:e})},(e,t)=>E(e,t));Oo.displayName="MarkdownTbody";var Vo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("tr",{className:r("border-border",t),"data-streamdown":"table-row",...n,children:e})},(e,t)=>E(e,t));Vo.displayName="MarkdownTr";var jo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("th",{className:r("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e})},(e,t)=>E(e,t));jo.displayName="MarkdownTh";var Fo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("td",{className:r("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e})},(e,t)=>E(e,t));Fo.displayName="MarkdownTd";var zo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("blockquote",{className:r("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e})},(e,t)=>E(e,t));zo.displayName="MarkdownBlockquote";var _o=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("sup",{className:r("text-sm",t),"data-streamdown":"superscript",...n,children:e})},(e,t)=>E(e,t));_o.displayName="MarkdownSup";var qo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("sub",{className:r("text-sm",t),"data-streamdown":"subscript",...n,children:e})},(e,t)=>E(e,t));qo.displayName="MarkdownSub";var $o=memo(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let s=i=>{var m,p;if(!isValidElement(i))return false;let c=Array.isArray(i.props.children)?i.props.children:[i.props.children],d=false,u=false;for(let g of c)if(g){if(typeof g=="string")g.trim()!==""&&(d=true);else if(isValidElement(g))if(((m=g.props)==null?void 0:m["data-footnote-backref"])!==void 0)u=true;else {let h=Array.isArray(g.props.children)?g.props.children:[g.props.children];for(let b of h){if(typeof b=="string"&&b.trim()!==""){d=true;break}if(isValidElement(b)&&((p=b.props)==null?void 0:p["data-footnote-backref"])===void 0){d=true;break}}}}return u&&!d},a=Array.isArray(e)?e.map(i=>{if(!isValidElement(i))return i;if(i.type===gt){let d=(Array.isArray(i.props.children)?i.props.children:[i.props.children]).filter(u=>!s(u));return d.length===0?null:{...i,props:{...i.props,children:d}}}return i}):e;return (Array.isArray(a)?a.some(i=>i!==null):a!==null)?jsx$1("section",{className:t,...n,children:a}):null}return jsx$1("section",{className:t,...n,children:e})},(e,t)=>E(e,t));$o.displayName="MarkdownSection";var ts=({node:e,className:t,children:o,...n})=>{var k,I;let r=y(),s=!("data-block"in n),{mermaid:a,controls:l}=useContext(R),i=de(),c=et(),d=t==null?void 0:t.match(Qr),u=(k=d==null?void 0:d.at(1))!=null?k:"",m=so(u);if(s)return jsx$1("code",{className:r("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let p=(I=e==null?void 0:e.properties)==null?void 0:I.metastring,g=p==null?void 0:p.match(Gr),h=g?Number.parseInt(g[1],10):void 0,b=h!==void 0&&h>=1?h:void 0,f="";if(isValidElement(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?f=o.props.children:typeof o=="string"&&(f=o),m){let H=m.component;return jsx$1(Suspense,{fallback:jsx$1(Ae,{}),children:jsx$1(H,{code:f,isIncomplete:c,language:u})})}if(u==="mermaid"&&i){let H=pt(l,"mermaid"),S=je(l,"download"),F=je(l,"copy"),z=je(l,"fullscreen"),q=je(l,"panZoom"),A=H&&(S||F||z);return jsx$1(Suspense,{fallback:jsx$1(Ae,{}),children:jsxs$1("div",{className:r("group relative my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2",t),"data-streamdown":"mermaid-block",children:[jsx$1("div",{className:r("flex h-8 items-center text-muted-foreground text-xs"),children:jsx$1("span",{className:r("ml-1 font-mono lowercase"),children:"mermaid"})}),A?jsx$1("div",{className:r("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"),children:jsxs$1("div",{className:r("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"),"data-streamdown":"mermaid-block-actions",children:[S?jsx$1(lo,{chart:f,config:a==null?void 0:a.config}):null,F?jsx$1(Be,{code:f}):null,z?jsx$1(po,{chart:f,config:a==null?void 0:a.config}):null]})}):null,jsx$1("div",{className:r("rounded-md border border-border bg-background"),children:jsx$1(Yr,{chart:f,config:a==null?void 0:a.config,showControls:q})})]})})}let T=pt(l,"code"),x=xo(l,"download"),w=xo(l,"copy");return jsx$1(rt,{className:t,code:f,isIncomplete:c,language:u,startLine:b,children:T?jsxs$1(Fragment,{children:[x?jsx$1(at,{code:f,language:u}):null,w?jsx$1(Be,{}):null]}):null})},Wo=memo(ts,(e,t)=>e.className===t.className&&_e(e.node,t.node));Wo.displayName="MarkdownCode";var Zo=memo(to,(e,t)=>e.className===t.className&&_e(e.node,t.node));Zo.displayName="MarkdownImg";var Xo=memo(({children:e,node:t,...o})=>{let r=(Array.isArray(e)?e:[e]).filter(s=>s!=null&&s!=="");if(r.length===1&&isValidElement(r[0])){let s=r[0].props.node,a=s==null?void 0:s.tagName;if(a==="img")return jsx$1(Fragment,{children:e});if(a==="code"&&"data-block"in r[0].props)return jsx$1(Fragment,{children:e})}return jsx$1("p",{...o,children:e})},(e,t)=>E(e,t));Xo.displayName="MarkdownParagraph";var Jo={ol:gt,li:To,ul:Po,hr:Mo,strong:Io,a:No,h1:Lo,h2:Ro,h3:So,h4:Eo,h5:Ho,h6:Do,table:Bo,thead:Ao,tbody:Oo,tr:Vo,th:jo,td:Fo,blockquote:zo,code:Wo,img:Zo,pre:({children:e})=>isValidElement(e)?cloneElement(e,{"data-block":"true"}):e,sup:_o,sub:qo,p:Xo,section:$o};var os=/[\u0590-\u08FF\uFB1D-\uFDFF\uFE70-\uFEFF]/,ns=/\p{L}/u;function qe(e){let t=e.replace(/^#{1,6}\s+/gm,"").replace(/(\*{1,3}|_{1,3})/g,"").replace(/`[^`]*`/g,"").replace(/\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/^[\s>*\-+\d.]+/gm,"");for(let o of t){if(os.test(o))return "rtl";if(ns.test(o))return "ltr"}return "ltr"}var rs=/^[ \t]{0,3}(`{3,}|~{3,})/,ss=/^\|?[ \t]*:?-{1,}:?[ \t]*(\|[ \t]*:?-{1,}:?[ \t]*)*\|?$/,bt=e=>{let t=e.split(`
52483
+ `)};var Te=({children:e,className:t,onCopy:o,onError:n,timeout:r=2e3})=>{let s=y(),[a,l]=useState(false),[i,c]=useState(false),d=useRef(null),u=useRef(0),{isAnimating:m}=useContext(R),p=B(),g=async f=>{var T,x;if(typeof window=="undefined"||!((T=navigator==null?void 0:navigator.clipboard)!=null&&T.write)){n==null||n(new Error("Clipboard API not available"));return}try{let w=(x=d.current)==null?void 0:x.closest('[data-streamdown="table-wrapper"]'),k=w==null?void 0:w.querySelector("table");if(!k){n==null||n(new Error("Table not found"));return}let I=ue(k),F=({csv:oe,tsv:ct,md:ne}[f]||ne)(I),z=new ClipboardItem({"text/plain":new Blob([F],{type:"text/plain"}),"text/html":new Blob([k.outerHTML],{type:"text/html"})});await navigator.clipboard.write([z]),c(!0),l(!1),o==null||o(f),u.current=window.setTimeout(()=>c(!1),r);}catch(w){n==null||n(w);}};useEffect(()=>{let f=T=>{let x=T.composedPath();d.current&&!x.includes(d.current)&&l(false);};return document.addEventListener("mousedown",f),()=>{document.removeEventListener("mousedown",f),window.clearTimeout(u.current);}},[]);let h=L(),b=i?h.CheckIcon:h.CopyIcon;return jsxs$1("div",{className:s("relative"),ref:d,children:[jsx$1("button",{className:s("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:m,onClick:()=>l(!a),title:p.copyTable,type:"button",children:e!=null?e:jsx$1(b,{height:14,width:14})}),a?jsxs$1("div",{className:s("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("md"),title:p.copyTableAsMarkdown,type:"button",children:p.tableFormatMarkdown}),jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("csv"),title:p.copyTableAsCsv,type:"button",children:p.tableFormatCsv}),jsx$1("button",{className:s("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>g("tsv"),title:p.copyTableAsTsv,type:"button",children:p.tableFormatTsv})]}):null]})};var Pe=({children:e,className:t,onDownload:o,onError:n})=>{let r=y(),[s,a]=useState(false),l=useRef(null),{isAnimating:i}=useContext(R),c=B(),d=L(),u=m=>{var p;try{let g=(p=l.current)==null?void 0:p.closest('[data-streamdown="table-wrapper"]'),h=g==null?void 0:g.querySelector("table");if(!h){n==null||n(new Error("Table not found"));return}let b=ue(h),f=m==="csv"?oe(b):ne(b);J(`table.${m==="csv"?"csv":"md"}`,f,m==="csv"?"text/csv":"text/markdown"),a(!1),o==null||o(m);}catch(g){n==null||n(g);}};return useEffect(()=>{let m=p=>{let g=p.composedPath();l.current&&!g.includes(l.current)&&a(false);};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m);}},[]),jsxs$1("div",{className:r("relative"),ref:l,children:[jsx$1("button",{className:r("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:i,onClick:()=>a(!s),title:c.downloadTable,type:"button",children:e!=null?e:jsx$1(d.DownloadIcon,{size:14})}),s?jsxs$1("div",{className:r("absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg"),children:[jsx$1("button",{className:r("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>u("csv"),title:c.downloadTableAsCsv,type:"button",children:c.tableFormatCsv}),jsx$1("button",{className:r("w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40"),onClick:()=>u("markdown"),title:c.downloadTableAsMarkdown,type:"button",children:c.tableFormatMarkdown})]}):null]})};var wo=({children:e,className:t,showCopy:o=true,showDownload:n=true})=>{let{Maximize2Icon:r,XIcon:s}=L(),a=y(),[l,i]=useState(false),{isAnimating:c}=useContext(R),d=B(),u=()=>{i(true);},m=()=>{i(false);};return useEffect(()=>{if(l){le();let p=g=>{g.key==="Escape"&&i(false);};return document.addEventListener("keydown",p),()=>{document.removeEventListener("keydown",p),ce();}}},[l]),jsxs$1(Fragment,{children:[jsx$1("button",{className:a("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",t),disabled:c,onClick:u,title:d.viewFullscreen,type:"button",children:jsx$1(r,{size:14})}),l?createPortal(jsx$1("div",{"aria-label":d.viewFullscreen,"aria-modal":"true",className:a("fixed inset-0 z-50 flex flex-col bg-background"),"data-streamdown":"table-fullscreen",onClick:m,onKeyDown:p=>{p.key==="Escape"&&m();},role:"dialog",children:jsxs$1("div",{className:a("flex h-full flex-col"),onClick:p=>p.stopPropagation(),onKeyDown:p=>p.stopPropagation(),role:"presentation",children:[jsxs$1("div",{className:a("flex items-center justify-end gap-1 p-4"),children:[o?jsx$1(Te,{}):null,n?jsx$1(Pe,{}):null,jsx$1("button",{className:a("rounded-md p-1 text-muted-foreground transition-all hover:bg-muted hover:text-foreground"),onClick:m,title:d.exitFullscreen,type:"button",children:jsx$1(s,{size:20})})]}),jsx$1("div",{className:a("flex-1 overflow-auto p-4 pt-0 [&_thead]:sticky [&_thead]:top-0 [&_thead]:z-10"),children:jsx$1("table",{className:a("w-full border-collapse border border-border"),"data-streamdown":"table",children:e})})]})}),document.body):null]})};var ko=({children:e,className:t,showControls:o,showCopy:n=true,showDownload:r=true,showFullscreen:s=true,...a})=>{let l=y(),i=o&&n,c=o&&r,d=o&&s,u=i||c||d;return jsxs$1("div",{className:l("my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2"),"data-streamdown":"table-wrapper",children:[u?jsxs$1("div",{className:l("flex items-center justify-end gap-1"),children:[i?jsx$1(Te,{}):null,c?jsx$1(Pe,{}):null,d?jsx$1(wo,{showCopy:i,showDownload:c,children:e}):null]}):null,jsx$1("div",{className:l("border-collapse overflow-x-auto overflow-y-auto rounded-md border border-border bg-background"),children:jsx$1("table",{className:l("w-full divide-y divide-border",t),"data-streamdown":"table",...a,children:e})})]})};var Gr=/startLine=(\d+)/,Yr=lazy$1(()=>import('./fthry_mermaid-O7DHMXV3.tCh8V3S1.js').then(e=>({default:e.Mermaid}))),Qr=/language-([^\s]+)/;function _e(e,t){if(!(e!=null&&e.position||t!=null&&t.position))return true;if(!(e!=null&&e.position&&(t!=null&&t.position)))return false;let o=e.position.start,n=t.position.start,r=e.position.end,s=t.position.end;return (o==null?void 0:o.line)===(n==null?void 0:n.line)&&(o==null?void 0:o.column)===(n==null?void 0:n.column)&&(r==null?void 0:r.line)===(s==null?void 0:s.line)&&(r==null?void 0:r.column)===(s==null?void 0:s.column)}function E(e,t){return e.className===t.className&&_e(e.node,t.node)}var pt=(e,t)=>typeof e=="boolean"?e:e[t]!==false,ut=(e,t)=>{if(typeof e=="boolean")return e;let o=e.table;return o===false?false:o===true||o===void 0?true:o[t]!==false},xo=(e,t)=>{if(typeof e=="boolean")return e;let o=e.code;return o===false?false:o===true||o===void 0?true:o[t]!==false},je=(e,t)=>{if(typeof e=="boolean")return e;let o=e.mermaid;return o===false?false:o===true||o===void 0?true:o[t]!==false},gt=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("ol",{className:r("list-inside list-decimal whitespace-normal [li_&]:pl-6",t),"data-streamdown":"ordered-list",...n,children:e})},(e,t)=>E(e,t));gt.displayName="MarkdownOl";var To=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("li",{className:r("py-1 [&>p]:inline",t),"data-streamdown":"list-item",...n,children:e})},(e,t)=>e.className===t.className&&_e(e.node,t.node));To.displayName="MarkdownLi";var Po=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("ul",{className:r("list-inside list-disc whitespace-normal [li_&]:pl-6",t),"data-streamdown":"unordered-list",...n,children:e})},(e,t)=>E(e,t));Po.displayName="MarkdownUl";var Mo=memo(({className:e,node:t,...o})=>{let n=y();return jsx$1("hr",{className:n("my-6 border-border",e),"data-streamdown":"horizontal-rule",...o})},(e,t)=>E(e,t));Mo.displayName="MarkdownHr";var Io=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("span",{className:r("font-semibold",t),"data-streamdown":"strong",...n,children:e})},(e,t)=>E(e,t));Io.displayName="MarkdownStrong";var es=({children:e,className:t,href:o,node:n,...r})=>{let s=y(),{linkSafety:a}=useContext(R),[l,i]=useState(false),c=o==="streamdown:incomplete-link",d=useCallback(async g=>{if(!(!(a!=null&&a.enabled&&o)||c)){if(g.preventDefault(),a.onLinkCheck&&await a.onLinkCheck(o)){window.open(o,"_blank","noreferrer");return}i(true);}},[a,o,c]),u=useCallback(()=>{o&&window.open(o,"_blank","noreferrer");},[o]),m=useCallback(()=>{i(false);},[]),p={url:o!=null?o:"",isOpen:l,onClose:m,onConfirm:u};return a!=null&&a.enabled&&o?jsxs$1(Fragment,{children:[jsx$1("button",{className:s("wrap-anywhere appearance-none text-left font-medium text-primary underline",t),"data-incomplete":c,"data-streamdown":"link",onClick:d,type:"button",children:e}),a.renderModal?a.renderModal(p):jsx$1(ro,{...p})]}):jsx$1("a",{className:s("wrap-anywhere font-medium text-primary underline",t),"data-incomplete":c,"data-streamdown":"link",href:o,rel:"noreferrer",target:"_blank",...r,children:e})},No=memo(es,(e,t)=>E(e,t)&&e.href===t.href);No.displayName="MarkdownA";var Lo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h1",{className:r("mt-6 mb-2 font-semibold text-3xl",t),"data-streamdown":"heading-1",...n,children:e})},(e,t)=>E(e,t));Lo.displayName="MarkdownH1";var Ro=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h2",{className:r("mt-6 mb-2 font-semibold text-2xl",t),"data-streamdown":"heading-2",...n,children:e})},(e,t)=>E(e,t));Ro.displayName="MarkdownH2";var So=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h3",{className:r("mt-6 mb-2 font-semibold text-xl",t),"data-streamdown":"heading-3",...n,children:e})},(e,t)=>E(e,t));So.displayName="MarkdownH3";var Eo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h4",{className:r("mt-6 mb-2 font-semibold text-lg",t),"data-streamdown":"heading-4",...n,children:e})},(e,t)=>E(e,t));Eo.displayName="MarkdownH4";var Ho=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h5",{className:r("mt-6 mb-2 font-semibold text-base",t),"data-streamdown":"heading-5",...n,children:e})},(e,t)=>E(e,t));Ho.displayName="MarkdownH5";var Do=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("h6",{className:r("mt-6 mb-2 font-semibold text-sm",t),"data-streamdown":"heading-6",...n,children:e})},(e,t)=>E(e,t));Do.displayName="MarkdownH6";var Bo=memo(({children:e,className:t,node:o,...n})=>{let{controls:r}=useContext(R),s=pt(r,"table"),a=ut(r,"copy"),l=ut(r,"download"),i=ut(r,"fullscreen");return jsx$1(ko,{className:t,showControls:s,showCopy:a,showDownload:l,showFullscreen:i,...n,children:e})},(e,t)=>E(e,t));Bo.displayName="MarkdownTable";var Ao=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("thead",{className:r("bg-muted/80",t),"data-streamdown":"table-header",...n,children:e})},(e,t)=>E(e,t));Ao.displayName="MarkdownThead";var Oo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("tbody",{className:r("divide-y divide-border",t),"data-streamdown":"table-body",...n,children:e})},(e,t)=>E(e,t));Oo.displayName="MarkdownTbody";var Vo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("tr",{className:r("border-border",t),"data-streamdown":"table-row",...n,children:e})},(e,t)=>E(e,t));Vo.displayName="MarkdownTr";var jo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("th",{className:r("whitespace-nowrap px-4 py-2 text-left font-semibold text-sm",t),"data-streamdown":"table-header-cell",...n,children:e})},(e,t)=>E(e,t));jo.displayName="MarkdownTh";var Fo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("td",{className:r("px-4 py-2 text-sm",t),"data-streamdown":"table-cell",...n,children:e})},(e,t)=>E(e,t));Fo.displayName="MarkdownTd";var zo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("blockquote",{className:r("my-4 border-muted-foreground/30 border-l-4 pl-4 text-muted-foreground italic",t),"data-streamdown":"blockquote",...n,children:e})},(e,t)=>E(e,t));zo.displayName="MarkdownBlockquote";var _o=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("sup",{className:r("text-sm",t),"data-streamdown":"superscript",...n,children:e})},(e,t)=>E(e,t));_o.displayName="MarkdownSup";var qo=memo(({children:e,className:t,node:o,...n})=>{let r=y();return jsx$1("sub",{className:r("text-sm",t),"data-streamdown":"subscript",...n,children:e})},(e,t)=>E(e,t));qo.displayName="MarkdownSub";var $o=memo(({children:e,className:t,node:o,...n})=>{if("data-footnotes"in n){let s=i=>{var m,p;if(!isValidElement(i))return false;let c=Array.isArray(i.props.children)?i.props.children:[i.props.children],d=false,u=false;for(let g of c)if(g){if(typeof g=="string")g.trim()!==""&&(d=true);else if(isValidElement(g))if(((m=g.props)==null?void 0:m["data-footnote-backref"])!==void 0)u=true;else {let h=Array.isArray(g.props.children)?g.props.children:[g.props.children];for(let b of h){if(typeof b=="string"&&b.trim()!==""){d=true;break}if(isValidElement(b)&&((p=b.props)==null?void 0:p["data-footnote-backref"])===void 0){d=true;break}}}}return u&&!d},a=Array.isArray(e)?e.map(i=>{if(!isValidElement(i))return i;if(i.type===gt){let d=(Array.isArray(i.props.children)?i.props.children:[i.props.children]).filter(u=>!s(u));return d.length===0?null:{...i,props:{...i.props,children:d}}}return i}):e;return (Array.isArray(a)?a.some(i=>i!==null):a!==null)?jsx$1("section",{className:t,...n,children:a}):null}return jsx$1("section",{className:t,...n,children:e})},(e,t)=>E(e,t));$o.displayName="MarkdownSection";var ts=({node:e,className:t,children:o,...n})=>{var k,I;let r=y(),s=!("data-block"in n),{mermaid:a,controls:l}=useContext(R),i=de(),c=et(),d=t==null?void 0:t.match(Qr),u=(k=d==null?void 0:d.at(1))!=null?k:"",m=so(u);if(s)return jsx$1("code",{className:r("rounded bg-muted px-1.5 py-0.5 font-mono text-sm",t),"data-streamdown":"inline-code",...n,children:o});let p=(I=e==null?void 0:e.properties)==null?void 0:I.metastring,g=p==null?void 0:p.match(Gr),h=g?Number.parseInt(g[1],10):void 0,b=h!==void 0&&h>=1?h:void 0,f="";if(isValidElement(o)&&o.props&&typeof o.props=="object"&&"children"in o.props&&typeof o.props.children=="string"?f=o.props.children:typeof o=="string"&&(f=o),m){let H=m.component;return jsx$1(Suspense,{fallback:jsx$1(Ae,{}),children:jsx$1(H,{code:f,isIncomplete:c,language:u})})}if(u==="mermaid"&&i){let H=pt(l,"mermaid"),S=je(l,"download"),F=je(l,"copy"),z=je(l,"fullscreen"),q=je(l,"panZoom"),A=H&&(S||F||z);return jsx$1(Suspense,{fallback:jsx$1(Ae,{}),children:jsxs$1("div",{className:r("group relative my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2",t),"data-streamdown":"mermaid-block",children:[jsx$1("div",{className:r("flex h-8 items-center text-muted-foreground text-xs"),children:jsx$1("span",{className:r("ml-1 font-mono lowercase"),children:"mermaid"})}),A?jsx$1("div",{className:r("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"),children:jsxs$1("div",{className:r("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"),"data-streamdown":"mermaid-block-actions",children:[S?jsx$1(lo,{chart:f,config:a==null?void 0:a.config}):null,F?jsx$1(Be,{code:f}):null,z?jsx$1(po,{chart:f,config:a==null?void 0:a.config}):null]})}):null,jsx$1("div",{className:r("rounded-md border border-border bg-background"),children:jsx$1(Yr,{chart:f,config:a==null?void 0:a.config,showControls:q})})]})})}let T=pt(l,"code"),x=xo(l,"download"),w=xo(l,"copy");return jsx$1(rt,{className:t,code:f,isIncomplete:c,language:u,startLine:b,children:T?jsxs$1(Fragment,{children:[x?jsx$1(at,{code:f,language:u}):null,w?jsx$1(Be,{}):null]}):null})},Wo=memo(ts,(e,t)=>e.className===t.className&&_e(e.node,t.node));Wo.displayName="MarkdownCode";var Zo=memo(to,(e,t)=>e.className===t.className&&_e(e.node,t.node));Zo.displayName="MarkdownImg";var Xo=memo(({children:e,node:t,...o})=>{let r=(Array.isArray(e)?e:[e]).filter(s=>s!=null&&s!=="");if(r.length===1&&isValidElement(r[0])){let s=r[0].props.node,a=s==null?void 0:s.tagName;if(a==="img")return jsx$1(Fragment,{children:e});if(a==="code"&&"data-block"in r[0].props)return jsx$1(Fragment,{children:e})}return jsx$1("p",{...o,children:e})},(e,t)=>E(e,t));Xo.displayName="MarkdownParagraph";var Jo={ol:gt,li:To,ul:Po,hr:Mo,strong:Io,a:No,h1:Lo,h2:Ro,h3:So,h4:Eo,h5:Ho,h6:Do,table:Bo,thead:Ao,tbody:Oo,tr:Vo,th:jo,td:Fo,blockquote:zo,code:Wo,img:Zo,pre:({children:e})=>isValidElement(e)?cloneElement(e,{"data-block":"true"}):e,sup:_o,sub:qo,p:Xo,section:$o};var os=/[\u0590-\u08FF\uFB1D-\uFDFF\uFE70-\uFEFF]/,ns=/\p{L}/u;function qe(e){let t=e.replace(/^#{1,6}\s+/gm,"").replace(/(\*{1,3}|_{1,3})/g,"").replace(/`[^`]*`/g,"").replace(/\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/^[\s>*\-+\d.]+/gm,"");for(let o of t){if(os.test(o))return "rtl";if(ns.test(o))return "ltr"}return "ltr"}var rs=/^[ \t]{0,3}(`{3,}|~{3,})/,ss=/^\|?[ \t]*:?-{1,}:?[ \t]*(\|[ \t]*:?-{1,}:?[ \t]*)*\|?$/,bt=e=>{let t=e.split(`
51749
52484
  `),o=null,n=0;for(let r of t){let s=rs.exec(r);if(o===null){if(s){let a=s[1];o=a[0],n=a.length;}}else if(s){let a=s[1],l=a[0],i=a.length;l===o&&i>=n&&(o=null,n=0);}}return o!==null},Ko=e=>{let t=e.split(`
51750
52485
  `);for(let o of t){let n=o.trim();if(n.length>0&&n.includes("|")&&ss.test(n))return true}return false};var Uo=()=>e=>{visit(e,"html",(t,o,n)=>{!n||typeof o!="number"||(n.children[o]={type:"text",value:t.value});});};var Yo=[],Qo={allowDangerousHtml:true},$e=new WeakMap,yt=class{constructor(){this.cache=new Map;this.keyCache=new WeakMap;this.maxSize=100;}generateCacheKey(t){let o=this.keyCache.get(t);if(o)return o;let n=t.rehypePlugins,r=t.remarkPlugins,s=t.remarkRehypeOptions;if(!(n||r||s)){let u="default";return this.keyCache.set(t,u),u}let a=u=>{if(!u||u.length===0)return "";let m="";for(let p=0;p<u.length;p+=1){let g=u[p];if(p>0&&(m+=","),Array.isArray(g)){let[h,b]=g;if(typeof h=="function"){let f=$e.get(h);f||(f=h.name,$e.set(h,f)),m+=f;}else m+=String(h);m+=":",m+=JSON.stringify(b);}else if(typeof g=="function"){let h=$e.get(g);h||(h=g.name,$e.set(g,h)),m+=h;}else m+=String(g);}return m},l=a(n),i=a(r),c=s?JSON.stringify(s):"",d=`${i}::${l}::${c}`;return this.keyCache.set(t,d),d}get(t){let o=this.generateCacheKey(t),n=this.cache.get(o);return n&&(this.cache.delete(o),this.cache.set(o,n)),n}set(t,o){let n=this.generateCacheKey(t);if(this.cache.size>=this.maxSize){let r=this.cache.keys().next().value;r&&this.cache.delete(r);}this.cache.set(n,o);}clear(){this.cache.clear();}},en=new yt,wt=e=>{let t=gs(e),o=e.children||"",n=t.runSync(t.parse(o),o);return ks(n,e)},gs=e=>{let t=en.get(e);if(t)return t;let o=hs(e);return en.set(e,o),o},bs=e=>e.some(t=>Array.isArray(t)?t[0]===rehypeRaw:t===rehypeRaw),hs=e=>{let t=e.rehypePlugins||Yo,o=e.remarkPlugins||Yo,n=bs(t)?o:[...o,Uo],r=e.remarkRehypeOptions?{...Qo,...e.remarkRehypeOptions}:Qo;return unified().use(remarkParse).use(n).use(remarkRehype,r).use(t)},tn=e=>e,ys=(e,t,o,n)=>{o?e.children.splice(t,1):e.children[t]={type:"text",value:n};},ws=(e,t)=>{var o;for(let n in urlAttributes)if(Object.hasOwn(urlAttributes,n)&&Object.hasOwn(e.properties,n)){let r=e.properties[n],s=urlAttributes[n];(s===null||s.includes(e.tagName))&&(e.properties[n]=(o=t(String(r||""),n,e))!=null?o:void 0);}},Cs=(e,t,o,n,r,s)=>{let a=false;return n?a=!n.includes(e.tagName):r&&(a=r.includes(e.tagName)),!a&&s&&typeof t=="number"&&(a=!s(e,t,o)),a},ks=(e,t)=>{let{allowElement:o,allowedElements:n,disallowedElements:r,skipHtml:s,unwrapDisallowed:a,urlTransform:l}=t;if(o||n||r||s||l){let c=l||tn;visit(e,(d,u,m)=>{if(d.type==="raw"&&m&&typeof u=="number")return ys(m,u,s,d.value),u;if(d.type==="element"&&(ws(d,c),Cs(d,u,m,n,r,o)&&m&&typeof u=="number"))return a&&d.children?m.children.splice(u,1,...d.children):m.children.splice(u,1),u});}return toJsxRuntime(e,{Fragment:Fragment,components:t.components,ignoreInvalidStyle:true,jsx:jsx$1,jsxs:jsxs$1,passKeys:true,passNode:true})};var xs=/\[\^[\w-]{1,200}\](?!:)/,Ts=/\[\^[\w-]{1,200}\]:/;var Ps=/<(\w+)[\s>]/,Ms=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),on=new Map,nn=new Map,Is=e=>{let t=e.toLowerCase(),o=on.get(t);if(o)return o;let n=new RegExp(`<${t}(?=[\\s>/])[^>]*>`,"gi");return on.set(t,n),n},Ns=e=>{let t=e.toLowerCase(),o=nn.get(t);if(o)return o;let n=new RegExp(`</${t}(?=[\\s>])[^>]*>`,"gi");return nn.set(t,n),n},rn=(e,t)=>{if(Ms.has(t.toLowerCase()))return 0;let o=e.match(Is(t));if(!o)return 0;let n=0;for(let r of o)r.trimEnd().endsWith("/>")||(n+=1);return n},sn=(e,t)=>{let o=e.match(Ns(t));return o?o.length:0},Ls=e=>{let t=0;for(let o=0;o<e.length-1;o+=1)e[o]==="$"&&e[o+1]==="$"&&(t+=1,o+=1);return t},Ct=e=>{let t=xs.test(e),o=Ts.test(e);if(t||o)return [e];let n=x.lex(e,{gfm:true}),r=[],s=[],a=false;for(let l of n){let i=l.raw,c=r.length;if(s.length>0){r[c-1]+=i;let d=s.at(-1),u=rn(i,d),m=sn(i,d);for(let p=0;p<u;p+=1)s.push(d);for(let p=0;p<m;p+=1)s.length>0&&s.at(-1)===d&&s.pop();continue}if(l.type==="html"&&l.block){let d=i.match(Ps);if(d){let u=d[1],m=rn(i,u),p=sn(i,u);m>p&&s.push(u);}}if(c>0&&!a){let d=r[c-1];if(Ls(d)%2===1){r[c-1]=d+i;continue}}r.push(i),l.type!=="space"&&(a=l.type==="code");}return r};var an=(e,t)=>{if(!t.length)return e;let o=e;for(let n of t){let r=new RegExp(`(<${n}(?=[\\s>/])[^>]*>)([\\s\\S]*?)(</${n}\\s*>)`,"gi");o=o.replace(r,(s,a,l,i)=>{let c=l.replace(/\n\n/g,`
51751
52486
  <!---->
@@ -53615,7 +54350,7 @@ var DEFAULT_MODES = [
53615
54350
  var AssistantChat = function (_a) {
53616
54351
  var _b, _c;
53617
54352
  var _d;
53618
- var instanceId = _a.instanceId, getTargets = _a.getTargets, getJwt = _a.getJwt, baseUrl = _a.baseUrl, _e = _a.bottom, bottom = _e === void 0 ? 20 : _e, color = _a.color, _f = _a.voiceEnabled, voiceEnabled = _f === void 0 ? false : _f, _g = _a.workflowActions, workflowActions = _g === void 0 ? [] : _g, _h = _a.allowedModes, allowedModes = _h === void 0 ? DEFAULT_MODES : _h, onLayoutChange = _a.onLayoutChange;
54353
+ var instanceId = _a.instanceId, getTargets = _a.getTargets, getJwt = _a.getJwt, baseUrl = _a.baseUrl, _e = _a.bottom, bottom = _e === void 0 ? 20 : _e, color = _a.color, _f = _a.voiceEnabled, voiceEnabled = _f === void 0 ? false : _f, _g = _a.workflowActions, workflowActions = _g === void 0 ? [] : _g, _h = _a.allowedModes, allowedModes = _h === void 0 ? DEFAULT_MODES : _h, _j = _a.stepSettings, stepSettings = _j === void 0 ? {} : _j, activeStepId = _a.activeStepId, onLayoutChange = _a.onLayoutChange;
53619
54354
  var headers = useMemo(function () {
53620
54355
  if (getJwt)
53621
54356
  return function () { return ({ Authorization: "Bearer ".concat(getJwt()) }); };
@@ -53642,14 +54377,30 @@ var AssistantChat = function (_a) {
53642
54377
  }
53643
54378
  return body;
53644
54379
  };
53645
- var _j = __read(useState(false), 2), isOpen = _j[0], setIsOpen = _j[1];
53646
- var _k = __read(useState(readStoredMode), 2), mode = _k[0], setModeState = _k[1];
54380
+ var _k = __read(useState(false), 2), isOpen = _k[0], setIsOpen = _k[1];
54381
+ var _l = __read(useState(readStoredMode), 2), mode = _l[0], setModeState = _l[1];
53647
54382
  var setMode = useCallback(function (next) {
53648
54383
  setModeState(next);
53649
54384
  writeStoredMode(next);
53650
54385
  }, []);
53651
- var _l = __read(useState(readStoredSidebarWidth), 2), sidebarWidth = _l[0], setSidebarWidth = _l[1];
53652
- var _m = __read(useState(false), 2), isResizing = _m[0], setIsResizing = _m[1];
54386
+ // Whitelist: no steps configured = available everywhere, otherwise the
54387
+ // assistant is hidden on steps absent from the map (kept mounted, see render)
54388
+ var whitelistActive = Object.keys(stepSettings).length > 0;
54389
+ var hiddenByWhitelist = whitelistActive && (!activeStepId || !(activeStepId in stepSettings));
54390
+ // Apply the creator's open default once per step entry, close/switch still sticks
54391
+ var forcedStepRef = useRef(undefined);
54392
+ useEffect(function () {
54393
+ if (!activeStepId || activeStepId === forcedStepRef.current)
54394
+ return;
54395
+ forcedStepRef.current = activeStepId;
54396
+ var stepDefault = stepSettings[activeStepId];
54397
+ if (stepDefault === 'floating' || stepDefault === 'sidebar_right') {
54398
+ setIsOpen(true);
54399
+ setModeState(stepDefault === 'sidebar_right' ? 'sidebar-right' : 'current');
54400
+ }
54401
+ }, [activeStepId, stepSettings]);
54402
+ var _m = __read(useState(readStoredSidebarWidth), 2), sidebarWidth = _m[0], setSidebarWidth = _m[1];
54403
+ var _o = __read(useState(false), 2), isResizing = _o[0], setIsResizing = _o[1];
53653
54404
  useEffect(function () {
53654
54405
  var onWindowResize = function () {
53655
54406
  setSidebarWidth(function (w) {
@@ -53695,12 +54446,12 @@ var AssistantChat = function (_a) {
53695
54446
  setSidebarWidth(DEFAULT_SIDEBAR_WIDTH);
53696
54447
  writeStoredSidebarWidth(DEFAULT_SIDEBAR_WIDTH);
53697
54448
  }, []);
53698
- var _o = __read(useState(''), 2), input = _o[0], setInput = _o[1];
53699
- var _p = __read(useState([]), 2), threads = _p[0], setThreads = _p[1];
53700
- var _q = __read(useState(null), 2), activeThreadId = _q[0], setActiveThreadId = _q[1];
53701
- var _r = __read(useState(false), 2), isDropdownOpen = _r[0], setIsDropdownOpen = _r[1];
53702
- var _s = __read(useState(false), 2), isModeMenuOpen = _s[0], setIsModeMenuOpen = _s[1];
53703
- var _t = __read(useState(null), 2), actionTooltip = _t[0], setActionTooltip = _t[1];
54449
+ var _p = __read(useState(''), 2), input = _p[0], setInput = _p[1];
54450
+ var _q = __read(useState([]), 2), threads = _q[0], setThreads = _q[1];
54451
+ var _r = __read(useState(null), 2), activeThreadId = _r[0], setActiveThreadId = _r[1];
54452
+ var _s = __read(useState(false), 2), isDropdownOpen = _s[0], setIsDropdownOpen = _s[1];
54453
+ var _t = __read(useState(false), 2), isModeMenuOpen = _t[0], setIsModeMenuOpen = _t[1];
54454
+ var _u = __read(useState(null), 2), actionTooltip = _u[0], setActionTooltip = _u[1];
53704
54455
  var messagesContainerRef = useRef(null);
53705
54456
  // Suppresses auto-scroll when the user has scrolled up to read earlier content
53706
54457
  var atBottomRef = useRef(true);
@@ -53726,6 +54477,10 @@ var AssistantChat = function (_a) {
53726
54477
  var colors = useMemo(function () { return getChatColors(color || DEFAULT_CHAT_COLOR); }, [color]);
53727
54478
  var makeChat = function (threadId, initialMessages, initialTitle) {
53728
54479
  if (initialMessages === void 0) { initialMessages = []; }
54480
+ // Attachment session key, a new chat sends the minted id as thread_id
54481
+ // and the server adopts it on first message (builder convention) so
54482
+ // pre-thread uploads land in the right thread
54483
+ var sessionId = threadId !== null && threadId !== void 0 ? threadId : v4();
53729
54484
  var resolvedThreadId = threadId;
53730
54485
  var titleGenerated = !!initialTitle;
53731
54486
  // Title the thread from its first user message, whether typed or a voice transcript
@@ -53756,7 +54511,7 @@ var AssistantChat = function (_a) {
53756
54511
  var chatTransport = new DefaultChatTransport({
53757
54512
  api: baseUrl,
53758
54513
  headers: headers,
53759
- body: function () { return (__assign(__assign({}, buildChatBody()), { thread_id: resolvedThreadId || null })); },
54514
+ body: function () { return (__assign(__assign({}, buildChatBody()), { thread_id: resolvedThreadId || sessionId })); },
53760
54515
  fetch: function (url, init) { return __awaiter(void 0, void 0, void 0, function () {
53761
54516
  var res, form, audio, threadId;
53762
54517
  var _a, _b, _c, _d;
@@ -53949,14 +54704,26 @@ var AssistantChat = function (_a) {
53949
54704
  });
53950
54705
  }
53951
54706
  });
54707
+ setChatSessionId(chat, sessionId);
53952
54708
  return chat;
53953
54709
  };
53954
54710
  var readyChat = useMemo(function () { return makeChat(null); }, [headers, getTargets, getJwt]);
53955
54711
  var activeThread = threads.find(function (t) { return t.id === activeThreadId; });
53956
54712
  var activeChat = (_d = activeThread === null || activeThread === void 0 ? void 0 : activeThread.chat) !== null && _d !== void 0 ? _d : readyChat;
53957
- var _u = useChat({
54713
+ var _v = useChat({
53958
54714
  chat: activeChat
53959
- }), rawMessages = _u.messages, sendMessage = _u.sendMessage, setMessages = _u.setMessages, status = _u.status, error = _u.error;
54715
+ }), rawMessages = _v.messages, sendMessage = _v.sendMessage, setMessages = _v.setMessages, status = _v.status, error = _v.error;
54716
+ var _w = useChatAttachments({ activeChat: activeChat, baseUrl: baseUrl, headers: headers }), attachments = _w.attachments, attachmentError = _w.attachmentError, attachmentsInFlight = _w.attachmentsInFlight, isDragging = _w.isDragging, fileInputRef = _w.fileInputRef, addFiles = _w.addFiles, removeFile = _w.removeFile, takeAttachments = _w.takeAttachments, handleComposerPaste = _w.handlePaste, handleDragOver = _w.handleDragOver, handleDragLeave = _w.handleDragLeave, handleDrop = _w.handleDrop;
54717
+ var _x = __read(useState(null), 2), attachmentPreview = _x[0], setAttachmentPreview = _x[1];
54718
+ // A send fired while attachments were indexing, the message shows
54719
+ // optimistically and the real request replaces it via messageId once its
54720
+ // batch is terminal, files attached meanwhile stay for the next message
54721
+ var _y = __read(useState(null), 2), pendingSubmit = _y[0], setPendingSubmit = _y[1];
54722
+ useEffect(function () { return setPendingSubmit(null); }, [activeChat]);
54723
+ var stagedAttachments = pendingSubmit
54724
+ ? attachments.filter(function (a) { return !pendingSubmit.previewUrls.includes(a.previewUrl); })
54725
+ : attachments;
54726
+ var showAttachmentBar = stagedAttachments.length > 0 || !!attachmentError;
53960
54727
  var messages = useMemo(function () {
53961
54728
  var e_1, _a;
53962
54729
  var _b, _c;
@@ -54015,6 +54782,8 @@ var AssistantChat = function (_a) {
54015
54782
  fetchThreads();
54016
54783
  }, [isOpen, fetchThreads]);
54017
54784
  var handleNewThread = function () {
54785
+ if (pendingSubmit)
54786
+ return;
54018
54787
  stopVoice();
54019
54788
  atBottomRef.current = true;
54020
54789
  var id = v4();
@@ -54038,6 +54807,8 @@ var AssistantChat = function (_a) {
54038
54807
  return __generator(this, function (_c) {
54039
54808
  switch (_c.label) {
54040
54809
  case 0:
54810
+ if (pendingSubmit)
54811
+ return [2 /*return*/];
54041
54812
  stopVoice();
54042
54813
  atBottomRef.current = true;
54043
54814
  if ((_a = threads.find(function (t) { return t.id === id; })) === null || _a === void 0 ? void 0 : _a.chat) {
@@ -54104,7 +54875,7 @@ var AssistantChat = function (_a) {
54104
54875
  ], __read(prev.filter(function (t) { return t.id !== activeThreadId; })), false); });
54105
54876
  }
54106
54877
  }, [activeThreadId, activeThread, activeChat]);
54107
- var _v = useAssistantVoice({
54878
+ var _z = useAssistantVoice({
54108
54879
  status: status,
54109
54880
  sendMessage: function (message) { return __awaiter(void 0, void 0, void 0, function () {
54110
54881
  return __generator(this, function (_a) {
@@ -54121,27 +54892,107 @@ var AssistantChat = function (_a) {
54121
54892
  voiceActiveRef: voiceActiveRef,
54122
54893
  pendingAudioRef: pendingAudioRef,
54123
54894
  voiceDataRef: voiceDataRef
54124
- }), voiceState = _v.voiceState, voiceActive = _v.voiceActive, micAvailable = _v.micAvailable, spokenChars = _v.spokenChars, audioDraining = _v.audioDraining, startVoice = _v.startVoice, stopVoice = _v.stopVoice, skipSpeaking = _v.skipSpeaking;
54895
+ }), voiceState = _z.voiceState, voiceActive = _z.voiceActive, micAvailable = _z.micAvailable, spokenChars = _z.spokenChars, audioDraining = _z.audioDraining, startVoice = _z.startVoice, stopVoice = _z.stopVoice, skipSpeaking = _z.skipSpeaking;
54896
+ // Stop the mic if the assistant becomes hidden on a whitelisted step
54897
+ useEffect(function () {
54898
+ if (hiddenByWhitelist)
54899
+ stopVoice();
54900
+ }, [hiddenByWhitelist, stopVoice]);
54125
54901
  // Voice: keep the view pinned to the bottom as the reply reveals during playback
54126
54902
  useEffect(function () {
54127
54903
  pinToBottom();
54128
54904
  }, [spokenChars, audioDraining, pinToBottom]);
54129
54905
  var handleSend = function () { return __awaiter(void 0, void 0, void 0, function () {
54906
+ var hasText, tempId, parts_1, staged, fileParts;
54130
54907
  return __generator(this, function (_a) {
54131
54908
  switch (_a.label) {
54132
54909
  case 0:
54133
- if (!(input.trim() && status === 'ready')) return [3 /*break*/, 2];
54910
+ if (status !== 'ready' || pendingSubmit)
54911
+ return [2 /*return*/];
54912
+ hasText = !!input.trim();
54913
+ if (!hasText && attachments.length === 0)
54914
+ return [2 /*return*/];
54134
54915
  registerActiveThread();
54916
+ // Show the message now with local previews, the resolver fires the
54917
+ // real request once the batch is terminal
54918
+ if (attachmentsInFlight) {
54919
+ tempId = v4();
54920
+ parts_1 = [];
54921
+ if (hasText)
54922
+ parts_1.push({ type: 'text', text: input });
54923
+ attachments.forEach(function (a) { return parts_1.push(getFilePart(a)); });
54924
+ setMessages(__spreadArray(__spreadArray([], __read(rawMessages), false), [
54925
+ { id: tempId, role: 'user', parts: parts_1 }
54926
+ ], false));
54927
+ setPendingSubmit({
54928
+ tempId: tempId,
54929
+ text: input,
54930
+ previewUrls: attachments.map(function (a) { return a.previewUrl; })
54931
+ });
54932
+ setInput('');
54933
+ return [2 /*return*/];
54934
+ }
54135
54935
  return [4 /*yield*/, ensureCompletedSteps(instanceId)];
54136
54936
  case 1:
54137
54937
  _a.sent();
54138
- sendMessage({ text: input });
54938
+ staged = takeAttachments();
54939
+ fileParts = staged.filter(function (a) { return a.id; }).map(getFilePart);
54940
+ sendMessage(__assign({ text: input }, (fileParts.length > 0 ? { files: fileParts } : {})));
54139
54941
  setInput('');
54140
- _a.label = 2;
54141
- case 2: return [2 /*return*/];
54942
+ staged.forEach(function (a) { return URL.revokeObjectURL(a.previewUrl); });
54943
+ return [2 /*return*/];
54142
54944
  }
54143
54945
  });
54144
54946
  }); };
54947
+ // Optimistic-submit resolver: swap the placeholder for the real send once
54948
+ // the batch is terminal, pendingSubmit clears only when the swap lands so
54949
+ // the dim+spinner holds through the pre-send flush
54950
+ var resolvingRef = useRef(false);
54951
+ useEffect(function () {
54952
+ if (!pendingSubmit || resolvingRef.current)
54953
+ return;
54954
+ var submitted = attachments.filter(function (a) {
54955
+ return pendingSubmit.previewUrls.includes(a.previewUrl);
54956
+ });
54957
+ if (submitted.some(function (a) { return !isTerminalStatus(a.processingStatus); }))
54958
+ return;
54959
+ resolvingRef.current = true;
54960
+ var tempId = pendingSubmit.tempId, text = pendingSubmit.text, previewUrls = pendingSubmit.previewUrls;
54961
+ var staged = takeAttachments(previewUrls);
54962
+ var fileParts = staged.filter(function (a) { return a.id; }).map(getFilePart);
54963
+ if (!text.trim() && fileParts.length === 0) {
54964
+ // Every upload failed outright, drop the placeholder
54965
+ setMessages(function (prev) { return prev.filter(function (m) { return m.id !== tempId; }); });
54966
+ staged.forEach(function (a) { return URL.revokeObjectURL(a.previewUrl); });
54967
+ resolvingRef.current = false;
54968
+ setPendingSubmit(null);
54969
+ return;
54970
+ }
54971
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
54972
+ var sent;
54973
+ return __generator(this, function (_a) {
54974
+ switch (_a.label) {
54975
+ case 0: return [4 /*yield*/, ensureCompletedSteps(instanceId)];
54976
+ case 1:
54977
+ _a.sent();
54978
+ sent = sendMessage(__assign(__assign({ text: text }, (fileParts.length > 0 ? { files: fileParts } : {})), { messageId: tempId }));
54979
+ resolvingRef.current = false;
54980
+ setPendingSubmit(null);
54981
+ // Revoke the local previews only after the send settles, the
54982
+ // placeholder renders from them until the swap lands, send errors
54983
+ // surface via the chat's own error path
54984
+ return [4 /*yield*/, sent.catch(function () { })];
54985
+ case 2:
54986
+ // Revoke the local previews only after the send settles, the
54987
+ // placeholder renders from them until the swap lands, send errors
54988
+ // surface via the chat's own error path
54989
+ _a.sent();
54990
+ staged.forEach(function (a) { return URL.revokeObjectURL(a.previewUrl); });
54991
+ return [2 /*return*/];
54992
+ }
54993
+ });
54994
+ }); })();
54995
+ }, [pendingSubmit, attachments]);
54145
54996
  var handleWorkflowAction = function (action) { return __awaiter(void 0, void 0, void 0, function () {
54146
54997
  return __generator(this, function (_a) {
54147
54998
  switch (_a.label) {
@@ -54196,19 +55047,27 @@ var AssistantChat = function (_a) {
54196
55047
  : mode === 'sidebar-right'
54197
55048
  ? 'right'
54198
55049
  : null;
54199
- var layoutWidth = isOpen && layoutSide ? sidebarWidth : 0;
55050
+ var layoutOpen = isOpen && !hiddenByWhitelist;
55051
+ var layoutWidth = layoutOpen && layoutSide ? sidebarWidth : 0;
54200
55052
  var onLayoutChangeRef = useRef(onLayoutChange);
54201
55053
  onLayoutChangeRef.current = onLayoutChange;
54202
55054
  useEffect(function () {
54203
55055
  var _a;
54204
55056
  (_a = onLayoutChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onLayoutChangeRef, {
54205
55057
  mode: mode,
54206
- isOpen: isOpen,
54207
- side: layoutSide,
55058
+ isOpen: layoutOpen,
55059
+ side: hiddenByWhitelist ? null : layoutSide,
54208
55060
  width: layoutWidth,
54209
55061
  isResizing: isResizing
54210
55062
  });
54211
- }, [mode, isOpen, layoutSide, layoutWidth, isResizing]);
55063
+ }, [
55064
+ mode,
55065
+ layoutOpen,
55066
+ layoutSide,
55067
+ layoutWidth,
55068
+ isResizing,
55069
+ hiddenByWhitelist
55070
+ ]);
54212
55071
  var CollapseIcon = mode === 'sidebar-left'
54213
55072
  ? ChevronsLeftIcon
54214
55073
  : mode === 'sidebar-right'
@@ -54223,6 +55082,9 @@ var AssistantChat = function (_a) {
54223
55082
  : mode === 'fullscreen'
54224
55083
  ? FullscreenIcon
54225
55084
  : FloatingIcon;
55085
+ // Stay mounted so chat/thread state survives navigating hidden steps
55086
+ if (hiddenByWhitelist)
55087
+ return null;
54226
55088
  var fabOnLeft = mode === 'sidebar-left';
54227
55089
  var fabSide = fabOnLeft ? { left: '20px' } : { right: '20px' };
54228
55090
  var fabBottom = fabOnLeft ? 20 : bottom;
@@ -54493,27 +55355,51 @@ var AssistantChat = function (_a) {
54493
55355
  fontSize: '14px',
54494
55356
  marginTop: '40px'
54495
55357
  } }, { children: "How can I help?" }))), messages.map(function (message, mIdx) {
54496
- var _a;
55358
+ var _a, _b, _c;
54497
55359
  return message.role === 'user' ? (
54498
- // Show the bubble only once its transcript lands, not as an empty placeholder
54499
- ((_a = message.parts) !== null && _a !== void 0 ? _a : []).some(function (p) { var _a; return p.type === 'text' && ((_a = p.text) !== null && _a !== void 0 ? _a : '').trim(); }) ? (jsx("div", __assign({ css: {
55360
+ // Show the bubble only once its transcript or attachments land,
55361
+ // not as an empty placeholder
55362
+ ((_a = message.parts) !== null && _a !== void 0 ? _a : []).some(function (p) {
55363
+ var _a;
55364
+ return (p.type === 'text' && ((_a = p.text) !== null && _a !== void 0 ? _a : '').trim()) ||
55365
+ p.type === 'file';
55366
+ }) ? (jsxs("div", __assign({ css: {
54500
55367
  display: 'flex',
54501
- justifyContent: 'flex-end'
54502
- } }, { children: jsx("div", __assign({ css: {
54503
- maxWidth: '80%',
54504
- padding: '10px 14px',
54505
- borderRadius: '12px',
54506
- fontSize: '14px',
54507
- lineHeight: '1.5',
54508
- backgroundColor: colors.primary,
54509
- color: 'white',
54510
- overflowWrap: 'anywhere',
54511
- wordBreak: 'break-word'
54512
- } }, { children: message.parts
54513
- .filter(function (part) { return !part.hidden; })
54514
- .map(function (part, index) {
54515
- return part.type === 'text' ? (jsx("span", { children: part.text }, index)) : null;
54516
- }) })) }), message.id)) : null) : (jsx(Fragment$2, { children: (function () {
55368
+ flexDirection: 'column',
55369
+ alignItems: 'flex-end',
55370
+ gap: '6px'
55371
+ } }, { children: [jsx("div", __assign({ css: {
55372
+ display: 'flex',
55373
+ flexWrap: 'wrap',
55374
+ justifyContent: 'flex-end',
55375
+ gap: '6px'
55376
+ } }, { children: ((_b = message.parts) !== null && _b !== void 0 ? _b : [])
55377
+ .filter(function (part) { return part.type === 'file'; })
55378
+ .map(function (part, index) {
55379
+ var _a;
55380
+ return (jsx(MessageAttachment, { mediaType: (_a = part.mediaType) !== null && _a !== void 0 ? _a : '', filename: part.filename, url: part.url, inFlight: (pendingSubmit === null || pendingSubmit === void 0 ? void 0 : pendingSubmit.tempId) === message.id, onOpen: function () {
55381
+ var _a;
55382
+ return setAttachmentPreview({
55383
+ url: part.url,
55384
+ mediaType: (_a = part.mediaType) !== null && _a !== void 0 ? _a : '',
55385
+ filename: part.filename
55386
+ });
55387
+ } }, "file-".concat(index)));
55388
+ }) })), ((_c = message.parts) !== null && _c !== void 0 ? _c : []).some(function (p) { var _a; return p.type === 'text' && ((_a = p.text) !== null && _a !== void 0 ? _a : '').trim(); }) && (jsx("div", __assign({ css: {
55389
+ maxWidth: '80%',
55390
+ padding: '10px 14px',
55391
+ borderRadius: '12px',
55392
+ fontSize: '14px',
55393
+ lineHeight: '1.5',
55394
+ backgroundColor: colors.primary,
55395
+ color: 'white',
55396
+ overflowWrap: 'anywhere',
55397
+ wordBreak: 'break-word'
55398
+ } }, { children: message.parts
55399
+ .filter(function (part) { return !part.hidden; })
55400
+ .map(function (part, index) {
55401
+ return part.type === 'text' ? (jsx("span", { children: part.text }, index)) : null;
55402
+ }) })))] }), message.id)) : null) : (jsx(Fragment$2, { children: (function () {
54517
55403
  var isLastMsg = mIdx === messages.length - 1;
54518
55404
  var chunks = mergeAssistantParts(message.parts);
54519
55405
  var lastPart = message.parts[message.parts.length - 1];
@@ -54601,7 +55487,7 @@ var AssistantChat = function (_a) {
54601
55487
  return null;
54602
55488
  }
54603
55489
  return jsx(ToolChunkPlaceholder, {});
54604
- })(), error && (jsx("div", __assign({ css: {
55490
+ })(), pendingSubmit && jsx(ToolChunkPlaceholder, { label: 'Uploading...' }), error && (jsx("div", __assign({ css: {
54605
55491
  padding: '10px 14px',
54606
55492
  borderRadius: '8px',
54607
55493
  backgroundColor: '#fef2f2',
@@ -54651,14 +55537,35 @@ var AssistantChat = function (_a) {
54651
55537
  whiteSpace: 'nowrap',
54652
55538
  pointerEvents: 'none',
54653
55539
  zIndex: 10000
54654
- } }, { children: actionTooltip.text })))] }))), jsxs("div", __assign({ css: {
55540
+ } }, { children: actionTooltip.text })))] }))), showAttachmentBar && (jsxs("div", __assign({ css: {
54655
55541
  display: 'flex',
54656
- alignItems: 'center',
55542
+ flexWrap: 'wrap',
54657
55543
  gap: '8px',
54658
- padding: '12px 16px',
55544
+ padding: '10px 16px 0',
54659
55545
  borderTop: "1px solid ".concat(GRAY_200),
54660
55546
  backgroundColor: GRAY_50
54661
- } }, { children: [voiceActive ? (jsxs("button", __assign({ type: 'button', onClick: voiceState === 'speaking' ? skipSpeaking : undefined, css: {
55547
+ } }, { children: [attachmentError && (jsx("div", __assign({ css: { fontSize: '12px', color: '#dc2626', width: '100%' } }, { children: attachmentError }))), stagedAttachments.map(function (attachment) { return (jsx(AttachmentChip, { attachment: attachment, onRemove: function () { return removeFile(attachment.previewUrl); } }, attachment.previewUrl)); })] }))), jsxs("div", __assign({ onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, css: __assign({ display: 'flex', alignItems: 'center', gap: '8px', padding: '12px 16px', borderTop: showAttachmentBar ? 'none' : "1px solid ".concat(GRAY_200), backgroundColor: GRAY_50 }, (isDragging
55548
+ ? { outline: "2px dashed ".concat(colors.primary), outlineOffset: '-4px' }
55549
+ : {})) }, { children: [!voiceActive && (jsxs(Fragment$1, { children: [jsx("input", { ref: fileInputRef, type: 'file', multiple: true, accept: ACCEPT_ATTR, onChange: function (e) {
55550
+ var _a;
55551
+ var files = Array.from((_a = e.target.files) !== null && _a !== void 0 ? _a : []);
55552
+ if (files.length)
55553
+ addFiles(files);
55554
+ e.target.value = '';
55555
+ }, css: { display: 'none' } }), jsx("button", __assign({ type: 'button', onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, disabled: isLoading, "aria-label": 'Attach files', css: {
55556
+ padding: '10px',
55557
+ backgroundColor: 'transparent',
55558
+ color: GRAY_800,
55559
+ border: "1px solid ".concat(GRAY_200),
55560
+ borderRadius: '8px',
55561
+ cursor: 'pointer',
55562
+ display: 'flex',
55563
+ alignItems: 'center',
55564
+ justifyContent: 'center',
55565
+ transition: 'background-color 0.2s',
55566
+ ':hover:not(:disabled)': { backgroundColor: GRAY_100 },
55567
+ ':disabled': { cursor: 'not-allowed', color: GRAY_400 }
55568
+ } }, { children: jsx(PaperclipIcon, {}) }))] })), voiceActive ? (jsxs("button", __assign({ type: 'button', onClick: voiceState === 'speaking' ? skipSpeaking : undefined, css: {
54662
55569
  flex: 1,
54663
55570
  display: 'flex',
54664
55571
  alignItems: 'center',
@@ -54678,7 +55585,7 @@ var AssistantChat = function (_a) {
54678
55585
  ? 'Thinking…'
54679
55586
  : voiceState === 'speaking'
54680
55587
  ? 'Tap to skip'
54681
- : 'Listening…'] }))) : (jsx("input", { type: 'text', value: input, onChange: function (e) { return setInput(e.target.value); }, onKeyDown: handleKeyDown, placeholder: 'Type a message...', css: {
55588
+ : 'Listening…'] }))) : (jsx("input", { type: 'text', value: input, onChange: function (e) { return setInput(e.target.value); }, onKeyDown: handleKeyDown, onPaste: handleComposerPaste, placeholder: 'Type a message...', css: {
54682
55589
  flex: 1,
54683
55590
  padding: '10px 14px',
54684
55591
  border: "1px solid ".concat(GRAY_200),
@@ -54689,7 +55596,9 @@ var AssistantChat = function (_a) {
54689
55596
  ':focus': {
54690
55597
  borderColor: colors.primary
54691
55598
  }
54692
- } })), voiceActive ? (jsx("button", __assign({ type: 'button', onClick: stopVoice, "aria-label": 'Exit voice mode', css: composerButtonCss }, { children: jsx(CloseIcon, {}) }))) : !voiceEnabled || input.trim() ? (jsx("button", __assign({ type: 'button', onClick: handleSend, disabled: isLoading || !input.trim(), css: composerButtonCss }, { children: jsx(SendIcon, {}) }))) : (jsx("button", __assign({ type: 'button', onClick: startVoice, disabled: isLoading || !micAvailable, "aria-label": 'Start voice mode', title: micAvailable ? undefined : 'Microphone unavailable', css: composerButtonCss }, { children: jsx(MicIcon, {}) })))] }))] })));
55599
+ } })), voiceActive ? (jsx("button", __assign({ type: 'button', onClick: stopVoice, "aria-label": 'Exit voice mode', css: composerButtonCss }, { children: jsx(CloseIcon, {}) }))) : !voiceEnabled || input.trim() || attachments.length > 0 ? (jsx("button", __assign({ type: 'button', onClick: handleSend, disabled: isLoading ||
55600
+ !!pendingSubmit ||
55601
+ (!input.trim() && attachments.length === 0), css: composerButtonCss }, { children: jsx(SendIcon, {}) }))) : (jsx("button", __assign({ type: 'button', onClick: startVoice, disabled: isLoading || !micAvailable, "aria-label": 'Start voice mode', title: micAvailable ? undefined : 'Microphone unavailable', css: composerButtonCss }, { children: jsx(MicIcon, {}) })))] })), attachmentPreview && (jsx(AttachmentPreviewOverlay, { preview: attachmentPreview, onClose: function () { return setAttachmentPreview(null); } }))] })));
54693
55602
  };
54694
55603
 
54695
55604
  var AssistantChat$1 = /*#__PURE__*/Object.freeze({
@@ -54698,3 +55607,4 @@ var AssistantChat$1 = /*#__PURE__*/Object.freeze({
54698
55607
  });
54699
55608
 
54700
55609
  export { AssistantChat$1 as A, Bt as B, Mi as M, R, uo as u };
55610
+ //# sourceMappingURL=fthry_AssistantChat.CFzkd8QB.js.map