@burtson-labs/bandit-engine 2.0.117 → 2.0.118

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  chat_default
3
- } from "./chunk-UEWOOLEB.mjs";
3
+ } from "./chunk-RBMHAWU7.mjs";
4
4
  import "./chunk-ONQMRE2G.mjs";
5
5
  import "./chunk-W2EPDR5G.mjs";
6
6
  import "./chunk-BN3D45E2.mjs";
@@ -13,4 +13,4 @@ import "./chunk-BJTO5JO5.mjs";
13
13
  export {
14
14
  chat_default as default
15
15
  };
16
- //# sourceMappingURL=chat-J2WTUEBN.mjs.map
16
+ //# sourceMappingURL=chat-RGXA26FO.mjs.map
@@ -24,6 +24,7 @@ import {
24
24
  GraphicEqIcon,
25
25
  HearingDisabledIcon,
26
26
  HomeIcon,
27
+ LockIcon,
27
28
  MicIcon,
28
29
  NotesIcon,
29
30
  NotesIconOutlined,
@@ -8172,8 +8173,14 @@ var ChatAppBar = ({
8172
8173
  }
8173
8174
  void triggerSync({ force: true });
8174
8175
  };
8175
- const { hasTTS, hasSTT, isAdmin, getCurrentTier, hasLimitedAdminDashboard } = useFeatures();
8176
+ const { hasTTS, hasSTT, isAdmin, getCurrentTier, hasLimitedAdminDashboard, isSubscribed } = useFeatures();
8176
8177
  const { showVoiceControls, showLimitedAdminPanel } = useFeatureVisibility();
8178
+ const frontierEligible = (() => {
8179
+ if (isAdmin() || isSubscribed()) return true;
8180
+ const tier = String(getCurrentTier());
8181
+ return tier !== "trial" && tier !== "expired" && tier !== "free" && tier !== "basic";
8182
+ })();
8183
+ const plansPath = "/plans";
8177
8184
  const isTTSAvailable = !!packageSettings?.gatewayApiUrl && preferences.ttsEnabled && hasTTS();
8178
8185
  const currentConversation = conversations.find((c) => c.id === currentId);
8179
8186
  const conversationCountDisplay = conversations.length > 99 ? "99+" : conversations.length.toString();
@@ -8552,12 +8559,14 @@ var ChatAppBar = ({
8552
8559
  engine.thinking && "thinking",
8553
8560
  engine.cloud && "cloud"
8554
8561
  ].filter(Boolean);
8562
+ const isGated = engine.cloud && !frontierEligible;
8555
8563
  return /* @__PURE__ */ jsxs13(
8556
8564
  MenuItem5,
8557
8565
  {
8558
8566
  selected: engine.id === resolvedEngineId,
8559
- disabled: !engine.available,
8567
+ disabled: !engine.available || isGated,
8560
8568
  onClick: () => {
8569
+ if (isGated) return;
8561
8570
  useEngineStore.getState().setSelectedEngine(engine.id);
8562
8571
  setEngineAnchorEl(null);
8563
8572
  },
@@ -8569,14 +8578,61 @@ var ChatAppBar = ({
8569
8578
  py: 1,
8570
8579
  px: 2,
8571
8580
  maxWidth: 360,
8572
- whiteSpace: "normal"
8581
+ whiteSpace: "normal",
8582
+ // Keep gated rows readable (MUI disabled dims to ~38%) so the
8583
+ // upsell stays legible.
8584
+ ...isGated ? { opacity: 1, "&.Mui-disabled": { opacity: 1 } } : {}
8573
8585
  },
8574
8586
  children: [
8575
8587
  /* @__PURE__ */ jsxs13(Box13, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%" }, children: [
8576
- /* @__PURE__ */ jsx16(Typography9, { variant: "body2", sx: { fontWeight: 600, flex: 1 }, children: cleanEngineName(engine.displayName) }),
8577
- engine.id === resolvedEngineId && /* @__PURE__ */ jsx16(Box13, { sx: { width: 8, height: 8, borderRadius: "50%", bgcolor: theme.palette.primary.main } })
8588
+ isGated && /* @__PURE__ */ jsx16(
8589
+ LockIcon,
8590
+ {
8591
+ fontSize: "small",
8592
+ sx: { fontSize: "0.95rem", color: theme.palette.text.secondary }
8593
+ }
8594
+ ),
8595
+ /* @__PURE__ */ jsx16(
8596
+ Typography9,
8597
+ {
8598
+ variant: "body2",
8599
+ sx: {
8600
+ fontWeight: 600,
8601
+ flex: 1,
8602
+ color: isGated ? theme.palette.text.secondary : void 0
8603
+ },
8604
+ children: cleanEngineName(engine.displayName)
8605
+ }
8606
+ ),
8607
+ engine.id === resolvedEngineId && !isGated && /* @__PURE__ */ jsx16(Box13, { sx: { width: 8, height: 8, borderRadius: "50%", bgcolor: theme.palette.primary.main } })
8578
8608
  ] }),
8579
- /* @__PURE__ */ jsx16(Typography9, { variant: "caption", sx: { color: theme.palette.text.secondary }, children: engine.available ? engine.description : engine.unavailableReason || "Unavailable" }),
8609
+ /* @__PURE__ */ jsx16(Typography9, { variant: "caption", sx: { color: theme.palette.text.secondary }, children: isGated ? "Premium engine \u2014 available on a paid plan." : engine.available ? engine.description : engine.unavailableReason || "Unavailable" }),
8610
+ isGated && /* @__PURE__ */ jsx16(
8611
+ Button7,
8612
+ {
8613
+ size: "small",
8614
+ variant: "text",
8615
+ startIcon: /* @__PURE__ */ jsx16(LockIcon, { sx: { fontSize: "0.85rem" } }),
8616
+ onClick: (e) => {
8617
+ e.stopPropagation();
8618
+ setEngineAnchorEl(null);
8619
+ safeNavigate(plansPath);
8620
+ },
8621
+ sx: {
8622
+ mt: 0.25,
8623
+ px: 0.75,
8624
+ py: 0.1,
8625
+ minWidth: 0,
8626
+ textTransform: "none",
8627
+ fontSize: "0.7rem",
8628
+ fontWeight: 600,
8629
+ color: theme.palette.primary.main,
8630
+ // Re-enable pointer events the disabled MenuItem strips.
8631
+ pointerEvents: "auto"
8632
+ },
8633
+ children: "Upgrade to unlock"
8634
+ }
8635
+ ),
8580
8636
  badges.length > 0 && /* @__PURE__ */ jsx16(Box13, { sx: { display: "flex", gap: 0.5, flexWrap: "wrap", mt: 0.25 }, children: badges.map((b) => /* @__PURE__ */ jsx16(
8581
8637
  Box13,
8582
8638
  {
@@ -10725,4 +10781,4 @@ var chat_default = Chat;
10725
10781
  export {
10726
10782
  chat_default
10727
10783
  };
10728
- //# sourceMappingURL=chunk-UEWOOLEB.mjs.map
10784
+ //# sourceMappingURL=chunk-RBMHAWU7.mjs.map