@trops/dash-core 0.1.456 → 0.1.457

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
@@ -47227,71 +47227,75 @@ var ProvidersSection = function ProvidersSection(_ref) {
47227
47227
  if (result !== null && result !== void 0 && result.catalog) setCatalog(result.catalog);
47228
47228
  }, function () {});
47229
47229
  }, [dashApi]);
47230
- var _useState3 = React.useState("credentials"),
47230
+ var _useState3 = React.useState("all"),
47231
47231
  _useState4 = _slicedToArray(_useState3, 2),
47232
47232
  providerTab = _useState4[0],
47233
47233
  setProviderTab = _useState4[1];
47234
- var _useState5 = React.useState(null),
47234
+ var _useState5 = React.useState(""),
47235
47235
  _useState6 = _slicedToArray(_useState5, 2),
47236
- selectedName = _useState6[0],
47237
- setSelectedName = _useState6[1];
47238
- var _useState7 = React.useState(false),
47236
+ searchQuery = _useState6[0],
47237
+ setSearchQuery = _useState6[1];
47238
+ var _useState7 = React.useState(null),
47239
47239
  _useState8 = _slicedToArray(_useState7, 2),
47240
- isCreating = _useState8[0],
47241
- setIsCreating = _useState8[1];
47240
+ selectedName = _useState8[0],
47241
+ setSelectedName = _useState8[1];
47242
+ var _useState9 = React.useState(false),
47243
+ _useState0 = _slicedToArray(_useState9, 2),
47244
+ isCreating = _useState0[0],
47245
+ setIsCreating = _useState0[1];
47242
47246
  // When the user clicks "+ New Provider" without a pre-selected
47243
47247
  // class (Settings header button), show the class chooser
47244
47248
  // (Credential / MCP / WebSocket) instead of defaulting to the
47245
47249
  // credential form. Widget Builder's deep-link path passes a class
47246
47250
  // explicitly and bypasses this chooser.
47247
- var _useState9 = React.useState(false),
47248
- _useState0 = _slicedToArray(_useState9, 2),
47249
- isShowingClassChooser = _useState0[0],
47250
- setIsShowingClassChooser = _useState0[1];
47251
+ var _useState1 = React.useState(false),
47252
+ _useState10 = _slicedToArray(_useState1, 2),
47253
+ isShowingClassChooser = _useState10[0],
47254
+ setIsShowingClassChooser = _useState10[1];
47251
47255
  // Tracks whether the current create-flow detail was reached via the
47252
47256
  // chooser (vs. the Widget Builder deep-link or list-edit). Only the
47253
47257
  // chooser-entry path renders the "← Back" affordance, since that's
47254
47258
  // the only path that has somewhere to go back to.
47255
- var _useState1 = React.useState(false),
47256
- _useState10 = _slicedToArray(_useState1, 2),
47257
- cameFromClassChooser = _useState10[0],
47258
- setCameFromClassChooser = _useState10[1];
47259
47259
  var _useState11 = React.useState(false),
47260
47260
  _useState12 = _slicedToArray(_useState11, 2),
47261
- isEditing = _useState12[0],
47262
- setIsEditing = _useState12[1];
47263
- var _useState13 = React.useState(""),
47261
+ cameFromClassChooser = _useState12[0],
47262
+ setCameFromClassChooser = _useState12[1];
47263
+ var _useState13 = React.useState(false),
47264
47264
  _useState14 = _slicedToArray(_useState13, 2),
47265
- formName = _useState14[0],
47266
- setFormName = _useState14[1];
47265
+ isEditing = _useState14[0],
47266
+ setIsEditing = _useState14[1];
47267
47267
  var _useState15 = React.useState(""),
47268
47268
  _useState16 = _slicedToArray(_useState15, 2),
47269
- formType = _useState16[0],
47270
- setFormType = _useState16[1];
47271
- var _useState17 = React.useState({}),
47269
+ formName = _useState16[0],
47270
+ setFormName = _useState16[1];
47271
+ var _useState17 = React.useState(""),
47272
47272
  _useState18 = _slicedToArray(_useState17, 2),
47273
- formCredentials = _useState18[0],
47274
- setFormCredentials = _useState18[1];
47275
- var _useState19 = React.useState(null),
47273
+ formType = _useState18[0],
47274
+ setFormType = _useState18[1];
47275
+ var _useState19 = React.useState({}),
47276
47276
  _useState20 = _slicedToArray(_useState19, 2),
47277
- deleteTarget = _useState20[0],
47278
- setDeleteTarget = _useState20[1];
47279
- var _useState21 = React.useState(false),
47277
+ formCredentials = _useState20[0],
47278
+ setFormCredentials = _useState20[1];
47279
+ var _useState21 = React.useState(null),
47280
47280
  _useState22 = _slicedToArray(_useState21, 2),
47281
- isAddingMcp = _useState22[0],
47282
- setIsAddingMcp = _useState22[1];
47281
+ deleteTarget = _useState22[0],
47282
+ setDeleteTarget = _useState22[1];
47283
47283
  var _useState23 = React.useState(false),
47284
47284
  _useState24 = _slicedToArray(_useState23, 2),
47285
- isEditingMcp = _useState24[0],
47286
- setIsEditingMcp = _useState24[1];
47285
+ isAddingMcp = _useState24[0],
47286
+ setIsAddingMcp = _useState24[1];
47287
47287
  var _useState25 = React.useState(false),
47288
47288
  _useState26 = _slicedToArray(_useState25, 2),
47289
- isAddingWs = _useState26[0],
47290
- setIsAddingWs = _useState26[1];
47289
+ isEditingMcp = _useState26[0],
47290
+ setIsEditingMcp = _useState26[1];
47291
47291
  var _useState27 = React.useState(false),
47292
47292
  _useState28 = _slicedToArray(_useState27, 2),
47293
- isEditingWs = _useState28[0],
47294
- setIsEditingWs = _useState28[1];
47293
+ isAddingWs = _useState28[0],
47294
+ setIsAddingWs = _useState28[1];
47295
+ var _useState29 = React.useState(false),
47296
+ _useState30 = _slicedToArray(_useState29, 2),
47297
+ isEditingWs = _useState30[0],
47298
+ setIsEditingWs = _useState30[1];
47295
47299
 
47296
47300
  // Row ID counter for env/header rows in MCP edit mode
47297
47301
  var nextRowIdRef = React.useRef(0);
@@ -47615,11 +47619,42 @@ var ProvidersSection = function ProvidersSection(_ref) {
47615
47619
  // eslint-disable-next-line react-hooks/exhaustive-deps
47616
47620
  }, [createRequested]);
47617
47621
  var selectedProvider = selectedName && providers[selectedName] ? providers[selectedName] : null;
47618
- var activeProviders = providerTab === "credentials" ? credentialProviders : providerTab === "mcp" ? mcpProviders : wsProviders;
47619
- var activeIcon = providerTab === "credentials" ? "key" : providerTab === "mcp" ? "server" : "plug";
47622
+
47623
+ // Class filter (All + 3 classes). "All" merges every group so the
47624
+ // user gets one alphabetized list by default — mirrors the Widgets
47625
+ // sidebar pattern.
47626
+ var tabFilteredProviders = providerTab === "all" ? [].concat(_toConsumableArray(credentialProviders), _toConsumableArray(mcpProviders), _toConsumableArray(wsProviders)) : providerTab === "credentials" ? credentialProviders : providerTab === "mcp" ? mcpProviders : wsProviders;
47627
+ var trimmedQuery = searchQuery.trim().toLowerCase();
47628
+ var visibleProviders = tabFilteredProviders.filter(function (_ref0) {
47629
+ var _ref1 = _slicedToArray(_ref0, 2),
47630
+ name = _ref1[0],
47631
+ provider = _ref1[1];
47632
+ if (!trimmedQuery) return true;
47633
+ return name.toLowerCase().includes(trimmedQuery) || (provider.type || "").toLowerCase().includes(trimmedQuery);
47634
+ }).slice().sort(function (_ref10, _ref11) {
47635
+ var _ref12 = _slicedToArray(_ref10, 1),
47636
+ a = _ref12[0];
47637
+ var _ref13 = _slicedToArray(_ref11, 1),
47638
+ b = _ref13[0];
47639
+ return a.localeCompare(b, undefined, {
47640
+ sensitivity: "base"
47641
+ });
47642
+ });
47643
+ var iconForClass = function iconForClass(cls) {
47644
+ return cls === "mcp" ? "server" : cls === "websocket" ? "plug" : "key";
47645
+ };
47620
47646
  var listContent = /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
47621
47647
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
47622
- className: "px-2 pt-2",
47648
+ className: "px-2 pt-2 pb-2",
47649
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.InputText, {
47650
+ value: searchQuery,
47651
+ onChange: function onChange(value) {
47652
+ return setSearchQuery(value);
47653
+ },
47654
+ placeholder: "Search providers..."
47655
+ })
47656
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
47657
+ className: "px-2",
47623
47658
  children: /*#__PURE__*/jsxRuntime.jsx(DashReact.Tabs3, {
47624
47659
  value: providerTab,
47625
47660
  onValueChange: setProviderTab,
@@ -47629,6 +47664,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
47629
47664
  className: "w-full flex",
47630
47665
  spacing: "p-0.5",
47631
47666
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Tabs3.Trigger, {
47667
+ value: "all",
47668
+ className: "flex-1",
47669
+ children: "All"
47670
+ }), /*#__PURE__*/jsxRuntime.jsx(DashReact.Tabs3.Trigger, {
47632
47671
  value: "credentials",
47633
47672
  className: "flex-1",
47634
47673
  children: "Credentials"
@@ -47643,15 +47682,22 @@ var ProvidersSection = function ProvidersSection(_ref) {
47643
47682
  })]
47644
47683
  })
47645
47684
  })
47685
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
47686
+ className: "px-3 pt-2 pb-1",
47687
+ children: /*#__PURE__*/jsxRuntime.jsxs("span", {
47688
+ className: "text-xs opacity-40",
47689
+ children: [visibleProviders.length, " provider", visibleProviders.length === 1 ? "" : "s"]
47690
+ })
47646
47691
  }), /*#__PURE__*/jsxRuntime.jsxs(DashReact.Sidebar.Content, {
47647
- children: [activeProviders.map(function (_ref0) {
47648
- var _ref1 = _slicedToArray(_ref0, 2),
47649
- name = _ref1[0],
47650
- provider = _ref1[1];
47692
+ children: [visibleProviders.map(function (_ref14) {
47693
+ var _ref15 = _slicedToArray(_ref14, 2),
47694
+ name = _ref15[0],
47695
+ provider = _ref15[1];
47651
47696
  var isSelected = selectedName === name && !isCreating;
47697
+ var cls = provider.providerClass || "credential";
47652
47698
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Item, {
47653
47699
  icon: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
47654
- icon: activeIcon,
47700
+ icon: iconForClass(cls),
47655
47701
  className: "h-3.5 w-3.5"
47656
47702
  }),
47657
47703
  active: isSelected,
@@ -47673,40 +47719,9 @@ var ProvidersSection = function ProvidersSection(_ref) {
47673
47719
  className: isSelected ? "bg-white/10 opacity-100" : "",
47674
47720
  children: name
47675
47721
  }, name);
47676
- }), activeProviders.length === 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
47722
+ }), visibleProviders.length === 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
47677
47723
  className: "text-sm opacity-40 py-8 text-center",
47678
- children: providerTab === "credentials" ? "No API credentials configured" : providerTab === "mcp" ? "No MCP servers configured" : "No WebSocket providers configured"
47679
- }), providerTab === "mcp" && /*#__PURE__*/jsxRuntime.jsx("div", {
47680
- className: "px-3 py-3 mt-2 border-t border-white/10",
47681
- children: /*#__PURE__*/jsxRuntime.jsxs("button", {
47682
- onClick: function onClick() {
47683
- setIsAddingMcp(true);
47684
- setSelectedName(null);
47685
- setIsCreating(false);
47686
- setIsEditing(false);
47687
- },
47688
- className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors w-full",
47689
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
47690
- icon: "plus",
47691
- className: "h-3 w-3"
47692
- }), "Add MCP Server"]
47693
- })
47694
- }), providerTab === "websocket" && /*#__PURE__*/jsxRuntime.jsx("div", {
47695
- className: "px-3 py-3 mt-2 border-t border-white/10",
47696
- children: /*#__PURE__*/jsxRuntime.jsxs("button", {
47697
- onClick: function onClick() {
47698
- setIsAddingWs(true);
47699
- setSelectedName(null);
47700
- setIsCreating(false);
47701
- setIsEditing(false);
47702
- setIsAddingMcp(false);
47703
- },
47704
- className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors w-full",
47705
- children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
47706
- icon: "plus",
47707
- className: "h-3 w-3"
47708
- }), "Add WebSocket Provider"]
47709
- })
47724
+ children: trimmedQuery ? "No providers match \"".concat(searchQuery.trim(), "\"") : providerTab === "all" ? "No providers configured" : providerTab === "credentials" ? "No API credentials configured" : providerTab === "mcp" ? "No MCP servers configured" : "No WebSocket providers configured"
47710
47725
  })]
47711
47726
  })]
47712
47727
  });
@@ -47733,10 +47748,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
47733
47748
  });
47734
47749
  } else if (isEditingWs && selectedName && selectedProvider) {
47735
47750
  var wc = selectedProvider.wsConfig || {};
47736
- var editHeaderRows = wc.headers ? Object.entries(wc.headers).map(function (_ref10, i) {
47737
- var _ref11 = _slicedToArray(_ref10, 2),
47738
- key = _ref11[0],
47739
- value = _ref11[1];
47751
+ var editHeaderRows = wc.headers ? Object.entries(wc.headers).map(function (_ref16, i) {
47752
+ var _ref17 = _slicedToArray(_ref16, 2),
47753
+ key = _ref17[0],
47754
+ value = _ref17[1];
47740
47755
  return {
47741
47756
  id: "ws_edit_".concat(i),
47742
47757
  key: key,