@trops/dash-core 0.1.14 → 0.1.15

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
@@ -25015,6 +25015,83 @@ var ProviderDetail = function ProviderDetail(_ref) {
25015
25015
  if (isMcp || !(provider !== null && provider !== void 0 && provider.credentials)) return [];
25016
25016
  return Object.keys(provider.credentials);
25017
25017
  }, [isMcp, provider]);
25018
+
25019
+ // Dynamic credential fields for create mode
25020
+ var _useState5 = React.useState(isCreating ? [{
25021
+ id: "default_apiKey",
25022
+ key: "apiKey",
25023
+ secret: true
25024
+ }] : []),
25025
+ _useState6 = _slicedToArray(_useState5, 2),
25026
+ credentialFields = _useState6[0],
25027
+ setCredentialFields = _useState6[1];
25028
+ var fieldIdRef = React.useRef(0);
25029
+ var handleFieldKeyChange = function handleFieldKeyChange(id, newKey) {
25030
+ setCredentialFields(function (prev) {
25031
+ return prev.map(function (f) {
25032
+ if (f.id !== id) return f;
25033
+ var oldKey = f.key;
25034
+ if (oldKey && formCredentials[oldKey] !== undefined) {
25035
+ setFormCredentials(function (creds) {
25036
+ var updated = _objectSpread$4({}, creds);
25037
+ var val = updated[oldKey];
25038
+ delete updated[oldKey];
25039
+ if (newKey.trim()) updated[newKey] = val;
25040
+ return updated;
25041
+ });
25042
+ }
25043
+ return _objectSpread$4(_objectSpread$4({}, f), {}, {
25044
+ key: newKey
25045
+ });
25046
+ });
25047
+ });
25048
+ };
25049
+ var handleFieldValueChange = function handleFieldValueChange(id, value) {
25050
+ var field = credentialFields.find(function (f) {
25051
+ return f.id === id;
25052
+ });
25053
+ if (field !== null && field !== void 0 && field.key) {
25054
+ setFormCredentials(function (prev) {
25055
+ return _objectSpread$4(_objectSpread$4({}, prev), {}, _defineProperty({}, field.key, value));
25056
+ });
25057
+ }
25058
+ };
25059
+ var handleFieldSecretToggle = function handleFieldSecretToggle(id) {
25060
+ setCredentialFields(function (prev) {
25061
+ return prev.map(function (f) {
25062
+ return f.id === id ? _objectSpread$4(_objectSpread$4({}, f), {}, {
25063
+ secret: !f.secret
25064
+ }) : f;
25065
+ });
25066
+ });
25067
+ };
25068
+ var handleAddField = function handleAddField() {
25069
+ fieldIdRef.current += 1;
25070
+ setCredentialFields(function (prev) {
25071
+ return [].concat(_toConsumableArray(prev), [{
25072
+ id: "field_".concat(fieldIdRef.current),
25073
+ key: "",
25074
+ secret: false
25075
+ }]);
25076
+ });
25077
+ };
25078
+ var handleRemoveField = function handleRemoveField(id) {
25079
+ var field = credentialFields.find(function (f) {
25080
+ return f.id === id;
25081
+ });
25082
+ if (field !== null && field !== void 0 && field.key) {
25083
+ setFormCredentials(function (prev) {
25084
+ var updated = _objectSpread$4({}, prev);
25085
+ delete updated[field.key];
25086
+ return updated;
25087
+ });
25088
+ }
25089
+ setCredentialFields(function (prev) {
25090
+ return prev.filter(function (f) {
25091
+ return f.id !== id;
25092
+ });
25093
+ });
25094
+ };
25018
25095
  var handleCredentialChange = function handleCredentialChange(key, value) {
25019
25096
  setFormCredentials(function (prev) {
25020
25097
  return _objectSpread$4(_objectSpread$4({}, prev), {}, _defineProperty({}, key, value));
@@ -25135,6 +25212,65 @@ var ProviderDetail = function ProviderDetail(_ref) {
25135
25212
  },
25136
25213
  placeholder: "Provider type (e.g. algolia, openai)"
25137
25214
  })]
25215
+ }), isCreating && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
25216
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
25217
+ className: "border-t border-white/10 pt-4",
25218
+ children: /*#__PURE__*/jsxRuntime.jsx("p", {
25219
+ className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
25220
+ children: "Credentials"
25221
+ })
25222
+ }), credentialFields.map(function (field) {
25223
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
25224
+ className: "flex flex-col gap-2",
25225
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
25226
+ className: "flex items-center gap-2",
25227
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
25228
+ className: "flex-1",
25229
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.InputText, {
25230
+ value: field.key,
25231
+ onChange: function onChange(value) {
25232
+ return handleFieldKeyChange(field.id, value);
25233
+ },
25234
+ placeholder: "Field name (e.g. apiKey)"
25235
+ })
25236
+ }), /*#__PURE__*/jsxRuntime.jsx("button", {
25237
+ onClick: function onClick() {
25238
+ return handleFieldSecretToggle(field.id);
25239
+ },
25240
+ className: "p-2 rounded hover:bg-white/10 transition-colors opacity-50 hover:opacity-100",
25241
+ title: field.secret ? "Show as text" : "Mark as secret",
25242
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
25243
+ icon: field.secret ? "eye-slash" : "eye",
25244
+ className: "h-3.5 w-3.5"
25245
+ })
25246
+ }), /*#__PURE__*/jsxRuntime.jsx("button", {
25247
+ onClick: function onClick() {
25248
+ return handleRemoveField(field.id);
25249
+ },
25250
+ className: "p-2 rounded hover:bg-red-500/20 transition-colors opacity-50 hover:opacity-100 text-red-400",
25251
+ title: "Remove field",
25252
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
25253
+ icon: "trash",
25254
+ className: "h-3.5 w-3.5"
25255
+ })
25256
+ })]
25257
+ }), field.key.trim() && /*#__PURE__*/jsxRuntime.jsx(DashReact.InputText, {
25258
+ type: field.secret ? "password" : "text",
25259
+ value: formCredentials[field.key] || "",
25260
+ onChange: function onChange(value) {
25261
+ return handleFieldValueChange(field.id, value);
25262
+ },
25263
+ placeholder: "Enter ".concat(field.key)
25264
+ })]
25265
+ }, field.id);
25266
+ }), /*#__PURE__*/jsxRuntime.jsxs("button", {
25267
+ onClick: handleAddField,
25268
+ className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors",
25269
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
25270
+ icon: "plus",
25271
+ className: "h-3 w-3"
25272
+ }), "Add Credential Field"]
25273
+ })]
25138
25274
  }), isEditing && isMcp && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
25139
25275
  children: [mcpConfigBlock, mcpFormFields.length > 0 && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
25140
25276
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
@@ -26542,9 +26678,16 @@ var ProvidersSection = function ProvidersSection(_ref) {
26542
26678
  }
26543
26679
  function handleSave() {
26544
26680
  if (!formName.trim() || !dashApi || !appId) return;
26681
+ var credentials = {};
26682
+ Object.entries(formCredentials).forEach(function (_ref6) {
26683
+ var _ref7 = _slicedToArray(_ref6, 2),
26684
+ key = _ref7[0],
26685
+ value = _ref7[1];
26686
+ if (key.trim()) credentials[key.trim()] = value;
26687
+ });
26545
26688
  dashApi.saveProvider(appId, formName.trim(), {
26546
26689
  providerType: formType.trim(),
26547
- credentials: {}
26690
+ credentials: credentials
26548
26691
  }, function () {
26549
26692
  resetForm();
26550
26693
  refreshProviders && refreshProviders();
@@ -26638,10 +26781,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
26638
26781
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
26639
26782
  className: "px-3 py-2 text-xs font-semibold opacity-40 uppercase tracking-wider",
26640
26783
  children: "API Credentials"
26641
- }), credentialProviders.map(function (_ref6) {
26642
- var _ref7 = _slicedToArray(_ref6, 2),
26643
- name = _ref7[0],
26644
- provider = _ref7[1];
26784
+ }), credentialProviders.map(function (_ref8) {
26785
+ var _ref9 = _slicedToArray(_ref8, 2),
26786
+ name = _ref9[0],
26787
+ provider = _ref9[1];
26645
26788
  var isSelected = selectedName === name && !isCreating;
26646
26789
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Item, {
26647
26790
  icon: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
@@ -26667,10 +26810,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
26667
26810
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
26668
26811
  className: "px-3 py-2 text-xs font-semibold opacity-40 uppercase tracking-wider mt-2",
26669
26812
  children: "MCP Servers"
26670
- }), mcpProviders.map(function (_ref8) {
26671
- var _ref9 = _slicedToArray(_ref8, 2),
26672
- name = _ref9[0],
26673
- provider = _ref9[1];
26813
+ }), mcpProviders.map(function (_ref0) {
26814
+ var _ref1 = _slicedToArray(_ref0, 2),
26815
+ name = _ref1[0],
26816
+ provider = _ref1[1];
26674
26817
  var isSelected = selectedName === name && !isCreating;
26675
26818
  return /*#__PURE__*/jsxRuntime.jsx(DashReact.Sidebar.Item, {
26676
26819
  icon: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
@@ -26727,6 +26870,8 @@ var ProvidersSection = function ProvidersSection(_ref) {
26727
26870
  setFormName: setFormName,
26728
26871
  formType: formType,
26729
26872
  setFormType: setFormType,
26873
+ formCredentials: formCredentials,
26874
+ setFormCredentials: setFormCredentials,
26730
26875
  onCreate: handleSave,
26731
26876
  onCancelEdit: function onCancelEdit() {
26732
26877
  resetForm();