@trops/dash-core 0.1.47 → 0.1.48

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
@@ -6999,6 +6999,84 @@ var ProviderForm = function ProviderForm(_ref) {
6999
6999
  errors = _useState6[0],
7000
7000
  setErrors = _useState6[1];
7001
7001
 
7002
+ // Dynamic fields for unknown provider types (empty schema)
7003
+ var hasSchema = Object.keys(credentialSchema).length > 0;
7004
+ var _useState7 = React.useState(hasSchema ? [] : [{
7005
+ id: "default_apiKey",
7006
+ key: "apiKey",
7007
+ secret: true
7008
+ }]),
7009
+ _useState8 = _slicedToArray(_useState7, 2),
7010
+ dynamicFields = _useState8[0],
7011
+ setDynamicFields = _useState8[1];
7012
+ var fieldIdRef = React.useRef(0);
7013
+ var handleDynamicKeyChange = function handleDynamicKeyChange(id, newKey) {
7014
+ setDynamicFields(function (prev) {
7015
+ return prev.map(function (f) {
7016
+ if (f.id !== id) return f;
7017
+ var oldKey = f.key;
7018
+ if (oldKey && formData[oldKey] !== undefined) {
7019
+ setFormData(function (fd) {
7020
+ var updated = _objectSpread$s({}, fd);
7021
+ var val = updated[oldKey];
7022
+ delete updated[oldKey];
7023
+ if (newKey.trim()) updated[newKey] = val;
7024
+ return updated;
7025
+ });
7026
+ }
7027
+ return _objectSpread$s(_objectSpread$s({}, f), {}, {
7028
+ key: newKey
7029
+ });
7030
+ });
7031
+ });
7032
+ };
7033
+ var handleDynamicValueChange = function handleDynamicValueChange(id, value) {
7034
+ var field = dynamicFields.find(function (f) {
7035
+ return f.id === id;
7036
+ });
7037
+ if (field !== null && field !== void 0 && field.key) {
7038
+ setFormData(function (prev) {
7039
+ return _objectSpread$s(_objectSpread$s({}, prev), {}, _defineProperty({}, field.key, value));
7040
+ });
7041
+ }
7042
+ };
7043
+ var handleDynamicSecretToggle = function handleDynamicSecretToggle(id) {
7044
+ setDynamicFields(function (prev) {
7045
+ return prev.map(function (f) {
7046
+ return f.id === id ? _objectSpread$s(_objectSpread$s({}, f), {}, {
7047
+ secret: !f.secret
7048
+ }) : f;
7049
+ });
7050
+ });
7051
+ };
7052
+ var handleAddField = function handleAddField() {
7053
+ fieldIdRef.current += 1;
7054
+ setDynamicFields(function (prev) {
7055
+ return [].concat(_toConsumableArray(prev), [{
7056
+ id: "field_".concat(fieldIdRef.current),
7057
+ key: "",
7058
+ secret: false
7059
+ }]);
7060
+ });
7061
+ };
7062
+ var handleRemoveField = function handleRemoveField(id) {
7063
+ var field = dynamicFields.find(function (f) {
7064
+ return f.id === id;
7065
+ });
7066
+ if (field !== null && field !== void 0 && field.key) {
7067
+ setFormData(function (prev) {
7068
+ var updated = _objectSpread$s({}, prev);
7069
+ delete updated[field.key];
7070
+ return updated;
7071
+ });
7072
+ }
7073
+ setDynamicFields(function (prev) {
7074
+ return prev.filter(function (f) {
7075
+ return f.id !== id;
7076
+ });
7077
+ });
7078
+ };
7079
+
7002
7080
  /**
7003
7081
  * Validate form based on schema requirements
7004
7082
  */
@@ -7116,6 +7194,59 @@ var ProviderForm = function ProviderForm(_ref) {
7116
7194
  children: errors[fieldName]
7117
7195
  })]
7118
7196
  }, fieldName);
7197
+ }), !hasSchema && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
7198
+ children: [dynamicFields.map(function (field) {
7199
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
7200
+ className: "flex flex-col gap-2",
7201
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
7202
+ className: "flex items-center gap-2",
7203
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
7204
+ className: "flex-1",
7205
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.InputText, {
7206
+ value: field.key,
7207
+ onChange: function onChange(value) {
7208
+ return handleDynamicKeyChange(field.id, value);
7209
+ },
7210
+ placeholder: "Field name (e.g. apiKey)"
7211
+ })
7212
+ }), /*#__PURE__*/jsxRuntime.jsx("button", {
7213
+ onClick: function onClick() {
7214
+ return handleDynamicSecretToggle(field.id);
7215
+ },
7216
+ className: "p-2 rounded hover:bg-white/10 transition-colors opacity-50 hover:opacity-100",
7217
+ title: field.secret ? "Show as text" : "Mark as secret",
7218
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
7219
+ icon: field.secret ? "eye-slash" : "eye",
7220
+ className: "h-3.5 w-3.5"
7221
+ })
7222
+ }), /*#__PURE__*/jsxRuntime.jsx("button", {
7223
+ onClick: function onClick() {
7224
+ return handleRemoveField(field.id);
7225
+ },
7226
+ className: "p-2 rounded hover:bg-red-500/20 transition-colors opacity-50 hover:opacity-100 text-red-400",
7227
+ title: "Remove field",
7228
+ children: /*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
7229
+ icon: "trash",
7230
+ className: "h-3.5 w-3.5"
7231
+ })
7232
+ })]
7233
+ }), field.key.trim() && /*#__PURE__*/jsxRuntime.jsx(DashReact.InputText, {
7234
+ type: field.secret ? "password" : "text",
7235
+ value: formData[field.key] || "",
7236
+ onChange: function onChange(value) {
7237
+ return handleDynamicValueChange(field.id, value);
7238
+ },
7239
+ placeholder: "Enter ".concat(field.key)
7240
+ })]
7241
+ }, field.id);
7242
+ }), /*#__PURE__*/jsxRuntime.jsxs("button", {
7243
+ onClick: handleAddField,
7244
+ className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors",
7245
+ children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.FontAwesomeIcon, {
7246
+ icon: "plus",
7247
+ className: "h-3 w-3"
7248
+ }), "Add Credential Field"]
7249
+ })]
7119
7250
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
7120
7251
  className: "flex gap-3 justify-end pt-4 border-t border-gray-300 dark:border-gray-700",
7121
7252
  children: [/*#__PURE__*/jsxRuntime.jsx(DashReact.Button, {
@@ -10593,9 +10724,18 @@ var LayoutBuilder = function LayoutBuilder(_ref) {
10593
10724
  required: true,
10594
10725
  secret: true
10595
10726
  }
10727
+ },
10728
+ anthropic: {
10729
+ apiKey: {
10730
+ type: "text",
10731
+ displayName: "API Key",
10732
+ instructions: "Your Anthropic API key (starts with sk-ant-)",
10733
+ required: true,
10734
+ secret: true
10735
+ }
10596
10736
  }
10597
10737
  };
10598
- var schema = providerSchemas[providerType] || {};
10738
+ var schema = providerSchemas[providerType] || (matchingReq === null || matchingReq === void 0 ? void 0 : matchingReq.credentialSchema) || {};
10599
10739
  setProviderModalConfig({
10600
10740
  widgetId: widgetId,
10601
10741
  providerType: providerType,
@@ -27341,6 +27481,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
27341
27481
  if (createRequested && !prevCreateRequested.current) {
27342
27482
  resetForm();
27343
27483
  setSelectedName(null);
27484
+ setIsAddingMcp(false);
27344
27485
  setIsCreating(true);
27345
27486
  }
27346
27487
  prevCreateRequested.current = createRequested;