@datatechsolutions/ui 3.2.1 → 3.3.0

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 (53) hide show
  1. package/dist/astrlabe/contracts.d.mts +31 -3
  2. package/dist/astrlabe/contracts.d.ts +31 -3
  3. package/dist/astrlabe/index.js +115 -115
  4. package/dist/astrlabe/index.mjs +4 -4
  5. package/dist/astrlabe/utils.js +9 -9
  6. package/dist/astrlabe/utils.mjs +2 -2
  7. package/dist/astrlabe/workflow-canvas.js +3 -3
  8. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  9. package/dist/{chunk-QYA53LUF.mjs → chunk-2WXRRQM3.mjs} +21 -4
  10. package/dist/chunk-2WXRRQM3.mjs.map +1 -0
  11. package/dist/{chunk-C3H4FM4A.js → chunk-72SWXOD5.js} +15 -2
  12. package/dist/chunk-72SWXOD5.js.map +1 -0
  13. package/dist/{chunk-H2D2CRTD.mjs → chunk-BR2GAZKG.mjs} +5 -5
  14. package/dist/{chunk-H2D2CRTD.mjs.map → chunk-BR2GAZKG.mjs.map} +1 -1
  15. package/dist/{chunk-NJS2YC3J.js → chunk-DJDZIRM6.js} +12 -2
  16. package/dist/chunk-DJDZIRM6.js.map +1 -0
  17. package/dist/{chunk-5W7L7BT7.mjs → chunk-G7JQ4OCE.mjs} +15 -2
  18. package/dist/chunk-G7JQ4OCE.mjs.map +1 -0
  19. package/dist/{chunk-YIB2YAM5.mjs → chunk-GIQXB3BG.mjs} +3 -3
  20. package/dist/{chunk-YIB2YAM5.mjs.map → chunk-GIQXB3BG.mjs.map} +1 -1
  21. package/dist/{chunk-RL35XATZ.js → chunk-IJAKZHXX.js} +82 -65
  22. package/dist/chunk-IJAKZHXX.js.map +1 -0
  23. package/dist/{chunk-U7XM3N7F.mjs → chunk-LEXBTVGM.mjs} +12 -2
  24. package/dist/chunk-LEXBTVGM.mjs.map +1 -0
  25. package/dist/{chunk-SU3YPWFW.js → chunk-MWPTSBAI.js} +4 -4
  26. package/dist/{chunk-SU3YPWFW.js.map → chunk-MWPTSBAI.js.map} +1 -1
  27. package/dist/{chunk-EFOXN3LC.js → chunk-NJFRJ6YD.js} +279 -19
  28. package/dist/chunk-NJFRJ6YD.js.map +1 -0
  29. package/dist/{chunk-YV72JM4B.mjs → chunk-O6M3KDGT.mjs} +3 -3
  30. package/dist/{chunk-YV72JM4B.mjs.map → chunk-O6M3KDGT.mjs.map} +1 -1
  31. package/dist/{chunk-RGI74SQH.js → chunk-OCELRSLO.js} +4 -4
  32. package/dist/{chunk-RGI74SQH.js.map → chunk-OCELRSLO.js.map} +1 -1
  33. package/dist/{chunk-IRT4T3CU.mjs → chunk-PCYL4MII.mjs} +274 -14
  34. package/dist/chunk-PCYL4MII.mjs.map +1 -0
  35. package/dist/{chunk-Y6AEE56Q.js → chunk-ZL6C2ZAF.js} +29 -29
  36. package/dist/{chunk-Y6AEE56Q.js.map → chunk-ZL6C2ZAF.js.map} +1 -1
  37. package/dist/platform/agents-workspace.js +6 -6
  38. package/dist/platform/agents-workspace.mjs +5 -5
  39. package/dist/platform/index.js +23 -23
  40. package/dist/platform/index.mjs +9 -9
  41. package/dist/platform/pages/index.js +12 -12
  42. package/dist/platform/pages/index.mjs +6 -6
  43. package/dist/platform/workflow-canvas-shell.js +4 -4
  44. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  45. package/package.json +1 -1
  46. package/dist/chunk-5W7L7BT7.mjs.map +0 -1
  47. package/dist/chunk-C3H4FM4A.js.map +0 -1
  48. package/dist/chunk-EFOXN3LC.js.map +0 -1
  49. package/dist/chunk-IRT4T3CU.mjs.map +0 -1
  50. package/dist/chunk-NJS2YC3J.js.map +0 -1
  51. package/dist/chunk-QYA53LUF.mjs.map +0 -1
  52. package/dist/chunk-RL35XATZ.js.map +0 -1
  53. package/dist/chunk-U7XM3N7F.mjs.map +0 -1
@@ -1,26 +1,26 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkRGI74SQH_js = require('../chunk-RGI74SQH.js');
4
+ var chunkOCELRSLO_js = require('../chunk-OCELRSLO.js');
5
5
  var chunkKR2X2WHJ_js = require('../chunk-KR2X2WHJ.js');
6
6
  var chunkTVMLV675_js = require('../chunk-TVMLV675.js');
7
- var chunkZM5MVWIT_js = require('../chunk-ZM5MVWIT.js');
8
7
  var chunkP4RVGMZL_js = require('../chunk-P4RVGMZL.js');
8
+ var chunkZM5MVWIT_js = require('../chunk-ZM5MVWIT.js');
9
+ var chunkMWPTSBAI_js = require('../chunk-MWPTSBAI.js');
9
10
  var chunkW5OEBO6E_js = require('../chunk-W5OEBO6E.js');
10
11
  var chunkRXZNACMI_js = require('../chunk-RXZNACMI.js');
11
12
  var chunkAOUUZ52N_js = require('../chunk-AOUUZ52N.js');
12
13
  var chunkJSNRCYSO_js = require('../chunk-JSNRCYSO.js');
13
14
  var chunkHDCUWUNH_js = require('../chunk-HDCUWUNH.js');
14
- var chunkSU3YPWFW_js = require('../chunk-SU3YPWFW.js');
15
- var chunkY6AEE56Q_js = require('../chunk-Y6AEE56Q.js');
15
+ var chunkZL6C2ZAF_js = require('../chunk-ZL6C2ZAF.js');
16
16
  require('../chunk-TIJJHW2Z.js');
17
17
  var chunk3JJWPOK6_js = require('../chunk-3JJWPOK6.js');
18
18
  var chunkHZ4LOVHM_js = require('../chunk-HZ4LOVHM.js');
19
19
  var chunk6PBTB5ZX_js = require('../chunk-6PBTB5ZX.js');
20
- require('../chunk-RL35XATZ.js');
20
+ require('../chunk-IJAKZHXX.js');
21
21
  require('../chunk-55H6WZQP.js');
22
- require('../chunk-NJS2YC3J.js');
23
- require('../chunk-EFOXN3LC.js');
22
+ require('../chunk-DJDZIRM6.js');
23
+ require('../chunk-NJFRJ6YD.js');
24
24
  var chunkI2NZGVBG_js = require('../chunk-I2NZGVBG.js');
25
25
  require('../chunk-UZ3CMNUJ.js');
26
26
  var chunkYXN2K77G_js = require('../chunk-YXN2K77G.js');
@@ -28,7 +28,7 @@ var chunkS7KHTUHA_js = require('../chunk-S7KHTUHA.js');
28
28
  var chunkF54Q2YJY_js = require('../chunk-F54Q2YJY.js');
29
29
  require('../chunk-FAGDZEKM.js');
30
30
  require('../chunk-P4YYEM4B.js');
31
- require('../chunk-C3H4FM4A.js');
31
+ require('../chunk-72SWXOD5.js');
32
32
  var jsxRuntime = require('react/jsx-runtime');
33
33
  var react = require('react');
34
34
  var client = require('@datatechsolutions/windsock/client');
@@ -229,7 +229,7 @@ function UsersSettingsSection({ normalizeRole }) {
229
229
  void reload();
230
230
  }, [currentOrganizationId]);
231
231
  return /* @__PURE__ */ jsxRuntime.jsx(
232
- chunkSU3YPWFW_js.UsersPageView,
232
+ chunkMWPTSBAI_js.UsersPageView,
233
233
  {
234
234
  labels: {
235
235
  title: t("title"),
@@ -272,7 +272,7 @@ function RolesSettingsSection({ roleDefinitions, roleOptions, normalizeRole }) {
272
272
  chunk6PBTB5ZX_js.listUsers({ organizationId: currentOrganizationId }).then((result) => setUsers(result.items.map((row) => mapAdminUser(row, normalizeRole)))).catch((error) => notifyError(error.message));
273
273
  }, [currentOrganizationId, notifyError, normalizeRole]);
274
274
  return /* @__PURE__ */ jsxRuntime.jsx(
275
- chunkSU3YPWFW_js.RolesPageView,
275
+ chunkMWPTSBAI_js.RolesPageView,
276
276
  {
277
277
  roleDefinitions,
278
278
  roleOptions,
@@ -5263,7 +5263,7 @@ function KoriAssistantDemo({ locale, hideHeader } = {}) {
5263
5263
 
5264
5264
  Object.defineProperty(exports, "WorkflowCanvasShell", {
5265
5265
  enumerable: true,
5266
- get: function () { return chunkRGI74SQH_js.WorkflowCanvasShell; }
5266
+ get: function () { return chunkOCELRSLO_js.WorkflowCanvasShell; }
5267
5267
  });
5268
5268
  Object.defineProperty(exports, "AdminOrganizationForm", {
5269
5269
  enumerable: true,
@@ -5329,13 +5329,17 @@ Object.defineProperty(exports, "VerifyEmail", {
5329
5329
  enumerable: true,
5330
5330
  get: function () { return chunkTVMLV675_js.VerifyEmail; }
5331
5331
  });
5332
+ Object.defineProperty(exports, "UpgradePrompt", {
5333
+ enumerable: true,
5334
+ get: function () { return chunkP4RVGMZL_js.UpgradePrompt; }
5335
+ });
5332
5336
  Object.defineProperty(exports, "ImpersonationBanner", {
5333
5337
  enumerable: true,
5334
5338
  get: function () { return chunkZM5MVWIT_js.ImpersonationBanner; }
5335
5339
  });
5336
- Object.defineProperty(exports, "UpgradePrompt", {
5340
+ Object.defineProperty(exports, "WorkflowWorkspace", {
5337
5341
  enumerable: true,
5338
- get: function () { return chunkP4RVGMZL_js.UpgradePrompt; }
5342
+ get: function () { return chunkMWPTSBAI_js.WorkflowWorkspace; }
5339
5343
  });
5340
5344
  Object.defineProperty(exports, "PlatformSettings", {
5341
5345
  enumerable: true,
@@ -5397,33 +5401,29 @@ Object.defineProperty(exports, "BillingPanel", {
5397
5401
  enumerable: true,
5398
5402
  get: function () { return chunkHDCUWUNH_js.BillingPanel; }
5399
5403
  });
5400
- Object.defineProperty(exports, "WorkflowWorkspace", {
5401
- enumerable: true,
5402
- get: function () { return chunkSU3YPWFW_js.WorkflowWorkspace; }
5403
- });
5404
5404
  Object.defineProperty(exports, "AgentsWorkspace", {
5405
5405
  enumerable: true,
5406
- get: function () { return chunkY6AEE56Q_js.AgentsWorkspace; }
5406
+ get: function () { return chunkZL6C2ZAF_js.AgentsWorkspace; }
5407
5407
  });
5408
5408
  Object.defineProperty(exports, "applyWorkflowExecutionEventToStore", {
5409
5409
  enumerable: true,
5410
- get: function () { return chunkY6AEE56Q_js.applyWorkflowExecutionEventToStore; }
5410
+ get: function () { return chunkZL6C2ZAF_js.applyWorkflowExecutionEventToStore; }
5411
5411
  });
5412
5412
  Object.defineProperty(exports, "resetWorkflowRunPresentation", {
5413
5413
  enumerable: true,
5414
- get: function () { return chunkY6AEE56Q_js.resetWorkflowRunPresentation; }
5414
+ get: function () { return chunkZL6C2ZAF_js.resetWorkflowRunPresentation; }
5415
5415
  });
5416
5416
  Object.defineProperty(exports, "useRunEvents", {
5417
5417
  enumerable: true,
5418
- get: function () { return chunkY6AEE56Q_js.useRunEvents; }
5418
+ get: function () { return chunkZL6C2ZAF_js.useRunEvents; }
5419
5419
  });
5420
5420
  Object.defineProperty(exports, "useWorkflowExecution", {
5421
5421
  enumerable: true,
5422
- get: function () { return chunkY6AEE56Q_js.useWorkflowExecution; }
5422
+ get: function () { return chunkZL6C2ZAF_js.useWorkflowExecution; }
5423
5423
  });
5424
5424
  Object.defineProperty(exports, "useWorkflowRunPresentation", {
5425
5425
  enumerable: true,
5426
- get: function () { return chunkY6AEE56Q_js.useWorkflowRunPresentation; }
5426
+ get: function () { return chunkZL6C2ZAF_js.useWorkflowRunPresentation; }
5427
5427
  });
5428
5428
  Object.defineProperty(exports, "PlatformAppShell", {
5429
5429
  enumerable: true,
@@ -1,27 +1,27 @@
1
1
  "use client";
2
- export { WorkflowCanvasShell } from '../chunk-YIB2YAM5.mjs';
2
+ export { WorkflowCanvasShell } from '../chunk-GIQXB3BG.mjs';
3
3
  export { AdminOrganizationForm, AdminOrganizationList, AdminPermissionList, AdminUserForm, AdminUserList } from '../chunk-B67DP7MI.mjs';
4
4
  export { ConsentScreen, ForgotPassword, MfaChallenge, PasswordlessSignIn, ResetPassword, SignIn, SignUp, SsoConnectorList, SsoEmailForm, UserButton, VerifyEmail } from '../chunk-MVBIAXVN.mjs';
5
- export { ImpersonationBanner } from '../chunk-OL73LBX5.mjs';
6
5
  export { UpgradePrompt } from '../chunk-DJ33CSGJ.mjs';
6
+ export { ImpersonationBanner } from '../chunk-OL73LBX5.mjs';
7
+ import { UsersPageView, RolesPageView } from '../chunk-O6M3KDGT.mjs';
8
+ export { WorkflowWorkspace } from '../chunk-O6M3KDGT.mjs';
7
9
  export { PlatformSettings } from '../chunk-UDDZTTLO.mjs';
8
10
  export { AdminOrganizationDetail } from '../chunk-IRPS5UCS.mjs';
9
11
  export { LinkedAccountsTabContent, MfaManage, MfaSetup, ProfileTabContent, SecurityTabContent, SessionsTabContent, UserProfile } from '../chunk-LEKZUS6N.mjs';
10
12
  export { AuthLayout, BackupCodeGrid, OtpInput, PasswordStrengthMeter, SocialLoginButtons } from '../chunk-5GDKCFM5.mjs';
11
13
  export { BillingPanel } from '../chunk-R4TQWXNG.mjs';
12
- import { UsersPageView, RolesPageView } from '../chunk-YV72JM4B.mjs';
13
- export { WorkflowWorkspace } from '../chunk-YV72JM4B.mjs';
14
- export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation } from '../chunk-H2D2CRTD.mjs';
14
+ export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation } from '../chunk-BR2GAZKG.mjs';
15
15
  import '../chunk-5RM6NGZ6.mjs';
16
16
  import { usePlatformState } from '../chunk-3ZUMJTDT.mjs';
17
17
  export { PlatformAppShell, PlatformStateProvider, usePlatformState } from '../chunk-3ZUMJTDT.mjs';
18
18
  export { createPlatformRbac } from '../chunk-ZJPNP2YW.mjs';
19
19
  import { createUser, listUsers, addOrganizationMember } from '../chunk-UHHPBREK.mjs';
20
20
  export { addOrganizationDomain, addOrganizationMember, createOrganization, createOrganizationInvitation, createPermission, createSecret, createUser, deleteOrganization, deletePermission, deleteUser, disableSecret, getSecret, getUserPermissions, listOrganizationDomains, listOrganizationInvitations, listOrganizationMembers, listOrganizations, listPermissions, listSecrets, listUsers, removeOrganizationMember, resetUserPassword, rotateSecret, setUserPermissions, setWindsockAdminClient, updateOrganization, updatePermission, updateUser, verifyOrganizationDomain } from '../chunk-UHHPBREK.mjs';
21
- import '../chunk-QYA53LUF.mjs';
21
+ import '../chunk-2WXRRQM3.mjs';
22
22
  import '../chunk-JB6RNAD2.mjs';
23
- import '../chunk-U7XM3N7F.mjs';
24
- import '../chunk-IRT4T3CU.mjs';
23
+ import '../chunk-LEXBTVGM.mjs';
24
+ import '../chunk-PCYL4MII.mjs';
25
25
  import { Select, Button, filterByPermission, AppNavigation, GlassModal, IconButton, useNotifications, Textarea, DepartmentAssistantDemo, koriAssistantTheme, logisticsWorkflow, marketingWorkflow, manufacturingWorkflow, supportWorkflow, lgpdWorkflow, payrollWorkflow, inventoryWorkflow, financialWorkflow, salesWorkflow, customerAnalyticsWorkflow } from '../chunk-JN6IL6OH.mjs';
26
26
  import '../chunk-D2JF6C3E.mjs';
27
27
  import { useTranslations, useLocale } from '../chunk-7VJ7CMMT.mjs';
@@ -29,7 +29,7 @@ import { usePathname, useRouter } from '../chunk-QWG2FMUN.mjs';
29
29
  import { listModelProviderConnections, listWorkflowTemplates, createWorkflowFromTemplate, aiGenerateWorkflow, createWorkflow, saveWorkflowDraft } from '../chunk-ZV5EZXXO.mjs';
30
30
  import '../chunk-SYNVNTLJ.mjs';
31
31
  import '../chunk-OZNTQROP.mjs';
32
- import '../chunk-5W7L7BT7.mjs';
32
+ import '../chunk-G7JQ4OCE.mjs';
33
33
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
34
34
  import { useState, useMemo, useCallback, useEffect } from 'react';
35
35
  import { useAuth, usePlatformPreferences } from '@datatechsolutions/windsock/client';
@@ -2,12 +2,12 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk3T2WGL47_js = require('../../chunk-3T2WGL47.js');
5
- var chunkSU3YPWFW_js = require('../../chunk-SU3YPWFW.js');
5
+ var chunkMWPTSBAI_js = require('../../chunk-MWPTSBAI.js');
6
6
  var chunkTIJJHW2Z_js = require('../../chunk-TIJJHW2Z.js');
7
- var chunkRL35XATZ_js = require('../../chunk-RL35XATZ.js');
7
+ var chunkIJAKZHXX_js = require('../../chunk-IJAKZHXX.js');
8
8
  require('../../chunk-55H6WZQP.js');
9
- require('../../chunk-NJS2YC3J.js');
10
- require('../../chunk-EFOXN3LC.js');
9
+ require('../../chunk-DJDZIRM6.js');
10
+ require('../../chunk-NJFRJ6YD.js');
11
11
  var chunkI2NZGVBG_js = require('../../chunk-I2NZGVBG.js');
12
12
  require('../../chunk-UZ3CMNUJ.js');
13
13
  require('../../chunk-YXN2K77G.js');
@@ -15,7 +15,7 @@ var chunkS7KHTUHA_js = require('../../chunk-S7KHTUHA.js');
15
15
  require('../../chunk-F54Q2YJY.js');
16
16
  require('../../chunk-FAGDZEKM.js');
17
17
  require('../../chunk-P4YYEM4B.js');
18
- require('../../chunk-C3H4FM4A.js');
18
+ require('../../chunk-72SWXOD5.js');
19
19
  var outline = require('@heroicons/react/24/outline');
20
20
  var jsxRuntime = require('react/jsx-runtime');
21
21
  var react = require('react');
@@ -933,7 +933,7 @@ function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete })
933
933
  {
934
934
  title: labels.createTitle,
935
935
  saveLabel: labels.save,
936
- initial: chunkRL35XATZ_js.defaultRuleForm(),
936
+ initial: chunkIJAKZHXX_js.defaultRuleForm(),
937
937
  onClose: () => setCreateOpen(false),
938
938
  onSubmit: (value) => {
939
939
  onCreate(value);
@@ -977,12 +977,12 @@ function RuleEditor({
977
977
  event.preventDefault();
978
978
  onSubmit(value);
979
979
  },
980
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkRL35XATZ_js.RuleForm, { value, onChange: setValue })
980
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkIJAKZHXX_js.RuleForm, { value, onChange: setValue })
981
981
  }
982
982
  );
983
983
  }
984
984
  function ruleToFormValue(rule) {
985
- const base = chunkRL35XATZ_js.defaultRuleForm();
985
+ const base = chunkIJAKZHXX_js.defaultRuleForm();
986
986
  const rawCondition = rule.condition ?? rule.conditions;
987
987
  const rawAction = pickAction(rule);
988
988
  return {
@@ -1386,7 +1386,7 @@ function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublis
1386
1386
  ] }),
1387
1387
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "liquid-surface rounded-2xl p-4 space-y-3", children: [
1388
1388
  /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Text, { className: "font-semibold text-slate-900 dark:text-slate-100", children: labels.workspace }),
1389
- selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkSU3YPWFW_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Text, { children: labels.empty })
1389
+ selectedWorkflow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[680px] rounded-2xl border border-white/65 dark:border-white/12 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(chunkMWPTSBAI_js.WorkflowWorkspace, { graph: chunk3T2WGL47_js.adaptWorkflowGraphToUi(selectedWorkflow.graph) }) }) : /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Text, { children: labels.empty })
1390
1390
  ] })
1391
1391
  ] });
1392
1392
  }
@@ -1500,7 +1500,7 @@ function RunTimelinePageView({ labels, entries, loading, runId }) {
1500
1500
  {
1501
1501
  hero,
1502
1502
  content: /* @__PURE__ */ jsxRuntime.jsx(
1503
- chunkRL35XATZ_js.ExecutionTimelinePanel,
1503
+ chunkIJAKZHXX_js.ExecutionTimelinePanel,
1504
1504
  {
1505
1505
  entries,
1506
1506
  labels
@@ -2026,11 +2026,11 @@ function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate,
2026
2026
 
2027
2027
  Object.defineProperty(exports, "RolesPageView", {
2028
2028
  enumerable: true,
2029
- get: function () { return chunkSU3YPWFW_js.RolesPageView; }
2029
+ get: function () { return chunkMWPTSBAI_js.RolesPageView; }
2030
2030
  });
2031
2031
  Object.defineProperty(exports, "UsersPageView", {
2032
2032
  enumerable: true,
2033
- get: function () { return chunkSU3YPWFW_js.UsersPageView; }
2033
+ get: function () { return chunkMWPTSBAI_js.UsersPageView; }
2034
2034
  });
2035
2035
  Object.defineProperty(exports, "DIALECT_CATEGORIES", {
2036
2036
  enumerable: true,
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { adaptWorkflowGraphToUi, formatDurationMs } from '../../chunk-UQXVCVAN.mjs';
3
- import { WorkflowWorkspace } from '../../chunk-YV72JM4B.mjs';
4
- export { RolesPageView, UsersPageView } from '../../chunk-YV72JM4B.mjs';
3
+ import { WorkflowWorkspace } from '../../chunk-O6M3KDGT.mjs';
4
+ export { RolesPageView, UsersPageView } from '../../chunk-O6M3KDGT.mjs';
5
5
  import { DatasourceModal, findCategory, DIALECT_CATEGORIES } from '../../chunk-5RM6NGZ6.mjs';
6
6
  export { DIALECT_CATEGORIES, DatasourceFormModal, DatasourceModal, findCategory, findDialect } from '../../chunk-5RM6NGZ6.mjs';
7
- import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-QYA53LUF.mjs';
7
+ import { defaultRuleForm, RuleForm, ExecutionTimelinePanel } from '../../chunk-2WXRRQM3.mjs';
8
8
  import '../../chunk-JB6RNAD2.mjs';
9
- import '../../chunk-U7XM3N7F.mjs';
10
- import '../../chunk-IRT4T3CU.mjs';
9
+ import '../../chunk-LEXBTVGM.mjs';
10
+ import '../../chunk-PCYL4MII.mjs';
11
11
  import { HeroSection, 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-JN6IL6OH.mjs';
12
12
  import '../../chunk-D2JF6C3E.mjs';
13
13
  import '../../chunk-7VJ7CMMT.mjs';
@@ -15,7 +15,7 @@ import { useLink } from '../../chunk-QWG2FMUN.mjs';
15
15
  import '../../chunk-ZV5EZXXO.mjs';
16
16
  import '../../chunk-SYNVNTLJ.mjs';
17
17
  import '../../chunk-OZNTQROP.mjs';
18
- import '../../chunk-5W7L7BT7.mjs';
18
+ import '../../chunk-G7JQ4OCE.mjs';
19
19
  import { CubeTransparentIcon, CpuChipIcon, ChatBubbleLeftEllipsisIcon, WrenchScrewdriverIcon, AdjustmentsHorizontalIcon, CircleStackIcon, RectangleStackIcon, ClockIcon, LinkIcon, KeyIcon, ArrowPathIcon, TrashIcon } from '@heroicons/react/24/outline';
20
20
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
21
21
  import { useState, useMemo, useEffect } from 'react';
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkRGI74SQH_js = require('../chunk-RGI74SQH.js');
5
- require('../chunk-EFOXN3LC.js');
4
+ var chunkOCELRSLO_js = require('../chunk-OCELRSLO.js');
5
+ require('../chunk-NJFRJ6YD.js');
6
6
  require('../chunk-I2NZGVBG.js');
7
7
  require('../chunk-UZ3CMNUJ.js');
8
8
  require('../chunk-YXN2K77G.js');
@@ -10,13 +10,13 @@ require('../chunk-S7KHTUHA.js');
10
10
  require('../chunk-F54Q2YJY.js');
11
11
  require('../chunk-FAGDZEKM.js');
12
12
  require('../chunk-P4YYEM4B.js');
13
- require('../chunk-C3H4FM4A.js');
13
+ require('../chunk-72SWXOD5.js');
14
14
 
15
15
 
16
16
 
17
17
  Object.defineProperty(exports, "WorkflowCanvasShell", {
18
18
  enumerable: true,
19
- get: function () { return chunkRGI74SQH_js.WorkflowCanvasShell; }
19
+ get: function () { return chunkOCELRSLO_js.WorkflowCanvasShell; }
20
20
  });
21
21
  //# sourceMappingURL=workflow-canvas-shell.js.map
22
22
  //# sourceMappingURL=workflow-canvas-shell.js.map
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- export { WorkflowCanvasShell } from '../chunk-YIB2YAM5.mjs';
3
- import '../chunk-IRT4T3CU.mjs';
2
+ export { WorkflowCanvasShell } from '../chunk-GIQXB3BG.mjs';
3
+ import '../chunk-PCYL4MII.mjs';
4
4
  import '../chunk-JN6IL6OH.mjs';
5
5
  import '../chunk-D2JF6C3E.mjs';
6
6
  import '../chunk-7VJ7CMMT.mjs';
@@ -8,6 +8,6 @@ import '../chunk-QWG2FMUN.mjs';
8
8
  import '../chunk-ZV5EZXXO.mjs';
9
9
  import '../chunk-SYNVNTLJ.mjs';
10
10
  import '../chunk-OZNTQROP.mjs';
11
- import '../chunk-5W7L7BT7.mjs';
11
+ import '../chunk-G7JQ4OCE.mjs';
12
12
  //# sourceMappingURL=workflow-canvas-shell.mjs.map
13
13
  //# sourceMappingURL=workflow-canvas-shell.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datatechsolutions/ui",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/astrlabe/utils/logic-node-defaults.ts","../src/astrlabe/utils/layout-engine.ts","../src/astrlabe/utils/agent-tier.ts"],"names":[],"mappings":"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","file":"chunk-5W7L7BT7.mjs","sourcesContent":["/**\n * Logic Node Default Configs\n * ==========================\n * Factory function to create default configs for each logic node type.\n */\n\nimport type { WorkflowNodeType, LogicNodeConfig } from '../contracts'\n\nexport function createDefaultLogicNodeConfig(nodeType: WorkflowNodeType): LogicNodeConfig | null {\n switch (nodeType) {\n case 'start':\n return { type: 'start', inputVariables: [] }\n case 'end':\n return { type: 'end', outputVariables: [] }\n case 'if_else':\n return {\n type: 'if_else',\n conditions: [{ variable: '', operator: 'equals', value: '' }],\n logicalOperator: 'and',\n }\n case 'code':\n return { type: 'code', language: 'javascript', code: '' }\n case 'http_request':\n return {\n type: 'http_request',\n method: 'GET',\n url: '',\n headers: {},\n body: '',\n timeoutMs: 10000,\n }\n case 's3_write':\n return {\n type: 's3_write',\n bucket: '',\n key: '',\n sourceUrl: '',\n body: '',\n contentType: '',\n timeoutMs: 300000,\n connectionId: '',\n }\n case 'template_transform':\n return { type: 'template_transform', template: '', outputVariable: '' }\n case 'iteration':\n return { type: 'iteration', iteratorVariable: '', maxIterations: 100 }\n case 'knowledge_base':\n return { type: 'knowledge_base', sourceId: '', topK: 5, similarityThreshold: 0.7 }\n case 'answer':\n return { type: 'answer', outputTemplate: '', outputVariables: [] }\n case 'question_classifier':\n return {\n type: 'question_classifier',\n modelId: '',\n instructions: '',\n categories: [\n { id: crypto.randomUUID(), name: '', description: '' },\n { id: crypto.randomUUID(), name: '', description: '' },\n ],\n }\n case 'parameter_extractor':\n return {\n type: 'parameter_extractor',\n modelId: '',\n parameters: [{ name: '', type: 'string', description: '', required: true }],\n }\n case 'variable_assigner':\n return {\n type: 'variable_assigner',\n assignments: [{ target: '', source: '' }],\n }\n case 'variable_aggregator':\n return {\n type: 'variable_aggregator',\n inputVariables: [],\n outputVariable: '',\n aggregationMode: 'array',\n }\n case 'document_extractor':\n return {\n type: 'document_extractor',\n extractionMode: 'text',\n outputVariable: '',\n }\n case 'list_operator':\n return {\n type: 'list_operator',\n operation: 'filter',\n inputVariable: '',\n outputVariable: '',\n condition: '',\n }\n case 'iteration_start':\n return {\n type: 'iteration_start',\n iteratorVariable: '',\n itemVariable: 'item',\n indexVariable: 'index',\n }\n case 'note':\n return {\n type: 'note',\n text: '',\n color: 'yellow',\n width: 200,\n height: 150,\n }\n case 'group':\n return {\n type: 'group',\n label: 'Group',\n color: 'slate',\n isExpanded: true,\n width: 400,\n height: 300,\n collapsedWidth: 260,\n collapsedHeight: 60,\n }\n case 'datasource':\n return {\n type: 'datasource',\n datasourceId: '',\n dialect: '',\n table: '',\n selectedColumns: [],\n filterVariables: {},\n outputVariable: 'datasourceResult',\n limit: 100,\n }\n case 'dashboard_output':\n return {\n type: 'dashboard_output',\n dashboardFrom: '',\n }\n default:\n return null\n }\n}\n","/**\n * Layout Engine\n * =============\n * Auto-layout for workflow graphs using @dagrejs/dagre.\n * Pure utility — no React dependencies.\n */\n\nimport Dagre from '@dagrejs/dagre'\nimport type { Node, Edge } from '@xyflow/react'\n\n/** Layout direction: free means no auto-layout is applied. */\nexport type LayoutDirection = 'free' | 'LR' | 'TB'\n\nconst DEFAULT_NODE_WIDTH = 260\nconst DEFAULT_NODE_HEIGHT = 70\n\nfunction getNodeSize(node: Node): { width: number; height: number } {\n const measured = node.measured as { width?: number; height?: number } | undefined\n return {\n width: measured?.width ?? DEFAULT_NODE_WIDTH,\n height: measured?.height ?? DEFAULT_NODE_HEIGHT,\n }\n}\n\n/**\n * Apply dagre layout to the given nodes and edges.\n * Returns a new array of nodes with updated positions.\n * Group child nodes (parentId set) and note nodes are excluded from layout.\n */\nexport function applyDagreLayout(\n nodes: Node[],\n edges: Edge[],\n direction: Exclude<LayoutDirection, 'free'>,\n): Node[] {\n const nodeSpacingHorizontal = 80\n const nodeSpacingVertical = 50\n\n // Separate layoutable nodes from excluded ones\n const layoutNodes = nodes.filter(\n (node) => !node.parentId && node.type !== 'note',\n )\n\n // Build dagre graph\n const dagreGraph = new Dagre.graphlib.Graph({ directed: true })\n dagreGraph.setDefaultEdgeLabel(() => ({}))\n\n const isHorizontal = direction === 'LR'\n dagreGraph.setGraph({\n rankdir: direction,\n nodesep: isHorizontal ? nodeSpacingVertical : nodeSpacingHorizontal,\n ranksep: isHorizontal ? nodeSpacingHorizontal : nodeSpacingVertical,\n marginx: 40,\n marginy: 40,\n })\n\n const layoutNodeIds = new Set(layoutNodes.map((node) => node.id))\n\n for (const node of layoutNodes) {\n const { width, height } = getNodeSize(node)\n dagreGraph.setNode(node.id, { width, height })\n }\n\n for (const edge of edges) {\n if (layoutNodeIds.has(edge.source) && layoutNodeIds.has(edge.target)) {\n dagreGraph.setEdge(edge.source, edge.target)\n }\n }\n\n Dagre.layout(dagreGraph)\n\n // Build position map — dagre returns center coords, React Flow uses top-left\n const positionMap = new Map<string, { x: number; y: number }>()\n for (const node of layoutNodes) {\n const dagreNode = dagreGraph.node(node.id)\n if (!dagreNode) continue\n const { width, height } = getNodeSize(node)\n positionMap.set(node.id, {\n x: dagreNode.x - width / 2,\n y: dagreNode.y - height / 2,\n })\n }\n\n // Return all nodes with updated positions for layout-participating nodes\n return nodes.map((node) => {\n const newPosition = positionMap.get(node.id)\n if (!newPosition) return node\n return { ...node, position: newPosition }\n })\n}\n","/**\n * Agent ELO Tier\n * ==============\n * Derives difficulty tier from agent ELO rating.\n * Used in node palette, agent flow node, and agent modal.\n */\n\nexport type AgentTier = {\n key: 'beginner' | 'intermediate' | 'advanced' | 'expert'\n pillColor: string\n}\n\nconst TIERS: Array<{ maxElo: number; tier: AgentTier }> = [\n { maxElo: 1200, tier: { key: 'beginner', pillColor: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400' } },\n { maxElo: 1600, tier: { key: 'intermediate', pillColor: 'bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-400' } },\n { maxElo: 2000, tier: { key: 'advanced', pillColor: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400' } },\n { maxElo: Infinity, tier: { key: 'expert', pillColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400' } },\n]\n\nexport function getAgentTier(elo: number | undefined): AgentTier {\n const eloValue = elo ?? 0\n for (const { maxElo, tier } of TIERS) {\n if (eloValue < maxElo) return tier\n }\n return TIERS[TIERS.length - 1].tier\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/astrlabe/utils/logic-node-defaults.ts","../src/astrlabe/utils/layout-engine.ts","../src/astrlabe/utils/agent-tier.ts"],"names":["Dagre"],"mappings":"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","file":"chunk-C3H4FM4A.js","sourcesContent":["/**\n * Logic Node Default Configs\n * ==========================\n * Factory function to create default configs for each logic node type.\n */\n\nimport type { WorkflowNodeType, LogicNodeConfig } from '../contracts'\n\nexport function createDefaultLogicNodeConfig(nodeType: WorkflowNodeType): LogicNodeConfig | null {\n switch (nodeType) {\n case 'start':\n return { type: 'start', inputVariables: [] }\n case 'end':\n return { type: 'end', outputVariables: [] }\n case 'if_else':\n return {\n type: 'if_else',\n conditions: [{ variable: '', operator: 'equals', value: '' }],\n logicalOperator: 'and',\n }\n case 'code':\n return { type: 'code', language: 'javascript', code: '' }\n case 'http_request':\n return {\n type: 'http_request',\n method: 'GET',\n url: '',\n headers: {},\n body: '',\n timeoutMs: 10000,\n }\n case 's3_write':\n return {\n type: 's3_write',\n bucket: '',\n key: '',\n sourceUrl: '',\n body: '',\n contentType: '',\n timeoutMs: 300000,\n connectionId: '',\n }\n case 'template_transform':\n return { type: 'template_transform', template: '', outputVariable: '' }\n case 'iteration':\n return { type: 'iteration', iteratorVariable: '', maxIterations: 100 }\n case 'knowledge_base':\n return { type: 'knowledge_base', sourceId: '', topK: 5, similarityThreshold: 0.7 }\n case 'answer':\n return { type: 'answer', outputTemplate: '', outputVariables: [] }\n case 'question_classifier':\n return {\n type: 'question_classifier',\n modelId: '',\n instructions: '',\n categories: [\n { id: crypto.randomUUID(), name: '', description: '' },\n { id: crypto.randomUUID(), name: '', description: '' },\n ],\n }\n case 'parameter_extractor':\n return {\n type: 'parameter_extractor',\n modelId: '',\n parameters: [{ name: '', type: 'string', description: '', required: true }],\n }\n case 'variable_assigner':\n return {\n type: 'variable_assigner',\n assignments: [{ target: '', source: '' }],\n }\n case 'variable_aggregator':\n return {\n type: 'variable_aggregator',\n inputVariables: [],\n outputVariable: '',\n aggregationMode: 'array',\n }\n case 'document_extractor':\n return {\n type: 'document_extractor',\n extractionMode: 'text',\n outputVariable: '',\n }\n case 'list_operator':\n return {\n type: 'list_operator',\n operation: 'filter',\n inputVariable: '',\n outputVariable: '',\n condition: '',\n }\n case 'iteration_start':\n return {\n type: 'iteration_start',\n iteratorVariable: '',\n itemVariable: 'item',\n indexVariable: 'index',\n }\n case 'note':\n return {\n type: 'note',\n text: '',\n color: 'yellow',\n width: 200,\n height: 150,\n }\n case 'group':\n return {\n type: 'group',\n label: 'Group',\n color: 'slate',\n isExpanded: true,\n width: 400,\n height: 300,\n collapsedWidth: 260,\n collapsedHeight: 60,\n }\n case 'datasource':\n return {\n type: 'datasource',\n datasourceId: '',\n dialect: '',\n table: '',\n selectedColumns: [],\n filterVariables: {},\n outputVariable: 'datasourceResult',\n limit: 100,\n }\n case 'dashboard_output':\n return {\n type: 'dashboard_output',\n dashboardFrom: '',\n }\n default:\n return null\n }\n}\n","/**\n * Layout Engine\n * =============\n * Auto-layout for workflow graphs using @dagrejs/dagre.\n * Pure utility — no React dependencies.\n */\n\nimport Dagre from '@dagrejs/dagre'\nimport type { Node, Edge } from '@xyflow/react'\n\n/** Layout direction: free means no auto-layout is applied. */\nexport type LayoutDirection = 'free' | 'LR' | 'TB'\n\nconst DEFAULT_NODE_WIDTH = 260\nconst DEFAULT_NODE_HEIGHT = 70\n\nfunction getNodeSize(node: Node): { width: number; height: number } {\n const measured = node.measured as { width?: number; height?: number } | undefined\n return {\n width: measured?.width ?? DEFAULT_NODE_WIDTH,\n height: measured?.height ?? DEFAULT_NODE_HEIGHT,\n }\n}\n\n/**\n * Apply dagre layout to the given nodes and edges.\n * Returns a new array of nodes with updated positions.\n * Group child nodes (parentId set) and note nodes are excluded from layout.\n */\nexport function applyDagreLayout(\n nodes: Node[],\n edges: Edge[],\n direction: Exclude<LayoutDirection, 'free'>,\n): Node[] {\n const nodeSpacingHorizontal = 80\n const nodeSpacingVertical = 50\n\n // Separate layoutable nodes from excluded ones\n const layoutNodes = nodes.filter(\n (node) => !node.parentId && node.type !== 'note',\n )\n\n // Build dagre graph\n const dagreGraph = new Dagre.graphlib.Graph({ directed: true })\n dagreGraph.setDefaultEdgeLabel(() => ({}))\n\n const isHorizontal = direction === 'LR'\n dagreGraph.setGraph({\n rankdir: direction,\n nodesep: isHorizontal ? nodeSpacingVertical : nodeSpacingHorizontal,\n ranksep: isHorizontal ? nodeSpacingHorizontal : nodeSpacingVertical,\n marginx: 40,\n marginy: 40,\n })\n\n const layoutNodeIds = new Set(layoutNodes.map((node) => node.id))\n\n for (const node of layoutNodes) {\n const { width, height } = getNodeSize(node)\n dagreGraph.setNode(node.id, { width, height })\n }\n\n for (const edge of edges) {\n if (layoutNodeIds.has(edge.source) && layoutNodeIds.has(edge.target)) {\n dagreGraph.setEdge(edge.source, edge.target)\n }\n }\n\n Dagre.layout(dagreGraph)\n\n // Build position map — dagre returns center coords, React Flow uses top-left\n const positionMap = new Map<string, { x: number; y: number }>()\n for (const node of layoutNodes) {\n const dagreNode = dagreGraph.node(node.id)\n if (!dagreNode) continue\n const { width, height } = getNodeSize(node)\n positionMap.set(node.id, {\n x: dagreNode.x - width / 2,\n y: dagreNode.y - height / 2,\n })\n }\n\n // Return all nodes with updated positions for layout-participating nodes\n return nodes.map((node) => {\n const newPosition = positionMap.get(node.id)\n if (!newPosition) return node\n return { ...node, position: newPosition }\n })\n}\n","/**\n * Agent ELO Tier\n * ==============\n * Derives difficulty tier from agent ELO rating.\n * Used in node palette, agent flow node, and agent modal.\n */\n\nexport type AgentTier = {\n key: 'beginner' | 'intermediate' | 'advanced' | 'expert'\n pillColor: string\n}\n\nconst TIERS: Array<{ maxElo: number; tier: AgentTier }> = [\n { maxElo: 1200, tier: { key: 'beginner', pillColor: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400' } },\n { maxElo: 1600, tier: { key: 'intermediate', pillColor: 'bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-400' } },\n { maxElo: 2000, tier: { key: 'advanced', pillColor: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400' } },\n { maxElo: Infinity, tier: { key: 'expert', pillColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400' } },\n]\n\nexport function getAgentTier(elo: number | undefined): AgentTier {\n const eloValue = elo ?? 0\n for (const { maxElo, tier } of TIERS) {\n if (eloValue < maxElo) return tier\n }\n return TIERS[TIERS.length - 1].tier\n}\n"]}