@iblai/web-containers 1.62.1 → 1.62.3

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.
Files changed (97) hide show
  1. package/dist/cjs/components/chat/index.js +38 -10
  2. package/dist/cjs/components/chat/index.js.map +1 -1
  3. package/dist/cjs/components/chat-input-form.js +2 -2
  4. package/dist/cjs/components/chat-input-form.js.map +1 -1
  5. package/dist/cjs/components/hooks/use-google-drive-picker.js +164 -53
  6. package/dist/cjs/components/hooks/use-google-drive-picker.js.map +1 -1
  7. package/dist/cjs/components/modals/edit-mentor-modal/tabs/datasets-tab/add-resource-modal.js +3 -2
  8. package/dist/cjs/components/modals/edit-mentor-modal/tabs/datasets-tab/add-resource-modal.js.map +1 -1
  9. package/dist/cjs/components/profile/billing.js +9 -3
  10. package/dist/cjs/components/profile/billing.js.map +1 -1
  11. package/dist/cjs/components/spend-caps/agent-limits-section.js +3 -5
  12. package/dist/cjs/components/spend-caps/agent-limits-section.js.map +1 -1
  13. package/dist/cjs/components/spend-caps/labels.js +74 -0
  14. package/dist/cjs/components/spend-caps/labels.js.map +1 -1
  15. package/dist/cjs/components/spend-caps/new-user-default-section.js +80 -0
  16. package/dist/cjs/components/spend-caps/new-user-default-section.js.map +1 -0
  17. package/dist/cjs/components/spend-caps/row-icon-action.js +18 -0
  18. package/dist/cjs/components/spend-caps/row-icon-action.js.map +1 -0
  19. package/dist/cjs/components/spend-caps/spend-cap-fields.js +25 -0
  20. package/dist/cjs/components/spend-caps/spend-cap-fields.js.map +1 -0
  21. package/dist/cjs/components/spend-caps/spend-cap-form.js +20 -22
  22. package/dist/cjs/components/spend-caps/spend-cap-form.js.map +1 -1
  23. package/dist/cjs/components/spend-caps/spend-cap-usage.js +1 -0
  24. package/dist/cjs/components/spend-caps/spend-cap-usage.js.map +1 -1
  25. package/dist/cjs/components/spend-caps/use-platform-user-options.js +41 -0
  26. package/dist/cjs/components/spend-caps/use-platform-user-options.js.map +1 -0
  27. package/dist/cjs/components/spend-caps/use-spend-cap-status.js +26 -0
  28. package/dist/cjs/components/spend-caps/use-spend-cap-status.js.map +1 -0
  29. package/dist/cjs/components/spend-caps/use-spend-caps.js +6 -16
  30. package/dist/cjs/components/spend-caps/use-spend-caps.js.map +1 -1
  31. package/dist/cjs/components/spend-caps/user-cap-modal.js +8 -32
  32. package/dist/cjs/components/spend-caps/user-cap-modal.js.map +1 -1
  33. package/dist/cjs/components/spend-caps/user-limits-section.js +119 -0
  34. package/dist/cjs/components/spend-caps/user-limits-section.js.map +1 -0
  35. package/dist/cjs/components/spend-caps/utils.js +15 -0
  36. package/dist/cjs/components/spend-caps/utils.js.map +1 -1
  37. package/dist/cjs/i18n/messages/en.json.js +45 -5
  38. package/dist/cjs/i18n/messages/en.json.js.map +1 -1
  39. package/dist/cjs/i18n/messages/es.json.js +45 -5
  40. package/dist/cjs/i18n/messages/es.json.js.map +1 -1
  41. package/dist/cjs/i18n/messages/fr.json.js +45 -5
  42. package/dist/cjs/i18n/messages/fr.json.js.map +1 -1
  43. package/dist/cjs/i18n/messages/zh.json.js +45 -5
  44. package/dist/cjs/i18n/messages/zh.json.js.map +1 -1
  45. package/dist/cjs/web-containers/tsconfig.build.tsbuildinfo +1 -1
  46. package/dist/esm/_virtual/index2.js +2 -2
  47. package/dist/esm/_virtual/index3.js +2 -2
  48. package/dist/esm/components/chat/index.js +39 -11
  49. package/dist/esm/components/chat/index.js.map +1 -1
  50. package/dist/esm/components/chat-input-form.js +2 -2
  51. package/dist/esm/components/chat-input-form.js.map +1 -1
  52. package/dist/esm/components/hooks/use-google-drive-picker.js +158 -54
  53. package/dist/esm/components/hooks/use-google-drive-picker.js.map +1 -1
  54. package/dist/esm/components/modals/edit-mentor-modal/tabs/datasets-tab/add-resource-modal.js +3 -2
  55. package/dist/esm/components/modals/edit-mentor-modal/tabs/datasets-tab/add-resource-modal.js.map +1 -1
  56. package/dist/esm/components/profile/billing.js +9 -3
  57. package/dist/esm/components/profile/billing.js.map +1 -1
  58. package/dist/esm/components/spend-caps/agent-limits-section.js +3 -5
  59. package/dist/esm/components/spend-caps/agent-limits-section.js.map +1 -1
  60. package/dist/esm/components/spend-caps/labels.js +74 -0
  61. package/dist/esm/components/spend-caps/labels.js.map +1 -1
  62. package/dist/esm/components/spend-caps/new-user-default-section.js +78 -0
  63. package/dist/esm/components/spend-caps/new-user-default-section.js.map +1 -0
  64. package/dist/esm/components/spend-caps/row-icon-action.js +16 -0
  65. package/dist/esm/components/spend-caps/row-icon-action.js.map +1 -0
  66. package/dist/esm/components/spend-caps/spend-cap-fields.js +23 -0
  67. package/dist/esm/components/spend-caps/spend-cap-fields.js.map +1 -0
  68. package/dist/esm/components/spend-caps/spend-cap-form.js +21 -23
  69. package/dist/esm/components/spend-caps/spend-cap-form.js.map +1 -1
  70. package/dist/esm/components/spend-caps/spend-cap-usage.js +1 -0
  71. package/dist/esm/components/spend-caps/spend-cap-usage.js.map +1 -1
  72. package/dist/esm/components/spend-caps/use-platform-user-options.js +39 -0
  73. package/dist/esm/components/spend-caps/use-platform-user-options.js.map +1 -0
  74. package/dist/esm/components/spend-caps/use-spend-cap-status.js +23 -0
  75. package/dist/esm/components/spend-caps/use-spend-cap-status.js.map +1 -0
  76. package/dist/esm/components/spend-caps/use-spend-caps.js +1 -11
  77. package/dist/esm/components/spend-caps/use-spend-caps.js.map +1 -1
  78. package/dist/esm/components/spend-caps/user-cap-modal.js +8 -32
  79. package/dist/esm/components/spend-caps/user-cap-modal.js.map +1 -1
  80. package/dist/esm/components/spend-caps/user-limits-section.js +117 -0
  81. package/dist/esm/components/spend-caps/user-limits-section.js.map +1 -0
  82. package/dist/esm/components/spend-caps/utils.js +14 -1
  83. package/dist/esm/components/spend-caps/utils.js.map +1 -1
  84. package/dist/esm/i18n/messages/en.json.js +45 -5
  85. package/dist/esm/i18n/messages/en.json.js.map +1 -1
  86. package/dist/esm/i18n/messages/es.json.js +45 -5
  87. package/dist/esm/i18n/messages/es.json.js.map +1 -1
  88. package/dist/esm/i18n/messages/fr.json.js +45 -5
  89. package/dist/esm/i18n/messages/fr.json.js.map +1 -1
  90. package/dist/esm/i18n/messages/zh.json.js +45 -5
  91. package/dist/esm/i18n/messages/zh.json.js.map +1 -1
  92. package/dist/esm/node_modules/.pnpm/css-mediaquery@0.1.2/node_modules/css-mediaquery/index.js +1 -1
  93. package/dist/esm/node_modules/.pnpm/matchmediaquery@0.4.2/node_modules/matchmediaquery/index.js +1 -1
  94. package/dist/esm/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
  95. package/dist/esm/web-containers/tsconfig.build.tsbuildinfo +1 -1
  96. package/dist/package.json +1 -1
  97. package/package.json +3 -3
@@ -1,41 +1,41 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
3
  import { CapabilityGate } from '../modals/edit-mentor-modal/capability-gate.js';
4
- import { Input } from '../ui/input.js';
5
- import { Label } from '../ui/label.js';
6
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '../ui/select.js';
7
- import { thresholdsToInput, isValidLimit, parseThresholdsInput, percentUsed, formatUsd } from './utils.js';
4
+ import { SpendCapFields } from './spend-cap-fields.js';
5
+ import { isValidLimit, parseThresholdsInput, percentUsed, formatUsd, thresholdsToInput } from './utils.js';
8
6
 
7
+ function fieldsFrom(cap) {
8
+ var _a, _b;
9
+ return {
10
+ limit: cap ? String(Number(cap.max_cost_usd)) : '',
11
+ interval: (_a = cap === null || cap === void 0 ? void 0 : cap.interval_type) !== null && _a !== void 0 ? _a : 'month',
12
+ enforcement: (_b = cap === null || cap === void 0 ? void 0 : cap.enforcement) !== null && _b !== void 0 ? _b : 'block',
13
+ thresholds: cap ? thresholdsToInput(cap.alert_thresholds) : '80, 95',
14
+ };
15
+ }
9
16
  /**
10
17
  * Editor for one spend cap of any scope. Counter fields
11
18
  * (current spend / remaining / exceeded) are read-only on the backend and
12
19
  * only rendered, never submitted.
13
20
  */
14
21
  function SpendCapForm({ labels, cap, isSaving, isDeleting, onSave, onDelete, onCancel, showUsage = true, testId, }) {
15
- const [limit, setLimit] = React__default.useState('');
16
- const [interval, setInterval] = React__default.useState('month');
17
- const [enforcement, setEnforcement] = React__default.useState('block');
18
- const [thresholds, setThresholds] = React__default.useState('80, 95');
22
+ const [fields, setFields] = React__default.useState(() => fieldsFrom(cap));
19
23
  const [enabled, setEnabled] = React__default.useState(true);
20
24
  // Rehydrate the form whenever the server copy changes.
21
25
  React__default.useEffect(() => {
22
- var _a, _b, _c;
23
- setLimit(cap ? String(Number(cap.max_cost_usd)) : '');
24
- setInterval((_a = cap === null || cap === void 0 ? void 0 : cap.interval_type) !== null && _a !== void 0 ? _a : 'month');
25
- setEnforcement((_b = cap === null || cap === void 0 ? void 0 : cap.enforcement) !== null && _b !== void 0 ? _b : 'block');
26
- setThresholds(cap ? thresholdsToInput(cap.alert_thresholds) : '80, 95');
27
- setEnabled((_c = cap === null || cap === void 0 ? void 0 : cap.enabled) !== null && _c !== void 0 ? _c : true);
26
+ var _a;
27
+ setFields(fieldsFrom(cap));
28
+ setEnabled((_a = cap === null || cap === void 0 ? void 0 : cap.enabled) !== null && _a !== void 0 ? _a : true);
28
29
  }, [cap === null || cap === void 0 ? void 0 : cap.id, cap === null || cap === void 0 ? void 0 : cap.updated_at]); // eslint-disable-line react-hooks/exhaustive-deps
29
- const limitTouched = limit.trim() !== '';
30
- const limitValid = isValidLimit(limit);
31
- const parsedThresholds = parseThresholdsInput(thresholds);
30
+ const limitValid = isValidLimit(fields.limit);
31
+ const parsedThresholds = parseThresholdsInput(fields.thresholds);
32
32
  const thresholdsValid = parsedThresholds !== null;
33
33
  const canSave = limitValid && thresholdsValid && !isSaving && !isDeleting;
34
34
  const handleSave = () => {
35
35
  const formData = {
36
- interval_type: interval,
37
- max_cost_usd: Number(limit).toFixed(2),
38
- enforcement,
36
+ interval_type: fields.interval,
37
+ max_cost_usd: Number(fields.limit).toFixed(2),
38
+ enforcement: fields.enforcement,
39
39
  enabled,
40
40
  };
41
41
  if (parsedThresholds && parsedThresholds.length > 0) {
@@ -49,9 +49,7 @@ function SpendCapForm({ labels, cap, isSaving, isDeleting, onSave, onDelete, onC
49
49
  : usagePercent >= 80
50
50
  ? 'bg-amber-500'
51
51
  : 'bg-blue-500';
52
- return (jsxs("div", { className: "space-y-4", "data-testid": `${testId}-form`, children: [!cap && (jsx("p", { className: "text-xs text-gray-500", "data-testid": `${testId}-no-cap-hint`, children: labels.form.noCapHint })), jsx(CapabilityGate, { title: labels.capability.title, description: labels.capability.description, offHint: labels.capability.offHint, enabled: enabled, onToggle: setEnabled, disabled: isSaving || isDeleting, ariaLabel: labels.capability.title, toggleTestId: `${testId}-enabled-switch`, children: jsxs("div", { className: "space-y-4", children: [cap && showUsage && (jsxs("div", { className: "space-y-2 rounded-lg border border-gray-200 bg-gray-50 p-3", "data-testid": `${testId}-usage`, children: [jsxs("div", { className: "flex items-center justify-between", children: [jsx("p", { className: "text-xs font-medium text-gray-700", children: labels.usage.periodTitles[cap.interval_type] }), jsxs("div", { className: "flex items-center gap-1.5", children: [!cap.enabled && (jsx("span", { className: "rounded-full bg-gray-200 px-2 py-0.5 text-[11px] font-medium text-gray-700", "data-testid": `${testId}-disabled-badge`, children: labels.usage.disabledBadge })), cap.enforcement === 'alert_only' && (jsx("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-medium text-amber-800", "data-testid": `${testId}-alert-only-badge`, children: labels.usage.alertOnlyBadge })), cap.is_exceeded && (jsx("span", { className: "rounded-full bg-red-100 px-2 py-0.5 text-[11px] font-medium text-red-700", "data-testid": `${testId}-exceeded-badge`, children: labels.usage.exceededBadge }))] })] }), jsx("div", { className: "h-2 w-full overflow-hidden rounded-full bg-gray-200", role: "progressbar", "aria-valuenow": usagePercent, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": labels.usage.title, children: jsx("div", { className: `h-full rounded-full transition-all ${barColor}`, style: { width: `${usagePercent}%` } }) }), jsxs("div", { className: "flex items-center justify-between text-xs text-gray-600", children: [jsx("span", { "data-testid": `${testId}-spent`, children: labels.usage.spent.replace('{amount}', formatUsd(cap.current_spend_usd)) }), jsx("span", { "data-testid": `${testId}-percent`, children: labels.usage.percentUsed.replace('{percent}', String(usagePercent)) }), jsx("span", { "data-testid": `${testId}-remaining`, children: labels.usage.remaining.replace('{amount}', formatUsd(cap.remaining_usd)) })] })] })), jsxs("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx(Label, { className: "text-xs font-medium text-gray-700", children: labels.form.limitLabel }), jsx(Input, { className: "focus-visible:border-blue-500 focus-visible:ring-1 focus-visible:ring-blue-500", value: limit, onChange: (e) => setLimit(e.target.value), placeholder: labels.form.limitPlaceholder, inputMode: "decimal", "data-testid": `${testId}-limit-input` }), limitTouched && !limitValid && (jsx("p", { className: "text-xs text-red-500", "data-testid": `${testId}-limit-error`, children: labels.form.limitError }))] }), jsxs("div", { className: "space-y-1.5", children: [jsx(Label, { className: "text-xs font-medium text-gray-700", children: labels.form.intervalLabel }), jsxs(Select, { value: interval, onValueChange: (value) => setInterval(value), children: [jsx(SelectTrigger, { className: "h-9", "data-testid": `${testId}-interval-select`, children: jsx(SelectValue, {}) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "day", children: labels.form.intervalOptions.day }), jsx(SelectItem, { value: "week", children: labels.form.intervalOptions.week }), jsx(SelectItem, { value: "month", children: labels.form.intervalOptions.month }), jsx(SelectItem, { value: "year", children: labels.form.intervalOptions.year })] })] })] })] }), jsxs("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2", children: [jsxs("div", { className: "space-y-1.5", children: [jsx(Label, { className: "text-xs font-medium text-gray-700", children: labels.form.enforcementLabel }), jsxs(Select, { value: enforcement, onValueChange: (value) => setEnforcement(value), children: [jsx(SelectTrigger, { className: "h-9", "data-testid": `${testId}-enforcement-select`, children: jsx(SelectValue, {}) }), jsxs(SelectContent, { children: [jsx(SelectItem, { value: "block", children: labels.form.enforcementOptions.block }), jsx(SelectItem, { value: "alert_only", children: labels.form.enforcementOptions.alertOnly })] })] }), jsx("p", { className: "text-xs text-gray-500", children: enforcement === 'block'
53
- ? labels.form.enforcementHelp.block
54
- : labels.form.enforcementHelp.alertOnly })] }), jsxs("div", { className: "space-y-1.5", children: [jsx(Label, { className: "text-xs font-medium text-gray-700", children: labels.form.thresholdsLabel }), jsx(Input, { className: "focus-visible:border-blue-500 focus-visible:ring-1 focus-visible:ring-blue-500", value: thresholds, onChange: (e) => setThresholds(e.target.value), placeholder: labels.form.thresholdsPlaceholder, "data-testid": `${testId}-thresholds-input` }), thresholdsValid ? (jsx("p", { className: "text-xs text-gray-500", children: labels.form.thresholdsHelp })) : (jsx("p", { className: "text-xs text-red-500", "data-testid": `${testId}-thresholds-error`, children: labels.form.thresholdsError }))] })] })] }) }), jsxs("div", { className: "flex items-center justify-end gap-2", children: [onCancel && (jsx("button", { type: "button", onClick: onCancel, disabled: isSaving || isDeleting, "data-testid": `${testId}-cancel-button`, className: "inline-flex items-center rounded-md border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50", children: labels.form.cancel })), cap && onDelete && (jsx("button", { type: "button", onClick: onDelete, disabled: isSaving || isDeleting, "data-testid": `${testId}-delete-button`, className: "inline-flex items-center rounded-md border border-red-200 px-4 py-2 text-sm font-medium text-red-600 hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50", children: isDeleting ? labels.form.removing : labels.form.remove })), jsx("button", { type: "button", onClick: handleSave, disabled: !canSave, "data-testid": `${testId}-save-button`, className: "inline-flex items-center gap-2 rounded-md bg-gradient-to-r from-[#2563EB] to-[#93C5FD] px-4 py-2 text-sm font-medium text-white hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50", children: isSaving ? labels.form.saving : labels.form.save })] })] }));
52
+ return (jsxs("div", { className: "space-y-4", "data-testid": `${testId}-form`, children: [!cap && (jsx("p", { className: "text-xs text-gray-500", "data-testid": `${testId}-no-cap-hint`, children: labels.form.noCapHint })), jsx(CapabilityGate, { title: labels.capability.title, description: labels.capability.description, offHint: labels.capability.offHint, enabled: enabled, onToggle: setEnabled, disabled: isSaving || isDeleting, ariaLabel: labels.capability.title, toggleTestId: `${testId}-enabled-switch`, children: jsxs("div", { className: "space-y-4", children: [cap && showUsage && (jsxs("div", { className: "space-y-2 rounded-lg border border-gray-200 bg-gray-50 p-3", "data-testid": `${testId}-usage`, children: [jsxs("div", { className: "flex items-center justify-between", children: [jsx("p", { className: "text-xs font-medium text-gray-700", children: labels.usage.periodTitles[cap.interval_type] }), jsxs("div", { className: "flex items-center gap-1.5", children: [!cap.enabled && (jsx("span", { className: "rounded-full bg-gray-200 px-2 py-0.5 text-[11px] font-medium text-gray-700", "data-testid": `${testId}-disabled-badge`, children: labels.usage.disabledBadge })), cap.enforcement === 'alert_only' && (jsx("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-medium text-amber-800", "data-testid": `${testId}-alert-only-badge`, children: labels.usage.alertOnlyBadge })), cap.is_exceeded && (jsx("span", { className: "rounded-full bg-red-100 px-2 py-0.5 text-[11px] font-medium text-red-700", "data-testid": `${testId}-exceeded-badge`, children: labels.usage.exceededBadge }))] })] }), jsx("div", { className: "h-2 w-full overflow-hidden rounded-full bg-gray-200", role: "progressbar", "aria-valuenow": usagePercent, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": labels.usage.title, children: jsx("div", { className: `h-full rounded-full transition-all ${barColor}`, style: { width: `${usagePercent}%` } }) }), jsxs("div", { className: "flex items-center justify-between text-xs text-gray-600", children: [jsx("span", { "data-testid": `${testId}-spent`, children: labels.usage.spent.replace('{amount}', formatUsd(cap.current_spend_usd)) }), jsx("span", { "data-testid": `${testId}-percent`, children: labels.usage.percentUsed.replace('{percent}', String(usagePercent)) }), jsx("span", { "data-testid": `${testId}-remaining`, children: labels.usage.remaining.replace('{amount}', formatUsd(cap.remaining_usd)) })] })] })), jsx(SpendCapFields, { labels: labels, values: fields, onChange: setFields, testId: testId })] }) }), jsxs("div", { className: "flex items-center justify-end gap-2", children: [onCancel && (jsx("button", { type: "button", onClick: onCancel, disabled: isSaving || isDeleting, "data-testid": `${testId}-cancel-button`, className: "inline-flex items-center rounded-md border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50", children: labels.form.cancel })), cap && onDelete && (jsx("button", { type: "button", onClick: onDelete, disabled: isSaving || isDeleting, "data-testid": `${testId}-delete-button`, className: "inline-flex items-center rounded-md border border-red-200 px-4 py-2 text-sm font-medium text-red-600 hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50", children: isDeleting ? labels.form.removing : labels.form.remove })), jsx("button", { type: "button", onClick: handleSave, disabled: !canSave, "data-testid": `${testId}-save-button`, className: "inline-flex items-center gap-2 rounded-md bg-gradient-to-r from-[#2563EB] to-[#93C5FD] px-4 py-2 text-sm font-medium text-white hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50", children: isSaving ? labels.form.saving : labels.form.save })] })] }));
55
53
  }
56
54
 
57
55
  export { SpendCapForm };
@@ -1 +1 @@
1
- {"version":3,"file":"spend-cap-form.js","sources":["../../../../../../../src/components/spend-caps/spend-cap-form.tsx"],"sourcesContent":[null],"names":["React","_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"spend-cap-form.js","sources":["../../../../../../../src/components/spend-caps/spend-cap-form.tsx"],"sourcesContent":[null],"names":["React","_jsxs","_jsx"],"mappings":"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"}
@@ -27,6 +27,7 @@ function SpendCapUsage({ tenantKey, userId, mentorId, showWhenOk = false, classN
27
27
  tenant: t('spendCapUsage.scopeTenant'),
28
28
  agent: t('spendCapUsage.scopeAgent'),
29
29
  user_agent: t('spendCapUsage.scopeUserAgent'),
30
+ user: t('spendCapUsage.scopeUser'),
30
31
  };
31
32
  const intervalLabels = {
32
33
  day: t('spendCapUsage.intervalDay'),
@@ -1 +1 @@
1
- {"version":3,"file":"spend-cap-usage.js","sources":["../../../../../../../src/components/spend-caps/spend-cap-usage.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","AlertTriangle"],"mappings":"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"}
1
+ {"version":3,"file":"spend-cap-usage.js","sources":["../../../../../../../src/components/spend-caps/spend-cap-usage.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","AlertTriangle"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { useDebounce as a } from '../../node_modules/.pnpm/use-debounce@10.0.4_react@19.1.0/node_modules/use-debounce/dist/index.module.js';
2
+ import { usePlatformUsersQuery } from '@iblai/data-layer';
3
+
4
+ /**
5
+ * Options for a platform-user picker, searched tenant-wide once the
6
+ * debounced term reaches two characters. Deliberately email-only in the UI
7
+ * (no name/username noise); the cap API is still keyed by username, which
8
+ * rides along as the option value.
9
+ */
10
+ function usePlatformUserOptions(tenantKey, searchTerm, { enabled = true } = {}) {
11
+ var _a;
12
+ const [debouncedSearch] = a(searchTerm, 300);
13
+ const query = debouncedSearch.trim();
14
+ const shouldSearch = Boolean(enabled && tenantKey && query.length >= 2);
15
+ const { data, isFetching } = usePlatformUsersQuery({
16
+ page: 1,
17
+ page_size: 20,
18
+ platform_key: tenantKey,
19
+ platform_org: tenantKey,
20
+ query,
21
+ return_policies: 'false',
22
+ }, { skip: !shouldSearch });
23
+ // The platform users endpoint returns either `results` or `results.data`
24
+ // depending on whether policies were requested.
25
+ const rawResults = data === null || data === void 0 ? void 0 : data.results;
26
+ const foundUsers = Array.isArray(rawResults)
27
+ ? rawResults
28
+ : ((_a = rawResults === null || rawResults === void 0 ? void 0 : rawResults.data) !== null && _a !== void 0 ? _a : []);
29
+ const options = foundUsers
30
+ .filter((user) => Boolean(user.username) && Boolean(user.email))
31
+ .map((user) => ({
32
+ value: user.username,
33
+ label: user.email,
34
+ }));
35
+ return { options, isSearching: isFetching };
36
+ }
37
+
38
+ export { usePlatformUserOptions };
39
+ //# sourceMappingURL=use-platform-user-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-platform-user-options.js","sources":["../../../../../../../src/components/spend-caps/use-platform-user-options.ts"],"sourcesContent":[null],"names":["useDebounce"],"mappings":";;;AAcA;;;;;AAKG;AACG,SAAU,sBAAsB,CACpC,SAAiB,EACjB,UAAkB,EAClB,EAAE,OAAO,GAAG,IAAI,EAAA,GAA4B,EAAE,EAAA;;IAE9C,MAAM,CAAC,eAAe,CAAC,GAAGA,CAAW,CAAC,UAAU,EAAE,GAAG,CAAC;AACtD,IAAA,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE;AACpC,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;AACvE,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAChD;AACE,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,YAAY,EAAE,SAAS;QACvB,KAAK;AACL,QAAA,eAAe,EAAE,OAAO;AACzB,KAAA,EACD,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,CACxB;;;IAID,MAAM,UAAU,GACd,IACD,KAAA,IAAA,IADC,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CACH,OAAO;AACV,IAAA,MAAM,UAAU,GAAyB,KAAK,CAAC,OAAO,CAAC,UAAU;AAC/D,UAAE;AACF,WAAG,CAAA,EAAA,GAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAyB;AACnC,SAAA,MAAM,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9D,SAAA,GAAG,CAAC,CAAC,IAAI,MAAM;QACd,KAAK,EAAE,IAAI,CAAC,QAAkB;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAe;AAC5B,KAAA,CAAC,CAAC;AAEL,IAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE;AAC7C;;;;"}
@@ -0,0 +1,23 @@
1
+ import React__default from 'react';
2
+ import { useGetSpendCapStatusQuery } from '@iblai/data-layer';
3
+
4
+ /** How often the chat re-reads the status so a warning appears mid-conversation. */
5
+ const SPEND_CAP_STATUS_POLL_MS = 60000;
6
+ /**
7
+ * Learner-safe spend-cap status for the chat (zones and percentages only,
8
+ * never dollars), polled while the chat is open. `SpendCapUsage` reads the
9
+ * same cache entry, so rendering it beside this hook costs no extra request.
10
+ */
11
+ function useSpendCapStatus({ tenantKey, userId, mentorId, enabled = true, }) {
12
+ const skip = !enabled || !tenantKey || !userId;
13
+ const { data, refetch } = useGetSpendCapStatusQuery({ org: tenantKey, userId, mentor: mentorId }, { skip, pollingInterval: skip ? 0 : SPEND_CAP_STATUS_POLL_MS, refetchOnMountOrArgChange: true });
14
+ // RTK throws on refetching a query that never started (the skipped case).
15
+ const safeRefetch = React__default.useCallback(() => {
16
+ if (!skip)
17
+ void refetch();
18
+ }, [skip, refetch]);
19
+ return { summary: data, blocked: Boolean(data === null || data === void 0 ? void 0 : data.blocked), refetch: safeRefetch };
20
+ }
21
+
22
+ export { SPEND_CAP_STATUS_POLL_MS, useSpendCapStatus };
23
+ //# sourceMappingURL=use-spend-cap-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-spend-cap-status.js","sources":["../../../../../../../src/components/spend-caps/use-spend-cap-status.ts"],"sourcesContent":[null],"names":["React"],"mappings":";;;AAKA;AACO,MAAM,wBAAwB,GAAG;AAoBxC;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,EAChC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,OAAO,GAAG,IAAI,GACW,EAAA;IACzB,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;AAC9C,IAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,yBAAyB,CACjD,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,GAAG,CAAC,GAAG,wBAAwB,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAChG;;AAGD,IAAA,MAAM,WAAW,GAAGA,cAAK,CAAC,WAAW,CAAC,MAAK;AACzC,QAAA,IAAI,CAAC,IAAI;YAAE,KAAK,OAAO,EAAE;AAC3B,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE;AACjF;;;;"}
@@ -1,17 +1,7 @@
1
1
  import { toast } from 'sonner';
2
2
  import { useGetAgentSpendCapQuery, useGetTenantSpendCapQuery, useListAgentUserSpendCapsQuery, useUpsertAgentSpendCapMutation, useDeleteAgentSpendCapMutation, useUpsertTenantSpendCapMutation, useDeleteTenantSpendCapMutation, useUpsertUserSpendCapMutation, useDeleteUserSpendCapMutation } from '@iblai/data-layer';
3
+ import { errorStatus, errorDetail } from './utils.js';
3
4
 
4
- function errorStatus(error) {
5
- return error === null || error === void 0 ? void 0 : error.status;
6
- }
7
- function errorDetail(error) {
8
- const data = error === null || error === void 0 ? void 0 : error.data;
9
- if (typeof (data === null || data === void 0 ? void 0 : data.detail) === 'string')
10
- return data.detail;
11
- if (typeof (data === null || data === void 0 ? void 0 : data.error) === 'string')
12
- return data.error;
13
- return '';
14
- }
15
5
  function useSpendCaps({ tenantKey, mentorId, labels }) {
16
6
  const identityReady = Boolean(tenantKey && mentorId);
17
7
  // 404 is the documented "no cap configured yet" state for the singleton
@@ -1 +1 @@
1
- {"version":3,"file":"use-spend-caps.js","sources":["../../../../../../../src/components/spend-caps/use-spend-caps.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-spend-caps.js","sources":["../../../../../../../src/components/spend-caps/use-spend-caps.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import React__default from 'react';
3
- import { useDebounce as a } from '../../node_modules/.pnpm/use-debounce@10.0.4_react@19.1.0/node_modules/use-debounce/dist/index.module.js';
4
- import { usePlatformUsersQuery } from '@iblai/data-layer';
5
3
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/dialog.js';
6
4
  import { cn } from '../../lib/utils.js';
7
5
  import { SearchSelect } from './search-select.js';
8
6
  import { SpendCapForm } from './spend-cap-form.js';
7
+ import { usePlatformUserOptions } from './use-platform-user-options.js';
9
8
  import { UserProfileLink } from '../profile/user-profile-link.js';
10
9
 
11
10
  /**
@@ -14,8 +13,8 @@ import { UserProfileLink } from '../profile/user-profile-link.js';
14
13
  * (no free-text usernames), edit mode goes straight to the form for the
15
14
  * cap's user. The form's Cancel/Save footer acts as the dialog footer.
16
15
  */
17
- function UserCapModal({ isOpen, onClose, cap, labels, tenantKey, isSaving, onSave }) {
18
- var _a, _b, _c, _d, _e;
16
+ function UserCapModal({ isOpen, onClose, cap, labels, tenantKey, initialUser = null, isSaving, onSave, }) {
17
+ var _a, _b, _c, _d;
19
18
  const isEditing = Boolean(cap);
20
19
  const [pickedUser, setPickedUser] = React__default.useState(null);
21
20
  const [userSearch, setUserSearch] = React__default.useState('');
@@ -23,34 +22,11 @@ function UserCapModal({ isOpen, onClose, cap, labels, tenantKey, isSaving, onSav
23
22
  React__default.useEffect(() => {
24
23
  if (!isOpen)
25
24
  return;
26
- setPickedUser(null);
25
+ setPickedUser(initialUser);
27
26
  setUserSearch('');
28
- }, [isOpen, cap]);
29
- const [debouncedUserSearch] = a(userSearch, 300);
30
- const shouldSearchUsers = Boolean(isOpen && !isEditing && tenantKey && debouncedUserSearch.trim().length >= 2);
31
- const { data: usersData, isFetching: isSearchingUsers } = usePlatformUsersQuery({
32
- page: 1,
33
- page_size: 20,
34
- platform_key: tenantKey,
35
- platform_org: tenantKey,
36
- query: debouncedUserSearch.trim(),
37
- return_policies: 'false',
38
- }, { skip: !shouldSearchUsers });
39
- // The platform users endpoint returns either `results` or `results.data`
40
- // depending on whether policies were requested.
41
- const rawResults = usersData === null || usersData === void 0 ? void 0 : usersData.results;
42
- const foundUsers = Array.isArray(rawResults)
43
- ? rawResults
44
- : ((_a = rawResults === null || rawResults === void 0 ? void 0 : rawResults.data) !== null && _a !== void 0 ? _a : []);
45
- // Deliberately email-only in the UI (no name/username noise); the cap API
46
- // is still keyed by username, which rides along as the option value.
47
- const userOptions = foundUsers
48
- .filter((user) => Boolean(user.username) && Boolean(user.email))
49
- .map((user) => ({
50
- value: user.username,
51
- label: user.email,
52
- }));
53
- const username = isEditing ? ((_b = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _b !== void 0 ? _b : '') : ((_c = pickedUser === null || pickedUser === void 0 ? void 0 : pickedUser.value) !== null && _c !== void 0 ? _c : '');
27
+ }, [isOpen, cap, initialUser]);
28
+ const { options: userOptions, isSearching: isSearchingUsers } = usePlatformUserOptions(tenantKey, userSearch, { enabled: isOpen && !isEditing });
29
+ const username = isEditing ? ((_a = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _a !== void 0 ? _a : '') : ((_b = pickedUser === null || pickedUser === void 0 ? void 0 : pickedUser.value) !== null && _b !== void 0 ? _b : '');
54
30
  const handleSave = async (formData) => {
55
31
  if (!username)
56
32
  return;
@@ -61,7 +37,7 @@ function UserCapModal({ isOpen, onClose, cap, labels, tenantKey, isSaving, onSav
61
37
  return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsxs(DialogContent, { "aria-describedby": "user-cap-modal-description", "data-testid": "user-cap-modal", className: "flex max-h-[85vh] flex-col sm:max-w-xl", children: [jsx(DialogHeader, { className: "flex-shrink-0", children: jsx(DialogTitle, { className: "ibl-dialog-title", children: isEditing ? labels.users.editTitle : labels.users.addTitle }) }), jsxs("div", { className: cn('min-h-0 flex-1 space-y-4 overflow-y-auto',
62
38
  // Reserve room for the search results dropdown while no user is
63
39
  // picked yet — otherwise the scroll container clips it.
64
- !isEditing && !pickedUser && 'min-h-[340px]'), id: "user-cap-modal-description", children: [isEditing ? (jsx("p", { className: "text-sm text-[#646464]", "data-testid": "user-cap-modal-username", children: jsx(UserProfileLink, { tenantKey: tenantKey, username: (_d = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _d !== void 0 ? _d : '', display: (cap === null || cap === void 0 ? void 0 : cap.email) || ((_e = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _e !== void 0 ? _e : ''), className: "inline", testId: "user-cap-modal-profile-link" }) })) : (jsx(SearchSelect, { labels: labels.users.picker, selected: pickedUser, onSelect: setPickedUser, onClear: () => setPickedUser(null), searchTerm: userSearch, onSearchTermChange: setUserSearch, options: userOptions, isLoading: isSearchingUsers, testId: "user-cap-modal-user-picker" })), Boolean(username) && (jsx(SpendCapForm, { labels: labels, cap: cap !== null && cap !== void 0 ? cap : undefined, isSaving: isSaving, isDeleting: false, onSave: handleSave, onCancel: onClose, testId: "user-cap-modal" }))] })] }) }));
40
+ !isEditing && !pickedUser && 'min-h-[340px]'), id: "user-cap-modal-description", children: [isEditing ? (jsx("p", { className: "text-sm text-[#646464]", "data-testid": "user-cap-modal-username", children: jsx(UserProfileLink, { tenantKey: tenantKey, username: (_c = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _c !== void 0 ? _c : '', display: (cap === null || cap === void 0 ? void 0 : cap.email) || ((_d = cap === null || cap === void 0 ? void 0 : cap.username) !== null && _d !== void 0 ? _d : ''), className: "inline", testId: "user-cap-modal-profile-link" }) })) : (jsx(SearchSelect, { labels: labels.users.picker, selected: pickedUser, onSelect: setPickedUser, onClear: () => setPickedUser(null), searchTerm: userSearch, onSearchTermChange: setUserSearch, options: userOptions, isLoading: isSearchingUsers, testId: "user-cap-modal-user-picker" })), Boolean(username) && (jsx(SpendCapForm, { labels: labels, cap: cap !== null && cap !== void 0 ? cap : undefined, isSaving: isSaving, isDeleting: false, onSave: handleSave, onCancel: onClose, testId: "user-cap-modal" }))] })] }) }));
65
41
  }
66
42
 
67
43
  export { UserCapModal };
@@ -1 +1 @@
1
- {"version":3,"file":"user-cap-modal.js","sources":["../../../../../../../src/components/spend-caps/user-cap-modal.tsx"],"sourcesContent":[null],"names":["React","useDebounce","_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"user-cap-modal.js","sources":["../../../../../../../src/components/spend-caps/user-cap-modal.tsx"],"sourcesContent":[null],"names":["React","_jsx","_jsxs"],"mappings":";;;;;;;;;AAqCA;;;;;AAKG;AACG,SAAU,YAAY,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,GAAG,EACH,MAAM,EACN,SAAS,EACT,WAAW,GAAG,IAAI,EAClB,QAAQ,EACR,MAAM,GACA,EAAA;;AACN,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;AAC9B,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAA4B,IAAI,CAAC;AACnF,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGtD,IAAAA,cAAK,CAAC,SAAS,CAAC,MAAK;AACnB,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,aAAa,CAAC,WAAW,CAAC;QAC1B,aAAa,CAAC,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAE9B,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,sBAAsB,CACpF,SAAS,EACT,UAAU,EACV,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,CAClC;AAED,IAAA,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAA,EAAA,GAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,KAAK,MAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAA,MAAA,GAAV,UAAU,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAE9E,IAAA,MAAM,UAAU,GAAG,OAAO,QAA+B,KAAI;AAC3D,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9C,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,EAAE;AACtB,IAAA,CAAC;AAED,IAAA,QACEC,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAA,QAAA,EAIzCC,IAAA,CAAC,aAAa,EAAA,EAAA,kBAAA,EACK,4BAA4B,EAAA,aAAA,EACjC,gBAAgB,EAC5B,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CAElDD,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,eAAe,EAAA,QAAA,EACrCA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EACtC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAA,CAC/C,EAAA,CACD,EACfC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,0CAA0C;;;AAG1C,oBAAA,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,eAAe,CAC7C,EACD,EAAE,EAAC,4BAA4B,EAAA,QAAA,EAAA,CAE9B,SAAS,IACRD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wBAAwB,EAAA,aAAA,EAAa,yBAAyB,YACzEA,GAAA,CAAC,eAAe,IACd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAA,EAAA,GAAA,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,QAAQ,mCAAI,EAAE,EAC7B,OAAO,EAAE,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,KAAK,MAAK,CAAA,EAAA,GAAA,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,QAAQ,mCAAI,EAAE,CAAC,EAC5C,SAAS,EAAC,QAAQ,EAClB,MAAM,EAAC,6BAA6B,GACpC,EAAA,CACA,KAEJA,GAAA,CAAC,YAAY,IACX,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAC3B,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,EAClC,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,aAAa,EACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAC,4BAA4B,GACnC,CACH,EACA,OAAO,CAAC,QAAQ,CAAC,KAChBA,GAAA,CAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAH,GAAG,GAAI,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,KAAK,EACjB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAC,gBAAgB,EAAA,CACvB,CACH,IACG,CAAA,EAAA,CACQ,EAAA,CACT;AAEb;;;;"}
@@ -0,0 +1,117 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { toast } from 'sonner';
4
+ import { useListTenantUserSpendCapsQuery, useUpsertTenantUserSpendCapMutation, useDeleteTenantUserSpendCapMutation } from '@iblai/data-layer';
5
+ import { CustomSwitch } from '../modals/edit-mentor-modal/custom-switch.js';
6
+ import { UserProfileLink, UserProfileDialog } from '../profile/user-profile-link.js';
7
+ import { Button } from '../ui/button.js';
8
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '../ui/dialog.js';
9
+ import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from '../ui/table.js';
10
+ import { Spinner } from '../spinner/index.js';
11
+ import { useT } from '../../i18n/context.js';
12
+ import '../../packages/i18n/dist/index.esm.js';
13
+ import { resolveSpendCapsTabLabels } from './labels.js';
14
+ import { RowIconAction } from './row-icon-action.js';
15
+ import { SearchSelect } from './search-select.js';
16
+ import { usePlatformUserOptions } from './use-platform-user-options.js';
17
+ import { UserCapModal } from './user-cap-modal.js';
18
+ import { errorStatus, formatUsd, errorDetail } from './utils.js';
19
+ import ShieldAlert from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/shield-alert.js';
20
+ import SlidersHorizontal from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js';
21
+ import Trash2 from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/trash-2.js';
22
+
23
+ /**
24
+ * Tenant-settings Billing "User Limits" tab: every user-scoped spend cap in
25
+ * the workspace (one user's spend across all agents, `spend-caps/users/`,
26
+ * iblai-platform#2513) — the Agent Limits layout with a user autocomplete
27
+ * filter (also the entry point for a user who has none yet), a direct status
28
+ * toggle per row, and edit/delete icons beside it. Add and edit both go
29
+ * through the same `UserCapModal` as the per-agent user limits. Rendered
30
+ * inside `BillingTab` above `NewUserDefaultSection`, whose rows end up here.
31
+ */
32
+ function UserLimitsSection({ tenantKey, labels: labelsOverride }) {
33
+ var _a;
34
+ const t = useT();
35
+ const labels = React__default.useMemo(() => resolveSpendCapsTabLabels(labelsOverride, t), [labelsOverride, t]);
36
+ const copy = labels.tenantSections.users;
37
+ const [userFilter, setUserFilter] = React__default.useState(null);
38
+ const [userSearch, setUserSearch] = React__default.useState('');
39
+ const { options: userOptions, isSearching: isSearchingUsers } = usePlatformUserOptions(tenantKey, userSearch);
40
+ // The endpoint filters by username server-side — pass it through instead
41
+ // of fetching everything and filtering client-side.
42
+ const { data: visibleCaps = [], error: capsError, isLoading, isFetching, } = useListTenantUserSpendCapsQuery({ org: tenantKey, ...(userFilter ? { username: userFilter.value } : {}) }, { skip: !tenantKey });
43
+ const isForbidden = errorStatus(capsError) === 403;
44
+ const [upsertCap, { isLoading: isSaving }] = useUpsertTenantUserSpendCapMutation();
45
+ const [deleteCap, { isLoading: isDeleting }] = useDeleteTenantUserSpendCapMutation();
46
+ const [isModalOpen, setIsModalOpen] = React__default.useState(false);
47
+ const [editingCap, setEditingCap] = React__default.useState(null);
48
+ // Kept whole so the dialog can show the user's email while the delete
49
+ // call is still keyed by username.
50
+ const [pendingDelete, setPendingDelete] = React__default.useState(null);
51
+ // Whole-row click opens the user's profile (Management-tab pattern).
52
+ const [profileCap, setProfileCap] = React__default.useState(null);
53
+ const saveCap = async (username, formData) => {
54
+ try {
55
+ await upsertCap({ org: tenantKey, username, formData }).unwrap();
56
+ toast.success(labels.toasts.saved);
57
+ return true;
58
+ }
59
+ catch (error) {
60
+ console.error('[UserLimitsSection] save spend limit error', error);
61
+ toast.error(errorDetail(error) || labels.toasts.saveError);
62
+ return false;
63
+ }
64
+ };
65
+ const removeCap = async (username) => {
66
+ try {
67
+ await deleteCap({ org: tenantKey, username }).unwrap();
68
+ toast.success(labels.toasts.deleted);
69
+ return true;
70
+ }
71
+ catch (error) {
72
+ console.error('[UserLimitsSection] delete spend limit error', error);
73
+ toast.error(errorDetail(error) || labels.toasts.deleteError);
74
+ return false;
75
+ }
76
+ };
77
+ // Status toggle saves immediately (datasets-table pattern) — the PUT is an
78
+ // upsert, so the cap's current fields ride along with the flipped flag.
79
+ const toggleEnabled = (cap, checked) => {
80
+ var _a;
81
+ void saveCap((_a = cap.username) !== null && _a !== void 0 ? _a : '', {
82
+ interval_type: cap.interval_type,
83
+ max_cost_usd: cap.max_cost_usd,
84
+ enforcement: cap.enforcement,
85
+ alert_thresholds: cap.alert_thresholds,
86
+ enabled: checked,
87
+ });
88
+ };
89
+ const openAddForFilteredUser = () => {
90
+ setEditingCap(null);
91
+ setIsModalOpen(true);
92
+ };
93
+ const openEdit = (cap) => {
94
+ setEditingCap(cap);
95
+ setIsModalOpen(true);
96
+ };
97
+ const handleConfirmDelete = async () => {
98
+ var _a;
99
+ if (!pendingDelete)
100
+ return;
101
+ const deleted = await removeCap((_a = pendingDelete.username) !== null && _a !== void 0 ? _a : '');
102
+ if (deleted)
103
+ setPendingDelete(null);
104
+ };
105
+ return (jsxs(Fragment, { children: [jsxs("div", { "data-testid": "spend-limits-users-section", className: "rounded-lg border border-[#e5e5e5] bg-white shadow-[0_1px_2px_0_rgba(0,0,0,0.05)] dark:bg-zinc-900 dark:border-zinc-800", children: [jsx("div", { className: "flex flex-col gap-2 p-4 sm:flex-row sm:items-start sm:justify-between", children: jsxs("div", { className: "space-y-0.5", children: [jsx("h3", { className: "text-[16px] font-medium leading-6 text-[#101828] dark:text-gray-100", children: copy.title }), jsx("p", { className: "text-[13px] font-normal leading-5 text-[#4a5565] dark:text-gray-400", children: copy.description })] }) }), jsx("div", { className: "space-y-3 border-t border-[#e5e7eb] dark:border-zinc-800 px-4 py-3", children: isForbidden ? (jsxs("div", { className: "flex flex-col items-center gap-2 rounded-lg border border-gray-200 bg-gray-50 px-4 py-10 text-center", "data-testid": "user-limits-denied", children: [jsx(ShieldAlert, { className: "h-6 w-6 text-gray-400" }), jsx("p", { className: "text-sm font-medium text-gray-900", children: labels.denied.title }), jsx("p", { className: "max-w-sm text-xs text-gray-600", children: labels.denied.description })] })) : (jsxs(Fragment, { children: [jsx("div", { className: "max-w-sm", children: jsx(SearchSelect, { labels: copy.filter, selected: userFilter, onSelect: setUserFilter, onClear: () => setUserFilter(null), searchTerm: userSearch, onSearchTermChange: setUserSearch, options: userOptions, isLoading: isSearchingUsers, testId: "user-limits-filter" }) }), jsx("div", { className: "overflow-hidden rounded-md border", "data-testid": "user-limits-list", children: jsx("div", { className: "overflow-x-auto sm:mx-0", children: jsx("div", { className: "inline-block min-w-full align-middle", children: isLoading || isFetching ? (jsx("div", { className: "flex w-full items-center justify-center py-10", "data-testid": "user-limits-loading", children: jsx(Spinner, {}) })) : (jsxs(Table, { className: "min-w-full", children: [jsx(TableHeader, { children: jsxs(TableRow, { className: "bg-muted/50 border-b", children: [jsx(TableHead, { className: "p-3 text-left text-sm whitespace-nowrap text-[#646464]", children: copy.table.userColumn }), jsx(TableHead, { className: "p-3 text-left text-sm whitespace-nowrap text-[#646464]", children: copy.table.limitColumn }), jsx(TableHead, { className: "p-3 text-left text-sm whitespace-nowrap text-[#646464]", children: copy.table.spentColumn }), jsx(TableHead, { className: "p-3 text-left text-sm whitespace-nowrap text-[#646464]", children: copy.table.remainingColumn }), jsx(TableHead, { className: "p-3 text-left text-sm whitespace-nowrap text-[#646464]", children: copy.table.statusColumn }), jsx(TableHead, { className: "w-20 p-3" })] }) }), jsx(TableBody, { children: visibleCaps.length === 0 ? (jsx(TableRow, { children: jsx(TableCell, { colSpan: 6, className: "p-4 text-center text-[#646464]", "data-testid": "user-limits-empty", children: jsxs("div", { className: "space-y-2", children: [jsx("p", { children: userFilter ? copy.emptyFiltered : copy.emptyState }), userFilter && (jsx(Button, { className: "ibl-button-primary", onClick: openAddForFilteredUser, disabled: isSaving || isDeleting, "data-testid": "user-limits-set-limit-button", children: copy.setLimitButton }))] }) }) })) : (visibleCaps.map((cap) => {
106
+ var _a;
107
+ const username = (_a = cap.username) !== null && _a !== void 0 ? _a : '';
108
+ // Email-first everywhere the user is shown or
109
+ // announced; testids and mutation keys stay on
110
+ // the backend's username key.
111
+ const displayName = cap.email || username;
112
+ return (jsxs(TableRow, { onClick: () => setProfileCap(cap), className: "cursor-pointer border-b transition-colors last:border-0 hover:bg-gray-50", "data-testid": `user-limits-row-${username}`, children: [jsx(TableCell, { className: "max-w-[240px] p-3 font-medium whitespace-nowrap text-[#646464]", children: jsx(UserProfileLink, { tenantKey: tenantKey, username: username, display: displayName, testId: `user-limits-profile-link-${username}` }) }), jsxs(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: [formatUsd(cap.max_cost_usd), " /", ' ', labels.form.intervalOptions[cap.interval_type]] }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: formatUsd(cap.current_spend_usd) }), jsx(TableCell, { className: "p-3 whitespace-nowrap text-[#646464]", children: formatUsd(cap.remaining_usd) }), jsx(TableCell, { className: "p-3", onClick: (e) => e.stopPropagation(), children: jsxs("div", { className: "flex items-center gap-1.5", children: [jsx(CustomSwitch, { checked: cap.enabled, onCheckedChange: (checked) => toggleEnabled(cap, checked), disabled: isSaving || isDeleting, "aria-label": copy.statusToggleAria(displayName), "data-testid": `user-limits-status-switch-${username}` }), cap.is_exceeded && (jsx("span", { className: "rounded-full bg-red-100 px-2 py-0.5 text-[11px] font-medium text-red-700", children: labels.usage.exceededBadge })), cap.enforcement === 'alert_only' && (jsx("span", { className: "rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-medium text-amber-800", children: labels.usage.alertOnlyBadge }))] }) }), jsx(TableCell, { className: "p-3 text-right", onClick: (e) => e.stopPropagation(), children: jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsx(RowIconAction, { label: copy.editAria(displayName), icon: SlidersHorizontal, onClick: () => openEdit(cap), disabled: isSaving || isDeleting, testId: `user-limits-edit-${username}` }), jsx(RowIconAction, { label: copy.deleteAria(displayName), icon: Trash2, onClick: () => setPendingDelete(cap), disabled: isSaving || isDeleting, className: "hover:text-red-600", testId: `user-limits-delete-${username}` })] }) })] }, cap.id));
113
+ })) })] })) }) }) })] })) })] }), jsx(UserProfileDialog, { tenantKey: tenantKey, username: (_a = profileCap === null || profileCap === void 0 ? void 0 : profileCap.username) !== null && _a !== void 0 ? _a : '', isOpen: profileCap !== null, onClose: () => setProfileCap(null) }), jsx(UserCapModal, { isOpen: isModalOpen, onClose: () => setIsModalOpen(false), cap: editingCap, initialUser: editingCap ? null : userFilter, labels: labels, tenantKey: tenantKey, isSaving: isSaving, onSave: saveCap }), jsx(Dialog, { open: pendingDelete !== null, onOpenChange: () => setPendingDelete(null), children: jsxs(DialogContent, { "aria-describedby": "user-limit-delete-description", "data-testid": "user-limit-delete-modal", children: [jsx(DialogHeader, { children: jsx(DialogTitle, { className: "ibl-dialog-title", children: labels.deleteModal.title }) }), jsx("div", { className: "my-5", id: "user-limit-delete-description", children: jsxs("p", { className: "text-sm text-[#646464]", children: [jsx("span", { className: "font-bold italic", children: pendingDelete ? pendingDelete.email || pendingDelete.username : '' }), ' ', "\u2014 ", labels.deleteModal.description] }) }), jsxs(DialogFooter, { className: "gap-3", children: [jsx(Button, { variant: "outline", onClick: () => setPendingDelete(null), children: labels.deleteModal.cancel }), jsx(Button, { className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white hover:opacity-90", onClick: handleConfirmDelete, disabled: isDeleting, "data-testid": "user-limit-delete-confirm", children: isDeleting ? labels.form.removing : labels.deleteModal.confirm })] })] }) })] }));
114
+ }
115
+
116
+ export { UserLimitsSection };
117
+ //# sourceMappingURL=user-limits-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-limits-section.js","sources":["../../../../../../../src/components/spend-caps/user-limits-section.tsx"],"sourcesContent":[null],"names":["React","_jsxs","_Fragment","_jsx"],"mappings":"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"}
@@ -48,6 +48,19 @@ function isValidLimit(input) {
48
48
  const parsed = Number(input);
49
49
  return input.trim() !== '' && !Number.isNaN(parsed) && parsed > 0;
50
50
  }
51
+ /** HTTP status of an RTK Query error, when it carries one. */
52
+ function errorStatus(error) {
53
+ return error === null || error === void 0 ? void 0 : error.status;
54
+ }
55
+ /** The backend's own sentence from an error body (`detail` or `error`), else ''. */
56
+ function errorDetail(error) {
57
+ const data = error === null || error === void 0 ? void 0 : error.data;
58
+ if (typeof (data === null || data === void 0 ? void 0 : data.detail) === 'string')
59
+ return data.detail;
60
+ if (typeof (data === null || data === void 0 ? void 0 : data.error) === 'string')
61
+ return data.error;
62
+ return '';
63
+ }
51
64
  /** Percent of the limit already spent, clamped to [0, 100] for progress bars. */
52
65
  function percentUsed(currentSpend, maxCost) {
53
66
  const spent = Number(currentSpend);
@@ -57,5 +70,5 @@ function percentUsed(currentSpend, maxCost) {
57
70
  return Math.min(100, Math.max(0, Math.round((spent / limit) * 100)));
58
71
  }
59
72
 
60
- export { formatUsd, isValidLimit, parseThresholdsInput, percentUsed, thresholdsToInput };
73
+ export { errorDetail, errorStatus, formatUsd, isValidLimit, parseThresholdsInput, percentUsed, thresholdsToInput };
61
74
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../src/components/spend-caps/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;AAIG;AAEH;AACM,SAAU,SAAS,CAAC,KAAgC,EAAA;AACxD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,IAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,OAAO;IACzE,OAAO,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAChC;AAEA;AACM,SAAU,iBAAiB,CAAC,UAAuC,EAAA;AACvE,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAAE,QAAA,OAAO,EAAE;AACzC,IAAA,OAAO;AACJ,SAAA,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACnE,SAAA,GAAG,CAAC,CAAC,KAAK,KAAI;AACb,QAAA,MAAM,OAAO,GAAG,KAAK,GAAG,GAAG;QAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,IAAA,CAAC;SACA,IAAI,CAAC,IAAI,CAAC;AACf;AAEA;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAa,EAAA;AAChD,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;IAC5B,IAAI,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,SAAS,GAAa,EAAE;AAC9B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,IAAI,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAC5B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,GAAG;AAAE,YAAA,OAAO,IAAI;AACvE,QAAA,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IAC/B;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;AACM,SAAU,YAAY,CAAC,KAAa,EAAA;AACxC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;AACnE;AAEA;AACM,SAAU,WAAW,CAAC,YAAoB,EAAE,OAAe,EAAA;AAC/D,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;AAC7B,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;AACtE;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../src/components/spend-caps/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}