@datatechsolutions/ui 3.11.1 → 3.11.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.
- package/dist/astrlabe/index.js +108 -108
- package/dist/astrlabe/index.mjs +4 -4
- package/dist/astrlabe/workflow-canvas.js +4 -4
- package/dist/astrlabe/workflow-canvas.mjs +3 -3
- package/dist/{chunk-ZUU7G3PC.js → chunk-22XPYFHJ.js} +2 -2
- package/dist/chunk-22XPYFHJ.js.map +1 -0
- package/dist/{chunk-OSXBMLZP.js → chunk-3BFQ3SVG.js} +68 -68
- package/dist/{chunk-OSXBMLZP.js.map → chunk-3BFQ3SVG.js.map} +1 -1
- package/dist/{chunk-MN777KLN.js → chunk-3J4E2THD.js} +45 -45
- package/dist/{chunk-MN777KLN.js.map → chunk-3J4E2THD.js.map} +1 -1
- package/dist/{chunk-QKWNQOJB.mjs → chunk-4PUVECVF.mjs} +3 -3
- package/dist/{chunk-QKWNQOJB.mjs.map → chunk-4PUVECVF.mjs.map} +1 -1
- package/dist/{chunk-CLXEVSGB.js → chunk-5JS3UFBF.js} +13 -13
- package/dist/{chunk-CLXEVSGB.js.map → chunk-5JS3UFBF.js.map} +1 -1
- package/dist/{chunk-OD2AZBEX.js → chunk-5NKGJV72.js} +25 -25
- package/dist/{chunk-OD2AZBEX.js.map → chunk-5NKGJV72.js.map} +1 -1
- package/dist/{chunk-E3NMVWRL.mjs → chunk-5TJR3VJ6.mjs} +85 -73
- package/dist/chunk-5TJR3VJ6.mjs.map +1 -0
- package/dist/{chunk-QASAHGLE.js → chunk-5Y67PZWC.js} +4 -4
- package/dist/{chunk-QASAHGLE.js.map → chunk-5Y67PZWC.js.map} +1 -1
- package/dist/{chunk-TIJXCRM4.js → chunk-6R5Z2IQ5.js} +5 -5
- package/dist/{chunk-TIJXCRM4.js.map → chunk-6R5Z2IQ5.js.map} +1 -1
- package/dist/{chunk-Q6MMJYEG.mjs → chunk-AVLOGVVA.mjs} +3 -3
- package/dist/{chunk-Q6MMJYEG.mjs.map → chunk-AVLOGVVA.mjs.map} +1 -1
- package/dist/{chunk-SSKKTSMA.js → chunk-BGLYJ7GR.js} +35 -35
- package/dist/{chunk-SSKKTSMA.js.map → chunk-BGLYJ7GR.js.map} +1 -1
- package/dist/{chunk-OKCEK7GH.mjs → chunk-D5FL3ZHC.mjs} +3 -3
- package/dist/{chunk-OKCEK7GH.mjs.map → chunk-D5FL3ZHC.mjs.map} +1 -1
- package/dist/{chunk-KDVZIDVF.js → chunk-GDVB7QDZ.js} +28 -28
- package/dist/{chunk-KDVZIDVF.js.map → chunk-GDVB7QDZ.js.map} +1 -1
- package/dist/{chunk-DPXCJVJT.js → chunk-HLIMHIRH.js} +9 -9
- package/dist/{chunk-DPXCJVJT.js.map → chunk-HLIMHIRH.js.map} +1 -1
- package/dist/{chunk-IHOCYBHM.mjs → chunk-JBXNEOFB.mjs} +3 -3
- package/dist/{chunk-IHOCYBHM.mjs.map → chunk-JBXNEOFB.mjs.map} +1 -1
- package/dist/{chunk-3U3CIARA.mjs → chunk-JXROBMRU.mjs} +3 -3
- package/dist/{chunk-3U3CIARA.mjs.map → chunk-JXROBMRU.mjs.map} +1 -1
- package/dist/{chunk-S4LHC5SF.mjs → chunk-KGC5CRS7.mjs} +3 -3
- package/dist/{chunk-S4LHC5SF.mjs.map → chunk-KGC5CRS7.mjs.map} +1 -1
- package/dist/{chunk-VHU5FWFB.mjs → chunk-LBCUQ4FY.mjs} +3 -3
- package/dist/{chunk-VHU5FWFB.mjs.map → chunk-LBCUQ4FY.mjs.map} +1 -1
- package/dist/{chunk-BTMHQCDB.js → chunk-LW2LFJZ7.js} +66 -64
- package/dist/chunk-LW2LFJZ7.js.map +1 -0
- package/dist/{chunk-I77TTBYO.mjs → chunk-M64U336M.mjs} +6 -6
- package/dist/{chunk-I77TTBYO.mjs.map → chunk-M64U336M.mjs.map} +1 -1
- package/dist/{chunk-OO4YMN4P.js → chunk-MCHTZ63Q.js} +4 -4
- package/dist/{chunk-OO4YMN4P.js.map → chunk-MCHTZ63Q.js.map} +1 -1
- package/dist/{chunk-CVCMJJ56.js → chunk-N5FWIT7N.js} +10 -10
- package/dist/{chunk-CVCMJJ56.js.map → chunk-N5FWIT7N.js.map} +1 -1
- package/dist/{chunk-K3LIDGMA.mjs → chunk-N7T4X6A7.mjs} +3 -3
- package/dist/{chunk-K3LIDGMA.mjs.map → chunk-N7T4X6A7.mjs.map} +1 -1
- package/dist/{chunk-IGOMJHC6.mjs → chunk-NBW6WJQT.mjs} +2 -2
- package/dist/chunk-NBW6WJQT.mjs.map +1 -0
- package/dist/{chunk-QDW3IJIL.mjs → chunk-NDGYIHJ3.mjs} +3 -3
- package/dist/{chunk-QDW3IJIL.mjs.map → chunk-NDGYIHJ3.mjs.map} +1 -1
- package/dist/{chunk-S46LUR7O.mjs → chunk-OZEOBZOW.mjs} +10 -8
- package/dist/chunk-OZEOBZOW.mjs.map +1 -0
- package/dist/{chunk-O4DIKNNH.mjs → chunk-RUWUH7DW.mjs} +3 -3
- package/dist/{chunk-O4DIKNNH.mjs.map → chunk-RUWUH7DW.mjs.map} +1 -1
- package/dist/{chunk-NW32BM3F.js → chunk-TXI3QDYE.js} +34 -34
- package/dist/{chunk-NW32BM3F.js.map → chunk-TXI3QDYE.js.map} +1 -1
- package/dist/{chunk-7DZ2C5IN.mjs → chunk-TZA5T4MJ.mjs} +4 -4
- package/dist/{chunk-7DZ2C5IN.mjs.map → chunk-TZA5T4MJ.mjs.map} +1 -1
- package/dist/{chunk-LM6BJOKX.js → chunk-V32NUE5U.js} +55 -55
- package/dist/{chunk-LM6BJOKX.js.map → chunk-V32NUE5U.js.map} +1 -1
- package/dist/{chunk-LHAOIPYP.mjs → chunk-WSXP645I.mjs} +3 -3
- package/dist/{chunk-LHAOIPYP.mjs.map → chunk-WSXP645I.mjs.map} +1 -1
- package/dist/{chunk-APONR6ZM.js → chunk-Y4YIGEX6.js} +213 -201
- package/dist/chunk-Y4YIGEX6.js.map +1 -0
- package/dist/index.js +663 -663
- package/dist/index.mjs +2 -2
- package/dist/platform/admin/index.js +10 -10
- package/dist/platform/admin/index.mjs +4 -4
- package/dist/platform/agents-workspace.js +7 -7
- package/dist/platform/agents-workspace.mjs +6 -6
- package/dist/platform/app-shell.js +4 -4
- package/dist/platform/app-shell.mjs +3 -3
- package/dist/platform/auth/index.js +22 -22
- package/dist/platform/auth/index.mjs +4 -4
- package/dist/platform/billing/index.js +4 -4
- package/dist/platform/billing/index.mjs +3 -3
- package/dist/platform/impersonation/index.js +4 -4
- package/dist/platform/impersonation/index.mjs +3 -3
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +82 -82
- package/dist/platform/index.mjs +18 -18
- package/dist/platform/pages/index.d.mts +2 -2
- package/dist/platform/pages/index.d.ts +2 -2
- package/dist/platform/pages/index.js +319 -319
- package/dist/platform/pages/index.mjs +8 -8
- package/dist/platform/settings/index.js +7 -7
- package/dist/platform/settings/index.mjs +6 -6
- package/dist/platform/workflow-api-client.d.mts +1 -1
- package/dist/platform/workflow-api-client.d.ts +1 -1
- package/dist/platform/workflow-api-client.js +62 -62
- package/dist/platform/workflow-api-client.mjs +1 -1
- package/dist/platform/workflow-canvas-shell.js +5 -5
- package/dist/platform/workflow-canvas-shell.mjs +4 -4
- package/dist/{workflow-api-client-E1QFRgeP.d.ts → workflow-api-client-CThkBj5j.d.ts} +4 -0
- package/dist/{workflow-api-client-D9_0Spdz.d.mts → workflow-api-client-crR8L7fy.d.mts} +4 -0
- package/package.json +1 -1
- package/dist/chunk-APONR6ZM.js.map +0 -1
- package/dist/chunk-BTMHQCDB.js.map +0 -1
- package/dist/chunk-E3NMVWRL.mjs.map +0 -1
- package/dist/chunk-IGOMJHC6.mjs.map +0 -1
- package/dist/chunk-S46LUR7O.mjs.map +0 -1
- package/dist/chunk-ZUU7G3PC.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-QDW3IJIL.mjs","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 * When the appIcon is a brand SVG that has its own background\n * (gradient, fill, etc), set this to true so the BrandedLoader\n * doesn't wrap it in a second gradient container.\n */\n appIconRaw?: boolean\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 appIconRaw,\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 appIconRaw={appIconRaw}\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
|
+
{"version":3,"sources":["../src/platform/platform-state-provider.tsx","../src/platform/app-shell.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-NDGYIHJ3.mjs","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 * When the appIcon is a brand SVG that has its own background\n * (gradient, fill, etc), set this to true so the BrandedLoader\n * doesn't wrap it in a second gradient container.\n */\n appIconRaw?: boolean\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 appIconRaw,\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 appIconRaw={appIconRaw}\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,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { DatasourceFormModal } from './chunk-
|
|
3
|
-
import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-
|
|
2
|
+
import { DatasourceFormModal } from './chunk-KGC5CRS7.mjs';
|
|
3
|
+
import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-5TJR3VJ6.mjs';
|
|
4
4
|
import { validateWorkflowGraph } from './chunk-LEXBTVGM.mjs';
|
|
5
|
-
import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-
|
|
6
|
-
import { useNotifications, PageErrorState, PageEmptyState, CopyableId, DynamicIslandConfirm } from './chunk-
|
|
5
|
+
import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-JBXNEOFB.mjs';
|
|
6
|
+
import { useNotifications, PageErrorState, PageEmptyState, CopyableId, DynamicIslandConfirm } from './chunk-D5FL3ZHC.mjs';
|
|
7
7
|
import { useLocale, useTranslations } from './chunk-7VJ7CMMT.mjs';
|
|
8
|
-
import { executeWorkflow, getWorkflowById, getAgentConfigsWithPrompts, getAgentModels, getAgentToolDefinitions, getAgentRules, getDatasources, listModelProviderConnections, getAgentTools, getWorkflows, saveWorkflowDraft, publishWorkflow, createWorkflow, deleteWorkflow, updateAgentTool, updateAgentRule, createDatasource, getDatasourceSchema, getDatasourceTables, updateAgentConfig, createAgentConfig, updateWorkflowSettings, getWorkflowRuns, buildAuthenticatedApiUrl } from './chunk-
|
|
8
|
+
import { executeWorkflow, getWorkflowById, getAgentConfigsWithPrompts, getAgentModels, getAgentToolDefinitions, getAgentRules, getDatasources, listModelProviderConnections, getAgentTools, getWorkflows, saveWorkflowDraft, publishWorkflow, createWorkflow, deleteWorkflow, updateAgentTool, updateAgentRule, createDatasource, getDatasourceSchema, getDatasourceTables, updateAgentConfig, createAgentConfig, updateWorkflowSettings, getWorkflowRuns, buildAuthenticatedApiUrl } from './chunk-NBW6WJQT.mjs';
|
|
9
9
|
import { Button } from './chunk-WR55H7DH.mjs';
|
|
10
10
|
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
11
11
|
import { useNavigate } from 'react-router';
|
|
@@ -481,8 +481,10 @@ function AgentsWorkspace({ workflowId, messages }) {
|
|
|
481
481
|
navigate(`/workflows/edit?workflowId=${encodeURIComponent(selected.id)}`);
|
|
482
482
|
}, [navigate, workflowId]);
|
|
483
483
|
const handleCreateWorkflow = useCallback(async () => {
|
|
484
|
+
const slug = `pipeline-${crypto.randomUUID().replace(/-/g, "").slice(0, 8)}`;
|
|
484
485
|
const created = await createWorkflow({
|
|
485
|
-
name: tWorkflow("defaultWorkflowName")
|
|
486
|
+
name: tWorkflow("defaultWorkflowName"),
|
|
487
|
+
slug
|
|
486
488
|
});
|
|
487
489
|
navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`);
|
|
488
490
|
}, [navigate, tWorkflow]);
|
|
@@ -938,5 +940,5 @@ function AgentsWorkspace({ workflowId, messages }) {
|
|
|
938
940
|
}
|
|
939
941
|
|
|
940
942
|
export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation };
|
|
941
|
-
//# sourceMappingURL=chunk-
|
|
942
|
-
//# sourceMappingURL=chunk-
|
|
943
|
+
//# sourceMappingURL=chunk-OZEOBZOW.mjs.map
|
|
944
|
+
//# sourceMappingURL=chunk-OZEOBZOW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-run-events.ts","../src/hooks/use-workflow-run-presentation.ts","../src/hooks/use-workflow-execution.ts","../src/platform/agents-workspace.tsx"],"names":["useEffect","useState","useCallback","useRef","workflow"],"mappings":"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","file":"chunk-OZEOBZOW.mjs","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { WorkflowExecutionEvent } from '@datatechsolutions/shared-domain/common'\nimport { buildAuthenticatedApiUrl } from '@ui/platform/workflow-api-client'\n\nexport type RunEventStreamState = {\n /** All events received so far, in order */\n events: WorkflowExecutionEvent[]\n /** Whether the stream is currently connected */\n isStreaming: boolean\n /** Terminal status once the workflow finishes */\n status: 'idle' | 'streaming' | 'completed' | 'failed' | 'error'\n /** Error message if stream errored */\n error: string | null\n}\n\n/**\n * Detect transport based on environment.\n * - VITE_WS_ENDPOINT set → WebSocket (AWS production)\n * - otherwise → SSE (local dev, Kafka-backed)\n */\nconst WS_ENDPOINT = import.meta.env.VITE_WS_ENDPOINT ?? ''\nconst useWebSocket = WS_ENDPOINT.length > 0\n\n// ── SSE transport (local dev) ───────────────────────────────────────\n\nfunction connectSSE(\n workflowId: string,\n runId: string,\n callbacks: StreamCallbacks,\n): () => void {\n // EventSource cannot set an Authorization header, so the SSE endpoint\n // also accepts the JWT via `?accessToken=`. The Rust handler promotes it\n // to `Authorization: Bearer` before the standard JWT middleware runs.\n let eventSource: EventSource | null = null\n let cancelled = false\n\n buildAuthenticatedApiUrl(\n `/workflows/${encodeURIComponent(workflowId)}/runs/${encodeURIComponent(runId)}/events`,\n { includeAccessToken: true },\n )\n .then((url) => {\n if (cancelled) return\n eventSource = new EventSource(url)\n\n eventSource.addEventListener('connected', () => callbacks.onConnected())\n\n eventSource.addEventListener('execution', (messageEvent) => {\n try {\n callbacks.onEvent(JSON.parse(messageEvent.data) as WorkflowExecutionEvent)\n } catch { /* ignore malformed */ }\n })\n\n eventSource.addEventListener('done', (messageEvent) => {\n try {\n const data = JSON.parse(messageEvent.data) as { status: string }\n callbacks.onDone(data.status === 'run_completed' ? 'completed' : 'failed')\n } catch {\n callbacks.onDone('completed')\n }\n eventSource?.close()\n })\n\n eventSource.addEventListener('error', () => {\n eventSource?.close()\n callbacks.onError()\n })\n })\n .catch(() => callbacks.onError())\n\n return () => {\n cancelled = true\n eventSource?.close()\n }\n}\n\n// ── WebSocket transport (AWS production) ────────────────────────────\n\nfunction connectWebSocket(\n _workflowId: string,\n runId: string,\n callbacks: StreamCallbacks,\n): () => void {\n const ws = new WebSocket(WS_ENDPOINT)\n\n ws.addEventListener('open', () => {\n // Subscribe to the specific run\n ws.send(JSON.stringify({ action: 'subscribe', runId }))\n callbacks.onConnected()\n })\n\n ws.addEventListener('message', (messageEvent) => {\n try {\n const data = JSON.parse(messageEvent.data as string) as WorkflowExecutionEvent\n if (data.type === 'run_completed' || data.type === 'run_failed') {\n callbacks.onDone(data.type === 'run_completed' ? 'completed' : 'failed')\n ws.send(JSON.stringify({ action: 'unsubscribe', runId }))\n ws.close()\n return\n }\n callbacks.onEvent(data)\n } catch { /* ignore malformed */ }\n })\n\n ws.addEventListener('error', () => {\n callbacks.onError()\n })\n\n ws.addEventListener('close', () => {\n // If not explicitly closed by us, treat as error for reconnect\n })\n\n return () => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ action: 'unsubscribe', runId }))\n }\n ws.close()\n }\n}\n\n// ── Shared callback interface ───────────────────────────────────────\n\ntype StreamCallbacks = {\n onConnected: () => void\n onEvent: (event: WorkflowExecutionEvent) => void\n onDone: (status: 'completed' | 'failed') => void\n onError: () => void\n}\n\n// ── Hook ────────────────────────────────────────────────────────────\n\n/**\n * React hook that subscribes to real-time workflow execution events.\n *\n * Automatically selects transport:\n * - WebSocket when VITE_WS_ENDPOINT is set (AWS production)\n * - SSE when running locally (Kafka-backed)\n *\n * The stream auto-closes when the workflow completes or fails.\n * Reconnects automatically if the connection drops (up to 3 retries).\n */\nexport function useRunEvents(\n workflowId: string | null,\n runId: string | null,\n): RunEventStreamState {\n const [events, setEvents] = useState<WorkflowExecutionEvent[]>([])\n const [status, setStatus] = useState<RunEventStreamState['status']>('idle')\n const [error, setError] = useState<string | null>(null)\n const cleanupRef = useRef<(() => void) | null>(null)\n const retriesRef = useRef(0)\n\n const connect = useCallback(() => {\n if (!workflowId || !runId) return\n\n const connectFn = useWebSocket ? connectWebSocket : connectSSE\n\n const callbacks: StreamCallbacks = {\n onConnected: () => {\n setStatus('streaming')\n setError(null)\n retriesRef.current = 0\n },\n onEvent: (event) => {\n setEvents((prev) => [...prev, event])\n },\n onDone: (terminalStatus) => {\n setStatus(terminalStatus)\n cleanupRef.current = null\n },\n onError: () => {\n cleanupRef.current = null\n if (retriesRef.current < 3) {\n retriesRef.current++\n const delay = Math.min(1000 * Math.pow(2, retriesRef.current - 1), 5000)\n setTimeout(connect, delay)\n } else {\n setStatus('error')\n setError('Connection lost after 3 retries')\n }\n },\n }\n\n cleanupRef.current = connectFn(workflowId, runId, callbacks)\n }, [workflowId, runId])\n\n useEffect(() => {\n if (!workflowId || !runId) return\n\n setEvents([])\n setStatus('streaming')\n setError(null)\n retriesRef.current = 0\n\n connect()\n\n return () => {\n if (cleanupRef.current) {\n cleanupRef.current()\n cleanupRef.current = null\n }\n }\n }, [workflowId, runId, connect])\n\n return {\n events,\n isStreaming: status === 'streaming',\n status,\n error,\n }\n}\n","import { useEffect } from 'react'\nimport type { WorkflowExecutionEvent } from '@datatechsolutions/shared-domain/common'\nimport { useWorkflowStore, type NodeRunResult } from '@ui/astrlabe'\nimport type { RunEventStreamState } from './use-run-events'\n\ntype WorkflowRunPresentationActions = {\n clearNodeResults: () => void\n setIsRunning: (running: boolean) => void\n setNodeResult: (nodeId: string, result: NodeRunResult) => void\n}\n\nexport function resetWorkflowRunPresentation(actions: WorkflowRunPresentationActions): void {\n actions.clearNodeResults()\n actions.setIsRunning(false)\n}\n\nexport function applyWorkflowExecutionEventToStore(\n actions: WorkflowRunPresentationActions,\n event: WorkflowExecutionEvent,\n): void {\n switch (event.type) {\n case 'run_started':\n actions.clearNodeResults()\n actions.setIsRunning(true)\n return\n case 'node_started':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'running',\n durationMs: event.durationMs,\n })\n return\n case 'node_completed':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'success',\n data: event.outputs,\n durationMs: event.durationMs,\n })\n return\n case 'node_error':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'error',\n error: event.error,\n durationMs: event.durationMs,\n })\n return\n case 'run_completed':\n case 'run_failed':\n actions.setIsRunning(false)\n return\n default:\n return\n }\n}\n\nexport function useWorkflowRunPresentation(\n events: WorkflowExecutionEvent[],\n status: RunEventStreamState['status'],\n): void {\n const clearNodeResults = useWorkflowStore((state) => state.clearNodeResults)\n const setIsRunning = useWorkflowStore((state) => state.setIsRunning)\n const setNodeResult = useWorkflowStore((state) => state.setNodeResult)\n\n useEffect(() => {\n if (status === 'idle') {\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n return\n }\n\n clearNodeResults()\n for (const event of events) {\n applyWorkflowExecutionEventToStore({ clearNodeResults, setIsRunning, setNodeResult }, event)\n }\n\n if (status === 'completed' || status === 'failed' || status === 'error') {\n setIsRunning(false)\n } else if (status === 'streaming') {\n setIsRunning(true)\n }\n }, [clearNodeResults, events, setIsRunning, setNodeResult, status])\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type { VariableValue } from '@ui/astrlabe/contracts'\nimport { executeWorkflow } from '@ui/platform/workflow-api-client'\nimport { useRunEvents } from './use-run-events'\nimport { resetWorkflowRunPresentation, useWorkflowRunPresentation } from './use-workflow-run-presentation'\nimport { useWorkflowStore } from '@ui/astrlabe'\n\nexport function useWorkflowExecution(workflowId: string) {\n const [activeRunId, setActiveRunId] = useState<string | null>(null)\n const [isLaunching, setIsLaunching] = useState(false)\n const stream = useRunEvents(workflowId || null, activeRunId)\n const clearNodeResults = useWorkflowStore((state) => state.clearNodeResults)\n const setIsRunning = useWorkflowStore((state) => state.setIsRunning)\n const setNodeResult = useWorkflowStore((state) => state.setNodeResult)\n\n useWorkflowRunPresentation(stream.events, activeRunId ? stream.status : 'idle')\n\n useEffect(() => {\n if (stream.status === 'completed' || stream.status === 'failed' || stream.status === 'error') {\n setIsLaunching(false)\n }\n }, [stream.status])\n\n const run = useCallback(async (inputVariables?: Record<string, VariableValue>) => {\n if (!workflowId) return\n setIsLaunching(true)\n try {\n const runRecord = await executeWorkflow(workflowId, inputVariables)\n setActiveRunId(runRecord.id)\n } finally {\n setIsLaunching(false)\n }\n }, [workflowId])\n\n const stop = useCallback(() => {\n setActiveRunId(null)\n setIsLaunching(false)\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n }, [clearNodeResults, setIsRunning, setNodeResult])\n\n useEffect(() => {\n setActiveRunId(null)\n setIsLaunching(false)\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n }, [clearNodeResults, setIsRunning, setNodeResult, workflowId])\n\n return {\n isRunning: isLaunching || stream.status === 'streaming',\n execute: run,\n stop,\n runId: activeRunId,\n runStatus: activeRunId ? stream.status : 'idle',\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport {\n ChartBarIcon,\n DocumentCheckIcon,\n PlayIcon,\n StopIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Button,\n CopyableId,\n DynamicIslandConfirm,\n PageEmptyState,\n PageErrorState,\n useNotifications,\n} from '@ui/index'\nimport {\n AgentModal,\n SubworkflowModal,\n AutoSaveWorkspace,\n NodePalette,\n PipelineSettingsModal,\n PreviewPanel,\n RunInputDialog,\n RunPanel,\n SaveStatusBadge,\n WorkflowBuilderProvider,\n WorkflowListBar,\n useModalStore,\n useWorkflowStore,\n useSubworkflowStore,\n validateWorkflowGraph,\n type AgentWithPrompts,\n type WorkflowEntityDefinition,\n} from '@ui/astrlabe'\nimport type {\n AgentModel,\n AgentRule,\n AgentTool,\n StartNodeConfig,\n WorkflowTool,\n Workflow,\n WorkflowGraph,\n} from '@ui/astrlabe/contracts'\nimport type { AgentsWorkspaceProps as SharedAgentsWorkspaceProps, DataSource, SaveState } from '@datatechsolutions/shared-domain/common'\nimport {\n createAgentConfig,\n createDatasource,\n createWorkflow,\n deleteWorkflow,\n getAgentConfigsWithPrompts,\n getAgentModels,\n getAgentRules,\n getAgentToolDefinitions,\n getAgentTools,\n getDatasources,\n getDatasourceTables,\n getDatasourceSchema,\n listModelProviderConnections,\n type ModelProviderConnection,\n getWorkflowById,\n getWorkflowRuns,\n getWorkflows,\n publishWorkflow,\n saveWorkflowDraft,\n updateWorkflowSettings,\n updateAgentConfig,\n updateAgentRule,\n updateAgentTool,\n} from './workflow-api-client'\nimport { useWorkflowExecution } from '@ui/hooks/use-workflow-execution'\nimport { DatasourceFormModal, type DatasourceFormData } from './pages/datasource-modal'\n\nfunction getPublishableKey() {\n return import.meta.env.VITE_WORKFLOW_BUILDER_PUBLISHABLE_KEY ?? ''\n}\n\nfunction useDatasourceLabels(): Record<string, string> {\n const t = useTranslations('platform.datasources')\n return useMemo(() => {\n const keys = [\n 'title', 'subtitle', 'addDatasource', 'createTitle', 'emptyTitle', 'emptyDescription',\n 'stepSelectType', 'stepConfigure',\n 'categoryRelational', 'categoryNoSql', 'categoryWarehouse', 'categoryTimeSeries',\n 'categoryGraph', 'categoryKeyValue', 'categorySearch',\n 'fieldName', 'fieldNamePlaceholder', 'fieldHost', 'fieldHostPlaceholder', 'fieldPort',\n 'fieldDatabase', 'fieldDatabasePlaceholder', 'fieldUsername', 'fieldUsernamePlaceholder',\n 'fieldPassword', 'fieldPasswordPlaceholder', 'fieldSchema', 'fieldSchemaPlaceholder',\n 'fieldSsl', 'fieldReadOnly', 'fieldReadOnlyHelp',\n 'fieldConnectionString', 'fieldConnectionStringPlaceholder',\n 'fieldProjectId', 'fieldProjectIdPlaceholder', 'fieldDataset', 'fieldDatasetPlaceholder',\n 'fieldKeyFile', 'fieldKeyFilePlaceholder', 'fieldAccount', 'fieldAccountPlaceholder',\n 'fieldWarehouse', 'fieldWarehousePlaceholder', 'fieldRegion', 'fieldRegionPlaceholder',\n 'fieldBucket', 'fieldBucketPlaceholder', 'fieldToken', 'fieldTokenPlaceholder',\n 'fieldApiKey', 'fieldApiKeyPlaceholder', 'fieldEnvironment', 'fieldEnvironmentPlaceholder',\n 'fieldIndex', 'fieldIndexPlaceholder', 'fieldUrl', 'fieldUrlPlaceholder',\n 'testConnection', 'testing', 'connectionSuccess', 'connectionFailed',\n 'save', 'saving', 'cancel', 'back', 'enabled', 'disabled', 'dialect', 'created', 'deleted', 'deleteConfirm',\n ]\n const labels: Record<string, string> = {}\n for (const key of keys) labels[key] = t(key)\n return labels\n }, [t])\n}\n\n/**\n * Props accepted by the workspace.\n *\n * Extends the shared-domain `AgentsWorkspaceProps` (just `workflowId`) with\n * an optional `messages` bundle. Most consumers wrap their tree in\n * `<I18nProvider>` so the canvas reads its translations from context — in\n * that case `messages` can be omitted. Apps that need to inject a\n * precomputed bundle (e.g. tests, app-specific overrides) pass it\n * explicitly and it forwards into `<AutoSaveWorkspace>`.\n */\nexport type AgentsWorkspaceProps = SharedAgentsWorkspaceProps & {\n messages?: Record<string, unknown>\n}\n\nexport function AgentsWorkspace({ workflowId, messages }: AgentsWorkspaceProps) {\n const navigate = useNavigate()\n const locale = useLocale()\n const tWorkflow = useTranslations('agents.workflow')\n const tCommon = useTranslations('common')\n const datasourceLabels = useDatasourceLabels()\n\n const { error: notifyError, success: notifySuccess } = useNotifications()\n\n const showSuccess = useCallback((title: string, message?: string) => {\n notifySuccess(title, message)\n }, [notifySuccess])\n const showError = useCallback((title: string, message?: string) => {\n notifyError(title, message)\n if (message) {\n console.error('[AgentsWorkspace]', message)\n }\n }, [])\n\n const [isLoading, setIsLoading] = useState(true)\n const [loadError, setLoadError] = useState<string | null>(null)\n const [isLoadingWorkflows, setIsLoadingWorkflows] = useState(true)\n const [isPublishing, setIsPublishing] = useState(false)\n\n const [workflows, setWorkflows] = useState<Workflow[]>([])\n const [workflow, setWorkflow] = useState<Workflow | null>(null)\n\n const [agents, setAgents] = useState<AgentWithPrompts[]>([])\n const [models, setModels] = useState<AgentModel[]>([])\n const [tools, setTools] = useState<WorkflowTool[]>([])\n const [agentToolDefs, setAgentToolDefs] = useState<AgentTool[]>([])\n const [rules, setRules] = useState<AgentRule[]>([])\n const [datasources, setDatasources] = useState<DataSource[]>([])\n const [modelConnections, setModelConnections] = useState<ModelProviderConnection[]>([])\n const [showDatasourceModal, setShowDatasourceModal] = useState(false)\n\n const openPipelineSettingsModal = useModalStore((s) => s.openPipelineSettingsModal)\n const [showRunInputDialog, setShowRunInputDialog] = useState(false)\n const [showPreviewPanel, setShowPreviewPanel] = useState(false)\n const [isCreatingAgent, setIsCreatingAgent] = useState(false)\n const openSubworkflowModal = useSubworkflowStore((s) => s.openModal)\n const closeSubworkflowModal = useSubworkflowStore((s) => s.closeModal)\n\n const [deleteTarget, setDeleteTarget] = useState<{ id: string; name: string } | null>(null)\n const [saveStatus, setSaveStatus] = useState<SaveState>('idle')\n\n const latestGraphRef = useRef<WorkflowGraph | null>(null)\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const skipInitialAutoSaveRef = useRef(true)\n\n const showRunPanel = useWorkflowStore((state) => state.showRunPanel)\n const toggleRunPanel = useWorkflowStore((state) => state.toggleRunPanel)\n const workflowNodes = useWorkflowStore((state) => state.nodes)\n\n const { execute: executeWorkflowRun, stop: stopWorkflowRun, isRunning } = useWorkflowExecution(workflowId)\n\n const loadWorkspaceData = useCallback(async () => {\n setIsLoading(true)\n setLoadError(null)\n try {\n const [workflowData, agentList, modelList, agentToolDefList, ruleList, datasourceList, connectionList] = await Promise.all([\n getWorkflowById(workflowId),\n getAgentConfigsWithPrompts(),\n getAgentModels(),\n getAgentToolDefinitions().catch(() => [] as AgentTool[]),\n getAgentRules(),\n getDatasources().catch(() => [] as DataSource[]),\n listModelProviderConnections().catch(() => [] as ModelProviderConnection[]),\n ])\n\n // Load tools per-agent (agentId is required by the API)\n const toolResults = await Promise.all(\n agentList.map(agent => getAgentTools(agent.agentId).catch(() => [] as WorkflowTool[]))\n )\n const toolList = toolResults.flat()\n\n setWorkflow(workflowData)\n latestGraphRef.current = workflowData.graph\n setAgents(agentList)\n setModels(modelList)\n setTools(toolList)\n setAgentToolDefs(agentToolDefList)\n setRules(ruleList)\n setDatasources(datasourceList)\n setModelConnections(connectionList)\n } catch (error) {\n const message = error instanceof Error ? error.message : tCommon('loadWorkspaceFailed')\n setWorkflow(null)\n setAgents([])\n setModels([])\n setTools([])\n setAgentToolDefs([])\n setRules([])\n setDatasources([])\n setModelConnections([])\n setLoadError(message)\n notifyError(tCommon('serverError'), message)\n } finally {\n setIsLoading(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflowId])\n\n const loadWorkflowList = useCallback(async () => {\n setIsLoadingWorkflows(true)\n try {\n const list = await getWorkflows()\n setWorkflows(list)\n } catch {\n setWorkflows([])\n } finally {\n setIsLoadingWorkflows(false)\n }\n }, [])\n\n useEffect(() => {\n void loadWorkspaceData()\n }, [loadWorkspaceData])\n\n useEffect(() => {\n void loadWorkflowList()\n }, [loadWorkflowList])\n\n useEffect(() => {\n skipInitialAutoSaveRef.current = true\n }, [workflowId])\n\n useEffect(() => {\n return () => {\n if (saveTimerRef.current) {\n clearTimeout(saveTimerRef.current)\n }\n }\n }, [])\n\n const handleAutoSaveGraph = useCallback((graph: WorkflowGraph) => {\n latestGraphRef.current = graph\n\n // Don't auto-save until initial data has loaded\n if (isLoading || skipInitialAutoSaveRef.current) {\n skipInitialAutoSaveRef.current = false\n return\n }\n\n if (saveTimerRef.current) {\n clearTimeout(saveTimerRef.current)\n }\n\n setSaveStatus('saving')\n saveTimerRef.current = setTimeout(() => {\n void saveWorkflowDraft(workflowId, graph)\n .then((updatedWorkflow) => {\n setWorkflow(updatedWorkflow)\n setWorkflows((current) => current.map((item) => (\n item.id === updatedWorkflow.id ? updatedWorkflow : item\n )))\n setSaveStatus('saved')\n setTimeout(() => setSaveStatus('idle'), 900)\n })\n .catch(() => {\n setSaveStatus('idle')\n })\n }, 800)\n }, [workflowId])\n\n const handlePublish = useCallback(async () => {\n if (!latestGraphRef.current) return\n\n const validation = validateWorkflowGraph(latestGraphRef.current, { locale })\n if (!validation.valid) {\n showError(tWorkflow('validationError'), validation.errors[0] ?? tWorkflow('validation'))\n return\n }\n\n setIsPublishing(true)\n try {\n const published = await publishWorkflow(workflowId)\n setWorkflow(published)\n setWorkflows((current) => current.map((item) => (\n item.id === published.id ? published : item\n )))\n } finally {\n setIsPublishing(false)\n }\n }, [locale, showError, tWorkflow, workflowId])\n\n const handleSelectWorkflow = useCallback((selected: Workflow) => {\n if (selected.id === workflowId) return\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(selected.id)}`)\n }, [navigate, workflowId])\n\n const handleCreateWorkflow = useCallback(async () => {\n // Random 8-hex-char suffix so default \"Novo Pipeline\" creates don't\n // collide on slug (the auto-slugify would produce `novo-pipeline`\n // every time). User can still customize via pipeline settings.\n const slug = `pipeline-${crypto.randomUUID().replace(/-/g, '').slice(0, 8)}`\n const created = await createWorkflow({\n name: tWorkflow('defaultWorkflowName'),\n slug,\n })\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`)\n }, [navigate, tWorkflow])\n\n const handleDeleteWorkflow = useCallback((id: string, name: string) => {\n setDeleteTarget({ id, name })\n }, [])\n\n const confirmDelete = useCallback(async () => {\n if (!deleteTarget) return\n await deleteWorkflow(deleteTarget.id)\n const remaining = workflows.filter((item) => item.id !== deleteTarget.id)\n if (remaining.length > 0) {\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(remaining[0].id)}`)\n } else {\n navigate('/workflows')\n }\n setDeleteTarget(null)\n }, [deleteTarget, workflows, navigate])\n\n const handleOpenRunDialog = useCallback(() => {\n const startNode = workflowNodes.find((node) => node.type === 'start')\n const hasEndNode = workflowNodes.some((node) => node.type === 'end')\n const hasValidStartConfig = Boolean(\n startNode &&\n typeof startNode.data === 'object' &&\n startNode.data !== null &&\n 'config' in startNode.data &&\n startNode.data.config &&\n (startNode.data.config as StartNodeConfig).type === 'start'\n )\n\n if (!hasValidStartConfig) {\n showError(tWorkflow('validationError'), tWorkflow('startNodeRequired'))\n return\n }\n if (!hasEndNode) {\n showError(tWorkflow('validationError'), tWorkflow('endNodeRequired'))\n return\n }\n\n setShowRunInputDialog(true)\n }, [workflowNodes, showError, tWorkflow])\n\n const handleCreateAgent = useCallback(() => {\n setIsCreatingAgent(true)\n }, [])\n\n const handleCancelCreateAgent = useCallback(() => {\n setIsCreatingAgent(false)\n }, [])\n\n const handleAgentSaved = useCallback(async () => {\n const nextAgents = await getAgentConfigsWithPrompts()\n setAgents(nextAgents)\n setIsCreatingAgent(false)\n }, [])\n\n const handleToggleTool = useCallback(async (tool: WorkflowTool) => {\n try {\n const updated = await updateAgentTool(tool.toolId, { enabled: !tool.enabled })\n setTools((current) => current.map((item) => (item.toolId === tool.toolId ? updated : item)))\n showSuccess(\n tWorkflow('toolsSection'),\n updated.enabled ? tWorkflow('published') : tWorkflow('draftBadge')\n )\n } catch (error) {\n showError(\n tWorkflow('validationError'),\n error instanceof Error ? error.message : tWorkflow('publishError')\n )\n }\n }, [showError, showSuccess, tWorkflow])\n\n const handleToggleRule = useCallback(async (rule: AgentRule) => {\n try {\n const updated = await updateAgentRule(rule.ruleId, { ...rule, enabled: !rule.enabled })\n setRules((current) => current.map((item) => (item.ruleId === rule.ruleId ? updated : item)))\n showSuccess(\n tWorkflow('rulesSection'),\n updated.enabled ? tWorkflow('published') : tWorkflow('draftBadge')\n )\n } catch (error) {\n showError(\n tWorkflow('validationError'),\n error instanceof Error ? error.message : tWorkflow('publishError')\n )\n }\n }, [showError, showSuccess, tWorkflow])\n\n const handleCreateTool = useCallback(() => {\n openSubworkflowModal({ toolId: '', name: '', category: 'external', enabled: true } as WorkflowTool)\n }, [openSubworkflowModal])\n\n const handleCreateRule = useCallback(() => {\n // TODO: open rule drawer in create mode\n }, [])\n\n const handleCreateAgentTool = useCallback(() => {\n // TODO: open agent tool drawer in create mode\n }, [])\n\n const handleConvertToSubworkflow = useCallback((workflow: Workflow) => {\n openSubworkflowModal({\n toolId: '',\n name: workflow.name,\n description: workflow.description ?? '',\n category: 'external',\n enabled: true,\n config: { type: 'workflow', graph: workflow.graph },\n } as WorkflowTool)\n }, [openSubworkflowModal])\n\n const handleEditTool = useCallback((tool: WorkflowTool) => {\n openSubworkflowModal(tool)\n }, [openSubworkflowModal])\n\n const handleCreateDatasource = useCallback(() => {\n setShowDatasourceModal(true)\n }, [])\n\n const handleSaveDatasource = useCallback(async (data: DatasourceFormData) => {\n try {\n const created = await createDatasource(data)\n setDatasources((current) => [...current, created])\n showSuccess(tWorkflow('dataSourcesSection'), tCommon('created') ?? 'Created')\n } catch (error) {\n showError(\n tWorkflow('dataSourcesSection'),\n error instanceof Error ? error.message : tCommon('createDatasourceFailed')\n )\n }\n }, [showSuccess, showError, tWorkflow, tCommon])\n\n const datasourceEntities: WorkflowEntityDefinition[] = useMemo(() =>\n datasources.map((ds) => ({\n id: ds.id,\n label: ds.name ?? ds.id,\n description: ds.dialect ?? '',\n defaultLimit: 100,\n fields: [],\n })),\n [datasources])\n\n // Canvas datasource-node config modals expect `{id, name, dialect}[]` —\n // the same rows that `/datasources` admin manages. Pass them through\n // to AutoSaveWorkspace so opening a datasource node inside the canvas\n // picker lists what the admin page created, and vice versa.\n const datasourceDefinitions = useMemo(() =>\n datasources.map((ds) => ({\n id: ds.id,\n name: ds.name ?? ds.id,\n dialect: ds.dialect ?? 'postgres',\n })),\n [datasources])\n\n // NodePalette expects its own `ModelProvider` shape (distinct from both\n // our DB row and the UI's slug union). The `provider` field is the key\n // the palette uses to pick a logo (`PROVIDER_LOGOS`) and to synthesize\n // the node config's `providerType`. Keep the mapping honest so dragging\n // a provider chip spawns a node pointing at a real connection id.\n const paletteModelProviders = useMemo(() => {\n const toPaletteKey = (slug: string | undefined): string => {\n switch (slug) {\n case 'anthropic_api': return 'anthropic'\n case 'openai_api': return 'openai'\n case 'aws_bedrock': return 'amazon'\n case 'google_vertex': return 'google'\n default: return slug ?? 'custom'\n }\n }\n return modelConnections.map((connection) => ({\n id: connection.id,\n name: connection.name,\n provider: toPaletteKey(connection.providerSlug),\n modelCount: connection.modelFilter?.length ?? 1,\n configured: connection.enabled,\n }))\n }, [modelConnections])\n\n if (isLoading) {\n return (\n <div className=\"flex h-[calc(100vh-120px)] flex-col\">\n <div className=\"liquid-surface flex h-full flex-col overflow-hidden rounded-2xl\">\n <div className=\"flex flex-shrink-0 items-center justify-between px-5 py-3\">\n <div className=\"shimmer h-6 w-40 rounded-lg\" />\n <div className=\"shimmer h-8 w-24 rounded-lg\" />\n </div>\n <div className=\"liquid-divider border-t\" />\n <div className=\"flex min-h-0 flex-1 overflow-hidden\">\n <div className=\"w-56 border-r border-white/20 p-4 dark:border-white/10\">\n <div className=\"shimmer mb-3 h-5 w-24 rounded\" />\n <div className=\"space-y-2\">\n {[1, 2, 3].map((index) => (\n <div key={index} className=\"shimmer h-10 w-full rounded-lg\" />\n ))}\n </div>\n </div>\n <div className=\"flex flex-1 items-center justify-center\">\n <div className=\"shimmer h-8 w-48 rounded-lg\" />\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!workflow) {\n return (\n <div className=\"flex h-[calc(100vh-120px)] items-center justify-center\">\n {loadError ? (\n <PageErrorState\n statusCode={500}\n title={tCommon('serverError')}\n message={loadError}\n onRetry={() => { void loadWorkspaceData() }}\n retryLabel={tCommon('retry')}\n />\n ) : (\n <PageEmptyState\n title={tWorkflow('emptyTitle')}\n message={tWorkflow('emptyDescription')}\n iconName=\"cpu-chip\"\n />\n )}\n </div>\n )\n }\n\n return (\n <WorkflowBuilderProvider publishableKey={getPublishableKey()}>\n <div className=\"flex h-[calc(100vh-120px)] flex-col\" data-testid=\"agents-workspace\">\n <div className=\"liquid-surface flex h-full flex-col overflow-hidden rounded-2xl\">\n <div className=\"flex flex-shrink-0 items-center justify-between px-5 py-3\">\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => openPipelineSettingsModal(\n workflow.name,\n workflow.description ?? '',\n {\n slug: (workflow as unknown as { slug?: string | null }).slug ?? null,\n isDraft: (workflow as unknown as { isDraft?: boolean }).isDraft,\n isActive: (workflow as unknown as { isActive?: boolean }).isActive,\n },\n )}\n className=\"rounded-lg px-2.5 py-1 text-sm font-semibold text-gray-900 transition-colors hover:bg-gray-100/80 dark:text-white dark:hover:bg-white/10\"\n title={tWorkflow('editName')}\n >\n {workflow.name || tWorkflow('title')}\n </button>\n <CopyableId id={workflowId} className=\"text-[10px]\" />\n {workflow.isDraft ? (\n <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\">\n {tWorkflow('draftBadge')}\n </span>\n ) : (\n <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\">\n {tWorkflow('published')}\n </span>\n )}\n <SaveStatusBadge status={saveStatus} />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"xs\"\n plain\n onClick={() => setShowPreviewPanel((previous) => !previous)}\n title={tWorkflow('previewPanel.title')}\n >\n <ChartBarIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n </Button>\n\n {/* Run / Stop for the authenticated editor — these\n trigger real backend execution against live Bedrock.\n The button stays disabled until there's a published\n graph (or an in-memory edit) so a brand-new workflow\n can't fire an empty run. The landing-page preview\n uses a separate mocked executor (see preview-runtime). */}\n {isRunning ? (\n <Button size=\"xs\" outline onClick={stopWorkflowRun}>\n <StopIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('runPanel.stop')}\n </Button>\n ) : (\n <Button\n size=\"xs\"\n outline\n onClick={handleOpenRunDialog}\n disabled={!workflow.publishedGraph && !latestGraphRef.current}\n title={!workflow.publishedGraph && !latestGraphRef.current ? tWorkflow('noPublishedWorkflow') : undefined}\n >\n <PlayIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('runPanel.run')}\n </Button>\n )}\n\n <Button gradient size=\"xs\" onClick={() => { void handlePublish() }} disabled={isPublishing}>\n <DocumentCheckIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('publish')}\n </Button>\n </div>\n </div>\n\n <div className=\"liquid-divider border-t\" />\n <div className=\"px-4 pt-3\">\n <WorkflowListBar\n workflows={workflows}\n activeWorkflowId={workflowId}\n isLoading={isLoadingWorkflows}\n onSelect={handleSelectWorkflow}\n onCreate={() => { void handleCreateWorkflow() }}\n onDelete={handleDeleteWorkflow}\n onConvertToSubworkflow={handleConvertToSubworkflow}\n />\n </div>\n\n <div className=\"liquid-divider border-t\" />\n <div className=\"flex min-h-0 flex-1 overflow-hidden\">\n <NodePalette\n agents={agents}\n tools={tools}\n agentTools={agentToolDefs}\n rules={rules}\n entities={datasourceEntities}\n modelProviders={paletteModelProviders}\n onCreateAgent={handleCreateAgent}\n onCreateTool={() => { void handleCreateTool() }}\n onCreateAgentTool={() => { void handleCreateAgentTool() }}\n onCreateRule={() => { void handleCreateRule() }}\n onCreateDatasource={handleCreateDatasource}\n />\n\n <div className=\"flex-1\">\n <AutoSaveWorkspace\n workflowId={workflowId}\n className=\"h-full w-full\"\n locale={locale}\n {...(messages ? { messages } : {})}\n initialGraph={workflow.graph}\n agents={agents}\n models={models}\n tools={tools}\n agentTools={agentToolDefs}\n rules={rules}\n datasources={datasourceDefinitions}\n onLoadTables={getDatasourceTables}\n onLoadSchema={getDatasourceSchema}\n onEditTool={handleEditTool}\n onToggleTool={handleToggleTool}\n onToggleRule={handleToggleRule}\n onAgentSaved={() => { void handleAgentSaved() }}\n isCreatingAgent={isCreatingAgent}\n onCancelCreateAgent={handleCancelCreateAgent}\n onAutoSaveGraph={handleAutoSaveGraph}\n onGraphSnapshot={(graph) => {\n latestGraphRef.current = graph\n }}\n renderAgentModal={(props) => (\n <AgentModal\n {...props}\n onSaved={() => {\n props.onSaved()\n void handleAgentSaved()\n }}\n onPersist={async (payload) => {\n // Translate the modal's canonical payload into the\n // shape the backend (`/agents/configs`) expects.\n // The handler ignores unknown fields, so it's safe\n // to spread the full payload and let serde pick\n // the ones it recognises.\n const body = {\n name: payload.name,\n displayName: payload.displayName,\n description: payload.description,\n avatar: payload.avatar,\n modelId: payload.modelId,\n modelProviderId: payload.connectionId,\n framework: payload.framework,\n systemPrompt: payload.systemPrompt,\n instruction: payload.systemPrompt,\n temperature: payload.temperature,\n maxOutputTokens: payload.maxOutputTokens,\n maxTokens: payload.maxOutputTokens,\n topP: payload.topP,\n topK: payload.topK,\n elo: payload.elo,\n status: payload.status,\n tags: payload.tags,\n agentToolIds: payload.enabledToolIds,\n }\n if (payload.agentId) {\n await updateAgentConfig(payload.agentId, body)\n } else {\n await createAgentConfig(body)\n }\n }}\n />\n )}\n />\n </div>\n </div>\n </div>\n\n <PipelineSettingsModal\n onSave={async (changes) => {\n // `saveWorkflowDraft` also piggy-backs the latest graph so\n // renames + graph-auto-save land in a single PATCH. The\n // lifecycle deltas (`isDraft`/`isActive`/`slug`) ride\n // alongside the name/description metadata.\n const metadata: {\n name?: string; description?: string;\n isDraft?: boolean; isActive?: boolean;\n slug?: string | null;\n } = {\n name: changes.name,\n description: changes.description,\n }\n if (changes.slug !== undefined) metadata.slug = changes.slug\n if (changes.isDraft !== undefined) metadata.isDraft = changes.isDraft\n if (changes.isActive !== undefined) metadata.isActive = changes.isActive\n\n // Use saveWorkflowDraft when the graph is loaded (so the\n // PATCH stays single-round-trip); fall back to the pure\n // settings-only updater otherwise.\n const updated = latestGraphRef.current\n ? await saveWorkflowDraft(workflowId, latestGraphRef.current, metadata)\n : await updateWorkflowSettings(workflowId, metadata)\n setWorkflow(updated)\n setWorkflows((current) => current.map((item) => (\n item.id === updated.id ? updated : item\n )))\n }}\n />\n\n <SubworkflowModal\n onMaximize={(subworkflowId: string) => {\n closeSubworkflowModal()\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(subworkflowId)}`)\n }}\n onSaved={async (saved: WorkflowTool) => {\n const isNew = !saved.toolId\n if (isNew) {\n const created = await createWorkflow({\n name: saved.name,\n description: saved.description as string | undefined,\n })\n closeSubworkflowModal()\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`)\n } else {\n const updated = await updateAgentTool(saved.toolId, saved)\n setTools((current) => current.map((item) => (item.toolId === saved.toolId ? updated : item)))\n closeSubworkflowModal()\n }\n }}\n />\n\n <RunPanel\n open={showRunPanel}\n onClose={toggleRunPanel}\n onRun={handleOpenRunDialog}\n onStop={stopWorkflowRun}\n />\n\n <RunInputDialog\n open={showRunInputDialog}\n onClose={() => setShowRunInputDialog(false)}\n onRun={(inputVariables) => {\n void executeWorkflowRun(inputVariables)\n if (!showRunPanel) {\n toggleRunPanel()\n }\n }}\n />\n\n <PreviewPanel\n open={showPreviewPanel}\n onClose={() => setShowPreviewPanel(false)}\n workflowId={workflowId}\n loadRuns={getWorkflowRuns}\n />\n\n <DatasourceFormModal\n open={showDatasourceModal}\n onClose={() => setShowDatasourceModal(false)}\n labels={datasourceLabels}\n onSave={(data) => { void handleSaveDatasource(data) }}\n />\n\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={() => setDeleteTarget(null)}\n onConfirm={() => { void confirmDelete() }}\n title={`${tWorkflow('deleteWorkflowConfirm')} ${deleteTarget?.name ?? ''}?`}\n />\n </div>\n </WorkflowBuilderProvider>\n )\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { Workspace } from './chunk-
|
|
2
|
+
import { Workspace } from './chunk-JBXNEOFB.mjs';
|
|
3
3
|
import { useLocale } from './chunk-7VJ7CMMT.mjs';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -16,5 +16,5 @@ function WorkflowCanvasShell({ graph, messages }) {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export { WorkflowCanvasShell };
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
19
|
+
//# sourceMappingURL=chunk-RUWUH7DW.mjs.map
|
|
20
|
+
//# sourceMappingURL=chunk-RUWUH7DW.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":[],"mappings":";;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":[],"mappings":";;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-RUWUH7DW.mjs","sourcesContent":["import { useLocale } from '@ui/lib/i18n-context'\nimport { Workspace } from '@ui/astrlabe/workflow-canvas'\nimport type { WorkflowGraph as UiWorkflowGraph } from '@ui/astrlabe'\nimport type { WorkflowCanvasShellProps } from '@datatechsolutions/shared-domain/common'\n\n/**\n * Workflow canvas shell with optional message bundle override.\n *\n * Most apps wrap their tree in `<I18nProvider>` and let the canvas read\n * messages from context — in that case `messages` can be omitted. Apps\n * that need to inject a precomputed bundle (e.g. for tests or app-specific\n * overrides not shipped with shared-domain) can pass it explicitly.\n */\ntype Props = WorkflowCanvasShellProps & {\n /** Optional override for the messages catalog passed into the canvas. */\n messages?: Record<string, unknown>\n}\n\nexport function WorkflowCanvasShell({ graph, messages }: Props) {\n const locale = useLocale()\n return (\n <Workspace\n initialGraph={graph as unknown as UiWorkflowGraph}\n locale={locale}\n {...(messages ? { messages } : {})}\n />\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk6R5Z2IQ5_js = require('./chunk-6R5Z2IQ5.js');
|
|
5
5
|
var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var outline = require('@heroicons/react/24/outline');
|
|
@@ -218,41 +218,41 @@ function ConnectionForm({
|
|
|
218
218
|
switch (dialect.formType) {
|
|
219
219
|
case "standard":
|
|
220
220
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
221
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
222
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
224
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
225
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
221
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "host", label: labels.fieldHost, placeholder: labels.fieldHostPlaceholder, required: true }),
|
|
222
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "port", label: labels.fieldPort, type: "number", defaultValue: dialect.defaultPort }),
|
|
223
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
|
|
224
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder }),
|
|
225
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
|
|
226
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
|
|
227
227
|
] });
|
|
228
228
|
case "connection-string":
|
|
229
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "connectionString", label: labels.fieldConnectionString, placeholder: labels.fieldConnectionStringPlaceholder, required: true }) });
|
|
230
230
|
case "cloud-bigquery":
|
|
231
231
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
232
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
234
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
232
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "projectId", label: labels.fieldProjectId, placeholder: labels.fieldProjectIdPlaceholder, required: true }),
|
|
233
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "dataset", label: labels.fieldDataset, placeholder: labels.fieldDatasetPlaceholder, required: true }),
|
|
234
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "keyFile", label: labels.fieldKeyFile, placeholder: labels.fieldKeyFilePlaceholder }) })
|
|
235
235
|
] });
|
|
236
236
|
case "cloud-snowflake":
|
|
237
237
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
238
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
240
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
241
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
242
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
243
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
238
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "account", label: labels.fieldAccount, placeholder: labels.fieldAccountPlaceholder, required: true }),
|
|
239
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "warehouse", label: labels.fieldWarehouse, placeholder: labels.fieldWarehousePlaceholder, required: true }),
|
|
240
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
|
|
241
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder, required: true }),
|
|
242
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
|
|
243
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
|
|
244
244
|
] });
|
|
245
245
|
case "cloud-key":
|
|
246
246
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
247
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
248
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
249
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
247
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "region", label: labels.fieldRegion, placeholder: labels.fieldRegionPlaceholder, required: true }),
|
|
248
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "token", label: labels.fieldToken, type: "password", placeholder: labels.fieldTokenPlaceholder, required: true }),
|
|
249
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "bucket", label: labels.fieldBucket, placeholder: labels.fieldBucketPlaceholder })
|
|
250
250
|
] });
|
|
251
251
|
case "vector-key":
|
|
252
252
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
253
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
254
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
253
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "apiKey", label: labels.fieldApiKey, type: "password", placeholder: labels.fieldApiKeyPlaceholder, required: true }),
|
|
254
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "environment", label: labels.fieldEnvironment, placeholder: labels.fieldEnvironmentPlaceholder, required: true }),
|
|
255
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "index", label: labels.fieldIndex, placeholder: labels.fieldIndexPlaceholder })
|
|
256
256
|
] });
|
|
257
257
|
}
|
|
258
258
|
}
|
|
@@ -275,8 +275,8 @@ function ConnectionForm({
|
|
|
275
275
|
] })
|
|
276
276
|
] })
|
|
277
277
|
] }),
|
|
278
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
279
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
278
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormInput, { name: "name", label: labels.fieldName, placeholder: labels.fieldNamePlaceholder, required: true }),
|
|
279
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.FormGrid, { children: renderFields() }),
|
|
280
280
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-6 pt-2", children: [
|
|
281
281
|
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-sm text-slate-700 dark:text-slate-300", children: [
|
|
282
282
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -307,9 +307,9 @@ function ConnectionForm({
|
|
|
307
307
|
/* @__PURE__ */ jsxRuntime.jsxs("details", { className: "liquid-surface rounded-xl p-3", children: [
|
|
308
308
|
/* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer text-sm font-medium text-slate-700 dark:text-slate-300", children: labels.advancedToggle ?? "Governance & performance" }),
|
|
309
309
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 space-y-3", children: [
|
|
310
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
310
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk6R5Z2IQ5_js.FormGrid, { children: [
|
|
311
311
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
312
|
-
|
|
312
|
+
chunk6R5Z2IQ5_js.FormInput,
|
|
313
313
|
{
|
|
314
314
|
name: "maxPoolSize",
|
|
315
315
|
label: labels.fieldMaxPoolSize ?? "Max pool size",
|
|
@@ -320,7 +320,7 @@ function ConnectionForm({
|
|
|
320
320
|
}
|
|
321
321
|
),
|
|
322
322
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
323
|
-
|
|
323
|
+
chunk6R5Z2IQ5_js.FormInput,
|
|
324
324
|
{
|
|
325
325
|
name: "timeoutMs",
|
|
326
326
|
label: labels.fieldTimeoutMs ?? "Timeout (ms)",
|
|
@@ -331,7 +331,7 @@ function ConnectionForm({
|
|
|
331
331
|
)
|
|
332
332
|
] }),
|
|
333
333
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
334
|
-
|
|
334
|
+
chunk6R5Z2IQ5_js.FormInput,
|
|
335
335
|
{
|
|
336
336
|
name: "allowedTables",
|
|
337
337
|
label: labels.fieldAllowedTables ?? "Allowed tables (comma-separated)",
|
|
@@ -340,7 +340,7 @@ function ConnectionForm({
|
|
|
340
340
|
),
|
|
341
341
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: labels.fieldAllowedTablesHelp ?? "Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows." }),
|
|
342
342
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
343
|
-
|
|
343
|
+
chunk6R5Z2IQ5_js.FormInput,
|
|
344
344
|
{
|
|
345
345
|
name: "blockedColumns",
|
|
346
346
|
label: labels.fieldBlockedColumns ?? "Blocked columns (comma-separated)",
|
|
@@ -387,7 +387,7 @@ function DatasourceFormModal({ open, onClose, labels, onSave }) {
|
|
|
387
387
|
handleClose();
|
|
388
388
|
}
|
|
389
389
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
390
|
-
|
|
390
|
+
chunk6R5Z2IQ5_js.GlassModal,
|
|
391
391
|
{
|
|
392
392
|
open,
|
|
393
393
|
onClose: handleClose,
|
|
@@ -420,7 +420,7 @@ function DatasourceModal({ open, onClose, labels, onSave }) {
|
|
|
420
420
|
handleClose();
|
|
421
421
|
}
|
|
422
422
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
-
|
|
423
|
+
chunk6R5Z2IQ5_js.GlassModal,
|
|
424
424
|
{
|
|
425
425
|
open,
|
|
426
426
|
onClose: handleClose,
|
|
@@ -450,5 +450,5 @@ exports.DatasourceFormModal = DatasourceFormModal;
|
|
|
450
450
|
exports.DatasourceModal = DatasourceModal;
|
|
451
451
|
exports.findCategory = findCategory;
|
|
452
452
|
exports.findDialect = findDialect;
|
|
453
|
-
//# sourceMappingURL=chunk-
|
|
454
|
-
//# sourceMappingURL=chunk-
|
|
453
|
+
//# sourceMappingURL=chunk-TXI3QDYE.js.map
|
|
454
|
+
//# sourceMappingURL=chunk-TXI3QDYE.js.map
|