@datatechsolutions/ui 3.3.0 → 3.4.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 (166) hide show
  1. package/dist/astrlabe/index.d.mts +22 -30
  2. package/dist/astrlabe/index.d.ts +22 -30
  3. package/dist/astrlabe/index.js +112 -112
  4. package/dist/astrlabe/index.mjs +5 -5
  5. package/dist/astrlabe/workflow-canvas.d.mts +6 -69
  6. package/dist/astrlabe/workflow-canvas.d.ts +6 -69
  7. package/dist/astrlabe/workflow-canvas.js +5 -5
  8. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  9. package/dist/brand/index.d.mts +1 -15
  10. package/dist/brand/index.d.ts +1 -15
  11. package/dist/brand/index.js +0 -14
  12. package/dist/brand/index.js.map +1 -1
  13. package/dist/brand/index.mjs +0 -14
  14. package/dist/brand/index.mjs.map +1 -1
  15. package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
  16. package/dist/chunk-2OZZH2IO.js.map +1 -0
  17. package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
  18. package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
  19. package/dist/{chunk-JSNRCYSO.js → chunk-45QAUEYT.js} +4 -4
  20. package/dist/{chunk-JSNRCYSO.js.map → chunk-45QAUEYT.js.map} +1 -1
  21. package/dist/{chunk-B67DP7MI.mjs → chunk-4GDWGWHY.mjs} +4 -4
  22. package/dist/{chunk-B67DP7MI.mjs.map → chunk-4GDWGWHY.mjs.map} +1 -1
  23. package/dist/{chunk-KR2X2WHJ.js → chunk-4ICEQJH4.js} +53 -53
  24. package/dist/{chunk-KR2X2WHJ.js.map → chunk-4ICEQJH4.js.map} +1 -1
  25. package/dist/{chunk-RXZNACMI.js → chunk-6MBWKOPF.js} +33 -33
  26. package/dist/{chunk-RXZNACMI.js.map → chunk-6MBWKOPF.js.map} +1 -1
  27. package/dist/{chunk-JN6IL6OH.mjs → chunk-AGGOHPMZ.mjs} +1054 -5229
  28. package/dist/chunk-AGGOHPMZ.mjs.map +1 -0
  29. package/dist/{chunk-5GDKCFM5.mjs → chunk-AL73YAV4.mjs} +3 -3
  30. package/dist/{chunk-5GDKCFM5.mjs.map → chunk-AL73YAV4.mjs.map} +1 -1
  31. package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
  32. package/dist/chunk-BUDZNAKL.mjs.map +1 -0
  33. package/dist/{chunk-OL73LBX5.mjs → chunk-BW67WFHT.mjs} +3 -4
  34. package/dist/chunk-BW67WFHT.mjs.map +1 -0
  35. package/dist/{chunk-W5OEBO6E.js → chunk-CF7GOUBQ.js} +13 -14
  36. package/dist/chunk-CF7GOUBQ.js.map +1 -0
  37. package/dist/{chunk-IRPS5UCS.mjs → chunk-CUWPLPVY.mjs} +3 -3
  38. package/dist/{chunk-IRPS5UCS.mjs.map → chunk-CUWPLPVY.mjs.map} +1 -1
  39. package/dist/{chunk-IJAKZHXX.js → chunk-ERCDMBRT.js} +683 -645
  40. package/dist/chunk-ERCDMBRT.js.map +1 -0
  41. package/dist/{chunk-I2NZGVBG.js → chunk-FSBR4RCK.js} +1101 -5313
  42. package/dist/chunk-FSBR4RCK.js.map +1 -0
  43. package/dist/{chunk-5RM6NGZ6.mjs → chunk-IDEM3DYF.mjs} +3 -3
  44. package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-IDEM3DYF.mjs.map} +1 -1
  45. package/dist/{chunk-NJFRJ6YD.js → chunk-M7KSEUZR.js} +225 -384
  46. package/dist/chunk-M7KSEUZR.js.map +1 -0
  47. package/dist/{chunk-AOUUZ52N.js → chunk-MO5FBVV3.js} +85 -86
  48. package/dist/chunk-MO5FBVV3.js.map +1 -0
  49. package/dist/{chunk-BR2GAZKG.mjs → chunk-NAFWHJCM.mjs} +7 -7
  50. package/dist/{chunk-BR2GAZKG.mjs.map → chunk-NAFWHJCM.mjs.map} +1 -1
  51. package/dist/{chunk-3JJWPOK6.js → chunk-NCLZKVJK.js} +9 -10
  52. package/dist/chunk-NCLZKVJK.js.map +1 -0
  53. package/dist/{chunk-R4TQWXNG.mjs → chunk-NVQWHJQH.mjs} +6 -5
  54. package/dist/chunk-NVQWHJQH.mjs.map +1 -0
  55. package/dist/{chunk-ZL6C2ZAF.js → chunk-PGVZKMOA.js} +67 -67
  56. package/dist/{chunk-ZL6C2ZAF.js.map → chunk-PGVZKMOA.js.map} +1 -1
  57. package/dist/{chunk-UDDZTTLO.mjs → chunk-QBFE7ABE.mjs} +6 -7
  58. package/dist/chunk-QBFE7ABE.mjs.map +1 -0
  59. package/dist/{chunk-3ZUMJTDT.mjs → chunk-RFRXS4PC.mjs} +3 -4
  60. package/dist/{chunk-3JJWPOK6.js.map → chunk-RFRXS4PC.mjs.map} +1 -1
  61. package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
  62. package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
  63. package/dist/{chunk-MWPTSBAI.js → chunk-RLLP7VQJ.js} +26 -26
  64. package/dist/{chunk-MWPTSBAI.js.map → chunk-RLLP7VQJ.js.map} +1 -1
  65. package/dist/{chunk-GIQXB3BG.mjs → chunk-RLVOG5OQ.mjs} +3 -3
  66. package/dist/{chunk-GIQXB3BG.mjs.map → chunk-RLVOG5OQ.mjs.map} +1 -1
  67. package/dist/{chunk-2WXRRQM3.mjs → chunk-SEYUYGER.mjs} +553 -516
  68. package/dist/chunk-SEYUYGER.mjs.map +1 -0
  69. package/dist/{chunk-O6M3KDGT.mjs → chunk-SQ4KGLBZ.mjs} +4 -4
  70. package/dist/{chunk-O6M3KDGT.mjs.map → chunk-SQ4KGLBZ.mjs.map} +1 -1
  71. package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
  72. package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
  73. package/dist/{chunk-ZM5MVWIT.js → chunk-TUQLZ4QD.js} +5 -6
  74. package/dist/chunk-TUQLZ4QD.js.map +1 -0
  75. package/dist/{chunk-TVMLV675.js → chunk-UE2RDQIK.js} +98 -95
  76. package/dist/chunk-UE2RDQIK.js.map +1 -0
  77. package/dist/{chunk-HDCUWUNH.js → chunk-UJVDI66K.js} +28 -27
  78. package/dist/chunk-UJVDI66K.js.map +1 -0
  79. package/dist/{chunk-PCYL4MII.mjs → chunk-VV6SYMPM.mjs} +156 -314
  80. package/dist/chunk-VV6SYMPM.mjs.map +1 -0
  81. package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
  82. package/dist/chunk-VY52Y5GC.js.map +1 -0
  83. package/dist/{chunk-LEKZUS6N.mjs → chunk-X3GW7UPN.mjs} +4 -5
  84. package/dist/chunk-X3GW7UPN.mjs.map +1 -0
  85. package/dist/{chunk-OCELRSLO.js → chunk-Y2AYFG4E.js} +4 -4
  86. package/dist/{chunk-OCELRSLO.js.map → chunk-Y2AYFG4E.js.map} +1 -1
  87. package/dist/{chunk-TIJJHW2Z.js → chunk-YV7F7IXG.js} +36 -36
  88. package/dist/{chunk-TIJJHW2Z.js.map → chunk-YV7F7IXG.js.map} +1 -1
  89. package/dist/{chunk-MVBIAXVN.mjs → chunk-ZKSDDFHG.mjs} +14 -11
  90. package/dist/chunk-ZKSDDFHG.mjs.map +1 -0
  91. package/dist/{index-VI9gyJXl.d.mts → index-BNRGVAS5.d.mts} +9 -2
  92. package/dist/index-BoebbJ44.d.mts +49 -0
  93. package/dist/index-BoebbJ44.d.ts +49 -0
  94. package/dist/{index-CoB18TbG.d.ts → index-CnCY-b5V.d.ts} +9 -2
  95. package/dist/index.d.mts +399 -548
  96. package/dist/index.d.ts +399 -548
  97. package/dist/index.js +727 -887
  98. package/dist/index.mjs +3 -3
  99. package/dist/platform/admin/index.js +12 -12
  100. package/dist/platform/admin/index.mjs +6 -6
  101. package/dist/platform/agents-workspace.js +8 -8
  102. package/dist/platform/agents-workspace.mjs +7 -7
  103. package/dist/platform/app-shell.js +5 -5
  104. package/dist/platform/app-shell.mjs +4 -4
  105. package/dist/platform/auth/index.js +29 -29
  106. package/dist/platform/auth/index.mjs +6 -6
  107. package/dist/platform/billing/index.js +5 -5
  108. package/dist/platform/billing/index.mjs +4 -4
  109. package/dist/platform/impersonation/index.js +5 -5
  110. package/dist/platform/impersonation/index.mjs +4 -4
  111. package/dist/platform/index.d.mts +3 -39
  112. package/dist/platform/index.d.ts +3 -39
  113. package/dist/platform/index.js +95 -4805
  114. package/dist/platform/index.js.map +1 -1
  115. package/dist/platform/index.mjs +23 -4728
  116. package/dist/platform/index.mjs.map +1 -1
  117. package/dist/platform/pages/index.d.mts +4 -4
  118. package/dist/platform/pages/index.d.ts +4 -4
  119. package/dist/platform/pages/index.js +197 -197
  120. package/dist/platform/pages/index.mjs +9 -9
  121. package/dist/platform/rbac.d.mts +2 -1
  122. package/dist/platform/rbac.d.ts +2 -1
  123. package/dist/platform/rbac.js +2 -2
  124. package/dist/platform/rbac.mjs +1 -1
  125. package/dist/platform/settings/index.js +9 -9
  126. package/dist/platform/settings/index.mjs +8 -8
  127. package/dist/platform/utils/index.js +3 -3
  128. package/dist/platform/utils/index.js.map +1 -1
  129. package/dist/platform/utils/index.mjs +1 -1
  130. package/dist/platform/utils/index.mjs.map +1 -1
  131. package/dist/platform/workflow-api-client.d.mts +2 -2
  132. package/dist/platform/workflow-api-client.d.ts +2 -2
  133. package/dist/platform/workflow-api-client.js +62 -62
  134. package/dist/platform/workflow-api-client.mjs +2 -2
  135. package/dist/platform/workflow-canvas-shell.js +6 -6
  136. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  137. package/dist/{workflow-api-client-DoYj7nHz.d.mts → workflow-api-client-CpFl3WcG.d.mts} +1 -1
  138. package/dist/{workflow-api-client-BKD8OfP_.d.ts → workflow-api-client-uLICOanv.d.ts} +1 -1
  139. package/dist/workflow-canvas--qaYKuMm.d.ts +113 -0
  140. package/dist/workflow-canvas-B80fmD_n.d.mts +113 -0
  141. package/package.json +15 -5
  142. package/src/styles/liquid-glass.css +283 -2
  143. package/dist/chunk-2WXRRQM3.mjs.map +0 -1
  144. package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
  145. package/dist/chunk-AOUUZ52N.js.map +0 -1
  146. package/dist/chunk-FAGDZEKM.js.map +0 -1
  147. package/dist/chunk-HDCUWUNH.js.map +0 -1
  148. package/dist/chunk-HZ4LOVHM.js.map +0 -1
  149. package/dist/chunk-I2NZGVBG.js.map +0 -1
  150. package/dist/chunk-IJAKZHXX.js.map +0 -1
  151. package/dist/chunk-JN6IL6OH.mjs.map +0 -1
  152. package/dist/chunk-LEKZUS6N.mjs.map +0 -1
  153. package/dist/chunk-MVBIAXVN.mjs.map +0 -1
  154. package/dist/chunk-NJFRJ6YD.js.map +0 -1
  155. package/dist/chunk-OL73LBX5.mjs.map +0 -1
  156. package/dist/chunk-PCYL4MII.mjs.map +0 -1
  157. package/dist/chunk-R4TQWXNG.mjs.map +0 -1
  158. package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
  159. package/dist/chunk-TVMLV675.js.map +0 -1
  160. package/dist/chunk-UDDZTTLO.mjs.map +0 -1
  161. package/dist/chunk-W5OEBO6E.js.map +0 -1
  162. package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
  163. package/dist/chunk-ZM5MVWIT.js.map +0 -1
  164. package/src/brand/logos/kori-icon.svg +0 -45
  165. package/src/brand/logos/kori-logo-dark.svg +0 -40
  166. package/src/brand/logos/kori-logo.svg +0 -43
@@ -1,18 +1,17 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
4
+ var chunkFSBR4RCK_js = require('./chunk-FSBR4RCK.js');
5
5
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
6
6
  var chunkS7KHTUHA_js = require('./chunk-S7KHTUHA.js');
7
7
  var react = require('react');
8
8
  var outline = require('@heroicons/react/24/outline');
9
- var client = require('@datatechsolutions/windsock/client');
10
9
  var i18n = require('@datatechsolutions/shared-domain/i18n');
11
10
  var jsxRuntime = require('react/jsx-runtime');
12
11
 
13
12
  var PlatformStateContext = react.createContext(null);
14
13
  function PlatformStateProvider({ children, normalizeRole }) {
15
- const { user } = client.useAuth();
14
+ const { user } = chunkFSBR4RCK_js.useAuth();
16
15
  const state = react.useMemo(() => {
17
16
  const organizationId = user?.organizationId ?? "";
18
17
  const actor = user ? {
@@ -34,7 +33,7 @@ function usePlatformState() {
34
33
  }
35
34
  function resolveFlag(locale) {
36
35
  const code = locale === "pt-BR" ? "br" : locale;
37
- return chunkI2NZGVBG_js.LOCALE_FLAGS?.[code];
36
+ return chunkFSBR4RCK_js.LOCALE_FLAGS?.[code];
38
37
  }
39
38
  function PlatformAppShell({
40
39
  appName,
@@ -50,12 +49,12 @@ function PlatformAppShell({
50
49
  children
51
50
  }) {
52
51
  const tCommon = chunkYXN2K77G_js.useTranslations("common");
53
- const { user, status, logout } = client.useAuth();
52
+ const { user, status, logout } = chunkFSBR4RCK_js.useAuth();
54
53
  usePlatformState();
55
- const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = client.usePlatformPreferences();
54
+ const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = chunkFSBR4RCK_js.usePlatformPreferences();
56
55
  const pathname = chunkS7KHTUHA_js.usePathname();
57
56
  const router = chunkS7KHTUHA_js.useRouter();
58
- const { history, openHistory } = chunkI2NZGVBG_js.useNotifications();
57
+ const { history, openHistory } = chunkFSBR4RCK_js.useNotifications();
59
58
  const currentLocale = chunkYXN2K77G_js.useLocale();
60
59
  const localeMeta = i18n.LANGUAGE_META[currentLocale];
61
60
  const items = react.useMemo(() => navigationItems.filter((item) => {
@@ -83,7 +82,7 @@ function PlatformAppShell({
83
82
  organizationId: user.organizationId ?? null
84
83
  } : null;
85
84
  return /* @__PURE__ */ jsxRuntime.jsx(
86
- chunkI2NZGVBG_js.PlatformShell,
85
+ chunkFSBR4RCK_js.PlatformShell,
87
86
  {
88
87
  items,
89
88
  launchpadPageOrder: pageOrder,
@@ -128,5 +127,5 @@ function PlatformAppShell({
128
127
  exports.PlatformAppShell = PlatformAppShell;
129
128
  exports.PlatformStateProvider = PlatformStateProvider;
130
129
  exports.usePlatformState = usePlatformState;
131
- //# sourceMappingURL=chunk-3JJWPOK6.js.map
132
- //# sourceMappingURL=chunk-3JJWPOK6.js.map
130
+ //# sourceMappingURL=chunk-NCLZKVJK.js.map
131
+ //# sourceMappingURL=chunk-NCLZKVJK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["createContext","useAuth","useMemo","useContext","LOCALE_FLAGS","useTranslations","usePlatformPreferences","usePathname","useRouter","useNotifications","useLocale","LANGUAGE_META","useCallback","jsx","PlatformShell","RectangleStackIcon","HomeIcon"],"mappings":"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","file":"chunk-NCLZKVJK.js","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '../_auth'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import { useCallback, useMemo, type ComponentType, type ReactNode } from 'react'\nimport { RectangleStackIcon, HomeIcon } from '@heroicons/react/24/outline'\nimport { useAuth, usePlatformPreferences } from '../_auth'\nimport { LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n'\nimport {\n PlatformShell,\n type NavigationItem,\n} from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\nimport { LOCALE_FLAGS } from '@ui/lib/locale-flags'\nimport { usePlatformState } from './platform-state-provider'\n\nfunction resolveFlag(locale: string): string | undefined {\n const code = locale === 'pt-BR' ? 'br' : locale\n return LOCALE_FLAGS?.[code as keyof typeof LOCALE_FLAGS]\n}\n\nexport type PlatformAppShellProps = {\n /** App display name (e.g. \"Astrlabe\"). */\n appName: string\n /** Tailwind gradient classes for the shell branding (e.g. \"from-sky-500 to-indigo-600\"). */\n appGradient: string\n /** Branded logo node rendered inside the flyout trigger. */\n appLogo: ReactNode\n /**\n * Optional app icon for the branded loader (defaults to the platform's\n * RectangleStackIcon if omitted).\n */\n appIcon?: ReactNode\n /**\n * Optional override for the dock dashboard icon (defaults to HomeIcon).\n */\n dashboardIcon?: ComponentType<{ className?: string }>\n\n /** App-specific navigation items already pre-translated. */\n navigationItems: NavigationItem[]\n /** Custom ordering of launchpad page tiles. */\n pageOrder: string[]\n /**\n * Map of navigation/module ID → required permission name. The shell\n * filters `navigationItems` so that any item whose ID has an entry here\n * is hidden unless `hasPermission` returns true for the listed permission.\n */\n modulePermissions: Record<string, string>\n /**\n * Permission predicate, typically `(p) => can(actor, p)` from each app's\n * `createPlatformRbac()` factory.\n */\n hasPermission: (permission: string) => boolean\n\n /**\n * Optional settings/profile drawer content (e.g. an app-specific\n * `<SettingsModal>`). Receives the open state + close handler the shell\n * manages internally so the drawer renders inside the shell chrome.\n */\n settingsModal?: (props: { open: boolean; onClose: () => void }) => ReactNode\n\n children: ReactNode\n}\n\n/**\n * Cross-app platform shell — wires `<PlatformShell>` from ui to windsock's\n * auth + preferences hooks and to ui's i18n/router contexts. Each app\n * passes its own logo, gradient, navigation, and permission predicate; the\n * rest of the chrome (header, dock, flyout, sign-out confirm modal) is\n * shared.\n */\nexport function PlatformAppShell({\n appName,\n appGradient,\n appLogo,\n appIcon,\n dashboardIcon,\n navigationItems,\n pageOrder,\n modulePermissions,\n hasPermission,\n settingsModal,\n children,\n}: PlatformAppShellProps) {\n const tCommon = useTranslations('common')\n const { user, status, logout } = useAuth()\n // Validate the platform-state provider is mounted above this shell;\n // the actor itself isn't read here, but the same provider feeds children.\n usePlatformState()\n const { resolvedTheme, setTheme, dockPosition, dockAutoHide, dockEnabled } = usePlatformPreferences()\n const pathname = usePathname()\n const router = useRouter()\n const { history, openHistory } = useNotifications()\n const currentLocale = useLocale()\n const localeMeta = LANGUAGE_META[currentLocale as keyof typeof LANGUAGE_META]\n\n const items = useMemo(() => navigationItems.filter((item) => {\n const permission = modulePermissions[item.id]\n if (!permission) return true\n return hasPermission(permission)\n }), [navigationItems, modulePermissions, hasPermission])\n\n const handleSignOut = useCallback(() => { void logout('/login') }, [logout])\n const handleToggleTheme = useCallback(\n () => { setTheme(resolvedTheme === 'dark' ? 'light' : 'dark') },\n [resolvedTheme, setTheme],\n )\n const handleNavigate = useCallback((href: string) => router.push(href), [router])\n const handlePrefetch = useCallback((href: string) => router.prefetch(href), [router])\n\n const shellUser = user\n ? {\n name: user.name ?? null,\n email: user.email ?? null,\n image: user.image ?? null,\n role: user.role ?? null,\n permissions: user.permissions as string[] | undefined,\n organizationId: user.organizationId ?? null,\n }\n : null\n\n return (\n <PlatformShell\n items={items}\n launchpadPageOrder={pageOrder}\n user={shellUser}\n authStatus={status}\n onSignOut={handleSignOut}\n dockPosition={dockPosition}\n dockAutoHide={dockAutoHide}\n dockEnabled={dockEnabled}\n resolvedTheme={resolvedTheme}\n onToggleTheme={handleToggleTheme}\n pathname={pathname}\n onNavigate={handleNavigate}\n onPrefetch={handlePrefetch}\n appName={appName}\n appIcon={appIcon ?? <RectangleStackIcon className=\"h-full w-full\" />}\n appLogo={appLogo}\n appGradient={appGradient}\n dashboardIcon={dashboardIcon ?? HomeIcon}\n notificationCount={history.length}\n onNotifications={openHistory}\n labels={{\n home: tCommon('home'),\n profile: tCommon('profile'),\n signOut: tCommon('signOut'),\n signOutConfirmTitle: tCommon('signOutConfirmTitle'),\n cancel: tCommon('cancel'),\n notifications: tCommon('notifications'),\n theme: tCommon('theme'),\n currentTheme: resolvedTheme === 'dark' ? tCommon('darkMode') : tCommon('lightMode'),\n language: tCommon('language'),\n currentLocale: localeMeta?.nativeName ?? currentLocale,\n localeFlag: resolveFlag(currentLocale),\n actions: tCommon('actions'),\n }}\n {...(settingsModal ? { profileDrawer: settingsModal } : {})}\n >\n {children}\n </PlatformShell>\n )\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  "use client";
2
- import { InlineSpinner, SectionCard, StatusBadge, Badge, Button, ListCard, ListCardItem } from './chunk-JN6IL6OH.mjs';
2
+ import { useAuth, InlineSpinner, SectionCard, StatusBadge, Badge, Button, ListCard, ListCardItem } from './chunk-AGGOHPMZ.mjs';
3
3
  import { triggerHaptic } from './chunk-D2JF6C3E.mjs';
4
4
  import { useTranslations, useFormatter } from './chunk-7VJ7CMMT.mjs';
5
5
  import { useState, useCallback, useEffect } from 'react';
6
- import { useAuth } from '@datatechsolutions/windsock/client';
7
6
  import { jsx, jsxs } from 'react/jsx-runtime';
8
7
 
9
8
  var TIER_ORDER = {
@@ -41,7 +40,9 @@ function BillingPanel({
41
40
  ]);
42
41
  setSubscription(sub);
43
42
  setPlans(
44
- [...availablePlans].filter((plan) => plan.active).sort((a, b) => (TIER_ORDER[a.tier] ?? 0) - (TIER_ORDER[b.tier] ?? 0))
43
+ [...availablePlans].filter((plan) => plan.active).sort(
44
+ (a, b) => (TIER_ORDER[a.tier] ?? 0) - (TIER_ORDER[b.tier] ?? 0)
45
+ )
45
46
  );
46
47
  } catch (loadError) {
47
48
  setError(loadError instanceof Error ? loadError.message : String(loadError));
@@ -233,5 +234,5 @@ function BillingPanel({
233
234
  }
234
235
 
235
236
  export { BillingPanel };
236
- //# sourceMappingURL=chunk-R4TQWXNG.mjs.map
237
- //# sourceMappingURL=chunk-R4TQWXNG.mjs.map
237
+ //# sourceMappingURL=chunk-NVQWHJQH.mjs.map
238
+ //# sourceMappingURL=chunk-NVQWHJQH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/billing/billing-panel.tsx"],"names":[],"mappings":"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","file":"chunk-NVQWHJQH.mjs","sourcesContent":["// =============================================================================\n// @datatechsolutions/windsock/ui — BillingPanel\n// Shows the current organization subscription plus the plan catalogue, with\n// actions for opening the Stripe portal, starting checkout, or cancelling.\n// Backed by `AuthClient.getSubscription / getPlans / createPortalSession /\n// createCheckoutSession / cancelSubscription`.\n// =============================================================================\n\nimport { useEffect, useState, useCallback } from 'react'\nimport { useTranslations, useFormatter } from '@ui/lib/i18n-context'\nimport {\n SectionCard,\n Button,\n Badge,\n StatusBadge,\n InlineSpinner,\n ListCard,\n ListCardItem,\n triggerHaptic,\n} from '@ui/index'\nimport type {\n SubscriptionDetails,\n PlanDefinition,\n SubscriptionTier,\n} from '@datatechsolutions/shared-domain'\nimport { useAuth } from '../../_auth'\n\nexport interface BillingPanelProps {\n /**\n * Which billing interval to prefer when starting checkout. Defaults to\n * `'monthly'`. Surface a toggle in the host app if both matter.\n */\n defaultBillingInterval?: 'monthly' | 'yearly'\n /**\n * Called after the portal/checkout URL is resolved. Defaults to\n * `window.location.assign(url)`. Override to open in a new tab, use a\n * router, etc.\n */\n onRedirect?: (url: string) => void\n}\n\nconst TIER_ORDER: Record<SubscriptionTier, number> = {\n free_trial: 0,\n starter: 1,\n professional: 2,\n enterprise: 3,\n}\n\nexport function BillingPanel({\n defaultBillingInterval = 'monthly',\n onRedirect,\n}: BillingPanelProps) {\n const t = useTranslations('windsock')\n const format = useFormatter()\n const { client } = useAuth()\n\n const [subscription, setSubscription] = useState<SubscriptionDetails | null>(null)\n const [plans, setPlans] = useState<PlanDefinition[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [busyAction, setBusyAction] = useState<string | null>(null)\n\n const redirect = useCallback((url: string) => {\n if (onRedirect) {\n onRedirect(url)\n } else if (typeof window !== 'undefined') {\n window.location.assign(url)\n }\n }, [onRedirect])\n\n const load = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const [sub, availablePlans] = await Promise.all([\n client.getSubscription(),\n client.getPlans(),\n ])\n setSubscription(sub)\n setPlans(\n [...availablePlans]\n .filter((plan: { active: boolean }) => plan.active)\n .sort(\n (a: { tier: SubscriptionTier }, b: { tier: SubscriptionTier }) =>\n (TIER_ORDER[a.tier] ?? 0) - (TIER_ORDER[b.tier] ?? 0),\n ),\n )\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError))\n } finally {\n setIsLoading(false)\n }\n }, [client])\n\n useEffect(() => {\n void load()\n }, [load])\n\n const handleOpenPortal = useCallback(async () => {\n setBusyAction('portal')\n triggerHaptic('light')\n try {\n const { url } = await client.createPortalSession()\n redirect(url)\n } catch (portalError) {\n setError(portalError instanceof Error ? portalError.message : String(portalError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, redirect])\n\n const handleStartCheckout = useCallback(async (planCode: string) => {\n setBusyAction(`checkout:${planCode}`)\n triggerHaptic('light')\n try {\n const { url } = await client.createCheckoutSession(planCode, defaultBillingInterval)\n redirect(url)\n } catch (checkoutError) {\n setError(checkoutError instanceof Error ? checkoutError.message : String(checkoutError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, defaultBillingInterval, redirect])\n\n const handleCancel = useCallback(async () => {\n if (typeof window !== 'undefined') {\n const confirmed = window.confirm(t('billing.cancelConfirm'))\n if (!confirmed) return\n }\n setBusyAction('cancel')\n triggerHaptic('warning')\n try {\n const result = await client.cancelSubscription()\n if (!result.success) {\n throw new Error(result.error ?? 'Subscription cancellation failed')\n }\n triggerHaptic('success')\n await load()\n } catch (cancelError) {\n setError(cancelError instanceof Error ? cancelError.message : String(cancelError))\n triggerHaptic('error')\n } finally {\n setBusyAction(null)\n }\n }, [client, load, t])\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <InlineSpinner />\n </div>\n )\n }\n\n const currentPlan = subscription?.plan ?? plans.find((plan) => plan.id === subscription?.planId) ?? null\n const currentTier = subscription?.tier ?? currentPlan?.tier ?? null\n\n return (\n <div className=\"space-y-6\">\n {error && (\n <div\n role=\"alert\"\n className=\"rounded-xl border border-red-300/40 bg-red-50/80 px-4 py-3 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-300\"\n >\n {error}\n </div>\n )}\n\n <SectionCard\n header={{\n title: t('billing.currentPlan.title'),\n subtitle: t('billing.currentPlan.description'),\n }}\n >\n {subscription && currentPlan ? (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <span className=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {currentPlan.name}\n </span>\n <StatusBadge\n status={\n subscription.status === 'active' ? 'success'\n : subscription.status === 'past_due' ? 'pending'\n : 'error'\n }\n label={t(`billing.status.${subscription.status}`)}\n />\n {subscription.cancelAtPeriodEnd && (\n <Badge color=\"amber\">{t('billing.currentPlan.cancelAtPeriodEnd')}</Badge>\n )}\n </div>\n\n <dl className=\"grid grid-cols-1 gap-3 text-sm sm:grid-cols-2\">\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.price')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.number(currentPlan.price, { style: 'currency', currency: currentPlan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${currentPlan.interval}`)}\n </dd>\n </div>\n {subscription.currentPeriodEnd && (\n <div>\n <dt className=\"text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.renewsOn')}\n </dt>\n <dd className=\"font-medium text-gray-900 dark:text-white\">\n {format.dateTime(new Date(subscription.currentPeriodEnd), { dateStyle: 'medium' })}\n </dd>\n </div>\n )}\n </dl>\n\n <div className=\"flex flex-wrap gap-2 pt-2\">\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={handleOpenPortal}\n loading={busyAction === 'portal'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.manageInPortal')}\n </Button>\n {subscription.status === 'active' && !subscription.cancelAtPeriodEnd && (\n <Button\n size=\"sm\"\n color=\"ios-glass-red\"\n onClick={handleCancel}\n loading={busyAction === 'cancel'}\n disabled={busyAction !== null}\n >\n {t('billing.currentPlan.cancel')}\n </Button>\n )}\n </div>\n </div>\n ) : (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.currentPlan.noSubscription')}\n </p>\n )}\n </SectionCard>\n\n <SectionCard\n header={{\n title: t('billing.plans.title'),\n subtitle: t('billing.plans.description'),\n }}\n >\n {plans.length === 0 ? (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {t('billing.plans.empty')}\n </p>\n ) : (\n <ListCard>\n {plans.map((plan) => {\n const isCurrent = currentPlan?.id === plan.id\n const isDowngrade = currentTier != null\n && (TIER_ORDER[plan.tier] ?? 0) < (TIER_ORDER[currentTier] ?? 0)\n return (\n <ListCardItem\n key={plan.id}\n leading={\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-500/20 to-blue-500/20 text-violet-600 dark:text-violet-300\">\n <span className=\"text-sm font-bold uppercase\">{plan.tier.charAt(0)}</span>\n </div>\n }\n trailing={\n isCurrent ? (\n <Badge color=\"green\">{t('billing.plans.currentBadge')}</Badge>\n ) : (\n isDowngrade ? (\n <Button\n size=\"sm\"\n plain\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.downgradeAction')}\n </Button>\n ) : (\n <Button\n size=\"sm\"\n color=\"ios-glass-blue\"\n onClick={() => handleStartCheckout(plan.code)}\n loading={busyAction === `checkout:${plan.code}`}\n disabled={busyAction !== null}\n >\n {t('billing.plans.selectAction')}\n </Button>\n )\n )\n }\n >\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-gray-900 dark:text-white\">\n {plan.name}\n </p>\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n {format.number(plan.price, { style: 'currency', currency: plan.currency })}\n {' '}/{' '}\n {t(`billing.interval.${plan.interval}`)}\n </span>\n </div>\n {plan.description && (\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {plan.description}\n </p>\n )}\n </div>\n </ListCardItem>\n )\n })}\n </ListCard>\n )}\n </SectionCard>\n </div>\n )\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkTIJJHW2Z_js = require('./chunk-TIJJHW2Z.js');
5
- var chunkIJAKZHXX_js = require('./chunk-IJAKZHXX.js');
4
+ var chunkYV7F7IXG_js = require('./chunk-YV7F7IXG.js');
5
+ var chunkERCDMBRT_js = require('./chunk-ERCDMBRT.js');
6
6
  var chunkDJDZIRM6_js = require('./chunk-DJDZIRM6.js');
7
- var chunkNJFRJ6YD_js = require('./chunk-NJFRJ6YD.js');
8
- var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
7
+ var chunkM7KSEUZR_js = require('./chunk-M7KSEUZR.js');
8
+ var chunkFSBR4RCK_js = require('./chunk-FSBR4RCK.js');
9
9
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
10
- var chunkF54Q2YJY_js = require('./chunk-F54Q2YJY.js');
10
+ var chunkSY4MUT5V_js = require('./chunk-SY4MUT5V.js');
11
11
  var react = require('react');
12
12
  var reactRouter = require('react-router');
13
13
  var outline = require('@heroicons/react/24/outline');
@@ -18,7 +18,7 @@ var useWebSocket = WS_ENDPOINT.length > 0;
18
18
  function connectSSE(workflowId, runId, callbacks) {
19
19
  let eventSource = null;
20
20
  let cancelled = false;
21
- chunkF54Q2YJY_js.buildAuthenticatedApiUrl(
21
+ chunkSY4MUT5V_js.buildAuthenticatedApiUrl(
22
22
  `/workflows/${encodeURIComponent(workflowId)}/runs/${encodeURIComponent(runId)}/events`,
23
23
  { includeAccessToken: true }
24
24
  ).then((url) => {
@@ -180,9 +180,9 @@ function applyWorkflowExecutionEventToStore(actions, event) {
180
180
  }
181
181
  }
182
182
  function useWorkflowRunPresentation(events, status) {
183
- const clearNodeResults = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.clearNodeResults);
184
- const setIsRunning = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.setIsRunning);
185
- const setNodeResult = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.setNodeResult);
183
+ const clearNodeResults = chunkM7KSEUZR_js.useWorkflowStore((state) => state.clearNodeResults);
184
+ const setIsRunning = chunkM7KSEUZR_js.useWorkflowStore((state) => state.setIsRunning);
185
+ const setNodeResult = chunkM7KSEUZR_js.useWorkflowStore((state) => state.setNodeResult);
186
186
  react.useEffect(() => {
187
187
  if (status === "idle") {
188
188
  resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult });
@@ -205,9 +205,9 @@ function useWorkflowExecution(workflowId) {
205
205
  const [activeRunId, setActiveRunId] = react.useState(null);
206
206
  const [isLaunching, setIsLaunching] = react.useState(false);
207
207
  const stream = useRunEvents(workflowId || null, activeRunId);
208
- const clearNodeResults = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.clearNodeResults);
209
- const setIsRunning = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.setIsRunning);
210
- const setNodeResult = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.setNodeResult);
208
+ const clearNodeResults = chunkM7KSEUZR_js.useWorkflowStore((state) => state.clearNodeResults);
209
+ const setIsRunning = chunkM7KSEUZR_js.useWorkflowStore((state) => state.setIsRunning);
210
+ const setNodeResult = chunkM7KSEUZR_js.useWorkflowStore((state) => state.setNodeResult);
211
211
  useWorkflowRunPresentation(stream.events, activeRunId ? stream.status : "idle");
212
212
  react.useEffect(() => {
213
213
  if (stream.status === "completed" || stream.status === "failed" || stream.status === "error") {
@@ -218,7 +218,7 @@ function useWorkflowExecution(workflowId) {
218
218
  if (!workflowId) return;
219
219
  setIsLaunching(true);
220
220
  try {
221
- const runRecord = await chunkF54Q2YJY_js.executeWorkflow(workflowId, inputVariables);
221
+ const runRecord = await chunkSY4MUT5V_js.executeWorkflow(workflowId, inputVariables);
222
222
  setActiveRunId(runRecord.id);
223
223
  } finally {
224
224
  setIsLaunching(false);
@@ -332,7 +332,7 @@ function AgentsWorkspace({ workflowId, messages }) {
332
332
  const tWorkflow = chunkYXN2K77G_js.useTranslations("agents.workflow");
333
333
  const tCommon = chunkYXN2K77G_js.useTranslations("common");
334
334
  const datasourceLabels = useDatasourceLabels();
335
- const { error: notifyError, success: notifySuccess } = chunkI2NZGVBG_js.useNotifications();
335
+ const { error: notifyError, success: notifySuccess } = chunkFSBR4RCK_js.useNotifications();
336
336
  const showSuccess = react.useCallback((title, message) => {
337
337
  notifySuccess(title, message);
338
338
  }, [notifySuccess]);
@@ -356,36 +356,36 @@ function AgentsWorkspace({ workflowId, messages }) {
356
356
  const [datasources, setDatasources] = react.useState([]);
357
357
  const [modelConnections, setModelConnections] = react.useState([]);
358
358
  const [showDatasourceModal, setShowDatasourceModal] = react.useState(false);
359
- const openPipelineSettingsModal = chunkNJFRJ6YD_js.useModalStore((s) => s.openPipelineSettingsModal);
359
+ const openPipelineSettingsModal = chunkM7KSEUZR_js.useModalStore((s) => s.openPipelineSettingsModal);
360
360
  const [showRunInputDialog, setShowRunInputDialog] = react.useState(false);
361
361
  const [showPreviewPanel, setShowPreviewPanel] = react.useState(false);
362
362
  const [isCreatingAgent, setIsCreatingAgent] = react.useState(false);
363
- const openSubworkflowModal = chunkIJAKZHXX_js.useSubworkflowStore((s) => s.openModal);
364
- const closeSubworkflowModal = chunkIJAKZHXX_js.useSubworkflowStore((s) => s.closeModal);
363
+ const openSubworkflowModal = chunkERCDMBRT_js.useSubworkflowStore((s) => s.openModal);
364
+ const closeSubworkflowModal = chunkERCDMBRT_js.useSubworkflowStore((s) => s.closeModal);
365
365
  const [deleteTarget, setDeleteTarget] = react.useState(null);
366
366
  const [saveStatus, setSaveStatus] = react.useState("idle");
367
367
  const latestGraphRef = react.useRef(null);
368
368
  const saveTimerRef = react.useRef(null);
369
369
  const skipInitialAutoSaveRef = react.useRef(true);
370
- const showRunPanel = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.showRunPanel);
371
- const toggleRunPanel = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.toggleRunPanel);
372
- const workflowNodes = chunkNJFRJ6YD_js.useWorkflowStore((state) => state.nodes);
370
+ const showRunPanel = chunkM7KSEUZR_js.useWorkflowStore((state) => state.showRunPanel);
371
+ const toggleRunPanel = chunkM7KSEUZR_js.useWorkflowStore((state) => state.toggleRunPanel);
372
+ const workflowNodes = chunkM7KSEUZR_js.useWorkflowStore((state) => state.nodes);
373
373
  const { execute: executeWorkflowRun, stop: stopWorkflowRun, isRunning } = useWorkflowExecution(workflowId);
374
374
  const loadWorkspaceData = react.useCallback(async () => {
375
375
  setIsLoading(true);
376
376
  setLoadError(null);
377
377
  try {
378
378
  const [workflowData, agentList, modelList, agentToolDefList, ruleList, datasourceList, connectionList] = await Promise.all([
379
- chunkF54Q2YJY_js.getWorkflowById(workflowId),
380
- chunkF54Q2YJY_js.getAgentConfigsWithPrompts(),
381
- chunkF54Q2YJY_js.getAgentModels(),
382
- chunkF54Q2YJY_js.getAgentToolDefinitions().catch(() => []),
383
- chunkF54Q2YJY_js.getAgentRules(),
384
- chunkF54Q2YJY_js.getDatasources().catch(() => []),
385
- chunkF54Q2YJY_js.listModelProviderConnections().catch(() => [])
379
+ chunkSY4MUT5V_js.getWorkflowById(workflowId),
380
+ chunkSY4MUT5V_js.getAgentConfigsWithPrompts(),
381
+ chunkSY4MUT5V_js.getAgentModels(),
382
+ chunkSY4MUT5V_js.getAgentToolDefinitions().catch(() => []),
383
+ chunkSY4MUT5V_js.getAgentRules(),
384
+ chunkSY4MUT5V_js.getDatasources().catch(() => []),
385
+ chunkSY4MUT5V_js.listModelProviderConnections().catch(() => [])
386
386
  ]);
387
387
  const toolResults = await Promise.all(
388
- agentList.map((agent) => chunkF54Q2YJY_js.getAgentTools(agent.agentId).catch(() => []))
388
+ agentList.map((agent) => chunkSY4MUT5V_js.getAgentTools(agent.agentId).catch(() => []))
389
389
  );
390
390
  const toolList = toolResults.flat();
391
391
  setWorkflow(workflowData);
@@ -416,7 +416,7 @@ function AgentsWorkspace({ workflowId, messages }) {
416
416
  const loadWorkflowList = react.useCallback(async () => {
417
417
  setIsLoadingWorkflows(true);
418
418
  try {
419
- const list = await chunkF54Q2YJY_js.getWorkflows();
419
+ const list = await chunkSY4MUT5V_js.getWorkflows();
420
420
  setWorkflows(list);
421
421
  } catch {
422
422
  setWorkflows([]);
@@ -451,7 +451,7 @@ function AgentsWorkspace({ workflowId, messages }) {
451
451
  }
452
452
  setSaveStatus("saving");
453
453
  saveTimerRef.current = setTimeout(() => {
454
- void chunkF54Q2YJY_js.saveWorkflowDraft(workflowId, graph).then((updatedWorkflow) => {
454
+ void chunkSY4MUT5V_js.saveWorkflowDraft(workflowId, graph).then((updatedWorkflow) => {
455
455
  setWorkflow(updatedWorkflow);
456
456
  setWorkflows((current) => current.map((item) => item.id === updatedWorkflow.id ? updatedWorkflow : item));
457
457
  setSaveStatus("saved");
@@ -470,7 +470,7 @@ function AgentsWorkspace({ workflowId, messages }) {
470
470
  }
471
471
  setIsPublishing(true);
472
472
  try {
473
- const published = await chunkF54Q2YJY_js.publishWorkflow(workflowId);
473
+ const published = await chunkSY4MUT5V_js.publishWorkflow(workflowId);
474
474
  setWorkflow(published);
475
475
  setWorkflows((current) => current.map((item) => item.id === published.id ? published : item));
476
476
  } finally {
@@ -482,7 +482,7 @@ function AgentsWorkspace({ workflowId, messages }) {
482
482
  navigate(`/workflows/edit?workflowId=${encodeURIComponent(selected.id)}`);
483
483
  }, [navigate, workflowId]);
484
484
  const handleCreateWorkflow = react.useCallback(async () => {
485
- const created = await chunkF54Q2YJY_js.createWorkflow({
485
+ const created = await chunkSY4MUT5V_js.createWorkflow({
486
486
  name: tWorkflow("defaultWorkflowName")
487
487
  });
488
488
  navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`);
@@ -492,7 +492,7 @@ function AgentsWorkspace({ workflowId, messages }) {
492
492
  }, []);
493
493
  const confirmDelete = react.useCallback(async () => {
494
494
  if (!deleteTarget) return;
495
- await chunkF54Q2YJY_js.deleteWorkflow(deleteTarget.id);
495
+ await chunkSY4MUT5V_js.deleteWorkflow(deleteTarget.id);
496
496
  const remaining = workflows.filter((item) => item.id !== deleteTarget.id);
497
497
  if (remaining.length > 0) {
498
498
  navigate(`/workflows/edit?workflowId=${encodeURIComponent(remaining[0].id)}`);
@@ -524,13 +524,13 @@ function AgentsWorkspace({ workflowId, messages }) {
524
524
  setIsCreatingAgent(false);
525
525
  }, []);
526
526
  const handleAgentSaved = react.useCallback(async () => {
527
- const nextAgents = await chunkF54Q2YJY_js.getAgentConfigsWithPrompts();
527
+ const nextAgents = await chunkSY4MUT5V_js.getAgentConfigsWithPrompts();
528
528
  setAgents(nextAgents);
529
529
  setIsCreatingAgent(false);
530
530
  }, []);
531
531
  const handleToggleTool = react.useCallback(async (tool) => {
532
532
  try {
533
- const updated = await chunkF54Q2YJY_js.updateAgentTool(tool.toolId, { enabled: !tool.enabled });
533
+ const updated = await chunkSY4MUT5V_js.updateAgentTool(tool.toolId, { enabled: !tool.enabled });
534
534
  setTools((current) => current.map((item) => item.toolId === tool.toolId ? updated : item));
535
535
  showSuccess(
536
536
  tWorkflow("toolsSection"),
@@ -545,7 +545,7 @@ function AgentsWorkspace({ workflowId, messages }) {
545
545
  }, [showError, showSuccess, tWorkflow]);
546
546
  const handleToggleRule = react.useCallback(async (rule) => {
547
547
  try {
548
- const updated = await chunkF54Q2YJY_js.updateAgentRule(rule.ruleId, { ...rule, enabled: !rule.enabled });
548
+ const updated = await chunkSY4MUT5V_js.updateAgentRule(rule.ruleId, { ...rule, enabled: !rule.enabled });
549
549
  setRules((current) => current.map((item) => item.ruleId === rule.ruleId ? updated : item));
550
550
  showSuccess(
551
551
  tWorkflow("rulesSection"),
@@ -583,7 +583,7 @@ function AgentsWorkspace({ workflowId, messages }) {
583
583
  }, []);
584
584
  const handleSaveDatasource = react.useCallback(async (data) => {
585
585
  try {
586
- const created = await chunkF54Q2YJY_js.createDatasource(data);
586
+ const created = await chunkSY4MUT5V_js.createDatasource(data);
587
587
  setDatasources((current) => [...current, created]);
588
588
  showSuccess(tWorkflow("dataSourcesSection"), tCommon("created") ?? "Created");
589
589
  } catch (error) {
@@ -652,7 +652,7 @@ function AgentsWorkspace({ workflowId, messages }) {
652
652
  }
653
653
  if (!workflow) {
654
654
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-[calc(100vh-120px)] items-center justify-center", children: loadError ? /* @__PURE__ */ jsxRuntime.jsx(
655
- chunkI2NZGVBG_js.PageErrorState,
655
+ chunkFSBR4RCK_js.PageErrorState,
656
656
  {
657
657
  statusCode: 500,
658
658
  title: tCommon("serverError"),
@@ -663,7 +663,7 @@ function AgentsWorkspace({ workflowId, messages }) {
663
663
  retryLabel: tCommon("retry")
664
664
  }
665
665
  ) : /* @__PURE__ */ jsxRuntime.jsx(
666
- chunkI2NZGVBG_js.PageEmptyState,
666
+ chunkFSBR4RCK_js.PageEmptyState,
667
667
  {
668
668
  title: tWorkflow("emptyTitle"),
669
669
  message: tWorkflow("emptyDescription"),
@@ -671,7 +671,7 @@ function AgentsWorkspace({ workflowId, messages }) {
671
671
  }
672
672
  ) });
673
673
  }
674
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNJFRJ6YD_js.WorkflowBuilderProvider, { publishableKey: getPublishableKey(), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[calc(100vh-120px)] flex-col", "data-testid": "agents-workspace", children: [
674
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkM7KSEUZR_js.WorkflowBuilderProvider, { publishableKey: getPublishableKey(), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[calc(100vh-120px)] flex-col", "data-testid": "agents-workspace", children: [
675
675
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "liquid-surface flex h-full flex-col overflow-hidden rounded-2xl", children: [
676
676
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 items-center justify-between px-5 py-3", children: [
677
677
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -693,13 +693,13 @@ function AgentsWorkspace({ workflowId, messages }) {
693
693
  children: workflow.name || tWorkflow("title")
694
694
  }
695
695
  ),
696
- /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.CopyableId, { id: workflowId, className: "text-[10px]" }),
696
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.CopyableId, { id: workflowId, className: "text-[10px]" }),
697
697
  workflow.isDraft ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-amber-100 px-2.5 py-0.5 text-[10px] font-semibold text-amber-800 dark:bg-amber-900/30 dark:text-amber-300", children: tWorkflow("draftBadge") }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full bg-green-100 px-2.5 py-0.5 text-[10px] font-semibold text-green-800 dark:bg-green-900/30 dark:text-green-300", children: tWorkflow("published") }),
698
- /* @__PURE__ */ jsxRuntime.jsx(chunkIJAKZHXX_js.SaveStatusBadge, { status: saveStatus })
698
+ /* @__PURE__ */ jsxRuntime.jsx(chunkERCDMBRT_js.SaveStatusBadge, { status: saveStatus })
699
699
  ] }),
700
700
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
701
701
  /* @__PURE__ */ jsxRuntime.jsx(
702
- chunkI2NZGVBG_js.Button,
702
+ chunkFSBR4RCK_js.Button,
703
703
  {
704
704
  size: "xs",
705
705
  plain: true,
@@ -708,11 +708,11 @@ function AgentsWorkspace({ workflowId, messages }) {
708
708
  children: /* @__PURE__ */ jsxRuntime.jsx(outline.ChartBarIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" })
709
709
  }
710
710
  ),
711
- isRunning ? /* @__PURE__ */ jsxRuntime.jsxs(chunkI2NZGVBG_js.Button, { size: "xs", outline: true, onClick: stopWorkflowRun, children: [
711
+ isRunning ? /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.Button, { size: "xs", outline: true, onClick: stopWorkflowRun, children: [
712
712
  /* @__PURE__ */ jsxRuntime.jsx(outline.StopIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
713
713
  tWorkflow("runPanel.stop")
714
714
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs(
715
- chunkI2NZGVBG_js.Button,
715
+ chunkFSBR4RCK_js.Button,
716
716
  {
717
717
  size: "xs",
718
718
  outline: true,
@@ -725,7 +725,7 @@ function AgentsWorkspace({ workflowId, messages }) {
725
725
  ]
726
726
  }
727
727
  ),
728
- /* @__PURE__ */ jsxRuntime.jsxs(chunkI2NZGVBG_js.Button, { gradient: true, size: "xs", onClick: () => {
728
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.Button, { gradient: true, size: "xs", onClick: () => {
729
729
  void handlePublish();
730
730
  }, disabled: isPublishing, children: [
731
731
  /* @__PURE__ */ jsxRuntime.jsx(outline.DocumentCheckIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
@@ -735,7 +735,7 @@ function AgentsWorkspace({ workflowId, messages }) {
735
735
  ] }),
736
736
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "liquid-divider border-t" }),
737
737
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pt-3", children: /* @__PURE__ */ jsxRuntime.jsx(
738
- chunkIJAKZHXX_js.WorkflowListBar,
738
+ chunkERCDMBRT_js.WorkflowListBar,
739
739
  {
740
740
  workflows,
741
741
  activeWorkflowId: workflowId,
@@ -751,7 +751,7 @@ function AgentsWorkspace({ workflowId, messages }) {
751
751
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "liquid-divider border-t" }),
752
752
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [
753
753
  /* @__PURE__ */ jsxRuntime.jsx(
754
- chunkIJAKZHXX_js.NodePalette,
754
+ chunkERCDMBRT_js.NodePalette,
755
755
  {
756
756
  agents,
757
757
  tools,
@@ -773,7 +773,7 @@ function AgentsWorkspace({ workflowId, messages }) {
773
773
  }
774
774
  ),
775
775
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
776
- chunkIJAKZHXX_js.AutoSaveWorkspace,
776
+ chunkERCDMBRT_js.AutoSaveWorkspace,
777
777
  {
778
778
  workflowId,
779
779
  className: "h-full w-full",
@@ -786,8 +786,8 @@ function AgentsWorkspace({ workflowId, messages }) {
786
786
  agentTools: agentToolDefs,
787
787
  rules,
788
788
  datasources: datasourceDefinitions,
789
- onLoadTables: chunkF54Q2YJY_js.getDatasourceTables,
790
- onLoadSchema: chunkF54Q2YJY_js.getDatasourceSchema,
789
+ onLoadTables: chunkSY4MUT5V_js.getDatasourceTables,
790
+ onLoadSchema: chunkSY4MUT5V_js.getDatasourceSchema,
791
791
  onEditTool: handleEditTool,
792
792
  onToggleTool: handleToggleTool,
793
793
  onToggleRule: handleToggleRule,
@@ -801,7 +801,7 @@ function AgentsWorkspace({ workflowId, messages }) {
801
801
  latestGraphRef.current = graph;
802
802
  },
803
803
  renderAgentModal: (props) => /* @__PURE__ */ jsxRuntime.jsx(
804
- chunkIJAKZHXX_js.AgentModal,
804
+ chunkERCDMBRT_js.AgentModal,
805
805
  {
806
806
  ...props,
807
807
  onSaved: () => {
@@ -830,9 +830,9 @@ function AgentsWorkspace({ workflowId, messages }) {
830
830
  agentToolIds: payload.enabledToolIds
831
831
  };
832
832
  if (payload.agentId) {
833
- await chunkF54Q2YJY_js.updateAgentConfig(payload.agentId, body);
833
+ await chunkSY4MUT5V_js.updateAgentConfig(payload.agentId, body);
834
834
  } else {
835
- await chunkF54Q2YJY_js.createAgentConfig(body);
835
+ await chunkSY4MUT5V_js.createAgentConfig(body);
836
836
  }
837
837
  }
838
838
  }
@@ -842,7 +842,7 @@ function AgentsWorkspace({ workflowId, messages }) {
842
842
  ] })
843
843
  ] }),
844
844
  /* @__PURE__ */ jsxRuntime.jsx(
845
- chunkIJAKZHXX_js.PipelineSettingsModal,
845
+ chunkERCDMBRT_js.PipelineSettingsModal,
846
846
  {
847
847
  onSave: async (changes) => {
848
848
  const metadata = {
@@ -852,14 +852,14 @@ function AgentsWorkspace({ workflowId, messages }) {
852
852
  if (changes.slug !== void 0) metadata.slug = changes.slug;
853
853
  if (changes.isDraft !== void 0) metadata.isDraft = changes.isDraft;
854
854
  if (changes.isActive !== void 0) metadata.isActive = changes.isActive;
855
- const updated = latestGraphRef.current ? await chunkF54Q2YJY_js.saveWorkflowDraft(workflowId, latestGraphRef.current, metadata) : await chunkF54Q2YJY_js.updateWorkflowSettings(workflowId, metadata);
855
+ const updated = latestGraphRef.current ? await chunkSY4MUT5V_js.saveWorkflowDraft(workflowId, latestGraphRef.current, metadata) : await chunkSY4MUT5V_js.updateWorkflowSettings(workflowId, metadata);
856
856
  setWorkflow(updated);
857
857
  setWorkflows((current) => current.map((item) => item.id === updated.id ? updated : item));
858
858
  }
859
859
  }
860
860
  ),
861
861
  /* @__PURE__ */ jsxRuntime.jsx(
862
- chunkIJAKZHXX_js.SubworkflowModal,
862
+ chunkERCDMBRT_js.SubworkflowModal,
863
863
  {
864
864
  onMaximize: (subworkflowId) => {
865
865
  closeSubworkflowModal();
@@ -868,14 +868,14 @@ function AgentsWorkspace({ workflowId, messages }) {
868
868
  onSaved: async (saved) => {
869
869
  const isNew = !saved.toolId;
870
870
  if (isNew) {
871
- const created = await chunkF54Q2YJY_js.createWorkflow({
871
+ const created = await chunkSY4MUT5V_js.createWorkflow({
872
872
  name: saved.name,
873
873
  description: saved.description
874
874
  });
875
875
  closeSubworkflowModal();
876
876
  navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`);
877
877
  } else {
878
- const updated = await chunkF54Q2YJY_js.updateAgentTool(saved.toolId, saved);
878
+ const updated = await chunkSY4MUT5V_js.updateAgentTool(saved.toolId, saved);
879
879
  setTools((current) => current.map((item) => item.toolId === saved.toolId ? updated : item));
880
880
  closeSubworkflowModal();
881
881
  }
@@ -883,7 +883,7 @@ function AgentsWorkspace({ workflowId, messages }) {
883
883
  }
884
884
  ),
885
885
  /* @__PURE__ */ jsxRuntime.jsx(
886
- chunkIJAKZHXX_js.RunPanel,
886
+ chunkERCDMBRT_js.RunPanel,
887
887
  {
888
888
  open: showRunPanel,
889
889
  onClose: toggleRunPanel,
@@ -892,7 +892,7 @@ function AgentsWorkspace({ workflowId, messages }) {
892
892
  }
893
893
  ),
894
894
  /* @__PURE__ */ jsxRuntime.jsx(
895
- chunkIJAKZHXX_js.RunInputDialog,
895
+ chunkERCDMBRT_js.RunInputDialog,
896
896
  {
897
897
  open: showRunInputDialog,
898
898
  onClose: () => setShowRunInputDialog(false),
@@ -905,16 +905,16 @@ function AgentsWorkspace({ workflowId, messages }) {
905
905
  }
906
906
  ),
907
907
  /* @__PURE__ */ jsxRuntime.jsx(
908
- chunkIJAKZHXX_js.PreviewPanel,
908
+ chunkERCDMBRT_js.PreviewPanel,
909
909
  {
910
910
  open: showPreviewPanel,
911
911
  onClose: () => setShowPreviewPanel(false),
912
912
  workflowId,
913
- loadRuns: chunkF54Q2YJY_js.getWorkflowRuns
913
+ loadRuns: chunkSY4MUT5V_js.getWorkflowRuns
914
914
  }
915
915
  ),
916
916
  /* @__PURE__ */ jsxRuntime.jsx(
917
- chunkTIJJHW2Z_js.DatasourceFormModal,
917
+ chunkYV7F7IXG_js.DatasourceFormModal,
918
918
  {
919
919
  open: showDatasourceModal,
920
920
  onClose: () => setShowDatasourceModal(false),
@@ -925,7 +925,7 @@ function AgentsWorkspace({ workflowId, messages }) {
925
925
  }
926
926
  ),
927
927
  /* @__PURE__ */ jsxRuntime.jsx(
928
- chunkI2NZGVBG_js.DynamicIslandConfirm,
928
+ chunkFSBR4RCK_js.DynamicIslandConfirm,
929
929
  {
930
930
  open: deleteTarget !== null,
931
931
  onClose: () => setDeleteTarget(null),
@@ -944,5 +944,5 @@ exports.resetWorkflowRunPresentation = resetWorkflowRunPresentation;
944
944
  exports.useRunEvents = useRunEvents;
945
945
  exports.useWorkflowExecution = useWorkflowExecution;
946
946
  exports.useWorkflowRunPresentation = useWorkflowRunPresentation;
947
- //# sourceMappingURL=chunk-ZL6C2ZAF.js.map
948
- //# sourceMappingURL=chunk-ZL6C2ZAF.js.map
947
+ //# sourceMappingURL=chunk-PGVZKMOA.js.map
948
+ //# sourceMappingURL=chunk-PGVZKMOA.js.map