@trops/dash-core 0.1.663 → 0.1.664

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -47222,6 +47222,14 @@ function _arrayLikeToArray$n(r, a) { (null == a || a > r.length) && (a = r.lengt
47222
47222
  * Pure: no React, no IPC.
47223
47223
  */
47224
47224
 
47225
+ /** Status dot colours shared by the Bots view and Dashboard Config › Bots. */
47226
+ var STATUS_DOT$2 = {
47227
+ Idle: "bg-gray-500",
47228
+ Running: "bg-indigo-400",
47229
+ Paused: "bg-gray-400",
47230
+ "Needs approval": "bg-amber-400",
47231
+ Failed: "bg-red-400"
47232
+ };
47225
47233
  var norm = function norm(id) {
47226
47234
  return id === undefined || id === null || id === "" ? null : String(id);
47227
47235
  };
@@ -55544,6 +55552,68 @@ var PrivacySecurityList = function PrivacySecurityList(_ref) {
55544
55552
  });
55545
55553
  };
55546
55554
 
55555
+ function useConfigTokens() {
55556
+ var _ref = React.useContext(DashReact.ThemeContext) || {},
55557
+ _ref$currentTheme = _ref.currentTheme,
55558
+ currentTheme = _ref$currentTheme === void 0 ? {} : _ref$currentTheme;
55559
+ return {
55560
+ muted: currentTheme["text-neutral-medium"] || "text-gray-400",
55561
+ strong: currentTheme["text-neutral-light"] || "text-gray-200",
55562
+ hairline: currentTheme["border-neutral-dark"] || "border-gray-700",
55563
+ selectedBg: currentTheme["bg-neutral-very-dark"] || "bg-gray-800",
55564
+ selectedBorder: currentTheme["border-primary-dark"] || "border-gray-600",
55565
+ fieldBg: currentTheme["bg-neutral-very-dark"] || "bg-gray-900"
55566
+ };
55567
+ }
55568
+
55569
+ /**
55570
+ * A row in one of the modal's left-hand lists (provider types, widgets,
55571
+ * event handlers) — styled like the Bots view's team list.
55572
+ *
55573
+ * @param {{ title: React.ReactNode, subtitle?: React.ReactNode,
55574
+ * meta?: React.ReactNode, badge?: React.ReactNode,
55575
+ * active?: boolean, mono?: boolean, onClick: () => void }} props
55576
+ * `subtitle` is a registry id (monospace); `meta` a muted count line.
55577
+ */
55578
+ var ConfigListRow = function ConfigListRow(_ref2) {
55579
+ var title = _ref2.title,
55580
+ _ref2$subtitle = _ref2.subtitle,
55581
+ subtitle = _ref2$subtitle === void 0 ? null : _ref2$subtitle,
55582
+ _ref2$meta = _ref2.meta,
55583
+ meta = _ref2$meta === void 0 ? null : _ref2$meta,
55584
+ _ref2$badge = _ref2.badge,
55585
+ badge = _ref2$badge === void 0 ? null : _ref2$badge,
55586
+ _ref2$active = _ref2.active,
55587
+ active = _ref2$active === void 0 ? false : _ref2$active,
55588
+ _ref2$mono = _ref2.mono,
55589
+ mono = _ref2$mono === void 0 ? false : _ref2$mono,
55590
+ onClick = _ref2.onClick;
55591
+ var _useConfigTokens = useConfigTokens(),
55592
+ muted = _useConfigTokens.muted,
55593
+ selectedBg = _useConfigTokens.selectedBg,
55594
+ selectedBorder = _useConfigTokens.selectedBorder;
55595
+ return /*#__PURE__*/jsxRuntime.jsxs("button", {
55596
+ type: "button",
55597
+ onClick: onClick,
55598
+ "aria-current": active ? "true" : undefined,
55599
+ className: "w-full text-left rounded-lg px-3 py-2 border ".concat(active ? "".concat(selectedBg, " ").concat(selectedBorder) : "border-transparent"),
55600
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
55601
+ className: "flex flex-row items-center justify-between gap-2 min-w-0",
55602
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
55603
+ className: "text-sm font-medium truncate ".concat(mono ? "font-mono" : ""),
55604
+ children: title
55605
+ }), badge]
55606
+ }), subtitle ? /*#__PURE__*/jsxRuntime.jsx("div", {
55607
+ className: "text-xs font-mono truncate mt-0.5 ".concat(muted),
55608
+ title: typeof subtitle === "string" ? subtitle : undefined,
55609
+ children: subtitle
55610
+ }) : null, meta ? /*#__PURE__*/jsxRuntime.jsx("div", {
55611
+ className: "text-xs mt-0.5 ".concat(muted),
55612
+ children: meta
55613
+ }) : null]
55614
+ });
55615
+ };
55616
+
55547
55617
  /**
55548
55618
  * grantStaleness
55549
55619
  *
@@ -55714,6 +55784,8 @@ var ToolToggleList = function ToolToggleList(_ref2) {
55714
55784
  serverName = _ref2.serverName,
55715
55785
  onToggleTool = _ref2.onToggleTool,
55716
55786
  hasAnyGrantOnServer = _ref2.hasAnyGrantOnServer;
55787
+ var _useConfigTokens = useConfigTokens(),
55788
+ muted = _useConfigTokens.muted;
55717
55789
  if (declaredTools.length === 0 && grantedTools.length === 0) return null;
55718
55790
  var grantedSet = new Set(grantedTools);
55719
55791
  var staleSet = computeStaleItems(declaredTools, grantedTools, true);
@@ -55721,7 +55793,7 @@ var ToolToggleList = function ToolToggleList(_ref2) {
55721
55793
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55722
55794
  className: "flex flex-col space-y-1",
55723
55795
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
55724
- className: "text-xs opacity-50",
55796
+ className: "text-xs ".concat(muted),
55725
55797
  children: "Tools"
55726
55798
  }), all.map(function (tool) {
55727
55799
  var isGranted = grantedSet.has(tool);
@@ -55732,7 +55804,7 @@ var ToolToggleList = function ToolToggleList(_ref2) {
55732
55804
  // always allowed when the tool IS granted.
55733
55805
  var disabled = !isGranted && !hasAnyGrantOnServer;
55734
55806
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55735
- className: "flex flex-row items-center justify-between gap-2 py-1 px-2 -mx-2 rounded hover:bg-gray-800 transition-colors",
55807
+ className: "flex flex-row items-center justify-between gap-2 py-1 px-2 -mx-2 rounded-lg",
55736
55808
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
55737
55809
  className: "text-xs font-mono break-all ".concat(isStale ? "text-amber-400" : isGranted ? "opacity-100" : "opacity-50"),
55738
55810
  children: [tool, isStale && /*#__PURE__*/jsxRuntime.jsx("span", {
@@ -55756,6 +55828,8 @@ var PermsList = function PermsList(_ref3) {
55756
55828
  grantedItems = _ref3.grantedItems,
55757
55829
  validatesStale = _ref3.validatesStale,
55758
55830
  onDeleteItem = _ref3.onDeleteItem;
55831
+ var _useConfigTokens2 = useConfigTokens(),
55832
+ muted = _useConfigTokens2.muted;
55759
55833
  if (declaredItems.length === 0 && grantedItems.length === 0) return null;
55760
55834
  var grantedSet = new Set(grantedItems);
55761
55835
  var staleSet = computeStaleItems(declaredItems, grantedItems, validatesStale);
@@ -55763,14 +55837,14 @@ var PermsList = function PermsList(_ref3) {
55763
55837
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55764
55838
  className: "flex flex-col space-y-1",
55765
55839
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
55766
- className: "text-xs opacity-50",
55840
+ className: "text-xs ".concat(muted),
55767
55841
  children: label
55768
55842
  }), all.map(function (item) {
55769
55843
  var isGranted = grantedSet.has(item);
55770
55844
  var isStale = staleSet.has(item);
55771
55845
  var showTrash = isGranted && typeof onDeleteItem === "function";
55772
55846
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55773
- className: "flex flex-row items-start justify-between gap-2 py-1 px-2 -mx-2 rounded hover:bg-gray-800 transition-colors",
55847
+ className: "flex flex-row items-start justify-between gap-2 py-1 px-2 -mx-2 rounded-lg",
55774
55848
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
55775
55849
  className: "text-xs font-mono break-all ".concat(isStale ? "text-amber-400" : isGranted ? "opacity-100" : "opacity-50 line-through"),
55776
55850
  children: [item, isStale && /*#__PURE__*/jsxRuntime.jsx("span", {
@@ -55806,23 +55880,26 @@ var RevokeConfirmInline = function RevokeConfirmInline(_ref4) {
55806
55880
  body = _ref4.body,
55807
55881
  onCancel = _ref4.onCancel,
55808
55882
  onConfirm = _ref4.onConfirm;
55883
+ var _useConfigTokens3 = useConfigTokens(),
55884
+ muted = _useConfigTokens3.muted,
55885
+ strong = _useConfigTokens3.strong;
55809
55886
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55810
- className: "flex flex-col gap-2 border border-amber-500 rounded p-2 mt-1",
55887
+ className: "flex flex-col gap-2 border border-amber-500 rounded-lg p-2 mt-1",
55811
55888
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
55812
55889
  className: "flex flex-row items-center gap-2",
55813
55890
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
55814
55891
  icon: "triangle-exclamation",
55815
55892
  className: "h-3 w-3 text-amber-500"
55816
55893
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
55817
- className: "text-xs font-semibold text-gray-100",
55894
+ className: "text-xs font-semibold ".concat(strong),
55818
55895
  children: title
55819
55896
  })]
55820
55897
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
55821
- className: "text-xs text-gray-300 leading-relaxed",
55898
+ className: "text-xs leading-relaxed ".concat(muted),
55822
55899
  children: body
55823
55900
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
55824
55901
  className: "flex justify-end gap-2",
55825
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
55902
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
55826
55903
  title: "Cancel",
55827
55904
  onClick: onCancel,
55828
55905
  size: "sm"
@@ -55857,8 +55934,12 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55857
55934
  pendingRevoke = _useState2[0],
55858
55935
  setPendingRevoke = _useState2[1];
55859
55936
  var widgetSummary = describeWidgetGrant(grantedServers);
55937
+ var _useConfigTokens4 = useConfigTokens(),
55938
+ muted = _useConfigTokens4.muted,
55939
+ hairline = _useConfigTokens4.hairline;
55860
55940
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55861
- className: "flex flex-col space-y-3 border border-gray-700 rounded p-3",
55941
+ "data-testid": "widget-grant-row",
55942
+ className: "flex flex-col space-y-3 rounded-lg border px-3 py-2 ".concat(hairline),
55862
55943
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
55863
55944
  className: "flex flex-row items-center justify-between gap-2",
55864
55945
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -55874,11 +55955,11 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55874
55955
  })]
55875
55956
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
55876
55957
  className: "flex flex-row gap-2",
55877
- children: [!hasManifest && !granted && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
55958
+ children: [!hasManifest && !granted && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
55878
55959
  title: "Grant manually",
55879
55960
  onClick: onGrantManually,
55880
55961
  size: "sm"
55881
- }), Object.keys(grantedServers).length > 0 && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
55962
+ }), Object.keys(grantedServers).length > 0 && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
55882
55963
  title: "Revoke all",
55883
55964
  onClick: function onClick() {
55884
55965
  return setPendingRevoke("widget");
@@ -55897,18 +55978,19 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55897
55978
  onRevokeWidget && onRevokeWidget();
55898
55979
  }
55899
55980
  }), !declared && !granted && /*#__PURE__*/jsxRuntime.jsx("span", {
55900
- className: "text-xs opacity-50",
55981
+ className: "text-xs ".concat(muted),
55901
55982
  children: "This widget did not declare MCP permissions and the install-time scanner found nothing. Use Grant manually if you trust it."
55902
55983
  }), allServerNames.map(function (serverName) {
55903
55984
  var decl = declaredServers[serverName] || {};
55904
55985
  var grant = grantedServers[serverName];
55905
55986
  var allStale = isServerEntirelyStale(decl, grant);
55906
55987
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
55907
- className: "flex flex-col space-y-2 border-t border-gray-800 pt-2",
55988
+ "data-testid": "grant-server-".concat(serverName),
55989
+ className: "flex flex-col space-y-2 border-t pt-2 ".concat(hairline),
55908
55990
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
55909
55991
  className: "flex flex-row items-center justify-between gap-2",
55910
55992
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
55911
- className: "text-xs uppercase tracking-wider opacity-70",
55993
+ className: "text-xs uppercase tracking-wider ".concat(muted),
55912
55994
  children: [serverName, (grant === null || grant === void 0 ? void 0 : grant._labels) && grant._labels.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("span", {
55913
55995
  className: "ml-2 normal-case tracking-normal opacity-60",
55914
55996
  children: ["(", grant._labels.join(", "), ")"]
@@ -55921,7 +56003,7 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55921
56003
  children: [(decl.tools || []).length > 0 && onToggleAllForServer && /*#__PURE__*/jsxRuntime.jsxs("div", {
55922
56004
  className: "flex flex-row items-center gap-2",
55923
56005
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
55924
- className: "text-xs opacity-60 normal-case tracking-normal",
56006
+ className: "text-xs normal-case tracking-normal ".concat(muted),
55925
56007
  children: "Allow all"
55926
56008
  }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Switch, {
55927
56009
  checked: (decl.tools || []).length > 0 && (decl.tools || []).every(function (t) {
@@ -55931,7 +56013,7 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55931
56013
  return onToggleAllForServer(widgetId, serverName, next);
55932
56014
  }
55933
56015
  })]
55934
- }), grant && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
56016
+ }), grant && /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
55935
56017
  title: "Revoke server",
55936
56018
  onClick: function onClick() {
55937
56019
  return setPendingRevoke({
@@ -55953,7 +56035,7 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55953
56035
  onRevokeServer && onRevokeServer(serverName);
55954
56036
  }
55955
56037
  }), allStale && /*#__PURE__*/jsxRuntime.jsx("div", {
55956
- className: "text-xs text-amber-400 bg-amber-900 bg-opacity-20 border border-amber-700 rounded px-2 py-1.5",
56038
+ className: "text-xs text-amber-400 border border-amber-400 rounded-lg px-2 py-1.5",
55957
56039
  children: "All grants on this server are no longer in the manifest \u2014 the widget likely no longer uses this server. Consider revoking."
55958
56040
  }), /*#__PURE__*/jsxRuntime.jsx(ToolToggleList, {
55959
56041
  declaredTools: decl.tools || [],
@@ -55982,9 +56064,9 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
55982
56064
  })]
55983
56065
  }, serverName);
55984
56066
  }), (granted === null || granted === void 0 || (_granted$domains = granted.domains) === null || _granted$domains === void 0 ? void 0 : _granted$domains.fs) && ((granted.domains.fs.readPaths || []).length > 0 || (granted.domains.fs.writePaths || []).length > 0) && /*#__PURE__*/jsxRuntime.jsxs("div", {
55985
- className: "flex flex-col space-y-2 border-t border-gray-800 pt-2",
56067
+ className: "flex flex-col space-y-2 border-t pt-2 ".concat(hairline),
55986
56068
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
55987
- className: "text-xs uppercase tracking-wider opacity-70",
56069
+ className: "text-xs uppercase tracking-wider ".concat(muted),
55988
56070
  children: "filesystem"
55989
56071
  }), Array.isArray(granted.domains.fs.actions) && granted.domains.fs.actions.length > 0 && /*#__PURE__*/jsxRuntime.jsx(PermsList, {
55990
56072
  label: "Actions",
@@ -56012,9 +56094,9 @@ var WidgetGrantRow = function WidgetGrantRow(_ref5) {
56012
56094
  } : undefined
56013
56095
  })]
56014
56096
  }), (granted === null || granted === void 0 || (_granted$domains2 = granted.domains) === null || _granted$domains2 === void 0 ? void 0 : _granted$domains2.network) && (granted.domains.network.hosts || []).length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
56015
- className: "flex flex-col space-y-2 border-t border-gray-800 pt-2",
56097
+ className: "flex flex-col space-y-2 border-t pt-2 ".concat(hairline),
56016
56098
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
56017
- className: "text-xs uppercase tracking-wider opacity-70",
56099
+ className: "text-xs uppercase tracking-wider ".concat(muted),
56018
56100
  children: "network"
56019
56101
  }), Array.isArray(granted.domains.network.actions) && granted.domains.network.actions.length > 0 && /*#__PURE__*/jsxRuntime.jsx(PermsList, {
56020
56102
  label: "Actions",
@@ -61206,68 +61288,6 @@ function renderFormItem(displayName, key, instructions, required, value, _onChan
61206
61288
  }, "config-item-".concat(key));
61207
61289
  }
61208
61290
 
61209
- function useConfigTokens() {
61210
- var _ref = React.useContext(DashReact.ThemeContext) || {},
61211
- _ref$currentTheme = _ref.currentTheme,
61212
- currentTheme = _ref$currentTheme === void 0 ? {} : _ref$currentTheme;
61213
- return {
61214
- muted: currentTheme["text-neutral-medium"] || "text-gray-400",
61215
- strong: currentTheme["text-neutral-light"] || "text-gray-200",
61216
- hairline: currentTheme["border-neutral-dark"] || "border-gray-700",
61217
- selectedBg: currentTheme["bg-neutral-very-dark"] || "bg-gray-800",
61218
- selectedBorder: currentTheme["border-primary-dark"] || "border-gray-600",
61219
- fieldBg: currentTheme["bg-neutral-very-dark"] || "bg-gray-900"
61220
- };
61221
- }
61222
-
61223
- /**
61224
- * A row in one of the modal's left-hand lists (provider types, widgets,
61225
- * event handlers) — styled like the Bots view's team list.
61226
- *
61227
- * @param {{ title: React.ReactNode, subtitle?: React.ReactNode,
61228
- * meta?: React.ReactNode, badge?: React.ReactNode,
61229
- * active?: boolean, mono?: boolean, onClick: () => void }} props
61230
- * `subtitle` is a registry id (monospace); `meta` a muted count line.
61231
- */
61232
- var ConfigListRow = function ConfigListRow(_ref2) {
61233
- var title = _ref2.title,
61234
- _ref2$subtitle = _ref2.subtitle,
61235
- subtitle = _ref2$subtitle === void 0 ? null : _ref2$subtitle,
61236
- _ref2$meta = _ref2.meta,
61237
- meta = _ref2$meta === void 0 ? null : _ref2$meta,
61238
- _ref2$badge = _ref2.badge,
61239
- badge = _ref2$badge === void 0 ? null : _ref2$badge,
61240
- _ref2$active = _ref2.active,
61241
- active = _ref2$active === void 0 ? false : _ref2$active,
61242
- _ref2$mono = _ref2.mono,
61243
- mono = _ref2$mono === void 0 ? false : _ref2$mono,
61244
- onClick = _ref2.onClick;
61245
- var _useConfigTokens = useConfigTokens(),
61246
- muted = _useConfigTokens.muted,
61247
- selectedBg = _useConfigTokens.selectedBg,
61248
- selectedBorder = _useConfigTokens.selectedBorder;
61249
- return /*#__PURE__*/jsxRuntime.jsxs("button", {
61250
- type: "button",
61251
- onClick: onClick,
61252
- "aria-current": active ? "true" : undefined,
61253
- className: "w-full text-left rounded-lg px-3 py-2 border ".concat(active ? "".concat(selectedBg, " ").concat(selectedBorder) : "border-transparent"),
61254
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
61255
- className: "flex flex-row items-center justify-between gap-2 min-w-0",
61256
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
61257
- className: "text-sm font-medium truncate ".concat(mono ? "font-mono" : ""),
61258
- children: title
61259
- }), badge]
61260
- }), subtitle ? /*#__PURE__*/jsxRuntime.jsx("div", {
61261
- className: "text-xs font-mono truncate mt-0.5 ".concat(muted),
61262
- title: typeof subtitle === "string" ? subtitle : undefined,
61263
- children: subtitle
61264
- }) : null, meta ? /*#__PURE__*/jsxRuntime.jsx("div", {
61265
- className: "text-xs mt-0.5 ".concat(muted),
61266
- children: meta
61267
- }) : null]
61268
- });
61269
- };
61270
-
61271
61291
  function ownKeys$g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
61272
61292
  function _objectSpread$g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$g(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
61273
61293
  function _createForOfIteratorHelper$b(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$b(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
@@ -61648,6 +61668,13 @@ var PermissionsTab = function PermissionsTab(_ref) {
61648
61668
  _useState8 = _slicedToArray(_useState7, 2),
61649
61669
  busy = _useState8[0],
61650
61670
  setBusy = _useState8[1];
61671
+ var _useState9 = React.useState(false),
61672
+ _useState0 = _slicedToArray(_useState9, 2),
61673
+ confirmRevokeAll = _useState0[0],
61674
+ setConfirmRevokeAll = _useState0[1];
61675
+ var _useConfigTokens = useConfigTokens(),
61676
+ muted = _useConfigTokens.muted,
61677
+ hairline = _useConfigTokens.hairline;
61651
61678
 
61652
61679
  // Build the set of widget identifiers in this workspace. Walk every
61653
61680
  // layout location (main, pages, sidebar). `pickWidgetRef` returns
@@ -62176,7 +62203,7 @@ var PermissionsTab = function PermissionsTab(_ref) {
62176
62203
  }).length;
62177
62204
  if (loading) {
62178
62205
  return /*#__PURE__*/jsxRuntime.jsx("div", {
62179
- className: "text-sm opacity-60 p-4",
62206
+ className: "text-sm p-4 ".concat(muted),
62180
62207
  children: "Loading permissions\u2026"
62181
62208
  });
62182
62209
  }
@@ -62184,10 +62211,10 @@ var PermissionsTab = function PermissionsTab(_ref) {
62184
62211
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
62185
62212
  className: "flex flex-col gap-3 p-4",
62186
62213
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
62187
- className: "text-sm opacity-70",
62214
+ className: "text-sm",
62188
62215
  children: "No widgets in this dashboard request any MCP permissions."
62189
62216
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
62190
- className: "text-xs opacity-50",
62217
+ className: "text-xs ".concat(muted),
62191
62218
  children: "Permissions only show up here when a widget's published manifest (or local source) declares MCP tool usage."
62192
62219
  })]
62193
62220
  });
@@ -62195,32 +62222,66 @@ var PermissionsTab = function PermissionsTab(_ref) {
62195
62222
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
62196
62223
  className: "flex flex-col h-full min-h-0",
62197
62224
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62198
- className: "flex-shrink-0 flex flex-row items-center justify-between gap-2 pb-3",
62225
+ className: "flex-shrink-0 flex flex-row items-center justify-between gap-2 pb-3 border-b ".concat(hairline),
62199
62226
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62200
62227
  className: "flex flex-col",
62201
62228
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
62202
62229
  className: "text-sm font-medium",
62203
62230
  children: [filteredRows.length, " widget", filteredRows.length === 1 ? "" : "s", " with permissions in this dashboard"]
62204
62231
  }), /*#__PURE__*/jsxRuntime.jsxs("span", {
62205
- className: "text-xs opacity-60 mt-0.5",
62232
+ className: "text-xs mt-0.5 ".concat(muted),
62206
62233
  children: [totalGranted, " currently granted across ", totalDeclared, " declared server", totalDeclared === 1 ? "" : "s"]
62207
62234
  })]
62208
62235
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
62209
62236
  className: "flex flex-row gap-2",
62210
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
62237
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
62211
62238
  title: "Allow all declared",
62212
62239
  onClick: approveAllInDashboard,
62213
62240
  disabled: busy,
62214
62241
  size: "sm"
62242
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
62243
+ "data-testid": "permissions-revoke-all",
62244
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
62245
+ title: "Revoke all",
62246
+ onClick: function onClick() {
62247
+ return setConfirmRevokeAll(true);
62248
+ },
62249
+ disabled: busy || totalGranted === 0,
62250
+ size: "sm"
62251
+ })
62252
+ })]
62253
+ })]
62254
+ }), confirmRevokeAll && /*#__PURE__*/jsxRuntime.jsxs("div", {
62255
+ "data-testid": "permissions-revoke-all-confirm",
62256
+ className: "flex-shrink-0 flex flex-row items-center justify-between gap-3 rounded-lg border border-amber-400 px-3 py-2 mt-3",
62257
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62258
+ className: "flex flex-col gap-0.5 min-w-0",
62259
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
62260
+ className: "text-sm font-medium",
62261
+ children: "Revoke all permissions for this dashboard?"
62262
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
62263
+ className: "text-xs ".concat(muted),
62264
+ children: "Every widget here will ask for consent again the next time it uses a tool."
62265
+ })]
62266
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
62267
+ className: "flex flex-row gap-2 flex-shrink-0",
62268
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
62269
+ title: "Cancel",
62270
+ size: "sm",
62271
+ onClick: function onClick() {
62272
+ return setConfirmRevokeAll(false);
62273
+ }
62215
62274
  }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
62216
- title: "Revoke all",
62217
- onClick: revokeAllInDashboard,
62218
- disabled: busy || totalGranted === 0,
62219
- size: "sm"
62275
+ title: "Revoke",
62276
+ size: "sm",
62277
+ onClick: function onClick() {
62278
+ setConfirmRevokeAll(false);
62279
+ revokeAllInDashboard();
62280
+ }
62220
62281
  })]
62221
62282
  })]
62222
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Divider, {}), error && /*#__PURE__*/jsxRuntime.jsx("div", {
62223
- className: "flex-shrink-0 text-xs text-red-400 bg-red-900/20 border border-red-700 rounded p-2 mt-3",
62283
+ }), error && /*#__PURE__*/jsxRuntime.jsx("div", {
62284
+ className: "flex-shrink-0 text-xs text-red-400 mt-3",
62224
62285
  children: error
62225
62286
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
62226
62287
  className: "flex-1 min-h-0 overflow-y-auto pt-3 space-y-3",
@@ -62810,15 +62871,38 @@ function useTeamBots(workspaceId) {
62810
62871
  }, [bots, running, paused, approvals, lastRunByBot, loading, approve, refresh, loadLastRun, drafts, dismissDraft]);
62811
62872
  }
62812
62873
 
62813
- var BotsTab = function BotsTab(_ref) {
62814
- var workspace = _ref.workspace,
62815
- _ref$onOpenBotsView = _ref.onOpenBotsView,
62816
- onOpenBotsView = _ref$onOpenBotsView === void 0 ? null : _ref$onOpenBotsView;
62874
+ var StatusDot = function StatusDot(_ref) {
62875
+ var status = _ref.status,
62876
+ muted = _ref.muted;
62877
+ var dot = STATUS_DOT$2[status] || STATUS_DOT$2.Idle;
62878
+ return /*#__PURE__*/jsxRuntime.jsxs("span", {
62879
+ "data-testid": "bot-status",
62880
+ className: "flex flex-row items-center gap-1.5 text-xs flex-shrink-0 ".concat(muted),
62881
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
62882
+ "data-testid": "bot-status-dot",
62883
+ className: "inline-block h-2 w-2 rounded-full ".concat(dot)
62884
+ }), status]
62885
+ });
62886
+ };
62887
+
62888
+ /**
62889
+ * BotsTab — Dashboard Config › Bots: a read-only summary of this dashboard's
62890
+ * team (bot-teams PRD TEAM-011). Managing bots — adding, editing, talking to
62891
+ * them — happens in the Bots view; "Open in Bots view" goes there.
62892
+ */
62893
+ var BotsTab = function BotsTab(_ref2) {
62894
+ var workspace = _ref2.workspace,
62895
+ _ref2$onOpenBotsView = _ref2.onOpenBotsView,
62896
+ onOpenBotsView = _ref2$onOpenBotsView === void 0 ? null : _ref2$onOpenBotsView;
62817
62897
  var team = useTeamBots(workspace ? workspace.id : null);
62818
62898
  var lead = team.lead,
62819
62899
  members = team.members,
62820
62900
  attention = team.attention,
62821
62901
  loading = team.loading;
62902
+ var _useConfigTokens = useConfigTokens(),
62903
+ muted = _useConfigTokens.muted,
62904
+ hairline = _useConfigTokens.hairline;
62905
+ var card = "rounded-lg border px-3 py-2 flex flex-row items-center justify-between gap-3 ".concat(hairline);
62822
62906
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
62823
62907
  className: "flex flex-col gap-4 h-full min-h-0",
62824
62908
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -62828,7 +62912,7 @@ var BotsTab = function BotsTab(_ref) {
62828
62912
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.SectionLabel, {
62829
62913
  text: "This dashboard's team"
62830
62914
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
62831
- className: "text-xs opacity-60",
62915
+ className: "text-xs ".concat(muted),
62832
62916
  children: ["".concat(members.length, " bot").concat(members.length === 1 ? "" : "s"), lead ? "led by ".concat(lead.name) : "no team lead", attention > 0 ? "".concat(attention, " need").concat(attention === 1 ? "s" : "", " attention") : null].filter(Boolean).join(" · ")
62833
62917
  })]
62834
62918
  }), onOpenBotsView ? /*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
@@ -62837,12 +62921,25 @@ var BotsTab = function BotsTab(_ref) {
62837
62921
  onClick: onOpenBotsView
62838
62922
  }) : null]
62839
62923
  }), lead ? /*#__PURE__*/jsxRuntime.jsxs("div", {
62840
- className: "flex flex-row items-center gap-2 text-sm",
62841
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
62842
- className: "font-medium",
62843
- children: lead.name
62844
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Tag, {
62845
- text: "Lead"
62924
+ className: card,
62925
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62926
+ className: "flex flex-col gap-0.5 min-w-0",
62927
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62928
+ className: "flex flex-row items-center gap-2 text-sm",
62929
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
62930
+ className: "font-medium truncate",
62931
+ children: lead.name
62932
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
62933
+ className: "text-xs uppercase tracking-wider font-semibold ".concat(muted),
62934
+ children: "Lead"
62935
+ })]
62936
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
62937
+ className: "text-xs truncate ".concat(muted),
62938
+ children: "Answers questions about this team"
62939
+ })]
62940
+ }), /*#__PURE__*/jsxRuntime.jsx(StatusDot, {
62941
+ status: team.statusOf(lead.id),
62942
+ muted: muted
62846
62943
  })]
62847
62944
  }) : null, !loading && !members.length ? /*#__PURE__*/jsxRuntime.jsx(DashReact.EmptyState, {
62848
62945
  icon: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
@@ -62852,21 +62949,22 @@ var BotsTab = function BotsTab(_ref) {
62852
62949
  title: "No bots on this dashboard yet",
62853
62950
  description: "Add bots, talk to them and change their settings in the Bots view."
62854
62951
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
62855
- className: "flex flex-col gap-1 overflow-y-auto min-h-0",
62952
+ className: "flex flex-col gap-2 overflow-y-auto min-h-0",
62856
62953
  children: members.map(function (bot) {
62857
62954
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
62858
- className: "flex flex-row items-center justify-between gap-3 py-2 border-b",
62955
+ className: card,
62859
62956
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
62860
- className: "flex flex-col gap-1 min-w-0",
62957
+ className: "flex flex-col gap-0.5 min-w-0",
62861
62958
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
62862
62959
  className: "text-sm font-medium truncate",
62863
62960
  children: bot.name
62864
62961
  }), /*#__PURE__*/jsxRuntime.jsx("span", {
62865
- className: "text-xs opacity-60",
62962
+ className: "text-xs truncate ".concat(muted),
62866
62963
  children: triggerSummary(bot)
62867
62964
  })]
62868
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Tag, {
62869
- text: team.statusOf(bot.id)
62965
+ }), /*#__PURE__*/jsxRuntime.jsx(StatusDot, {
62966
+ status: team.statusOf(bot.id),
62967
+ muted: muted
62870
62968
  })]
62871
62969
  }, bot.id);
62872
62970
  })
@@ -63640,6 +63738,9 @@ var DashboardConfigModal = function DashboardConfigModal(_ref2) {
63640
63738
  */
63641
63739
  function NotificationsTab(_ref5) {
63642
63740
  var workspace = _ref5.workspace;
63741
+ var _useConfigTokens3 = useConfigTokens(),
63742
+ muted = _useConfigTokens3.muted,
63743
+ hairline = _useConfigTokens3.hairline;
63643
63744
  var _useState9 = React.useState(""),
63644
63745
  _useState0 = _slicedToArray(_useState9, 2),
63645
63746
  searchQuery = _useState0[0],
@@ -63781,13 +63882,13 @@ function NotificationsTab(_ref5) {
63781
63882
  };
63782
63883
  if (!loaded) {
63783
63884
  return /*#__PURE__*/jsxRuntime.jsx("div", {
63784
- className: "p-4 text-sm opacity-50",
63885
+ className: "p-4 text-sm ".concat(muted),
63785
63886
  children: "Loading\u2026"
63786
63887
  });
63787
63888
  }
63788
63889
  if (widgetInstances.length === 0) {
63789
63890
  return /*#__PURE__*/jsxRuntime.jsx("div", {
63790
- className: "p-4 text-sm opacity-50",
63891
+ className: "p-4 text-sm ".concat(muted),
63791
63892
  children: "No widgets in this dashboard declare notifications. Add widgets that declare notifications to see per-type controls here."
63792
63893
  });
63793
63894
  }
@@ -63803,71 +63904,70 @@ function NotificationsTab(_ref5) {
63803
63904
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
63804
63905
  className: "flex flex-row items-center justify-between text-xs",
63805
63906
  children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
63806
- className: "opacity-50",
63907
+ className: muted,
63807
63908
  children: [filtered.length, " of ", widgetInstances.length, " widget", widgetInstances.length === 1 ? "" : "s"]
63808
63909
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
63809
63910
  className: "flex flex-row items-center gap-2",
63810
- children: [/*#__PURE__*/jsxRuntime.jsx("button", {
63811
- type: "button",
63812
- onClick: function onClick() {
63813
- return setAllVisible(true);
63814
- },
63815
- className: "px-2 py-1 rounded bg-green-700 hover:bg-green-600 text-white text-xs font-medium transition-colors",
63911
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
63816
63912
  "data-testid": "bulk-notifications-enable-all",
63817
- children: "Enable all"
63818
- }), /*#__PURE__*/jsxRuntime.jsx("button", {
63819
- type: "button",
63820
- onClick: function onClick() {
63821
- return setAllVisible(false);
63822
- },
63823
- className: "px-2 py-1 rounded bg-gray-700 hover:bg-gray-600 text-gray-200 text-xs font-medium transition-colors",
63913
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
63914
+ title: "Enable all",
63915
+ size: "sm",
63916
+ onClick: function onClick() {
63917
+ return setAllVisible(true);
63918
+ }
63919
+ })
63920
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
63824
63921
  "data-testid": "bulk-notifications-disable-all",
63825
- children: "Disable all"
63922
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.Button3, {
63923
+ title: "Disable all",
63924
+ size: "sm",
63925
+ onClick: function onClick() {
63926
+ return setAllVisible(false);
63927
+ }
63928
+ })
63826
63929
  })]
63827
63930
  })]
63828
63931
  })]
63829
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Divider, {}), /*#__PURE__*/jsxRuntime.jsx("div", {
63830
- className: "flex-1 overflow-y-auto px-2 py-2 space-y-3",
63932
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
63933
+ className: "flex-1 overflow-y-auto px-2 py-3 flex flex-col gap-3 border-t ".concat(hairline),
63831
63934
  children: filtered.map(function (wi) {
63832
63935
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
63833
- className: "border border-white/10 rounded p-3 space-y-2",
63936
+ className: "rounded-lg border px-3 py-2 flex flex-col gap-2 ".concat(hairline),
63834
63937
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
63835
- className: "flex flex-col",
63938
+ className: "flex flex-col gap-0.5",
63836
63939
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
63837
63940
  className: "text-sm font-medium",
63838
63941
  children: wi.title
63839
- }), /*#__PURE__*/jsxRuntime.jsxs(DashReact.Caption, {
63840
- className: "font-mono",
63942
+ }), /*#__PURE__*/jsxRuntime.jsxs("span", {
63943
+ className: "text-xs font-mono truncate ".concat(muted),
63841
63944
  children: [wi.component, wi.itemId != null ? " \xB7 #".concat(wi.itemId) : ""]
63842
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Caption3, {
63945
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
63946
+ className: "text-xs ".concat(muted),
63843
63947
  children: wi["package"]
63844
63948
  })]
63845
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
63846
- className: "flex flex-row gap-2",
63847
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Divider, {
63848
- orientation: "vertical"
63849
- }), /*#__PURE__*/jsxRuntime.jsx("div", {
63850
- className: "flex flex-col flex-1",
63851
- children: wi.notifications.map(function (notif) {
63852
- return /*#__PURE__*/jsxRuntime.jsxs("div", {
63853
- className: "flex flex-row items-center justify-between gap-3 py-2 px-2 -mx-2 rounded hover:bg-gray-800 transition-colors",
63854
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
63855
- className: "flex flex-col",
63856
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
63857
- className: "text-xs",
63858
- children: notif.displayName
63859
- }), notif.description && /*#__PURE__*/jsxRuntime.jsx(DashReact.Caption, {
63860
- children: notif.description
63861
- })]
63862
- }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Switch, {
63863
- checked: isEnabled(wi.uuid, notif.key, notif.defaultEnabled),
63864
- onChange: function onChange(value) {
63865
- return setOne(wi.uuid, notif.key, value);
63866
- }
63949
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
63950
+ className: "flex flex-col border-t ".concat(hairline),
63951
+ children: wi.notifications.map(function (notif) {
63952
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
63953
+ className: "flex flex-row items-center justify-between gap-3 py-2",
63954
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
63955
+ className: "flex flex-col gap-0.5",
63956
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
63957
+ className: "text-sm",
63958
+ children: notif.displayName
63959
+ }), notif.description && /*#__PURE__*/jsxRuntime.jsx("span", {
63960
+ className: "text-xs ".concat(muted),
63961
+ children: notif.description
63867
63962
  })]
63868
- }, notif.key);
63869
- })
63870
- })]
63963
+ }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Switch, {
63964
+ checked: isEnabled(wi.uuid, notif.key, notif.defaultEnabled),
63965
+ onChange: function onChange(value) {
63966
+ return setOne(wi.uuid, notif.key, value);
63967
+ }
63968
+ })]
63969
+ }, notif.key);
63970
+ })
63871
63971
  })]
63872
63972
  }, wi.uuid);
63873
63973
  })
@@ -63887,10 +63987,10 @@ function ProvidersTab(_ref6) {
63887
63987
  providersByType = _ref6.providersByType,
63888
63988
  onBulk = _ref6.onBulk,
63889
63989
  onPerWidget = _ref6.onPerWidget;
63890
- var _useConfigTokens3 = useConfigTokens(),
63891
- muted = _useConfigTokens3.muted,
63892
- hairline = _useConfigTokens3.hairline,
63893
- fieldBg = _useConfigTokens3.fieldBg;
63990
+ var _useConfigTokens4 = useConfigTokens(),
63991
+ muted = _useConfigTokens4.muted,
63992
+ hairline = _useConfigTokens4.hairline,
63993
+ fieldBg = _useConfigTokens4.fieldBg;
63894
63994
  var typeEntries = React.useMemo(function () {
63895
63995
  return Array.from(grouped.entries());
63896
63996
  }, [grouped]);
@@ -64075,9 +64175,12 @@ function ProvidersTab(_ref6) {
64075
64175
  */
64076
64176
  function DependenciesTab(_ref0) {
64077
64177
  var dependencies = _ref0.dependencies;
64178
+ var _useConfigTokens5 = useConfigTokens(),
64179
+ muted = _useConfigTokens5.muted,
64180
+ hairline = _useConfigTokens5.hairline;
64078
64181
  if (!dependencies || dependencies.length === 0) {
64079
64182
  return /*#__PURE__*/jsxRuntime.jsx("div", {
64080
- className: "flex items-center justify-center h-full text-sm opacity-60 text-center",
64183
+ className: "flex items-center justify-center h-full text-sm text-center ".concat(muted),
64081
64184
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
64082
64185
  children: "No widget packages referenced by this dashboard."
64083
64186
  })
@@ -64086,37 +64189,38 @@ function DependenciesTab(_ref0) {
64086
64189
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
64087
64190
  className: "flex flex-col h-full min-h-0 overflow-y-auto gap-3",
64088
64191
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
64089
- className: "text-xs opacity-60",
64192
+ className: "text-xs ".concat(muted),
64090
64193
  children: "Every widget instance in this workspace, grouped by the package it belongs to. Locations show where each package is referenced."
64091
64194
  }), dependencies.map(function (dep) {
64092
64195
  var isUnknown = dep.packageLabel === "(unknown)";
64093
64196
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
64094
- className: "border rounded-lg px-4 py-3 ".concat(isUnknown ? "bg-amber-900/10 border-amber-700/40" : "bg-white/5 border-white/10"),
64197
+ className: "border rounded-lg px-3 py-2 ".concat(isUnknown ? "border-amber-400" : hairline),
64095
64198
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
64096
64199
  className: "flex items-center gap-2 flex-wrap",
64097
64200
  children: [/*#__PURE__*/jsxRuntime.jsx("code", {
64098
- className: "text-sm font-semibold ".concat(isUnknown ? "text-amber-200" : ""),
64201
+ className: "text-sm font-semibold",
64099
64202
  children: dep.packageLabel
64100
64203
  }), /*#__PURE__*/jsxRuntime.jsxs("span", {
64101
- className: "text-xs opacity-60",
64204
+ className: "text-xs ".concat(muted),
64102
64205
  children: [dep.total, " instance", dep.total === 1 ? "" : "s"]
64103
- }), isUnknown && /*#__PURE__*/jsxRuntime.jsx("span", {
64104
- className: "text-[10px] text-amber-300 uppercase tracking-wide",
64105
- children: "no package mapping"
64206
+ }), isUnknown && /*#__PURE__*/jsxRuntime.jsxs("span", {
64207
+ className: "flex flex-row items-center gap-1.5 text-xs text-amber-400 uppercase tracking-wider font-semibold",
64208
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
64209
+ className: "inline-block h-1.5 w-1.5 rounded-full bg-amber-400"
64210
+ }), "No package mapping"]
64106
64211
  })]
64107
64212
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
64108
- className: "mt-2 text-xs opacity-70",
64213
+ className: "mt-2 text-xs flex flex-col gap-1",
64109
64214
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
64110
64215
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
64111
- className: "opacity-60 mr-1",
64216
+ className: "mr-1 ".concat(muted),
64112
64217
  children: "Widgets:"
64113
64218
  }), dep.components.map(function (c) {
64114
64219
  return "".concat(c.component).concat(c.count > 1 ? " \xD7".concat(c.count) : "");
64115
64220
  }).join(", ")]
64116
64221
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
64117
- className: "mt-1",
64118
64222
  children: [/*#__PURE__*/jsxRuntime.jsx("span", {
64119
- className: "opacity-60 mr-1",
64223
+ className: "mr-1 ".concat(muted),
64120
64224
  children: "Locations:"
64121
64225
  }), dep.locations.join(", ")]
64122
64226
  })]
@@ -64154,9 +64258,9 @@ function ListenersTab(_ref1) {
64154
64258
  wiring = _ref1.wiring,
64155
64259
  onAdd = _ref1.onAdd,
64156
64260
  onRemove = _ref1.onRemove;
64157
- var _useConfigTokens4 = useConfigTokens(),
64158
- muted = _useConfigTokens4.muted,
64159
- hairline = _useConfigTokens4.hairline;
64261
+ var _useConfigTokens6 = useConfigTokens(),
64262
+ muted = _useConfigTokens6.muted,
64263
+ hairline = _useConfigTokens6.hairline;
64160
64264
  var _useState17 = React.useState(((_receivers$ = receivers[0]) === null || _receivers$ === void 0 ? void 0 : _receivers$.key) || null),
64161
64265
  _useState18 = _slicedToArray(_useState17, 2),
64162
64266
  selectedReceiverKey = _useState18[0],
@@ -64284,9 +64388,9 @@ function HandlersColumn(_ref11) {
64284
64388
  }
64285
64389
  return m;
64286
64390
  }, [myWiring]);
64287
- var _useConfigTokens5 = useConfigTokens(),
64288
- muted = _useConfigTokens5.muted,
64289
- hairline = _useConfigTokens5.hairline;
64391
+ var _useConfigTokens7 = useConfigTokens(),
64392
+ muted = _useConfigTokens7.muted,
64393
+ hairline = _useConfigTokens7.hairline;
64290
64394
  return (
64291
64395
  /*#__PURE__*/
64292
64396
  // Plain <div> wrapper — Card2 reads as washed-out against the
@@ -64339,9 +64443,9 @@ function EventsColumn(_ref12) {
64339
64443
  emitters = _ref12.emitters,
64340
64444
  onAdd = _ref12.onAdd,
64341
64445
  onRemove = _ref12.onRemove;
64342
- var _useConfigTokens6 = useConfigTokens(),
64343
- muted = _useConfigTokens6.muted,
64344
- hairline = _useConfigTokens6.hairline;
64446
+ var _useConfigTokens8 = useConfigTokens(),
64447
+ muted = _useConfigTokens8.muted,
64448
+ hairline = _useConfigTokens8.hairline;
64345
64449
  // Wired-for-this-handler: dedupe defensively (legacy workspaces
64346
64450
  // occasionally contain duplicate entries under the same handler).
64347
64451
  var wiredHere = React.useMemo(function () {
@@ -65282,13 +65386,7 @@ var isDraftId = function isDraftId(id) {
65282
65386
  return typeof id === "string" && id.startsWith(DRAFT_PREFIX);
65283
65387
  };
65284
65388
  var NARROW_PX = 900;
65285
- var DOT = {
65286
- Idle: "bg-gray-500",
65287
- Running: "bg-indigo-400",
65288
- Paused: "bg-gray-400",
65289
- "Needs approval": "bg-amber-400",
65290
- Failed: "bg-red-400"
65291
- };
65389
+ var DOT = STATUS_DOT$2;
65292
65390
  var getWidgetConfig$1 = function getWidgetConfig(name) {
65293
65391
  return name && ComponentManager.config(name) || null;
65294
65392
  };