@burtson-labs/bandit-engine 2.0.128 → 2.0.130

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.
@@ -5,7 +5,7 @@ import {
5
5
  DragIndicatorIcon,
6
6
  ExpandLessIcon,
7
7
  ExpandMoreIcon,
8
- FeedbackButton,
8
+ FeedbackModal,
9
9
  FullscreenExitIcon,
10
10
  FullscreenIcon,
11
11
  HistoryIcon,
@@ -24,7 +24,7 @@ import {
24
24
  useNotificationService,
25
25
  useTTS,
26
26
  useVoiceStore
27
- } from "./chunk-BQW7DSJ6.mjs";
27
+ } from "./chunk-JONBKV2S.mjs";
28
28
  import {
29
29
  brandingService_default,
30
30
  toTitleCase,
@@ -46,12 +46,12 @@ import {
46
46
  } from "./chunk-KCI46M23.mjs";
47
47
 
48
48
  // src/modals/chat-modal/chat-modal.tsx
49
- import { useEffect as useEffect5, useLayoutEffect, useRef as useRef3, useState as useState6 } from "react";
49
+ import { useEffect as useEffect5, useLayoutEffect, useRef as useRef3, useState as useState7 } from "react";
50
50
  import {
51
51
  Modal,
52
52
  InputAdornment as InputAdornment3,
53
- Tooltip as Tooltip4,
54
- IconButton as IconButton4,
53
+ Tooltip as Tooltip5,
54
+ IconButton as IconButton5,
55
55
  Box as Box6,
56
56
  Avatar as Avatar2,
57
57
  Menu,
@@ -1986,18 +1986,155 @@ var GenericLoader = ({
1986
1986
  };
1987
1987
  var generic_loader_default = GenericLoader;
1988
1988
 
1989
+ // src/components/feedback/FeedbackButton.tsx
1990
+ import { useState as useState4 } from "react";
1991
+ import {
1992
+ Fab,
1993
+ Tooltip as Tooltip4,
1994
+ useTheme as useTheme6,
1995
+ Zoom,
1996
+ Button as Button2,
1997
+ IconButton as IconButton4
1998
+ } from "@mui/material";
1999
+ import { MessageCircle as FeedbackIcon } from "lucide-react";
2000
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
2001
+ var FeedbackButton = ({
2002
+ fullScreen = false,
2003
+ className,
2004
+ zIndex = 1400,
2005
+ feedbackEmail,
2006
+ inline = false,
2007
+ buttonText = "Send Feedback",
2008
+ size = "small",
2009
+ position,
2010
+ absolute = false
2011
+ }) => {
2012
+ const theme = useTheme6();
2013
+ const [open, setOpen] = useState4(false);
2014
+ const handleOpen = () => setOpen(true);
2015
+ const handleClose = () => setOpen(false);
2016
+ if (inline) {
2017
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
2018
+ buttonText ? /* @__PURE__ */ jsx6(
2019
+ Button2,
2020
+ {
2021
+ variant: "outlined",
2022
+ startIcon: /* @__PURE__ */ jsx6(FeedbackIcon, {}),
2023
+ onClick: handleOpen,
2024
+ className,
2025
+ size,
2026
+ sx: {
2027
+ borderRadius: 2,
2028
+ textTransform: "none",
2029
+ "&:hover": {
2030
+ transform: "translateY(-1px)",
2031
+ boxShadow: theme.shadows[4]
2032
+ }
2033
+ },
2034
+ children: buttonText
2035
+ }
2036
+ ) : /* @__PURE__ */ jsx6(Tooltip4, { title: "Send Feedback", arrow: true, children: /* @__PURE__ */ jsx6(
2037
+ IconButton4,
2038
+ {
2039
+ onClick: handleOpen,
2040
+ className,
2041
+ size,
2042
+ sx: {
2043
+ color: theme.palette.primary.main,
2044
+ borderRadius: 2,
2045
+ transition: "all 0.2s ease",
2046
+ "&:hover": {
2047
+ bgcolor: theme.palette.primary.main + "15",
2048
+ transform: "translateY(-1px)"
2049
+ }
2050
+ },
2051
+ children: /* @__PURE__ */ jsx6(FeedbackIcon, {})
2052
+ }
2053
+ ) }),
2054
+ /* @__PURE__ */ jsx6(
2055
+ FeedbackModal,
2056
+ {
2057
+ open,
2058
+ onClose: handleClose,
2059
+ feedbackEmail
2060
+ }
2061
+ )
2062
+ ] });
2063
+ }
2064
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
2065
+ /* @__PURE__ */ jsx6(Zoom, { in: true, timeout: 300, children: /* @__PURE__ */ jsx6(
2066
+ Tooltip4,
2067
+ {
2068
+ title: "Send Feedback",
2069
+ placement: "left",
2070
+ arrow: true,
2071
+ children: /* @__PURE__ */ jsx6(
2072
+ Fab,
2073
+ {
2074
+ size,
2075
+ onClick: handleOpen,
2076
+ className,
2077
+ sx: {
2078
+ position: absolute ? "absolute" : "relative",
2079
+ ...absolute && {
2080
+ bottom: position?.bottom ?? (fullScreen ? 16 : 20),
2081
+ right: position?.right ?? 16,
2082
+ top: position?.top,
2083
+ left: position?.left
2084
+ },
2085
+ zIndex,
2086
+ bgcolor: theme.palette.primary.main,
2087
+ color: theme.palette.primary.contrastText,
2088
+ boxShadow: theme.palette.mode === "dark" ? "0 8px 32px rgba(0,0,0,0.4)" : "0 8px 32px rgba(0,0,0,0.15)",
2089
+ border: `1px solid ${theme.palette.divider}`,
2090
+ transition: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
2091
+ "&:hover": {
2092
+ bgcolor: theme.palette.primary.dark,
2093
+ transform: "scale(1.05) translateY(-2px)",
2094
+ boxShadow: theme.palette.mode === "dark" ? "0 12px 40px rgba(0,0,0,0.5)" : "0 12px 40px rgba(0,0,0,0.2)"
2095
+ },
2096
+ "&:active": {
2097
+ transform: "scale(0.98) translateY(0px)"
2098
+ },
2099
+ // Subtle pulsing animation
2100
+ animation: "feedbackPulse 3s ease-in-out infinite",
2101
+ "@keyframes feedbackPulse": {
2102
+ "0%, 100%": {
2103
+ boxShadow: theme.palette.mode === "dark" ? "0 8px 32px rgba(0,0,0,0.4)" : "0 8px 32px rgba(0,0,0,0.15)"
2104
+ },
2105
+ "50%": {
2106
+ boxShadow: theme.palette.mode === "dark" ? `0 8px 32px ${theme.palette.primary.main}40` : `0 8px 32px ${theme.palette.primary.main}30`
2107
+ }
2108
+ }
2109
+ },
2110
+ children: /* @__PURE__ */ jsx6(FeedbackIcon, {})
2111
+ }
2112
+ )
2113
+ }
2114
+ ) }),
2115
+ /* @__PURE__ */ jsx6(
2116
+ FeedbackModal,
2117
+ {
2118
+ open,
2119
+ onClose: handleClose,
2120
+ feedbackEmail
2121
+ }
2122
+ )
2123
+ ] });
2124
+ };
2125
+
1989
2126
  // src/hooks/useAiChat.ts
1990
- import { useState as useState4, useEffect as useEffect3 } from "react";
2127
+ import { useState as useState5, useEffect as useEffect3 } from "react";
1991
2128
  import { useMediaQuery as useMediaQuery3 } from "@mui/material";
1992
2129
  var useAIChat = () => {
1993
2130
  const isMobile = useMediaQuery3((theme) => theme.breakpoints.down("sm"));
1994
2131
  const provider = useAIProviderStore((state) => state.provider);
1995
2132
  const SYSTEM_PROMPT = useModelStore((state) => state.systemPrompt);
1996
2133
  const OLLAMA_MODEL = usePackageSettingsStore((state) => state.settings?.defaultModel || "");
1997
- const [fullScreen, setFullScreen] = useState4(isMobile);
1998
- const [drawerOpen, setDrawerOpen] = useState4(false);
1999
- const [showSettings, setShowSettings] = useState4(false);
2000
- const [, setAutoFullscreenTriggered] = useState4(false);
2134
+ const [fullScreen, setFullScreen] = useState5(isMobile);
2135
+ const [drawerOpen, setDrawerOpen] = useState5(false);
2136
+ const [showSettings, setShowSettings] = useState5(false);
2137
+ const [, setAutoFullscreenTriggered] = useState5(false);
2001
2138
  const {
2002
2139
  apiKey,
2003
2140
  inputValue,
@@ -2101,12 +2238,12 @@ var useAIChat = () => {
2101
2238
  var useAiChat_default = useAIChat;
2102
2239
 
2103
2240
  // src/hooks/useDraggable.ts
2104
- import { useCallback, useEffect as useEffect4, useRef as useRef2, useState as useState5 } from "react";
2241
+ import { useCallback, useEffect as useEffect4, useRef as useRef2, useState as useState6 } from "react";
2105
2242
  var useDraggable = () => {
2106
2243
  const modalRef = useRef2(null);
2107
- const [dragging, setDragging] = useState5(false);
2108
- const [offset, setOffset] = useState5({ x: 0, y: 0 });
2109
- const [position, setPosition] = useState5({ x: 0, y: 0 });
2244
+ const [dragging, setDragging] = useState6(false);
2245
+ const [offset, setOffset] = useState6({ x: 0, y: 0 });
2246
+ const [position, setPosition] = useState6({ x: 0, y: 0 });
2110
2247
  const handleHeaderMouseDown = (e) => {
2111
2248
  const rect = modalRef.current?.getBoundingClientRect();
2112
2249
  if (rect) {
@@ -2150,7 +2287,7 @@ var useDraggable_default = useDraggable;
2150
2287
 
2151
2288
  // src/modals/chat-modal/chat-modal.tsx
2152
2289
  import { Subscription as Subscription2 } from "rxjs";
2153
- import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
2290
+ import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
2154
2291
  var FULL_SCREEN_THRESHOLD = 100;
2155
2292
  var MIN_WINDOWED_HEIGHT = 400;
2156
2293
  var MAX_WINDOWED_HEIGHT = 600;
@@ -2213,17 +2350,17 @@ var ChatModal = ({
2213
2350
  handleSend
2214
2351
  } = useAiChat_default();
2215
2352
  const { modalRef, position, setPosition, handleDrag, handleHeaderMouseDown } = useDraggable_default();
2216
- const [pastedImages, setPastedImages] = useState6([]);
2217
- const [responseStarted, setResponseStarted] = useState6(false);
2218
- const [modalLogo, setModalLogo] = useState6("https://cdn.burtson.ai/logos/bandit-ai-logo.png");
2219
- const [modelAnchorEl, setModelAnchorEl] = useState6(null);
2220
- const [voiceAnchorEl, setVoiceAnchorEl] = useState6(null);
2221
- const [audioSub, setAudioSub] = useState6(new Subscription2());
2222
- const [selectedTheme, setSelectedTheme] = useState6(null);
2223
- const [themeLoading, setThemeLoading] = useState6(true);
2224
- const [autoFullscreenTriggered, setAutoFullscreenTriggered] = useState6(false);
2225
- const [userHasDragged, setUserHasDragged] = useState6(false);
2226
- const [manualFullscreenToggleTime, setManualFullscreenToggleTime] = useState6(0);
2353
+ const [pastedImages, setPastedImages] = useState7([]);
2354
+ const [responseStarted, setResponseStarted] = useState7(false);
2355
+ const [modalLogo, setModalLogo] = useState7("https://cdn.burtson.ai/logos/bandit-ai-logo.png");
2356
+ const [modelAnchorEl, setModelAnchorEl] = useState7(null);
2357
+ const [voiceAnchorEl, setVoiceAnchorEl] = useState7(null);
2358
+ const [audioSub, setAudioSub] = useState7(new Subscription2());
2359
+ const [selectedTheme, setSelectedTheme] = useState7(null);
2360
+ const [themeLoading, setThemeLoading] = useState7(true);
2361
+ const [autoFullscreenTriggered, setAutoFullscreenTriggered] = useState7(false);
2362
+ const [userHasDragged, setUserHasDragged] = useState7(false);
2363
+ const [manualFullscreenToggleTime, setManualFullscreenToggleTime] = useState7(0);
2227
2364
  const handleExitFullscreen = () => {
2228
2365
  setPosition({
2229
2366
  x: Math.max(0, window.innerWidth / 2 - 300),
@@ -2400,7 +2537,7 @@ var ChatModal = ({
2400
2537
  if (themeLoading) {
2401
2538
  return null;
2402
2539
  }
2403
- return /* @__PURE__ */ jsx6(ThemeProvider, { theme: activeTheme, children: /* @__PURE__ */ jsx6(Modal, { open, onClose: handleClose, children: /* @__PURE__ */ jsxs3(
2540
+ return /* @__PURE__ */ jsx7(ThemeProvider, { theme: activeTheme, children: /* @__PURE__ */ jsx7(Modal, { open, onClose: handleClose, children: /* @__PURE__ */ jsxs4(
2404
2541
  draggable_box_default,
2405
2542
  {
2406
2543
  ref: modalRef,
@@ -2409,7 +2546,7 @@ var ChatModal = ({
2409
2546
  fullScreen,
2410
2547
  onDrag: handleCustomDrag,
2411
2548
  children: [
2412
- /* @__PURE__ */ jsx6(
2549
+ /* @__PURE__ */ jsx7(
2413
2550
  modal_header_default,
2414
2551
  {
2415
2552
  fullScreen,
@@ -2426,7 +2563,7 @@ var ChatModal = ({
2426
2563
  onExitFullscreen: handleExitFullscreen
2427
2564
  }
2428
2565
  ),
2429
- /* @__PURE__ */ jsx6(
2566
+ /* @__PURE__ */ jsx7(
2430
2567
  Box6,
2431
2568
  {
2432
2569
  sx: {
@@ -2438,7 +2575,7 @@ var ChatModal = ({
2438
2575
  minHeight: 0
2439
2576
  // Important for flex scrolling
2440
2577
  },
2441
- children: /* @__PURE__ */ jsxs3(
2578
+ children: /* @__PURE__ */ jsxs4(
2442
2579
  Box6,
2443
2580
  {
2444
2581
  sx: {
@@ -2468,7 +2605,7 @@ var ChatModal = ({
2468
2605
  }
2469
2606
  },
2470
2607
  children: [
2471
- /* @__PURE__ */ jsx6(
2608
+ /* @__PURE__ */ jsx7(
2472
2609
  query_input_default,
2473
2610
  {
2474
2611
  inputValue,
@@ -2478,9 +2615,9 @@ var ChatModal = ({
2478
2615
  showSettings,
2479
2616
  setShowSettings,
2480
2617
  setApiKey,
2481
- startAdornment: /* @__PURE__ */ jsxs3(InputAdornment3, { position: "start", sx: { gap: 1 }, children: [
2482
- /* @__PURE__ */ jsx6(Tooltip4, { title: `Current AI: ${selectedModel.replace("Bandit-", "")}`, arrow: true, children: /* @__PURE__ */ jsx6(
2483
- IconButton4,
2618
+ startAdornment: /* @__PURE__ */ jsxs4(InputAdornment3, { position: "start", sx: { gap: 1 }, children: [
2619
+ /* @__PURE__ */ jsx7(Tooltip5, { title: `Current AI: ${selectedModel.replace("Bandit-", "")}`, arrow: true, children: /* @__PURE__ */ jsx7(
2620
+ IconButton5,
2484
2621
  {
2485
2622
  onClick: (e) => setModelAnchorEl(e.currentTarget),
2486
2623
  sx: {
@@ -2492,7 +2629,7 @@ var ChatModal = ({
2492
2629
  transform: "scale(1.05)"
2493
2630
  }
2494
2631
  },
2495
- children: /* @__PURE__ */ jsx6(
2632
+ children: /* @__PURE__ */ jsx7(
2496
2633
  Avatar2,
2497
2634
  {
2498
2635
  src: currentAvatar,
@@ -2508,7 +2645,7 @@ var ChatModal = ({
2508
2645
  )
2509
2646
  }
2510
2647
  ) }),
2511
- /* @__PURE__ */ jsx6(
2648
+ /* @__PURE__ */ jsx7(
2512
2649
  Menu,
2513
2650
  {
2514
2651
  anchorEl: modelAnchorEl,
@@ -2545,7 +2682,7 @@ var ChatModal = ({
2545
2682
  }
2546
2683
  }
2547
2684
  },
2548
- children: availableModels.map((model) => /* @__PURE__ */ jsxs3(
2685
+ children: availableModels.map((model) => /* @__PURE__ */ jsxs4(
2549
2686
  MenuItem2,
2550
2687
  {
2551
2688
  selected: model.name === selectedModel,
@@ -2562,7 +2699,7 @@ var ChatModal = ({
2562
2699
  px: 2
2563
2700
  },
2564
2701
  children: [
2565
- /* @__PURE__ */ jsx6(
2702
+ /* @__PURE__ */ jsx7(
2566
2703
  Avatar2,
2567
2704
  {
2568
2705
  src: model.avatarBase64 || modelAvatars[model.name] || banditHead2,
@@ -2575,11 +2712,11 @@ var ChatModal = ({
2575
2712
  }
2576
2713
  }
2577
2714
  ),
2578
- /* @__PURE__ */ jsxs3(Box6, { sx: { flex: 1 }, children: [
2579
- /* @__PURE__ */ jsx6(Typography3, { variant: "body2", sx: { fontWeight: 500 }, children: model.name.replace("Bandit-", "") }),
2580
- /* @__PURE__ */ jsx6(Typography3, { variant: "caption", sx: { color: activeTheme.palette.text.secondary }, children: model.name === selectedModel ? "Currently active" : "Switch to this AI" })
2715
+ /* @__PURE__ */ jsxs4(Box6, { sx: { flex: 1 }, children: [
2716
+ /* @__PURE__ */ jsx7(Typography3, { variant: "body2", sx: { fontWeight: 500 }, children: model.name.replace("Bandit-", "") }),
2717
+ /* @__PURE__ */ jsx7(Typography3, { variant: "caption", sx: { color: activeTheme.palette.text.secondary }, children: model.name === selectedModel ? "Currently active" : "Switch to this AI" })
2581
2718
  ] }),
2582
- model.name === selectedModel && /* @__PURE__ */ jsx6(
2719
+ model.name === selectedModel && /* @__PURE__ */ jsx7(
2583
2720
  Box6,
2584
2721
  {
2585
2722
  sx: {
@@ -2596,9 +2733,9 @@ var ChatModal = ({
2596
2733
  ))
2597
2734
  }
2598
2735
  ),
2599
- isTTSAvailable && /* @__PURE__ */ jsxs3(Fragment2, { children: [
2600
- /* @__PURE__ */ jsx6(Tooltip4, { title: `Voice: ${selectedVoice ? toTitleCase2(selectedVoice.split("-")[1]) : "Default"}`, arrow: true, children: /* @__PURE__ */ jsx6(
2601
- IconButton4,
2736
+ isTTSAvailable && /* @__PURE__ */ jsxs4(Fragment3, { children: [
2737
+ /* @__PURE__ */ jsx7(Tooltip5, { title: `Voice: ${selectedVoice ? toTitleCase2(selectedVoice.split("-")[1]) : "Default"}`, arrow: true, children: /* @__PURE__ */ jsx7(
2738
+ IconButton5,
2602
2739
  {
2603
2740
  onClick: (e) => setVoiceAnchorEl(e.currentTarget),
2604
2741
  sx: {
@@ -2613,10 +2750,10 @@ var ChatModal = ({
2613
2750
  }
2614
2751
  },
2615
2752
  "aria-label": `Change voice. Currently using ${selectedVoice ? toTitleCase2(selectedVoice.split("-")[1]) : "default"}`,
2616
- children: /* @__PURE__ */ jsx6(RecordVoiceOverIcon, { fontSize: "small" })
2753
+ children: /* @__PURE__ */ jsx7(RecordVoiceOverIcon, { fontSize: "small" })
2617
2754
  }
2618
2755
  ) }),
2619
- /* @__PURE__ */ jsx6(
2756
+ /* @__PURE__ */ jsx7(
2620
2757
  Menu,
2621
2758
  {
2622
2759
  anchorEl: voiceAnchorEl,
@@ -2650,7 +2787,7 @@ var ChatModal = ({
2650
2787
  }
2651
2788
  }
2652
2789
  },
2653
- children: availableVoices.length > 0 ? availableVoices.map((voice) => /* @__PURE__ */ jsx6(
2790
+ children: availableVoices.length > 0 ? availableVoices.map((voice) => /* @__PURE__ */ jsx7(
2654
2791
  MenuItem2,
2655
2792
  {
2656
2793
  selected: voice === selectedVoice,
@@ -2658,13 +2795,13 @@ var ChatModal = ({
2658
2795
  handleVoiceChange(voice);
2659
2796
  setVoiceAnchorEl(null);
2660
2797
  },
2661
- children: /* @__PURE__ */ jsxs3(Box6, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%" }, children: [
2662
- /* @__PURE__ */ jsx6(RecordVoiceOverIcon, { fontSize: "small", sx: { color: activeTheme.palette.text.secondary } }),
2663
- /* @__PURE__ */ jsxs3(Box6, { sx: { flex: 1 }, children: [
2664
- /* @__PURE__ */ jsx6(Typography3, { variant: "body2", children: toTitleCase2(voice.split("-")[1]) }),
2665
- /* @__PURE__ */ jsx6(Typography3, { variant: "caption", sx: { color: activeTheme.palette.text.secondary }, children: voice === selectedVoice ? "Currently active" : "Switch to this voice" })
2798
+ children: /* @__PURE__ */ jsxs4(Box6, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%" }, children: [
2799
+ /* @__PURE__ */ jsx7(RecordVoiceOverIcon, { fontSize: "small", sx: { color: activeTheme.palette.text.secondary } }),
2800
+ /* @__PURE__ */ jsxs4(Box6, { sx: { flex: 1 }, children: [
2801
+ /* @__PURE__ */ jsx7(Typography3, { variant: "body2", children: toTitleCase2(voice.split("-")[1]) }),
2802
+ /* @__PURE__ */ jsx7(Typography3, { variant: "caption", sx: { color: activeTheme.palette.text.secondary }, children: voice === selectedVoice ? "Currently active" : "Switch to this voice" })
2666
2803
  ] }),
2667
- voice === selectedVoice && /* @__PURE__ */ jsx6(
2804
+ voice === selectedVoice && /* @__PURE__ */ jsx7(
2668
2805
  Box6,
2669
2806
  {
2670
2807
  sx: {
@@ -2678,11 +2815,11 @@ var ChatModal = ({
2678
2815
  ] })
2679
2816
  },
2680
2817
  voice
2681
- )) : /* @__PURE__ */ jsx6(MenuItem2, { disabled: true, children: /* @__PURE__ */ jsx6(Typography3, { variant: "body2", color: "text.secondary", children: "No voices available" }) })
2818
+ )) : /* @__PURE__ */ jsx7(MenuItem2, { disabled: true, children: /* @__PURE__ */ jsx7(Typography3, { variant: "body2", color: "text.secondary", children: "No voices available" }) })
2682
2819
  }
2683
2820
  )
2684
2821
  ] }),
2685
- pastedImages.map((img, idx) => /* @__PURE__ */ jsxs3(
2822
+ pastedImages.map((img, idx) => /* @__PURE__ */ jsxs4(
2686
2823
  Box6,
2687
2824
  {
2688
2825
  sx: {
@@ -2693,7 +2830,7 @@ var ChatModal = ({
2693
2830
  }
2694
2831
  },
2695
2832
  children: [
2696
- /* @__PURE__ */ jsx6(
2833
+ /* @__PURE__ */ jsx7(
2697
2834
  Avatar2,
2698
2835
  {
2699
2836
  src: img,
@@ -2707,8 +2844,8 @@ var ChatModal = ({
2707
2844
  }
2708
2845
  }
2709
2846
  ),
2710
- /* @__PURE__ */ jsx6(Tooltip4, { title: "Remove image", arrow: true, children: /* @__PURE__ */ jsx6(
2711
- IconButton4,
2847
+ /* @__PURE__ */ jsx7(Tooltip5, { title: "Remove image", arrow: true, children: /* @__PURE__ */ jsx7(
2848
+ IconButton5,
2712
2849
  {
2713
2850
  size: "small",
2714
2851
  onClick: () => removeImage(idx),
@@ -2727,7 +2864,7 @@ var ChatModal = ({
2727
2864
  // Removed transform to prevent jitter
2728
2865
  }
2729
2866
  },
2730
- children: /* @__PURE__ */ jsx6(CloseIcon, { sx: { fontSize: 12 } })
2867
+ children: /* @__PURE__ */ jsx7(CloseIcon, { sx: { fontSize: 12 } })
2731
2868
  }
2732
2869
  ) })
2733
2870
  ]
@@ -2735,8 +2872,8 @@ var ChatModal = ({
2735
2872
  idx
2736
2873
  ))
2737
2874
  ] }),
2738
- endAdornment: /* @__PURE__ */ jsxs3(InputAdornment3, { position: "end", sx: { gap: 1 }, children: [
2739
- preferences.feedbackEnabled && /* @__PURE__ */ jsx6(
2875
+ endAdornment: /* @__PURE__ */ jsxs4(InputAdornment3, { position: "end", sx: { gap: 1 }, children: [
2876
+ preferences.feedbackEnabled && /* @__PURE__ */ jsx7(
2740
2877
  FeedbackButton,
2741
2878
  {
2742
2879
  inline: true,
@@ -2744,8 +2881,8 @@ var ChatModal = ({
2744
2881
  buttonText: ""
2745
2882
  }
2746
2883
  ),
2747
- /* @__PURE__ */ jsx6(Tooltip4, { title: inputValue.trim() === "" ? "Type a message first" : "Send Message", arrow: true, children: /* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6(
2748
- IconButton4,
2884
+ /* @__PURE__ */ jsx7(Tooltip5, { title: inputValue.trim() === "" ? "Type a message first" : "Send Message", arrow: true, children: /* @__PURE__ */ jsx7("span", { children: /* @__PURE__ */ jsx7(
2885
+ IconButton5,
2749
2886
  {
2750
2887
  onClick: handleSend,
2751
2888
  disabled: inputValue.trim() === "",
@@ -2766,20 +2903,20 @@ var ChatModal = ({
2766
2903
  color: activeTheme.palette.action.disabled
2767
2904
  }
2768
2905
  },
2769
- children: /* @__PURE__ */ jsx6(SendIcon, {})
2906
+ children: /* @__PURE__ */ jsx7(SendIcon, {})
2770
2907
  }
2771
2908
  ) }) })
2772
2909
  ] })
2773
2910
  }
2774
2911
  ),
2775
- !responseStarted && componentStatus === "Loading" && /* @__PURE__ */ jsx6(generic_loader_default, { variant: "dots" }),
2776
- responseStarted && response && !showSettings && /* @__PURE__ */ jsx6(ai_response_text_field_default, { question: previousQuestion, response })
2912
+ !responseStarted && componentStatus === "Loading" && /* @__PURE__ */ jsx7(generic_loader_default, { variant: "dots" }),
2913
+ responseStarted && response && !showSettings && /* @__PURE__ */ jsx7(ai_response_text_field_default, { question: previousQuestion, response })
2777
2914
  ]
2778
2915
  }
2779
2916
  )
2780
2917
  }
2781
2918
  ),
2782
- /* @__PURE__ */ jsx6(
2919
+ /* @__PURE__ */ jsx7(
2783
2920
  chat_drawer_default,
2784
2921
  {
2785
2922
  drawerOpen,
@@ -2798,9 +2935,10 @@ var ChatModal = ({
2798
2935
  var chat_modal_default = ChatModal;
2799
2936
 
2800
2937
  export {
2938
+ FeedbackButton,
2801
2939
  FULL_SCREEN_THRESHOLD,
2802
2940
  MIN_WINDOWED_HEIGHT,
2803
2941
  MAX_WINDOWED_HEIGHT,
2804
2942
  chat_modal_default
2805
2943
  };
2806
- //# sourceMappingURL=chunk-N3TVVQVS.mjs.map
2944
+ //# sourceMappingURL=chunk-PA4VYO4R.mjs.map