langgraph-ui-components 0.0.17 → 0.0.18
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/dist/index.es100.js +20 -354
- package/dist/index.es100.js.map +1 -1
- package/dist/index.es101.js +172 -127
- package/dist/index.es101.js.map +1 -1
- package/dist/index.es102.js +231 -60
- package/dist/index.es102.js.map +1 -1
- package/dist/index.es103.js +352 -34
- package/dist/index.es103.js.map +1 -1
- package/dist/index.es104.js +134 -34
- package/dist/index.es104.js.map +1 -1
- package/dist/index.es105.js +65 -161
- package/dist/index.es105.js.map +1 -1
- package/dist/index.es106.js +30 -196
- package/dist/index.es106.js.map +1 -1
- package/dist/index.es107.js +36 -13
- package/dist/index.es107.js.map +1 -1
- package/dist/index.es108.js +162 -26
- package/dist/index.es108.js.map +1 -1
- package/dist/index.es109.js +196 -27
- package/dist/index.es109.js.map +1 -1
- package/dist/index.es110.js +13 -3156
- package/dist/index.es110.js.map +1 -1
- package/dist/index.es111.js +27 -34
- package/dist/index.es111.js.map +1 -1
- package/dist/index.es112.js +34 -5
- package/dist/index.es112.js.map +1 -1
- package/dist/index.es113.js +3145 -61
- package/dist/index.es113.js.map +1 -1
- package/dist/index.es114.js +33 -33
- package/dist/index.es114.js.map +1 -1
- package/dist/index.es115.js +5 -21
- package/dist/index.es115.js.map +1 -1
- package/dist/index.es116.js +69 -64
- package/dist/index.es116.js.map +1 -1
- package/dist/index.es117.js +37 -3
- package/dist/index.es117.js.map +1 -1
- package/dist/index.es12.js +1 -1
- package/dist/index.es121.js +9 -9
- package/dist/index.es122.js +1 -1
- package/dist/index.es126.js +1 -1
- package/dist/index.es128.js +2 -2
- package/dist/index.es13.js +9 -3
- package/dist/index.es13.js.map +1 -1
- package/dist/index.es136.js +1 -1
- package/dist/index.es137.js +6 -6
- package/dist/index.es139.js +1 -1
- package/dist/index.es14.js +6 -6
- package/dist/index.es140.js +1 -1
- package/dist/index.es143.js +1 -1
- package/dist/index.es144.js +1 -1
- package/dist/index.es145.js +1 -1
- package/dist/index.es146.js +1 -1
- package/dist/index.es147.js +1 -1
- package/dist/index.es148.js +1 -1
- package/dist/index.es149.js +1 -1
- package/dist/index.es150.js +1 -1
- package/dist/index.es151.js +1 -1
- package/dist/index.es152.js +1 -1
- package/dist/index.es153.js +1 -1
- package/dist/index.es154.js +1 -1
- package/dist/index.es155.js +1 -1
- package/dist/index.es156.js +1 -1
- package/dist/index.es157.js +1 -1
- package/dist/index.es158.js +1 -1
- package/dist/index.es159.js +1 -1
- package/dist/index.es16.js +10 -5
- package/dist/index.es16.js.map +1 -1
- package/dist/index.es160.js +1 -1
- package/dist/index.es161.js +1 -1
- package/dist/index.es162.js +1 -1
- package/dist/index.es163.js +1 -1
- package/dist/index.es164.js +1 -1
- package/dist/index.es165.js +1 -1
- package/dist/index.es166.js +1 -1
- package/dist/index.es167.js +1 -1
- package/dist/index.es168.js +1 -1
- package/dist/index.es169.js +1 -1
- package/dist/index.es170.js +1 -1
- package/dist/index.es171.js +1 -1
- package/dist/index.es172.js +1 -1
- package/dist/index.es173.js +1 -1
- package/dist/index.es174.js +1 -1
- package/dist/index.es175.js +1 -1
- package/dist/index.es176.js +1 -1
- package/dist/index.es177.js +1 -1
- package/dist/index.es178.js +1 -1
- package/dist/index.es179.js +1 -1
- package/dist/index.es18.js +7 -7
- package/dist/index.es180.js +1 -1
- package/dist/index.es181.js +1 -1
- package/dist/index.es182.js +1 -1
- package/dist/index.es183.js +1 -1
- package/dist/index.es184.js +1 -1
- package/dist/index.es185.js +1 -1
- package/dist/index.es186.js +1 -1
- package/dist/index.es187.js +1 -1
- package/dist/index.es191.js +2 -56
- package/dist/index.es191.js.map +1 -1
- package/dist/index.es192.js +2 -100
- package/dist/index.es192.js.map +1 -1
- package/dist/index.es193.js +2 -191
- package/dist/index.es193.js.map +1 -1
- package/dist/index.es194.js +2 -110
- package/dist/index.es194.js.map +1 -1
- package/dist/index.es195.js +2 -35
- package/dist/index.es195.js.map +1 -1
- package/dist/index.es196.js +2 -10
- package/dist/index.es196.js.map +1 -1
- package/dist/index.es197.js +2 -11
- package/dist/index.es197.js.map +1 -1
- package/dist/index.es198.js +2 -12
- package/dist/index.es198.js.map +1 -1
- package/dist/index.es199.js +2 -91
- package/dist/index.es199.js.map +1 -1
- package/dist/index.es2.js +96 -11
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es20.js +2 -2
- package/dist/index.es200.js +2 -275
- package/dist/index.es200.js.map +1 -1
- package/dist/index.es201.js +2 -2
- package/dist/index.es202.js +2 -164
- package/dist/index.es202.js.map +1 -1
- package/dist/index.es203.js +2 -51
- package/dist/index.es203.js.map +1 -1
- package/dist/index.es204.js +2 -40
- package/dist/index.es204.js.map +1 -1
- package/dist/index.es205.js +2 -35
- package/dist/index.es205.js.map +1 -1
- package/dist/index.es206.js +2 -40
- package/dist/index.es206.js.map +1 -1
- package/dist/index.es207.js +2 -24
- package/dist/index.es207.js.map +1 -1
- package/dist/index.es208.js +2 -591
- package/dist/index.es208.js.map +1 -1
- package/dist/index.es209.js +2 -125
- package/dist/index.es209.js.map +1 -1
- package/dist/index.es210.js +2 -164
- package/dist/index.es210.js.map +1 -1
- package/dist/index.es211.js +2 -2
- package/dist/index.es212.js +2 -2
- package/dist/index.es213.js +2 -2
- package/dist/index.es214.js +2 -2
- package/dist/index.es215.js +2 -2
- package/dist/index.es216.js +2 -2
- package/dist/index.es217.js +2 -2
- package/dist/index.es218.js +2 -2
- package/dist/index.es219.js +2 -2
- package/dist/index.es22.js +35 -119
- package/dist/index.es22.js.map +1 -1
- package/dist/index.es220.js +2 -2
- package/dist/index.es221.js +2 -2
- package/dist/index.es222.js +2 -2
- package/dist/index.es223.js +2 -2
- package/dist/index.es224.js +2 -2
- package/dist/index.es225.js +2 -2
- package/dist/index.es226.js +2 -2
- package/dist/index.es227.js +2 -2
- package/dist/index.es228.js +2 -2
- package/dist/index.es229.js +2 -2
- package/dist/index.es23.js +66 -36
- package/dist/index.es23.js.map +1 -1
- package/dist/index.es230.js +2 -2
- package/dist/index.es231.js +2 -2
- package/dist/index.es232.js +2 -2
- package/dist/index.es233.js +2 -2
- package/dist/index.es234.js +2 -2
- package/dist/index.es235.js +2 -2
- package/dist/index.es236.js +56 -2
- package/dist/index.es236.js.map +1 -1
- package/dist/index.es237.js +100 -2
- package/dist/index.es237.js.map +1 -1
- package/dist/index.es238.js +191 -2
- package/dist/index.es238.js.map +1 -1
- package/dist/index.es239.js +110 -2
- package/dist/index.es239.js.map +1 -1
- package/dist/index.es24.js +30 -64
- package/dist/index.es24.js.map +1 -1
- package/dist/index.es240.js +35 -2
- package/dist/index.es240.js.map +1 -1
- package/dist/index.es241.js +10 -2
- package/dist/index.es241.js.map +1 -1
- package/dist/index.es242.js +11 -2
- package/dist/index.es242.js.map +1 -1
- package/dist/index.es243.js +12 -2
- package/dist/index.es243.js.map +1 -1
- package/dist/index.es244.js +91 -2
- package/dist/index.es244.js.map +1 -1
- package/dist/index.es245.js +275 -2
- package/dist/index.es245.js.map +1 -1
- package/dist/index.es246.js +2 -2
- package/dist/index.es247.js +164 -2
- package/dist/index.es247.js.map +1 -1
- package/dist/index.es248.js +51 -2
- package/dist/index.es248.js.map +1 -1
- package/dist/index.es249.js +40 -2
- package/dist/index.es249.js.map +1 -1
- package/dist/index.es25.js +120 -29
- package/dist/index.es25.js.map +1 -1
- package/dist/index.es250.js +35 -2
- package/dist/index.es250.js.map +1 -1
- package/dist/index.es251.js +40 -2
- package/dist/index.es251.js.map +1 -1
- package/dist/index.es252.js +24 -2
- package/dist/index.es252.js.map +1 -1
- package/dist/index.es253.js +591 -2
- package/dist/index.es253.js.map +1 -1
- package/dist/index.es254.js +125 -2
- package/dist/index.es254.js.map +1 -1
- package/dist/index.es255.js +164 -2
- package/dist/index.es255.js.map +1 -1
- package/dist/index.es256.js +2 -2
- package/dist/index.es26.js +102 -123
- package/dist/index.es26.js.map +1 -1
- package/dist/index.es267.js +1 -1
- package/dist/index.es27.js +66 -101
- package/dist/index.es27.js.map +1 -1
- package/dist/index.es28.js +139 -66
- package/dist/index.es28.js.map +1 -1
- package/dist/index.es29.js +295 -131
- package/dist/index.es29.js.map +1 -1
- package/dist/index.es30.js +114 -298
- package/dist/index.es30.js.map +1 -1
- package/dist/index.es305.js +1 -1
- package/dist/index.es307.js +1 -1
- package/dist/index.es319.js +1 -1
- package/dist/index.es32.js +7 -7
- package/dist/index.es33.js +1 -1
- package/dist/index.es339.js +2 -2
- package/dist/index.es36.js +4 -4
- package/dist/index.es37.js +289 -114
- package/dist/index.es37.js.map +1 -1
- package/dist/index.es38.js +44 -70
- package/dist/index.es38.js.map +1 -1
- package/dist/index.es39.js +145 -19
- package/dist/index.es39.js.map +1 -1
- package/dist/index.es40.js +5 -261
- package/dist/index.es40.js.map +1 -1
- package/dist/index.es41.js +247 -38
- package/dist/index.es41.js.map +1 -1
- package/dist/index.es42.js +110 -207
- package/dist/index.es42.js.map +1 -1
- package/dist/index.es43.js +68 -64
- package/dist/index.es43.js.map +1 -1
- package/dist/index.es44.js +17 -141
- package/dist/index.es44.js.map +1 -1
- package/dist/index.es45.js +251 -14
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +36 -223
- package/dist/index.es46.js.map +1 -1
- package/dist/index.es47.js +213 -7
- package/dist/index.es47.js.map +1 -1
- package/dist/index.es48.js +55 -1180
- package/dist/index.es48.js.map +1 -1
- package/dist/index.es49.js +141 -6
- package/dist/index.es49.js.map +1 -1
- package/dist/index.es50.js +21 -144
- package/dist/index.es50.js.map +1 -1
- package/dist/index.es51.js +230 -5
- package/dist/index.es51.js.map +1 -1
- package/dist/index.es52.js +8 -292
- package/dist/index.es52.js.map +1 -1
- package/dist/index.es53.js +1190 -43
- package/dist/index.es53.js.map +1 -1
- package/dist/index.es54.js +7 -144
- package/dist/index.es54.js.map +1 -1
- package/dist/index.es55.js +136 -241
- package/dist/index.es55.js.map +1 -1
- package/dist/index.es59.js +1 -1
- package/dist/index.es6.js +21 -8
- package/dist/index.es6.js.map +1 -1
- package/dist/index.es60.js +1 -1
- package/dist/index.es61.js +1 -1
- package/dist/index.es62.js +7 -7
- package/dist/index.es67.js +3 -3
- package/dist/index.es69.js +2 -2
- package/dist/index.es70.js +1 -1
- package/dist/index.es71.js +1 -1
- package/dist/index.es72.js +1 -1
- package/dist/index.es77.js +7 -7
- package/dist/index.es78.js +17 -17
- package/dist/index.es82.js +1 -1
- package/dist/index.es83.js +4 -4
- package/dist/index.es84.js +20 -11
- package/dist/index.es84.js.map +1 -1
- package/dist/index.es85.js +66 -38
- package/dist/index.es85.js.map +1 -1
- package/dist/index.es86.js +3 -34
- package/dist/index.es86.js.map +1 -1
- package/dist/index.es87.js +10 -230
- package/dist/index.es87.js.map +1 -1
- package/dist/index.es88.js +39 -29
- package/dist/index.es88.js.map +1 -1
- package/dist/index.es89.js +32 -73
- package/dist/index.es89.js.map +1 -1
- package/dist/index.es90.js +200 -44
- package/dist/index.es90.js.map +1 -1
- package/dist/index.es91.js +15 -37
- package/dist/index.es91.js.map +1 -1
- package/dist/index.es92.js +71 -26
- package/dist/index.es92.js.map +1 -1
- package/dist/index.es93.js +72 -39
- package/dist/index.es93.js.map +1 -1
- package/dist/index.es94.js +48 -53
- package/dist/index.es94.js.map +1 -1
- package/dist/index.es95.js +30 -13
- package/dist/index.es95.js.map +1 -1
- package/dist/index.es96.js +40 -134
- package/dist/index.es96.js.map +1 -1
- package/dist/index.es97.js +56 -20
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +11 -180
- package/dist/index.es98.js.map +1 -1
- package/dist/index.es99.js +129 -233
- package/dist/index.es99.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.es26.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es26.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index.es26.js","sources":["../src/components/Thinking.tsx"],"sourcesContent":["export default function Thinking() {\n return (\n <>\n <style>{`\n .loader-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n color: white;\n user-select: none;\n gap: 10px;\n }\n\n .loader {\n width: 20px;\n height: 20px;\n aspect-ratio: 1 / 1;\n border-radius: 50%;\n background-color: transparent;\n animation: loader-rotate 1.5s linear infinite;\n z-index: 0;\n }\n\n @keyframes loader-rotate {\n 0% {\n transform: rotate(90deg);\n box-shadow:\n 0 1px 1px 0 #fff inset,\n 0 3px 5px 0 #ff5f9f inset,\n 0 4px 4px 0 #0693ff inset;\n }\n 50% {\n transform: rotate(270deg);\n background: #7c0911;\n box-shadow:\n 0 1px 1px 0 #fff inset,\n 0 3px 5px 0 #d60a47 inset,\n 0 4px 4px 0 #fbef19 inset;\n }\n 100% {\n transform: rotate(450deg);\n box-shadow:\n 0 1px 1px 0 #fff inset,\n 0 3px 5px 0 #ff5f9f inset,\n 0 4px 4px 0 #28a9ff inset;\n }\n }\n\n .letter-wrapper {\n display: flex;\n gap: 1px;\n }\n\n .loader-letter {\n display: inline-block;\n opacity: 0.4;\n transform: translateY(0);\n animation: loader-letter-anim 2s infinite;\n z-index: 1;\n border-radius: 50ch;\n border: none;\n }\n\n .loader-letter:nth-child(1) { animation-delay: 0s; }\n .loader-letter:nth-child(2) { animation-delay: 0.1s; }\n .loader-letter:nth-child(3) { animation-delay: 0.2s; }\n .loader-letter:nth-child(4) { animation-delay: 0.3s; }\n .loader-letter:nth-child(5) { animation-delay: 0.4s; }\n .loader-letter:nth-child(6) { animation-delay: 0.5s; }\n .loader-letter:nth-child(7) { animation-delay: 0.6s; }\n .loader-letter:nth-child(8) { animation-delay: 0.7s; }\n\n @keyframes loader-letter-anim {\n 0%, 100% {\n opacity: 0.4;\n transform: translateY(0);\n }\n 20% {\n opacity: 1;\n transform: scale(1.15);\n }\n 40% {\n opacity: 0.7;\n transform: translateY(0);\n }\n }\n `}</style>\n <div className=\"loader-wrapper\">\n <div className=\"loader\"></div>\n <div className=\"letter-wrapper\">\n <span className=\"loader-letter\">T</span>\n <span className=\"loader-letter\">h</span>\n <span className=\"loader-letter\">i</span>\n <span className=\"loader-letter\">n</span>\n <span className=\"loader-letter\">k</span>\n <span className=\"loader-letter\">i</span>\n <span className=\"loader-letter\">n</span>\n <span className=\"loader-letter\">g</span>\n </div>\n </div>\n </>\n )\n}\n"],"names":[],"mappings":";AAAA,SAAwB,WAAW;AAC/B,SACI,qBAAA,UAAA,EACI,UAAA;AAAA,IAAA,oBAAC,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAoFN;AAAA,IACF,qBAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,MAAA,oBAAC,OAAA,EAAI,WAAU,SAAA,CAAS;AAAA,MACxB,qBAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,KAAC;AAAA,QACjC,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,IAAA,CAAC;AAAA,MAAA,EAAA,CACrC;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
package/dist/index.es267.js
CHANGED
package/dist/index.es27.js
CHANGED
|
@@ -1,107 +1,72 @@
|
|
|
1
|
-
import { jsxs,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
0 4px 4px 0 #28a9ff inset;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.letter-wrapper {
|
|
51
|
-
display: flex;
|
|
52
|
-
gap: 1px;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.loader-letter {
|
|
56
|
-
display: inline-block;
|
|
57
|
-
opacity: 0.4;
|
|
58
|
-
transform: translateY(0);
|
|
59
|
-
animation: loader-letter-anim 2s infinite;
|
|
60
|
-
z-index: 1;
|
|
61
|
-
border-radius: 50ch;
|
|
62
|
-
border: none;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.loader-letter:nth-child(1) { animation-delay: 0s; }
|
|
66
|
-
.loader-letter:nth-child(2) { animation-delay: 0.1s; }
|
|
67
|
-
.loader-letter:nth-child(3) { animation-delay: 0.2s; }
|
|
68
|
-
.loader-letter:nth-child(4) { animation-delay: 0.3s; }
|
|
69
|
-
.loader-letter:nth-child(5) { animation-delay: 0.4s; }
|
|
70
|
-
.loader-letter:nth-child(6) { animation-delay: 0.5s; }
|
|
71
|
-
.loader-letter:nth-child(7) { animation-delay: 0.6s; }
|
|
72
|
-
.loader-letter:nth-child(8) { animation-delay: 0.7s; }
|
|
73
|
-
|
|
74
|
-
@keyframes loader-letter-anim {
|
|
75
|
-
0%, 100% {
|
|
76
|
-
opacity: 0.4;
|
|
77
|
-
transform: translateY(0);
|
|
78
|
-
}
|
|
79
|
-
20% {
|
|
80
|
-
opacity: 1;
|
|
81
|
-
transform: scale(1.15);
|
|
82
|
-
}
|
|
83
|
-
40% {
|
|
84
|
-
opacity: 0.7;
|
|
85
|
-
transform: translateY(0);
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { getContentString } from "./index.es22.js";
|
|
3
|
+
import React__default, { useState } from "react";
|
|
4
|
+
function ToolCallFunctions({ title, toolMessages }) {
|
|
5
|
+
const [open, setOpen] = useState(false);
|
|
6
|
+
if (!toolMessages || toolMessages.length === 0) return null;
|
|
7
|
+
return /* @__PURE__ */ jsxs(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
id: "accordion-collapse",
|
|
11
|
+
"data-accordion": "collapse",
|
|
12
|
+
className: "w-full rounded-base overflow-hidden shadow-xs border rounded-xl border-zinc-800 max-w-[90%] min-w-25",
|
|
13
|
+
children: [
|
|
14
|
+
/* @__PURE__ */ jsx("h2", { id: "accordion-collapse-heading-1", children: /* @__PURE__ */ jsxs(
|
|
15
|
+
"button",
|
|
16
|
+
{
|
|
17
|
+
type: "button",
|
|
18
|
+
className: "flex items-center justify-between w-full p-2 font-medium gap-3 text-body border-0 outline-none ring-0 appearance-none bg-transparent",
|
|
19
|
+
onClick: () => setOpen((v) => !v),
|
|
20
|
+
"aria-expanded": open,
|
|
21
|
+
"aria-controls": "accordion-collapse-body-1",
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
24
|
+
"🔷 ",
|
|
25
|
+
title
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ jsx(
|
|
28
|
+
"svg",
|
|
29
|
+
{
|
|
30
|
+
"data-accordion-icon": true,
|
|
31
|
+
className: `w-5 h-5 shrink-0 transition-transform ${open ? "rotate-0" : "rotate-180"}`,
|
|
32
|
+
"aria-hidden": "true",
|
|
33
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
34
|
+
width: "24",
|
|
35
|
+
height: "24",
|
|
36
|
+
fill: "none",
|
|
37
|
+
viewBox: "0 0 24 24",
|
|
38
|
+
children: /* @__PURE__ */ jsx(
|
|
39
|
+
"path",
|
|
40
|
+
{
|
|
41
|
+
stroke: "currentColor",
|
|
42
|
+
strokeLinecap: "round",
|
|
43
|
+
strokeLinejoin: "round",
|
|
44
|
+
strokeWidth: "2",
|
|
45
|
+
d: "m5 15 7-7 7 7"
|
|
86
46
|
}
|
|
47
|
+
)
|
|
87
48
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
/* @__PURE__ */ jsx(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
49
|
+
)
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
) }),
|
|
53
|
+
/* @__PURE__ */ jsx(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
id: "accordion-collapse-body-1",
|
|
57
|
+
className: `${open ? "" : "hidden"}`,
|
|
58
|
+
"aria-labelledby": "accordion-collapse-heading-1",
|
|
59
|
+
children: /* @__PURE__ */ jsx("div", { className: "md:p-5 text-left space-y-3", children: toolMessages.map((toolMsg) => /* @__PURE__ */ jsx("div", { className: "border-zinc-700", children: /* @__PURE__ */ jsx("p", { className: "text-body text-sm", children: toolMsg.content ? getContentString(toolMsg.content) : "" }) }, toolMsg.id)) })
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
);
|
|
103
65
|
}
|
|
66
|
+
const ToolCallFunctions$1 = React__default.memo(ToolCallFunctions, (prevProps, nextProps) => {
|
|
67
|
+
return prevProps.toolMessages?.length === nextProps.toolMessages?.length;
|
|
68
|
+
});
|
|
104
69
|
export {
|
|
105
|
-
|
|
70
|
+
ToolCallFunctions$1 as default
|
|
106
71
|
};
|
|
107
72
|
//# sourceMappingURL=index.es27.js.map
|
package/dist/index.es27.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es27.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index.es27.js","sources":["../src/components/ToolCallFunctions.tsx"],"sourcesContent":["import { getContentString } from \"@/utils/utils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport React, { useState } from \"react\";\n\nfunction ToolCallFunctions({ title, toolMessages }: {\n title?: string;\n toolMessages: Message[];\n}) {\n const [open, setOpen] = useState(false);\n\n // Only render if there are tool messages\n if (!toolMessages || toolMessages.length === 0) return null;\n\n return (\n <div\n id=\"accordion-collapse\"\n data-accordion=\"collapse\"\n className=\"w-full rounded-base overflow-hidden shadow-xs border rounded-xl border-zinc-800 max-w-[90%] min-w-25\"\n >\n <h2 id=\"accordion-collapse-heading-1\">\n <button\n type=\"button\"\n className=\"flex items-center justify-between w-full p-2 font-medium gap-3 text-body border-0 outline-none ring-0 appearance-none bg-transparent\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n aria-controls=\"accordion-collapse-body-1\"\n >\n <span>🔷 {title}</span>\n <svg\n data-accordion-icon\n className={`w-5 h-5 shrink-0 transition-transform ${open ? \"rotate-0\" : \"rotate-180\"\n }`}\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"m5 15 7-7 7 7\"\n />\n </svg>\n </button>\n </h2>\n <div\n id=\"accordion-collapse-body-1\"\n className={`${open ? \"\" : \"hidden\"}`}\n aria-labelledby=\"accordion-collapse-heading-1\"\n >\n <div className=\"md:p-5 text-left space-y-3\">\n {toolMessages.map((toolMsg) => (\n <div key={toolMsg.id} className=\"border-zinc-700\">\n <p className=\"text-body text-sm\">{toolMsg.content ? getContentString(toolMsg.content) : \"\"}</p>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default React.memo(ToolCallFunctions, (prevProps, nextProps) => {\n return prevProps.toolMessages?.length === nextProps.toolMessages?.length;\n});"],"names":["React"],"mappings":";;;AAIA,SAAS,kBAAkB,EAAE,OAAO,gBAGjC;AACD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AAGtC,MAAI,CAAC,gBAAgB,aAAa,WAAW,EAAG,QAAO;AAEvD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAG;AAAA,MACH,kBAAe;AAAA,MACf,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,oBAAC,MAAA,EAAG,IAAG,gCACL,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;AAAA,YAChC,iBAAe;AAAA,YACf,iBAAc;AAAA,YAEd,UAAA;AAAA,cAAA,qBAAC,QAAA,EAAK,UAAA;AAAA,gBAAA;AAAA,gBAAI;AAAA,cAAA,GAAM;AAAA,cAChB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,uBAAmB;AAAA,kBACnB,WAAW,yCAAyC,OAAO,aAAa,YACtE;AAAA,kBACF,eAAY;AAAA,kBACZ,OAAM;AAAA,kBACN,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,MAAK;AAAA,kBACL,SAAQ;AAAA,kBAER,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,QAAO;AAAA,sBACP,eAAc;AAAA,sBACd,gBAAe;AAAA,sBACf,aAAY;AAAA,sBACZ,GAAE;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACJ;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAW,GAAG,OAAO,KAAK,QAAQ;AAAA,YAClC,mBAAgB;AAAA,YAEhB,UAAA,oBAAC,OAAA,EAAI,WAAU,8BACZ,UAAA,aAAa,IAAI,CAAC,YACjB,oBAAC,OAAA,EAAqB,WAAU,mBAC9B,UAAA,oBAAC,KAAA,EAAE,WAAU,qBAAqB,UAAA,QAAQ,UAAU,iBAAiB,QAAQ,OAAO,IAAI,GAAA,CAAG,EAAA,GADnF,QAAQ,EAElB,CACD,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAA,sBAAeA,eAAM,KAAK,mBAAmB,CAAC,WAAW,cAAc;AACrE,SAAO,UAAU,cAAc,WAAW,UAAU,cAAc;AACpE,CAAC;"}
|
package/dist/index.es28.js
CHANGED
|
@@ -1,72 +1,145 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
function
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
import { useState, useRef, useCallback } from "react";
|
|
2
|
+
import { webmFixDuration } from "./index.es41.js";
|
|
3
|
+
import { useChatRuntime } from "./index.es5.js";
|
|
4
|
+
function getMimeType() {
|
|
5
|
+
const types = [
|
|
6
|
+
"audio/webm",
|
|
7
|
+
"audio/mp4",
|
|
8
|
+
"audio/ogg",
|
|
9
|
+
"audio/wav",
|
|
10
|
+
"audio/aac"
|
|
11
|
+
];
|
|
12
|
+
for (let i = 0; i < types.length; i++) {
|
|
13
|
+
if (MediaRecorder.isTypeSupported(types[i])) {
|
|
14
|
+
return types[i];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
19
|
+
function useAudioRecorder() {
|
|
20
|
+
const { identity } = useChatRuntime();
|
|
21
|
+
const [isRecording, setIsRecording] = useState(false);
|
|
22
|
+
const [recordingTime, setRecordingTime] = useState(0);
|
|
23
|
+
const [isTranscribing, setIsTranscribing] = useState(false);
|
|
24
|
+
const streamRef = useRef(null);
|
|
25
|
+
const mediaRecorderRef = useRef(null);
|
|
26
|
+
const chunksRef = useRef([]);
|
|
27
|
+
const timerRef = useRef(null);
|
|
28
|
+
const startTimeRef = useRef(0);
|
|
29
|
+
const startRecording = useCallback(async () => {
|
|
30
|
+
try {
|
|
31
|
+
if (!streamRef.current) {
|
|
32
|
+
streamRef.current = await navigator.mediaDevices.getUserMedia({
|
|
33
|
+
audio: true
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const mimeType = getMimeType();
|
|
37
|
+
const mediaRecorder = new MediaRecorder(streamRef.current, {
|
|
38
|
+
mimeType
|
|
39
|
+
});
|
|
40
|
+
mediaRecorderRef.current = mediaRecorder;
|
|
41
|
+
chunksRef.current = [];
|
|
42
|
+
startTimeRef.current = Date.now();
|
|
43
|
+
mediaRecorder.addEventListener("dataavailable", (event) => {
|
|
44
|
+
if (event.data.size > 0) {
|
|
45
|
+
chunksRef.current.push(event.data);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
mediaRecorder.start();
|
|
49
|
+
setIsRecording(true);
|
|
50
|
+
timerRef.current = window.setInterval(() => {
|
|
51
|
+
setRecordingTime(Math.floor((Date.now() - startTimeRef.current) / 1e3));
|
|
52
|
+
}, 1e3);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.error("Error accessing microphone:", error);
|
|
55
|
+
alert("Unable to access microphone. Please check your permissions.");
|
|
56
|
+
}
|
|
57
|
+
}, []);
|
|
58
|
+
const stopRecording = useCallback(() => {
|
|
59
|
+
return new Promise((resolve) => {
|
|
60
|
+
if (mediaRecorderRef.current && mediaRecorderRef.current.state === "recording") {
|
|
61
|
+
const mimeType = mediaRecorderRef.current.mimeType;
|
|
62
|
+
const duration = Date.now() - startTimeRef.current;
|
|
63
|
+
mediaRecorderRef.current.addEventListener("stop", async () => {
|
|
64
|
+
let blob = new Blob(chunksRef.current, { type: mimeType });
|
|
65
|
+
if (mimeType === "audio/webm") {
|
|
66
|
+
blob = await webmFixDuration(blob, duration, blob.type);
|
|
60
67
|
}
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
resolve(blob);
|
|
69
|
+
});
|
|
70
|
+
mediaRecorderRef.current.stop();
|
|
71
|
+
setIsRecording(false);
|
|
72
|
+
setRecordingTime(0);
|
|
73
|
+
if (timerRef.current) {
|
|
74
|
+
window.clearInterval(timerRef.current);
|
|
75
|
+
timerRef.current = null;
|
|
76
|
+
}
|
|
77
|
+
if (streamRef.current) {
|
|
78
|
+
streamRef.current.getTracks().forEach((track) => track.stop());
|
|
79
|
+
streamRef.current = null;
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
resolve(null);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}, []);
|
|
86
|
+
const transcribeAudio = useCallback(async (audioBlob) => {
|
|
87
|
+
setIsTranscribing(true);
|
|
88
|
+
try {
|
|
89
|
+
const apiUrl = identity?.textToSpeechVoice?.apiUrl || "";
|
|
90
|
+
const apiKey = identity?.textToSpeechVoice?.apiKey;
|
|
91
|
+
const formData = new FormData();
|
|
92
|
+
formData.append("file", audioBlob, "audio.webm");
|
|
93
|
+
formData.append("model", identity?.textToSpeechVoice?.model || "Systran/faster-whisper-large-v3");
|
|
94
|
+
formData.append("response_format", "json");
|
|
95
|
+
const headers = {};
|
|
96
|
+
if (apiKey) {
|
|
97
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
98
|
+
}
|
|
99
|
+
const response = await fetch(apiUrl, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers,
|
|
102
|
+
body: formData
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error(`Transcription failed: ${response.statusText}`);
|
|
106
|
+
}
|
|
107
|
+
const data = await response.json();
|
|
108
|
+
return data.text || "";
|
|
109
|
+
} catch (error) {
|
|
110
|
+
console.error("Transcription error:", error);
|
|
111
|
+
throw error;
|
|
112
|
+
} finally {
|
|
113
|
+
setIsTranscribing(false);
|
|
114
|
+
}
|
|
115
|
+
}, [identity]);
|
|
116
|
+
const cancelRecording = useCallback(() => {
|
|
117
|
+
if (mediaRecorderRef.current) {
|
|
118
|
+
mediaRecorderRef.current.stop();
|
|
119
|
+
}
|
|
120
|
+
if (streamRef.current) {
|
|
121
|
+
streamRef.current.getTracks().forEach((track) => track.stop());
|
|
122
|
+
streamRef.current = null;
|
|
123
|
+
}
|
|
124
|
+
if (timerRef.current) {
|
|
125
|
+
window.clearInterval(timerRef.current);
|
|
126
|
+
timerRef.current = null;
|
|
63
127
|
}
|
|
64
|
-
|
|
128
|
+
chunksRef.current = [];
|
|
129
|
+
setIsRecording(false);
|
|
130
|
+
setRecordingTime(0);
|
|
131
|
+
}, []);
|
|
132
|
+
return {
|
|
133
|
+
isRecording,
|
|
134
|
+
recordingTime,
|
|
135
|
+
isTranscribing,
|
|
136
|
+
startRecording,
|
|
137
|
+
stopRecording,
|
|
138
|
+
transcribeAudio,
|
|
139
|
+
cancelRecording
|
|
140
|
+
};
|
|
65
141
|
}
|
|
66
|
-
const ToolCallFunctions$1 = React__default.memo(ToolCallFunctions, (prevProps, nextProps) => {
|
|
67
|
-
return prevProps.toolMessages?.length === nextProps.toolMessages?.length;
|
|
68
|
-
});
|
|
69
142
|
export {
|
|
70
|
-
|
|
143
|
+
useAudioRecorder
|
|
71
144
|
};
|
|
72
145
|
//# sourceMappingURL=index.es28.js.map
|
package/dist/index.es28.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es28.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.es28.js","sources":["../src/hooks/useAudioRecorder.ts"],"sourcesContent":["import { useState, useRef, useCallback } from \"react\";\nimport { webmFixDuration } from \"../utils/BlobFix\";\nimport { useChatRuntime } from \"@/providers/ChatRuntime\";\n\nfunction getMimeType() {\n const types = [\n \"audio/webm\",\n \"audio/mp4\",\n \"audio/ogg\",\n \"audio/wav\",\n \"audio/aac\",\n ];\n for (let i = 0; i < types.length; i++) {\n if (MediaRecorder.isTypeSupported(types[i])) {\n return types[i];\n }\n }\n return undefined;\n}\n\nexport function useAudioRecorder() {\n const { identity } = useChatRuntime();\n const [isRecording, setIsRecording] = useState(false);\n const [recordingTime, setRecordingTime] = useState(0);\n const [isTranscribing, setIsTranscribing] = useState(false);\n \n const streamRef = useRef<MediaStream | null>(null);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const chunksRef = useRef<Blob[]>([]);\n const timerRef = useRef<number | null>(null);\n const startTimeRef = useRef<number>(0);\n\n const startRecording = useCallback(async () => {\n try {\n if (!streamRef.current) {\n streamRef.current = await navigator.mediaDevices.getUserMedia({\n audio: true,\n });\n }\n\n const mimeType = getMimeType();\n const mediaRecorder = new MediaRecorder(streamRef.current, {\n mimeType,\n });\n\n mediaRecorderRef.current = mediaRecorder;\n chunksRef.current = [];\n startTimeRef.current = Date.now();\n\n mediaRecorder.addEventListener(\"dataavailable\", (event) => {\n if (event.data.size > 0) {\n chunksRef.current.push(event.data);\n }\n });\n\n mediaRecorder.start();\n setIsRecording(true);\n\n // Start timer\n timerRef.current = window.setInterval(() => {\n setRecordingTime(Math.floor((Date.now() - startTimeRef.current) / 1000));\n }, 1000);\n } catch (error) {\n console.error(\"Error accessing microphone:\", error);\n alert(\"Unable to access microphone. Please check your permissions.\");\n }\n }, []);\n\n const stopRecording = useCallback((): Promise<Blob | null> => {\n return new Promise((resolve) => {\n if (\n mediaRecorderRef.current &&\n mediaRecorderRef.current.state === \"recording\"\n ) {\n const mimeType = mediaRecorderRef.current.mimeType;\n const duration = Date.now() - startTimeRef.current;\n\n mediaRecorderRef.current.addEventListener(\"stop\", async () => {\n let blob = new Blob(chunksRef.current, { type: mimeType });\n\n if (mimeType === \"audio/webm\") {\n blob = await webmFixDuration(blob, duration, blob.type);\n }\n\n resolve(blob);\n });\n\n mediaRecorderRef.current.stop();\n setIsRecording(false);\n setRecordingTime(0);\n\n if (timerRef.current) {\n window.clearInterval(timerRef.current);\n timerRef.current = null;\n }\n\n // Stop all tracks\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n } else {\n resolve(null);\n }\n });\n }, []);\n\n const transcribeAudio = useCallback(async (audioBlob: Blob): Promise<string> => {\n setIsTranscribing(true);\n try {\n const apiUrl = identity?.textToSpeechVoice?.apiUrl || \"\";\n const apiKey = identity?.textToSpeechVoice?.apiKey;\n\n const formData = new FormData();\n formData.append(\"file\", audioBlob, \"audio.webm\");\n formData.append(\"model\", identity?.textToSpeechVoice?.model || \"Systran/faster-whisper-large-v3\");\n formData.append(\"response_format\", \"json\");\n\n const headers: HeadersInit = {};\n if (apiKey) {\n headers[\"Authorization\"] = `Bearer ${apiKey}`;\n }\n\n const response = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Transcription failed: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.text || \"\";\n } catch (error) {\n console.error(\"Transcription error:\", error);\n throw error;\n } finally {\n setIsTranscribing(false);\n }\n }, [identity]);\n\n const cancelRecording = useCallback(() => {\n if (mediaRecorderRef.current) {\n mediaRecorderRef.current.stop();\n }\n\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n if (timerRef.current) {\n window.clearInterval(timerRef.current);\n timerRef.current = null;\n }\n\n chunksRef.current = [];\n setIsRecording(false);\n setRecordingTime(0);\n }, []);\n\n return {\n isRecording,\n recordingTime,\n isTranscribing,\n startRecording,\n stopRecording,\n transcribeAudio,\n cancelRecording,\n };\n}\n"],"names":[],"mappings":"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"}
|