@burtson-labs/bandit-engine 2.0.121 → 2.0.123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/chat-CGZD7ZQF.mjs +16 -0
  2. package/dist/chat-provider.js +33 -1
  3. package/dist/chat-provider.js.map +1 -1
  4. package/dist/chat-provider.mjs +5 -5
  5. package/dist/{chunk-THDQFHQZ.mjs → chunk-4RRQQPFZ.mjs} +4 -4
  6. package/dist/{chunk-26KZF54U.mjs → chunk-4T6HJTYD.mjs} +1842 -1347
  7. package/dist/chunk-4T6HJTYD.mjs.map +1 -0
  8. package/dist/{chunk-37JLV5PU.mjs → chunk-6ONL4SRK.mjs} +35 -3
  9. package/dist/chunk-6ONL4SRK.mjs.map +1 -0
  10. package/dist/{chunk-LWHSOEPR.mjs → chunk-EORIRPPX.mjs} +2 -2
  11. package/dist/{chunk-LWHSOEPR.mjs.map → chunk-EORIRPPX.mjs.map} +1 -1
  12. package/dist/{chunk-HAUDGBUS.mjs → chunk-F7JXIW6T.mjs} +2 -2
  13. package/dist/{chunk-VCUVOGOO.mjs → chunk-JJTUEC2E.mjs} +98 -248
  14. package/dist/chunk-JJTUEC2E.mjs.map +1 -0
  15. package/dist/{chunk-BN3D45E2.mjs → chunk-K2JGFKEB.mjs} +2 -2
  16. package/dist/{chunk-HLNEVIFS.mjs → chunk-RLMGTTK7.mjs} +9 -9
  17. package/dist/{chunk-VTKRZNLI.mjs → chunk-SAQUEXYS.mjs} +5 -5
  18. package/dist/{chunk-W2EPDR5G.mjs → chunk-WSNV6EX5.mjs} +2 -2
  19. package/dist/index.d.mts +2 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +4621 -4232
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +10 -10
  24. package/dist/management/management.js +2155 -1766
  25. package/dist/management/management.js.map +1 -1
  26. package/dist/management/management.mjs +8 -8
  27. package/dist/modals/chat-modal/chat-modal.js +121 -241
  28. package/dist/modals/chat-modal/chat-modal.js.map +1 -1
  29. package/dist/modals/chat-modal/chat-modal.mjs +4 -4
  30. package/dist/{modelStore-KCJPXFKO.mjs → modelStore-U57LUIIB.mjs} +2 -2
  31. package/dist/{public-nrOOzXCZ.d.ts → public-20My32EB.d.mts} +6 -1
  32. package/dist/{public-nrOOzXCZ.d.mts → public-20My32EB.d.ts} +6 -1
  33. package/dist/public-types.d.mts +1 -1
  34. package/dist/public-types.d.ts +1 -1
  35. package/package.json +1 -1
  36. package/dist/chat-NF4FKMA4.mjs +0 -16
  37. package/dist/chunk-26KZF54U.mjs.map +0 -1
  38. package/dist/chunk-37JLV5PU.mjs.map +0 -1
  39. package/dist/chunk-VCUVOGOO.mjs.map +0 -1
  40. /package/dist/{chat-NF4FKMA4.mjs.map → chat-CGZD7ZQF.mjs.map} +0 -0
  41. /package/dist/{chunk-THDQFHQZ.mjs.map → chunk-4RRQQPFZ.mjs.map} +0 -0
  42. /package/dist/{chunk-HAUDGBUS.mjs.map → chunk-F7JXIW6T.mjs.map} +0 -0
  43. /package/dist/{chunk-BN3D45E2.mjs.map → chunk-K2JGFKEB.mjs.map} +0 -0
  44. /package/dist/{chunk-HLNEVIFS.mjs.map → chunk-RLMGTTK7.mjs.map} +0 -0
  45. /package/dist/{chunk-VTKRZNLI.mjs.map → chunk-SAQUEXYS.mjs.map} +0 -0
  46. /package/dist/{chunk-W2EPDR5G.mjs.map → chunk-WSNV6EX5.mjs.map} +0 -0
  47. /package/dist/{modelStore-KCJPXFKO.mjs.map → modelStore-U57LUIIB.mjs.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  management_default
3
- } from "../chunk-HLNEVIFS.mjs";
4
- import "../chunk-W2EPDR5G.mjs";
5
- import "../chunk-HAUDGBUS.mjs";
6
- import "../chunk-BN3D45E2.mjs";
7
- import "../chunk-THDQFHQZ.mjs";
8
- import "../chunk-VCUVOGOO.mjs";
9
- import "../chunk-37JLV5PU.mjs";
10
- import "../chunk-LWHSOEPR.mjs";
3
+ } from "../chunk-RLMGTTK7.mjs";
4
+ import "../chunk-WSNV6EX5.mjs";
5
+ import "../chunk-F7JXIW6T.mjs";
6
+ import "../chunk-K2JGFKEB.mjs";
7
+ import "../chunk-4RRQQPFZ.mjs";
8
+ import "../chunk-JJTUEC2E.mjs";
9
+ import "../chunk-6ONL4SRK.mjs";
10
+ import "../chunk-EORIRPPX.mjs";
11
11
  import "../chunk-43MLINPL.mjs";
12
12
  import "../chunk-KCI46M23.mjs";
13
13
  import "../chunk-BJTO5JO5.mjs";
@@ -4700,6 +4700,9 @@ var createMuiLucideIcon = (Icon) => {
4700
4700
  return MuiLucideIcon;
4701
4701
  };
4702
4702
  var AddIcon = createMuiLucideIcon(import_lucide_react.Plus);
4703
+ var GhostIcon = createMuiLucideIcon(import_lucide_react.Ghost);
4704
+ var PanelLeftIcon = createMuiLucideIcon(import_lucide_react.PanelLeft);
4705
+ var ComposeIcon = createMuiLucideIcon(import_lucide_react.SquarePen);
4703
4706
  var CloudDoneIcon = createMuiLucideIcon(import_lucide_react.CloudCheck);
4704
4707
  var CloudOffIcon = createMuiLucideIcon(import_lucide_react.CloudOff);
4705
4708
  var ErrorOutlineIcon = createMuiLucideIcon(import_lucide_react.CircleAlert);
@@ -7569,6 +7572,7 @@ async function loadConversations() {
7569
7572
  return (raw || []).map(normalizeConversation);
7570
7573
  }
7571
7574
  async function saveConversation(conversation) {
7575
+ if (conversation.incognito) return;
7572
7576
  await indexedDBService_default.put(DB_NAME4, DB_VERSION3, STORE_NAME4, conversation, storeConfigs4);
7573
7577
  }
7574
7578
  async function deleteConversationFromDB(id) {
@@ -7638,6 +7642,34 @@ var useConversationStore = (0, import_zustand9.create)((set, get) => ({
7638
7642
  };
7639
7643
  });
7640
7644
  },
7645
+ toggleIncognito: () => {
7646
+ const { conversations, currentId } = get();
7647
+ const current = conversations.find((c) => c.id === currentId);
7648
+ if (current?.incognito) {
7649
+ useAIQueryStore.getState().reset();
7650
+ set((state) => ({
7651
+ conversations: state.conversations.filter((c) => !c.incognito),
7652
+ currentId: null
7653
+ }));
7654
+ return;
7655
+ }
7656
+ const { selectedModel } = useModelStore.getState();
7657
+ const now = /* @__PURE__ */ new Date();
7658
+ const newConv = normalizeConversation({
7659
+ id: (0, import_uuid2.v4)(),
7660
+ name: "Incognito chat",
7661
+ history: [],
7662
+ model: selectedModel,
7663
+ createdAt: now,
7664
+ updatedAt: now,
7665
+ version: 0,
7666
+ incognito: true
7667
+ });
7668
+ set((state) => ({
7669
+ conversations: [...state.conversations, newConv],
7670
+ currentId: newConv.id
7671
+ }));
7672
+ },
7641
7673
  deleteConversation: (id) => {
7642
7674
  const runHydrate = async () => {
7643
7675
  try {
@@ -8492,7 +8524,7 @@ function buildProjectMeta(project) {
8492
8524
  }
8493
8525
  function snapshotConversationMetaMap(conversations) {
8494
8526
  return new Map(
8495
- conversations.map((conversation) => [
8527
+ conversations.filter((conversation) => !conversation.incognito).map((conversation) => [
8496
8528
  conversation.id,
8497
8529
  buildConversationMeta(conversation)
8498
8530
  ])
@@ -8523,6 +8555,7 @@ function ensureTrackersInitialized() {
8523
8555
  }
8524
8556
  const nextMeta = snapshotConversationMetaMap(conversations);
8525
8557
  for (const conversation of conversations) {
8558
+ if (conversation.incognito) continue;
8526
8559
  const previous = conversationsMeta.get(conversation.id);
8527
8560
  const updatedAtMs = conversation.updatedAt ? conversation.updatedAt.getTime() : 0;
8528
8561
  if (!previous) {
@@ -8613,6 +8646,8 @@ if (typeof window !== "undefined") {
8613
8646
  });
8614
8647
  }
8615
8648
  function queueConversationUpsert(id) {
8649
+ const conversation = useConversationStore.getState().conversations.find((c) => c.id === id);
8650
+ if (conversation?.incognito) return;
8616
8651
  useConversationSyncStore.setState((state) => {
8617
8652
  const upserts = new Set(state.pendingConversationUpserts);
8618
8653
  const deletes = new Set(state.pendingConversationDeletes);
@@ -14871,6 +14906,7 @@ var MemoryModal = ({ open, onClose }) => {
14871
14906
  },
14872
14907
  disableSwipeToOpen: true,
14873
14908
  ModalProps: { keepMounted: true },
14909
+ sx: { zIndex: 2e3 },
14874
14910
  PaperProps: {
14875
14911
  sx: {
14876
14912
  height: "min(720px, 82vh)",
@@ -16887,7 +16923,7 @@ var FeedbackModal = ({
16887
16923
  sx: {
16888
16924
  display: "grid",
16889
16925
  gridTemplateRows: "auto auto auto auto",
16890
- rowGap: "24px",
16926
+ rowGap: "16px",
16891
16927
  columnGap: "0px",
16892
16928
  width: "100%"
16893
16929
  },
@@ -16903,35 +16939,6 @@ var FeedbackModal = ({
16903
16939
  mb: 0
16904
16940
  },
16905
16941
  children: [
16906
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16907
- import_material13.Box,
16908
- {
16909
- sx: {
16910
- gridColumn: "1 / -1",
16911
- display: "flex",
16912
- alignItems: "center",
16913
- gap: "8px",
16914
- mb: 0,
16915
- mt: 2,
16916
- alignSelf: "end"
16917
- },
16918
- children: [
16919
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.MessageSquare, { size: 20, color: theme.palette.text.primary }),
16920
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16921
- import_material13.Typography,
16922
- {
16923
- variant: "h6",
16924
- sx: {
16925
- fontWeight: 600,
16926
- color: theme.palette.text.primary,
16927
- mb: 0
16928
- },
16929
- children: "Feedback Details"
16930
- }
16931
- )
16932
- ]
16933
- }
16934
- ),
16935
16942
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16936
16943
  import_material13.TextField,
16937
16944
  {
@@ -17073,7 +17080,7 @@ var FeedbackModal = ({
17073
17080
  {
17074
17081
  fullWidth: true,
17075
17082
  multiline: true,
17076
- rows: 5,
17083
+ rows: 3,
17077
17084
  label: "Description",
17078
17085
  value: formData.description,
17079
17086
  onChange: handleInputChange("description"),
@@ -17124,118 +17131,37 @@ var FeedbackModal = ({
17124
17131
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
17125
17132
  import_material13.Box,
17126
17133
  {
17127
- className: "impact-assessment-card impact-section",
17128
- sx: {
17129
- flex: 1,
17130
- minWidth: 300,
17131
- display: "flex",
17132
- flexDirection: "column",
17133
- height: "100%",
17134
- p: 0
17135
- },
17134
+ className: "impact-section",
17135
+ sx: { flex: 1, minWidth: 260, display: "flex", flexDirection: "column" },
17136
17136
  children: [
17137
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
17138
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Brain, { size: 20, color: theme.palette.warning.main }),
17139
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Impact Assessment" })
17137
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Typography, { variant: "body2", sx: { fontWeight: 600, mb: 0.5 }, children: [
17138
+ "How annoying is this?",
17139
+ " ",
17140
+ ["\u{1F60A}", "\u{1F610}", "\u{1F644}", "\u{1F620}", "\u{1F92C}"][(formData.annoyanceLevel ?? 3) - 1],
17141
+ " ",
17142
+ "(",
17143
+ formData.annoyanceLevel ?? 3,
17144
+ "/5)"
17140
17145
  ] }),
17141
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17142
- import_material13.Paper,
17146
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Box, { sx: { px: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17147
+ import_material13.Slider,
17143
17148
  {
17144
- variant: "outlined",
17149
+ size: "small",
17150
+ value: formData.annoyanceLevel,
17151
+ onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
17152
+ min: 1,
17153
+ max: 5,
17154
+ step: 1,
17155
+ marks: true,
17145
17156
  sx: {
17146
- p: 4,
17147
- borderRadius: 3,
17148
- minHeight: 180,
17149
- background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.01) 100%)" : "linear-gradient(135deg, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.03) 100%)",
17150
- border: `1px solid ${theme.palette.divider}`,
17151
- transition: "all 0.2s ease",
17152
- display: "flex",
17153
- flexDirection: "column",
17154
- flex: 1,
17155
- justifyContent: "center",
17156
- height: "100%",
17157
- "&:hover": {
17158
- transform: "translateY(-2px)",
17159
- boxShadow: theme.palette.mode === "dark" ? "0 8px 24px rgba(0,0,0,0.4)" : "0 8px 24px rgba(0,0,0,0.12)"
17157
+ "& .MuiSlider-track": {
17158
+ background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
17159
+ border: "none"
17160
+ },
17161
+ "& .MuiSlider-thumb": {
17162
+ background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`
17160
17163
  }
17161
- },
17162
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Stack, { spacing: 3, children: [
17163
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Typography, { variant: "subtitle1", sx: { fontWeight: 600, display: "flex", alignItems: "center", gap: 2 }, children: [
17164
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17165
- import_material13.Box,
17166
- {
17167
- sx: {
17168
- width: 28,
17169
- height: 28,
17170
- borderRadius: "50%",
17171
- bgcolor: theme.palette.warning.main + "20",
17172
- display: "flex",
17173
- alignItems: "center",
17174
- justifyContent: "center",
17175
- fontSize: "14px"
17176
- },
17177
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Brain, { size: 22, color: theme.palette.warning.main })
17178
- }
17179
- ),
17180
- "How annoying is this issue? (",
17181
- formData.annoyanceLevel,
17182
- "/5)"
17183
- ] }),
17184
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Box, { sx: { px: 2, py: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17185
- import_material13.Slider,
17186
- {
17187
- value: formData.annoyanceLevel,
17188
- onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
17189
- min: 1,
17190
- max: 5,
17191
- step: 1,
17192
- marks: [
17193
- { value: 1, label: "\u{1F60A} Not at all" },
17194
- { value: 2, label: "\u{1F610} Slightly" },
17195
- { value: 3, label: "\u{1F644} Moderately" },
17196
- { value: 4, label: "\u{1F620} Very" },
17197
- { value: 5, label: "\u{1F92C} Extremely" }
17198
- ],
17199
- sx: {
17200
- height: 8,
17201
- "& .MuiSlider-mark": {
17202
- backgroundColor: theme.palette.divider,
17203
- width: 3,
17204
- height: 3
17205
- },
17206
- "& .MuiSlider-markLabel": {
17207
- fontSize: "0.8rem",
17208
- color: theme.palette.text.secondary,
17209
- transform: "translateX(-50%)",
17210
- whiteSpace: "nowrap",
17211
- top: 32,
17212
- fontWeight: 500
17213
- },
17214
- "& .MuiSlider-thumb": {
17215
- width: 24,
17216
- height: 24,
17217
- background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`,
17218
- boxShadow: `0 4px 12px ${theme.palette.warning.main}40`,
17219
- "&:hover, &.Mui-focusVisible": {
17220
- boxShadow: `0 0 0 12px ${theme.palette.warning.main}20, 0 4px 12px ${theme.palette.warning.main}40`
17221
- }
17222
- },
17223
- "& .MuiSlider-track": {
17224
- background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
17225
- height: 6,
17226
- border: "none"
17227
- },
17228
- "& .MuiSlider-rail": {
17229
- height: 6,
17230
- backgroundColor: theme.palette.divider,
17231
- opacity: 0.3
17232
- },
17233
- mb: 5
17234
- // Space for labels
17235
- }
17236
- }
17237
- ) })
17238
- ] })
17164
+ }
17239
17165
  }
17240
17166
  ) })
17241
17167
  ]
@@ -17254,109 +17180,63 @@ var FeedbackModal = ({
17254
17180
  p: 0
17255
17181
  },
17256
17182
  children: [
17257
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
17258
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 20, color: theme.palette.primary.main }),
17259
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Attachments" })
17260
- ] }),
17261
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
17262
- import_material13.Box,
17263
- {
17264
- sx: {
17265
- height: "100%",
17266
- display: "flex",
17267
- flexDirection: "column",
17268
- justifyContent: "center",
17269
- p: 0,
17270
- mb: 0,
17271
- backgroundColor: "transparent",
17272
- boxShadow: "none",
17273
- border: "none"
17274
- },
17275
- onClick: () => fileInputRef.current?.click(),
17276
- children: [
17277
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17278
- "input",
17279
- {
17280
- ref: fileInputRef,
17281
- type: "file",
17282
- accept: "image/*",
17283
- style: { display: "none" },
17284
- onChange: handleFileUpload
17285
- }
17286
- ),
17287
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
17288
- import_material13.Box,
17289
- {
17290
- sx: {
17291
- flex: 1,
17292
- display: "flex",
17293
- flexDirection: "column",
17294
- justifyContent: "center",
17295
- alignItems: "center",
17296
- p: 2,
17297
- border: "2px dashed",
17298
- borderColor: (theme2) => theme2.palette.divider,
17299
- borderRadius: 2,
17300
- height: "100%",
17301
- mb: 0,
17302
- backgroundColor: "transparent",
17303
- boxShadow: "none"
17304
- },
17305
- children: [
17306
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17307
- import_material13.Avatar,
17308
- {
17309
- sx: {
17310
- width: 56,
17311
- height: 56,
17312
- bgcolor: theme.palette.primary.main + "15",
17313
- color: theme.palette.primary.main,
17314
- boxShadow: `0 4px 16px ${theme.palette.primary.main}20`,
17315
- transition: "all 0.3s ease"
17316
- },
17317
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 28 })
17318
- }
17319
- ),
17320
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { textAlign: "center" }, children: [
17321
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, mb: 1, fontSize: "1.1rem" }, children: "Attach One Image" }),
17322
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "body2", color: "text.secondary", sx: { mb: 1, fontSize: "0.95rem" }, children: "Click here to upload a single image" }),
17323
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", color: "text.secondary", sx: {
17324
- opacity: 0.8,
17325
- fontSize: "0.85rem",
17326
- background: theme.palette.mode === "dark" ? "rgba(255,255,255,0.05)" : "rgba(0,0,0,0.05)",
17327
- px: 2,
17328
- py: 0.5,
17329
- borderRadius: 1
17330
- }, children: "Support: Images only (JPG, PNG, GIF) - Max 10MB" })
17331
- ] })
17332
- ]
17333
- }
17334
- ),
17335
- (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17336
- import_material13.Alert,
17337
- {
17338
- severity: "info",
17339
- sx: {
17340
- mt: "auto",
17341
- textAlign: "left",
17342
- fontSize: "0.75rem",
17343
- py: 0.5,
17344
- background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(33,150,243,0.1) 0%, rgba(25,118,210,0.1) 100%)" : "linear-gradient(135deg, rgba(33,150,243,0.05) 0%, rgba(25,118,210,0.05) 100%)",
17345
- border: `1px solid ${theme.palette.info.main}30`,
17346
- "& .MuiAlert-icon": {
17347
- color: theme.palette.info.main,
17348
- fontSize: "0.875rem"
17349
- },
17350
- "& .MuiAlert-message": {
17351
- fontSize: "0.75rem"
17352
- }
17353
- },
17354
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", sx: { fontWeight: 600, display: "block" }, children: formData.images && formData.images.length > 0 ? "\u{1F4CE} Image will be copied to clipboard - paste in email!" : "\u{1F4CE} Files ready for email attachment" })
17183
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { onClick: () => fileInputRef.current?.click(), children: [
17184
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17185
+ "input",
17186
+ {
17187
+ ref: fileInputRef,
17188
+ type: "file",
17189
+ accept: "image/*",
17190
+ style: { display: "none" },
17191
+ onChange: handleFileUpload
17192
+ }
17193
+ ),
17194
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
17195
+ import_material13.Box,
17196
+ {
17197
+ sx: {
17198
+ display: "flex",
17199
+ alignItems: "center",
17200
+ gap: 1,
17201
+ px: 1.5,
17202
+ py: 1,
17203
+ border: "1px dashed",
17204
+ borderColor: (theme2) => theme2.palette.divider,
17205
+ borderRadius: 2,
17206
+ cursor: "pointer",
17207
+ color: theme.palette.text.secondary,
17208
+ "&:hover": { borderColor: theme.palette.primary.main, color: theme.palette.primary.main }
17209
+ },
17210
+ children: [
17211
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 18 }),
17212
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "body2", sx: { fontWeight: 500 }, children: "Attach an image" }),
17213
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", color: "text.secondary", sx: { ml: "auto" }, children: "JPG/PNG/GIF \xB7 10MB" })
17214
+ ]
17215
+ }
17216
+ ),
17217
+ (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17218
+ import_material13.Alert,
17219
+ {
17220
+ severity: "info",
17221
+ sx: {
17222
+ mt: "auto",
17223
+ textAlign: "left",
17224
+ fontSize: "0.75rem",
17225
+ py: 0.5,
17226
+ background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(33,150,243,0.1) 0%, rgba(25,118,210,0.1) 100%)" : "linear-gradient(135deg, rgba(33,150,243,0.05) 0%, rgba(25,118,210,0.05) 100%)",
17227
+ border: `1px solid ${theme.palette.info.main}30`,
17228
+ "& .MuiAlert-icon": {
17229
+ color: theme.palette.info.main,
17230
+ fontSize: "0.875rem"
17231
+ },
17232
+ "& .MuiAlert-message": {
17233
+ fontSize: "0.75rem"
17355
17234
  }
17356
- )
17357
- ]
17358
- }
17359
- ) }),
17235
+ },
17236
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", sx: { fontWeight: 600, display: "block" }, children: formData.images && formData.images.length > 0 ? "\u{1F4CE} Image will be copied to clipboard - paste in email!" : "\u{1F4CE} Files ready for email attachment" })
17237
+ }
17238
+ )
17239
+ ] }) }),
17360
17240
  formData.images && formData.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { mt: 2 }, children: [
17361
17241
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
17362
17242
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Camera, { size: 16 }),