@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.esm.js +291 -193
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +291 -193
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
55894
|
+
className: "text-xs font-semibold ".concat(strong),
|
|
55818
55895
|
children: title
|
|
55819
55896
|
})]
|
|
55820
55897
|
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
55821
|
-
className: "text-xs
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
62217
|
-
|
|
62218
|
-
|
|
62219
|
-
|
|
62275
|
+
title: "Revoke",
|
|
62276
|
+
size: "sm",
|
|
62277
|
+
onClick: function onClick() {
|
|
62278
|
+
setConfirmRevokeAll(false);
|
|
62279
|
+
revokeAllInDashboard();
|
|
62280
|
+
}
|
|
62220
62281
|
})]
|
|
62221
62282
|
})]
|
|
62222
|
-
}),
|
|
62223
|
-
className: "flex-shrink-0 text-xs text-red-400
|
|
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
|
|
62814
|
-
var
|
|
62815
|
-
|
|
62816
|
-
|
|
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
|
|
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:
|
|
62841
|
-
children: [/*#__PURE__*/jsxRuntime.
|
|
62842
|
-
className: "
|
|
62843
|
-
children:
|
|
62844
|
-
|
|
62845
|
-
|
|
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-
|
|
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:
|
|
62955
|
+
className: card,
|
|
62859
62956
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
62860
|
-
className: "flex flex-col gap-
|
|
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
|
|
62962
|
+
className: "text-xs truncate ".concat(muted),
|
|
62866
62963
|
children: triggerSummary(bot)
|
|
62867
62964
|
})]
|
|
62868
|
-
}), /*#__PURE__*/jsxRuntime.jsx(
|
|
62869
|
-
|
|
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
|
|
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
|
|
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:
|
|
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("
|
|
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:
|
|
63818
|
-
|
|
63819
|
-
|
|
63820
|
-
|
|
63821
|
-
|
|
63822
|
-
|
|
63823
|
-
|
|
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:
|
|
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(
|
|
63830
|
-
className: "flex-1 overflow-y-auto px-2 py-
|
|
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
|
|
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(
|
|
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(
|
|
63945
|
+
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
63946
|
+
className: "text-xs ".concat(muted),
|
|
63843
63947
|
children: wi["package"]
|
|
63844
63948
|
})]
|
|
63845
|
-
}), /*#__PURE__*/jsxRuntime.
|
|
63846
|
-
className: "flex flex-
|
|
63847
|
-
children:
|
|
63848
|
-
|
|
63849
|
-
|
|
63850
|
-
|
|
63851
|
-
|
|
63852
|
-
|
|
63853
|
-
|
|
63854
|
-
|
|
63855
|
-
|
|
63856
|
-
|
|
63857
|
-
|
|
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
|
-
},
|
|
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
|
|
63891
|
-
muted =
|
|
63892
|
-
hairline =
|
|
63893
|
-
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
|
|
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
|
|
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-
|
|
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
|
|
64201
|
+
className: "text-sm font-semibold",
|
|
64099
64202
|
children: dep.packageLabel
|
|
64100
64203
|
}), /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
64101
|
-
className: "text-xs
|
|
64204
|
+
className: "text-xs ".concat(muted),
|
|
64102
64205
|
children: [dep.total, " instance", dep.total === 1 ? "" : "s"]
|
|
64103
|
-
}), isUnknown && /*#__PURE__*/jsxRuntime.
|
|
64104
|
-
className: "text-
|
|
64105
|
-
children: "
|
|
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
|
|
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: "
|
|
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: "
|
|
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
|
|
64158
|
-
muted =
|
|
64159
|
-
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
|
|
64288
|
-
muted =
|
|
64289
|
-
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
|
|
64343
|
-
muted =
|
|
64344
|
-
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
|
};
|