@tangle-network/sandbox-ui 0.70.0 → 0.72.0

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/chat.d.ts CHANGED
@@ -230,16 +230,21 @@ interface AgentSessionControlsProps {
230
230
  * existing behavior. `"gear"` collapses them behind a single compact gear
231
231
  * button whose menu opens up-and-left, for right-anchored copilots where
232
232
  * the composer is tight. Nested model/harness/effort menus render adjacent
233
- * on the left of the gear menu.
233
+ * on the left of the gear menu. `"combined"` is the gear layout with a
234
+ * labeled trigger instead of the anonymous icon: the button summarizes the
235
+ * current selection as text (`harness · model · effort`) so the choice stays
236
+ * visible without opening the menu — for a composer that wants one compact
237
+ * agent control it can read at a glance.
234
238
  */
235
- layout?: "inline" | "gear";
239
+ layout?: "inline" | "gear" | "combined";
236
240
  /**
237
- * Where the inline pickers open. `"auto"` (default) keeps Radix's
238
- * collision-aware behavior: the menus open downward but flip up when the
239
- * composer is docked at the bottom of the viewport. `"down"` pins them open
240
- * downward — for a composer floating in open space (e.g. a centered new-chat
241
- * surface) where flipping up would cover the heading. Only affects the
242
- * `"inline"` layout; the gear menu is unchanged.
241
+ * Where the pickers open. `"auto"` (default) keeps Radix's collision-aware
242
+ * behavior: the menus open downward but flip up when the composer is docked
243
+ * at the bottom of the viewport. `"down"` pins them open downward — for a
244
+ * composer floating in open space (e.g. a centered new-chat surface) where
245
+ * flipping up would cover the heading. Honored by the `"inline"` strip (its
246
+ * nested pickers) and by the `"combined"` panel (which opens downward instead
247
+ * of upward); the `"gear"` menu keeps its own placement.
243
248
  */
244
249
  menuPlacement?: "auto" | "down";
245
250
  }
package/dist/chat.js CHANGED
@@ -17,9 +17,9 @@ import {
17
17
  modelProvider,
18
18
  snapHarnessToModel,
19
19
  snapModelToHarness
20
- } from "./chunk-XL573ZOV.js";
21
- import "./chunk-HU4B2M4K.js";
22
- import "./chunk-SF6LPMMN.js";
20
+ } from "./chunk-UQXDIQWD.js";
21
+ import "./chunk-IWIZ7RZE.js";
22
+ import "./chunk-L62ZT6RS.js";
23
23
  import "./chunk-EI44GEQ5.js";
24
24
  import "./chunk-U67V476Y.js";
25
25
  export {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  moonshot_default
3
- } from "./chunk-SF6LPMMN.js";
3
+ } from "./chunk-L62ZT6RS.js";
4
4
  import {
5
5
  cn
6
6
  } from "./chunk-EI44GEQ5.js";
@@ -360,7 +360,7 @@ function ModelPicker({
360
360
  children: [
361
361
  currentIdentity ? /* @__PURE__ */ jsx2(ModelBrandStack, { identity: currentIdentity, size: "sm" }) : /* @__PURE__ */ jsx2(Sparkles, { className: "h-3 w-3 text-muted-foreground" }),
362
362
  /* @__PURE__ */ jsx2("span", { className: "truncate max-w-[160px]", children: currentLabel || placeholder }),
363
- /* @__PURE__ */ jsx2(ChevronDown, { className: "h-3 w-3 text-muted-foreground transition-transform data-[state=open]:rotate-180" })
363
+ /* @__PURE__ */ jsx2(ChevronDown, { className: "ml-auto h-3 w-3 shrink-0 text-muted-foreground transition-transform data-[state=open]:rotate-180" })
364
364
  ]
365
365
  }
366
366
  ) : /* @__PURE__ */ jsxs2(
@@ -793,5 +793,8 @@ export {
793
793
  DEFAULT_FEATURED_MODEL_IDS,
794
794
  formatPricing,
795
795
  formatContext,
796
- ModelPicker
796
+ resolveModelBrandIdentity,
797
+ stripBrandPrefix,
798
+ ModelPicker,
799
+ ModelBrandStack
797
800
  };
@@ -2,11 +2,14 @@ import {
2
2
  HARNESS_OPTIONS,
3
3
  HarnessLogo,
4
4
  chatCapableHarnesses
5
- } from "./chunk-HU4B2M4K.js";
5
+ } from "./chunk-IWIZ7RZE.js";
6
6
  import {
7
+ ModelBrandStack,
7
8
  ModelPicker,
8
- canonicalModelId
9
- } from "./chunk-SF6LPMMN.js";
9
+ canonicalModelId,
10
+ resolveModelBrandIdentity,
11
+ stripBrandPrefix
12
+ } from "./chunk-L62ZT6RS.js";
10
13
  import {
11
14
  cn
12
15
  } from "./chunk-EI44GEQ5.js";
@@ -110,9 +113,9 @@ function ReasoningLevelPicker({
110
113
  ),
111
114
  "aria-label": "Reasoning level",
112
115
  children: [
113
- /* @__PURE__ */ jsx(Brain, { className: "h-3.5 w-3.5 text-muted-foreground" }),
116
+ /* @__PURE__ */ jsx(Brain, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
114
117
  /* @__PURE__ */ jsx("span", { children: label }),
115
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" })
118
+ /* @__PURE__ */ jsx(ChevronDown, { className: "ml-auto h-3.5 w-3.5 shrink-0 text-muted-foreground" })
116
119
  ]
117
120
  }
118
121
  ) }),
@@ -470,7 +473,7 @@ function ProfileForm({
470
473
  }
471
474
 
472
475
  // src/chat/agent-session-controls.tsx
473
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
476
+ import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
474
477
  function selectorIgnoreNote(harness) {
475
478
  const ignoresModel = !harnessHonorsModel(harness);
476
479
  const ignoresEffort = !harnessHonorsEffort(harness);
@@ -592,7 +595,8 @@ function HarnessDropdown({
592
595
  newChatLabel,
593
596
  side = "bottom",
594
597
  align = "start",
595
- avoidCollisions
598
+ avoidCollisions,
599
+ triggerClassName
596
600
  }) {
597
601
  const allowed = new Set(
598
602
  available ?? HARNESS_OPTIONS.map((h) => h.type)
@@ -624,13 +628,14 @@ function HarnessDropdown({
624
628
  "text-xs font-medium text-foreground shadow-sm transition-colors",
625
629
  "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
626
630
  "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high",
627
- "disabled:cursor-not-allowed disabled:opacity-60"
631
+ "disabled:cursor-not-allowed disabled:opacity-60",
632
+ triggerClassName
628
633
  ),
629
634
  "aria-label": "Agent harness",
630
635
  children: [
631
- /* @__PURE__ */ jsx3(HarnessLogo, { type: value, size: 16 }),
632
- /* @__PURE__ */ jsx3("span", { children: selected?.label ?? value }),
633
- !locked && /* @__PURE__ */ jsx3(ChevronDown3, { className: "h-3.5 w-3.5 text-muted-foreground" })
636
+ /* @__PURE__ */ jsx3(HarnessLogo, { type: value, size: 16, className: "shrink-0" }),
637
+ /* @__PURE__ */ jsx3("span", { className: "truncate", children: selected?.label ?? value }),
638
+ !locked && /* @__PURE__ */ jsx3(ChevronDown3, { className: "ml-auto h-3.5 w-3.5 shrink-0 text-muted-foreground" })
634
639
  ]
635
640
  }
636
641
  ) }),
@@ -745,9 +750,11 @@ function AgentSessionControls({
745
750
  )
746
751
  ) : model?.models;
747
752
  const harnessAvailable = harness?.available ?? (context === "chat" ? chatCapableHarnesses : void 0);
748
- const menuSide = layout === "gear" ? "left" : "bottom";
749
- const menuAlign = layout === "gear" ? "end" : "start";
750
- const inlineForceDown = menuPlacement === "down" && layout !== "gear";
753
+ const collapsed = layout === "gear" || layout === "combined";
754
+ const menuSide = collapsed ? "left" : "bottom";
755
+ const menuAlign = collapsed ? "end" : "start";
756
+ const collapsedTriggerClass = layout === "combined" ? "w-full bg-transparent shadow-none hover:bg-muted/60 data-[state=open]:bg-muted/60" : collapsed ? "w-full" : void 0;
757
+ const inlineForceDown = menuPlacement === "down" && layout === "inline";
751
758
  const avoidCollisions = inlineForceDown ? false : void 0;
752
759
  const harnessNode = harness && /* @__PURE__ */ jsx3(
753
760
  HarnessDropdown,
@@ -757,7 +764,8 @@ function AgentSessionControls({
757
764
  onChange: handleHarnessChange,
758
765
  side: menuSide,
759
766
  align: menuAlign,
760
- avoidCollisions
767
+ avoidCollisions,
768
+ triggerClassName: collapsedTriggerClass
761
769
  }
762
770
  );
763
771
  const profileNode = profile && /* @__PURE__ */ jsx3(
@@ -771,7 +779,7 @@ function AgentSessionControls({
771
779
  onUpdate: profile.onUpdate,
772
780
  onDelete: profile.onDelete,
773
781
  disabled: profile.disabled,
774
- side: inlineForceDown || layout === "gear" ? "bottom" : "top"
782
+ side: inlineForceDown || collapsed ? "bottom" : "top"
775
783
  }
776
784
  );
777
785
  const modelNode = model && /* @__PURE__ */ jsx3(
@@ -786,8 +794,9 @@ function AgentSessionControls({
786
794
  popular: model.popular,
787
795
  recents: model.recents,
788
796
  disabled: model.disabled || (visibleModels ?? []).length === 0 || !selectorHonorsModel,
789
- side: layout === "gear" ? void 0 : "bottom",
790
- avoidCollisions
797
+ side: collapsed ? void 0 : "bottom",
798
+ avoidCollisions,
799
+ triggerClassName: collapsedTriggerClass
791
800
  }
792
801
  );
793
802
  const modelReasoning = modelReasoningCapability(model?.models, model?.value);
@@ -800,8 +809,9 @@ function AgentSessionControls({
800
809
  options: reasoningOptions,
801
810
  disabled: reasoning.disabled || !selectorHonorsEffort,
802
811
  available: harness ? reasoningEffortsFor(harness.value, modelReasoning) : reasoning.available,
803
- side: layout === "gear" ? void 0 : "bottom",
804
- avoidCollisions
812
+ side: collapsed ? void 0 : "bottom",
813
+ avoidCollisions,
814
+ triggerClassName: collapsedTriggerClass
805
815
  }
806
816
  );
807
817
  if (layout === "gear") {
@@ -817,6 +827,76 @@ function AgentSessionControls({
817
827
  }
818
828
  );
819
829
  }
830
+ if (layout === "combined") {
831
+ const segments = [];
832
+ if (harness) {
833
+ const harnessLabel = HARNESS_OPTIONS.find((option) => option.type === harness.value)?.label ?? harness.value;
834
+ segments.push({
835
+ key: "harness",
836
+ label: harnessLabel,
837
+ node: /* @__PURE__ */ jsxs3("span", { className: "flex items-center gap-1.5", children: [
838
+ /* @__PURE__ */ jsx3(HarnessLogo, { type: harness.value, size: 16, className: "shrink-0" }),
839
+ harnessLabel
840
+ ] })
841
+ });
842
+ }
843
+ if (model && selectorHonorsModel) {
844
+ const current = (model.models ?? []).find(
845
+ (entry) => canonicalModelId(entry) === model.value
846
+ );
847
+ const identity = current ? resolveModelBrandIdentity(current) : null;
848
+ const modelLabel = stripBrandPrefix(
849
+ current?.name ?? current?.id ?? model.value,
850
+ identity
851
+ );
852
+ segments.push({
853
+ key: "model",
854
+ label: modelLabel,
855
+ node: /* @__PURE__ */ jsxs3("span", { className: "flex items-center gap-1.5", children: [
856
+ identity && /* @__PURE__ */ jsx3(ModelBrandStack, { identity, size: "sm" }),
857
+ modelLabel
858
+ ] })
859
+ });
860
+ }
861
+ if (reasoning && selectorHonorsEffort) {
862
+ const effortLabel = (reasoningOptions ?? DEFAULT_REASONING_LEVEL_OPTIONS).find(
863
+ (option) => option.value === reasoning.value
864
+ )?.label ?? "Auto";
865
+ segments.push({
866
+ key: "effort",
867
+ label: effortLabel,
868
+ node: /* @__PURE__ */ jsxs3("span", { className: "flex items-center gap-1.5", children: [
869
+ /* @__PURE__ */ jsx3("span", { className: "flex w-3.5 shrink-0 justify-center", children: /* @__PURE__ */ jsx3(ReasoningGlyph, { level: reasoning.value }) }),
870
+ effortLabel
871
+ ] })
872
+ });
873
+ }
874
+ const summary = /* @__PURE__ */ jsx3("span", { className: "flex items-center gap-1.5", children: segments.map((segment, index) => /* @__PURE__ */ jsxs3(React3.Fragment, { children: [
875
+ index > 0 && /* @__PURE__ */ jsx3(
876
+ "span",
877
+ {
878
+ className: "text-base leading-none text-muted-foreground/60",
879
+ "aria-hidden": true,
880
+ children: "\xB7"
881
+ }
882
+ ),
883
+ segment.node
884
+ ] }, segment.key)) });
885
+ return /* @__PURE__ */ jsx3(
886
+ SummaryControls,
887
+ {
888
+ className,
889
+ summary,
890
+ title: segments.map((segment) => segment.label).join(" \xB7 "),
891
+ contentSide: menuPlacement === "down" ? "bottom" : "top",
892
+ profileNode,
893
+ harnessNode,
894
+ modelNode,
895
+ reasoningNode,
896
+ trailing
897
+ }
898
+ );
899
+ }
820
900
  return /* @__PURE__ */ jsxs3(
821
901
  "div",
822
902
  {
@@ -839,6 +919,91 @@ function GearControls({
839
919
  modelNode,
840
920
  reasoningNode,
841
921
  trailing
922
+ }) {
923
+ return /* @__PURE__ */ jsx3(
924
+ CollapsibleControls,
925
+ {
926
+ className,
927
+ trigger: /* @__PURE__ */ jsx3(SlidersHorizontal, { className: "h-4 w-4 text-muted-foreground" }),
928
+ triggerClassName: cn(
929
+ "inline-flex h-8 w-8 items-center justify-center rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container",
930
+ "text-foreground shadow-sm transition-colors",
931
+ "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
932
+ "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high"
933
+ ),
934
+ contentSide: "top",
935
+ contentClassName: cn(
936
+ "w-56 gap-2 border-[var(--md3-outline-variant)] bg-surface-container-highest p-2",
937
+ "shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"
938
+ ),
939
+ profileNode,
940
+ harnessNode,
941
+ modelNode,
942
+ reasoningNode,
943
+ trailing
944
+ }
945
+ );
946
+ }
947
+ function GearSection({
948
+ label,
949
+ children
950
+ }) {
951
+ return /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-1", children: [
952
+ /* @__PURE__ */ jsx3("span", { className: "px-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground/70", children: label }),
953
+ children
954
+ ] });
955
+ }
956
+ function SummaryControls({
957
+ className,
958
+ summary,
959
+ title,
960
+ contentSide,
961
+ profileNode,
962
+ harnessNode,
963
+ modelNode,
964
+ reasoningNode,
965
+ trailing
966
+ }) {
967
+ return /* @__PURE__ */ jsx3(
968
+ CollapsibleControls,
969
+ {
970
+ className,
971
+ trigger: /* @__PURE__ */ jsxs3(Fragment2, { children: [
972
+ summary,
973
+ /* @__PURE__ */ jsx3(ChevronDown3, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" })
974
+ ] }),
975
+ triggerTitle: title,
976
+ triggerClassName: cn(
977
+ // Container-less trigger (Codex-style): bare label + chevron docked in
978
+ // the composer footer, no border/card/shadow. Only a subtle rounded
979
+ // hover/open tint marks it as interactive.
980
+ "inline-flex h-8 items-center gap-1.5 rounded-md px-1.5",
981
+ "whitespace-nowrap text-xs font-medium text-foreground transition-colors",
982
+ "hover:bg-muted/50 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
983
+ "data-[state=open]:bg-muted/50"
984
+ ),
985
+ contentSide,
986
+ contentClassName: "w-64 gap-2.5 border-border bg-popover p-2.5 text-popover-foreground shadow-lg",
987
+ profileNode,
988
+ harnessNode,
989
+ modelNode,
990
+ reasoningNode,
991
+ trailing
992
+ }
993
+ );
994
+ }
995
+ function CollapsibleControls({
996
+ className,
997
+ trigger,
998
+ triggerTitle,
999
+ triggerClassName,
1000
+ contentSide,
1001
+ contentClassName,
1002
+ profileNode,
1003
+ harnessNode,
1004
+ modelNode,
1005
+ reasoningNode,
1006
+ trailing
842
1007
  }) {
843
1008
  return /* @__PURE__ */ jsxs3(
844
1009
  "div",
@@ -853,19 +1018,15 @@ function GearControls({
853
1018
  {
854
1019
  type: "button",
855
1020
  "aria-label": "Session controls",
856
- className: cn(
857
- "inline-flex h-8 w-8 items-center justify-center rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container",
858
- "text-foreground shadow-sm transition-colors",
859
- "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
860
- "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high"
861
- ),
862
- children: /* @__PURE__ */ jsx3(SlidersHorizontal, { className: "h-4 w-4 text-muted-foreground" })
1021
+ title: triggerTitle,
1022
+ className: triggerClassName,
1023
+ children: trigger
863
1024
  }
864
1025
  ) }),
865
1026
  /* @__PURE__ */ jsx3(DropdownMenu2.Portal, { children: /* @__PURE__ */ jsxs3(
866
1027
  DropdownMenu2.Content,
867
1028
  {
868
- side: "top",
1029
+ side: contentSide,
869
1030
  align: "end",
870
1031
  sideOffset: 8,
871
1032
  onInteractOutside: (event) => {
@@ -877,11 +1038,11 @@ function GearControls({
877
1038
  }
878
1039
  },
879
1040
  className: cn(
880
- "z-50 flex w-56 flex-col gap-2 rounded-[var(--radius-md)] border border-[var(--md3-outline-variant)] bg-surface-container-highest p-2",
881
- "shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]",
1041
+ "z-50 flex flex-col rounded-[var(--radius-md)] border",
882
1042
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
883
1043
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
884
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95"
1044
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1045
+ contentClassName
885
1046
  ),
886
1047
  children: [
887
1048
  profileNode && /* @__PURE__ */ jsx3(GearSection, { label: "Agent", children: profileNode }),
@@ -896,15 +1057,6 @@ function GearControls({
896
1057
  }
897
1058
  );
898
1059
  }
899
- function GearSection({
900
- label,
901
- children
902
- }) {
903
- return /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-1", children: [
904
- /* @__PURE__ */ jsx3("span", { className: "px-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground/70", children: label }),
905
- children
906
- ] });
907
- }
908
1060
 
909
1061
  // src/chat/agent-composer.tsx
910
1062
  import {
@@ -917,7 +1069,7 @@ import {
917
1069
  X
918
1070
  } from "lucide-react";
919
1071
  import * as React4 from "react";
920
- import { Fragment, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1072
+ import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
921
1073
  function AgentComposer({
922
1074
  value,
923
1075
  onChange,
@@ -1103,7 +1255,7 @@ function AgentComposer({
1103
1255
  reasoning
1104
1256
  }
1105
1257
  ) }),
1106
- onAttach && /* @__PURE__ */ jsxs4(Fragment, { children: [
1258
+ onAttach && /* @__PURE__ */ jsxs4(Fragment3, { children: [
1107
1259
  /* @__PURE__ */ jsx4(
1108
1260
  "button",
1109
1261
  {
@@ -1131,7 +1283,7 @@ function AgentComposer({
1131
1283
  }
1132
1284
  )
1133
1285
  ] }),
1134
- onAttachFolder && /* @__PURE__ */ jsxs4(Fragment, { children: [
1286
+ onAttachFolder && /* @__PURE__ */ jsxs4(Fragment3, { children: [
1135
1287
  /* @__PURE__ */ jsx4(
1136
1288
  "button",
1137
1289
  {
package/dist/dashboard.js CHANGED
@@ -71,7 +71,7 @@ import {
71
71
  HarnessLogo,
72
72
  HarnessPicker,
73
73
  chatCapableHarnesses
74
- } from "./chunk-HU4B2M4K.js";
74
+ } from "./chunk-IWIZ7RZE.js";
75
75
  import {
76
76
  DEFAULT_FEATURED_MODEL_IDS,
77
77
  ModelPicker,
@@ -80,7 +80,7 @@ import {
80
80
  formatContext,
81
81
  formatPricing,
82
82
  modelDedupKey
83
- } from "./chunk-SF6LPMMN.js";
83
+ } from "./chunk-L62ZT6RS.js";
84
84
  import "./chunk-EI44GEQ5.js";
85
85
  import "./chunk-U67V476Y.js";
86
86
  export {
package/dist/globals.css CHANGED
@@ -1171,9 +1171,6 @@
1171
1171
  .max-w-\[14rem\] {
1172
1172
  max-width: 14rem;
1173
1173
  }
1174
- .max-w-\[72\%\] {
1175
- max-width: 72%;
1176
- }
1177
1174
  .max-w-\[75\%\] {
1178
1175
  max-width: 75%;
1179
1176
  }
@@ -1686,15 +1683,9 @@
1686
1683
  .rounded-\[4px\] {
1687
1684
  border-radius: 4px;
1688
1685
  }
1689
- .rounded-\[18px\] {
1690
- border-radius: 18px;
1691
- }
1692
1686
  .rounded-\[20px\] {
1693
1687
  border-radius: 20px;
1694
1688
  }
1695
- .rounded-\[22px\] {
1696
- border-radius: 22px;
1697
- }
1698
1689
  .rounded-\[26px\] {
1699
1690
  border-radius: 26px;
1700
1691
  }
@@ -1754,9 +1745,6 @@
1754
1745
  border-bottom-right-radius: var(--radius-sm);
1755
1746
  border-bottom-left-radius: var(--radius-sm);
1756
1747
  }
1757
- .rounded-br-\[12px\] {
1758
- border-bottom-right-radius: 12px;
1759
- }
1760
1748
  .rounded-bl-lg {
1761
1749
  border-bottom-left-radius: var(--radius-lg);
1762
1750
  }
@@ -2099,9 +2087,6 @@
2099
2087
  .bg-\[var\(--accent-surface-strong\)\] {
2100
2088
  background-color: var(--accent-surface-strong);
2101
2089
  }
2102
- .bg-\[var\(--bg-card\)\] {
2103
- background-color: var(--bg-card);
2104
- }
2105
2090
  .bg-\[var\(--bg-root\)\] {
2106
2091
  background-color: var(--bg-root);
2107
2092
  }
@@ -2129,9 +2114,6 @@
2129
2114
  .bg-\[var\(--brand-glow\)\] {
2130
2115
  background-color: var(--brand-glow);
2131
2116
  }
2132
- .bg-\[var\(--brand-primary\)\] {
2133
- background-color: var(--brand-primary);
2134
- }
2135
2117
  .bg-\[var\(--brand-primary\,hsl\(var\(--primary\)\)\)\] {
2136
2118
  background-color: var(--brand-primary,hsl(var(--primary)));
2137
2119
  }
@@ -2171,6 +2153,12 @@
2171
2153
  .bg-\[var\(--md3-outline-variant\)\] {
2172
2154
  background-color: var(--md3-outline-variant);
2173
2155
  }
2156
+ .bg-\[var\(--md3-surface-container\)\] {
2157
+ background-color: var(--md3-surface-container);
2158
+ }
2159
+ .bg-\[var\(--md3-surface-container-high\)\] {
2160
+ background-color: var(--md3-surface-container-high);
2161
+ }
2174
2162
  .bg-\[var\(--status-error\,\#ff4d6d\)\]\/15 {
2175
2163
  background-color: var(--status-error,#ff4d6d);
2176
2164
  @supports (color: color-mix(in lab, red, red)) {
@@ -2219,12 +2207,6 @@
2219
2207
  .bg-accent {
2220
2208
  background-color: var(--color-accent);
2221
2209
  }
2222
- .bg-accent\/20 {
2223
- background-color: color-mix(in srgb, hsl(var(--accent)) 20%, transparent);
2224
- @supports (color: color-mix(in lab, red, red)) {
2225
- background-color: color-mix(in oklab, var(--color-accent) 20%, transparent);
2226
- }
2227
- }
2228
2210
  .bg-amber-500\/10 {
2229
2211
  background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 10%, transparent);
2230
2212
  @supports (color: color-mix(in lab, red, red)) {
@@ -2282,12 +2264,6 @@
2282
2264
  .bg-card {
2283
2265
  background-color: var(--color-card);
2284
2266
  }
2285
- .bg-card\/40 {
2286
- background-color: color-mix(in srgb, hsl(var(--card)) 40%, transparent);
2287
- @supports (color: color-mix(in lab, red, red)) {
2288
- background-color: color-mix(in oklab, var(--color-card) 40%, transparent);
2289
- }
2290
- }
2291
2267
  .bg-card\/50 {
2292
2268
  background-color: color-mix(in srgb, hsl(var(--card)) 50%, transparent);
2293
2269
  @supports (color: color-mix(in lab, red, red)) {
@@ -2932,10 +2908,6 @@
2932
2908
  --tw-leading: calc(var(--spacing) * 6);
2933
2909
  line-height: calc(var(--spacing) * 6);
2934
2910
  }
2935
- .leading-6\.5 {
2936
- --tw-leading: calc(var(--spacing) * 6.5);
2937
- line-height: calc(var(--spacing) * 6.5);
2938
- }
2939
2911
  .leading-7 {
2940
2912
  --tw-leading: calc(var(--spacing) * 7);
2941
2913
  line-height: calc(var(--spacing) * 7);
@@ -3191,9 +3163,6 @@
3191
3163
  .text-\[var\(--surface-warning-text\)\] {
3192
3164
  color: var(--surface-warning-text);
3193
3165
  }
3194
- .text-\[var\(--text-dim\)\] {
3195
- color: var(--text-dim);
3196
- }
3197
3166
  .text-\[var\(--text-muted\)\] {
3198
3167
  color: var(--text-muted);
3199
3168
  }
@@ -3323,12 +3292,6 @@
3323
3292
  .text-white {
3324
3293
  color: var(--color-white);
3325
3294
  }
3326
- .text-white\/60 {
3327
- color: color-mix(in srgb, #fff 60%, transparent);
3328
- @supports (color: color-mix(in lab, red, red)) {
3329
- color: color-mix(in oklab, var(--color-white) 60%, transparent);
3330
- }
3331
- }
3332
3295
  .text-yellow-400 {
3333
3296
  color: var(--color-yellow-400);
3334
3297
  }
@@ -3415,10 +3378,6 @@
3415
3378
  --tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(15,23,42,0.08));
3416
3379
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3417
3380
  }
3418
- .shadow-\[0_8px_20px_rgba\(15\,23\,42\,0\.12\)\] {
3419
- --tw-shadow: 0 8px 20px var(--tw-shadow-color, rgba(15,23,42,0.12));
3420
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3421
- }
3422
3381
  .shadow-\[0_8px_30px_rgba\(0\,0\,0\,0\.45\)\] {
3423
3382
  --tw-shadow: 0 8px 30px var(--tw-shadow-color, rgba(0,0,0,0.45));
3424
3383
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3443,6 +3402,10 @@
3443
3402
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3444
3403
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3445
3404
  }
3405
+ .shadow-none {
3406
+ --tw-shadow: 0 0 #0000;
3407
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3408
+ }
3446
3409
  .shadow-sm {
3447
3410
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3448
3411
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3789,6 +3752,11 @@
3789
3752
  background-color: var(--color-primary);
3790
3753
  }
3791
3754
  }
3755
+ .first\:mt-0 {
3756
+ &:first-child {
3757
+ margin-top: calc(var(--spacing) * 0);
3758
+ }
3759
+ }
3792
3760
  .last\:border-0 {
3793
3761
  &:last-child {
3794
3762
  border-style: var(--tw-border-style);
@@ -3991,6 +3959,13 @@
3991
3959
  }
3992
3960
  }
3993
3961
  }
3962
+ .hover\:bg-\[var\(--md3-surface-container-high\)\] {
3963
+ &:hover {
3964
+ @media (hover: hover) {
3965
+ background-color: var(--md3-surface-container-high);
3966
+ }
3967
+ }
3968
+ }
3994
3969
  .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25 {
3995
3970
  &:hover {
3996
3971
  @media (hover: hover) {
@@ -4039,16 +4014,6 @@
4039
4014
  }
4040
4015
  }
4041
4016
  }
4042
- .hover\:bg-accent\/25 {
4043
- &:hover {
4044
- @media (hover: hover) {
4045
- background-color: color-mix(in srgb, hsl(var(--accent)) 25%, transparent);
4046
- @supports (color: color-mix(in lab, red, red)) {
4047
- background-color: color-mix(in oklab, var(--color-accent) 25%, transparent);
4048
- }
4049
- }
4050
- }
4051
- }
4052
4017
  .hover\:bg-accent\/30 {
4053
4018
  &:hover {
4054
4019
  @media (hover: hover) {
@@ -4193,6 +4158,16 @@
4193
4158
  }
4194
4159
  }
4195
4160
  }
4161
+ .hover\:bg-muted\/60 {
4162
+ &:hover {
4163
+ @media (hover: hover) {
4164
+ background-color: color-mix(in srgb, hsl(var(--muted)) 60%, transparent);
4165
+ @supports (color: color-mix(in lab, red, red)) {
4166
+ background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
4167
+ }
4168
+ }
4169
+ }
4170
+ }
4196
4171
  .hover\:bg-muted\/80 {
4197
4172
  &:hover {
4198
4173
  @media (hover: hover) {
@@ -4883,6 +4858,14 @@
4883
4858
  }
4884
4859
  }
4885
4860
  }
4861
+ .data-\[state\=open\]\:bg-muted\/60 {
4862
+ &[data-state="open"] {
4863
+ background-color: color-mix(in srgb, hsl(var(--muted)) 60%, transparent);
4864
+ @supports (color: color-mix(in lab, red, red)) {
4865
+ background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
4866
+ }
4867
+ }
4868
+ }
4886
4869
  .data-\[state\=open\]\:bg-surface-container-high {
4887
4870
  &[data-state="open"] {
4888
4871
  background-color: var(--color-surface-container-high);
@@ -5340,7 +5323,7 @@
5340
5323
  --hsl-card-foreground: 240 6% 93%;
5341
5324
  --hsl-popover: 240 5% 17%;
5342
5325
  --hsl-popover-foreground: 240 6% 93%;
5343
- --hsl-primary: 239 84% 67%;
5326
+ --hsl-primary: 239 84% 62%;
5344
5327
  --hsl-primary-foreground: 0 0% 100%;
5345
5328
  --hsl-secondary: 240 5% 15%;
5346
5329
  --hsl-secondary-foreground: 240 6% 93%;
@@ -5348,7 +5331,7 @@
5348
5331
  --hsl-muted-foreground: 240 4% 64%;
5349
5332
  --hsl-accent: 240 5% 15%;
5350
5333
  --hsl-accent-foreground: 240 6% 93%;
5351
- --hsl-destructive: 348 90% 60%;
5334
+ --hsl-destructive: 348 74% 48%;
5352
5335
  --hsl-destructive-foreground: 0 0% 100%;
5353
5336
  --hsl-border: 240 5% 16%;
5354
5337
  --hsl-input: 240 5% 15%;
@@ -5373,7 +5356,7 @@
5373
5356
  --destructive: var(--hsl-destructive);
5374
5357
  --destructive-foreground: var(--hsl-destructive-foreground);
5375
5358
  --border: var(--hsl-border);
5376
- --input: var(--hsl-input);
5359
+ --input: var(--hsl-muted-foreground);
5377
5360
  --ring: var(--hsl-ring);
5378
5361
  --success: var(--hsl-success);
5379
5362
  --warning: var(--hsl-warning);
@@ -5463,10 +5446,10 @@
5463
5446
  --border-hover: rgba(255, 255, 255, 0.12);
5464
5447
  --border-accent: rgba(129, 140, 248, 0.20);
5465
5448
  --border-accent-hover: rgba(129, 140, 248, 0.35);
5466
- --btn-primary-bg: #6366F1;
5467
- --btn-primary-hover: #818CF8;
5449
+ --btn-primary-bg: #5B4ED4;
5450
+ --btn-primary-hover: #4F46E5;
5468
5451
  --btn-primary-text: #ffffff;
5469
- --btn-cta-bg: #818CF8;
5452
+ --btn-cta-bg: #4F46E5;
5470
5453
  --btn-cta-text: #FFFFFF;
5471
5454
  --code-keyword: #A5AAFC;
5472
5455
  --code-string: #34D399;
@@ -5525,7 +5508,7 @@
5525
5508
  --tool-card-px: 0.75rem;
5526
5509
  --tool-card-py: 0.5rem;
5527
5510
  --tool-icon-size: 1.75rem;
5528
- --syntax-comment: #6B7094;
5511
+ --syntax-comment: #8b8fbc;
5529
5512
  --syntax-keyword: #A78FFF;
5530
5513
  --syntax-string: #10b981;
5531
5514
  --syntax-function: #6D9FFF;
package/dist/index.js CHANGED
@@ -102,7 +102,7 @@ import {
102
102
  modelProvider,
103
103
  snapHarnessToModel,
104
104
  snapModelToHarness
105
- } from "./chunk-XL573ZOV.js";
105
+ } from "./chunk-UQXDIQWD.js";
106
106
  import {
107
107
  ExpandedToolDetail,
108
108
  InlineThinkingItem,
@@ -318,7 +318,7 @@ import {
318
318
  HarnessLogo,
319
319
  HarnessPicker,
320
320
  chatCapableHarnesses
321
- } from "./chunk-HU4B2M4K.js";
321
+ } from "./chunk-IWIZ7RZE.js";
322
322
  import {
323
323
  DEFAULT_FEATURED_MODEL_IDS,
324
324
  ModelPicker,
@@ -327,7 +327,7 @@ import {
327
327
  formatContext,
328
328
  formatPricing,
329
329
  modelDedupKey
330
- } from "./chunk-SF6LPMMN.js";
330
+ } from "./chunk-L62ZT6RS.js";
331
331
  import "./chunk-EI44GEQ5.js";
332
332
  import {
333
333
  OpenUIArtifactRenderer
package/dist/pages.js CHANGED
@@ -24,7 +24,7 @@ import {
24
24
  Switch,
25
25
  Textarea
26
26
  } from "./chunk-4ZZUMXPX.js";
27
- import "./chunk-SF6LPMMN.js";
27
+ import "./chunk-L62ZT6RS.js";
28
28
  import {
29
29
  cn
30
30
  } from "./chunk-EI44GEQ5.js";
package/dist/styles.css CHANGED
@@ -1171,9 +1171,6 @@
1171
1171
  .max-w-\[14rem\] {
1172
1172
  max-width: 14rem;
1173
1173
  }
1174
- .max-w-\[72\%\] {
1175
- max-width: 72%;
1176
- }
1177
1174
  .max-w-\[75\%\] {
1178
1175
  max-width: 75%;
1179
1176
  }
@@ -1686,15 +1683,9 @@
1686
1683
  .rounded-\[4px\] {
1687
1684
  border-radius: 4px;
1688
1685
  }
1689
- .rounded-\[18px\] {
1690
- border-radius: 18px;
1691
- }
1692
1686
  .rounded-\[20px\] {
1693
1687
  border-radius: 20px;
1694
1688
  }
1695
- .rounded-\[22px\] {
1696
- border-radius: 22px;
1697
- }
1698
1689
  .rounded-\[26px\] {
1699
1690
  border-radius: 26px;
1700
1691
  }
@@ -1754,9 +1745,6 @@
1754
1745
  border-bottom-right-radius: var(--radius-sm);
1755
1746
  border-bottom-left-radius: var(--radius-sm);
1756
1747
  }
1757
- .rounded-br-\[12px\] {
1758
- border-bottom-right-radius: 12px;
1759
- }
1760
1748
  .rounded-bl-lg {
1761
1749
  border-bottom-left-radius: var(--radius-lg);
1762
1750
  }
@@ -2099,9 +2087,6 @@
2099
2087
  .bg-\[var\(--accent-surface-strong\)\] {
2100
2088
  background-color: var(--accent-surface-strong);
2101
2089
  }
2102
- .bg-\[var\(--bg-card\)\] {
2103
- background-color: var(--bg-card);
2104
- }
2105
2090
  .bg-\[var\(--bg-root\)\] {
2106
2091
  background-color: var(--bg-root);
2107
2092
  }
@@ -2129,9 +2114,6 @@
2129
2114
  .bg-\[var\(--brand-glow\)\] {
2130
2115
  background-color: var(--brand-glow);
2131
2116
  }
2132
- .bg-\[var\(--brand-primary\)\] {
2133
- background-color: var(--brand-primary);
2134
- }
2135
2117
  .bg-\[var\(--brand-primary\,hsl\(var\(--primary\)\)\)\] {
2136
2118
  background-color: var(--brand-primary,hsl(var(--primary)));
2137
2119
  }
@@ -2171,6 +2153,12 @@
2171
2153
  .bg-\[var\(--md3-outline-variant\)\] {
2172
2154
  background-color: var(--md3-outline-variant);
2173
2155
  }
2156
+ .bg-\[var\(--md3-surface-container\)\] {
2157
+ background-color: var(--md3-surface-container);
2158
+ }
2159
+ .bg-\[var\(--md3-surface-container-high\)\] {
2160
+ background-color: var(--md3-surface-container-high);
2161
+ }
2174
2162
  .bg-\[var\(--status-error\,\#ff4d6d\)\]\/15 {
2175
2163
  background-color: var(--status-error,#ff4d6d);
2176
2164
  @supports (color: color-mix(in lab, red, red)) {
@@ -2219,12 +2207,6 @@
2219
2207
  .bg-accent {
2220
2208
  background-color: var(--color-accent);
2221
2209
  }
2222
- .bg-accent\/20 {
2223
- background-color: color-mix(in srgb, hsl(var(--accent)) 20%, transparent);
2224
- @supports (color: color-mix(in lab, red, red)) {
2225
- background-color: color-mix(in oklab, var(--color-accent) 20%, transparent);
2226
- }
2227
- }
2228
2210
  .bg-amber-500\/10 {
2229
2211
  background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 10%, transparent);
2230
2212
  @supports (color: color-mix(in lab, red, red)) {
@@ -2282,12 +2264,6 @@
2282
2264
  .bg-card {
2283
2265
  background-color: var(--color-card);
2284
2266
  }
2285
- .bg-card\/40 {
2286
- background-color: color-mix(in srgb, hsl(var(--card)) 40%, transparent);
2287
- @supports (color: color-mix(in lab, red, red)) {
2288
- background-color: color-mix(in oklab, var(--color-card) 40%, transparent);
2289
- }
2290
- }
2291
2267
  .bg-card\/50 {
2292
2268
  background-color: color-mix(in srgb, hsl(var(--card)) 50%, transparent);
2293
2269
  @supports (color: color-mix(in lab, red, red)) {
@@ -2932,10 +2908,6 @@
2932
2908
  --tw-leading: calc(var(--spacing) * 6);
2933
2909
  line-height: calc(var(--spacing) * 6);
2934
2910
  }
2935
- .leading-6\.5 {
2936
- --tw-leading: calc(var(--spacing) * 6.5);
2937
- line-height: calc(var(--spacing) * 6.5);
2938
- }
2939
2911
  .leading-7 {
2940
2912
  --tw-leading: calc(var(--spacing) * 7);
2941
2913
  line-height: calc(var(--spacing) * 7);
@@ -3191,9 +3163,6 @@
3191
3163
  .text-\[var\(--surface-warning-text\)\] {
3192
3164
  color: var(--surface-warning-text);
3193
3165
  }
3194
- .text-\[var\(--text-dim\)\] {
3195
- color: var(--text-dim);
3196
- }
3197
3166
  .text-\[var\(--text-muted\)\] {
3198
3167
  color: var(--text-muted);
3199
3168
  }
@@ -3323,12 +3292,6 @@
3323
3292
  .text-white {
3324
3293
  color: var(--color-white);
3325
3294
  }
3326
- .text-white\/60 {
3327
- color: color-mix(in srgb, #fff 60%, transparent);
3328
- @supports (color: color-mix(in lab, red, red)) {
3329
- color: color-mix(in oklab, var(--color-white) 60%, transparent);
3330
- }
3331
- }
3332
3295
  .text-yellow-400 {
3333
3296
  color: var(--color-yellow-400);
3334
3297
  }
@@ -3415,10 +3378,6 @@
3415
3378
  --tw-shadow: 0 6px 16px var(--tw-shadow-color, rgba(15,23,42,0.08));
3416
3379
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3417
3380
  }
3418
- .shadow-\[0_8px_20px_rgba\(15\,23\,42\,0\.12\)\] {
3419
- --tw-shadow: 0 8px 20px var(--tw-shadow-color, rgba(15,23,42,0.12));
3420
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3421
- }
3422
3381
  .shadow-\[0_8px_30px_rgba\(0\,0\,0\,0\.45\)\] {
3423
3382
  --tw-shadow: 0 8px 30px var(--tw-shadow-color, rgba(0,0,0,0.45));
3424
3383
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3443,6 +3402,10 @@
3443
3402
  --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3444
3403
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3445
3404
  }
3405
+ .shadow-none {
3406
+ --tw-shadow: 0 0 #0000;
3407
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3408
+ }
3446
3409
  .shadow-sm {
3447
3410
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3448
3411
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3789,6 +3752,11 @@
3789
3752
  background-color: var(--color-primary);
3790
3753
  }
3791
3754
  }
3755
+ .first\:mt-0 {
3756
+ &:first-child {
3757
+ margin-top: calc(var(--spacing) * 0);
3758
+ }
3759
+ }
3792
3760
  .last\:border-0 {
3793
3761
  &:last-child {
3794
3762
  border-style: var(--tw-border-style);
@@ -3991,6 +3959,13 @@
3991
3959
  }
3992
3960
  }
3993
3961
  }
3962
+ .hover\:bg-\[var\(--md3-surface-container-high\)\] {
3963
+ &:hover {
3964
+ @media (hover: hover) {
3965
+ background-color: var(--md3-surface-container-high);
3966
+ }
3967
+ }
3968
+ }
3994
3969
  .hover\:bg-\[var\(--status-error\,\#ff4d6d\)\]\/25 {
3995
3970
  &:hover {
3996
3971
  @media (hover: hover) {
@@ -4039,16 +4014,6 @@
4039
4014
  }
4040
4015
  }
4041
4016
  }
4042
- .hover\:bg-accent\/25 {
4043
- &:hover {
4044
- @media (hover: hover) {
4045
- background-color: color-mix(in srgb, hsl(var(--accent)) 25%, transparent);
4046
- @supports (color: color-mix(in lab, red, red)) {
4047
- background-color: color-mix(in oklab, var(--color-accent) 25%, transparent);
4048
- }
4049
- }
4050
- }
4051
- }
4052
4017
  .hover\:bg-accent\/30 {
4053
4018
  &:hover {
4054
4019
  @media (hover: hover) {
@@ -4193,6 +4158,16 @@
4193
4158
  }
4194
4159
  }
4195
4160
  }
4161
+ .hover\:bg-muted\/60 {
4162
+ &:hover {
4163
+ @media (hover: hover) {
4164
+ background-color: color-mix(in srgb, hsl(var(--muted)) 60%, transparent);
4165
+ @supports (color: color-mix(in lab, red, red)) {
4166
+ background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
4167
+ }
4168
+ }
4169
+ }
4170
+ }
4196
4171
  .hover\:bg-muted\/80 {
4197
4172
  &:hover {
4198
4173
  @media (hover: hover) {
@@ -4883,6 +4858,14 @@
4883
4858
  }
4884
4859
  }
4885
4860
  }
4861
+ .data-\[state\=open\]\:bg-muted\/60 {
4862
+ &[data-state="open"] {
4863
+ background-color: color-mix(in srgb, hsl(var(--muted)) 60%, transparent);
4864
+ @supports (color: color-mix(in lab, red, red)) {
4865
+ background-color: color-mix(in oklab, var(--color-muted) 60%, transparent);
4866
+ }
4867
+ }
4868
+ }
4886
4869
  .data-\[state\=open\]\:bg-surface-container-high {
4887
4870
  &[data-state="open"] {
4888
4871
  background-color: var(--color-surface-container-high);
@@ -5340,7 +5323,7 @@
5340
5323
  --hsl-card-foreground: 240 6% 93%;
5341
5324
  --hsl-popover: 240 5% 17%;
5342
5325
  --hsl-popover-foreground: 240 6% 93%;
5343
- --hsl-primary: 239 84% 67%;
5326
+ --hsl-primary: 239 84% 62%;
5344
5327
  --hsl-primary-foreground: 0 0% 100%;
5345
5328
  --hsl-secondary: 240 5% 15%;
5346
5329
  --hsl-secondary-foreground: 240 6% 93%;
@@ -5348,7 +5331,7 @@
5348
5331
  --hsl-muted-foreground: 240 4% 64%;
5349
5332
  --hsl-accent: 240 5% 15%;
5350
5333
  --hsl-accent-foreground: 240 6% 93%;
5351
- --hsl-destructive: 348 90% 60%;
5334
+ --hsl-destructive: 348 74% 48%;
5352
5335
  --hsl-destructive-foreground: 0 0% 100%;
5353
5336
  --hsl-border: 240 5% 16%;
5354
5337
  --hsl-input: 240 5% 15%;
@@ -5373,7 +5356,7 @@
5373
5356
  --destructive: var(--hsl-destructive);
5374
5357
  --destructive-foreground: var(--hsl-destructive-foreground);
5375
5358
  --border: var(--hsl-border);
5376
- --input: var(--hsl-input);
5359
+ --input: var(--hsl-muted-foreground);
5377
5360
  --ring: var(--hsl-ring);
5378
5361
  --success: var(--hsl-success);
5379
5362
  --warning: var(--hsl-warning);
@@ -5463,10 +5446,10 @@
5463
5446
  --border-hover: rgba(255, 255, 255, 0.12);
5464
5447
  --border-accent: rgba(129, 140, 248, 0.20);
5465
5448
  --border-accent-hover: rgba(129, 140, 248, 0.35);
5466
- --btn-primary-bg: #6366F1;
5467
- --btn-primary-hover: #818CF8;
5449
+ --btn-primary-bg: #5B4ED4;
5450
+ --btn-primary-hover: #4F46E5;
5468
5451
  --btn-primary-text: #ffffff;
5469
- --btn-cta-bg: #818CF8;
5452
+ --btn-cta-bg: #4F46E5;
5470
5453
  --btn-cta-text: #FFFFFF;
5471
5454
  --code-keyword: #A5AAFC;
5472
5455
  --code-string: #34D399;
@@ -5525,7 +5508,7 @@
5525
5508
  --tool-card-px: 0.75rem;
5526
5509
  --tool-card-py: 0.5rem;
5527
5510
  --tool-icon-size: 1.75rem;
5528
- --syntax-comment: #6B7094;
5511
+ --syntax-comment: #8b8fbc;
5529
5512
  --syntax-keyword: #A78FFF;
5530
5513
  --syntax-string: #10b981;
5531
5514
  --syntax-function: #6D9FFF;
package/dist/tokens.css CHANGED
@@ -57,7 +57,7 @@
57
57
  --hsl-card-foreground: 240 6% 93%;
58
58
  --hsl-popover: 240 5% 17%; /* #28282d elevated */
59
59
  --hsl-popover-foreground: 240 6% 93%;
60
- --hsl-primary: 239 84% 67%;
60
+ --hsl-primary: 239 84% 62%;
61
61
  --hsl-primary-foreground: 0 0% 100%;
62
62
  --hsl-secondary: 240 5% 15%; /* #242428 surface-2 */
63
63
  --hsl-secondary-foreground: 240 6% 93%;
@@ -65,7 +65,7 @@
65
65
  --hsl-muted-foreground: 240 4% 64%; /* #9c9ca6 text-muted */
66
66
  --hsl-accent: 240 5% 15%; /* neutral hover (indigo lives in accent-surface-strong) */
67
67
  --hsl-accent-foreground: 240 6% 93%;
68
- --hsl-destructive: 348 90% 60%;
68
+ --hsl-destructive: 348 74% 48%;
69
69
  --hsl-destructive-foreground: 0 0% 100%;
70
70
  --hsl-border: 240 5% 16%; /* soft edge — fill carries separation, not the line */
71
71
  --hsl-input: 240 5% 15%;
@@ -92,7 +92,7 @@
92
92
  --destructive: var(--hsl-destructive);
93
93
  --destructive-foreground: var(--hsl-destructive-foreground);
94
94
  --border: var(--hsl-border);
95
- --input: var(--hsl-input);
95
+ --input: var(--hsl-muted-foreground);
96
96
  --ring: var(--hsl-ring);
97
97
  --success: var(--hsl-success);
98
98
  --warning: var(--hsl-warning);
@@ -207,10 +207,10 @@
207
207
  --border-accent-hover: rgba(129, 140, 248, 0.35);
208
208
 
209
209
  /* Buttons */
210
- --btn-primary-bg: #6366F1;
211
- --btn-primary-hover: #818CF8;
210
+ --btn-primary-bg: #5B4ED4;
211
+ --btn-primary-hover: #4F46E5;
212
212
  --btn-primary-text: #ffffff;
213
- --btn-cta-bg: #818CF8;
213
+ --btn-cta-bg: #4F46E5;
214
214
  --btn-cta-text: #FFFFFF;
215
215
 
216
216
  /* Code / runtime syntax */
@@ -288,7 +288,7 @@
288
288
  --tool-icon-size: 1.75rem;
289
289
 
290
290
  /* Syntax highlighting — override per-theme in vault section */
291
- --syntax-comment: #6B7094;
291
+ --syntax-comment: #8b8fbc;
292
292
  --syntax-keyword: #A78FFF;
293
293
  --syntax-string: #10b981;
294
294
  --syntax-function: #6D9FFF;
package/dist/workbench.js CHANGED
@@ -19,8 +19,8 @@ import "./chunk-VIREDUBF.js";
19
19
  import "./chunk-77WVVJA4.js";
20
20
  import "./chunk-OMUIPJQZ.js";
21
21
  import "./chunk-4ZZUMXPX.js";
22
- import "./chunk-HU4B2M4K.js";
23
- import "./chunk-SF6LPMMN.js";
22
+ import "./chunk-IWIZ7RZE.js";
23
+ import "./chunk-L62ZT6RS.js";
24
24
  import "./chunk-EI44GEQ5.js";
25
25
  import "./chunk-U67V476Y.js";
26
26
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.70.0",
3
+ "version": "0.72.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -123,8 +123,8 @@
123
123
  },
124
124
  "peerDependencies": {
125
125
  "@tangle-network/agent-interface": ">=0.17.0 <1.0.0",
126
- "@tangle-network/brand": "^0.8.0",
127
- "@tangle-network/ui": "^9.0.0",
126
+ "@tangle-network/brand": "^1.0.0",
127
+ "@tangle-network/ui": "^11.0.0",
128
128
  "@xyflow/react": "^12.0.0",
129
129
  "react": "^18 || ^19",
130
130
  "react-dom": "^18 || ^19"
@@ -178,8 +178,8 @@
178
178
  "@tailwindcss/postcss": "^4.2.2",
179
179
  "@tailwindcss/vite": "^4.2.2",
180
180
  "@tangle-network/agent-interface": ">=0.17.0 <1.0.0",
181
- "@tangle-network/brand": "^0.8.0",
182
- "@tangle-network/ui": "^9.0.0",
181
+ "@tangle-network/brand": "^1.0.0",
182
+ "@tangle-network/ui": "^11.0.0",
183
183
  "@tanstack/react-query": "^5.91.0",
184
184
  "@testing-library/dom": "^10.4.1",
185
185
  "@testing-library/jest-dom": "^6.9.1",