@retinalabsllc/zairusjs 0.9.8 → 1.0.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/index.d.mts +3 -7
- package/dist/index.d.ts +3 -7
- package/dist/index.js +92 -14
- package/dist/index.mjs +94 -15
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -447,6 +447,7 @@ interface GifFeatureCardProps {
|
|
|
447
447
|
}
|
|
448
448
|
declare const GifFeatureCard: React.FC<GifFeatureCardProps>;
|
|
449
449
|
|
|
450
|
+
type AppTypeKey = 'docx' | 'sheets' | 'mail' | 'calendar' | 'drive' | 'audditur' | 'desktop' | 'admin' | 'unknown';
|
|
450
451
|
interface NavItem {
|
|
451
452
|
name: string;
|
|
452
453
|
path: string;
|
|
@@ -458,18 +459,13 @@ interface WorkspaceItem {
|
|
|
458
459
|
role: string;
|
|
459
460
|
}
|
|
460
461
|
interface UniversalSidebarProps {
|
|
461
|
-
/** Navigation items to render */
|
|
462
462
|
navItems: NavItem[];
|
|
463
|
-
/** The current active path to determine highlight state */
|
|
464
463
|
currentPath: string;
|
|
465
|
-
/** Mobile drawer state */
|
|
466
464
|
isMobileOpen: boolean;
|
|
467
|
-
/** Function to close the mobile drawer */
|
|
468
465
|
closeMobile: () => void;
|
|
469
|
-
/** Function to open the mobile drawer (used by the floating mobile button) */
|
|
470
466
|
openMobile: () => void;
|
|
471
|
-
/** Optional click interceptor (useful for unsaved changes warnings) */
|
|
472
467
|
onNavClick?: (e: React.MouseEvent<HTMLAnchorElement>, path: string) => void;
|
|
468
|
+
currentAppType?: AppTypeKey;
|
|
473
469
|
title?: string;
|
|
474
470
|
subtitle?: string;
|
|
475
471
|
homeUrl?: string;
|
|
@@ -1004,4 +1000,4 @@ interface ContentGridBlockProps {
|
|
|
1004
1000
|
}
|
|
1005
1001
|
declare const ContentGridBlock: React.FC<ContentGridBlockProps>;
|
|
1006
1002
|
|
|
1007
|
-
export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, Banner, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
|
|
1003
|
+
export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
|
package/dist/index.d.ts
CHANGED
|
@@ -447,6 +447,7 @@ interface GifFeatureCardProps {
|
|
|
447
447
|
}
|
|
448
448
|
declare const GifFeatureCard: React.FC<GifFeatureCardProps>;
|
|
449
449
|
|
|
450
|
+
type AppTypeKey = 'docx' | 'sheets' | 'mail' | 'calendar' | 'drive' | 'audditur' | 'desktop' | 'admin' | 'unknown';
|
|
450
451
|
interface NavItem {
|
|
451
452
|
name: string;
|
|
452
453
|
path: string;
|
|
@@ -458,18 +459,13 @@ interface WorkspaceItem {
|
|
|
458
459
|
role: string;
|
|
459
460
|
}
|
|
460
461
|
interface UniversalSidebarProps {
|
|
461
|
-
/** Navigation items to render */
|
|
462
462
|
navItems: NavItem[];
|
|
463
|
-
/** The current active path to determine highlight state */
|
|
464
463
|
currentPath: string;
|
|
465
|
-
/** Mobile drawer state */
|
|
466
464
|
isMobileOpen: boolean;
|
|
467
|
-
/** Function to close the mobile drawer */
|
|
468
465
|
closeMobile: () => void;
|
|
469
|
-
/** Function to open the mobile drawer (used by the floating mobile button) */
|
|
470
466
|
openMobile: () => void;
|
|
471
|
-
/** Optional click interceptor (useful for unsaved changes warnings) */
|
|
472
467
|
onNavClick?: (e: React.MouseEvent<HTMLAnchorElement>, path: string) => void;
|
|
468
|
+
currentAppType?: AppTypeKey;
|
|
473
469
|
title?: string;
|
|
474
470
|
subtitle?: string;
|
|
475
471
|
homeUrl?: string;
|
|
@@ -1004,4 +1000,4 @@ interface ContentGridBlockProps {
|
|
|
1004
1000
|
}
|
|
1005
1001
|
declare const ContentGridBlock: React.FC<ContentGridBlockProps>;
|
|
1006
1002
|
|
|
1007
|
-
export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, Banner, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
|
|
1003
|
+
export { AITranscriptionFeature, type AITranscriptionFeatureProps, type AgentFilePayload, type AgentStat, AiApproveDecline, type AiApproveDeclineProps, AiStageCheck, type AiStageCheckProps, type AiTask, type AiTaskStatus, AppBento2, type AppBento2Props, type AppTypeKey, Banner, type BannerProps, type BentoFeature, type BoardMember, type CompanyDetails, type CompanyMember, type ConsultantProfile, ConsultantShowcase, type ConsultantShowcaseProps, ContentGridBlock, type ContentGridBlockProps, type DashboardList, type DashboardListItem, type DashboardStat, type DocumentSectionData, type EmailContact, Faq, type FaqItem, type FaqProps, FeatureScroll, type FeatureScrollProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GifFeatureCard, type GifFeatureCardProps, Header, type HeaderLink, type HeaderProps, type AppLogo$1 as HeroAppLogo, HeroSection, type HeroSectionProps, ManagedBoardBlock, type ManagedBoardBlockProps, ManagedContactBlock, type ManagedContactBlockProps, ManagedDocument, type ManagedDocumentProps, ManagedNewsletterSplitBlock, type ManagedNewsletterSplitBlockProps, ManagedNotFoundBlock, type ManagedNotFoundBlockProps, ManagedPricingBlock, type ManagedPricingBlockProps, ManagedProjectsBlock, type ManagedProjectsBlockProps, ManagedToaster, MedicalFeatureStatsBlock, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type AppLogo as PricingAppLogo, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, type StatItem, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, UniversalDeveloperSettings, type UniversalDeveloperSettingsProps, UniversalDirectoryPage, type UniversalDirectoryPageProps, UniversalErrorView, type UniversalErrorViewProps, UniversalIdentityPage, type UniversalIdentityPageProps, type UniversalInvoice, UniversalLookupPage, type UniversalLookupPageProps, type UniversalMember, UniversalMembersPage, type UniversalMembersPageProps, UniversalOrganizationPage, type UniversalOrganizationPageProps, UniversalOverviewPage, type UniversalOverviewPageProps, UniversalProfileSettings, type UniversalProfileSettingsProps, UniversalRegistrationFlow, type UniversalRegistrationFlowProps, UniversalSidebar, type UniversalSidebarProps, type WorkspaceItem, ZairusAuth, type ZairusAuthProps };
|
package/dist/index.js
CHANGED
|
@@ -1701,6 +1701,15 @@ var import_link9 = __toESM(require("next/link"));
|
|
|
1701
1701
|
var import_react37 = require("@hugeicons/react");
|
|
1702
1702
|
var import_core_free_icons8 = require("@hugeicons/core-free-icons");
|
|
1703
1703
|
var ButtonSpinner = () => /* @__PURE__ */ import_react36.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react36.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react36.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1704
|
+
var ECOSYSTEM_APPS = [
|
|
1705
|
+
{ id: "desktop", name: "Retina Desktop", description: "Unified AI Workspace", iconSrc: "https://retinalabs.company/assets/images/desktop.avif", url: "https://retinadesktop.com/app" },
|
|
1706
|
+
{ id: "audditur", name: "Audditur", description: "AI Legal & Compliance", iconSrc: "https://retinalabs.company/assets/images/audditur.avif", url: "https://audditur.retinaapps.com/app" },
|
|
1707
|
+
{ id: "docx", name: "Retina Docx", description: "Collaborative Word Processing", iconSrc: "https://retinalabs.company/assets/images/docx.avif", url: "https://docx.retinaapps.com/app" },
|
|
1708
|
+
{ id: "sheets", name: "Retina Sheets", description: "Advanced Spreadsheets", iconSrc: "https://retinalabs.company/assets/images/sheets.avif", url: "https://sheets.retinaapps.com/app" },
|
|
1709
|
+
{ id: "drive", name: "Retina Drive", description: "Secure Cloud Storage", iconSrc: "https://retinalabs.company/assets/images/drive.avif", url: "https://drive.retinaapps.com/app" },
|
|
1710
|
+
{ id: "calendar", name: "Retina Calendar", description: "Smart Scheduling", iconSrc: "https://retinalabs.company/assets/images/calendar.avif", url: "https://calendar.retinaapps.com/app" },
|
|
1711
|
+
{ id: "mail", name: "Retina Mail", description: "Encrypted Communications", iconSrc: "https://retinalabs.company/assets/images/mail.avif", url: "https://mail.retinaapps.com/app" }
|
|
1712
|
+
];
|
|
1704
1713
|
var UniversalSidebar = ({
|
|
1705
1714
|
navItems,
|
|
1706
1715
|
currentPath,
|
|
@@ -1708,7 +1717,7 @@ var UniversalSidebar = ({
|
|
|
1708
1717
|
closeMobile,
|
|
1709
1718
|
openMobile,
|
|
1710
1719
|
onNavClick,
|
|
1711
|
-
|
|
1720
|
+
currentAppType = "unknown",
|
|
1712
1721
|
title = "App",
|
|
1713
1722
|
subtitle,
|
|
1714
1723
|
homeUrl = "/app",
|
|
@@ -1720,7 +1729,6 @@ var UniversalSidebar = ({
|
|
|
1720
1729
|
onSwitchWorkspace,
|
|
1721
1730
|
showLogoutAction = false,
|
|
1722
1731
|
onLogout,
|
|
1723
|
-
// Intercept
|
|
1724
1732
|
showInterceptDialog = false,
|
|
1725
1733
|
onCancelIntercept,
|
|
1726
1734
|
onConfirmIntercept,
|
|
@@ -1728,6 +1736,7 @@ var UniversalSidebar = ({
|
|
|
1728
1736
|
interceptMessage = "Are you sure you want to leave? All unsaved changes will be lost."
|
|
1729
1737
|
}) => {
|
|
1730
1738
|
const [isCollapsed, setIsCollapsed] = (0, import_react36.useState)(false);
|
|
1739
|
+
const [showAppSwitcherDialog, setShowAppSwitcherDialog] = (0, import_react36.useState)(false);
|
|
1731
1740
|
const [showSwitcherDialog, setShowSwitcherDialog] = (0, import_react36.useState)(false);
|
|
1732
1741
|
const [showLogoutDialog, setShowLogoutDialog] = (0, import_react36.useState)(false);
|
|
1733
1742
|
const [isLoggingOut, setIsLoggingOut] = (0, import_react36.useState)(false);
|
|
@@ -1749,11 +1758,12 @@ var UniversalSidebar = ({
|
|
|
1749
1758
|
setShowLogoutDialog(false);
|
|
1750
1759
|
}
|
|
1751
1760
|
};
|
|
1761
|
+
const currentAppConfig = ECOSYSTEM_APPS.find((app) => app.id === currentAppType);
|
|
1752
1762
|
return /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, /* @__PURE__ */ import_react36.default.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-neutral-100 z-40 flex items-center justify-between px-4" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1753
1763
|
"button",
|
|
1754
1764
|
{
|
|
1755
1765
|
onClick: openMobile,
|
|
1756
|
-
className: `w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1766
|
+
className: `w-10 h-10 bg-white rounded-full flex items-center justify-center text-black transition-all duration-300 outline-none ${isMobileOpen ? "opacity-0 pointer-events-none scale-90" : "opacity-100 scale-100"}`,
|
|
1757
1767
|
"aria-label": "Open Menu"
|
|
1758
1768
|
},
|
|
1759
1769
|
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.SidebarLeft01Icon, size: 18 })
|
|
@@ -1761,7 +1771,7 @@ var UniversalSidebar = ({
|
|
|
1761
1771
|
import_link9.default,
|
|
1762
1772
|
{
|
|
1763
1773
|
href: backUrl,
|
|
1764
|
-
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1774
|
+
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none",
|
|
1765
1775
|
"aria-label": "Go Back"
|
|
1766
1776
|
},
|
|
1767
1777
|
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.ArrowLeft01Icon, size: 18 })
|
|
@@ -1769,7 +1779,7 @@ var UniversalSidebar = ({
|
|
|
1769
1779
|
import_link9.default,
|
|
1770
1780
|
{
|
|
1771
1781
|
href: backUrl,
|
|
1772
|
-
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1782
|
+
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none pointer-events-auto",
|
|
1773
1783
|
"aria-label": "Go Back"
|
|
1774
1784
|
},
|
|
1775
1785
|
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.ArrowLeft01Icon, size: 18 })
|
|
@@ -1789,7 +1799,29 @@ var UniversalSidebar = ({
|
|
|
1789
1799
|
${isCollapsed ? "md:w-16 w-64" : "w-64"}
|
|
1790
1800
|
`
|
|
1791
1801
|
},
|
|
1792
|
-
/* @__PURE__ */ import_react36.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` },
|
|
1802
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1803
|
+
"button",
|
|
1804
|
+
{
|
|
1805
|
+
onClick: () => setShowAppSwitcherDialog(true),
|
|
1806
|
+
className: `flex items-center gap-3 outline-none group text-left ${!isCollapsed || isMobileOpen ? "w-full" : ""}`
|
|
1807
|
+
},
|
|
1808
|
+
currentAppConfig ? /* @__PURE__ */ import_react36.default.createElement(
|
|
1809
|
+
"img",
|
|
1810
|
+
{
|
|
1811
|
+
src: currentAppConfig.iconSrc,
|
|
1812
|
+
alt: currentAppConfig.name,
|
|
1813
|
+
className: "w-5 h-5 rounded-md object-contain shrink-0 group-hover:scale-105 transition-transform"
|
|
1814
|
+
}
|
|
1815
|
+
) : /* @__PURE__ */ import_react36.default.createElement("div", { className: " rounded-md shrink-0 flex items-center justify-center" }),
|
|
1816
|
+
(!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, /* @__PURE__ */ import_react36.default.createElement("div", { className: "flex flex-col justify-center min-w-0 pr-2 flex-1" }, /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[13px] text-black leading-none truncate tracking-wide mb-1 group-hover:opacity-70 transition-opacity" }, title), subtitle && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[9px] text-neutral-500 truncate tracking-[0.2em] leading-none uppercase" }, subtitle)), /* @__PURE__ */ import_react36.default.createElement(
|
|
1817
|
+
import_react37.HugeiconsIcon,
|
|
1818
|
+
{
|
|
1819
|
+
icon: import_core_free_icons8.CircleArrowDown01Icon,
|
|
1820
|
+
size: 14,
|
|
1821
|
+
className: "text-neutral-400 shrink-0 group-hover:text-black transition-colors ml-auto"
|
|
1822
|
+
}
|
|
1823
|
+
))
|
|
1824
|
+
), /* @__PURE__ */ import_react36.default.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1793
1825
|
"button",
|
|
1794
1826
|
{
|
|
1795
1827
|
onClick: closeMobile,
|
|
@@ -1846,7 +1878,39 @@ var UniversalSidebar = ({
|
|
|
1846
1878
|
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-400" }),
|
|
1847
1879
|
!isCollapsed && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-xs" }, "Collapse")
|
|
1848
1880
|
)))
|
|
1849
|
-
),
|
|
1881
|
+
), showAppSwitcherDialog && /* @__PURE__ */ import_react36.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1882
|
+
"div",
|
|
1883
|
+
{
|
|
1884
|
+
className: "absolute inset-0 bg-black/30 transition-opacity",
|
|
1885
|
+
onClick: () => setShowAppSwitcherDialog(false)
|
|
1886
|
+
}
|
|
1887
|
+
), /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative w-full max-w-85 bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "p-5 w-full flex items-center justify-between" }, /* @__PURE__ */ import_react36.default.createElement("div", null, /* @__PURE__ */ import_react36.default.createElement("h3", { className: "text-[15px] text-black tracking-tight font-medium" }, "Retina Apps"), /* @__PURE__ */ import_react36.default.createElement("p", { className: "text-[10px] text-neutral-500 tracking-widest mt-0.5 uppercase" }, "Switch Applications")), /* @__PURE__ */ import_react36.default.createElement(
|
|
1888
|
+
"button",
|
|
1889
|
+
{
|
|
1890
|
+
onClick: () => setShowAppSwitcherDialog(false),
|
|
1891
|
+
className: "w-8 h-8 flex items-center justify-center rounded-full hover:bg-neutral-100 text-neutral-400 transition-colors"
|
|
1892
|
+
},
|
|
1893
|
+
/* @__PURE__ */ import_react36.default.createElement(import_react37.HugeiconsIcon, { icon: import_core_free_icons8.CancelCircleIcon, size: 18 })
|
|
1894
|
+
)), /* @__PURE__ */ import_react36.default.createElement("div", { className: "max-h-[60vh] overflow-y-auto w-full custom-scrollbar p-2" }, ECOSYSTEM_APPS.map((app) => {
|
|
1895
|
+
const isActive = currentAppType === app.id;
|
|
1896
|
+
return /* @__PURE__ */ import_react36.default.createElement(
|
|
1897
|
+
"a",
|
|
1898
|
+
{
|
|
1899
|
+
key: app.id,
|
|
1900
|
+
href: app.url,
|
|
1901
|
+
className: `w-full text-left p-3 flex items-center gap-4 rounded-xl transition-all outline-none ${isActive ? " border border-neutral-200" : "hover:bg-neutral-50 border border-transparent"}`
|
|
1902
|
+
},
|
|
1903
|
+
/* @__PURE__ */ import_react36.default.createElement(
|
|
1904
|
+
"img",
|
|
1905
|
+
{
|
|
1906
|
+
src: app.iconSrc,
|
|
1907
|
+
alt: app.name,
|
|
1908
|
+
className: "w-5 h-5 object-contain shrink-0"
|
|
1909
|
+
}
|
|
1910
|
+
),
|
|
1911
|
+
/* @__PURE__ */ import_react36.default.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[13px] text-black font-medium tracking-tight truncate" }, app.name), /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[10px] text-neutral-500 mt-0.5 truncate leading-snug" }, app.description))
|
|
1912
|
+
);
|
|
1913
|
+
})))), showSwitcherDialog && showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ import_react36.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react36.default.createElement(
|
|
1850
1914
|
"div",
|
|
1851
1915
|
{
|
|
1852
1916
|
className: "absolute inset-0 bg-black/30",
|
|
@@ -3125,9 +3189,7 @@ var UniversalDirectoryPage = ({
|
|
|
3125
3189
|
headerTitle,
|
|
3126
3190
|
headerDescription,
|
|
3127
3191
|
hideSearch = false,
|
|
3128
|
-
// Default to false
|
|
3129
3192
|
headerAction,
|
|
3130
|
-
// Capture the action button
|
|
3131
3193
|
searchPlaceholder = "Search...",
|
|
3132
3194
|
searchQuery,
|
|
3133
3195
|
onSearchChange,
|
|
@@ -3142,14 +3204,14 @@ var UniversalDirectoryPage = ({
|
|
|
3142
3204
|
detailsContent,
|
|
3143
3205
|
modals
|
|
3144
3206
|
}) => {
|
|
3145
|
-
return /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ import_react59.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: "
|
|
3207
|
+
return /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ import_react59.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ import_react59.default.createElement(import_react59.default.Fragment, null, /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react59.default.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ import_react59.default.createElement(
|
|
3146
3208
|
TextInput,
|
|
3147
3209
|
{
|
|
3148
3210
|
placeholder: searchPlaceholder,
|
|
3149
3211
|
value: searchQuery,
|
|
3150
3212
|
onChange: onSearchChange
|
|
3151
3213
|
}
|
|
3152
|
-
)), headerAction && /* @__PURE__ */ import_react59.default.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react59.default.createElement("button", { onClick: onBackToList, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none uppercase" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowLeft01Icon, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ import_react59.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ import_react59.default.createElement(
|
|
3214
|
+
)), headerAction && /* @__PURE__ */ import_react59.default.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ import_react59.default.createElement("button", { onClick: onBackToList, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none uppercase" }, /* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowLeft01Icon, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ import_react59.default.createElement(PageSpinner4, null) : /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ import_react59.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No records found.") : items.map((item) => /* @__PURE__ */ import_react59.default.createElement(
|
|
3153
3215
|
"div",
|
|
3154
3216
|
{
|
|
3155
3217
|
key: item.id,
|
|
@@ -3158,7 +3220,23 @@ var UniversalDirectoryPage = ({
|
|
|
3158
3220
|
},
|
|
3159
3221
|
/* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ import_react59.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react59.default.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ import_react59.default.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText))),
|
|
3160
3222
|
item.rightBadge && /* @__PURE__ */ import_react59.default.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ import_react59.default.createElement("span", { className: `text-[10px] tracking-[0.2em] px-3 py-1 rounded-full whitespace-nowrap uppercase ${item.rightBadgeClass || "text-neutral-500 border border-neutral-200 bg-white"}` }, item.rightBadge))
|
|
3161
|
-
))),
|
|
3223
|
+
))), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ import_react59.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ import_react59.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react59.default.createElement(
|
|
3224
|
+
"button",
|
|
3225
|
+
{
|
|
3226
|
+
onClick: () => onPageChange(currentPage - 1),
|
|
3227
|
+
disabled: currentPage <= 1 || isLoading,
|
|
3228
|
+
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30 transition-all"
|
|
3229
|
+
},
|
|
3230
|
+
/* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowLeft01Icon, size: 14 })
|
|
3231
|
+
), /* @__PURE__ */ import_react59.default.createElement(
|
|
3232
|
+
"button",
|
|
3233
|
+
{
|
|
3234
|
+
onClick: () => onPageChange(currentPage + 1),
|
|
3235
|
+
disabled: currentPage >= totalPages || isLoading,
|
|
3236
|
+
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30 transition-all"
|
|
3237
|
+
},
|
|
3238
|
+
/* @__PURE__ */ import_react59.default.createElement(import_react60.HugeiconsIcon, { icon: import_core_free_icons19.ArrowRight01Icon, size: 14 })
|
|
3239
|
+
))))), currentView === "details" && detailsContent, modals);
|
|
3162
3240
|
};
|
|
3163
3241
|
|
|
3164
3242
|
// src/components/AiApproveDecline.tsx
|
|
@@ -3951,12 +4029,12 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3951
4029
|
className: "min-w-32 w-full sm:w-auto"
|
|
3952
4030
|
},
|
|
3953
4031
|
"Save Webhook"
|
|
3954
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full flex
|
|
4032
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react69.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react69.default.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react69.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react69.default.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react69.default.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ import_react69.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react69.default.createElement(
|
|
3955
4033
|
"button",
|
|
3956
4034
|
{
|
|
3957
4035
|
onClick: () => setIsRollModalOpen(false),
|
|
3958
4036
|
disabled: isGenerating,
|
|
3959
|
-
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none
|
|
4037
|
+
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
3960
4038
|
},
|
|
3961
4039
|
"Cancel"
|
|
3962
4040
|
), /* @__PURE__ */ import_react69.default.createElement(
|
package/dist/index.mjs
CHANGED
|
@@ -1625,9 +1625,19 @@ import {
|
|
|
1625
1625
|
UserIcon,
|
|
1626
1626
|
CheckmarkCircle01Icon,
|
|
1627
1627
|
LogoutCircle02Icon,
|
|
1628
|
-
ArrowLeft01Icon as ArrowLeft01Icon2
|
|
1628
|
+
ArrowLeft01Icon as ArrowLeft01Icon2,
|
|
1629
|
+
CircleArrowDown01Icon
|
|
1629
1630
|
} from "@hugeicons/core-free-icons";
|
|
1630
1631
|
var ButtonSpinner = () => /* @__PURE__ */ React25.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-400", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ React25.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ React25.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
|
|
1632
|
+
var ECOSYSTEM_APPS = [
|
|
1633
|
+
{ id: "desktop", name: "Retina Desktop", description: "Unified AI Workspace", iconSrc: "https://retinalabs.company/assets/images/desktop.avif", url: "https://retinadesktop.com/app" },
|
|
1634
|
+
{ id: "audditur", name: "Audditur", description: "AI Legal & Compliance", iconSrc: "https://retinalabs.company/assets/images/audditur.avif", url: "https://audditur.retinaapps.com/app" },
|
|
1635
|
+
{ id: "docx", name: "Retina Docx", description: "Collaborative Word Processing", iconSrc: "https://retinalabs.company/assets/images/docx.avif", url: "https://docx.retinaapps.com/app" },
|
|
1636
|
+
{ id: "sheets", name: "Retina Sheets", description: "Advanced Spreadsheets", iconSrc: "https://retinalabs.company/assets/images/sheets.avif", url: "https://sheets.retinaapps.com/app" },
|
|
1637
|
+
{ id: "drive", name: "Retina Drive", description: "Secure Cloud Storage", iconSrc: "https://retinalabs.company/assets/images/drive.avif", url: "https://drive.retinaapps.com/app" },
|
|
1638
|
+
{ id: "calendar", name: "Retina Calendar", description: "Smart Scheduling", iconSrc: "https://retinalabs.company/assets/images/calendar.avif", url: "https://calendar.retinaapps.com/app" },
|
|
1639
|
+
{ id: "mail", name: "Retina Mail", description: "Encrypted Communications", iconSrc: "https://retinalabs.company/assets/images/mail.avif", url: "https://mail.retinaapps.com/app" }
|
|
1640
|
+
];
|
|
1631
1641
|
var UniversalSidebar = ({
|
|
1632
1642
|
navItems,
|
|
1633
1643
|
currentPath,
|
|
@@ -1635,7 +1645,7 @@ var UniversalSidebar = ({
|
|
|
1635
1645
|
closeMobile,
|
|
1636
1646
|
openMobile,
|
|
1637
1647
|
onNavClick,
|
|
1638
|
-
|
|
1648
|
+
currentAppType = "unknown",
|
|
1639
1649
|
title = "App",
|
|
1640
1650
|
subtitle,
|
|
1641
1651
|
homeUrl = "/app",
|
|
@@ -1647,7 +1657,6 @@ var UniversalSidebar = ({
|
|
|
1647
1657
|
onSwitchWorkspace,
|
|
1648
1658
|
showLogoutAction = false,
|
|
1649
1659
|
onLogout,
|
|
1650
|
-
// Intercept
|
|
1651
1660
|
showInterceptDialog = false,
|
|
1652
1661
|
onCancelIntercept,
|
|
1653
1662
|
onConfirmIntercept,
|
|
@@ -1655,6 +1664,7 @@ var UniversalSidebar = ({
|
|
|
1655
1664
|
interceptMessage = "Are you sure you want to leave? All unsaved changes will be lost."
|
|
1656
1665
|
}) => {
|
|
1657
1666
|
const [isCollapsed, setIsCollapsed] = useState13(false);
|
|
1667
|
+
const [showAppSwitcherDialog, setShowAppSwitcherDialog] = useState13(false);
|
|
1658
1668
|
const [showSwitcherDialog, setShowSwitcherDialog] = useState13(false);
|
|
1659
1669
|
const [showLogoutDialog, setShowLogoutDialog] = useState13(false);
|
|
1660
1670
|
const [isLoggingOut, setIsLoggingOut] = useState13(false);
|
|
@@ -1676,11 +1686,12 @@ var UniversalSidebar = ({
|
|
|
1676
1686
|
setShowLogoutDialog(false);
|
|
1677
1687
|
}
|
|
1678
1688
|
};
|
|
1689
|
+
const currentAppConfig = ECOSYSTEM_APPS.find((app) => app.id === currentAppType);
|
|
1679
1690
|
return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-neutral-100 z-40 flex items-center justify-between px-4" }, /* @__PURE__ */ React25.createElement(
|
|
1680
1691
|
"button",
|
|
1681
1692
|
{
|
|
1682
1693
|
onClick: openMobile,
|
|
1683
|
-
className: `w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1694
|
+
className: `w-10 h-10 bg-white rounded-full flex items-center justify-center text-black transition-all duration-300 outline-none ${isMobileOpen ? "opacity-0 pointer-events-none scale-90" : "opacity-100 scale-100"}`,
|
|
1684
1695
|
"aria-label": "Open Menu"
|
|
1685
1696
|
},
|
|
1686
1697
|
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: SidebarLeft01Icon, size: 18 })
|
|
@@ -1688,7 +1699,7 @@ var UniversalSidebar = ({
|
|
|
1688
1699
|
Link9,
|
|
1689
1700
|
{
|
|
1690
1701
|
href: backUrl,
|
|
1691
|
-
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1702
|
+
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none",
|
|
1692
1703
|
"aria-label": "Go Back"
|
|
1693
1704
|
},
|
|
1694
1705
|
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: ArrowLeft01Icon2, size: 18 })
|
|
@@ -1696,7 +1707,7 @@ var UniversalSidebar = ({
|
|
|
1696
1707
|
Link9,
|
|
1697
1708
|
{
|
|
1698
1709
|
href: backUrl,
|
|
1699
|
-
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center
|
|
1710
|
+
className: "w-10 h-10 bg-white rounded-full flex items-center justify-center text-black hover:bg-neutral-50 transition-all duration-300 outline-none pointer-events-auto",
|
|
1700
1711
|
"aria-label": "Go Back"
|
|
1701
1712
|
},
|
|
1702
1713
|
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: ArrowLeft01Icon2, size: 18 })
|
|
@@ -1716,7 +1727,29 @@ var UniversalSidebar = ({
|
|
|
1716
1727
|
${isCollapsed ? "md:w-16 w-64" : "w-64"}
|
|
1717
1728
|
`
|
|
1718
1729
|
},
|
|
1719
|
-
/* @__PURE__ */ React25.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` },
|
|
1730
|
+
/* @__PURE__ */ React25.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, /* @__PURE__ */ React25.createElement(
|
|
1731
|
+
"button",
|
|
1732
|
+
{
|
|
1733
|
+
onClick: () => setShowAppSwitcherDialog(true),
|
|
1734
|
+
className: `flex items-center gap-3 outline-none group text-left ${!isCollapsed || isMobileOpen ? "w-full" : ""}`
|
|
1735
|
+
},
|
|
1736
|
+
currentAppConfig ? /* @__PURE__ */ React25.createElement(
|
|
1737
|
+
"img",
|
|
1738
|
+
{
|
|
1739
|
+
src: currentAppConfig.iconSrc,
|
|
1740
|
+
alt: currentAppConfig.name,
|
|
1741
|
+
className: "w-5 h-5 rounded-md object-contain shrink-0 group-hover:scale-105 transition-transform"
|
|
1742
|
+
}
|
|
1743
|
+
) : /* @__PURE__ */ React25.createElement("div", { className: " rounded-md shrink-0 flex items-center justify-center" }),
|
|
1744
|
+
(!isCollapsed || isMobileOpen) && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col justify-center min-w-0 pr-2 flex-1" }, /* @__PURE__ */ React25.createElement("span", { className: "text-[13px] text-black leading-none truncate tracking-wide mb-1 group-hover:opacity-70 transition-opacity" }, title), subtitle && /* @__PURE__ */ React25.createElement("span", { className: "text-[9px] text-neutral-500 truncate tracking-[0.2em] leading-none uppercase" }, subtitle)), /* @__PURE__ */ React25.createElement(
|
|
1745
|
+
HugeiconsIcon12,
|
|
1746
|
+
{
|
|
1747
|
+
icon: CircleArrowDown01Icon,
|
|
1748
|
+
size: 14,
|
|
1749
|
+
className: "text-neutral-400 shrink-0 group-hover:text-black transition-colors ml-auto"
|
|
1750
|
+
}
|
|
1751
|
+
))
|
|
1752
|
+
), /* @__PURE__ */ React25.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ React25.createElement(
|
|
1720
1753
|
"button",
|
|
1721
1754
|
{
|
|
1722
1755
|
onClick: closeMobile,
|
|
@@ -1773,7 +1806,39 @@ var UniversalSidebar = ({
|
|
|
1773
1806
|
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-400" }),
|
|
1774
1807
|
!isCollapsed && /* @__PURE__ */ React25.createElement("span", { className: "text-xs" }, "Collapse")
|
|
1775
1808
|
)))
|
|
1776
|
-
),
|
|
1809
|
+
), showAppSwitcherDialog && /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React25.createElement(
|
|
1810
|
+
"div",
|
|
1811
|
+
{
|
|
1812
|
+
className: "absolute inset-0 bg-black/30 transition-opacity",
|
|
1813
|
+
onClick: () => setShowAppSwitcherDialog(false)
|
|
1814
|
+
}
|
|
1815
|
+
), /* @__PURE__ */ React25.createElement("div", { className: "relative w-full max-w-85 bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React25.createElement("div", { className: "p-5 w-full flex items-center justify-between" }, /* @__PURE__ */ React25.createElement("div", null, /* @__PURE__ */ React25.createElement("h3", { className: "text-[15px] text-black tracking-tight font-medium" }, "Retina Apps"), /* @__PURE__ */ React25.createElement("p", { className: "text-[10px] text-neutral-500 tracking-widest mt-0.5 uppercase" }, "Switch Applications")), /* @__PURE__ */ React25.createElement(
|
|
1816
|
+
"button",
|
|
1817
|
+
{
|
|
1818
|
+
onClick: () => setShowAppSwitcherDialog(false),
|
|
1819
|
+
className: "w-8 h-8 flex items-center justify-center rounded-full hover:bg-neutral-100 text-neutral-400 transition-colors"
|
|
1820
|
+
},
|
|
1821
|
+
/* @__PURE__ */ React25.createElement(HugeiconsIcon12, { icon: CancelCircleIcon, size: 18 })
|
|
1822
|
+
)), /* @__PURE__ */ React25.createElement("div", { className: "max-h-[60vh] overflow-y-auto w-full custom-scrollbar p-2" }, ECOSYSTEM_APPS.map((app) => {
|
|
1823
|
+
const isActive = currentAppType === app.id;
|
|
1824
|
+
return /* @__PURE__ */ React25.createElement(
|
|
1825
|
+
"a",
|
|
1826
|
+
{
|
|
1827
|
+
key: app.id,
|
|
1828
|
+
href: app.url,
|
|
1829
|
+
className: `w-full text-left p-3 flex items-center gap-4 rounded-xl transition-all outline-none ${isActive ? " border border-neutral-200" : "hover:bg-neutral-50 border border-transparent"}`
|
|
1830
|
+
},
|
|
1831
|
+
/* @__PURE__ */ React25.createElement(
|
|
1832
|
+
"img",
|
|
1833
|
+
{
|
|
1834
|
+
src: app.iconSrc,
|
|
1835
|
+
alt: app.name,
|
|
1836
|
+
className: "w-5 h-5 object-contain shrink-0"
|
|
1837
|
+
}
|
|
1838
|
+
),
|
|
1839
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex flex-col min-w-0 flex-1" }, /* @__PURE__ */ React25.createElement("span", { className: "text-[13px] text-black font-medium tracking-tight truncate" }, app.name), /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] text-neutral-500 mt-0.5 truncate leading-snug" }, app.description))
|
|
1840
|
+
);
|
|
1841
|
+
})))), showSwitcherDialog && showWorkspaceSwitcher && workspaces && workspaces.length > 0 && /* @__PURE__ */ React25.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React25.createElement(
|
|
1777
1842
|
"div",
|
|
1778
1843
|
{
|
|
1779
1844
|
className: "absolute inset-0 bg-black/30",
|
|
@@ -3087,9 +3152,7 @@ var UniversalDirectoryPage = ({
|
|
|
3087
3152
|
headerTitle,
|
|
3088
3153
|
headerDescription,
|
|
3089
3154
|
hideSearch = false,
|
|
3090
|
-
// Default to false
|
|
3091
3155
|
headerAction,
|
|
3092
|
-
// Capture the action button
|
|
3093
3156
|
searchPlaceholder = "Search...",
|
|
3094
3157
|
searchQuery,
|
|
3095
3158
|
onSearchChange,
|
|
@@ -3104,14 +3167,14 @@ var UniversalDirectoryPage = ({
|
|
|
3104
3167
|
detailsContent,
|
|
3105
3168
|
modals
|
|
3106
3169
|
}) => {
|
|
3107
|
-
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ React37.createElement(ManagedToaster, null), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement("div", { className: "w-full" }, /* @__PURE__ */ React37.createElement("h1", { className: "
|
|
3170
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-3xl fade-in duration-300 p-6 rounded-2xl bg-white" }, /* @__PURE__ */ React37.createElement(ManagedToaster, null), /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, currentView === "list" ? /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement("div", { className: "w-full" }, /* @__PURE__ */ React37.createElement("h1", { className: " text-xl text-black mb-1 tracking-tight" }, headerTitle), /* @__PURE__ */ React37.createElement("p", { className: "text-xs text-neutral-500 mb-6" }, headerDescription), !hideSearch && /* @__PURE__ */ React37.createElement(
|
|
3108
3171
|
TextInput,
|
|
3109
3172
|
{
|
|
3110
3173
|
placeholder: searchPlaceholder,
|
|
3111
3174
|
value: searchQuery,
|
|
3112
3175
|
onChange: onSearchChange
|
|
3113
3176
|
}
|
|
3114
|
-
)), headerAction && /* @__PURE__ */ React37.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ React37.createElement("button", { onClick: onBackToList, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none uppercase" }, /* @__PURE__ */ React37.createElement(HugeiconsIcon23, { icon: ArrowLeft01Icon6, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ React37.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ React37.createElement(PageSpinner4, null) : /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React37.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ React37.createElement(
|
|
3177
|
+
)), headerAction && /* @__PURE__ */ React37.createElement("div", { className: "shrink-0 w-full sm:w-auto mt-4 sm:mt-0" }, headerAction)) : /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col items-start gap-3" }, /* @__PURE__ */ React37.createElement("button", { onClick: onBackToList, className: "text-[10px] text-neutral-400 hover:text-black tracking-[0.2em] flex items-center gap-1.5 transition-colors outline-none uppercase" }, /* @__PURE__ */ React37.createElement(HugeiconsIcon23, { icon: ArrowLeft01Icon6, size: 12 }), " Back"))), currentView === "list" && /* @__PURE__ */ React37.createElement("div", { className: "w-full overflow-hidden pt-2" }, isLoading ? /* @__PURE__ */ React37.createElement(PageSpinner4, null) : /* @__PURE__ */ React37.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React37.createElement("div", { className: "divide-y divide-neutral-100" }, items.length === 0 ? /* @__PURE__ */ React37.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No records found.") : items.map((item) => /* @__PURE__ */ React37.createElement(
|
|
3115
3178
|
"div",
|
|
3116
3179
|
{
|
|
3117
3180
|
key: item.id,
|
|
@@ -3120,7 +3183,23 @@ var UniversalDirectoryPage = ({
|
|
|
3120
3183
|
},
|
|
3121
3184
|
/* @__PURE__ */ React37.createElement("div", { className: "flex items-center gap-3 sm:gap-4 min-w-0 flex-1" }, /* @__PURE__ */ React37.createElement("div", { className: "w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-100 text-black text-xs" }, item.icon), /* @__PURE__ */ React37.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React37.createElement("div", { className: "text-sm text-black truncate pr-2" }, item.primaryText), /* @__PURE__ */ React37.createElement("div", { className: "text-xs text-neutral-500 truncate pr-2 mt-0.5" }, item.secondaryText))),
|
|
3122
3185
|
item.rightBadge && /* @__PURE__ */ React37.createElement("div", { className: "shrink-0 pl-2" }, /* @__PURE__ */ React37.createElement("span", { className: `text-[10px] tracking-[0.2em] px-3 py-1 rounded-full whitespace-nowrap uppercase ${item.rightBadgeClass || "text-neutral-500 border border-neutral-200 bg-white"}` }, item.rightBadge))
|
|
3123
|
-
))),
|
|
3186
|
+
))), /* @__PURE__ */ React37.createElement("div", { className: "flex items-center justify-between p-4 sm:p-5" }, /* @__PURE__ */ React37.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] uppercase" }, "Page ", currentPage, " of ", Math.max(1, totalPages)), /* @__PURE__ */ React37.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React37.createElement(
|
|
3187
|
+
"button",
|
|
3188
|
+
{
|
|
3189
|
+
onClick: () => onPageChange(currentPage - 1),
|
|
3190
|
+
disabled: currentPage <= 1 || isLoading,
|
|
3191
|
+
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30 transition-all"
|
|
3192
|
+
},
|
|
3193
|
+
/* @__PURE__ */ React37.createElement(HugeiconsIcon23, { icon: ArrowLeft01Icon6, size: 14 })
|
|
3194
|
+
), /* @__PURE__ */ React37.createElement(
|
|
3195
|
+
"button",
|
|
3196
|
+
{
|
|
3197
|
+
onClick: () => onPageChange(currentPage + 1),
|
|
3198
|
+
disabled: currentPage >= totalPages || isLoading,
|
|
3199
|
+
className: "p-2 border border-neutral-200 rounded-full bg-white text-neutral-500 hover:text-black outline-none disabled:opacity-30 transition-all"
|
|
3200
|
+
},
|
|
3201
|
+
/* @__PURE__ */ React37.createElement(HugeiconsIcon23, { icon: ArrowRight01Icon6, size: 14 })
|
|
3202
|
+
))))), currentView === "details" && detailsContent, modals);
|
|
3124
3203
|
};
|
|
3125
3204
|
|
|
3126
3205
|
// src/components/AiApproveDecline.tsx
|
|
@@ -3913,12 +3992,12 @@ AUDDITUR_SECRET_KEY="${secKey}"
|
|
|
3913
3992
|
className: "min-w-32 w-full sm:w-auto"
|
|
3914
3993
|
},
|
|
3915
3994
|
"Save Webhook"
|
|
3916
|
-
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React42.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ React42.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React42.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ React42.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ React42.createElement("div", { className: "w-full flex
|
|
3995
|
+
))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ React42.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ React42.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ React42.createElement("div", { className: "relative w-72 bg-white shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ React42.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ React42.createElement("h3", { className: " text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ React42.createElement("p", { className: "text-[12px] text-neutral-500 leading-snug mt-2" }, "Are you sure you want to roll your keys? This will permanently invalidate your current secret key and active MCP tokens.")), /* @__PURE__ */ React42.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ React42.createElement(
|
|
3917
3996
|
"button",
|
|
3918
3997
|
{
|
|
3919
3998
|
onClick: () => setIsRollModalOpen(false),
|
|
3920
3999
|
disabled: isGenerating,
|
|
3921
|
-
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none
|
|
4000
|
+
className: "flex-1 py-3 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
|
|
3922
4001
|
},
|
|
3923
4002
|
"Cancel"
|
|
3924
4003
|
), /* @__PURE__ */ React42.createElement(
|