@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.esm.js CHANGED
@@ -24996,6 +24996,83 @@ var ProviderDetail = function ProviderDetail(_ref) {
24996
24996
  if (isMcp || !(provider !== null && provider !== void 0 && provider.credentials)) return [];
24997
24997
  return Object.keys(provider.credentials);
24998
24998
  }, [isMcp, provider]);
24999
+
25000
+ // Dynamic credential fields for create mode
25001
+ var _useState5 = useState(isCreating ? [{
25002
+ id: "default_apiKey",
25003
+ key: "apiKey",
25004
+ secret: true
25005
+ }] : []),
25006
+ _useState6 = _slicedToArray(_useState5, 2),
25007
+ credentialFields = _useState6[0],
25008
+ setCredentialFields = _useState6[1];
25009
+ var fieldIdRef = useRef(0);
25010
+ var handleFieldKeyChange = function handleFieldKeyChange(id, newKey) {
25011
+ setCredentialFields(function (prev) {
25012
+ return prev.map(function (f) {
25013
+ if (f.id !== id) return f;
25014
+ var oldKey = f.key;
25015
+ if (oldKey && formCredentials[oldKey] !== undefined) {
25016
+ setFormCredentials(function (creds) {
25017
+ var updated = _objectSpread$4({}, creds);
25018
+ var val = updated[oldKey];
25019
+ delete updated[oldKey];
25020
+ if (newKey.trim()) updated[newKey] = val;
25021
+ return updated;
25022
+ });
25023
+ }
25024
+ return _objectSpread$4(_objectSpread$4({}, f), {}, {
25025
+ key: newKey
25026
+ });
25027
+ });
25028
+ });
25029
+ };
25030
+ var handleFieldValueChange = function handleFieldValueChange(id, value) {
25031
+ var field = credentialFields.find(function (f) {
25032
+ return f.id === id;
25033
+ });
25034
+ if (field !== null && field !== void 0 && field.key) {
25035
+ setFormCredentials(function (prev) {
25036
+ return _objectSpread$4(_objectSpread$4({}, prev), {}, _defineProperty({}, field.key, value));
25037
+ });
25038
+ }
25039
+ };
25040
+ var handleFieldSecretToggle = function handleFieldSecretToggle(id) {
25041
+ setCredentialFields(function (prev) {
25042
+ return prev.map(function (f) {
25043
+ return f.id === id ? _objectSpread$4(_objectSpread$4({}, f), {}, {
25044
+ secret: !f.secret
25045
+ }) : f;
25046
+ });
25047
+ });
25048
+ };
25049
+ var handleAddField = function handleAddField() {
25050
+ fieldIdRef.current += 1;
25051
+ setCredentialFields(function (prev) {
25052
+ return [].concat(_toConsumableArray(prev), [{
25053
+ id: "field_".concat(fieldIdRef.current),
25054
+ key: "",
25055
+ secret: false
25056
+ }]);
25057
+ });
25058
+ };
25059
+ var handleRemoveField = function handleRemoveField(id) {
25060
+ var field = credentialFields.find(function (f) {
25061
+ return f.id === id;
25062
+ });
25063
+ if (field !== null && field !== void 0 && field.key) {
25064
+ setFormCredentials(function (prev) {
25065
+ var updated = _objectSpread$4({}, prev);
25066
+ delete updated[field.key];
25067
+ return updated;
25068
+ });
25069
+ }
25070
+ setCredentialFields(function (prev) {
25071
+ return prev.filter(function (f) {
25072
+ return f.id !== id;
25073
+ });
25074
+ });
25075
+ };
24999
25076
  var handleCredentialChange = function handleCredentialChange(key, value) {
25000
25077
  setFormCredentials(function (prev) {
25001
25078
  return _objectSpread$4(_objectSpread$4({}, prev), {}, _defineProperty({}, key, value));
@@ -25116,6 +25193,65 @@ var ProviderDetail = function ProviderDetail(_ref) {
25116
25193
  },
25117
25194
  placeholder: "Provider type (e.g. algolia, openai)"
25118
25195
  })]
25196
+ }), isCreating && /*#__PURE__*/jsxs(Fragment, {
25197
+ children: [/*#__PURE__*/jsx("div", {
25198
+ className: "border-t border-white/10 pt-4",
25199
+ children: /*#__PURE__*/jsx("p", {
25200
+ className: "text-xs font-semibold opacity-40 uppercase tracking-wider",
25201
+ children: "Credentials"
25202
+ })
25203
+ }), credentialFields.map(function (field) {
25204
+ return /*#__PURE__*/jsxs("div", {
25205
+ className: "flex flex-col gap-2",
25206
+ children: [/*#__PURE__*/jsxs("div", {
25207
+ className: "flex items-center gap-2",
25208
+ children: [/*#__PURE__*/jsx("div", {
25209
+ className: "flex-1",
25210
+ children: /*#__PURE__*/jsx(InputText, {
25211
+ value: field.key,
25212
+ onChange: function onChange(value) {
25213
+ return handleFieldKeyChange(field.id, value);
25214
+ },
25215
+ placeholder: "Field name (e.g. apiKey)"
25216
+ })
25217
+ }), /*#__PURE__*/jsx("button", {
25218
+ onClick: function onClick() {
25219
+ return handleFieldSecretToggle(field.id);
25220
+ },
25221
+ className: "p-2 rounded hover:bg-white/10 transition-colors opacity-50 hover:opacity-100",
25222
+ title: field.secret ? "Show as text" : "Mark as secret",
25223
+ children: /*#__PURE__*/jsx(FontAwesomeIcon, {
25224
+ icon: field.secret ? "eye-slash" : "eye",
25225
+ className: "h-3.5 w-3.5"
25226
+ })
25227
+ }), /*#__PURE__*/jsx("button", {
25228
+ onClick: function onClick() {
25229
+ return handleRemoveField(field.id);
25230
+ },
25231
+ className: "p-2 rounded hover:bg-red-500/20 transition-colors opacity-50 hover:opacity-100 text-red-400",
25232
+ title: "Remove field",
25233
+ children: /*#__PURE__*/jsx(FontAwesomeIcon, {
25234
+ icon: "trash",
25235
+ className: "h-3.5 w-3.5"
25236
+ })
25237
+ })]
25238
+ }), field.key.trim() && /*#__PURE__*/jsx(InputText, {
25239
+ type: field.secret ? "password" : "text",
25240
+ value: formCredentials[field.key] || "",
25241
+ onChange: function onChange(value) {
25242
+ return handleFieldValueChange(field.id, value);
25243
+ },
25244
+ placeholder: "Enter ".concat(field.key)
25245
+ })]
25246
+ }, field.id);
25247
+ }), /*#__PURE__*/jsxs("button", {
25248
+ onClick: handleAddField,
25249
+ className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors",
25250
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
25251
+ icon: "plus",
25252
+ className: "h-3 w-3"
25253
+ }), "Add Credential Field"]
25254
+ })]
25119
25255
  }), isEditing && isMcp && /*#__PURE__*/jsxs(Fragment, {
25120
25256
  children: [mcpConfigBlock, mcpFormFields.length > 0 && /*#__PURE__*/jsxs(Fragment, {
25121
25257
  children: [/*#__PURE__*/jsx("div", {
@@ -26523,9 +26659,16 @@ var ProvidersSection = function ProvidersSection(_ref) {
26523
26659
  }
26524
26660
  function handleSave() {
26525
26661
  if (!formName.trim() || !dashApi || !appId) return;
26662
+ var credentials = {};
26663
+ Object.entries(formCredentials).forEach(function (_ref6) {
26664
+ var _ref7 = _slicedToArray(_ref6, 2),
26665
+ key = _ref7[0],
26666
+ value = _ref7[1];
26667
+ if (key.trim()) credentials[key.trim()] = value;
26668
+ });
26526
26669
  dashApi.saveProvider(appId, formName.trim(), {
26527
26670
  providerType: formType.trim(),
26528
- credentials: {}
26671
+ credentials: credentials
26529
26672
  }, function () {
26530
26673
  resetForm();
26531
26674
  refreshProviders && refreshProviders();
@@ -26619,10 +26762,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
26619
26762
  children: [/*#__PURE__*/jsx("div", {
26620
26763
  className: "px-3 py-2 text-xs font-semibold opacity-40 uppercase tracking-wider",
26621
26764
  children: "API Credentials"
26622
- }), credentialProviders.map(function (_ref6) {
26623
- var _ref7 = _slicedToArray(_ref6, 2),
26624
- name = _ref7[0],
26625
- provider = _ref7[1];
26765
+ }), credentialProviders.map(function (_ref8) {
26766
+ var _ref9 = _slicedToArray(_ref8, 2),
26767
+ name = _ref9[0],
26768
+ provider = _ref9[1];
26626
26769
  var isSelected = selectedName === name && !isCreating;
26627
26770
  return /*#__PURE__*/jsx(Sidebar.Item, {
26628
26771
  icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
@@ -26648,10 +26791,10 @@ var ProvidersSection = function ProvidersSection(_ref) {
26648
26791
  children: [/*#__PURE__*/jsx("div", {
26649
26792
  className: "px-3 py-2 text-xs font-semibold opacity-40 uppercase tracking-wider mt-2",
26650
26793
  children: "MCP Servers"
26651
- }), mcpProviders.map(function (_ref8) {
26652
- var _ref9 = _slicedToArray(_ref8, 2),
26653
- name = _ref9[0],
26654
- provider = _ref9[1];
26794
+ }), mcpProviders.map(function (_ref0) {
26795
+ var _ref1 = _slicedToArray(_ref0, 2),
26796
+ name = _ref1[0],
26797
+ provider = _ref1[1];
26655
26798
  var isSelected = selectedName === name && !isCreating;
26656
26799
  return /*#__PURE__*/jsx(Sidebar.Item, {
26657
26800
  icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
@@ -26708,6 +26851,8 @@ var ProvidersSection = function ProvidersSection(_ref) {
26708
26851
  setFormName: setFormName,
26709
26852
  formType: formType,
26710
26853
  setFormType: setFormType,
26854
+ formCredentials: formCredentials,
26855
+ setFormCredentials: setFormCredentials,
26711
26856
  onCreate: handleSave,
26712
26857
  onCancelEdit: function onCancelEdit() {
26713
26858
  resetForm();