@superinterface/react 2.13.0 → 2.13.3

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.cjs CHANGED
@@ -3044,7 +3044,7 @@ var useRecorder = function(param) {
3044
3044
  var silenceAnalyser = (0, import_react40.useMemo)(function() {
3045
3045
  if (!audioEngine) return null;
3046
3046
  var result = audioEngine.audioContext.createAnalyser();
3047
- result.minDecibels = -45;
3047
+ result.minDecibels = -60;
3048
3048
  audioEngine.source.connect(result);
3049
3049
  return result;
3050
3050
  }, [
@@ -3087,9 +3087,9 @@ var useRecorder = function(param) {
3087
3087
  if (status !== "recording") return;
3088
3088
  if (!silenceStart) return;
3089
3089
  if (!noiseStart) return;
3090
- if (!silenceStart.isBefore((0, import_dayjs2.default)().subtract(1, "second"))) return;
3090
+ if (!silenceStart.isBefore((0, import_dayjs2.default)().subtract(1.5, "second"))) return;
3091
3091
  audioCaptureProps.stop();
3092
- }, 100);
3092
+ }, 300);
3093
3093
  return _object_spread_props(_object_spread({}, audioCaptureProps), {
3094
3094
  status: status,
3095
3095
  visualizationAnalyser: visualizationAnalyser
@@ -3360,6 +3360,7 @@ var Root8 = function(param) {
3360
3360
  };
3361
3361
  // src/components/threads/AudioThread/Visualization/index.tsx
3362
3362
  var import_react44 = require("react");
3363
+ var import_lodash9 = __toESM(require("lodash"), 1);
3363
3364
  var import_themes43 = require("@radix-ui/themes");
3364
3365
  // src/hooks/threads/useAudioThreadContext/index.ts
3365
3366
  var import_react42 = require("react");
@@ -3435,6 +3436,30 @@ var import_jsx_runtime57 = require("react/jsx-runtime");
3435
3436
  var Visualization = function() {
3436
3437
  var audioThreadContext = useAudioThreadContext();
3437
3438
  var assistantNameContext = (0, import_react44.useContext)(AssistantNameContext);
3439
+ var _ref = _sliced_to_array((0, import_react44.useState)(0), 2), scale = _ref[0], setScale = _ref[1];
3440
+ var draw = (0, import_react44.useCallback)(function(param) {
3441
+ var visualizationAnalyser = param.visualizationAnalyser;
3442
+ if (!visualizationAnalyser) {
3443
+ setScale(1);
3444
+ return;
3445
+ }
3446
+ var frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15);
3447
+ visualizationAnalyser.getByteFrequencyData(frequencyData);
3448
+ setScale(1 + import_lodash9.default.mean(frequencyData) / 255 / 10);
3449
+ requestAnimationFrame(function() {
3450
+ return draw({
3451
+ visualizationAnalyser: visualizationAnalyser
3452
+ });
3453
+ });
3454
+ }, []);
3455
+ (0, import_react44.useEffect)(function() {
3456
+ draw({
3457
+ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser
3458
+ });
3459
+ }, [
3460
+ draw,
3461
+ audioThreadContext
3462
+ ]);
3438
3463
  return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_themes43.Flex, {
3439
3464
  direction: "column",
3440
3465
  align: "center",
@@ -3449,7 +3474,8 @@ var Visualization = function() {
3449
3474
  width: "200px",
3450
3475
  style: {
3451
3476
  backgroundColor: audioThreadContext.status === "playing" ? "var(--accent-4)" : "var(--gray-4)",
3452
- borderRadius: "9999px"
3477
+ borderRadius: "9999px",
3478
+ scale: scale
3453
3479
  },
3454
3480
  children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(BarsVisualizer, {
3455
3481
  visualizationAnalyser: audioThreadContext.messageAudioProps.visualizationAnalyser,
@@ -3472,20 +3498,35 @@ var Visualization = function() {
3472
3498
  ]
3473
3499
  });
3474
3500
  };
3475
- // src/components/threads/AudioThread/Status/StatusMessage.tsx
3501
+ // src/components/threads/AudioThread/Status/StatusMessages.tsx
3476
3502
  var import_themes44 = require("@radix-ui/themes");
3477
3503
  var import_jsx_runtime58 = require("react/jsx-runtime");
3478
- var StatusMessage = function(param) {
3479
- var children = param.children;
3480
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_themes44.Flex, {
3504
+ var html = function(param) {
3505
+ var texts = param.texts;
3506
+ return "\n .status-messages-texts:after {\n content: '".concat(texts[0], "';\n animation: texts ").concat(texts.length * 5, "s linear infinite;\n }\n\n @keyframes texts {\n ").concat(texts.map(function(_10, i) {
3507
+ return "\n ".concat(i * 100 / texts.length, '% {\n content: "').concat(texts[i], '";\n }\n ');
3508
+ }).join(""), "\n }");
3509
+ };
3510
+ var StatusMessages = function(param) {
3511
+ var texts = param.texts;
3512
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_themes44.Flex, {
3481
3513
  justify: "center",
3482
- pb: "9",
3483
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_themes44.Text, {
3484
- size: "2",
3485
- weight: "regular",
3486
- color: "gray",
3487
- children: children
3488
- })
3514
+ pb: "5",
3515
+ children: [
3516
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_themes44.Text, {
3517
+ size: "2",
3518
+ weight: "regular",
3519
+ color: "gray",
3520
+ className: "status-messages-texts"
3521
+ }),
3522
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("style", {
3523
+ dangerouslySetInnerHTML: {
3524
+ __html: html({
3525
+ texts: texts
3526
+ })
3527
+ }
3528
+ })
3529
+ ]
3489
3530
  });
3490
3531
  };
3491
3532
  // src/components/threads/AudioThread/Status/index.tsx
@@ -3493,8 +3534,13 @@ var import_jsx_runtime59 = require("react/jsx-runtime");
3493
3534
  var Status = function() {
3494
3535
  var audioThreadContext = useAudioThreadContext();
3495
3536
  if (audioThreadContext.status === "recording") {
3496
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessage, {
3497
- children: "Listening"
3537
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessages, {
3538
+ texts: [
3539
+ "Start speaking",
3540
+ "Listening",
3541
+ "Finish speaking to send",
3542
+ "Click the button below to send manually"
3543
+ ]
3498
3544
  });
3499
3545
  }
3500
3546
  if ([
@@ -3502,17 +3548,23 @@ var Status = function() {
3502
3548
  "idle",
3503
3549
  "playerPaused"
3504
3550
  ].includes(audioThreadContext.status)) {
3505
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessage, {
3506
- children: "Click to activate"
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessages, {
3552
+ texts: [
3553
+ "Click the button below to activate"
3554
+ ]
3507
3555
  });
3508
3556
  }
3509
3557
  if (audioThreadContext.status === "playing") {
3510
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessage, {
3511
- children: "Click to interrupt"
3558
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessages, {
3559
+ texts: [
3560
+ "Click the button below to interrupt"
3561
+ ]
3512
3562
  });
3513
3563
  }
3514
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessage, {
3515
- children: "Thinking"
3564
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StatusMessages, {
3565
+ texts: [
3566
+ "Thinking"
3567
+ ]
3516
3568
  });
3517
3569
  };
3518
3570
  // src/components/threads/AudioThread/Form/index.tsx