@feathery/react 2.50.1 → 2.51.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.
- package/cjs/Form/index.d.ts.map +1 -1
- package/cjs/assistant/AssistantChat.d.ts +2 -1
- package/cjs/assistant/AssistantChat.d.ts.map +1 -1
- package/cjs/assistant/ToolStatus.d.ts +2 -1
- package/cjs/assistant/ToolStatus.d.ts.map +1 -1
- package/cjs/assistant/icons.d.ts +2 -0
- package/cjs/assistant/icons.d.ts.map +1 -1
- package/cjs/assistant/voice/audioPlayer.d.ts +30 -0
- package/cjs/assistant/voice/audioPlayer.d.ts.map +1 -0
- package/cjs/assistant/voice/useAssistantVoice.d.ts +34 -0
- package/cjs/assistant/voice/useAssistantVoice.d.ts.map +1 -0
- package/cjs/assistant/voice/voiceMic.d.ts +17 -0
- package/cjs/assistant/voice/voiceMic.d.ts.map +1 -0
- package/cjs/{fthry_AssistantChat.Bv_PnXs-.js → fthry_AssistantChat.B45jvKBe.js} +662 -153
- package/cjs/{fthry_FormControl.BAksZlDz.js → fthry_FormControl.EOj0LE3M.js} +1 -1
- package/cjs/{fthry_InlineTooltip.DplyptTz.js → fthry_InlineTooltip.BhdsWEoD.js} +1 -1
- package/cjs/{fthry_PaymentMethodField.DpnN0V1H.js → fthry_PaymentMethodField.DYVjg4Fj.js} +3 -3
- package/cjs/{fthry_Placeholder.5Mvr4ask.js → fthry_Placeholder.CcwNoUeW.js} +1 -1
- package/cjs/{fthry_ShowEyeIcon.5HKujzSD.js → fthry_ShowEyeIcon.DuZqZCnN.js} +1 -1
- package/cjs/{fthry_TabsElement.CxiHTqRU.js → fthry_TabsElement.COJxjNgU.js} +1 -1
- package/cjs/{fthry_auto-track.DV30-QdL.js → fthry_auto-track.B15NDwyR.js} +2 -2
- package/cjs/{fthry_highlighted-body-TPN3WLV5.CtyrCPuE.js → fthry_highlighted-body-TPN3WLV5.DVEo7HUb.js} +3 -3
- package/cjs/{fthry_index.D0tdVxWg.js → fthry_index.2QppVzJs.js} +7 -7
- package/cjs/fthry_index.5X9_5jk4.js +4107 -0
- package/cjs/{fthry_index.DXBYYUOP.js → fthry_index.5xuF2U9h.js} +1 -1
- package/cjs/{fthry_index.lC_5XhON.js → fthry_index.B4C3wGGx.js} +35 -33
- package/cjs/{fthry_index.0UtK4ObD.js → fthry_index.B7S5dgOG.js} +2 -2
- package/cjs/{fthry_index.DmtMegnj.js → fthry_index.BBp1wUpf.js} +4 -4
- package/cjs/{fthry_index.9V9ezpt1.js → fthry_index.BU6ItWDI.js} +4 -4
- package/cjs/{fthry_index.CG2qDLCN.js → fthry_index.BkdG1KiI.js} +3 -3
- package/cjs/{fthry_index.B-vFxNO_.js → fthry_index.BoejAzGy.js} +5 -5
- package/cjs/{fthry_index.DBDbbLL1.js → fthry_index.CDnYVEIO.js} +2 -2
- package/cjs/{fthry_index.B2kwLyNr.js → fthry_index.CEqgOh3U.js} +1 -1
- package/cjs/{fthry_index.DO90MI7L.js → fthry_index.CJ3Hch09.js} +1 -1
- package/cjs/{fthry_index.DFZUCN27.js → fthry_index.CacFIYgr.js} +1 -1
- package/cjs/{fthry_index.GZc-hNji.js → fthry_index.Cmuje9sY.js} +4 -4
- package/cjs/{fthry_index.C5BkZnrm.js → fthry_index.CqhOLSKT.js} +5 -5
- package/cjs/{fthry_index.BQKxTWNQ.js → fthry_index.CvfYbjM3.js} +2 -2
- package/cjs/{fthry_index.Bp0-0Hpt.js → fthry_index.CyHvGApA.js} +4 -4
- package/cjs/{fthry_index.D698F2zZ.js → fthry_index.D0m2Paql.js} +5 -5
- package/cjs/{fthry_index.CB082HFt.js → fthry_index.DJW8jwjF.js} +5 -5
- package/cjs/{fthry_index.DSxhyu57.js → fthry_index.DNDEeQCP.js} +1 -1
- package/cjs/{fthry_index.BUVzO2k5.js → fthry_index.DOmwK88R.js} +1 -1
- package/cjs/{fthry_index.CXiwWMaB.js → fthry_index.DPeoLKPF.js} +1 -1
- package/cjs/{fthry_index.DNf7jYzX.js → fthry_index.DaU9mnVx.js} +3 -3
- package/cjs/{fthry_index.B9iGCw8F.js → fthry_index.DjKpsFXX.js} +2 -2
- package/cjs/{fthry_index.BPYIEjMq.js → fthry_index.DzwfTsQg.js} +10 -10
- package/cjs/{fthry_index.CVkyw_dk.js → fthry_index.HB6IRHEd.js} +2 -2
- package/cjs/{fthry_index.Byf43ZJS.js → fthry_index.RBFHmwlK.js} +3 -3
- package/cjs/{fthry_index.Cbfqikpc.js → fthry_index.Z-VNWfPY.js} +2 -2
- package/cjs/{fthry_index.Dx62aGHl.js → fthry_index.isQxfXbE.js} +1 -1
- package/cjs/{fthry_index.C_0LGAaW.js → fthry_index.j-6Dmxvi.js} +1 -1
- package/cjs/{fthry_index.CXpQuMt1.js → fthry_index.l-vIwCek.js} +1 -1
- package/cjs/{fthry_index.OHud4Plq.js → fthry_index.sb9ekedx.js} +2 -2
- package/cjs/{fthry_index.umd.DCBQBTfy.js → fthry_index.umd.BsAzT2x5.js} +1 -1
- package/cjs/{fthry_input.3B0IH5fK.js → fthry_input.BN_eHBxf.js} +1 -1
- package/cjs/fthry_logging.B-EvoWue.js +24 -0
- package/cjs/fthry_logging.DwsvHsLI.js +29 -0
- package/cjs/{fthry_mermaid-O7DHMXV3.BwkCSjZC.js → fthry_mermaid-O7DHMXV3.Dk3DbMjU.js} +3 -3
- package/cjs/{fthry_script.Dfvbhz8G.js → fthry_script.CMlEfgqJ.js} +1 -1
- package/cjs/{fthry_styles.BecNWwfa.js → fthry_styles.CDAJkFkv.js} +1 -1
- package/cjs/{fthry_useElementSize.D9fwVm32.js → fthry_useElementSize.CdR9C9j1.js} +1 -1
- package/cjs/{fthry_useSalesforceSync.B8WpZf2e.js → fthry_useSalesforceSync.BbSpWhT1.js} +1 -1
- package/cjs/{fthry_webfontloader.maDTrAYi.js → fthry_webfontloader.CRX0Ppbc.js} +1 -1
- package/cjs/index.js +1 -1
- package/cjs/thumbnail-renderer.js +1 -1
- package/cjs/utils/formHelperFunctions.d.ts +1 -0
- package/cjs/utils/formHelperFunctions.d.ts.map +1 -1
- package/dist/Form/index.d.ts.map +1 -1
- package/dist/assistant/AssistantChat.d.ts +2 -1
- package/dist/assistant/AssistantChat.d.ts.map +1 -1
- package/dist/assistant/ToolStatus.d.ts +2 -1
- package/dist/assistant/ToolStatus.d.ts.map +1 -1
- package/dist/assistant/icons.d.ts +2 -0
- package/dist/assistant/icons.d.ts.map +1 -1
- package/dist/assistant/voice/audioPlayer.d.ts +30 -0
- package/dist/assistant/voice/audioPlayer.d.ts.map +1 -0
- package/dist/assistant/voice/useAssistantVoice.d.ts +34 -0
- package/dist/assistant/voice/useAssistantVoice.d.ts.map +1 -0
- package/dist/assistant/voice/voiceMic.d.ts +17 -0
- package/dist/assistant/voice/voiceMic.d.ts.map +1 -0
- package/dist/{fthry_AssistantChat.BWUYjfwA.js → fthry_AssistantChat.DT_xLu9j.js} +662 -153
- package/dist/{fthry_FormControl.gQmC3Q_5.js → fthry_FormControl.CjDYAhmh.js} +1 -1
- package/dist/{fthry_InlineTooltip.M1XQiZpn.js → fthry_InlineTooltip.BXJBh9xO.js} +1 -1
- package/dist/{fthry_PaymentMethodField.DEs0It74.js → fthry_PaymentMethodField.Bmc0ADLl.js} +3 -3
- package/dist/{fthry_Placeholder.B8e4W9VJ.js → fthry_Placeholder.D2CT1bF2.js} +1 -1
- package/dist/{fthry_ShowEyeIcon.DdLap_w9.js → fthry_ShowEyeIcon.2gnnZQwI.js} +1 -1
- package/dist/{fthry_TabsElement.DpJTusbm.js → fthry_TabsElement.CmDA3WMs.js} +1 -1
- package/dist/{fthry_auto-track.HTzxPnUa.js → fthry_auto-track.C318Fmfp.js} +2 -2
- package/dist/{fthry_highlighted-body-TPN3WLV5.kj3f_DpN.js → fthry_highlighted-body-TPN3WLV5.DvjFQ-wQ.js} +3 -3
- package/dist/{fthry_index.CIqCJp4_.js → fthry_index.BAS9Rj3B.js} +4 -4
- package/dist/{fthry_index.CVJtI2Xl.js → fthry_index.BBVonB9-.js} +1 -1
- package/dist/{fthry_index.CkW0oER4.js → fthry_index.BGwZT3G8.js} +5 -5
- package/dist/{fthry_index.DfrV6A68.js → fthry_index.BIOOaSUh.js} +4 -4
- package/dist/{fthry_index.DzM7hukc.js → fthry_index.BMLNnooL.js} +2 -2
- package/dist/{fthry_index.BBhLiIOO.js → fthry_index.BdT62ac-.js} +4 -4
- package/dist/{fthry_index.BDiGpbY8.js → fthry_index.Bh5Hgqlr.js} +2 -2
- package/dist/{fthry_index.DXY-WeCY.js → fthry_index.BiAwHsSn.js} +4 -4
- package/dist/{fthry_index.D4NYHwF9.js → fthry_index.BmPja_lN.js} +7 -7
- package/dist/{fthry_index.Dt6zQK3e.js → fthry_index.BxsXFBiA.js} +4 -4
- package/dist/{fthry_index.CyvJ8-bB.js → fthry_index.CHcVd9z4.js} +2 -2
- package/dist/{fthry_index.ptJrcCPy.js → fthry_index.CI4tFg9l.js} +36 -34
- package/dist/{fthry_index.C4_1X7GA.js → fthry_index.CREmWhTB.js} +5 -5
- package/dist/{fthry_index.DTmSNKnS.js → fthry_index.CSdrmFzH.js} +5 -5
- package/dist/{fthry_index.r1TNpIHy.js → fthry_index.CUyyWToU.js} +1 -1
- package/dist/{fthry_index.D0Cgvg7i.js → fthry_index.ClcVCvSd.js} +3 -3
- package/dist/{fthry_index.Bo8U-enX.js → fthry_index.CmEl9AjF.js} +1 -1
- package/dist/{fthry_index.CNFIYUXl.js → fthry_index.CxZihOJg.js} +2 -2
- package/dist/{fthry_index.CWe8WGnw.js → fthry_index.D0VQUqXz.js} +1 -1
- package/dist/{fthry_index.D1WDrqdZ.js → fthry_index.D2U9Y4Jc.js} +1 -1
- package/dist/fthry_index.D7coWJsd.js +4105 -0
- package/dist/{fthry_index.Dav1_JFe.js → fthry_index.DGl27K_w.js} +1 -1
- package/dist/{fthry_index.D7yot10w.js → fthry_index.DlEhwT48.js} +1 -1
- package/dist/{fthry_index.Bx652TAg.js → fthry_index.Dmsa_IWB.js} +1 -1
- package/dist/{fthry_index.C0iUe75-.js → fthry_index.Dvdg0UC6.js} +1 -1
- package/dist/{fthry_index.DIAR7NXW.js → fthry_index.DxoyRmcK.js} +2 -2
- package/dist/{fthry_index.BNN_GnRE.js → fthry_index.SqN7TeCH.js} +2 -2
- package/dist/{fthry_index.B8mrrhCT.js → fthry_index.Vno16k5B.js} +3 -3
- package/dist/{fthry_index.znErF4eB.js → fthry_index.ZMPDKzng.js} +2 -2
- package/dist/{fthry_index.CQOB3Ugj.js → fthry_index.cZ4fV2Jh.js} +3 -3
- package/dist/{fthry_index.Bq05T75f.js → fthry_index.eGwSNYvd.js} +1 -1
- package/dist/{fthry_index.DpXk-u8o.js → fthry_index.fOZIYWtf.js} +10 -10
- package/dist/{fthry_index.umd.C9mURNOx.js → fthry_index.umd.xldORs1x.js} +1 -1
- package/dist/{fthry_input.C-ByVjA4.js → fthry_input.6Rwsft76.js} +1 -1
- package/dist/fthry_logging.B1LWsZ3K.js +22 -0
- package/dist/fthry_logging.DWvo9mx5.js +27 -0
- package/dist/fthry_mermaid-O7DHMXV3.CpHtnz5w.js +8 -0
- package/dist/{fthry_script.DvAaqiBk.js → fthry_script.DNhdCztr.js} +1 -1
- package/dist/{fthry_styles.DwzdoBlX.js → fthry_styles.DPXDsQxq.js} +1 -1
- package/dist/{fthry_useElementSize.9DmbhgBu.js → fthry_useElementSize.orrnTjTM.js} +1 -1
- package/dist/{fthry_useSalesforceSync.qRdq0wu3.js → fthry_useSalesforceSync.C66IFKe6.js} +1 -1
- package/dist/{fthry_webfontloader.B5npG4_8.js → fthry_webfontloader.BZYYUrT8.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/thumbnail-renderer.js +1 -1
- package/dist/utils/formHelperFunctions.d.ts +1 -0
- package/dist/utils/formHelperFunctions.d.ts.map +1 -1
- package/package.json +2 -1
- package/umd/129.ec2bd9be8700ef0450ee.js +1 -0
- package/umd/762.4a580055e4cb2c97c28f.js +2 -0
- package/umd/762.4a580055e4cb2c97c28f.js.LICENSE.txt +56 -0
- package/umd/968.2ad2025393b417351f94.js +1 -0
- package/umd/AssistantChat.f4f1a5ab9a911c339fd1.js +1 -0
- package/umd/index.js +1 -1
- package/dist/fthry_mermaid-O7DHMXV3.BLTan-1s.js +0 -8
- package/umd/AssistantChat.4c90e588cefb3c7dcc90.js +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
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 initState, aX as getRepeatedContainers, aY as getRepeatedContainer, aZ as getDefaultFieldValue, a_ as isButtonDisabled, N as replaceTextVariables, a$ as loadPhoneValidator, a0 as phoneLibPromise, Y as phoneLib, b0 as initInfo, b1 as getCookie, A as featheryDoc, y as Fragment$1 } from './fthry_index.CI4tFg9l.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.
|
|
6
|
+
import { s as stateMap } from './fthry_index.CUyyWToU.js';
|
|
7
7
|
|
|
8
8
|
// src/errors/ai-sdk-error.ts
|
|
9
9
|
var marker = "vercel.ai.error";
|
|
@@ -9761,7 +9761,444 @@ var FullscreenIcon = function (props) { return (jsxs("svg", __assign({ width: '1
|
|
|
9761
9761
|
var MinusIcon = function (props) { return (jsx("svg", __assign({ width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none' }, props, { children: jsx("path", { d: 'M5 12h14', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round' }) }))); };
|
|
9762
9762
|
var ChevronsLeftIcon = function (props) { return (jsxs("svg", __assign({ width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none' }, props, { children: [jsx("path", { d: 'm11 17-5-5 5-5', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' }), jsx("path", { d: 'm18 17-5-5 5-5', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round' })] }))); };
|
|
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
|
-
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' })] }))); };
|
|
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
|
+
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' })] }))); };
|
|
9767
|
+
|
|
9768
|
+
function base64ToBytes(base64) {
|
|
9769
|
+
var binary = featheryWindow().atob(base64);
|
|
9770
|
+
var bytes = new Uint8Array(binary.length);
|
|
9771
|
+
for (var i = 0; i < binary.length; i++)
|
|
9772
|
+
bytes[i] = binary.charCodeAt(i);
|
|
9773
|
+
return bytes;
|
|
9774
|
+
}
|
|
9775
|
+
// Reveal text slightly ahead of the audio so it reads naturally rather than lagging
|
|
9776
|
+
var REVEAL_LEAD = 1.5;
|
|
9777
|
+
// Play the turn's audio clip by clip, reporting progress to drive the text reveal
|
|
9778
|
+
var AudioPlayer = /** @class */ (function () {
|
|
9779
|
+
function AudioPlayer(opts) {
|
|
9780
|
+
if (opts === void 0) { opts = {}; }
|
|
9781
|
+
this.building = [];
|
|
9782
|
+
this.queue = [];
|
|
9783
|
+
this.playIndex = 0;
|
|
9784
|
+
this.ended = false;
|
|
9785
|
+
this.playing = false;
|
|
9786
|
+
this.audio = null;
|
|
9787
|
+
this.objectUrl = null;
|
|
9788
|
+
this.rafId = null;
|
|
9789
|
+
this.opts = opts;
|
|
9790
|
+
}
|
|
9791
|
+
Object.defineProperty(AudioPlayer.prototype, "isPlaying", {
|
|
9792
|
+
get: function () {
|
|
9793
|
+
return this.playing;
|
|
9794
|
+
},
|
|
9795
|
+
enumerable: false,
|
|
9796
|
+
configurable: true
|
|
9797
|
+
});
|
|
9798
|
+
AudioPlayer.prototype.pushChunk = function (base64) {
|
|
9799
|
+
this.building.push(base64ToBytes(base64));
|
|
9800
|
+
};
|
|
9801
|
+
// The sentence's audio is fully sent, queue it (with its text) and keep playback moving
|
|
9802
|
+
AudioPlayer.prototype.pushSegment = function (text) {
|
|
9803
|
+
this.queue.push({ text: text, bytes: this.building });
|
|
9804
|
+
this.building = [];
|
|
9805
|
+
this.playing = true;
|
|
9806
|
+
this.playNext();
|
|
9807
|
+
};
|
|
9808
|
+
// No more clips coming
|
|
9809
|
+
AudioPlayer.prototype.end = function () {
|
|
9810
|
+
this.ended = true;
|
|
9811
|
+
this.playNext();
|
|
9812
|
+
};
|
|
9813
|
+
// Cut playback and drop anything queued
|
|
9814
|
+
AudioPlayer.prototype.skip = function () {
|
|
9815
|
+
this.teardown();
|
|
9816
|
+
};
|
|
9817
|
+
AudioPlayer.prototype.playNext = function () {
|
|
9818
|
+
var _this = this;
|
|
9819
|
+
var _a, _b, _c, _d;
|
|
9820
|
+
if (this.audio)
|
|
9821
|
+
return;
|
|
9822
|
+
var clip = this.queue[this.playIndex];
|
|
9823
|
+
if (!clip) {
|
|
9824
|
+
if (this.ended && this.playing) {
|
|
9825
|
+
this.playing = false;
|
|
9826
|
+
(_b = (_a = this.opts).onIdle) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
9827
|
+
}
|
|
9828
|
+
return;
|
|
9829
|
+
}
|
|
9830
|
+
if (clip.bytes.length === 0) {
|
|
9831
|
+
// TTS produced no audio for this sentence, credit its text to keep the reveal moving
|
|
9832
|
+
(_d = (_c = this.opts).onSegmentEnd) === null || _d === void 0 ? void 0 : _d.call(_c, clip.text);
|
|
9833
|
+
this.playIndex += 1;
|
|
9834
|
+
this.playNext();
|
|
9835
|
+
return;
|
|
9836
|
+
}
|
|
9837
|
+
var url = URL.createObjectURL(new Blob(clip.bytes, { type: 'audio/mpeg' }));
|
|
9838
|
+
var audio = new Audio(url);
|
|
9839
|
+
this.audio = audio;
|
|
9840
|
+
this.objectUrl = url;
|
|
9841
|
+
audio.onplaying = function () {
|
|
9842
|
+
var _a, _b;
|
|
9843
|
+
if (_this.audio !== audio)
|
|
9844
|
+
return;
|
|
9845
|
+
(_b = (_a = _this.opts).onSegmentStart) === null || _b === void 0 ? void 0 : _b.call(_a, clip.text);
|
|
9846
|
+
_this.startReveal(audio, clip.text);
|
|
9847
|
+
};
|
|
9848
|
+
audio.onended = function () { return _this.finishClip(audio, clip.text); };
|
|
9849
|
+
audio.onerror = function () { return _this.finishClip(audio, clip.text); };
|
|
9850
|
+
audio.play().catch(function () { return _this.finishClip(audio, clip.text); });
|
|
9851
|
+
};
|
|
9852
|
+
// Drive the text reveal from the clip's playback position
|
|
9853
|
+
AudioPlayer.prototype.startReveal = function (audio, text) {
|
|
9854
|
+
var _this = this;
|
|
9855
|
+
var win = featheryWindow();
|
|
9856
|
+
var tick = function () {
|
|
9857
|
+
var _a, _b;
|
|
9858
|
+
if (_this.audio !== audio) {
|
|
9859
|
+
_this.rafId = null;
|
|
9860
|
+
return;
|
|
9861
|
+
}
|
|
9862
|
+
var d = audio.duration;
|
|
9863
|
+
var fraction = d && isFinite(d) && d > 0
|
|
9864
|
+
? Math.min(1, (audio.currentTime / d) * REVEAL_LEAD)
|
|
9865
|
+
: 0;
|
|
9866
|
+
(_b = (_a = _this.opts).onSegmentProgress) === null || _b === void 0 ? void 0 : _b.call(_a, text, fraction);
|
|
9867
|
+
_this.rafId = win.requestAnimationFrame(tick);
|
|
9868
|
+
};
|
|
9869
|
+
this.rafId = win.requestAnimationFrame(tick);
|
|
9870
|
+
};
|
|
9871
|
+
AudioPlayer.prototype.stopReveal = function () {
|
|
9872
|
+
if (this.rafId !== null) {
|
|
9873
|
+
featheryWindow().cancelAnimationFrame(this.rafId);
|
|
9874
|
+
this.rafId = null;
|
|
9875
|
+
}
|
|
9876
|
+
};
|
|
9877
|
+
AudioPlayer.prototype.finishClip = function (audio, text) {
|
|
9878
|
+
var _a, _b;
|
|
9879
|
+
if (this.audio !== audio)
|
|
9880
|
+
return;
|
|
9881
|
+
this.stopReveal();
|
|
9882
|
+
(_b = (_a = this.opts).onSegmentEnd) === null || _b === void 0 ? void 0 : _b.call(_a, text);
|
|
9883
|
+
audio.pause();
|
|
9884
|
+
audio.src = '';
|
|
9885
|
+
this.audio = null;
|
|
9886
|
+
if (this.objectUrl) {
|
|
9887
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
9888
|
+
this.objectUrl = null;
|
|
9889
|
+
}
|
|
9890
|
+
this.playIndex += 1;
|
|
9891
|
+
this.playNext();
|
|
9892
|
+
};
|
|
9893
|
+
AudioPlayer.prototype.teardown = function () {
|
|
9894
|
+
var _a, _b;
|
|
9895
|
+
this.stopReveal();
|
|
9896
|
+
if (this.audio) {
|
|
9897
|
+
this.audio.pause();
|
|
9898
|
+
this.audio.src = '';
|
|
9899
|
+
this.audio = null;
|
|
9900
|
+
}
|
|
9901
|
+
if (this.objectUrl) {
|
|
9902
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
9903
|
+
this.objectUrl = null;
|
|
9904
|
+
}
|
|
9905
|
+
this.building = [];
|
|
9906
|
+
this.queue = [];
|
|
9907
|
+
this.playIndex = 0;
|
|
9908
|
+
this.ended = false;
|
|
9909
|
+
this.playing = false;
|
|
9910
|
+
(_b = (_a = this.opts).onIdle) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
9911
|
+
};
|
|
9912
|
+
return AudioPlayer;
|
|
9913
|
+
}());
|
|
9914
|
+
|
|
9915
|
+
// CDN-hosted so consumers don't have to serve the WASM/model assets
|
|
9916
|
+
var VAD_ASSET_BASE = 'https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.30/dist/';
|
|
9917
|
+
var ORT_ASSET_BASE = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.27.0/dist/';
|
|
9918
|
+
// Clips under ~0.4s are noise, STT hallucinates words on them
|
|
9919
|
+
var MIN_SAMPLES = 6400;
|
|
9920
|
+
var VoiceMic = /** @class */ (function () {
|
|
9921
|
+
function VoiceMic(opts) {
|
|
9922
|
+
this.vad = null;
|
|
9923
|
+
this.paused = false;
|
|
9924
|
+
this.opts = opts;
|
|
9925
|
+
}
|
|
9926
|
+
VoiceMic.prototype.start = function () {
|
|
9927
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
9928
|
+
var _a, MicVAD_1, vadUtils_1, vadLog, _b;
|
|
9929
|
+
var _this = this;
|
|
9930
|
+
return __generator(this, function (_d) {
|
|
9931
|
+
switch (_d.label) {
|
|
9932
|
+
case 0:
|
|
9933
|
+
_d.trys.push([0, 4, , 5]);
|
|
9934
|
+
return [4 /*yield*/, import('./fthry_index.D7coWJsd.js').then(function (n) { return n.i; })];
|
|
9935
|
+
case 1:
|
|
9936
|
+
_a = _d.sent(), MicVAD_1 = _a.MicVAD, vadUtils_1 = _a.utils;
|
|
9937
|
+
return [4 /*yield*/, import('./fthry_logging.DWvo9mx5.js').then(function (n) { return n.l; })];
|
|
9938
|
+
case 2:
|
|
9939
|
+
vadLog = (_d.sent()).log;
|
|
9940
|
+
vadLog.debug = function () { return undefined; };
|
|
9941
|
+
_b = this;
|
|
9942
|
+
return [4 /*yield*/, MicVAD_1.new({
|
|
9943
|
+
baseAssetPath: VAD_ASSET_BASE,
|
|
9944
|
+
onnxWASMBasePath: ORT_ASSET_BASE,
|
|
9945
|
+
getStream: function () {
|
|
9946
|
+
return featheryWindow().navigator.mediaDevices.getUserMedia({
|
|
9947
|
+
audio: {
|
|
9948
|
+
echoCancellation: true,
|
|
9949
|
+
noiseSuppression: true,
|
|
9950
|
+
autoGainControl: true
|
|
9951
|
+
}
|
|
9952
|
+
});
|
|
9953
|
+
},
|
|
9954
|
+
onSpeechStart: function () {
|
|
9955
|
+
if (!_this.paused)
|
|
9956
|
+
_this.opts.onSpeechStart();
|
|
9957
|
+
},
|
|
9958
|
+
onSpeechEnd: function (audio) {
|
|
9959
|
+
if (_this.paused || audio.length < MIN_SAMPLES)
|
|
9960
|
+
return;
|
|
9961
|
+
var wav = new Blob([vadUtils_1.encodeWAV(audio)], {
|
|
9962
|
+
type: 'audio/wav'
|
|
9963
|
+
});
|
|
9964
|
+
_this.opts.onUtterance(wav);
|
|
9965
|
+
}
|
|
9966
|
+
})];
|
|
9967
|
+
case 3:
|
|
9968
|
+
_b.vad = _d.sent();
|
|
9969
|
+
this.vad.start();
|
|
9970
|
+
return [2 /*return*/, true];
|
|
9971
|
+
case 4:
|
|
9972
|
+
_d.sent();
|
|
9973
|
+
this.vad = null;
|
|
9974
|
+
return [2 /*return*/, false];
|
|
9975
|
+
case 5: return [2 /*return*/];
|
|
9976
|
+
}
|
|
9977
|
+
});
|
|
9978
|
+
});
|
|
9979
|
+
};
|
|
9980
|
+
// Hot only during the user's turn, off while the assistant thinks and speaks
|
|
9981
|
+
VoiceMic.prototype.pause = function () {
|
|
9982
|
+
var _a;
|
|
9983
|
+
this.paused = true;
|
|
9984
|
+
(_a = this.vad) === null || _a === void 0 ? void 0 : _a.pause();
|
|
9985
|
+
};
|
|
9986
|
+
VoiceMic.prototype.resume = function () {
|
|
9987
|
+
var _a;
|
|
9988
|
+
this.paused = false;
|
|
9989
|
+
(_a = this.vad) === null || _a === void 0 ? void 0 : _a.start();
|
|
9990
|
+
};
|
|
9991
|
+
VoiceMic.prototype.destroy = function () {
|
|
9992
|
+
var _a;
|
|
9993
|
+
(_a = this.vad) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
9994
|
+
this.vad = null;
|
|
9995
|
+
};
|
|
9996
|
+
return VoiceMic;
|
|
9997
|
+
}());
|
|
9998
|
+
function probeMicAvailable() {
|
|
9999
|
+
var _a;
|
|
10000
|
+
try {
|
|
10001
|
+
var md = (_a = featheryWindow().navigator) === null || _a === void 0 ? void 0 : _a.mediaDevices;
|
|
10002
|
+
return !!md && typeof md.getUserMedia === 'function';
|
|
10003
|
+
}
|
|
10004
|
+
catch (_b) {
|
|
10005
|
+
return false;
|
|
10006
|
+
}
|
|
10007
|
+
}
|
|
10008
|
+
|
|
10009
|
+
var nonWhitespace = function (text) { return text.replace(/\s/g, '').length; };
|
|
10010
|
+
function useAssistantVoice(_a) {
|
|
10011
|
+
var _this = this;
|
|
10012
|
+
var status = _a.status, sendMessage = _a.sendMessage, setMessages = _a.setMessages, ensureThread = _a.ensureThread, voiceActiveRef = _a.voiceActiveRef, pendingAudioRef = _a.pendingAudioRef, voiceDataRef = _a.voiceDataRef;
|
|
10013
|
+
var _b = __read(useState('idle'), 2), voiceState = _b[0], setVoiceStateRaw = _b[1];
|
|
10014
|
+
var _c = __read(useState(probeMicAvailable), 1), micAvailable = _c[0];
|
|
10015
|
+
// Characters of the reply whose audio clip has begun playing, driving the in-order text reveal
|
|
10016
|
+
var _d = __read(useState(0), 2), spokenChars = _d[0], setSpokenChars = _d[1];
|
|
10017
|
+
// True while this turn's audio is queued or playing, keeping the reveal paced after the stream closes
|
|
10018
|
+
var _e = __read(useState(false), 2), audioDraining = _e[0], setAudioDraining = _e[1];
|
|
10019
|
+
var stateRef = useRef('idle');
|
|
10020
|
+
var statusRef = useRef(status);
|
|
10021
|
+
var micRef = useRef(null);
|
|
10022
|
+
var playerRef = useRef(null);
|
|
10023
|
+
// Non-whitespace chars of clips already finished, progress adds the in-flight clip on top
|
|
10024
|
+
var baseRef = useRef(0);
|
|
10025
|
+
// Set when the user taps skip, muting the rest of this turn's audio
|
|
10026
|
+
var skippedRef = useRef(false);
|
|
10027
|
+
var setVoiceState = useCallback(function (next) {
|
|
10028
|
+
stateRef.current = next;
|
|
10029
|
+
setVoiceStateRaw(next);
|
|
10030
|
+
}, []);
|
|
10031
|
+
// Return to listening once the turn ends (done or errored) and audio has drained
|
|
10032
|
+
var maybeFinishSpeaking = useCallback(function () {
|
|
10033
|
+
var _a, _b;
|
|
10034
|
+
if (!voiceActiveRef.current)
|
|
10035
|
+
return;
|
|
10036
|
+
if (statusRef.current !== 'ready' && statusRef.current !== 'error')
|
|
10037
|
+
return;
|
|
10038
|
+
if ((_a = playerRef.current) === null || _a === void 0 ? void 0 : _a.isPlaying)
|
|
10039
|
+
return;
|
|
10040
|
+
if (stateRef.current === 'transcribing' ||
|
|
10041
|
+
stateRef.current === 'thinking' ||
|
|
10042
|
+
stateRef.current === 'speaking') {
|
|
10043
|
+
(_b = micRef.current) === null || _b === void 0 ? void 0 : _b.resume();
|
|
10044
|
+
setVoiceState('listening');
|
|
10045
|
+
}
|
|
10046
|
+
}, [voiceActiveRef, setVoiceState]);
|
|
10047
|
+
var handleUtterance = useCallback(function (wav) {
|
|
10048
|
+
var _a, _b;
|
|
10049
|
+
if (stateRef.current !== 'recording' && stateRef.current !== 'listening')
|
|
10050
|
+
return;
|
|
10051
|
+
pendingAudioRef.current = wav;
|
|
10052
|
+
(_a = micRef.current) === null || _a === void 0 ? void 0 : _a.pause();
|
|
10053
|
+
(_b = playerRef.current) === null || _b === void 0 ? void 0 : _b.skip();
|
|
10054
|
+
baseRef.current = 0;
|
|
10055
|
+
skippedRef.current = false;
|
|
10056
|
+
setSpokenChars(0);
|
|
10057
|
+
setVoiceState('transcribing');
|
|
10058
|
+
ensureThread();
|
|
10059
|
+
// Send an empty user message so the turn anchors on it like a typed one
|
|
10060
|
+
sendMessage({ text: '' });
|
|
10061
|
+
}, [pendingAudioRef, ensureThread, sendMessage, setVoiceState]);
|
|
10062
|
+
// Mic is created once, route through a ref to reach the current handler
|
|
10063
|
+
var handleUtteranceRef = useRef(handleUtterance);
|
|
10064
|
+
handleUtteranceRef.current = handleUtterance;
|
|
10065
|
+
var startVoice = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
10066
|
+
var player, mic, ok;
|
|
10067
|
+
return __generator(this, function (_a) {
|
|
10068
|
+
switch (_a.label) {
|
|
10069
|
+
case 0:
|
|
10070
|
+
if (stateRef.current !== 'idle' && stateRef.current !== 'error')
|
|
10071
|
+
return [2 /*return*/];
|
|
10072
|
+
player = new AudioPlayer({
|
|
10073
|
+
onSegmentStart: function () {
|
|
10074
|
+
if (voiceActiveRef.current)
|
|
10075
|
+
setVoiceState('speaking');
|
|
10076
|
+
},
|
|
10077
|
+
onSegmentProgress: function (text, fraction) {
|
|
10078
|
+
return setSpokenChars(baseRef.current + Math.floor(nonWhitespace(text) * fraction));
|
|
10079
|
+
},
|
|
10080
|
+
onSegmentEnd: function (text) {
|
|
10081
|
+
baseRef.current += nonWhitespace(text);
|
|
10082
|
+
setSpokenChars(baseRef.current);
|
|
10083
|
+
},
|
|
10084
|
+
onIdle: function () {
|
|
10085
|
+
setAudioDraining(false);
|
|
10086
|
+
maybeFinishSpeaking();
|
|
10087
|
+
}
|
|
10088
|
+
});
|
|
10089
|
+
mic = new VoiceMic({
|
|
10090
|
+
onSpeechStart: function () {
|
|
10091
|
+
if (stateRef.current === 'listening')
|
|
10092
|
+
setVoiceState('recording');
|
|
10093
|
+
},
|
|
10094
|
+
onUtterance: function (wav) { return handleUtteranceRef.current(wav); }
|
|
10095
|
+
});
|
|
10096
|
+
playerRef.current = player;
|
|
10097
|
+
micRef.current = mic;
|
|
10098
|
+
voiceActiveRef.current = true;
|
|
10099
|
+
// Stays 'loading' until the VAD assets finish downloading, only then is the mic live
|
|
10100
|
+
setVoiceState('loading');
|
|
10101
|
+
return [4 /*yield*/, mic.start()];
|
|
10102
|
+
case 1:
|
|
10103
|
+
ok = _a.sent();
|
|
10104
|
+
if (!ok) {
|
|
10105
|
+
voiceActiveRef.current = false;
|
|
10106
|
+
setVoiceState('error');
|
|
10107
|
+
}
|
|
10108
|
+
else {
|
|
10109
|
+
setVoiceState('listening');
|
|
10110
|
+
}
|
|
10111
|
+
return [2 /*return*/];
|
|
10112
|
+
}
|
|
10113
|
+
});
|
|
10114
|
+
}); }, [voiceActiveRef, maybeFinishSpeaking, setVoiceState]);
|
|
10115
|
+
var stopVoice = useCallback(function () {
|
|
10116
|
+
var _a, _b;
|
|
10117
|
+
(_a = micRef.current) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
10118
|
+
micRef.current = null;
|
|
10119
|
+
(_b = playerRef.current) === null || _b === void 0 ? void 0 : _b.skip();
|
|
10120
|
+
playerRef.current = null;
|
|
10121
|
+
pendingAudioRef.current = null;
|
|
10122
|
+
voiceActiveRef.current = false;
|
|
10123
|
+
setVoiceState('idle');
|
|
10124
|
+
}, [voiceActiveRef, pendingAudioRef, setVoiceState]);
|
|
10125
|
+
var skipSpeaking = useCallback(function () {
|
|
10126
|
+
var _a;
|
|
10127
|
+
if (stateRef.current !== 'speaking')
|
|
10128
|
+
return;
|
|
10129
|
+
skippedRef.current = true;
|
|
10130
|
+
(_a = playerRef.current) === null || _a === void 0 ? void 0 : _a.skip();
|
|
10131
|
+
// Audio is muted, so reveal the rest of the reply text immediately
|
|
10132
|
+
setSpokenChars(Number.MAX_SAFE_INTEGER);
|
|
10133
|
+
}, []);
|
|
10134
|
+
// Route the transient transcript + audio parts coming off the chat stream
|
|
10135
|
+
useEffect(function () {
|
|
10136
|
+
voiceDataRef.current = function (part) {
|
|
10137
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
10138
|
+
if (!voiceActiveRef.current)
|
|
10139
|
+
return;
|
|
10140
|
+
if (part.type === 'data-audio') {
|
|
10141
|
+
if ((_a = part.data) === null || _a === void 0 ? void 0 : _a.done)
|
|
10142
|
+
(_b = playerRef.current) === null || _b === void 0 ? void 0 : _b.end();
|
|
10143
|
+
else if (((_c = part.data) === null || _c === void 0 ? void 0 : _c.chunk) && !skippedRef.current)
|
|
10144
|
+
(_d = playerRef.current) === null || _d === void 0 ? void 0 : _d.pushChunk(part.data.chunk);
|
|
10145
|
+
}
|
|
10146
|
+
else if (part.type === 'data-segment' && ((_e = part.data) === null || _e === void 0 ? void 0 : _e.text)) {
|
|
10147
|
+
if (skippedRef.current)
|
|
10148
|
+
return;
|
|
10149
|
+
setAudioDraining(true);
|
|
10150
|
+
(_f = playerRef.current) === null || _f === void 0 ? void 0 : _f.pushSegment(part.data.text);
|
|
10151
|
+
}
|
|
10152
|
+
else if (part.type === 'data-transcript' && ((_g = part.data) === null || _g === void 0 ? void 0 : _g.text)) {
|
|
10153
|
+
var text_1 = part.data.text;
|
|
10154
|
+
// Transcript is in, the agent is now working on the reply
|
|
10155
|
+
if (stateRef.current === 'transcribing')
|
|
10156
|
+
setVoiceState('thinking');
|
|
10157
|
+
// Fill the empty user message this turn was sent with
|
|
10158
|
+
setMessages(function (prev) {
|
|
10159
|
+
for (var i = prev.length - 1; i >= 0; i--) {
|
|
10160
|
+
if (prev[i].role === 'user') {
|
|
10161
|
+
var next = __spreadArray([], __read(prev), false);
|
|
10162
|
+
next[i] = __assign(__assign({}, prev[i]), { parts: [{ type: 'text', text: text_1 }] });
|
|
10163
|
+
return next;
|
|
10164
|
+
}
|
|
10165
|
+
}
|
|
10166
|
+
return __spreadArray(__spreadArray([], __read(prev), false), [
|
|
10167
|
+
{ id: v4(), role: 'user', parts: [{ type: 'text', text: text_1 }] }
|
|
10168
|
+
], false);
|
|
10169
|
+
});
|
|
10170
|
+
}
|
|
10171
|
+
};
|
|
10172
|
+
return function () {
|
|
10173
|
+
voiceDataRef.current = null;
|
|
10174
|
+
};
|
|
10175
|
+
}, [voiceDataRef, voiceActiveRef, setMessages, setVoiceState]);
|
|
10176
|
+
useEffect(function () {
|
|
10177
|
+
statusRef.current = status;
|
|
10178
|
+
// A turn that ends with the user message still empty had no usable transcript, drop it
|
|
10179
|
+
if ((status === 'ready' || status === 'error') && voiceActiveRef.current) {
|
|
10180
|
+
setMessages(function (prev) {
|
|
10181
|
+
var _a;
|
|
10182
|
+
var last = prev[prev.length - 1];
|
|
10183
|
+
var emptyUser = (last === null || last === void 0 ? void 0 : last.role) === 'user' &&
|
|
10184
|
+
!((_a = last.parts) !== null && _a !== void 0 ? _a : []).some(function (p) { var _a; return p.type === 'text' && ((_a = p.text) !== null && _a !== void 0 ? _a : '').trim(); });
|
|
10185
|
+
return emptyUser ? prev.slice(0, -1) : prev;
|
|
10186
|
+
});
|
|
10187
|
+
}
|
|
10188
|
+
maybeFinishSpeaking();
|
|
10189
|
+
}, [status, maybeFinishSpeaking, voiceActiveRef, setMessages]);
|
|
10190
|
+
useEffect(function () { return function () { return stopVoice(); }; }, [stopVoice]);
|
|
10191
|
+
return {
|
|
10192
|
+
voiceState: voiceState,
|
|
10193
|
+
voiceActive: voiceState !== 'idle' && voiceState !== 'error',
|
|
10194
|
+
micAvailable: micAvailable,
|
|
10195
|
+
spokenChars: spokenChars,
|
|
10196
|
+
audioDraining: audioDraining,
|
|
10197
|
+
startVoice: startVoice,
|
|
10198
|
+
stopVoice: stopVoice,
|
|
10199
|
+
skipSpeaking: skipSpeaking
|
|
10200
|
+
};
|
|
10201
|
+
}
|
|
9765
10202
|
|
|
9766
10203
|
var DEFAULT_CHAT_COLOR = '#6b7280';
|
|
9767
10204
|
var GRAY_50 = '#f9fafb';
|
|
@@ -9838,10 +10275,6 @@ var TOOL_LABELS = {
|
|
|
9838
10275
|
running: 'Reading the form...',
|
|
9839
10276
|
done: 'Reviewed the form'
|
|
9840
10277
|
},
|
|
9841
|
-
getFuserSnapshot: {
|
|
9842
|
-
running: 'Looking up your submission...',
|
|
9843
|
-
done: 'Reviewed the submission'
|
|
9844
|
-
},
|
|
9845
10278
|
getExtractionSnapshot: {
|
|
9846
10279
|
running: 'Reading extraction setup...',
|
|
9847
10280
|
done: 'Reviewed the extraction setup'
|
|
@@ -9869,6 +10302,10 @@ var TOOL_LABELS = {
|
|
|
9869
10302
|
queryHub: {
|
|
9870
10303
|
running: 'Searching records on file...',
|
|
9871
10304
|
done: 'Searched the records on file'
|
|
10305
|
+
},
|
|
10306
|
+
querySubmissions: {
|
|
10307
|
+
running: 'Searching submissions...',
|
|
10308
|
+
done: 'Searched submissions'
|
|
9872
10309
|
}
|
|
9873
10310
|
};
|
|
9874
10311
|
function readPartType(part) {
|
|
@@ -10001,12 +10438,13 @@ var shimmerCss = {
|
|
|
10001
10438
|
}
|
|
10002
10439
|
};
|
|
10003
10440
|
var ToolChunk = function (_a) {
|
|
10004
|
-
var rows = _a.rows, followedByText = _a.followedByText, turnFinished = _a.turnFinished, _b = _a.
|
|
10441
|
+
var rows = _a.rows, followedByText = _a.followedByText, turnFinished = _a.turnFinished, _b = _a.audioPending, audioPending = _b === void 0 ? false : _b, _c = _a.linkColor, linkColor = _c === void 0 ? DEFAULT_CHAT_COLOR : _c, _d = _a.isFirstChunk, isFirstChunk = _d === void 0 ? false : _d;
|
|
10005
10442
|
var isRunning = rows.some(function (r) { return isRunningState(r.state); });
|
|
10006
|
-
|
|
10007
|
-
var
|
|
10443
|
+
// Voice: keep showing "Working on it" until the following reply's audio arrives
|
|
10444
|
+
var chunkDone = !isRunning && !audioPending && (followedByText || turnFinished);
|
|
10445
|
+
var shouldCollapse = !isRunning && !audioPending && followedByText;
|
|
10008
10446
|
var defaultExpanded = !shouldCollapse;
|
|
10009
|
-
var
|
|
10447
|
+
var _e = __read(useState(null), 2), override = _e[0], setOverride = _e[1];
|
|
10010
10448
|
var expanded = override !== null && override !== void 0 ? override : defaultExpanded;
|
|
10011
10449
|
var toggle = function () { return setOverride(!expanded); };
|
|
10012
10450
|
// Match the message bubble's horizontal padding
|
|
@@ -51304,14 +51742,14 @@ ${e}</tr>
|
|
|
51304
51742
|
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;
|
|
51305
51743
|
|
|
51306
51744
|
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===""?`
|
|
51307
|
-
`: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.
|
|
51745
|
+
`: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.DvjFQ-wQ.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(`
|
|
51308
51746
|
`).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===`
|
|
51309
51747
|
`)&&(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(`
|
|
51310
51748
|
`)},ct=e=>{let{headers:t,rows:o}=e,n=l=>{let i=false;for(let d of l)if(d===" "||d===`
|
|
51311
51749
|
`||d==="\r"){i=true;break}if(!i)return l;let c=[];for(let d of l)d===" "?c.push("\\t"):d===`
|
|
51312
51750
|
`?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(`
|
|
51313
51751
|
`)},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(`
|
|
51314
|
-
`)};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.BLTan-1s.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(`
|
|
51752
|
+
`)};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.CpHtnz5w.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(`
|
|
51315
51753
|
`),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(`
|
|
51316
51754
|
`);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,`
|
|
51317
51755
|
<!---->
|
|
@@ -52954,7 +53392,7 @@ var DEFAULT_MODES = [
|
|
|
52954
53392
|
var AssistantChat = function (_a) {
|
|
52955
53393
|
var _b, _c;
|
|
52956
53394
|
var _d;
|
|
52957
|
-
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.workflowActions, workflowActions =
|
|
53395
|
+
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;
|
|
52958
53396
|
var headers = useMemo(function () {
|
|
52959
53397
|
if (getJwt)
|
|
52960
53398
|
return function () { return ({ Authorization: "Bearer ".concat(getJwt()) }); };
|
|
@@ -52981,14 +53419,14 @@ var AssistantChat = function (_a) {
|
|
|
52981
53419
|
}
|
|
52982
53420
|
return body;
|
|
52983
53421
|
};
|
|
52984
|
-
var
|
|
52985
|
-
var
|
|
53422
|
+
var _j = __read(useState(false), 2), isOpen = _j[0], setIsOpen = _j[1];
|
|
53423
|
+
var _k = __read(useState(readStoredMode), 2), mode = _k[0], setModeState = _k[1];
|
|
52986
53424
|
var setMode = useCallback(function (next) {
|
|
52987
53425
|
setModeState(next);
|
|
52988
53426
|
writeStoredMode(next);
|
|
52989
53427
|
}, []);
|
|
52990
|
-
var
|
|
52991
|
-
var
|
|
53428
|
+
var _l = __read(useState(readStoredSidebarWidth), 2), sidebarWidth = _l[0], setSidebarWidth = _l[1];
|
|
53429
|
+
var _m = __read(useState(false), 2), isResizing = _m[0], setIsResizing = _m[1];
|
|
52992
53430
|
useEffect(function () {
|
|
52993
53431
|
var onWindowResize = function () {
|
|
52994
53432
|
setSidebarWidth(function (w) {
|
|
@@ -53034,17 +53472,20 @@ var AssistantChat = function (_a) {
|
|
|
53034
53472
|
setSidebarWidth(DEFAULT_SIDEBAR_WIDTH);
|
|
53035
53473
|
writeStoredSidebarWidth(DEFAULT_SIDEBAR_WIDTH);
|
|
53036
53474
|
}, []);
|
|
53037
|
-
var
|
|
53038
|
-
var
|
|
53039
|
-
var
|
|
53040
|
-
var
|
|
53041
|
-
var
|
|
53042
|
-
var
|
|
53043
|
-
var messagesEndRef = useRef(null);
|
|
53475
|
+
var _o = __read(useState(''), 2), input = _o[0], setInput = _o[1];
|
|
53476
|
+
var _p = __read(useState([]), 2), threads = _p[0], setThreads = _p[1];
|
|
53477
|
+
var _q = __read(useState(null), 2), activeThreadId = _q[0], setActiveThreadId = _q[1];
|
|
53478
|
+
var _r = __read(useState(false), 2), isDropdownOpen = _r[0], setIsDropdownOpen = _r[1];
|
|
53479
|
+
var _s = __read(useState(false), 2), isModeMenuOpen = _s[0], setIsModeMenuOpen = _s[1];
|
|
53480
|
+
var _t = __read(useState(null), 2), actionTooltip = _t[0], setActionTooltip = _t[1];
|
|
53044
53481
|
var messagesContainerRef = useRef(null);
|
|
53045
53482
|
// Suppresses auto-scroll when the user has scrolled up to read earlier content
|
|
53046
53483
|
var atBottomRef = useRef(true);
|
|
53047
53484
|
var BOTTOM_THRESHOLD_PX = 60;
|
|
53485
|
+
// Voice state read while sending a request and while routing its streamed data parts
|
|
53486
|
+
var voiceActiveRef = useRef(false);
|
|
53487
|
+
var pendingAudioRef = useRef(null);
|
|
53488
|
+
var voiceDataRef = useRef(null);
|
|
53048
53489
|
var handleMessagesScroll = useCallback(function () {
|
|
53049
53490
|
var el = messagesContainerRef.current;
|
|
53050
53491
|
if (!el)
|
|
@@ -53052,23 +53493,77 @@ var AssistantChat = function (_a) {
|
|
|
53052
53493
|
var distance = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
53053
53494
|
atBottomRef.current = distance < BOTTOM_THRESHOLD_PX;
|
|
53054
53495
|
}, []);
|
|
53496
|
+
// Keep the newest content anchored at the bottom, pushing older content up
|
|
53497
|
+
var pinToBottom = useCallback(function () {
|
|
53498
|
+
var el = messagesContainerRef.current;
|
|
53499
|
+
if (!el || !atBottomRef.current)
|
|
53500
|
+
return;
|
|
53501
|
+
el.scrollTop = el.scrollHeight;
|
|
53502
|
+
}, []);
|
|
53055
53503
|
var colors = useMemo(function () { return getChatColors(color || DEFAULT_CHAT_COLOR); }, [color]);
|
|
53056
53504
|
var makeChat = function (threadId, initialMessages, initialTitle) {
|
|
53057
53505
|
if (initialMessages === void 0) { initialMessages = []; }
|
|
53058
53506
|
var resolvedThreadId = threadId;
|
|
53059
53507
|
var titleGenerated = !!initialTitle;
|
|
53508
|
+
// Title the thread from its first user message, whether typed or a voice transcript
|
|
53509
|
+
var triggerTitle = function (userText) {
|
|
53510
|
+
if (titleGenerated || !userText)
|
|
53511
|
+
return;
|
|
53512
|
+
titleGenerated = true;
|
|
53513
|
+
var currentThreadId = resolvedThreadId || null;
|
|
53514
|
+
var titleContext = {};
|
|
53515
|
+
var targets = getTargets();
|
|
53516
|
+
if (targets.length > 0)
|
|
53517
|
+
titleContext.targets = targets;
|
|
53518
|
+
if (instanceId) {
|
|
53519
|
+
var stepKey = getCurrentStepKey(instanceId);
|
|
53520
|
+
if (stepKey)
|
|
53521
|
+
titleContext.current_step = stepKey;
|
|
53522
|
+
}
|
|
53523
|
+
generateThreadTitle(baseUrl, headers, currentThreadId, userText, titleContext).then(function (title) {
|
|
53524
|
+
if (!title)
|
|
53525
|
+
return;
|
|
53526
|
+
setThreads(function (prev) {
|
|
53527
|
+
return prev.map(function (t) {
|
|
53528
|
+
return t.id === currentThreadId || t.chat === chat ? __assign(__assign({}, t), { title: title }) : t;
|
|
53529
|
+
});
|
|
53530
|
+
});
|
|
53531
|
+
});
|
|
53532
|
+
};
|
|
53060
53533
|
var chatTransport = new DefaultChatTransport({
|
|
53061
53534
|
api: baseUrl,
|
|
53062
53535
|
headers: headers,
|
|
53063
53536
|
body: function () { return (__assign(__assign({}, buildChatBody()), { thread_id: resolvedThreadId || null })); },
|
|
53064
53537
|
fetch: function (url, init) { return __awaiter(void 0, void 0, void 0, function () {
|
|
53065
|
-
var res,
|
|
53066
|
-
var _a, _b, _c;
|
|
53067
|
-
return __generator(this, function (
|
|
53068
|
-
switch (
|
|
53069
|
-
case 0:
|
|
53538
|
+
var res, form, audio, threadId;
|
|
53539
|
+
var _a, _b, _c, _d;
|
|
53540
|
+
return __generator(this, function (_e) {
|
|
53541
|
+
switch (_e.label) {
|
|
53542
|
+
case 0:
|
|
53543
|
+
if (!voiceActiveRef.current) return [3 /*break*/, 2];
|
|
53544
|
+
form = new FormData();
|
|
53545
|
+
form.append('payload', typeof (init === null || init === void 0 ? void 0 : init.body) === 'string'
|
|
53546
|
+
? init.body
|
|
53547
|
+
: JSON.stringify((_a = init === null || init === void 0 ? void 0 : init.body) !== null && _a !== void 0 ? _a : {}));
|
|
53548
|
+
audio = pendingAudioRef.current;
|
|
53549
|
+
if (audio) {
|
|
53550
|
+
form.append('audio', audio, 'speech.wav');
|
|
53551
|
+
pendingAudioRef.current = null;
|
|
53552
|
+
}
|
|
53553
|
+
return [4 /*yield*/, fetch("".concat(baseUrl, "voice/turn/"), {
|
|
53554
|
+
method: 'POST',
|
|
53555
|
+
headers: headers(),
|
|
53556
|
+
body: form,
|
|
53557
|
+
signal: init === null || init === void 0 ? void 0 : init.signal
|
|
53558
|
+
})];
|
|
53070
53559
|
case 1:
|
|
53071
|
-
res =
|
|
53560
|
+
res = _e.sent();
|
|
53561
|
+
return [3 /*break*/, 4];
|
|
53562
|
+
case 2: return [4 /*yield*/, fetch(url, init)];
|
|
53563
|
+
case 3:
|
|
53564
|
+
res = _e.sent();
|
|
53565
|
+
_e.label = 4;
|
|
53566
|
+
case 4:
|
|
53072
53567
|
threadId = res.headers.get('X-Thread-Id');
|
|
53073
53568
|
if (threadId && !resolvedThreadId) {
|
|
53074
53569
|
resolvedThreadId = threadId;
|
|
@@ -53088,38 +53583,7 @@ var AssistantChat = function (_a) {
|
|
|
53088
53583
|
});
|
|
53089
53584
|
});
|
|
53090
53585
|
}
|
|
53091
|
-
|
|
53092
|
-
titleMessage = (_c = (_b = (_a = chat.messages.find(function (m) { return m.role === 'user'; })) === null || _a === void 0 ? void 0 : _a.parts) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.text;
|
|
53093
|
-
if (titleMessage) {
|
|
53094
|
-
titleGenerated = true;
|
|
53095
|
-
currentThreadId_1 = resolvedThreadId || threadId || null;
|
|
53096
|
-
titleContext = {};
|
|
53097
|
-
targets = getTargets();
|
|
53098
|
-
if (targets.length > 0)
|
|
53099
|
-
titleContext.targets = targets;
|
|
53100
|
-
if (instanceId) {
|
|
53101
|
-
stepKey = getCurrentStepKey(instanceId);
|
|
53102
|
-
if (stepKey)
|
|
53103
|
-
titleContext.current_step = stepKey;
|
|
53104
|
-
}
|
|
53105
|
-
generateThreadTitle(baseUrl, headers, currentThreadId_1, titleMessage, titleContext).then(function (title) {
|
|
53106
|
-
if (!title)
|
|
53107
|
-
return;
|
|
53108
|
-
if (currentThreadId_1) {
|
|
53109
|
-
setThreads(function (prev) {
|
|
53110
|
-
return prev.map(function (t) {
|
|
53111
|
-
return t.id === currentThreadId_1 ? __assign(__assign({}, t), { title: title }) : t;
|
|
53112
|
-
});
|
|
53113
|
-
});
|
|
53114
|
-
}
|
|
53115
|
-
else {
|
|
53116
|
-
setThreads(function (prev) {
|
|
53117
|
-
return prev.map(function (t) { return (t.chat === chat ? __assign(__assign({}, t), { title: title }) : t); });
|
|
53118
|
-
});
|
|
53119
|
-
}
|
|
53120
|
-
});
|
|
53121
|
-
}
|
|
53122
|
-
}
|
|
53586
|
+
triggerTitle((_d = (_c = (_b = chat.messages.find(function (m) { return m.role === 'user'; })) === null || _b === void 0 ? void 0 : _b.parts) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text);
|
|
53123
53587
|
return [2 /*return*/, res];
|
|
53124
53588
|
}
|
|
53125
53589
|
});
|
|
@@ -53129,6 +53593,12 @@ var AssistantChat = function (_a) {
|
|
|
53129
53593
|
transport: chatTransport,
|
|
53130
53594
|
messages: initialMessages,
|
|
53131
53595
|
sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
|
|
53596
|
+
onData: function (part) {
|
|
53597
|
+
var _a, _b;
|
|
53598
|
+
if ((part === null || part === void 0 ? void 0 : part.type) === 'data-transcript')
|
|
53599
|
+
triggerTitle((_a = part.data) === null || _a === void 0 ? void 0 : _a.text);
|
|
53600
|
+
(_b = voiceDataRef.current) === null || _b === void 0 ? void 0 : _b.call(voiceDataRef, part);
|
|
53601
|
+
},
|
|
53132
53602
|
onToolCall: function (_a) {
|
|
53133
53603
|
var toolCall = _a.toolCall;
|
|
53134
53604
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -53248,9 +53718,9 @@ var AssistantChat = function (_a) {
|
|
|
53248
53718
|
var readyChat = useMemo(function () { return makeChat(null); }, [headers, getTargets, getJwt]);
|
|
53249
53719
|
var activeThread = threads.find(function (t) { return t.id === activeThreadId; });
|
|
53250
53720
|
var activeChat = (_d = activeThread === null || activeThread === void 0 ? void 0 : activeThread.chat) !== null && _d !== void 0 ? _d : readyChat;
|
|
53251
|
-
var
|
|
53721
|
+
var _u = useChat({
|
|
53252
53722
|
chat: activeChat
|
|
53253
|
-
}), rawMessages =
|
|
53723
|
+
}), rawMessages = _u.messages, sendMessage = _u.sendMessage, setMessages = _u.setMessages, status = _u.status, error = _u.error;
|
|
53254
53724
|
var messages = useMemo(function () {
|
|
53255
53725
|
var e_1, _a;
|
|
53256
53726
|
var _b, _c;
|
|
@@ -53279,25 +53749,14 @@ var AssistantChat = function (_a) {
|
|
|
53279
53749
|
return combined;
|
|
53280
53750
|
}, [rawMessages]);
|
|
53281
53751
|
useEffect(function () {
|
|
53282
|
-
|
|
53283
|
-
|
|
53284
|
-
return;
|
|
53285
|
-
(_a = messagesEndRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: 'smooth' });
|
|
53286
|
-
}, [messages]);
|
|
53752
|
+
pinToBottom();
|
|
53753
|
+
}, [messages, pinToBottom]);
|
|
53287
53754
|
useEffect(function () {
|
|
53288
53755
|
if (status !== 'ready')
|
|
53289
53756
|
return;
|
|
53290
|
-
|
|
53291
|
-
return;
|
|
53292
|
-
var id = featheryWindow().requestAnimationFrame(function () {
|
|
53293
|
-
var _a;
|
|
53294
|
-
(_a = messagesEndRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
|
|
53295
|
-
behavior: 'smooth',
|
|
53296
|
-
block: 'end'
|
|
53297
|
-
});
|
|
53298
|
-
});
|
|
53757
|
+
var id = featheryWindow().requestAnimationFrame(pinToBottom);
|
|
53299
53758
|
return function () { return featheryWindow().cancelAnimationFrame(id); };
|
|
53300
|
-
}, [status]);
|
|
53759
|
+
}, [status, pinToBottom]);
|
|
53301
53760
|
var fetchThreads = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
53302
53761
|
var data;
|
|
53303
53762
|
return __generator(this, function (_a) {
|
|
@@ -53320,6 +53779,7 @@ var AssistantChat = function (_a) {
|
|
|
53320
53779
|
fetchThreads();
|
|
53321
53780
|
}, [isOpen, fetchThreads]);
|
|
53322
53781
|
var handleNewThread = function () {
|
|
53782
|
+
stopVoice();
|
|
53323
53783
|
atBottomRef.current = true;
|
|
53324
53784
|
var id = v4();
|
|
53325
53785
|
var now = new Date().toISOString();
|
|
@@ -53342,6 +53802,7 @@ var AssistantChat = function (_a) {
|
|
|
53342
53802
|
return __generator(this, function (_c) {
|
|
53343
53803
|
switch (_c.label) {
|
|
53344
53804
|
case 0:
|
|
53805
|
+
stopVoice();
|
|
53345
53806
|
atBottomRef.current = true;
|
|
53346
53807
|
if ((_a = threads.find(function (t) { return t.id === id; })) === null || _a === void 0 ? void 0 : _a.chat) {
|
|
53347
53808
|
setActiveThreadId(id);
|
|
@@ -53383,45 +53844,15 @@ var AssistantChat = function (_a) {
|
|
|
53383
53844
|
}
|
|
53384
53845
|
});
|
|
53385
53846
|
}); };
|
|
53386
|
-
|
|
53387
|
-
|
|
53388
|
-
|
|
53389
|
-
var now_1 = new Date().toISOString();
|
|
53390
|
-
if (!activeThreadId) {
|
|
53391
|
-
// First send, register readyChat as a real thread entry
|
|
53392
|
-
var id_1 = v4();
|
|
53393
|
-
setThreads(function (prev) { return __spreadArray([
|
|
53394
|
-
{
|
|
53395
|
-
id: id_1,
|
|
53396
|
-
title: 'New Chat',
|
|
53397
|
-
created_at: now_1,
|
|
53398
|
-
updated_at: now_1,
|
|
53399
|
-
isTemporary: true,
|
|
53400
|
-
chat: activeChat
|
|
53401
|
-
}
|
|
53402
|
-
], __read(prev), false); });
|
|
53403
|
-
setActiveThreadId(id_1);
|
|
53404
|
-
}
|
|
53405
|
-
else {
|
|
53406
|
-
if (activeThread && !activeThread.title) {
|
|
53407
|
-
setThreads(function (prev) { return __spreadArray([
|
|
53408
|
-
__assign(__assign({}, activeThread), { title: 'New Chat', updated_at: now_1 })
|
|
53409
|
-
], __read(prev.filter(function (t) { return t.id !== activeThreadId; })), false); });
|
|
53410
|
-
}
|
|
53411
|
-
}
|
|
53412
|
-
sendMessage({ text: input });
|
|
53413
|
-
setInput('');
|
|
53414
|
-
}
|
|
53415
|
-
};
|
|
53416
|
-
var handleWorkflowAction = function (action) {
|
|
53417
|
-
if (status !== 'ready')
|
|
53418
|
-
return;
|
|
53847
|
+
// First send of a thread registers it as a real entry, for both text and voice
|
|
53848
|
+
var registerActiveThread = useCallback(function () {
|
|
53849
|
+
atBottomRef.current = true;
|
|
53419
53850
|
var now = new Date().toISOString();
|
|
53420
53851
|
if (!activeThreadId) {
|
|
53421
|
-
var
|
|
53852
|
+
var id_1 = v4();
|
|
53422
53853
|
setThreads(function (prev) { return __spreadArray([
|
|
53423
53854
|
{
|
|
53424
|
-
id:
|
|
53855
|
+
id: id_1,
|
|
53425
53856
|
title: 'New Chat',
|
|
53426
53857
|
created_at: now,
|
|
53427
53858
|
updated_at: now,
|
|
@@ -53429,13 +53860,38 @@ var AssistantChat = function (_a) {
|
|
|
53429
53860
|
chat: activeChat
|
|
53430
53861
|
}
|
|
53431
53862
|
], __read(prev), false); });
|
|
53432
|
-
setActiveThreadId(
|
|
53863
|
+
setActiveThreadId(id_1);
|
|
53433
53864
|
}
|
|
53434
53865
|
else if (activeThread && !activeThread.title) {
|
|
53435
53866
|
setThreads(function (prev) { return __spreadArray([
|
|
53436
53867
|
__assign(__assign({}, activeThread), { title: 'New Chat', updated_at: now })
|
|
53437
53868
|
], __read(prev.filter(function (t) { return t.id !== activeThreadId; })), false); });
|
|
53438
53869
|
}
|
|
53870
|
+
}, [activeThreadId, activeThread, activeChat]);
|
|
53871
|
+
var _v = useAssistantVoice({
|
|
53872
|
+
status: status,
|
|
53873
|
+
sendMessage: function (message) { return sendMessage(message); },
|
|
53874
|
+
setMessages: setMessages,
|
|
53875
|
+
ensureThread: registerActiveThread,
|
|
53876
|
+
voiceActiveRef: voiceActiveRef,
|
|
53877
|
+
pendingAudioRef: pendingAudioRef,
|
|
53878
|
+
voiceDataRef: voiceDataRef
|
|
53879
|
+
}), voiceState = _v.voiceState, voiceActive = _v.voiceActive, micAvailable = _v.micAvailable, spokenChars = _v.spokenChars, audioDraining = _v.audioDraining, startVoice = _v.startVoice, stopVoice = _v.stopVoice, skipSpeaking = _v.skipSpeaking;
|
|
53880
|
+
// Voice: keep the view pinned to the bottom as the reply reveals during playback
|
|
53881
|
+
useEffect(function () {
|
|
53882
|
+
pinToBottom();
|
|
53883
|
+
}, [spokenChars, audioDraining, pinToBottom]);
|
|
53884
|
+
var handleSend = function () {
|
|
53885
|
+
if (input.trim() && status === 'ready') {
|
|
53886
|
+
registerActiveThread();
|
|
53887
|
+
sendMessage({ text: input });
|
|
53888
|
+
setInput('');
|
|
53889
|
+
}
|
|
53890
|
+
};
|
|
53891
|
+
var handleWorkflowAction = function (action) {
|
|
53892
|
+
if (status !== 'ready')
|
|
53893
|
+
return;
|
|
53894
|
+
registerActiveThread();
|
|
53439
53895
|
sendMessage({
|
|
53440
53896
|
parts: [
|
|
53441
53897
|
{ type: 'text', text: action.name },
|
|
@@ -53458,6 +53914,20 @@ var AssistantChat = function (_a) {
|
|
|
53458
53914
|
// Only show threads that have had at least one message sent
|
|
53459
53915
|
var visibleThreads = threads.filter(function (t) { return t.title; });
|
|
53460
53916
|
var isLoading = status === 'submitted' || status === 'streaming';
|
|
53917
|
+
var composerButtonCss = {
|
|
53918
|
+
padding: '10px',
|
|
53919
|
+
backgroundColor: colors.primary,
|
|
53920
|
+
color: 'white',
|
|
53921
|
+
border: 'none',
|
|
53922
|
+
borderRadius: '8px',
|
|
53923
|
+
cursor: 'pointer',
|
|
53924
|
+
display: 'flex',
|
|
53925
|
+
alignItems: 'center',
|
|
53926
|
+
justifyContent: 'center',
|
|
53927
|
+
transition: 'background-color 0.2s',
|
|
53928
|
+
':hover:not(:disabled)': { backgroundColor: colors.hover },
|
|
53929
|
+
':disabled': { backgroundColor: colors.disabled, cursor: 'not-allowed' }
|
|
53930
|
+
};
|
|
53461
53931
|
var layoutSide = mode === 'sidebar-left'
|
|
53462
53932
|
? 'left'
|
|
53463
53933
|
: mode === 'sidebar-right'
|
|
@@ -53609,7 +54079,10 @@ var AssistantChat = function (_a) {
|
|
|
53609
54079
|
justifyContent: 'center',
|
|
53610
54080
|
borderRadius: '4px',
|
|
53611
54081
|
':hover': { backgroundColor: 'rgba(255, 255, 255, 0.1)' }
|
|
53612
|
-
} }, { children: jsx(ModeTriggerIcon, {}) })), jsx("button", __assign({ type: 'button', onClick: function () {
|
|
54082
|
+
} }, { children: jsx(ModeTriggerIcon, {}) })), jsx("button", __assign({ type: 'button', onClick: function () {
|
|
54083
|
+
stopVoice();
|
|
54084
|
+
setIsOpen(false);
|
|
54085
|
+
}, css: {
|
|
53613
54086
|
background: 'none',
|
|
53614
54087
|
border: 'none',
|
|
53615
54088
|
color: 'white',
|
|
@@ -53757,9 +54230,10 @@ var AssistantChat = function (_a) {
|
|
|
53757
54230
|
fontSize: '14px',
|
|
53758
54231
|
marginTop: '40px'
|
|
53759
54232
|
} }, { children: "How can I help?" }))), messages.map(function (message, mIdx) {
|
|
54233
|
+
var _a;
|
|
53760
54234
|
return message.role === 'user' ? (
|
|
53761
|
-
//
|
|
53762
|
-
jsx("div", __assign({ css: {
|
|
54235
|
+
// Show the bubble only once its transcript lands, not as an empty placeholder
|
|
54236
|
+
((_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: {
|
|
53763
54237
|
display: 'flex',
|
|
53764
54238
|
justifyContent: 'flex-end'
|
|
53765
54239
|
} }, { children: jsx("div", __assign({ css: {
|
|
@@ -53776,14 +54250,34 @@ var AssistantChat = function (_a) {
|
|
|
53776
54250
|
.filter(function (part) { return !part.hidden; })
|
|
53777
54251
|
.map(function (part, index) {
|
|
53778
54252
|
return part.type === 'text' ? (jsx("span", { children: part.text }, index)) : null;
|
|
53779
|
-
}) })) }), message.id)) : (jsx(Fragment$2, { children: (function () {
|
|
54253
|
+
}) })) }), message.id)) : null) : (jsx(Fragment$2, { children: (function () {
|
|
53780
54254
|
var isLastMsg = mIdx === messages.length - 1;
|
|
53781
54255
|
var chunks = mergeAssistantParts(message.parts);
|
|
53782
54256
|
var lastPart = message.parts[message.parts.length - 1];
|
|
53783
54257
|
var turnFinished = !isLastMsg ||
|
|
53784
54258
|
(status === 'ready' && (lastPart === null || lastPart === void 0 ? void 0 : lastPart.type) === 'text');
|
|
54259
|
+
// Voice: reveal parts top-to-bottom, paced by how much audio has played
|
|
54260
|
+
var paceByAudio = voiceActiveRef.current &&
|
|
54261
|
+
isLastMsg &&
|
|
54262
|
+
(isLoading || audioDraining);
|
|
54263
|
+
var revealable = paceByAudio ? spokenChars : Infinity;
|
|
54264
|
+
var blocked = false;
|
|
53785
54265
|
return chunks.map(function (chunk, chunkIdx) {
|
|
54266
|
+
if (blocked)
|
|
54267
|
+
return null;
|
|
53786
54268
|
if (chunk.kind === 'text') {
|
|
54269
|
+
// Reveal up to the spoken budget, whitespace is free so the trailing "?" isn't held back
|
|
54270
|
+
var revealLen = 0;
|
|
54271
|
+
while (revealLen < chunk.text.length &&
|
|
54272
|
+
(revealable > 0 || /\s/.test(chunk.text[revealLen]))) {
|
|
54273
|
+
if (!/\s/.test(chunk.text[revealLen]))
|
|
54274
|
+
revealable -= 1;
|
|
54275
|
+
revealLen += 1;
|
|
54276
|
+
}
|
|
54277
|
+
if (revealLen < chunk.text.length)
|
|
54278
|
+
blocked = true;
|
|
54279
|
+
if (revealLen <= 0)
|
|
54280
|
+
return null;
|
|
53787
54281
|
return (jsx("div", __assign({ css: {
|
|
53788
54282
|
display: 'flex',
|
|
53789
54283
|
justifyContent: 'flex-start'
|
|
@@ -53797,37 +54291,50 @@ var AssistantChat = function (_a) {
|
|
|
53797
54291
|
color: GRAY_800,
|
|
53798
54292
|
overflowWrap: 'anywhere',
|
|
53799
54293
|
wordBreak: 'break-word'
|
|
53800
|
-
} }, { children: jsx(MarkdownText, { text: chunk.text, isStreaming: isLoading &&
|
|
54294
|
+
} }, { children: jsx(MarkdownText, { text: chunk.text.slice(0, revealLen), isStreaming: isLoading &&
|
|
53801
54295
|
isLastMsg &&
|
|
53802
54296
|
chunkIdx === chunks.length - 1 }) })) }), chunk.key));
|
|
53803
54297
|
}
|
|
53804
54298
|
var followedByText = chunks
|
|
53805
54299
|
.slice(chunkIdx + 1)
|
|
53806
54300
|
.some(function (c) { return c.kind === 'text'; });
|
|
54301
|
+
// Hold the tool's working state until the followup reply's audio begins
|
|
54302
|
+
var audioPending = paceByAudio && followedByText && revealable <= 0;
|
|
53807
54303
|
return (jsx("div", __assign({ css: {
|
|
53808
54304
|
display: 'flex',
|
|
53809
54305
|
justifyContent: 'flex-start',
|
|
53810
54306
|
maxWidth: '80%',
|
|
53811
54307
|
minWidth: 0
|
|
53812
|
-
} }, { children: jsx(ToolChunk, { rows: chunk.rows, turnFinished: turnFinished, followedByText: followedByText, linkColor: colors.primary, isFirstChunk: chunkIdx === 0 }) }), chunk.key));
|
|
54308
|
+
} }, { children: jsx(ToolChunk, { rows: chunk.rows, turnFinished: turnFinished, followedByText: followedByText, audioPending: audioPending, linkColor: colors.primary, isFirstChunk: chunkIdx === 0 }) }), chunk.key));
|
|
53813
54309
|
});
|
|
53814
54310
|
})() }, message.id));
|
|
53815
54311
|
}), (function () {
|
|
54312
|
+
var _a;
|
|
53816
54313
|
if (!isLoading)
|
|
53817
54314
|
return null;
|
|
53818
54315
|
var last = messages[messages.length - 1];
|
|
53819
54316
|
if (!last)
|
|
53820
54317
|
return null;
|
|
53821
|
-
|
|
53822
|
-
|
|
53823
|
-
var
|
|
53824
|
-
|
|
53825
|
-
|
|
53826
|
-
|
|
53827
|
-
|
|
53828
|
-
|
|
53829
|
-
|
|
53830
|
-
|
|
54318
|
+
var parts = last.parts || [];
|
|
54319
|
+
var isContent = function (p) {
|
|
54320
|
+
var _a;
|
|
54321
|
+
if ((p === null || p === void 0 ? void 0 : p.type) === 'text')
|
|
54322
|
+
return ((_a = p.text) !== null && _a !== void 0 ? _a : '').trim().length > 0;
|
|
54323
|
+
var t = typeof (p === null || p === void 0 ? void 0 : p.type) === 'string' ? p.type : '';
|
|
54324
|
+
return t.startsWith('tool-') || t === 'dynamic-tool';
|
|
54325
|
+
};
|
|
54326
|
+
var hasContent = parts.some(isContent);
|
|
54327
|
+
if (last.role === 'user') {
|
|
54328
|
+
// Wait for the user's (transcribed) message to be visible before showing the indicator
|
|
54329
|
+
if (!hasContent)
|
|
54330
|
+
return null;
|
|
54331
|
+
}
|
|
54332
|
+
else {
|
|
54333
|
+
// Voice: keep the indicator up while a leading reply is held waiting for its audio
|
|
54334
|
+
var held = voiceActiveRef.current &&
|
|
54335
|
+
spokenChars <= 0 &&
|
|
54336
|
+
((_a = parts.find(isContent)) === null || _a === void 0 ? void 0 : _a.type) === 'text';
|
|
54337
|
+
if (hasContent && !held)
|
|
53831
54338
|
return null;
|
|
53832
54339
|
}
|
|
53833
54340
|
return jsx(ToolChunkPlaceholder, {});
|
|
@@ -53837,7 +54344,7 @@ var AssistantChat = function (_a) {
|
|
|
53837
54344
|
backgroundColor: '#fef2f2',
|
|
53838
54345
|
color: '#dc2626',
|
|
53839
54346
|
fontSize: '14px'
|
|
53840
|
-
} }, { children: "Something went wrong. Please try again." })))
|
|
54347
|
+
} }, { children: "Something went wrong. Please try again." })))] })), workflowActions.length > 0 && (jsxs("div", __assign({ css: {
|
|
53841
54348
|
position: 'relative',
|
|
53842
54349
|
zIndex: 1,
|
|
53843
54350
|
borderTop: "1px solid ".concat(GRAY_200),
|
|
@@ -53888,7 +54395,27 @@ var AssistantChat = function (_a) {
|
|
|
53888
54395
|
padding: '12px 16px',
|
|
53889
54396
|
borderTop: "1px solid ".concat(GRAY_200),
|
|
53890
54397
|
backgroundColor: GRAY_50
|
|
53891
|
-
} }, { children: [
|
|
54398
|
+
} }, { children: [voiceActive ? (jsxs("button", __assign({ type: 'button', onClick: voiceState === 'speaking' ? skipSpeaking : undefined, css: {
|
|
54399
|
+
flex: 1,
|
|
54400
|
+
display: 'flex',
|
|
54401
|
+
alignItems: 'center',
|
|
54402
|
+
gap: '8px',
|
|
54403
|
+
padding: '10px 14px',
|
|
54404
|
+
border: "1px solid ".concat(GRAY_200),
|
|
54405
|
+
borderRadius: '8px',
|
|
54406
|
+
backgroundColor: 'white',
|
|
54407
|
+
fontSize: '14px',
|
|
54408
|
+
color: GRAY_800,
|
|
54409
|
+
cursor: voiceState === 'speaking' ? 'pointer' : 'default'
|
|
54410
|
+
} }, { children: [jsx(WaveformIcon, { css: { color: colors.primary } }), voiceState === 'loading'
|
|
54411
|
+
? 'Loading…'
|
|
54412
|
+
: voiceState === 'transcribing'
|
|
54413
|
+
? 'Transcribing…'
|
|
54414
|
+
: voiceState === 'thinking'
|
|
54415
|
+
? 'Thinking…'
|
|
54416
|
+
: voiceState === 'speaking'
|
|
54417
|
+
? 'Tap to skip'
|
|
54418
|
+
: 'Listening…'] }))) : (jsx("input", { type: 'text', value: input, onChange: function (e) { return setInput(e.target.value); }, onKeyDown: handleKeyDown, placeholder: 'Type a message...', css: {
|
|
53892
54419
|
flex: 1,
|
|
53893
54420
|
padding: '10px 14px',
|
|
53894
54421
|
border: "1px solid ".concat(GRAY_200),
|
|
@@ -53899,25 +54426,7 @@ var AssistantChat = function (_a) {
|
|
|
53899
54426
|
':focus': {
|
|
53900
54427
|
borderColor: colors.primary
|
|
53901
54428
|
}
|
|
53902
|
-
} }), jsx("button", __assign({ type: 'button', onClick: handleSend, disabled: isLoading || !input.trim(), css: {
|
|
53903
|
-
padding: '10px',
|
|
53904
|
-
backgroundColor: colors.primary,
|
|
53905
|
-
color: 'white',
|
|
53906
|
-
border: 'none',
|
|
53907
|
-
borderRadius: '8px',
|
|
53908
|
-
cursor: 'pointer',
|
|
53909
|
-
display: 'flex',
|
|
53910
|
-
alignItems: 'center',
|
|
53911
|
-
justifyContent: 'center',
|
|
53912
|
-
transition: 'background-color 0.2s',
|
|
53913
|
-
':hover:not(:disabled)': {
|
|
53914
|
-
backgroundColor: colors.hover
|
|
53915
|
-
},
|
|
53916
|
-
':disabled': {
|
|
53917
|
-
backgroundColor: colors.disabled,
|
|
53918
|
-
cursor: 'not-allowed'
|
|
53919
|
-
}
|
|
53920
|
-
} }, { children: jsx(SendIcon, {}) }))] }))] })));
|
|
54429
|
+
} })), 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, {}) })))] }))] })));
|
|
53921
54430
|
};
|
|
53922
54431
|
|
|
53923
54432
|
var AssistantChat$1 = /*#__PURE__*/Object.freeze({
|