@datatechsolutions/ui 3.13.1 → 3.15.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.
- package/dist/astrlabe/graph-node.js +6 -6
- package/dist/astrlabe/graph-node.mjs +2 -2
- package/dist/astrlabe/index.js +113 -113
- package/dist/astrlabe/index.mjs +5 -5
- package/dist/astrlabe/workflow-canvas.js +5 -5
- package/dist/astrlabe/workflow-canvas.mjs +4 -4
- package/dist/{chunk-Q7QPHZOV.js → chunk-2JPS5OND.js} +67 -67
- package/dist/{chunk-Q7QPHZOV.js.map → chunk-2JPS5OND.js.map} +1 -1
- package/dist/{chunk-RPNMDGRA.js → chunk-2QZFKQP6.js} +37 -40
- package/dist/chunk-2QZFKQP6.js.map +1 -0
- package/dist/{chunk-O4RZCDP2.mjs → chunk-2SBVFLPZ.mjs} +19 -2
- package/dist/chunk-2SBVFLPZ.mjs.map +1 -0
- package/dist/{chunk-4VEQJAXJ.mjs → chunk-3FOLXKVP.mjs} +5 -5
- package/dist/{chunk-4VEQJAXJ.mjs.map → chunk-3FOLXKVP.mjs.map} +1 -1
- package/dist/{chunk-PM7A5I3X.js → chunk-435TRHC2.js} +118 -118
- package/dist/{chunk-PM7A5I3X.js.map → chunk-435TRHC2.js.map} +1 -1
- package/dist/{chunk-M4KRQXOT.mjs → chunk-5QRU3KKV.mjs} +3 -3
- package/dist/{chunk-M4KRQXOT.mjs.map → chunk-5QRU3KKV.mjs.map} +1 -1
- package/dist/{chunk-DTFU3ZTD.js → chunk-6NBQTIXX.js} +9 -9
- package/dist/{chunk-DTFU3ZTD.js.map → chunk-6NBQTIXX.js.map} +1 -1
- package/dist/{chunk-CVEI4RQP.js → chunk-6NEESZVO.js} +4 -4
- package/dist/{chunk-CVEI4RQP.js.map → chunk-6NEESZVO.js.map} +1 -1
- package/dist/{chunk-CKY2QIRR.js → chunk-6UUFPSAR.js} +4 -4
- package/dist/{chunk-CKY2QIRR.js.map → chunk-6UUFPSAR.js.map} +1 -1
- package/dist/{chunk-DJHNSBIR.mjs → chunk-7LIJTAIF.mjs} +31 -31
- package/dist/{chunk-DJHNSBIR.mjs.map → chunk-7LIJTAIF.mjs.map} +1 -1
- package/dist/{chunk-4MNKVDTJ.mjs → chunk-A5M7SPPG.mjs} +4 -4
- package/dist/{chunk-4MNKVDTJ.mjs.map → chunk-A5M7SPPG.mjs.map} +1 -1
- package/dist/{chunk-FV42SSLP.js → chunk-A5OMGPMR.js} +4 -4
- package/dist/{chunk-FV42SSLP.js.map → chunk-A5OMGPMR.js.map} +1 -1
- package/dist/{chunk-VWZ53TE2.js → chunk-BN4BKFE2.js} +9 -9
- package/dist/{chunk-VWZ53TE2.js.map → chunk-BN4BKFE2.js.map} +1 -1
- package/dist/{chunk-4Z5NZINA.js → chunk-C4UYEHPY.js} +136 -136
- package/dist/chunk-C4UYEHPY.js.map +1 -0
- package/dist/{chunk-54T5F65C.js → chunk-CPTHSYM2.js} +17 -17
- package/dist/{chunk-54T5F65C.js.map → chunk-CPTHSYM2.js.map} +1 -1
- package/dist/{chunk-3VCSMSJB.mjs → chunk-EZVBRLQH.mjs} +9 -9
- package/dist/{chunk-3VCSMSJB.mjs.map → chunk-EZVBRLQH.mjs.map} +1 -1
- package/dist/{chunk-4QCO4CBC.mjs → chunk-F3PQ5EFQ.mjs} +4 -4
- package/dist/{chunk-4QCO4CBC.mjs.map → chunk-F3PQ5EFQ.mjs.map} +1 -1
- package/dist/{chunk-RUZPOHJW.js → chunk-GD3YV46U.js} +41 -41
- package/dist/{chunk-RUZPOHJW.js.map → chunk-GD3YV46U.js.map} +1 -1
- package/dist/{chunk-Y65X2NHF.mjs → chunk-I6ULYJR4.mjs} +3 -3
- package/dist/{chunk-Y65X2NHF.mjs.map → chunk-I6ULYJR4.mjs.map} +1 -1
- package/dist/{chunk-YHD6SJIN.mjs → chunk-JJUWZNJY.mjs} +4 -4
- package/dist/{chunk-YHD6SJIN.mjs.map → chunk-JJUWZNJY.mjs.map} +1 -1
- package/dist/{chunk-VPRAESA7.mjs → chunk-KDDXDQR2.mjs} +3 -3
- package/dist/{chunk-VPRAESA7.mjs.map → chunk-KDDXDQR2.mjs.map} +1 -1
- package/dist/{chunk-UPWJRCAD.js → chunk-KRS2CLPR.js} +223 -229
- package/dist/chunk-KRS2CLPR.js.map +1 -0
- package/dist/{chunk-RWZ2PLMQ.js → chunk-KZDABEML.js} +211 -154
- package/dist/chunk-KZDABEML.js.map +1 -0
- package/dist/{chunk-TRNDFSM6.mjs → chunk-MSXJFWKD.mjs} +28 -28
- package/dist/chunk-MSXJFWKD.mjs.map +1 -0
- package/dist/{chunk-EBARYRSA.js → chunk-MXQ2EYG2.js} +19 -2
- package/dist/chunk-MXQ2EYG2.js.map +1 -0
- package/dist/{chunk-RMPXGEFL.mjs → chunk-NNR44MM5.mjs} +7 -7
- package/dist/{chunk-RMPXGEFL.mjs.map → chunk-NNR44MM5.mjs.map} +1 -1
- package/dist/{chunk-AC54BNSK.js → chunk-NQCFGIWC.js} +13 -13
- package/dist/{chunk-AC54BNSK.js.map → chunk-NQCFGIWC.js.map} +1 -1
- package/dist/{chunk-7IAWXG43.js → chunk-OQM252SM.js} +33 -33
- package/dist/{chunk-7IAWXG43.js.map → chunk-OQM252SM.js.map} +1 -1
- package/dist/{chunk-VCL5LDS5.js → chunk-PADXORD2.js} +38 -38
- package/dist/{chunk-VCL5LDS5.js.map → chunk-PADXORD2.js.map} +1 -1
- package/dist/{chunk-SCGICCQM.mjs → chunk-PSS3E463.mjs} +7 -10
- package/dist/chunk-PSS3E463.mjs.map +1 -0
- package/dist/{chunk-QEACOJXX.mjs → chunk-QCGSE24W.mjs} +139 -83
- package/dist/chunk-QCGSE24W.mjs.map +1 -0
- package/dist/{chunk-ZPV7X4ZE.mjs → chunk-RH6Z425K.mjs} +6 -6
- package/dist/{chunk-ZPV7X4ZE.mjs.map → chunk-RH6Z425K.mjs.map} +1 -1
- package/dist/{chunk-RSCRIDMW.mjs → chunk-SMUBE3RO.mjs} +46 -52
- package/dist/chunk-SMUBE3RO.mjs.map +1 -0
- package/dist/{chunk-WX44DAQD.mjs → chunk-TQADF23S.mjs} +3 -3
- package/dist/{chunk-WX44DAQD.mjs.map → chunk-TQADF23S.mjs.map} +1 -1
- package/dist/{chunk-B3TA74C4.js → chunk-WG26KW6D.js} +57 -60
- package/dist/chunk-WG26KW6D.js.map +1 -0
- package/dist/{chunk-UUTTS3VV.mjs → chunk-WGS65S7S.mjs} +8 -11
- package/dist/chunk-WGS65S7S.mjs.map +1 -0
- package/dist/{chunk-ULSG4JLR.js → chunk-XJJZ6DHE.js} +6 -6
- package/dist/{chunk-ULSG4JLR.js.map → chunk-XJJZ6DHE.js.map} +1 -1
- package/dist/{chunk-XYMHIZ3K.mjs → chunk-ZBX7UCAP.mjs} +7 -7
- package/dist/{chunk-XYMHIZ3K.mjs.map → chunk-ZBX7UCAP.mjs.map} +1 -1
- package/dist/index.d.mts +77 -7
- package/dist/index.d.ts +77 -7
- package/dist/index.js +707 -703
- package/dist/index.mjs +2 -2
- package/dist/platform/admin/index.js +11 -11
- package/dist/platform/admin/index.mjs +5 -5
- package/dist/platform/agents-workspace.js +8 -8
- package/dist/platform/agents-workspace.mjs +7 -7
- package/dist/platform/app-shell.js +4 -4
- package/dist/platform/app-shell.mjs +3 -3
- package/dist/platform/auth/index.js +28 -28
- package/dist/platform/auth/index.mjs +5 -5
- package/dist/platform/billing/index.js +6 -6
- package/dist/platform/billing/index.mjs +4 -4
- package/dist/platform/impersonation/index.js +4 -4
- package/dist/platform/impersonation/index.mjs +3 -3
- package/dist/platform/index.js +93 -93
- package/dist/platform/index.mjs +21 -21
- package/dist/platform/pages/index.d.mts +103 -1
- package/dist/platform/pages/index.d.ts +103 -1
- package/dist/platform/pages/index.js +1756 -1429
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +1458 -1137
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +8 -8
- package/dist/platform/settings/index.mjs +7 -7
- package/dist/platform/workflow-canvas-shell.js +6 -6
- package/dist/platform/workflow-canvas-shell.mjs +5 -5
- package/package.json +1 -1
- package/dist/chunk-4Z5NZINA.js.map +0 -1
- package/dist/chunk-B3TA74C4.js.map +0 -1
- package/dist/chunk-EBARYRSA.js.map +0 -1
- package/dist/chunk-O4RZCDP2.mjs.map +0 -1
- package/dist/chunk-QEACOJXX.mjs.map +0 -1
- package/dist/chunk-RPNMDGRA.js.map +0 -1
- package/dist/chunk-RSCRIDMW.mjs.map +0 -1
- package/dist/chunk-RWZ2PLMQ.js.map +0 -1
- package/dist/chunk-SCGICCQM.mjs.map +0 -1
- package/dist/chunk-TRNDFSM6.mjs.map +0 -1
- package/dist/chunk-UPWJRCAD.js.map +0 -1
- package/dist/chunk-UUTTS3VV.mjs.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-M4KRQXOT.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-5QRU3KKV.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,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkMXQ2EYG2_js = require('./chunk-MXQ2EYG2.js');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
var TIER_DISPLAY_NAMES = {
|
|
@@ -59,9 +59,9 @@ function UpgradePrompt({
|
|
|
59
59
|
)
|
|
60
60
|
}
|
|
61
61
|
) }),
|
|
62
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-
|
|
63
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-
|
|
64
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-md bg-
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-slate-900 dark:text-white", children: heading }),
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300", children: [
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-md bg-slate-200/60 px-2 py-0.5 font-medium dark:bg-white/10", children: currentTierName }),
|
|
65
65
|
requiredTierName && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
66
66
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
67
67
|
"svg",
|
|
@@ -69,7 +69,7 @@ function UpgradePrompt({
|
|
|
69
69
|
xmlns: "http://www.w3.org/2000/svg",
|
|
70
70
|
viewBox: "0 0 20 20",
|
|
71
71
|
fill: "currentColor",
|
|
72
|
-
className: "h-4 w-4 text-
|
|
72
|
+
className: "h-4 w-4 text-slate-400 dark:text-slate-500",
|
|
73
73
|
"aria-hidden": "true",
|
|
74
74
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
75
75
|
"path",
|
|
@@ -86,8 +86,8 @@ function UpgradePrompt({
|
|
|
86
86
|
] }),
|
|
87
87
|
children,
|
|
88
88
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-1", children: [
|
|
89
|
-
onUpgrade && /* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
-
onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
onUpgrade && /* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Button, { type: "button", gradient: true, onClick: onUpgrade, children: "Upgrade Now" }),
|
|
90
|
+
onDismiss && /* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Button, { type: "button", plain: true, onClick: onDismiss, children: "Maybe Later" })
|
|
91
91
|
] })
|
|
92
92
|
] })
|
|
93
93
|
]
|
|
@@ -96,5 +96,5 @@ function UpgradePrompt({
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
exports.UpgradePrompt = UpgradePrompt;
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
100
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-6NBQTIXX.js.map
|
|
100
|
+
//# sourceMappingURL=chunk-6NBQTIXX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/billing/upgrade-prompt.tsx"],"names":["jsxs","jsx","Fragment","Button"],"mappings":";;;;;AAUA,IAAM,kBAAA,GAAuD;AAAA,EAC3D,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,cAAA;AAAA,EACd,UAAA,EAAY;AACd,CAAA;AAwBO,SAAS,aAAA,CAAc;AAAA,EAC5B,WAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,WAAW,CAAA,IAAK,WAAA;AAC3D,EAAA,MAAM,gBAAA,GAAmB,YAAA,GAAe,kBAAA,CAAmB,YAAY,KAAK,YAAA,GAAe,IAAA;AAE3F,EAAA,MAAM,OAAA,GAAU,UACZ,CAAA,kBAAA,EAAqB,OAAO,KAC5B,gBAAA,GACE,CAAA,WAAA,EAAc,gBAAgB,CAAA,CAAA,GAC9B,mBAAA;AAEN,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA,QACT,6DAAA;AAAA,QACA,kCAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAW,6BAAA;AAAA,MAGX,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kIAAA;AAAA,YACV,aAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBAEAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EAEb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gHAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,4BAAA;AAAA,cACN,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,cAAA;AAAA,cACL,SAAA,EAAU,SAAA;AAAA,cACV,aAAA,EAAY,MAAA;AAAA,cAEZ,QAAA,kBAAAA,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAS,SAAA;AAAA,kBACT,CAAA,EAAE,onBAAA;AAAA,kBACF,QAAA,EAAS;AAAA;AAAA;AACX;AAAA,WACF,EACF,CAAA;AAAA,0BAGAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,
|
|
1
|
+
{"version":3,"sources":["../src/platform/billing/upgrade-prompt.tsx"],"names":["jsxs","jsx","Fragment","Button"],"mappings":"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","file":"chunk-6NBQTIXX.js","sourcesContent":["// =============================================================================\n// @datatechsolutions/windsock/ui — UpgradePrompt Component\n// Glassmorphism-styled prompt shown when a user hits subscription limits.\n// =============================================================================\n\nimport { type ReactNode } from 'react'\nimport type { SubscriptionTier } from '@datatechsolutions/shared-domain'\nimport { Button } from '@ui/components/button'\n\n/** Human-readable tier display names */\nconst TIER_DISPLAY_NAMES: Record<SubscriptionTier, string> = {\n free_trial: 'Free Trial',\n starter: 'Starter',\n professional: 'Professional',\n enterprise: 'Enterprise',\n}\n\ninterface UpgradePromptProps {\n /** The user's current subscription tier */\n currentTier: SubscriptionTier\n /** The minimum tier required for access (shown in the prompt) */\n requiredTier?: SubscriptionTier\n /** Feature name that triggered the prompt */\n feature?: string\n /** Called when the user clicks \"Upgrade Now\" */\n onUpgrade?: () => void\n /** Called when the user dismisses the prompt */\n onDismiss?: () => void\n /** Optional custom content to render inside the card */\n children?: ReactNode\n}\n\n/**\n * A glassmorphism-styled upgrade prompt shown when users hit subscription\n * limits or try to access features above their current tier.\n *\n * Renders a card with the current tier, the required tier (or feature name),\n * and action buttons for upgrading or dismissing.\n */\nexport function UpgradePrompt({\n currentTier,\n requiredTier,\n feature,\n onUpgrade,\n onDismiss,\n children,\n}: UpgradePromptProps) {\n const currentTierName = TIER_DISPLAY_NAMES[currentTier] ?? currentTier\n const requiredTierName = requiredTier ? TIER_DISPLAY_NAMES[requiredTier] ?? requiredTier : null\n\n const heading = feature\n ? `Upgrade to unlock ${feature}`\n : requiredTierName\n ? `Upgrade to ${requiredTierName}`\n : 'Upgrade your plan'\n\n return (\n <div\n className={[\n 'relative overflow-hidden rounded-2xl border border-white/20',\n 'bg-white/10 p-6 backdrop-blur-xl',\n 'shadow-lg shadow-black/5',\n 'dark:border-white/10 dark:bg-white/5 dark:shadow-black/20',\n ].join(' ')}\n role=\"alert\"\n aria-label=\"Subscription upgrade prompt\"\n >\n {/* Decorative gradient accent */}\n <div\n className=\"pointer-events-none absolute -right-8 -top-8 h-32 w-32 rounded-full bg-gradient-to-br from-violet-500/20 to-blue-500/20 blur-2xl\"\n aria-hidden=\"true\"\n />\n\n <div className=\"relative flex flex-col gap-4\">\n {/* Icon */}\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-500 to-blue-500 text-white\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className=\"h-5 w-5\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M9 4.5a.75.75 0 0 1 .721.544l.813 2.846a3.75 3.75 0 0 0 2.576 2.576l2.846.813a.75.75 0 0 1 0 1.442l-2.846.813a3.75 3.75 0 0 0-2.576 2.576l-.813 2.846a.75.75 0 0 1-1.442 0l-.813-2.846a3.75 3.75 0 0 0-2.576-2.576l-2.846-.813a.75.75 0 0 1 0-1.442l2.846-.813A3.75 3.75 0 0 0 7.466 7.89l.813-2.846A.75.75 0 0 1 9 4.5ZM18 1.5a.75.75 0 0 1 .728.568l.258 1.036c.236.94.97 1.674 1.91 1.91l1.036.258a.75.75 0 0 1 0 1.456l-1.036.258c-.94.236-1.674.97-1.91 1.91l-.258 1.036a.75.75 0 0 1-1.456 0l-.258-1.036a2.625 2.625 0 0 0-1.91-1.91l-1.036-.258a.75.75 0 0 1 0-1.456l1.036-.258a2.625 2.625 0 0 0 1.91-1.91l.258-1.036A.75.75 0 0 1 18 1.5Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n\n {/* Heading */}\n <h3 className=\"text-lg font-semibold text-slate-900 dark:text-white\">\n {heading}\n </h3>\n\n {/* Tier comparison */}\n <div className=\"flex items-center gap-2 text-sm text-slate-600 dark:text-slate-300\">\n <span className=\"rounded-md bg-slate-200/60 px-2 py-0.5 font-medium dark:bg-white/10\">\n {currentTierName}\n </span>\n {requiredTierName && (\n <>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-4 w-4 text-slate-400 dark:text-slate-500\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M3 10a.75.75 0 0 1 .75-.75h10.638L10.23 5.29a.75.75 0 1 1 1.04-1.08l5.5 5.25a.75.75 0 0 1 0 1.08l-5.5 5.25a.75.75 0 1 1-1.04-1.08l4.158-3.96H3.75A.75.75 0 0 1 3 10Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"rounded-md bg-gradient-to-r from-violet-500/10 to-blue-500/10 px-2 py-0.5 font-medium text-violet-700 dark:from-violet-500/20 dark:to-blue-500/20 dark:text-violet-300\">\n {requiredTierName}\n </span>\n </>\n )}\n </div>\n\n {/* Optional custom content */}\n {children}\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 pt-1\">\n {onUpgrade && (\n <Button type=\"button\" gradient onClick={onUpgrade}>\n Upgrade Now\n </Button>\n )}\n {onDismiss && (\n <Button type=\"button\" plain onClick={onDismiss}>\n Maybe Later\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport type { UpgradePromptProps }\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkMXQ2EYG2_js = require('./chunk-MXQ2EYG2.js');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
function GraphNodeIconBubble({ children, className = "" }) {
|
|
@@ -30,12 +30,12 @@ function GraphNodeBadge({ children, className }) {
|
|
|
30
30
|
if (className) {
|
|
31
31
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { className, children });
|
|
32
32
|
}
|
|
33
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
33
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Badge, { color: "zinc", size: "xs", children });
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
exports.GraphNodeBadge = GraphNodeBadge;
|
|
37
37
|
exports.GraphNodeHeader = GraphNodeHeader;
|
|
38
38
|
exports.GraphNodeIconBubble = GraphNodeIconBubble;
|
|
39
39
|
exports.GraphNodeMeta = GraphNodeMeta;
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
41
|
-
//# sourceMappingURL=chunk-
|
|
40
|
+
//# sourceMappingURL=chunk-6NEESZVO.js.map
|
|
41
|
+
//# sourceMappingURL=chunk-6NEESZVO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/astrlabe/components/nodes/graph-node-primitives.tsx"],"names":["jsxs","jsx","Badge"],"mappings":";;;;;AAQO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAA6B;AAC1F,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,gEAAA,EAAmE,SAAS,IACzF,QAAA,EACH,CAAA;AAEJ;AAUO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,aAAA,EAAgB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACrCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC1E,CAAC,OAAA,IAAW,WAAA,mCAAgB,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAmD,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC1G;AAAA,GAAA,EACF,CAAA;AAEJ;AAOO,SAAS,aAAA,CAAc,EAAE,OAAA,GAAU,KAAA,EAAO,UAAS,EAAuB;AAC/E,EAAA,IAAI,SAAS,OAAO,IAAA;AACpB,EAAA,uBAAOA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAS,CAAA;AAC3E;AAOO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,SAAA,EAAU,EAAwB;AAK3E,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAuB,QAAA,EAAS,CAAA;AAAA,EAC/C;AACA,EAAA,sCAAQC,sBAAA,EAAA,EAAM,KAAA,EAAM,MAAA,EAAO,IAAA,EAAK,MAAM,QAAA,EAAS,CAAA;AACjD","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/astrlabe/components/nodes/graph-node-primitives.tsx"],"names":["jsxs","jsx","Badge"],"mappings":";;;;;AAQO,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAU,SAAA,GAAY,IAAG,EAA6B;AAC1F,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,gEAAA,EAAmE,SAAS,IACzF,QAAA,EACH,CAAA;AAEJ;AAUO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,aAAA,EAAgB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBACrCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC1E,CAAC,OAAA,IAAW,WAAA,mCAAgB,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAmD,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC1G;AAAA,GAAA,EACF,CAAA;AAEJ;AAOO,SAAS,aAAA,CAAc,EAAE,OAAA,GAAU,KAAA,EAAO,UAAS,EAAuB;AAC/E,EAAA,IAAI,SAAS,OAAO,IAAA;AACpB,EAAA,uBAAOA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAS,CAAA;AAC3E;AAOO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,SAAA,EAAU,EAAwB;AAK3E,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAuB,QAAA,EAAS,CAAA;AAAA,EAC/C;AACA,EAAA,sCAAQC,sBAAA,EAAA,EAAM,KAAA,EAAM,MAAA,EAAO,IAAA,EAAK,MAAM,QAAA,EAAS,CAAA;AACjD","file":"chunk-6NEESZVO.js","sourcesContent":["import type { ReactNode } from 'react'\nimport { Badge } from '@ui/components/badge'\n\ninterface GraphNodeIconBubbleProps {\n children: ReactNode\n className?: string\n}\n\nexport function GraphNodeIconBubble({ children, className = '' }: GraphNodeIconBubbleProps) {\n return (\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl shadow-lg ${className}`}>\n {children}\n </div>\n )\n}\n\ninterface GraphNodeHeaderProps {\n icon: ReactNode\n title: string\n description?: string\n compact?: boolean\n iconClassName?: string\n}\n\nexport function GraphNodeHeader({\n icon,\n title,\n description,\n compact = false,\n iconClassName,\n}: GraphNodeHeaderProps) {\n return (\n <div className=\"flex items-start gap-3\">\n <div className={iconClassName}>{icon}</div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{title}</h3>\n {!compact && description && <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">{description}</p>}\n </div>\n </div>\n )\n}\n\ninterface GraphNodeMetaProps {\n compact?: boolean\n children: ReactNode\n}\n\nexport function GraphNodeMeta({ compact = false, children }: GraphNodeMetaProps) {\n if (compact) return null\n return <div className=\"mt-2 flex items-center justify-between\">{children}</div>\n}\n\ninterface GraphNodeBadgeProps {\n children: ReactNode\n className?: string\n}\n\nexport function GraphNodeBadge({ children, className }: GraphNodeBadgeProps) {\n // When the caller hands us a pre-built className (the legacy\n // tone-driven pipeline in NodeCardBadge), respect it verbatim. The\n // bare fallback flows through the canonical Badge primitive so any\n // future no-className call gets the design-system chrome for free.\n if (className) {\n return <span className={className}>{children}</span>\n }\n return <Badge color=\"zinc\" size=\"xs\">{children}</Badge>\n}\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkC4UYEHPY_js = require('./chunk-C4UYEHPY.js');
|
|
5
5
|
var chunkY5VN4SPH_js = require('./chunk-Y5VN4SPH.js');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
|
|
8
8
|
function WorkflowCanvasShell({ graph, messages }) {
|
|
9
9
|
const locale = chunkY5VN4SPH_js.useLocale();
|
|
10
10
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11
|
-
|
|
11
|
+
chunkC4UYEHPY_js.Workspace,
|
|
12
12
|
{
|
|
13
13
|
initialGraph: graph,
|
|
14
14
|
locale,
|
|
@@ -18,5 +18,5 @@ function WorkflowCanvasShell({ graph, messages }) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
exports.WorkflowCanvasShell = WorkflowCanvasShell;
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-6UUFPSAR.js.map
|
|
22
|
+
//# sourceMappingURL=chunk-6UUFPSAR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/platform/workflow-canvas-shell.tsx"],"names":["useLocale","jsx","Workspace"],"mappings":";;;;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAASA,0BAAA,EAAU;AACzB,EAAA,uBACEC,cAAA;AAAA,IAACC,0BAAA;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":["useLocale","jsx","Workspace"],"mappings":";;;;;;AAkBO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AAC9D,EAAA,MAAM,SAASA,0BAAA,EAAU;AACzB,EAAA,uBACEC,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,KAAA;AAAA,MACd,MAAA;AAAA,MACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC;AAAA,GAClC;AAEJ","file":"chunk-6UUFPSAR.js","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,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { OtpInput, SocialLoginButtons, AuthLayout, PasswordStrengthMeter } from './chunk-
|
|
3
|
-
import { useAuth, SegmentedControl, Spinner, Input, Text, TextLink, Card, useSocialProviders, PasswordInput, FormCheckbox, EmptyState, BaseForm, CardContent, Avatar, ListCard, ListCardItem, InlineSpinner, DynamicIslandConfirm } from './chunk-
|
|
2
|
+
import { OtpInput, SocialLoginButtons, AuthLayout, PasswordStrengthMeter } from './chunk-TQADF23S.mjs';
|
|
3
|
+
import { useAuth, SegmentedControl, Spinner, Input, Text, TextLink, Card, useSocialProviders, PasswordInput, FormCheckbox, EmptyState, BaseForm, CardContent, Avatar, ListCard, ListCardItem, InlineSpinner, DynamicIslandConfirm } from './chunk-QCGSE24W.mjs';
|
|
4
4
|
import { useTranslations } from './chunk-ZEFNBGYI.mjs';
|
|
5
|
-
import { Button, Badge } from './chunk-
|
|
5
|
+
import { Button, Badge } from './chunk-2SBVFLPZ.mjs';
|
|
6
6
|
import { triggerHaptic } from './chunk-D2JF6C3E.mjs';
|
|
7
7
|
import { useState, useCallback, useEffect, Fragment as Fragment$1 } from 'react';
|
|
8
8
|
import { EnvelopeIcon, UserIcon, LockClosedIcon, CheckCircleIcon, DevicePhoneMobileIcon, PaperAirplaneIcon, ShieldExclamationIcon, BuildingOffice2Icon } from '@heroicons/react/24/outline';
|
|
@@ -206,8 +206,8 @@ function SignIn({
|
|
|
206
206
|
}
|
|
207
207
|
const content = /* @__PURE__ */ jsxs("div", { className: "space-y-5", children: [
|
|
208
208
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
209
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-
|
|
210
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
209
|
+
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-slate-900 dark:text-white", children: t("signInTitle") }),
|
|
210
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: t("signInSubtitle") })
|
|
211
211
|
] }),
|
|
212
212
|
error && /* @__PURE__ */ jsx("div", { className: "rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red", role: "alert", children: error }),
|
|
213
213
|
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
|
|
@@ -252,8 +252,8 @@ function SignIn({
|
|
|
252
252
|
] }),
|
|
253
253
|
effectiveSocialProviders.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
254
254
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
255
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: "w-full border-t border-
|
|
256
|
-
/* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs", children: /* @__PURE__ */ jsx("span", { className: "bg-white/80 px-3 text-
|
|
255
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: "w-full border-t border-slate-200/60 dark:border-white/10" }) }),
|
|
256
|
+
/* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs", children: /* @__PURE__ */ jsx("span", { className: "bg-white/80 px-3 text-slate-400 dark:bg-slate-900/80 dark:text-slate-500", children: t("orContinueWith") }) })
|
|
257
257
|
] }),
|
|
258
258
|
/* @__PURE__ */ jsx(
|
|
259
259
|
SocialLoginButtons,
|
|
@@ -351,8 +351,8 @@ function VerifyEmail({
|
|
|
351
351
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [
|
|
352
352
|
/* @__PURE__ */ jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-blue-50 dark:bg-blue-500/10", children: /* @__PURE__ */ jsx(EnvelopeIcon, { className: "h-8 w-8 text-ios-blue" }) }),
|
|
353
353
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
354
|
-
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-
|
|
355
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
354
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-slate-900 dark:text-white", children: t("verifyEmailTitle") }),
|
|
355
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: t("verifyEmailSubtitle", { email }) })
|
|
356
356
|
] })
|
|
357
357
|
] }),
|
|
358
358
|
error && /* @__PURE__ */ jsx("div", { className: "rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center", role: "alert", children: error }),
|
|
@@ -369,7 +369,7 @@ function VerifyEmail({
|
|
|
369
369
|
),
|
|
370
370
|
isSubmitting && /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Spinner, {}) }),
|
|
371
371
|
/* @__PURE__ */ jsxs("div", { className: "text-center space-y-1", children: [
|
|
372
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm text-
|
|
372
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-slate-500 dark:text-slate-400", children: t("verifyEmailNoCode") }),
|
|
373
373
|
/* @__PURE__ */ jsx(
|
|
374
374
|
Button,
|
|
375
375
|
{
|
|
@@ -445,8 +445,8 @@ function SignUp({
|
|
|
445
445
|
const isFormValid = name.trim() !== "" && email.trim() !== "" && password !== "" && termsAccepted;
|
|
446
446
|
const content = /* @__PURE__ */ jsxs("div", { className: "space-y-5", children: [
|
|
447
447
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
448
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-
|
|
449
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
448
|
+
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-slate-900 dark:text-white", children: t("signUpTitle") }),
|
|
449
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: t("signUpSubtitle") })
|
|
450
450
|
] }),
|
|
451
451
|
error && /* @__PURE__ */ jsx("div", { className: "rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red", role: "alert", children: error }),
|
|
452
452
|
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
|
|
@@ -525,8 +525,8 @@ function SignUp({
|
|
|
525
525
|
] }),
|
|
526
526
|
effectiveSocialProviders.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
527
527
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
528
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: "w-full border-t border-
|
|
529
|
-
/* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs", children: /* @__PURE__ */ jsx("span", { className: "bg-white dark:bg-
|
|
528
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("div", { className: "w-full border-t border-slate-200 dark:border-white/10" }) }),
|
|
529
|
+
/* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs", children: /* @__PURE__ */ jsx("span", { className: "bg-white dark:bg-slate-900 px-3 text-slate-400 dark:text-slate-500", children: t("orContinueWith") }) })
|
|
530
530
|
] }),
|
|
531
531
|
/* @__PURE__ */ jsx(
|
|
532
532
|
SocialLoginButtons,
|
|
@@ -685,8 +685,8 @@ function ResetPassword({
|
|
|
685
685
|
) });
|
|
686
686
|
const formContent = /* @__PURE__ */ jsxs("div", { className: "space-y-5", children: [
|
|
687
687
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
688
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-
|
|
689
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
688
|
+
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-slate-900 dark:text-white", children: t("resetPasswordTitle") }),
|
|
689
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: t("resetPasswordSubtitle") })
|
|
690
690
|
] }),
|
|
691
691
|
error && /* @__PURE__ */ jsx("div", { className: "rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red", role: "alert", children: error }),
|
|
692
692
|
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
|
|
@@ -801,8 +801,8 @@ function PasswordlessSignIn({
|
|
|
801
801
|
);
|
|
802
802
|
const inputContent = /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
803
803
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
804
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-
|
|
805
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
804
|
+
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-slate-900 dark:text-white", children: t("passwordlessTitle") }),
|
|
805
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: t("passwordlessSubtitle") })
|
|
806
806
|
] }),
|
|
807
807
|
allowedChannels.length > 1 && /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(
|
|
808
808
|
SegmentedControl,
|
|
@@ -863,8 +863,8 @@ function PasswordlessSignIn({
|
|
|
863
863
|
] });
|
|
864
864
|
const verifyContent = /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
865
865
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
866
|
-
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-
|
|
867
|
-
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-
|
|
866
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl font-bold text-slate-900 dark:text-white", children: t("passwordlessEnterCodeTitle") }),
|
|
867
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-slate-500 dark:text-slate-400", children: channel === "email" ? t("passwordlessEnterCodeEmailSubtitle", { email: identifier }) : t("passwordlessEnterCodeSmsSubtitle", { phone: identifier }) })
|
|
868
868
|
] }),
|
|
869
869
|
error && /* @__PURE__ */ jsx("div", { className: "rounded-xl bg-red-50 dark:bg-red-900/20 px-4 py-3 text-sm text-ios-red text-center", role: "alert", children: error }),
|
|
870
870
|
/* @__PURE__ */ jsx(
|
|
@@ -1020,13 +1020,13 @@ function ConsentScreen({
|
|
|
1020
1020
|
function SsoConnectorList({ connectors, onSelect, loading = false }) {
|
|
1021
1021
|
const t = useTranslations("windsock");
|
|
1022
1022
|
if (loading) {
|
|
1023
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-8 text-sm text-
|
|
1023
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 py-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
1024
1024
|
/* @__PURE__ */ jsx(InlineSpinner, {}),
|
|
1025
1025
|
/* @__PURE__ */ jsx("span", { children: t("sso.connectorList.loading") })
|
|
1026
1026
|
] });
|
|
1027
1027
|
}
|
|
1028
1028
|
if (connectors.length === 0) {
|
|
1029
|
-
return /* @__PURE__ */ jsx("p", { className: "py-6 text-center text-sm text-
|
|
1029
|
+
return /* @__PURE__ */ jsx("p", { className: "py-6 text-center text-sm text-slate-500 dark:text-slate-400", children: t("sso.connectorList.empty") });
|
|
1030
1030
|
}
|
|
1031
1031
|
return /* @__PURE__ */ jsx(ListCard, { children: connectors.map((connector) => {
|
|
1032
1032
|
const initials = connector.name.split(" ").map((word) => word[0]).join("").slice(0, 2).toUpperCase();
|
|
@@ -1043,12 +1043,12 @@ function SsoConnectorList({ connectors, onSelect, loading = false }) {
|
|
|
1043
1043
|
),
|
|
1044
1044
|
trailing: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1045
1045
|
/* @__PURE__ */ jsx(Badge, { color: "zinc", children: connector.type === "saml" ? t("sso.connectorList.typeSaml") : t("sso.connectorList.typeOidc") }),
|
|
1046
|
-
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-4 w-4 text-
|
|
1046
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-4 w-4 text-slate-400" })
|
|
1047
1047
|
] }),
|
|
1048
1048
|
onClick: () => onSelect(connector),
|
|
1049
1049
|
children: /* @__PURE__ */ jsxs("div", { children: [
|
|
1050
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-
|
|
1051
|
-
connector.domain && /* @__PURE__ */ jsx("p", { className: "text-xs text-
|
|
1050
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: connector.name }),
|
|
1051
|
+
connector.domain && /* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: connector.domain })
|
|
1052
1052
|
] })
|
|
1053
1053
|
},
|
|
1054
1054
|
connector.id
|
|
@@ -1106,8 +1106,8 @@ function SsoEmailForm({
|
|
|
1106
1106
|
if (phase === "connectors") {
|
|
1107
1107
|
const connectorsContent = /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
1108
1108
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
1109
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-
|
|
1110
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-
|
|
1109
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: t("sso.emailForm.connectorsTitle") }),
|
|
1110
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: t("sso.emailForm.connectorsSubtitle", { email }) })
|
|
1111
1111
|
] }),
|
|
1112
1112
|
/* @__PURE__ */ jsx(
|
|
1113
1113
|
SsoConnectorList,
|
|
@@ -1127,8 +1127,8 @@ function SsoEmailForm({
|
|
|
1127
1127
|
}
|
|
1128
1128
|
const emailContent = /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
1129
1129
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
1130
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-
|
|
1131
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-
|
|
1130
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: t("sso.emailForm.title") }),
|
|
1131
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: t("sso.emailForm.subtitle") })
|
|
1132
1132
|
] }),
|
|
1133
1133
|
/* @__PURE__ */ jsxs(BaseForm, { onSubmit: handleEmailSubmit, submitLabel: t("sso.emailForm.continueButton"), showFooter: false, children: [
|
|
1134
1134
|
/* @__PURE__ */ jsx(
|
|
@@ -1293,5 +1293,5 @@ function UserButton({ menuItems = [], onSignOut, avatarUrl, labels }) {
|
|
|
1293
1293
|
}
|
|
1294
1294
|
|
|
1295
1295
|
export { ConsentScreen, ForgotPassword, MfaChallenge, PasswordlessSignIn, ResetPassword, SignIn, SignUp, SsoConnectorList, SsoEmailForm, UserButton, VerifyEmail };
|
|
1296
|
-
//# sourceMappingURL=chunk-
|
|
1297
|
-
//# sourceMappingURL=chunk-
|
|
1296
|
+
//# sourceMappingURL=chunk-7LIJTAIF.mjs.map
|
|
1297
|
+
//# sourceMappingURL=chunk-7LIJTAIF.mjs.map
|