@datatechsolutions/ui 3.6.0 → 3.6.2

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 (131) hide show
  1. package/dist/astrlabe/graph-node.js +8 -5
  2. package/dist/astrlabe/graph-node.mjs +4 -1
  3. package/dist/astrlabe/index.js +115 -114
  4. package/dist/astrlabe/index.mjs +7 -6
  5. package/dist/astrlabe/workflow-canvas.js +7 -6
  6. package/dist/astrlabe/workflow-canvas.mjs +6 -5
  7. package/dist/{chunk-I63NFWIA.mjs → chunk-2OPBUVTQ.mjs} +3 -3
  8. package/dist/{chunk-I63NFWIA.mjs.map → chunk-2OPBUVTQ.mjs.map} +1 -1
  9. package/dist/{chunk-XTXLRQ3H.mjs → chunk-34XRH2FX.mjs} +28 -28
  10. package/dist/chunk-34XRH2FX.mjs.map +1 -0
  11. package/dist/{chunk-QHP2MR2F.js → chunk-3JZGRXSG.js} +4 -4
  12. package/dist/{chunk-QHP2MR2F.js.map → chunk-3JZGRXSG.js.map} +1 -1
  13. package/dist/{chunk-JQYDJ75Q.mjs → chunk-3VYD7QL2.mjs} +3 -3
  14. package/dist/{chunk-JQYDJ75Q.mjs.map → chunk-3VYD7QL2.mjs.map} +1 -1
  15. package/dist/{chunk-MRRFDIUQ.mjs → chunk-4JRMXHPU.mjs} +5 -4
  16. package/dist/chunk-4JRMXHPU.mjs.map +1 -0
  17. package/dist/{chunk-4OFG6POC.mjs → chunk-5LCWQKGQ.mjs} +207 -1128
  18. package/dist/chunk-5LCWQKGQ.mjs.map +1 -0
  19. package/dist/{chunk-W5YCZOXO.js → chunk-7YK4WXHO.js} +79 -78
  20. package/dist/chunk-7YK4WXHO.js.map +1 -0
  21. package/dist/{chunk-YOJIPZ72.js → chunk-BBLBSDPN.js} +9 -9
  22. package/dist/{chunk-YOJIPZ72.js.map → chunk-BBLBSDPN.js.map} +1 -1
  23. package/dist/chunk-BHOT22QL.js +998 -0
  24. package/dist/chunk-BHOT22QL.js.map +1 -0
  25. package/dist/{chunk-DYWSG42B.mjs → chunk-C4AJWDFB.mjs} +11 -10
  26. package/dist/chunk-C4AJWDFB.mjs.map +1 -0
  27. package/dist/{chunk-UOABOFKO.mjs → chunk-CBFK4W4C.mjs} +3 -3
  28. package/dist/{chunk-UOABOFKO.mjs.map → chunk-CBFK4W4C.mjs.map} +1 -1
  29. package/dist/{chunk-P5F257N3.js → chunk-CVZXZK2X.js} +35 -34
  30. package/dist/chunk-CVZXZK2X.js.map +1 -0
  31. package/dist/{chunk-IHHGT3LP.mjs → chunk-CYAAL3BY.mjs} +6 -5
  32. package/dist/chunk-CYAAL3BY.mjs.map +1 -0
  33. package/dist/{chunk-LVK7VXW7.js → chunk-DMPBNWJB.js} +37 -36
  34. package/dist/chunk-DMPBNWJB.js.map +1 -0
  35. package/dist/{chunk-ESLKQJQS.mjs → chunk-DXLATMGD.mjs} +6 -5
  36. package/dist/chunk-DXLATMGD.mjs.map +1 -0
  37. package/dist/{chunk-P4YYEM4B.js → chunk-EZQ2D47U.js} +7 -10
  38. package/dist/chunk-EZQ2D47U.js.map +1 -0
  39. package/dist/{chunk-UWSMHKOF.js → chunk-FUHNEP3Y.js} +164 -163
  40. package/dist/chunk-FUHNEP3Y.js.map +1 -0
  41. package/dist/{chunk-YTE6WCBX.js → chunk-JHN2OUWG.js} +64 -63
  42. package/dist/chunk-JHN2OUWG.js.map +1 -0
  43. package/dist/{chunk-AMYQSPQC.js → chunk-JLECJI7S.js} +18 -17
  44. package/dist/chunk-JLECJI7S.js.map +1 -0
  45. package/dist/{chunk-VPOIX2DY.js → chunk-KMNWPC64.js} +40 -39
  46. package/dist/chunk-KMNWPC64.js.map +1 -0
  47. package/dist/{chunk-VUAGVZJM.mjs → chunk-NJ6HH4QP.mjs} +6 -5
  48. package/dist/chunk-NJ6HH4QP.mjs.map +1 -0
  49. package/dist/{chunk-OZNTQROP.mjs → chunk-PLTLRL2V.mjs} +7 -10
  50. package/dist/chunk-PLTLRL2V.mjs.map +1 -0
  51. package/dist/{chunk-WEZ722BS.mjs → chunk-PMMP76MV.mjs} +7 -6
  52. package/dist/chunk-PMMP76MV.mjs.map +1 -0
  53. package/dist/{chunk-NJZIE4EH.js → chunk-QF6WL7XU.js} +6 -5
  54. package/dist/chunk-QF6WL7XU.js.map +1 -0
  55. package/dist/{chunk-QRNFTG6A.js → chunk-QGLGQXJE.js} +4 -4
  56. package/dist/{chunk-QRNFTG6A.js.map → chunk-QGLGQXJE.js.map} +1 -1
  57. package/dist/{chunk-GCYYGSHU.js → chunk-R4EKPXX3.js} +564 -1525
  58. package/dist/chunk-R4EKPXX3.js.map +1 -0
  59. package/dist/{chunk-S7AV6XEY.js → chunk-RWYG7QHP.js} +128 -138
  60. package/dist/chunk-RWYG7QHP.js.map +1 -0
  61. package/dist/{chunk-WBEZATIB.js → chunk-RZ3NDH5S.js} +13 -13
  62. package/dist/{chunk-WBEZATIB.js.map → chunk-RZ3NDH5S.js.map} +1 -1
  63. package/dist/{chunk-HGWVJ3VB.mjs → chunk-SJVKID3E.mjs} +4 -3
  64. package/dist/chunk-SJVKID3E.mjs.map +1 -0
  65. package/dist/{chunk-7LILNZMR.mjs → chunk-TJEZL72T.mjs} +4 -3
  66. package/dist/chunk-TJEZL72T.mjs.map +1 -0
  67. package/dist/{chunk-3WXMBAGN.js → chunk-UDYEUTJC.js} +50 -50
  68. package/dist/chunk-UDYEUTJC.js.map +1 -0
  69. package/dist/{chunk-UGJZ3M4Q.js → chunk-VDLMWOQM.js} +55 -54
  70. package/dist/chunk-VDLMWOQM.js.map +1 -0
  71. package/dist/{chunk-QTA5I6FC.mjs → chunk-VZIUQE7B.mjs} +54 -64
  72. package/dist/chunk-VZIUQE7B.mjs.map +1 -0
  73. package/dist/chunk-WR55H7DH.mjs +934 -0
  74. package/dist/chunk-WR55H7DH.mjs.map +1 -0
  75. package/dist/{chunk-ZYVDDSAC.mjs → chunk-YRXDETBK.mjs} +6 -6
  76. package/dist/{chunk-ZYVDDSAC.mjs.map → chunk-YRXDETBK.mjs.map} +1 -1
  77. package/dist/{chunk-VDLAZR7S.mjs → chunk-ZYRL3WER.mjs} +5 -4
  78. package/dist/chunk-ZYRL3WER.mjs.map +1 -0
  79. package/dist/index.js +826 -825
  80. package/dist/index.mjs +4 -3
  81. package/dist/platform/admin/index.js +13 -12
  82. package/dist/platform/admin/index.mjs +7 -6
  83. package/dist/platform/agents-workspace.js +10 -9
  84. package/dist/platform/agents-workspace.mjs +9 -8
  85. package/dist/platform/app-shell.js +6 -5
  86. package/dist/platform/app-shell.mjs +5 -4
  87. package/dist/platform/auth/index.js +30 -29
  88. package/dist/platform/auth/index.mjs +7 -6
  89. package/dist/platform/billing/index.js +6 -5
  90. package/dist/platform/billing/index.mjs +5 -4
  91. package/dist/platform/impersonation/index.js +6 -5
  92. package/dist/platform/impersonation/index.mjs +5 -4
  93. package/dist/platform/index.js +87 -93
  94. package/dist/platform/index.js.map +1 -1
  95. package/dist/platform/index.mjs +23 -29
  96. package/dist/platform/index.mjs.map +1 -1
  97. package/dist/platform/pages/index.js +476 -470
  98. package/dist/platform/pages/index.js.map +1 -1
  99. package/dist/platform/pages/index.mjs +326 -320
  100. package/dist/platform/pages/index.mjs.map +1 -1
  101. package/dist/platform/settings/index.js +10 -9
  102. package/dist/platform/settings/index.mjs +9 -8
  103. package/dist/platform/workflow-canvas-shell.js +8 -7
  104. package/dist/platform/workflow-canvas-shell.mjs +7 -6
  105. package/package.json +1 -1
  106. package/dist/chunk-3WXMBAGN.js.map +0 -1
  107. package/dist/chunk-4OFG6POC.mjs.map +0 -1
  108. package/dist/chunk-7LILNZMR.mjs.map +0 -1
  109. package/dist/chunk-AMYQSPQC.js.map +0 -1
  110. package/dist/chunk-DYWSG42B.mjs.map +0 -1
  111. package/dist/chunk-ESLKQJQS.mjs.map +0 -1
  112. package/dist/chunk-GCYYGSHU.js.map +0 -1
  113. package/dist/chunk-HGWVJ3VB.mjs.map +0 -1
  114. package/dist/chunk-IHHGT3LP.mjs.map +0 -1
  115. package/dist/chunk-LVK7VXW7.js.map +0 -1
  116. package/dist/chunk-MRRFDIUQ.mjs.map +0 -1
  117. package/dist/chunk-NJZIE4EH.js.map +0 -1
  118. package/dist/chunk-OZNTQROP.mjs.map +0 -1
  119. package/dist/chunk-P4YYEM4B.js.map +0 -1
  120. package/dist/chunk-P5F257N3.js.map +0 -1
  121. package/dist/chunk-QTA5I6FC.mjs.map +0 -1
  122. package/dist/chunk-S7AV6XEY.js.map +0 -1
  123. package/dist/chunk-UGJZ3M4Q.js.map +0 -1
  124. package/dist/chunk-UWSMHKOF.js.map +0 -1
  125. package/dist/chunk-VDLAZR7S.mjs.map +0 -1
  126. package/dist/chunk-VPOIX2DY.js.map +0 -1
  127. package/dist/chunk-VUAGVZJM.mjs.map +0 -1
  128. package/dist/chunk-W5YCZOXO.js.map +0 -1
  129. package/dist/chunk-WEZ722BS.mjs.map +0 -1
  130. package/dist/chunk-XTXLRQ3H.mjs.map +0 -1
  131. package/dist/chunk-YTE6WCBX.js.map +0 -1
@@ -1,20 +1,21 @@
1
1
  "use client";
2
2
  import { adaptWorkflowGraphToUi, formatDurationMs } from '../../chunk-UQXVCVAN.mjs';
3
- import { WorkflowWorkspace } from '../../chunk-XTXLRQ3H.mjs';
4
- export { RolesPageView, UsersPageView } from '../../chunk-XTXLRQ3H.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-DYWSG42B.mjs';
3
+ import { WorkflowWorkspace } from '../../chunk-34XRH2FX.mjs';
4
+ export { RolesPageView, UsersPageView } from '../../chunk-34XRH2FX.mjs';
5
+ import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-SJVKID3E.mjs';
6
+ export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-SJVKID3E.mjs';
7
+ import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-C4AJWDFB.mjs';
8
8
  import '../../chunk-JB6RNAD2.mjs';
9
9
  import '../../chunk-LEXBTVGM.mjs';
10
- import '../../chunk-QTA5I6FC.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-4OFG6POC.mjs';
12
- import '../../chunk-D2JF6C3E.mjs';
10
+ import '../../chunk-VZIUQE7B.mjs';
11
+ import { HeroSection, PageLoadingState, PageEmptyState, SearchBar, EntityCard, ManagementPageLayout, CreateActionButton, GlassModal, FormGrid, FormSelect, FormInput, FormTextarea, SectionHeader, Text, Form, FormActionsRow, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, InlineForm, CopyableId } from '../../chunk-5LCWQKGQ.mjs';
13
12
  import '../../chunk-7VJ7CMMT.mjs';
14
- import { useLink } from '../../chunk-QWG2FMUN.mjs';
15
13
  import '../../chunk-RHRJXK5R.mjs';
16
14
  import '../../chunk-3AY5HIQ6.mjs';
17
- import '../../chunk-OZNTQROP.mjs';
15
+ import '../../chunk-PLTLRL2V.mjs';
16
+ import { Badge, Button } from '../../chunk-WR55H7DH.mjs';
17
+ import '../../chunk-D2JF6C3E.mjs';
18
+ import { useLink } from '../../chunk-QWG2FMUN.mjs';
18
19
  import '../../chunk-G7JQ4OCE.mjs';
19
20
  import { useState, useMemo, useEffect } from 'react';
20
21
  import { CubeTransparentIcon, CpuChipIcon, ChatBubbleLeftEllipsisIcon, WrenchScrewdriverIcon, AdjustmentsHorizontalIcon, CircleStackIcon, RectangleStackIcon, ClockIcon, LinkIcon, KeyIcon, ArrowPathIcon, TrashIcon } from '@heroicons/react/24/outline';
@@ -32,29 +33,30 @@ function AgentsModelsPageView({ labels, models, loading }) {
32
33
  label: labels.title,
33
34
  title: labels.title,
34
35
  subtitle: labels.subtitle,
35
- gradient: "from-emerald-500 to-teal-700",
36
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
37
- SearchBar,
38
- {
39
- searchTerm,
40
- onSearchChange: setSearchTerm,
41
- placeholder: labels.searchPlaceholder ?? labels.title,
42
- noBorder: true
43
- }
44
- ) : void 0
36
+ gradient: "from-emerald-500 to-teal-700"
45
37
  }
46
38
  );
47
- 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(
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
- )) });
39
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
40
+ /* @__PURE__ */ jsx(
41
+ SearchBar,
42
+ {
43
+ searchTerm,
44
+ onSearchChange: setSearchTerm,
45
+ placeholder: labels.searchPlaceholder ?? labels.title
46
+ }
47
+ ),
48
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredModels.map((model) => /* @__PURE__ */ jsx(
49
+ EntityCard,
50
+ {
51
+ accentGradient: "from-emerald-500 to-teal-700",
52
+ 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" }) }),
53
+ title: model.name,
54
+ subtitle: `${labels.provider}: ${model.provider}`,
55
+ status: /* @__PURE__ */ jsx(Badge, { color: model.enabled ? "emerald" : "zinc", children: model.enabled ? labels.enabled : labels.disabled })
56
+ },
57
+ model.id
58
+ )) })
59
+ ] });
58
60
  return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
59
61
  }
60
62
  function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }) {
@@ -241,16 +243,7 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
241
243
  title: labels.title,
242
244
  subtitle: labels.subtitle,
243
245
  gradient: "from-sky-500 to-blue-700",
244
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
245
- SearchBar,
246
- {
247
- searchTerm,
248
- onSearchChange: setSearchTerm,
249
- placeholder: labels.searchPlaceholder ?? labels.title,
250
- noBorder: true
251
- }
252
- ) : void 0,
253
- actions: /* @__PURE__ */ jsx(
246
+ toolbar: /* @__PURE__ */ jsx(
254
247
  CreateActionButton,
255
248
  {
256
249
  mode: "desktop",
@@ -270,37 +263,47 @@ function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onA
270
263
  accent: "sky"
271
264
  }
272
265
  );
273
- 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) => {
274
- const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
275
- const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
276
- return /* @__PURE__ */ jsx(
277
- EntityCard,
266
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
267
+ /* @__PURE__ */ jsx(
268
+ SearchBar,
278
269
  {
279
- accentGradient: "from-sky-500 to-blue-700",
280
- 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" }) }),
281
- title: agentName,
282
- subtitle: `${prompt.locale} \xB7 v${prompt.version}`,
283
- status: prompt.isActive ? /* @__PURE__ */ jsx(Badge, { color: "emerald", children: labels.isActive }) : null,
284
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
285
- !prompt.isActive && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
286
- /* @__PURE__ */ jsx(
287
- Button,
288
- {
289
- type: "button",
290
- size: "sm",
291
- color: "rose",
292
- onClick: () => {
293
- if (window.confirm(labels.deleteConfirm)) onDelete(prompt);
294
- },
295
- children: labels.delete
296
- }
297
- )
298
- ] }),
299
- children: prompt.prompt && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400", children: prompt.prompt })
300
- },
301
- key
302
- );
303
- }) });
270
+ searchTerm,
271
+ onSearchChange: setSearchTerm,
272
+ placeholder: labels.searchPlaceholder ?? labels.title
273
+ }
274
+ ),
275
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredPrompts.map((prompt) => {
276
+ const agentName = agentNameById.get(prompt.agentId) ?? prompt.agentId;
277
+ const key = `${prompt.agentId}:${prompt.locale}:${prompt.version}`;
278
+ return /* @__PURE__ */ jsx(
279
+ EntityCard,
280
+ {
281
+ accentGradient: "from-sky-500 to-blue-700",
282
+ 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" }) }),
283
+ title: agentName,
284
+ subtitle: `${prompt.locale} \xB7 v${prompt.version}`,
285
+ status: prompt.isActive ? /* @__PURE__ */ jsx(Badge, { color: "emerald", children: labels.isActive }) : null,
286
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
287
+ !prompt.isActive && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onActivate(prompt), children: labels.activate }),
288
+ /* @__PURE__ */ jsx(
289
+ Button,
290
+ {
291
+ type: "button",
292
+ size: "sm",
293
+ color: "rose",
294
+ onClick: () => {
295
+ if (window.confirm(labels.deleteConfirm)) onDelete(prompt);
296
+ },
297
+ children: labels.delete
298
+ }
299
+ )
300
+ ] }),
301
+ children: prompt.prompt && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-3 text-xs text-slate-500 dark:text-slate-400", children: prompt.prompt })
302
+ },
303
+ key
304
+ );
305
+ }) })
306
+ ] });
304
307
  return /* @__PURE__ */ jsxs(Fragment, { children: [
305
308
  /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
306
309
  /* @__PURE__ */ jsx(
@@ -385,16 +388,7 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
385
388
  title: labels.title,
386
389
  subtitle: labels.subtitle,
387
390
  gradient: "from-amber-500 to-orange-700",
388
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
389
- SearchBar,
390
- {
391
- searchTerm,
392
- onSearchChange: setSearchTerm,
393
- placeholder: labels.searchPlaceholder ?? labels.title,
394
- noBorder: true
395
- }
396
- ) : void 0,
397
- actions: /* @__PURE__ */ jsx(
391
+ toolbar: /* @__PURE__ */ jsx(
398
392
  CreateActionButton,
399
393
  {
400
394
  mode: "desktop",
@@ -414,33 +408,43 @@ function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpd
414
408
  accent: "amber"
415
409
  }
416
410
  );
417
- 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(
418
- EntityCard,
419
- {
420
- accentGradient: "from-amber-500 to-orange-700",
421
- 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" }) }),
422
- title: tool.name,
423
- subtitle: toolTypeLabel(tool),
424
- status: /* @__PURE__ */ jsx(Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
425
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
426
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
427
- /* @__PURE__ */ jsx(
428
- Button,
429
- {
430
- type: "button",
431
- size: "sm",
432
- color: "rose",
433
- onClick: () => {
434
- if (window.confirm(labels.deleteConfirm)) onDelete(tool);
435
- },
436
- children: labels.delete
437
- }
438
- )
439
- ] }),
440
- children: tool.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
441
- },
442
- tool.agentToolId
443
- )) });
411
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
412
+ /* @__PURE__ */ jsx(
413
+ SearchBar,
414
+ {
415
+ searchTerm,
416
+ onSearchChange: setSearchTerm,
417
+ placeholder: labels.searchPlaceholder ?? labels.title
418
+ }
419
+ ),
420
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredTools.map((tool) => /* @__PURE__ */ jsx(
421
+ EntityCard,
422
+ {
423
+ accentGradient: "from-amber-500 to-orange-700",
424
+ 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" }) }),
425
+ title: tool.name,
426
+ subtitle: toolTypeLabel(tool),
427
+ status: /* @__PURE__ */ jsx(Badge, { color: tool.enabled ? "emerald" : "zinc", children: tool.enabled ? labels.enabled : labels.disabled }),
428
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
429
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(tool), children: labels.edit }),
430
+ /* @__PURE__ */ jsx(
431
+ Button,
432
+ {
433
+ type: "button",
434
+ size: "sm",
435
+ color: "rose",
436
+ onClick: () => {
437
+ if (window.confirm(labels.deleteConfirm)) onDelete(tool);
438
+ },
439
+ children: labels.delete
440
+ }
441
+ )
442
+ ] }),
443
+ children: tool.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: tool.description })
444
+ },
445
+ tool.agentToolId
446
+ )) })
447
+ ] });
444
448
  return /* @__PURE__ */ jsxs(Fragment, { children: [
445
449
  /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
446
450
  createOpen && /* @__PURE__ */ jsx(
@@ -940,16 +944,7 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
940
944
  title: labels.title,
941
945
  subtitle: labels.subtitle,
942
946
  gradient: "from-fuchsia-500 to-purple-700",
943
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
944
- SearchBar,
945
- {
946
- searchTerm,
947
- onSearchChange: setSearchTerm,
948
- placeholder: labels.searchPlaceholder ?? labels.title,
949
- noBorder: true
950
- }
951
- ) : void 0,
952
- actions: /* @__PURE__ */ jsx(
947
+ toolbar: /* @__PURE__ */ jsx(
953
948
  CreateActionButton,
954
949
  {
955
950
  mode: "desktop",
@@ -969,33 +964,43 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
969
964
  accent: "fuchsia"
970
965
  }
971
966
  );
972
- 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(
973
- EntityCard,
974
- {
975
- accentGradient: "from-fuchsia-500 to-purple-700",
976
- 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" }) }),
977
- title: rule.name,
978
- subtitle: `${labels.order}: ${rule.order ?? 0}`,
979
- status: /* @__PURE__ */ jsx(Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
980
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
981
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
982
- /* @__PURE__ */ jsx(
983
- Button,
984
- {
985
- type: "button",
986
- size: "sm",
987
- color: "rose",
988
- onClick: () => {
989
- if (window.confirm(labels.deleteConfirm)) onDelete(rule);
990
- },
991
- children: labels.delete
992
- }
993
- )
994
- ] }),
995
- children: rule.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: rule.description })
996
- },
997
- rule.ruleId
998
- )) });
967
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
968
+ /* @__PURE__ */ jsx(
969
+ SearchBar,
970
+ {
971
+ searchTerm,
972
+ onSearchChange: setSearchTerm,
973
+ placeholder: labels.searchPlaceholder ?? labels.title
974
+ }
975
+ ),
976
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRules.map((rule) => /* @__PURE__ */ jsx(
977
+ EntityCard,
978
+ {
979
+ accentGradient: "from-fuchsia-500 to-purple-700",
980
+ 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" }) }),
981
+ title: rule.name,
982
+ subtitle: `${labels.order}: ${rule.order ?? 0}`,
983
+ status: /* @__PURE__ */ jsx(Badge, { color: rule.enabled ? "emerald" : "zinc", children: rule.enabled ? labels.enabled : labels.disabled }),
984
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
985
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(rule), children: labels.edit }),
986
+ /* @__PURE__ */ jsx(
987
+ Button,
988
+ {
989
+ type: "button",
990
+ size: "sm",
991
+ color: "rose",
992
+ onClick: () => {
993
+ if (window.confirm(labels.deleteConfirm)) onDelete(rule);
994
+ },
995
+ children: labels.delete
996
+ }
997
+ )
998
+ ] }),
999
+ children: rule.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: rule.description })
1000
+ },
1001
+ rule.ruleId
1002
+ )) })
1003
+ ] });
999
1004
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1000
1005
  /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
1001
1006
  createOpen && /* @__PURE__ */ jsx(
@@ -1273,16 +1278,7 @@ function DatasourcesPageView({
1273
1278
  title: labels.title,
1274
1279
  subtitle: labels.subtitle,
1275
1280
  gradient: "from-amber-500 to-orange-600",
1276
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
1277
- SearchBar,
1278
- {
1279
- searchTerm,
1280
- onSearchChange: setSearchTerm,
1281
- placeholder: labels.searchPlaceholder ?? labels.title,
1282
- noBorder: true
1283
- }
1284
- ) : void 0,
1285
- actions: /* @__PURE__ */ jsx(
1281
+ toolbar: /* @__PURE__ */ jsx(
1286
1282
  CreateActionButton,
1287
1283
  {
1288
1284
  mode: "desktop",
@@ -1302,6 +1298,14 @@ function DatasourcesPageView({
1302
1298
  accent: "amber"
1303
1299
  }
1304
1300
  ),
1301
+ !isEmpty && /* @__PURE__ */ jsx(
1302
+ SearchBar,
1303
+ {
1304
+ searchTerm,
1305
+ onSearchChange: setSearchTerm,
1306
+ placeholder: labels.searchPlaceholder ?? labels.title
1307
+ }
1308
+ ),
1305
1309
  isEmpty ? /* @__PURE__ */ jsx(
1306
1310
  PageEmptyState,
1307
1311
  {
@@ -1325,7 +1329,7 @@ function DatasourcesPageView({
1325
1329
  subtitle: dialectLabel,
1326
1330
  status: /* @__PURE__ */ jsx(Badge, { color: ds.enabled ? "emerald" : "zinc", children: ds.enabled ? labels.enabled : labels.disabled }),
1327
1331
  footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs text-slate-500 dark:text-slate-400", children: [
1328
- 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" }),
1332
+ ds.readOnly && /* @__PURE__ */ jsx(Badge, { color: "blue", size: "xs", children: "Read-only" }),
1329
1333
  ds.timeoutMs && /* @__PURE__ */ jsxs("span", { children: [
1330
1334
  ds.timeoutMs / 1e3,
1331
1335
  "s timeout"
@@ -1382,30 +1386,31 @@ function AgentsIndexPageView({ labels }) {
1382
1386
  label: labels.title,
1383
1387
  title: labels.title,
1384
1388
  subtitle: labels.subtitle,
1385
- gradient: "from-violet-500 to-indigo-700",
1386
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
1387
- SearchBar,
1388
- {
1389
- searchTerm,
1390
- onSearchChange: setSearchTerm,
1391
- placeholder: labels.searchPlaceholder ?? labels.title,
1392
- noBorder: true
1393
- }
1394
- ) : void 0
1389
+ gradient: "from-violet-500 to-indigo-700"
1395
1390
  }
1396
1391
  );
1397
- const content = /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredTiles.map((tile) => {
1398
- const Icon = tile.icon;
1399
- return /* @__PURE__ */ jsx(Link, { href: tile.href, className: "block focus:outline-none", children: /* @__PURE__ */ jsx(
1400
- EntityCard,
1392
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
1393
+ !isEmpty && /* @__PURE__ */ jsx(
1394
+ SearchBar,
1401
1395
  {
1402
- accentGradient: tile.gradient,
1403
- 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" }) }),
1404
- title: tile.title,
1405
- children: /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: tile.subtitle })
1396
+ searchTerm,
1397
+ onSearchChange: setSearchTerm,
1398
+ placeholder: labels.searchPlaceholder ?? labels.title
1406
1399
  }
1407
- ) }, tile.id);
1408
- }) });
1400
+ ),
1401
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredTiles.map((tile) => {
1402
+ const Icon = tile.icon;
1403
+ return /* @__PURE__ */ jsx(Link, { href: tile.href, className: "block focus:outline-none", children: /* @__PURE__ */ jsx(
1404
+ EntityCard,
1405
+ {
1406
+ accentGradient: tile.gradient,
1407
+ 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" }) }),
1408
+ title: tile.title,
1409
+ children: /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: tile.subtitle })
1410
+ }
1411
+ ) }, tile.id);
1412
+ }) })
1413
+ ] });
1409
1414
  return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
1410
1415
  }
1411
1416
  function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }) {
@@ -1535,55 +1540,54 @@ function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onVie
1535
1540
  title: labels.title,
1536
1541
  subtitle: labels.subtitle,
1537
1542
  gradient: "from-indigo-500 to-sky-700",
1538
- toolbar: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-end", children: [
1539
- !isEmpty && /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
1540
- SearchBar,
1541
- {
1542
- searchTerm,
1543
- onSearchChange: setSearchTerm,
1544
- placeholder: labels.searchPlaceholder ?? labels.title,
1545
- noBorder: true
1546
- }
1547
- ) }),
1548
- /* @__PURE__ */ jsx("div", { className: "w-full sm:w-48", children: /* @__PURE__ */ jsx(
1549
- FormSelect,
1550
- {
1551
- name: "statusFilter",
1552
- label: labels.filterStatus,
1553
- options: statusOptions,
1554
- value: statusFilter,
1555
- onValueChange: setStatusFilter
1556
- }
1557
- ) })
1558
- ] })
1543
+ toolbar: /* @__PURE__ */ jsx("div", { className: "w-full sm:w-48", children: /* @__PURE__ */ jsx(
1544
+ FormSelect,
1545
+ {
1546
+ name: "statusFilter",
1547
+ label: labels.filterStatus,
1548
+ options: statusOptions,
1549
+ value: statusFilter,
1550
+ onValueChange: setStatusFilter
1551
+ }
1552
+ ) })
1559
1553
  }
1560
1554
  );
1561
- 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(
1562
- EntityCard,
1563
- {
1564
- accentGradient: "from-indigo-500 to-sky-700",
1565
- 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" }) }),
1566
- title: run.id.slice(0, 8),
1567
- subtitle: `${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`,
1568
- status: /* @__PURE__ */ jsx(Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1569
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1570
- onView && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1571
- onViewTimeline && labels.timeline && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1572
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1573
- run.status === "running" && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1574
- ] }),
1575
- children: [
1576
- /* @__PURE__ */ jsxs("dl", { className: "mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
1577
- /* @__PURE__ */ jsx("dt", { children: labels.duration }),
1578
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: formatDurationMs(run.totalDurationMs) }),
1579
- /* @__PURE__ */ jsx("dt", { children: labels.triggeredBy }),
1580
- /* @__PURE__ */ jsx("dd", { className: "text-right truncate", children: run.triggeredBy || "\u2014" })
1555
+ 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: [
1556
+ !isEmpty && /* @__PURE__ */ jsx(
1557
+ SearchBar,
1558
+ {
1559
+ searchTerm,
1560
+ onSearchChange: setSearchTerm,
1561
+ placeholder: labels.searchPlaceholder ?? labels.title
1562
+ }
1563
+ ),
1564
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredRuns.map((run) => /* @__PURE__ */ jsxs(
1565
+ EntityCard,
1566
+ {
1567
+ accentGradient: "from-indigo-500 to-sky-700",
1568
+ 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" }) }),
1569
+ title: run.id.slice(0, 8),
1570
+ subtitle: `${labels.startedAt}: ${new Date(run.createdAt).toLocaleString()}`,
1571
+ status: /* @__PURE__ */ jsx(Badge, { color: BADGE_COLOR[run.status] ?? "zinc", children: statusLabelFor(run.status) }),
1572
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1573
+ onView && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onView(run), children: labels.view }),
1574
+ onViewTimeline && labels.timeline && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onViewTimeline(run), children: labels.timeline }),
1575
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => onReplay(run), children: labels.replay }),
1576
+ run.status === "running" && /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", color: "rose", onClick: () => onCancel(run), children: labels.cancel })
1581
1577
  ] }),
1582
- run.error && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400", children: run.error })
1583
- ]
1584
- },
1585
- run.id
1586
- )) });
1578
+ children: [
1579
+ /* @__PURE__ */ jsxs("dl", { className: "mt-1 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
1580
+ /* @__PURE__ */ jsx("dt", { children: labels.duration }),
1581
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: formatDurationMs(run.totalDurationMs) }),
1582
+ /* @__PURE__ */ jsx("dt", { children: labels.triggeredBy }),
1583
+ /* @__PURE__ */ jsx("dd", { className: "text-right truncate", children: run.triggeredBy || "\u2014" })
1584
+ ] }),
1585
+ run.error && /* @__PURE__ */ jsx("p", { className: "mt-1 line-clamp-2 text-xs text-rose-600 dark:text-rose-400", children: run.error })
1586
+ ]
1587
+ },
1588
+ run.id
1589
+ )) })
1590
+ ] });
1587
1591
  return /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content });
1588
1592
  }
1589
1593
  function RunTimelinePageView({ labels, entries, loading, runId }) {
@@ -1707,16 +1711,7 @@ function ConnectionsPageView({
1707
1711
  title: labels.title,
1708
1712
  subtitle: labels.subtitle,
1709
1713
  gradient: "from-sky-500 to-indigo-600",
1710
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
1711
- SearchBar,
1712
- {
1713
- searchTerm,
1714
- onSearchChange: setSearchTerm,
1715
- placeholder: labels.searchPlaceholder ?? labels.title,
1716
- noBorder: true
1717
- }
1718
- ) : void 0,
1719
- actions: /* @__PURE__ */ jsx(
1714
+ toolbar: /* @__PURE__ */ jsx(
1720
1715
  CreateActionButton,
1721
1716
  {
1722
1717
  mode: "desktop",
@@ -1736,40 +1731,50 @@ function ConnectionsPageView({
1736
1731
  accent: "sky"
1737
1732
  }
1738
1733
  );
1739
- 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(
1740
- EntityCard,
1741
- {
1742
- accentGradient: "from-sky-500 to-indigo-600",
1743
- 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" }) }),
1744
- title: conn.name,
1745
- subtitle: providerLabel(conn.providerSlug),
1746
- status: /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
1747
- /* @__PURE__ */ jsx(Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1748
- conn.credentialRef ? /* @__PURE__ */ jsx(Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsx(Badge, { color: "amber", children: "No secret" })
1749
- ] }),
1750
- footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1751
- /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1752
- /* @__PURE__ */ jsx(
1753
- Button,
1754
- {
1755
- type: "button",
1756
- size: "sm",
1757
- color: "rose",
1758
- onClick: async () => {
1759
- if (window.confirm(labels.deleteConfirm)) await onDelete(conn);
1760
- },
1761
- children: labels.delete
1762
- }
1763
- )
1764
- ] }),
1765
- children: /* @__PURE__ */ jsxs("dl", { className: "mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
1766
- conn.region && /* @__PURE__ */ jsx(Row, { label: "Region", value: conn.region }),
1767
- conn.endpoint && /* @__PURE__ */ jsx(Row, { label: "Endpoint", value: conn.endpoint }),
1768
- conn.modelFilter && conn.modelFilter.length > 0 && /* @__PURE__ */ jsx(Row, { label: "Models", value: conn.modelFilter.join(", ") })
1769
- ] })
1770
- },
1771
- conn.id
1772
- )) });
1734
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1735
+ /* @__PURE__ */ jsx(
1736
+ SearchBar,
1737
+ {
1738
+ searchTerm,
1739
+ onSearchChange: setSearchTerm,
1740
+ placeholder: labels.searchPlaceholder ?? labels.title
1741
+ }
1742
+ ),
1743
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredConnections.map((conn) => /* @__PURE__ */ jsx(
1744
+ EntityCard,
1745
+ {
1746
+ accentGradient: "from-sky-500 to-indigo-600",
1747
+ 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" }) }),
1748
+ title: conn.name,
1749
+ subtitle: providerLabel(conn.providerSlug),
1750
+ status: /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
1751
+ /* @__PURE__ */ jsx(Badge, { color: conn.enabled ? "emerald" : "zinc", children: conn.enabled ? labels.enable : labels.disable }),
1752
+ conn.credentialRef ? /* @__PURE__ */ jsx(Badge, { color: "indigo", children: "Secret set" }) : /* @__PURE__ */ jsx(Badge, { color: "amber", children: "No secret" })
1753
+ ] }),
1754
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1755
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", outline: true, onClick: () => setEditing(conn), children: labels.edit }),
1756
+ /* @__PURE__ */ jsx(
1757
+ Button,
1758
+ {
1759
+ type: "button",
1760
+ size: "sm",
1761
+ color: "rose",
1762
+ onClick: async () => {
1763
+ if (window.confirm(labels.deleteConfirm)) await onDelete(conn);
1764
+ },
1765
+ children: labels.delete
1766
+ }
1767
+ )
1768
+ ] }),
1769
+ children: /* @__PURE__ */ jsxs("dl", { className: "mt-1 space-y-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
1770
+ conn.region && /* @__PURE__ */ jsx(Row, { label: "Region", value: conn.region }),
1771
+ conn.endpoint && /* @__PURE__ */ jsx(Row, { label: "Endpoint", value: conn.endpoint }),
1772
+ conn.modelFilter && conn.modelFilter.length > 0 && /* @__PURE__ */ jsx(Row, { label: "Models", value: conn.modelFilter.join(", ") })
1773
+ ] })
1774
+ },
1775
+ conn.id
1776
+ )) })
1777
+ ] });
1773
1778
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1774
1779
  /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
1775
1780
  createOpen && /* @__PURE__ */ jsx(
@@ -2040,16 +2045,7 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2040
2045
  title: labels.title,
2041
2046
  subtitle: labels.subtitle,
2042
2047
  gradient: "from-rose-500 to-orange-600",
2043
- toolbar: !isEmpty ? /* @__PURE__ */ jsx(
2044
- SearchBar,
2045
- {
2046
- searchTerm,
2047
- onSearchChange: setSearchTerm,
2048
- placeholder: labels.searchPlaceholder ?? labels.title,
2049
- noBorder: true
2050
- }
2051
- ) : void 0,
2052
- actions: /* @__PURE__ */ jsx(
2048
+ toolbar: /* @__PURE__ */ jsx(
2053
2049
  CreateActionButton,
2054
2050
  {
2055
2051
  mode: "desktop",
@@ -2069,50 +2065,60 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2069
2065
  accent: "rose"
2070
2066
  }
2071
2067
  );
2072
- 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(
2073
- EntityCard,
2074
- {
2075
- accentGradient: "from-rose-500 to-orange-700",
2076
- 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" }) }),
2077
- title: secret.name,
2078
- subtitle: secret.secretType,
2079
- status: /* @__PURE__ */ jsx(Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
2080
- footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
2081
- /* @__PURE__ */ jsx(CopyableId, { id: secret.secretId }),
2082
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
2083
- /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
2084
- /* @__PURE__ */ jsx(ArrowPathIcon, { className: "mr-1 h-3.5 w-3.5" }),
2085
- labels.rotate
2086
- ] }),
2087
- !secret.disabled && /* @__PURE__ */ jsxs(
2088
- Button,
2089
- {
2090
- type: "button",
2091
- size: "sm",
2092
- color: "rose",
2093
- onClick: () => {
2094
- if (window.confirm(labels.disableConfirm)) onDisable(secret);
2095
- },
2096
- children: [
2097
- /* @__PURE__ */ jsx(TrashIcon, { className: "mr-1 h-3.5 w-3.5" }),
2098
- labels.disable
2099
- ]
2100
- }
2101
- )
2102
- ] })
2103
- ] }),
2104
- children: [
2105
- secret.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: secret.description }),
2106
- /* @__PURE__ */ jsxs("dl", { className: "mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
2107
- /* @__PURE__ */ jsx("dt", { children: labels.createdAt }),
2108
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: new Date(secret.createdAt).toLocaleDateString() }),
2109
- /* @__PURE__ */ jsx("dt", { children: labels.expiresAt }),
2110
- /* @__PURE__ */ jsx("dd", { className: "text-right", children: secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires })
2111
- ] })
2112
- ]
2113
- },
2114
- secret.secretId
2115
- )) });
2068
+ const content = loading ? /* @__PURE__ */ jsx(PageLoadingState, {}) : isEmpty ? /* @__PURE__ */ jsx(PageEmptyState, { title: labels.empty, message: labels.subtitle, iconName: "folder-open" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2069
+ /* @__PURE__ */ jsx(
2070
+ SearchBar,
2071
+ {
2072
+ searchTerm,
2073
+ onSearchChange: setSearchTerm,
2074
+ placeholder: labels.searchPlaceholder ?? labels.title
2075
+ }
2076
+ ),
2077
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredCredentials.map((secret) => /* @__PURE__ */ jsxs(
2078
+ EntityCard,
2079
+ {
2080
+ accentGradient: "from-rose-500 to-orange-700",
2081
+ 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" }) }),
2082
+ title: secret.name,
2083
+ subtitle: secret.secretType,
2084
+ status: /* @__PURE__ */ jsx(Badge, { color: secret.disabled ? "zinc" : "emerald", children: secret.disabled ? labels.disable : "Active" }),
2085
+ footer: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
2086
+ /* @__PURE__ */ jsx(CopyableId, { id: secret.secretId }),
2087
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
2088
+ /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", outline: true, onClick: () => setRotateFor(secret), children: [
2089
+ /* @__PURE__ */ jsx(ArrowPathIcon, { className: "mr-1 h-3.5 w-3.5" }),
2090
+ labels.rotate
2091
+ ] }),
2092
+ !secret.disabled && /* @__PURE__ */ jsxs(
2093
+ Button,
2094
+ {
2095
+ type: "button",
2096
+ size: "sm",
2097
+ color: "rose",
2098
+ onClick: () => {
2099
+ if (window.confirm(labels.disableConfirm)) onDisable(secret);
2100
+ },
2101
+ children: [
2102
+ /* @__PURE__ */ jsx(TrashIcon, { className: "mr-1 h-3.5 w-3.5" }),
2103
+ labels.disable
2104
+ ]
2105
+ }
2106
+ )
2107
+ ] })
2108
+ ] }),
2109
+ children: [
2110
+ secret.description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-slate-500 dark:text-slate-400", children: secret.description }),
2111
+ /* @__PURE__ */ jsxs("dl", { className: "mt-2 grid grid-cols-2 gap-1 text-xs text-slate-500 dark:text-slate-400", children: [
2112
+ /* @__PURE__ */ jsx("dt", { children: labels.createdAt }),
2113
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: new Date(secret.createdAt).toLocaleDateString() }),
2114
+ /* @__PURE__ */ jsx("dt", { children: labels.expiresAt }),
2115
+ /* @__PURE__ */ jsx("dd", { className: "text-right", children: secret.expiresAt ? new Date(secret.expiresAt).toLocaleDateString() : labels.neverExpires })
2116
+ ] })
2117
+ ]
2118
+ },
2119
+ secret.secretId
2120
+ )) })
2121
+ ] });
2116
2122
  return /* @__PURE__ */ jsxs(Fragment, { children: [
2117
2123
  /* @__PURE__ */ jsx(ManagementPageLayout, { hero, content, mobileAction }),
2118
2124
  /* @__PURE__ */ jsx(