@datatechsolutions/ui 3.5.1 → 3.6.1

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 (103) hide show
  1. package/dist/astrlabe/index.js +107 -107
  2. package/dist/astrlabe/index.mjs +3 -3
  3. package/dist/astrlabe/workflow-canvas.js +3 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  5. package/dist/{chunk-R3Q5RXXO.mjs → chunk-3Z66NXEB.mjs} +3 -3
  6. package/dist/{chunk-R3Q5RXXO.mjs.map → chunk-3Z66NXEB.mjs.map} +1 -1
  7. package/dist/{chunk-CDYNTHUE.mjs → chunk-4JDJRGAB.mjs} +9 -8
  8. package/dist/chunk-4JDJRGAB.mjs.map +1 -0
  9. package/dist/{chunk-EUXHJMGC.mjs → chunk-4OFG6POC.mjs} +9 -5
  10. package/dist/chunk-4OFG6POC.mjs.map +1 -0
  11. package/dist/{chunk-37ZLBCJF.mjs → chunk-5ZAZ2C7A.mjs} +6 -6
  12. package/dist/{chunk-37ZLBCJF.mjs.map → chunk-5ZAZ2C7A.mjs.map} +1 -1
  13. package/dist/{chunk-PYQLY2RH.js → chunk-6ZMTJSQF.js} +161 -161
  14. package/dist/chunk-6ZMTJSQF.js.map +1 -0
  15. package/dist/{chunk-PI2C3S6A.mjs → chunk-7LILNZMR.mjs} +3 -3
  16. package/dist/{chunk-PI2C3S6A.mjs.map → chunk-7LILNZMR.mjs.map} +1 -1
  17. package/dist/{chunk-EI6FIA45.js → chunk-AMYQSPQC.js} +16 -16
  18. package/dist/{chunk-EI6FIA45.js.map → chunk-AMYQSPQC.js.map} +1 -1
  19. package/dist/{chunk-VMIAMBCP.js → chunk-DRORQGN2.js} +39 -39
  20. package/dist/{chunk-VMIAMBCP.js.map → chunk-DRORQGN2.js.map} +1 -1
  21. package/dist/{chunk-CP5QXRXA.mjs → chunk-ESLKQJQS.mjs} +4 -4
  22. package/dist/{chunk-CP5QXRXA.mjs.map → chunk-ESLKQJQS.mjs.map} +1 -1
  23. package/dist/{chunk-K4M4B6ME.js → chunk-GCYYGSHU.js} +9 -5
  24. package/dist/chunk-GCYYGSHU.js.map +1 -0
  25. package/dist/{chunk-2TBNOQ7M.mjs → chunk-HGWVJ3VB.mjs} +21 -21
  26. package/dist/{chunk-2TBNOQ7M.mjs.map → chunk-HGWVJ3VB.mjs.map} +1 -1
  27. package/dist/{chunk-7OZ4MVEF.mjs → chunk-IHHGT3LP.mjs} +19 -19
  28. package/dist/{chunk-7OZ4MVEF.mjs.map → chunk-IHHGT3LP.mjs.map} +1 -1
  29. package/dist/{chunk-YV2SE5LS.mjs → chunk-JQYDJ75Q.mjs} +3 -3
  30. package/dist/{chunk-YV2SE5LS.mjs.map → chunk-JQYDJ75Q.mjs.map} +1 -1
  31. package/dist/{chunk-WKCR4KVQ.mjs → chunk-KDFBN2L2.mjs} +34 -31
  32. package/dist/chunk-KDFBN2L2.mjs.map +1 -0
  33. package/dist/{chunk-MT4FJRMD.js → chunk-KEWRLEYV.js} +4 -4
  34. package/dist/{chunk-MT4FJRMD.js.map → chunk-KEWRLEYV.js.map} +1 -1
  35. package/dist/{chunk-SFFSXC5E.js → chunk-LVK7VXW7.js} +54 -54
  36. package/dist/{chunk-SFFSXC5E.js.map → chunk-LVK7VXW7.js.map} +1 -1
  37. package/dist/{chunk-EGXB3WXT.mjs → chunk-MQNXKBFP.mjs} +8 -8
  38. package/dist/chunk-MQNXKBFP.mjs.map +1 -0
  39. package/dist/{chunk-ULEPJXTN.mjs → chunk-MRRFDIUQ.mjs} +3 -3
  40. package/dist/{chunk-ULEPJXTN.mjs.map → chunk-MRRFDIUQ.mjs.map} +1 -1
  41. package/dist/{chunk-U6XA2OYE.js → chunk-MUOTTGCX.js} +33 -32
  42. package/dist/chunk-MUOTTGCX.js.map +1 -0
  43. package/dist/{chunk-RQBTLFYH.js → chunk-NJZIE4EH.js} +5 -5
  44. package/dist/{chunk-RQBTLFYH.js.map → chunk-NJZIE4EH.js.map} +1 -1
  45. package/dist/{chunk-HVDDCBQ2.js → chunk-P5F257N3.js} +33 -33
  46. package/dist/{chunk-HVDDCBQ2.js.map → chunk-P5F257N3.js.map} +1 -1
  47. package/dist/{chunk-2UMDWOUY.js → chunk-QRNFTG6A.js} +4 -4
  48. package/dist/{chunk-2UMDWOUY.js.map → chunk-QRNFTG6A.js.map} +1 -1
  49. package/dist/{chunk-F5UDX6JA.js → chunk-SQZGQOKU.js} +104 -101
  50. package/dist/chunk-SQZGQOKU.js.map +1 -0
  51. package/dist/{chunk-KIBOX3UQ.js → chunk-UGJZ3M4Q.js} +53 -53
  52. package/dist/{chunk-KIBOX3UQ.js.map → chunk-UGJZ3M4Q.js.map} +1 -1
  53. package/dist/{chunk-PFHXKWFT.mjs → chunk-UOABOFKO.mjs} +3 -3
  54. package/dist/{chunk-PFHXKWFT.mjs.map → chunk-UOABOFKO.mjs.map} +1 -1
  55. package/dist/{chunk-L5O4NWQO.mjs → chunk-VDLAZR7S.mjs} +3 -3
  56. package/dist/{chunk-L5O4NWQO.mjs.map → chunk-VDLAZR7S.mjs.map} +1 -1
  57. package/dist/{chunk-CJGNEALB.mjs → chunk-VUAGVZJM.mjs} +4 -4
  58. package/dist/{chunk-CJGNEALB.mjs.map → chunk-VUAGVZJM.mjs.map} +1 -1
  59. package/dist/{chunk-QIUVK4BI.js → chunk-W5YCZOXO.js} +77 -77
  60. package/dist/{chunk-QIUVK4BI.js.map → chunk-W5YCZOXO.js.map} +1 -1
  61. package/dist/{chunk-OWJIKCR2.js → chunk-WBEZATIB.js} +13 -13
  62. package/dist/{chunk-OWJIKCR2.js.map → chunk-WBEZATIB.js.map} +1 -1
  63. package/dist/{chunk-KRPSTXN5.js → chunk-YOJIPZ72.js} +9 -9
  64. package/dist/{chunk-KRPSTXN5.js.map → chunk-YOJIPZ72.js.map} +1 -1
  65. package/dist/{chunk-5AVO5DJO.js → chunk-YTE6WCBX.js} +76 -76
  66. package/dist/{chunk-5AVO5DJO.js.map → chunk-YTE6WCBX.js.map} +1 -1
  67. package/dist/{chunk-R6O57NTJ.mjs → chunk-ZYVDDSAC.mjs} +6 -6
  68. package/dist/{chunk-R6O57NTJ.mjs.map → chunk-ZYVDDSAC.mjs.map} +1 -1
  69. package/dist/index.js +704 -704
  70. package/dist/index.mjs +1 -1
  71. package/dist/platform/admin/index.js +10 -10
  72. package/dist/platform/admin/index.mjs +4 -4
  73. package/dist/platform/agents-workspace.js +6 -6
  74. package/dist/platform/agents-workspace.mjs +5 -5
  75. package/dist/platform/app-shell.js +3 -3
  76. package/dist/platform/app-shell.mjs +2 -2
  77. package/dist/platform/auth/index.js +27 -27
  78. package/dist/platform/auth/index.mjs +4 -4
  79. package/dist/platform/billing/index.js +3 -3
  80. package/dist/platform/billing/index.mjs +2 -2
  81. package/dist/platform/impersonation/index.js +3 -3
  82. package/dist/platform/impersonation/index.mjs +2 -2
  83. package/dist/platform/index.js +82 -82
  84. package/dist/platform/index.mjs +18 -18
  85. package/dist/platform/pages/index.d.mts +1 -0
  86. package/dist/platform/pages/index.d.ts +1 -0
  87. package/dist/platform/pages/index.js +477 -448
  88. package/dist/platform/pages/index.js.map +1 -1
  89. package/dist/platform/pages/index.mjs +335 -306
  90. package/dist/platform/pages/index.mjs.map +1 -1
  91. package/dist/platform/settings/index.js +7 -7
  92. package/dist/platform/settings/index.mjs +6 -6
  93. package/dist/platform/workflow-canvas-shell.js +4 -4
  94. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  95. package/package.json +1 -1
  96. package/dist/chunk-CDYNTHUE.mjs.map +0 -1
  97. package/dist/chunk-EGXB3WXT.mjs.map +0 -1
  98. package/dist/chunk-EUXHJMGC.mjs.map +0 -1
  99. package/dist/chunk-F5UDX6JA.js.map +0 -1
  100. package/dist/chunk-K4M4B6ME.js.map +0 -1
  101. package/dist/chunk-PYQLY2RH.js.map +0 -1
  102. package/dist/chunk-U6XA2OYE.js.map +0 -1
  103. package/dist/chunk-WKCR4KVQ.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import { adaptWorkflowGraphToUi, formatDurationMs } from '../../chunk-UQXVCVAN.mjs';
3
- import { WorkflowWorkspace } from '../../chunk-CDYNTHUE.mjs';
4
- export { RolesPageView, UsersPageView } from '../../chunk-CDYNTHUE.mjs';
5
- import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-2TBNOQ7M.mjs';
6
- export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-2TBNOQ7M.mjs';
7
- import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-EGXB3WXT.mjs';
3
+ import { WorkflowWorkspace } from '../../chunk-4JDJRGAB.mjs';
4
+ export { RolesPageView, UsersPageView } from '../../chunk-4JDJRGAB.mjs';
5
+ import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-HGWVJ3VB.mjs';
6
+ export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-HGWVJ3VB.mjs';
7
+ import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-MQNXKBFP.mjs';
8
8
  import '../../chunk-JB6RNAD2.mjs';
9
9
  import '../../chunk-LEXBTVGM.mjs';
10
- import '../../chunk-WKCR4KVQ.mjs';
11
- import { HeroSection, SearchBar, PageLoadingState, PageEmptyState, EntityCard, Badge, ManagementPageLayout, CreateActionButton, Button, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId } from '../../chunk-EUXHJMGC.mjs';
10
+ import '../../chunk-KDFBN2L2.mjs';
11
+ import { HeroSection, PageLoadingState, PageEmptyState, SearchBar, EntityCard, Badge, ManagementPageLayout, CreateActionButton, Button, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId } from '../../chunk-4OFG6POC.mjs';
12
12
  import '../../chunk-D2JF6C3E.mjs';
13
13
  import '../../chunk-7VJ7CMMT.mjs';
14
14
  import { useLink } from '../../chunk-QWG2FMUN.mjs';
@@ -35,31 +35,37 @@ function AgentsModelsPageView({ labels, models, loading }) {
35
35
  gradient: "from-emerald-500 to-teal-700"
36
36
  }
37
37
  );
38
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
39
- SearchBar,
40
- {
41
- searchTerm,
42
- onSearchChange: setSearchTerm,
43
- placeholder: labels.searchPlaceholder ?? labels.title
44
- }
45
- ) : void 0;
46
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredModels.map((model) => /* @__PURE__ */ jsx(
47
- EntityCard,
48
- {
49
- accentGradient: "from-emerald-500 to-teal-700",
50
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400", children: /* @__PURE__ */ jsx(CubeTransparentIcon, { className: "h-6 w-6" }) }),
51
- title: model.name,
52
- subtitle: `${labels.provider}: ${model.provider}`,
53
- status: /* @__PURE__ */ jsx(Badge, { color: model.enabled ? "emerald" : "zinc", children: model.enabled ? labels.enabled : labels.disabled })
54
- },
55
- model.id
56
- )) });
57
- return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content });
38
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
39
+ /* @__PURE__ */ jsx(
40
+ SearchBar,
41
+ {
42
+ searchTerm,
43
+ onSearchChange: setSearchTerm,
44
+ placeholder: labels.searchPlaceholder ?? labels.title
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredModels.map((model) => /* @__PURE__ */ jsx(
48
+ EntityCard,
49
+ {
50
+ accentGradient: "from-emerald-500 to-teal-700",
51
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400", children: /* @__PURE__ */ jsx(CubeTransparentIcon, { className: "h-6 w-6" }) }),
52
+ title: model.name,
53
+ subtitle: `${labels.provider}: ${model.provider}`,
54
+ status: /* @__PURE__ */ jsx(Badge, { color: model.enabled ? "emerald" : "zinc", children: model.enabled ? labels.enabled : labels.disabled })
55
+ },
56
+ model.id
57
+ )) })
58
+ ] });
59
+ return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
58
60
  }
59
61
  function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }) {
60
62
  const [editing, setEditing] = useState(null);
61
63
  const [createOpen, setCreateOpen] = useState(false);
64
+ const [searchTerm, setSearchTerm] = useState("");
62
65
  const modelOptions = models.map((model) => ({ value: model.id, label: `${model.name} (${model.provider})` }));
66
+ const allAgents = agents;
67
+ const filteredAgents = searchTerm.trim() ? allAgents.filter((agent) => String(agent.name ?? "").toLowerCase().includes(searchTerm.trim().toLowerCase())) : allAgents;
68
+ const isEmpty = allAgents.length === 0;
63
69
  const hero = /* @__PURE__ */ jsx(
64
70
  HeroSection,
65
71
  {
@@ -68,7 +74,16 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
68
74
  title: labels.title,
69
75
  subtitle: labels.subtitle,
70
76
  gradient: "from-violet-500 to-indigo-700",
71
- toolbar: /* @__PURE__ */ jsx(
77
+ toolbar: !isEmpty ? /* @__PURE__ */ jsx(
78
+ SearchBar,
79
+ {
80
+ searchTerm,
81
+ onSearchChange: setSearchTerm,
82
+ placeholder: labels.searchPlaceholder ?? labels.title,
83
+ noBorder: true
84
+ }
85
+ ) : void 0,
86
+ actions: /* @__PURE__ */ jsx(
72
87
  CreateActionButton,
73
88
  {
74
89
  mode: "desktop",
@@ -88,7 +103,7 @@ function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpd
88
103
  accent: "violet"
89
104
  }
90
105
  );
91
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : agents.length === 0 ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: agents.map((agent) => {
106
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredAgents.map((agent) => {
92
107
  const modelRecord = models.find((model) => model.id === String(agent.modelId ?? ""));
93
108
  return /* @__PURE__ */ jsx(
94
109
  EntityCard,
@@ -211,6 +226,14 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
211
226
  }
212
227
  return map;
213
228
  }, [agents]);
229
+ const allPrompts = prompts;
230
+ const filteredPrompts = searchTerm.trim() ? allPrompts.filter((prompt) => {
231
+ const term = searchTerm.trim().toLowerCase();
232
+ const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
233
+ const promptText = prompt.prompt ?? "";
234
+ return agentName.toLowerCase().includes(term) || promptText.toLowerCase().includes(term);
235
+ }) : allPrompts;
236
+ const isEmpty = allPrompts.length === 0;
214
237
  const hero = /* @__PURE__ */ jsx(
215
238
  HeroSection,
216
239
  {
@@ -239,55 +262,49 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
239
262
  accent: "sky"
240
263
  }
241
264
  );
242
- const allPrompts = prompts;
243
- const filteredPrompts = searchTerm.trim() ? allPrompts.filter((prompt) => {
244
- const term = searchTerm.trim().toLowerCase();
245
- const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
246
- const promptText = prompt.prompt ?? "";
247
- return agentName.toLowerCase().includes(term) || promptText.toLowerCase().includes(term);
248
- }) : allPrompts;
249
- const isEmpty = allPrompts.length === 0;
250
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
251
- SearchBar,
252
- {
253
- searchTerm,
254
- onSearchChange: setSearchTerm,
255
- placeholder: labels.searchPlaceholder ?? labels.title
256
- }
257
- ) : void 0;
258
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPrompts.map((prompt) => {
259
- const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
260
- const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
261
- return /* @__PURE__ */ jsx(
262
- EntityCard,
265
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
266
+ /* @__PURE__ */ jsx(
267
+ SearchBar,
263
268
  {
264
- accentGradient: "from-sky-500 to-blue-700",
265
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsx(ChatBubbleLeftEllipsisIcon, { className: "h-6 w-6" }) }),
266
- title: agentName,
267
- subtitle: `${prompt.locale} \xB7 v${prompt.version}`,
268
- status: prompt.isActive ? /* @__PURE__ */ jsx(Badge, { color: "emerald", children: labels.isActive }) : null,
269
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
270
- !prompt.isActive && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
271
- /* @__PURE__ */ jsx(
272
- Button,
273
- {
274
- type: "button",
275
- size: "sm",
276
- color: "rose",
277
- onClick: () => {
278
- if (window.confirm(labels.deleteConfirm)) onDelete(prompt);
279
- },
280
- children: labels.delete
281
- }
282
- )
283
- ] }),
284
- children: prompt.prompt && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400", children: prompt.prompt })
285
- },
286
- key
287
- );
288
- }) });
269
+ searchTerm,
270
+ onSearchChange: setSearchTerm,
271
+ placeholder: labels.searchPlaceholder ?? labels.title
272
+ }
273
+ ),
274
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPrompts.map((prompt) => {
275
+ const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
276
+ const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
277
+ return /* @__PURE__ */ jsx(
278
+ EntityCard,
279
+ {
280
+ accentGradient: "from-sky-500 to-blue-700",
281
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsx(ChatBubbleLeftEllipsisIcon, { className: "h-6 w-6" }) }),
282
+ title: agentName,
283
+ subtitle: `${prompt.locale} \xB7 v${prompt.version}`,
284
+ status: prompt.isActive ? /* @__PURE__ */ jsx(Badge, { color: "emerald", children: labels.isActive }) : null,
285
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
286
+ !prompt.isActive && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
287
+ /* @__PURE__ */ jsx(
288
+ Button,
289
+ {
290
+ type: "button",
291
+ size: "sm",
292
+ color: "rose",
293
+ onClick: () => {
294
+ if (window.confirm(labels.deleteConfirm)) onDelete(prompt);
295
+ },
296
+ children: labels.delete
297
+ }
298
+ )
299
+ ] }),
300
+ children: prompt.prompt && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400", children: prompt.prompt })
301
+ },
302
+ key
303
+ );
304
+ }) })
305
+ ] });
289
306
  return /* @__PURE__ */ jsxs(Fragment, { children: [
290
- /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content, mobileAction }),
307
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
291
308
  /* @__PURE__ */ jsx(
292
309
  GlassModal,
293
310
  {
@@ -362,14 +379,6 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
362
379
  const allTools = tools;
363
380
  const filteredTools = searchTerm.trim() ? allTools.filter((tool) => tool.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allTools;
364
381
  const isEmpty = allTools.length === 0;
365
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
366
- SearchBar,
367
- {
368
- searchTerm,
369
- onSearchChange: setSearchTerm,
370
- placeholder: labels.searchPlaceholder ?? labels.title
371
- }
372
- ) : void 0;
373
382
  const hero = /* @__PURE__ */ jsx(
374
383
  HeroSection,
375
384
  {
@@ -398,35 +407,45 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
398
407
  accent: "amber"
399
408
  }
400
409
  );
401
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredTools.map((tool) => /* @__PURE__ */ jsx(
402
- EntityCard,
403
- {
404
- accentGradient: "from-amber-500 to-orange-700",
405
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400", children: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-6 w-6" }) }),
406
- title: tool.name,
407
- subtitle: toolTypeLabel(tool),
408
- status: /* @__PURE__ */ jsx(Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
409
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
410
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
411
- /* @__PURE__ */ jsx(
412
- Button,
413
- {
414
- type: "button",
415
- size: "sm",
416
- color: "rose",
417
- onClick: () => {
418
- if (window.confirm(labels.deleteConfirm)) onDelete(tool);
419
- },
420
- children: labels.delete
421
- }
422
- )
423
- ] }),
424
- children: tool.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
425
- },
426
- tool.agentToolId
427
- )) });
410
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
411
+ /* @__PURE__ */ jsx(
412
+ SearchBar,
413
+ {
414
+ searchTerm,
415
+ onSearchChange: setSearchTerm,
416
+ placeholder: labels.searchPlaceholder ?? labels.title
417
+ }
418
+ ),
419
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredTools.map((tool) => /* @__PURE__ */ jsx(
420
+ EntityCard,
421
+ {
422
+ accentGradient: "from-amber-500 to-orange-700",
423
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400", children: /* @__PURE__ */ jsx(WrenchScrewdriverIcon, { className: "h-6 w-6" }) }),
424
+ title: tool.name,
425
+ subtitle: toolTypeLabel(tool),
426
+ status: /* @__PURE__ */ jsx(Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
427
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
428
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
429
+ /* @__PURE__ */ jsx(
430
+ Button,
431
+ {
432
+ type: "button",
433
+ size: "sm",
434
+ color: "rose",
435
+ onClick: () => {
436
+ if (window.confirm(labels.deleteConfirm)) onDelete(tool);
437
+ },
438
+ children: labels.delete
439
+ }
440
+ )
441
+ ] }),
442
+ children: tool.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
443
+ },
444
+ tool.agentToolId
445
+ )) })
446
+ ] });
428
447
  return /* @__PURE__ */ jsxs(Fragment, { children: [
429
- /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content, mobileAction }),
448
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
430
449
  createOpen && /* @__PURE__ */ jsx(
431
450
  ToolEditor,
432
451
  {
@@ -611,14 +630,14 @@ function ParametersEditor({
611
630
  onValueChange: (description) => update(index, { description })
612
631
  }
613
632
  ),
614
- /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 pb-2 text-xs text-gray-700 dark:text-gray-300", children: [
633
+ /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 pb-2 text-xs text-slate-700 dark:text-slate-300", children: [
615
634
  /* @__PURE__ */ jsx(
616
635
  "input",
617
636
  {
618
637
  type: "checkbox",
619
638
  checked: param.required,
620
639
  onChange: (event) => update(index, { required: event.target.checked }),
621
- className: "h-4 w-4 rounded border-gray-300"
640
+ className: "h-4 w-4 rounded border-slate-300 text-indigo-600 focus:ring-2 focus:ring-indigo-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]"
622
641
  }
623
642
  ),
624
643
  "Required"
@@ -916,14 +935,6 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
916
935
  const allRules = rules;
917
936
  const filteredRules = searchTerm.trim() ? allRules.filter((rule) => (rule.name ?? "").toLowerCase().includes(searchTerm.trim().toLowerCase())) : allRules;
918
937
  const isEmpty = allRules.length === 0;
919
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
920
- SearchBar,
921
- {
922
- searchTerm,
923
- onSearchChange: setSearchTerm,
924
- placeholder: labels.searchPlaceholder ?? labels.title
925
- }
926
- ) : void 0;
927
938
  const hero = /* @__PURE__ */ jsx(
928
939
  HeroSection,
929
940
  {
@@ -952,35 +963,45 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
952
963
  accent: "fuchsia"
953
964
  }
954
965
  );
955
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRules.map((rule) => /* @__PURE__ */ jsx(
956
- EntityCard,
957
- {
958
- accentGradient: "from-fuchsia-500 to-purple-700",
959
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400", children: /* @__PURE__ */ jsx(AdjustmentsHorizontalIcon, { className: "h-6 w-6" }) }),
960
- title: rule.name,
961
- subtitle: `${labels.order}: ${rule.order ?? 0}`,
962
- status: /* @__PURE__ */ jsx(Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
963
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
964
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
965
- /* @__PURE__ */ jsx(
966
- Button,
967
- {
968
- type: "button",
969
- size: "sm",
970
- color: "rose",
971
- onClick: () => {
972
- if (window.confirm(labels.deleteConfirm)) onDelete(rule);
973
- },
974
- children: labels.delete
975
- }
976
- )
977
- ] }),
978
- children: rule.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: rule.description })
979
- },
980
- rule.ruleId
981
- )) });
966
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
967
+ /* @__PURE__ */ jsx(
968
+ SearchBar,
969
+ {
970
+ searchTerm,
971
+ onSearchChange: setSearchTerm,
972
+ placeholder: labels.searchPlaceholder ?? labels.title
973
+ }
974
+ ),
975
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRules.map((rule) => /* @__PURE__ */ jsx(
976
+ EntityCard,
977
+ {
978
+ accentGradient: "from-fuchsia-500 to-purple-700",
979
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-fuchsia-500/10 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400", children: /* @__PURE__ */ jsx(AdjustmentsHorizontalIcon, { className: "h-6 w-6" }) }),
980
+ title: rule.name,
981
+ subtitle: `${labels.order}: ${rule.order ?? 0}`,
982
+ status: /* @__PURE__ */ jsx(Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
983
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
984
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
985
+ /* @__PURE__ */ jsx(
986
+ Button,
987
+ {
988
+ type: "button",
989
+ size: "sm",
990
+ color: "rose",
991
+ onClick: () => {
992
+ if (window.confirm(labels.deleteConfirm)) onDelete(rule);
993
+ },
994
+ children: labels.delete
995
+ }
996
+ )
997
+ ] }),
998
+ children: rule.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: rule.description })
999
+ },
1000
+ rule.ruleId
1001
+ )) })
1002
+ ] });
982
1003
  return /* @__PURE__ */ jsxs(Fragment, { children: [
983
- /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content, mobileAction }),
1004
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
984
1005
  createOpen && /* @__PURE__ */ jsx(
985
1006
  RuleEditor,
986
1007
  {
@@ -1297,7 +1318,7 @@ function DatasourcesPageView({
1297
1318
  const gradient = getDialectGradient(ds.dialect);
1298
1319
  const dialectLabel = getDialectLabel(ds.dialect);
1299
1320
  const logoSrc = getDialectLogoSrc(ds.dialect);
1300
- const iconElement = logoSrc ? /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-white shadow-sm ring-1 ring-black/5 dark:bg-white/10 dark:ring-white/10", children: /* @__PURE__ */ jsx("img", { src: logoSrc, alt: dialectLabel, className: "h-7 w-7 object-contain" }) }) : /* @__PURE__ */ jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`, children: /* @__PURE__ */ jsx(Icon, { className: "h-6 w-6 text-white" }) });
1321
+ const iconElement = logoSrc ? /* @__PURE__ */ jsx("div", { className: "liquid-surface flex h-11 w-11 items-center justify-center rounded-lg", children: /* @__PURE__ */ jsx("img", { src: logoSrc, alt: dialectLabel, className: "h-7 w-7 object-contain" }) }) : /* @__PURE__ */ jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${gradient} shadow-lg`, children: /* @__PURE__ */ jsx(Icon, { className: "h-6 w-6 text-white" }) });
1301
1322
  return /* @__PURE__ */ jsx(
1302
1323
  EntityCard,
1303
1324
  {
@@ -1306,20 +1327,20 @@ function DatasourcesPageView({
1306
1327
  title: ds.name ?? ds.id,
1307
1328
  subtitle: dialectLabel,
1308
1329
  status: /* @__PURE__ */ jsx(Badge, { color: ds.enabled ? "emerald" : "zinc", children: ds.enabled ? labels.enabled : labels.disabled }),
1309
- footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-gray-400 dark:text-gray-500", children: [
1310
- ds.readOnly && /* @__PURE__ */ jsx("span", { className: "rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-semibold text-blue-700 dark:bg-blue-900/30 dark:text-blue-300", children: "Read-only" }),
1330
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-slate-500 dark:text-slate-400", children: [
1331
+ ds.readOnly && /* @__PURE__ */ jsx(Badge, { color: "blue", size: "xs", children: "Read-only" }),
1311
1332
  ds.timeoutMs && /* @__PURE__ */ jsxs("span", { children: [
1312
1333
  ds.timeoutMs / 1e3,
1313
1334
  "s timeout"
1314
1335
  ] })
1315
1336
  ] }),
1316
- children: /* @__PURE__ */ jsxs("div", { className: "mt-2 text-xs text-gray-500 dark:text-gray-400", children: [
1337
+ children: /* @__PURE__ */ jsxs("div", { className: "mt-2 text-xs text-slate-500 dark:text-slate-400", children: [
1317
1338
  /* @__PURE__ */ jsxs("div", { children: [
1318
1339
  labels.dialect,
1319
1340
  ": ",
1320
1341
  dialectLabel
1321
1342
  ] }),
1322
- ds.slug && /* @__PURE__ */ jsxs("div", { className: "truncate text-gray-400", children: [
1343
+ ds.slug && /* @__PURE__ */ jsxs("div", { className: "truncate text-slate-400 dark:text-slate-500", children: [
1323
1344
  "/",
1324
1345
  ds.slug
1325
1346
  ] })
@@ -1342,7 +1363,7 @@ function DatasourcesPageView({
1342
1363
  function DashboardPageView({ labels, appLogo }) {
1343
1364
  const hero = /* @__PURE__ */ jsxs("div", { className: "w-full text-center", children: [
1344
1365
  /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-6", children: appLogo }),
1345
- /* @__PURE__ */ jsx("p", { className: "mt-3 text-base text-gray-500 dark:text-gray-400", children: labels.subtitle })
1366
+ /* @__PURE__ */ jsx("p", { className: "mt-3 text-base text-slate-600 dark:text-slate-300", children: labels.subtitle })
1346
1367
  ] });
1347
1368
  return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content: null });
1348
1369
  }
@@ -1367,27 +1388,29 @@ function AgentsIndexPageView({ labels }) {
1367
1388
  gradient: "from-violet-500 to-indigo-700"
1368
1389
  }
1369
1390
  );
1370
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
1371
- SearchBar,
1372
- {
1373
- searchTerm,
1374
- onSearchChange: setSearchTerm,
1375
- placeholder: labels.searchPlaceholder ?? labels.title
1376
- }
1377
- ) : void 0;
1378
- const content = /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredTiles.map((tile) => {
1379
- const Icon = tile.icon;
1380
- return /* @__PURE__ */ jsx(Link, { href: tile.href, className: "block focus:outline-none", children: /* @__PURE__ */ jsx(
1381
- EntityCard,
1391
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
1392
+ !isEmpty && /* @__PURE__ */ jsx(
1393
+ SearchBar,
1382
1394
  {
1383
- accentGradient: tile.gradient,
1384
- icon: /* @__PURE__ */ jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`, children: /* @__PURE__ */ jsx(Icon, { className: "h-6 w-6 text-white" }) }),
1385
- title: tile.title,
1386
- children: /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: tile.subtitle })
1395
+ searchTerm,
1396
+ onSearchChange: setSearchTerm,
1397
+ placeholder: labels.searchPlaceholder ?? labels.title
1387
1398
  }
1388
- ) }, tile.id);
1389
- }) });
1390
- return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content });
1399
+ ),
1400
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredTiles.map((tile) => {
1401
+ const Icon = tile.icon;
1402
+ return /* @__PURE__ */ jsx(Link, { href: tile.href, className: "block focus:outline-none", children: /* @__PURE__ */ jsx(
1403
+ EntityCard,
1404
+ {
1405
+ accentGradient: tile.gradient,
1406
+ icon: /* @__PURE__ */ jsx("div", { className: `flex h-11 w-11 items-center justify-center rounded-lg bg-gradient-to-br ${tile.gradient} shadow-lg`, children: /* @__PURE__ */ jsx(Icon, { className: "h-6 w-6 text-white" }) }),
1407
+ title: tile.title,
1408
+ children: /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: tile.subtitle })
1409
+ }
1410
+ ) }, tile.id);
1411
+ }) })
1412
+ ] });
1413
+ return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
1391
1414
  }
1392
1415
  function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }) {
1393
1416
  const selectedWorkflow = workflows[0] ?? null;
@@ -1516,7 +1539,7 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1516
1539
  title: labels.title,
1517
1540
  subtitle: labels.subtitle,
1518
1541
  gradient: "from-indigo-500 to-sky-700",
1519
- toolbar: /* @__PURE__ */ jsx("div", { className: "w-48", children: /* @__PURE__ */ jsx(
1542
+ toolbar: /* @__PURE__ */ jsx("div", { className: "w-full sm:w-48", children: /* @__PURE__ */ jsx(
1520
1543
  FormSelect,
1521
1544
  {
1522
1545
  name: "statusFilter",
@@ -1528,41 +1551,43 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1528
1551
  ) })
1529
1552
  }
1530
1553
  );
1531
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
1532
- SearchBar,
1533
- {
1534
- searchTerm,
1535
- onSearchChange: setSearchTerm,
1536
- placeholder: labels.searchPlaceholder ?? labels.title
1537
- }
1538
- ) : void 0;
1539
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : filteredRuns.length === 0 ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRuns.map((run) => /* @__PURE__ */ jsxs(
1540
- EntityCard,
1541
- {
1542
- accentGradient: "from-indigo-500 to-sky-700",
1543
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400", children: /* @__PURE__ */ jsx(ClockIcon, { className: "h-6 w-6" }) }),
1544
- title: run.id.slice(0, 8),
1545
- subtitle: `${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`,
1546
- status: /* @__PURE__ */ jsx(Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1547
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1548
- onView && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1549
- onViewTimeline && labels.timeline && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1550
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1551
- run.status === "running" && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1552
- ] }),
1553
- children: [
1554
- /* @__PURE__ */ jsxs("dl", { className: "mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
1555
- /* @__PURE__ */ jsx("dt", { children: labels.duration }),
1556
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: formatDurationMs(run.totalDurationMs) }),
1557
- /* @__PURE__ */ jsx("dt", { children: labels.triggeredBy }),
1558
- /* @__PURE__ */ jsx("dd", { className: "text-right truncate", children: run.triggeredBy || "\u2014" })
1554
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : filteredRuns.length === 0 ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1555
+ !isEmpty && /* @__PURE__ */ jsx(
1556
+ SearchBar,
1557
+ {
1558
+ searchTerm,
1559
+ onSearchChange: setSearchTerm,
1560
+ placeholder: labels.searchPlaceholder ?? labels.title
1561
+ }
1562
+ ),
1563
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRuns.map((run) => /* @__PURE__ */ jsxs(
1564
+ EntityCard,
1565
+ {
1566
+ accentGradient: "from-indigo-500 to-sky-700",
1567
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-indigo-500/10 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400", children: /* @__PURE__ */ jsx(ClockIcon, { className: "h-6 w-6" }) }),
1568
+ title: run.id.slice(0, 8),
1569
+ subtitle: `${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`,
1570
+ status: /* @__PURE__ */ jsx(Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1571
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1572
+ onView && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1573
+ onViewTimeline && labels.timeline && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1574
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1575
+ run.status === "running" && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1559
1576
  ] }),
1560
- run.error && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400", children: run.error })
1561
- ]
1562
- },
1563
- run.id
1564
- )) });
1565
- return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content });
1577
+ children: [
1578
+ /* @__PURE__ */ jsxs("dl", { className: "mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
1579
+ /* @__PURE__ */ jsx("dt", { children: labels.duration }),
1580
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: formatDurationMs(run.totalDurationMs) }),
1581
+ /* @__PURE__ */ jsx("dt", { children: labels.triggeredBy }),
1582
+ /* @__PURE__ */ jsx("dd", { className: "text-right truncate", children: run.triggeredBy || "\u2014" })
1583
+ ] }),
1584
+ run.error && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400", children: run.error })
1585
+ ]
1586
+ },
1587
+ run.id
1588
+ )) })
1589
+ ] });
1590
+ return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
1566
1591
  }
1567
1592
  function RunTimelinePageView({ labels, entries, loading, runId }) {
1568
1593
  const hero = /* @__PURE__ */ jsx(
@@ -1677,14 +1702,6 @@ function ConnectionsPageView({
1677
1702
  const allConnections = connections;
1678
1703
  const filteredConnections = searchTerm.trim() ? allConnections.filter((conn) => conn.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allConnections;
1679
1704
  const isEmpty = allConnections.length === 0;
1680
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
1681
- SearchBar,
1682
- {
1683
- searchTerm,
1684
- onSearchChange: setSearchTerm,
1685
- placeholder: labels.searchPlaceholder ?? labels.title
1686
- }
1687
- ) : void 0;
1688
1705
  const hero = /* @__PURE__ */ jsx(
1689
1706
  HeroSection,
1690
1707
  {
@@ -1713,42 +1730,52 @@ function ConnectionsPageView({
1713
1730
  accent: "sky"
1714
1731
  }
1715
1732
  );
1716
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredConnections.map((conn) => /* @__PURE__ */ jsx(
1717
- EntityCard,
1718
- {
1719
- accentGradient: "from-sky-500 to-indigo-600",
1720
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsx(LinkIcon, { className: "h-6 w-6" }) }),
1721
- title: conn.name,
1722
- subtitle: providerLabel(conn.providerSlug),
1723
- status: /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
1724
- /* @__PURE__ */ jsx(Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1725
- conn.credentialRef ? /* @__PURE__ */ jsx(Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsx(Badge, { color: "amber", children: "No secret" })
1726
- ] }),
1727
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1728
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1729
- /* @__PURE__ */ jsx(
1730
- Button,
1731
- {
1732
- type: "button",
1733
- size: "sm",
1734
- color: "rose",
1735
- onClick: async () => {
1736
- if (window.confirm(labels.deleteConfirm)) await onDelete(conn);
1737
- },
1738
- children: labels.delete
1739
- }
1740
- )
1741
- ] }),
1742
- children: /* @__PURE__ */ jsxs("dl", { className: "mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
1743
- conn.region && /* @__PURE__ */ jsx(Row, { label: "Region", value: conn.region }),
1744
- conn.endpoint && /* @__PURE__ */ jsx(Row, { label: "Endpoint", value: conn.endpoint }),
1745
- conn.modelFilter && conn.modelFilter.length > 0 && /* @__PURE__ */ jsx(Row, { label: "Models", value: conn.modelFilter.join(", ") })
1746
- ] })
1747
- },
1748
- conn.id
1749
- )) });
1733
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1734
+ /* @__PURE__ */ jsx(
1735
+ SearchBar,
1736
+ {
1737
+ searchTerm,
1738
+ onSearchChange: setSearchTerm,
1739
+ placeholder: labels.searchPlaceholder ?? labels.title
1740
+ }
1741
+ ),
1742
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredConnections.map((conn) => /* @__PURE__ */ jsx(
1743
+ EntityCard,
1744
+ {
1745
+ accentGradient: "from-sky-500 to-indigo-600",
1746
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-sky-500/10 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400", children: /* @__PURE__ */ jsx(LinkIcon, { className: "h-6 w-6" }) }),
1747
+ title: conn.name,
1748
+ subtitle: providerLabel(conn.providerSlug),
1749
+ status: /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
1750
+ /* @__PURE__ */ jsx(Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1751
+ conn.credentialRef ? /* @__PURE__ */ jsx(Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsx(Badge, { color: "amber", children: "No secret" })
1752
+ ] }),
1753
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1754
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1755
+ /* @__PURE__ */ jsx(
1756
+ Button,
1757
+ {
1758
+ type: "button",
1759
+ size: "sm",
1760
+ color: "rose",
1761
+ onClick: async () => {
1762
+ if (window.confirm(labels.deleteConfirm)) await onDelete(conn);
1763
+ },
1764
+ children: labels.delete
1765
+ }
1766
+ )
1767
+ ] }),
1768
+ children: /* @__PURE__ */ jsxs("dl", { className: "mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
1769
+ conn.region && /* @__PURE__ */ jsx(Row, { label: "Region", value: conn.region }),
1770
+ conn.endpoint && /* @__PURE__ */ jsx(Row, { label: "Endpoint", value: conn.endpoint }),
1771
+ conn.modelFilter && conn.modelFilter.length > 0 && /* @__PURE__ */ jsx(Row, { label: "Models", value: conn.modelFilter.join(", ") })
1772
+ ] })
1773
+ },
1774
+ conn.id
1775
+ )) })
1776
+ ] });
1750
1777
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1751
- /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content, mobileAction }),
1778
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
1752
1779
  createOpen && /* @__PURE__ */ jsx(
1753
1780
  ConnectionEditor,
1754
1781
  {
@@ -2003,14 +2030,6 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2003
2030
  const allCredentials = credentials;
2004
2031
  const filteredCredentials = searchTerm.trim() ? allCredentials.filter((secret) => secret.name.toLowerCase().includes(searchTerm.trim().toLowerCase())) : allCredentials;
2005
2032
  const isEmpty = allCredentials.length === 0;
2006
- const summary = !isEmpty ? /* @__PURE__ */ jsx(
2007
- SearchBar,
2008
- {
2009
- searchTerm,
2010
- onSearchChange: setSearchTerm,
2011
- placeholder: labels.searchPlaceholder ?? labels.title
2012
- }
2013
- ) : void 0;
2014
2033
  const typeOptions = [
2015
2034
  { value: "generic", label: labels.typeGeneric },
2016
2035
  { value: "api_key", label: labels.typeApiKey },
@@ -2045,52 +2064,62 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2045
2064
  accent: "rose"
2046
2065
  }
2047
2066
  );
2048
- const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredCredentials.map((secret) => /* @__PURE__ */ jsxs(
2049
- EntityCard,
2050
- {
2051
- accentGradient: "from-rose-500 to-orange-700",
2052
- icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400", children: /* @__PURE__ */ jsx(KeyIcon, { className: "h-6 w-6" }) }),
2053
- title: secret.name,
2054
- subtitle: secret.secretType,
2055
- status: /* @__PURE__ */ jsx(Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
2056
- footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
2057
- /* @__PURE__ */ jsx(CopyableId, { id: secret.secretId }),
2058
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
2059
- /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
2060
- /* @__PURE__ */ jsx(ArrowPathIcon, { className: "mr-1 h-3.5 w-3.5" }),
2061
- labels.rotate
2062
- ] }),
2063
- !secret.disabled && /* @__PURE__ */ jsxs(
2064
- Button,
2065
- {
2066
- type: "button",
2067
- size: "sm",
2068
- color: "rose",
2069
- onClick: () => {
2070
- if (window.confirm(labels.disableConfirm)) onDisable(secret);
2071
- },
2072
- children: [
2073
- /* @__PURE__ */ jsx(TrashIcon, { className: "mr-1 h-3.5 w-3.5" }),
2074
- labels.disable
2075
- ]
2076
- }
2077
- )
2078
- ] })
2079
- ] }),
2080
- children: [
2081
- secret.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: secret.description }),
2082
- /* @__PURE__ */ jsxs("dl", { className: "mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
2083
- /* @__PURE__ */ jsx("dt", { children: labels.createdAt }),
2084
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: new Date(secret.createdAt).toLocaleDateString() }),
2085
- /* @__PURE__ */ jsx("dt", { children: labels.expiresAt }),
2086
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires })
2087
- ] })
2088
- ]
2089
- },
2090
- secret.secretId
2091
- )) });
2067
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2068
+ /* @__PURE__ */ jsx(
2069
+ SearchBar,
2070
+ {
2071
+ searchTerm,
2072
+ onSearchChange: setSearchTerm,
2073
+ placeholder: labels.searchPlaceholder ?? labels.title
2074
+ }
2075
+ ),
2076
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredCredentials.map((secret) => /* @__PURE__ */ jsxs(
2077
+ EntityCard,
2078
+ {
2079
+ accentGradient: "from-rose-500 to-orange-700",
2080
+ icon: /* @__PURE__ */ jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-rose-500/10 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400", children: /* @__PURE__ */ jsx(KeyIcon, { className: "h-6 w-6" }) }),
2081
+ title: secret.name,
2082
+ subtitle: secret.secretType,
2083
+ status: /* @__PURE__ */ jsx(Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
2084
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
2085
+ /* @__PURE__ */ jsx(CopyableId, { id: secret.secretId }),
2086
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
2087
+ /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
2088
+ /* @__PURE__ */ jsx(ArrowPathIcon, { className: "mr-1 h-3.5 w-3.5" }),
2089
+ labels.rotate
2090
+ ] }),
2091
+ !secret.disabled && /* @__PURE__ */ jsxs(
2092
+ Button,
2093
+ {
2094
+ type: "button",
2095
+ size: "sm",
2096
+ color: "rose",
2097
+ onClick: () => {
2098
+ if (window.confirm(labels.disableConfirm)) onDisable(secret);
2099
+ },
2100
+ children: [
2101
+ /* @__PURE__ */ jsx(TrashIcon, { className: "mr-1 h-3.5 w-3.5" }),
2102
+ labels.disable
2103
+ ]
2104
+ }
2105
+ )
2106
+ ] })
2107
+ ] }),
2108
+ children: [
2109
+ secret.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: secret.description }),
2110
+ /* @__PURE__ */ jsxs("dl", { className: "mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
2111
+ /* @__PURE__ */ jsx("dt", { children: labels.createdAt }),
2112
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: new Date(secret.createdAt).toLocaleDateString() }),
2113
+ /* @__PURE__ */ jsx("dt", { children: labels.expiresAt }),
2114
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires })
2115
+ ] })
2116
+ ]
2117
+ },
2118
+ secret.secretId
2119
+ )) })
2120
+ ] });
2092
2121
  return /* @__PURE__ */ jsxs(Fragment, { children: [
2093
- /* @__PURE__ */ jsx(ManagementPageLayout, { hero, summary, content, mobileAction }),
2122
+ /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
2094
2123
  /* @__PURE__ */ jsx(
2095
2124
  GlassModal,
2096
2125
  {