@retinalabsllc/zairusjs 0.6.7 → 0.6.9

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 CHANGED
@@ -357,7 +357,7 @@ interface TextInputProps {
357
357
  maxLength?: number;
358
358
  disabled?: boolean;
359
359
  readOnly?: boolean;
360
- type?: 'text' | 'password' | 'email';
360
+ type?: 'text' | 'password' | 'email' | 'url';
361
361
  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
362
362
  }
363
363
  interface NumberInputProps {
@@ -880,4 +880,26 @@ interface BannerProps {
880
880
  }
881
881
  declare const Banner: React.FC<BannerProps>;
882
882
 
883
- 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 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, 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, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, 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 };
883
+ interface UniversalDeveloperSettingsProps {
884
+ initialPublicKey: string;
885
+ initialWebhookUrl: string;
886
+ isReadOnly?: boolean;
887
+ onGenerateKeys: () => Promise<{
888
+ success: boolean;
889
+ data?: {
890
+ publicKey: string;
891
+ secretKey: string;
892
+ };
893
+ error?: string;
894
+ }>;
895
+ onSaveWebhook: (webhookUrl: string) => Promise<{
896
+ success: boolean;
897
+ data?: {
898
+ webhookUrl: string;
899
+ };
900
+ error?: string;
901
+ }>;
902
+ }
903
+ declare const UniversalDeveloperSettings: React.FC<UniversalDeveloperSettingsProps>;
904
+
905
+ 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 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, 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, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, 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
@@ -357,7 +357,7 @@ interface TextInputProps {
357
357
  maxLength?: number;
358
358
  disabled?: boolean;
359
359
  readOnly?: boolean;
360
- type?: 'text' | 'password' | 'email';
360
+ type?: 'text' | 'password' | 'email' | 'url';
361
361
  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
362
362
  }
363
363
  interface NumberInputProps {
@@ -880,4 +880,26 @@ interface BannerProps {
880
880
  }
881
881
  declare const Banner: React.FC<BannerProps>;
882
882
 
883
- 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 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, 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, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, TextInput, type TextInputProps, ThreeDActionButton, type ThreeDActionButtonProps, ThreeDButton, type ThreeDButtonProps, UniversalAgentConsole, type UniversalAgentConsoleProps, UniversalBillingPage, type UniversalBillingPageProps, UniversalDashboardPage, type UniversalDashboardPageProps, 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 };
883
+ interface UniversalDeveloperSettingsProps {
884
+ initialPublicKey: string;
885
+ initialWebhookUrl: string;
886
+ isReadOnly?: boolean;
887
+ onGenerateKeys: () => Promise<{
888
+ success: boolean;
889
+ data?: {
890
+ publicKey: string;
891
+ secretKey: string;
892
+ };
893
+ error?: string;
894
+ }>;
895
+ onSaveWebhook: (webhookUrl: string) => Promise<{
896
+ success: boolean;
897
+ data?: {
898
+ webhookUrl: string;
899
+ };
900
+ error?: string;
901
+ }>;
902
+ }
903
+ declare const UniversalDeveloperSettings: React.FC<UniversalDeveloperSettingsProps>;
904
+
905
+ 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 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, 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, type NavItem, NumberInput, type NumberInputProps, type OverviewAlert, type OverviewStat, PageSpinner, type PageSpinnerProps, type PlatformFeatureItem, PlatformFeatures, type PlatformFeaturesProps, PortfolioHero, type PortfolioHeroProps, type PricingFeature, type PricingPlan, ProductHero, type ProductHeroProps, type ProjectItem, type ScrollFeature, type SearchTypeOption, type SocialContact, type SocialLink, Stagger, type StaggerProps, 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
@@ -62,6 +62,7 @@ __export(index_exports, {
62
62
  UniversalAgentConsole: () => UniversalAgentConsole,
63
63
  UniversalBillingPage: () => UniversalBillingPage,
64
64
  UniversalDashboardPage: () => UniversalDashboardPage,
65
+ UniversalDeveloperSettings: () => UniversalDeveloperSettings,
65
66
  UniversalDirectoryPage: () => UniversalDirectoryPage,
66
67
  UniversalErrorView: () => UniversalErrorView,
67
68
  UniversalIdentityPage: () => UniversalIdentityPage,
@@ -535,8 +536,9 @@ var NavLink = ({
535
536
  }) => {
536
537
  const pathname = (0, import_navigation2.usePathname)();
537
538
  const isActive = pathname === href;
538
- const activeClass = light ? "text-neutral-950 font-medium" : "text-white font-medium";
539
- const inactiveClass = light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
539
+ const isRoot = pathname === "/";
540
+ const activeClass = isRoot ? "text-white font-medium" : light ? "text-neutral-950 font-medium" : "text-white font-medium";
541
+ const inactiveClass = isRoot ? "text-white/80 hover:text-white" : light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
540
542
  return /* @__PURE__ */ import_react7.default.createElement(
541
543
  import_link2.default,
542
544
  {
@@ -559,12 +561,14 @@ var Header = ({
559
561
  compact = false
560
562
  // Defaults to false (full width)
561
563
  }) => {
562
- const headerBgStyle = light ? "bg-white/95 border-white/40 shadow-[0_8px_60px_rgba(0,0,0,0.06)]" : "bg-black/95 border-white/10 shadow-[0_8px_60px_rgba(0,0,0,0.2)]";
563
- const headerLayoutWidth = compact ? "w-fit mx-auto gap-8 md:gap-16" : "w-full justify-between";
564
- const titleColor = light ? "text-black" : "text-white";
565
- const subtitleColor = light ? "text-neutral-500" : "text-neutral-400";
564
+ const pathname = (0, import_navigation2.usePathname)();
565
+ const isRoot = pathname === "/";
566
+ const headerBgStyle = light ? "bg-transparent border-white/40 shadow-[0_8px_60px_rgba(0,0,0,0.06)]" : "bg-transparent border-white/10 shadow-[0_8px_60px_rgba(0,0,0,0.2)]";
567
+ const headerLayoutWidth = compact ? "w-fit rounded-full px-4 mt-4 mx-auto gap-8 md:gap-16" : "w-full justify-between";
568
+ const titleColor = isRoot ? "text-white" : light ? "text-black" : "text-white";
569
+ const subtitleColor = isRoot ? "text-white/80" : light ? "text-neutral-500" : "text-neutral-400";
566
570
  const hasBrandSection = showLogo || !hideHeaderText;
567
- return /* @__PURE__ */ import_react7.default.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none px-4 pt-4 sm:pt-6" }, /* @__PURE__ */ import_react7.default.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ import_react7.default.createElement("header", { className: `${headerLayoutWidth} ${headerBgStyle} backdrop-blur-md rounded-full py-2 px-6 flex items-center border transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react7.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ import_react7.default.createElement(
571
+ return /* @__PURE__ */ import_react7.default.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none " }, /* @__PURE__ */ import_react7.default.createElement("div", { className: " mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ import_react7.default.createElement("header", { className: `${headerLayoutWidth} ${headerBgStyle} backdrop-blur-md py-2 px-6 flex items-center transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react7.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ import_react7.default.createElement(
568
572
  import_image.default,
569
573
  {
570
574
  src: logoSrc,
@@ -675,7 +679,7 @@ var HeroSection = ({
675
679
  className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5 bg-white text-black transition-colors hover:bg-neutral-200 outline-none"
676
680
  },
677
681
  secondaryCtaText
678
- )), showImage && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full rounded-t-xl overflow-hidden border-[5px] border-[#1c1c1e] bg-[#1c1c1e] shadow-2xl aspect-video" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute top-1.5 left-1/2 -translate-x-1/2 w-2.5 h-2.5 bg-[#0a0a0b] rounded-full flex items-center justify-center z-30" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-1 h-1 bg-[#1a2d42] rounded-full" })), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full h-full rounded-sm overflow-hidden" }, /* @__PURE__ */ import_react10.default.createElement(
682
+ )), showImage && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-full aspect-video rounded-xl overflow-hidden" }, /* @__PURE__ */ import_react10.default.createElement(
679
683
  import_image2.default,
680
684
  {
681
685
  src: imageSrc,
@@ -685,7 +689,7 @@ var HeroSection = ({
685
689
  className: "object-cover object-top",
686
690
  priority: true
687
691
  }
688
- ))), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative w-[105%] h-2 md:h-2.5 bg-linear-to-b from-[#e2e8f0] via-[#cbd5e1] to-[#94a3b8] rounded-b-xl border-t border-slate-300 shadow-xl flex justify-center" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-16 md:w-24 h-1 md:h-1.5 bg-slate-400/30 rounded-b-md" }))))));
692
+ ), /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-1/2 bg-linear-to-t from-[#f5f5f5] via-[#f5f5f5]/80 to-transparent pointer-events-none" }))))));
689
693
  };
690
694
 
691
695
  // src/components/AppBento2.tsx
@@ -3642,6 +3646,151 @@ var UniversalRegistrationFlow = ({
3642
3646
  }, className: `text-left px-4 py-3 rounded-full text-[13px] transition-colors outline-none ${isSelected ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}` }, opt);
3643
3647
  })), /* @__PURE__ */ import_react65.default.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ import_react65.default.createElement("button", { onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }), className: "w-full py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none" }, "Close")))));
3644
3648
  };
3649
+
3650
+ // src/components/UniversalDeveloperSettings.tsx
3651
+ var import_react67 = __toESM(require("react"));
3652
+ var import_react_hot_toast8 = require("react-hot-toast");
3653
+ var import_react68 = require("@hugeicons/react");
3654
+ var import_core_free_icons22 = require("@hugeicons/core-free-icons");
3655
+ var ButtonSpinner5 = () => /* @__PURE__ */ import_react67.default.createElement(import_react68.HugeiconsIcon, { icon: import_core_free_icons22.Loading03Icon, size: 16, className: "animate-spin text-current" });
3656
+ var UniversalDeveloperSettings = ({
3657
+ initialPublicKey,
3658
+ initialWebhookUrl,
3659
+ isReadOnly = false,
3660
+ onGenerateKeys,
3661
+ onSaveWebhook
3662
+ }) => {
3663
+ const [publicKey, setPublicKey] = (0, import_react67.useState)(initialPublicKey);
3664
+ const [webhookUrl, setWebhookUrl] = (0, import_react67.useState)(initialWebhookUrl);
3665
+ const [isGenerating, setIsGenerating] = (0, import_react67.useState)(false);
3666
+ const [isSavingWebhook, setIsSavingWebhook] = (0, import_react67.useState)(false);
3667
+ const [isRollModalOpen, setIsRollModalOpen] = (0, import_react67.useState)(false);
3668
+ (0, import_react67.useEffect)(() => {
3669
+ setPublicKey(initialPublicKey || "");
3670
+ setWebhookUrl(initialWebhookUrl || "");
3671
+ }, [initialPublicKey, initialWebhookUrl]);
3672
+ const handleWebhookChange = (val) => {
3673
+ setWebhookUrl(val.trim());
3674
+ };
3675
+ const downloadEnvironmentFile = (pubKey, secKey) => {
3676
+ const envContent = `AUDDITUR_PUBLIC_KEY="${pubKey}"
3677
+ AUDDITUR_SECRET_KEY="${secKey}"
3678
+ `;
3679
+ const blob = new Blob([envContent], { type: "text/plain" });
3680
+ const url = URL.createObjectURL(blob);
3681
+ const link = document.createElement("a");
3682
+ link.href = url;
3683
+ link.download = "auditor-keys.env";
3684
+ document.body.appendChild(link);
3685
+ link.click();
3686
+ document.body.removeChild(link);
3687
+ URL.revokeObjectURL(url);
3688
+ };
3689
+ const handleGenerateKeys = async () => {
3690
+ if (isGenerating || isReadOnly) return;
3691
+ setIsGenerating(true);
3692
+ try {
3693
+ const res = await onGenerateKeys();
3694
+ if (res.success && res.data) {
3695
+ setPublicKey(res.data.publicKey);
3696
+ downloadEnvironmentFile(res.data.publicKey, res.data.secretKey);
3697
+ import_react_hot_toast8.toast.success("Keys generated. Check your downloads folder.");
3698
+ setIsRollModalOpen(false);
3699
+ } else {
3700
+ import_react_hot_toast8.toast.error(res.error || "Uh oh! Something went wrong.");
3701
+ }
3702
+ } catch (error) {
3703
+ import_react_hot_toast8.toast.error("Uh oh! Something went wrong.");
3704
+ } finally {
3705
+ setIsGenerating(false);
3706
+ }
3707
+ };
3708
+ const handleSaveWebhook = async (e) => {
3709
+ e.preventDefault();
3710
+ if (isSavingWebhook || isReadOnly) return;
3711
+ setIsSavingWebhook(true);
3712
+ try {
3713
+ const res = await onSaveWebhook(webhookUrl);
3714
+ if (res.success && res.data) {
3715
+ setWebhookUrl(res.data.webhookUrl || "");
3716
+ import_react_hot_toast8.toast.success("Webhook URL updated.");
3717
+ } else {
3718
+ import_react_hot_toast8.toast.error(res.error || "Uh oh! Something went wrong.");
3719
+ }
3720
+ } catch (error) {
3721
+ import_react_hot_toast8.toast.error("Uh oh! Something went wrong.");
3722
+ } finally {
3723
+ setIsSavingWebhook(false);
3724
+ }
3725
+ };
3726
+ const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
3727
+ const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
3728
+ return /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ import_react67.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("h1", { className: "font-serif text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ import_react67.default.createElement("span", { className: "px-3 py-1 bg-neutral-50 text-neutral-500 rounded-full text-[10px] tracking-[0.2em] shrink-0 w-fit" }, "Read Only Access")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement(
3729
+ TextInput,
3730
+ {
3731
+ label: "Public Key",
3732
+ value: publicKey || "No key generated yet",
3733
+ onChange: () => {
3734
+ },
3735
+ disabled: true
3736
+ }
3737
+ ), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ import_react67.default.createElement(
3738
+ ThreeDActionButton,
3739
+ {
3740
+ onClick: () => {
3741
+ if (publicKey) setIsRollModalOpen(true);
3742
+ else handleGenerateKeys();
3743
+ },
3744
+ disabled: isGenerating || isReadOnly,
3745
+ isLoading: isGenerating,
3746
+ className: "w-fit"
3747
+ },
3748
+ publicKey ? "Roll API Keys" : "Generate Keys"
3749
+ ))), /* @__PURE__ */ import_react67.default.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement(
3750
+ TextInput,
3751
+ {
3752
+ label: "Webhook URL",
3753
+ value: webhookUrl,
3754
+ onChange: handleWebhookChange,
3755
+ disabled: isReadOnly || isSavingWebhook,
3756
+ placeholder: "https://your-domain.com/webhook",
3757
+ type: "url"
3758
+ }
3759
+ ), /* @__PURE__ */ import_react67.default.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react67.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ import_react67.default.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ import_react67.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ import_react67.default.createElement(
3760
+ "button",
3761
+ {
3762
+ type: "button",
3763
+ onClick: () => setWebhookUrl(initialWebhookUrl),
3764
+ className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
3765
+ },
3766
+ "Cancel"
3767
+ ), /* @__PURE__ */ import_react67.default.createElement(
3768
+ ThreeDActionButton,
3769
+ {
3770
+ type: "submit",
3771
+ disabled: isWebhookSaveDisabled,
3772
+ isLoading: isSavingWebhook,
3773
+ className: "min-w-32 w-full sm:w-auto"
3774
+ },
3775
+ "Save Webhook"
3776
+ ))))), isRollModalOpen && !isReadOnly && /* @__PURE__ */ import_react67.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react67.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => !isGenerating && setIsRollModalOpen(false) }), /* @__PURE__ */ import_react67.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_react67.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react67.default.createElement("h3", { className: "font-serif text-[17px] text-black tracking-tight mb-1" }, "Roll API Keys"), /* @__PURE__ */ import_react67.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_react67.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react67.default.createElement(
3777
+ "button",
3778
+ {
3779
+ onClick: () => setIsRollModalOpen(false),
3780
+ disabled: isGenerating,
3781
+ className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
3782
+ },
3783
+ "Cancel"
3784
+ ), /* @__PURE__ */ import_react67.default.createElement(
3785
+ "button",
3786
+ {
3787
+ onClick: handleGenerateKeys,
3788
+ disabled: isGenerating,
3789
+ className: "flex-1 py-2 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center outline-none"
3790
+ },
3791
+ isGenerating ? /* @__PURE__ */ import_react67.default.createElement(ButtonSpinner5, null) : "Roll Keys"
3792
+ )))));
3793
+ };
3645
3794
  // Annotate the CommonJS export names for ESM import in node:
3646
3795
  0 && (module.exports = {
3647
3796
  AITranscriptionFeature,
@@ -3675,6 +3824,7 @@ var UniversalRegistrationFlow = ({
3675
3824
  UniversalAgentConsole,
3676
3825
  UniversalBillingPage,
3677
3826
  UniversalDashboardPage,
3827
+ UniversalDeveloperSettings,
3678
3828
  UniversalDirectoryPage,
3679
3829
  UniversalErrorView,
3680
3830
  UniversalIdentityPage,
package/dist/index.mjs CHANGED
@@ -459,8 +459,9 @@ var NavLink = ({
459
459
  }) => {
460
460
  const pathname = usePathname();
461
461
  const isActive = pathname === href;
462
- const activeClass = light ? "text-neutral-950 font-medium" : "text-white font-medium";
463
- const inactiveClass = light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
462
+ const isRoot = pathname === "/";
463
+ const activeClass = isRoot ? "text-white font-medium" : light ? "text-neutral-950 font-medium" : "text-white font-medium";
464
+ const inactiveClass = isRoot ? "text-white/80 hover:text-white" : light ? "text-neutral-600 hover:text-neutral-950" : "text-neutral-400 hover:text-white";
464
465
  return /* @__PURE__ */ React5.createElement(
465
466
  Link2,
466
467
  {
@@ -483,12 +484,14 @@ var Header = ({
483
484
  compact = false
484
485
  // Defaults to false (full width)
485
486
  }) => {
486
- const headerBgStyle = light ? "bg-white/95 border-white/40 shadow-[0_8px_60px_rgba(0,0,0,0.06)]" : "bg-black/95 border-white/10 shadow-[0_8px_60px_rgba(0,0,0,0.2)]";
487
- const headerLayoutWidth = compact ? "w-fit mx-auto gap-8 md:gap-16" : "w-full justify-between";
488
- const titleColor = light ? "text-black" : "text-white";
489
- const subtitleColor = light ? "text-neutral-500" : "text-neutral-400";
487
+ const pathname = usePathname();
488
+ const isRoot = pathname === "/";
489
+ const headerBgStyle = light ? "bg-transparent border-white/40 shadow-[0_8px_60px_rgba(0,0,0,0.06)]" : "bg-transparent border-white/10 shadow-[0_8px_60px_rgba(0,0,0,0.2)]";
490
+ const headerLayoutWidth = compact ? "w-fit rounded-full px-4 mt-4 mx-auto gap-8 md:gap-16" : "w-full justify-between";
491
+ const titleColor = isRoot ? "text-white" : light ? "text-black" : "text-white";
492
+ const subtitleColor = isRoot ? "text-white/80" : light ? "text-neutral-500" : "text-neutral-400";
490
493
  const hasBrandSection = showLogo || !hideHeaderText;
491
- return /* @__PURE__ */ React5.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none px-4 pt-4 sm:pt-6" }, /* @__PURE__ */ React5.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ React5.createElement("header", { className: `${headerLayoutWidth} ${headerBgStyle} backdrop-blur-md rounded-full py-2 px-6 flex items-center border transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ React5.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ React5.createElement(Link2, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ React5.createElement(
494
+ return /* @__PURE__ */ React5.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none " }, /* @__PURE__ */ React5.createElement("div", { className: " mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ React5.createElement("header", { className: `${headerLayoutWidth} ${headerBgStyle} backdrop-blur-md py-2 px-6 flex items-center transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ React5.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ React5.createElement(Link2, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70" }, showLogo && /* @__PURE__ */ React5.createElement(
492
495
  Image,
493
496
  {
494
497
  src: logoSrc,
@@ -599,7 +602,7 @@ var HeroSection = ({
599
602
  className: "w-full sm:w-60 inline-flex items-center justify-center text-[12px] tracking-widest rounded-full px-8 py-2.5 bg-white text-black transition-colors hover:bg-neutral-200 outline-none"
600
603
  },
601
604
  secondaryCtaText
602
- )), showImage && /* @__PURE__ */ React7.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ React7.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ React7.createElement("div", { className: "relative w-full rounded-t-xl overflow-hidden border-[5px] border-[#1c1c1e] bg-[#1c1c1e] shadow-2xl aspect-video" }, /* @__PURE__ */ React7.createElement("div", { className: "absolute top-1.5 left-1/2 -translate-x-1/2 w-2.5 h-2.5 bg-[#0a0a0b] rounded-full flex items-center justify-center z-30" }, /* @__PURE__ */ React7.createElement("div", { className: "w-1 h-1 bg-[#1a2d42] rounded-full" })), /* @__PURE__ */ React7.createElement("div", { className: "relative w-full h-full rounded-sm overflow-hidden" }, /* @__PURE__ */ React7.createElement(
605
+ )), showImage && /* @__PURE__ */ React7.createElement("div", { className: "w-full max-w-4xl mx-auto px-2 sm:px-6" }, /* @__PURE__ */ React7.createElement("div", { className: "relative w-full flex flex-col items-center" }, /* @__PURE__ */ React7.createElement("div", { className: "relative w-full aspect-video rounded-xl overflow-hidden" }, /* @__PURE__ */ React7.createElement(
603
606
  Image2,
604
607
  {
605
608
  src: imageSrc,
@@ -609,7 +612,7 @@ var HeroSection = ({
609
612
  className: "object-cover object-top",
610
613
  priority: true
611
614
  }
612
- ))), /* @__PURE__ */ React7.createElement("div", { className: "relative w-[105%] h-2 md:h-2.5 bg-linear-to-b from-[#e2e8f0] via-[#cbd5e1] to-[#94a3b8] rounded-b-xl border-t border-slate-300 shadow-xl flex justify-center" }, /* @__PURE__ */ React7.createElement("div", { className: "w-16 md:w-24 h-1 md:h-1.5 bg-slate-400/30 rounded-b-md" }))))));
615
+ ), /* @__PURE__ */ React7.createElement("div", { className: "absolute inset-x-0 bottom-0 h-1/2 bg-linear-to-t from-[#f5f5f5] via-[#f5f5f5]/80 to-transparent pointer-events-none" }))))));
613
616
  };
614
617
 
615
618
  // src/components/AppBento2.tsx
@@ -3601,6 +3604,151 @@ var UniversalRegistrationFlow = ({
3601
3604
  }, className: `text-left px-4 py-3 rounded-full text-[13px] transition-colors outline-none ${isSelected ? "bg-neutral-100 text-black" : "text-neutral-500 hover:bg-neutral-50 hover:text-black"}` }, opt);
3602
3605
  })), /* @__PURE__ */ React41.createElement("div", { className: "w-full flex mt-auto shrink-0 " }, /* @__PURE__ */ React41.createElement("button", { onClick: () => setActiveModal({ isOpen: false, type: null, memberIndex: null }), className: "w-full py-4 text-[13px] text-neutral-500 hover:bg-neutral-50 transition-colors outline-none" }, "Close")))));
3603
3606
  };
3607
+
3608
+ // src/components/UniversalDeveloperSettings.tsx
3609
+ import React42, { useState as useState21, useEffect as useEffect12 } from "react";
3610
+ import { toast as toast7 } from "react-hot-toast";
3611
+ import { HugeiconsIcon as HugeiconsIcon26 } from "@hugeicons/react";
3612
+ import { Loading03Icon as Loading03Icon13 } from "@hugeicons/core-free-icons";
3613
+ var ButtonSpinner5 = () => /* @__PURE__ */ React42.createElement(HugeiconsIcon26, { icon: Loading03Icon13, size: 16, className: "animate-spin text-current" });
3614
+ var UniversalDeveloperSettings = ({
3615
+ initialPublicKey,
3616
+ initialWebhookUrl,
3617
+ isReadOnly = false,
3618
+ onGenerateKeys,
3619
+ onSaveWebhook
3620
+ }) => {
3621
+ const [publicKey, setPublicKey] = useState21(initialPublicKey);
3622
+ const [webhookUrl, setWebhookUrl] = useState21(initialWebhookUrl);
3623
+ const [isGenerating, setIsGenerating] = useState21(false);
3624
+ const [isSavingWebhook, setIsSavingWebhook] = useState21(false);
3625
+ const [isRollModalOpen, setIsRollModalOpen] = useState21(false);
3626
+ useEffect12(() => {
3627
+ setPublicKey(initialPublicKey || "");
3628
+ setWebhookUrl(initialWebhookUrl || "");
3629
+ }, [initialPublicKey, initialWebhookUrl]);
3630
+ const handleWebhookChange = (val) => {
3631
+ setWebhookUrl(val.trim());
3632
+ };
3633
+ const downloadEnvironmentFile = (pubKey, secKey) => {
3634
+ const envContent = `AUDDITUR_PUBLIC_KEY="${pubKey}"
3635
+ AUDDITUR_SECRET_KEY="${secKey}"
3636
+ `;
3637
+ const blob = new Blob([envContent], { type: "text/plain" });
3638
+ const url = URL.createObjectURL(blob);
3639
+ const link = document.createElement("a");
3640
+ link.href = url;
3641
+ link.download = "auditor-keys.env";
3642
+ document.body.appendChild(link);
3643
+ link.click();
3644
+ document.body.removeChild(link);
3645
+ URL.revokeObjectURL(url);
3646
+ };
3647
+ const handleGenerateKeys = async () => {
3648
+ if (isGenerating || isReadOnly) return;
3649
+ setIsGenerating(true);
3650
+ try {
3651
+ const res = await onGenerateKeys();
3652
+ if (res.success && res.data) {
3653
+ setPublicKey(res.data.publicKey);
3654
+ downloadEnvironmentFile(res.data.publicKey, res.data.secretKey);
3655
+ toast7.success("Keys generated. Check your downloads folder.");
3656
+ setIsRollModalOpen(false);
3657
+ } else {
3658
+ toast7.error(res.error || "Uh oh! Something went wrong.");
3659
+ }
3660
+ } catch (error) {
3661
+ toast7.error("Uh oh! Something went wrong.");
3662
+ } finally {
3663
+ setIsGenerating(false);
3664
+ }
3665
+ };
3666
+ const handleSaveWebhook = async (e) => {
3667
+ e.preventDefault();
3668
+ if (isSavingWebhook || isReadOnly) return;
3669
+ setIsSavingWebhook(true);
3670
+ try {
3671
+ const res = await onSaveWebhook(webhookUrl);
3672
+ if (res.success && res.data) {
3673
+ setWebhookUrl(res.data.webhookUrl || "");
3674
+ toast7.success("Webhook URL updated.");
3675
+ } else {
3676
+ toast7.error(res.error || "Uh oh! Something went wrong.");
3677
+ }
3678
+ } catch (error) {
3679
+ toast7.error("Uh oh! Something went wrong.");
3680
+ } finally {
3681
+ setIsSavingWebhook(false);
3682
+ }
3683
+ };
3684
+ const hasWebhookChanges = webhookUrl !== initialWebhookUrl;
3685
+ const isWebhookSaveDisabled = isSavingWebhook || isReadOnly || !hasWebhookChanges;
3686
+ return /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col max-w-3xl rounded-2xl p-6 bg-white gap-8 animate-in fade-in duration-300 min-h-full" }, /* @__PURE__ */ React42.createElement(ManagedToaster, null), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React42.createElement("h1", { className: "font-serif text-xl text-black mb-1 truncate tracking-tight" }, "Developer Settings"), /* @__PURE__ */ React42.createElement("p", { className: "text-xs text-neutral-500 truncate" }, "Manage your API credentials and webhook integrations.")), isReadOnly && /* @__PURE__ */ React42.createElement("span", { className: "px-3 py-1 bg-neutral-50 text-neutral-500 rounded-full text-[10px] tracking-[0.2em] shrink-0 w-fit" }, "Read Only Access")), /* @__PURE__ */ React42.createElement("div", { className: "w-full max-w-2xl flex flex-col gap-12" }, /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React42.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React42.createElement(
3687
+ TextInput,
3688
+ {
3689
+ label: "Public Key",
3690
+ value: publicKey || "No key generated yet",
3691
+ onChange: () => {
3692
+ },
3693
+ disabled: true
3694
+ }
3695
+ ), /* @__PURE__ */ React42.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "Your public key is used to identify your application. Your secret key will only be shown once upon generation.")), /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React42.createElement(
3696
+ ThreeDActionButton,
3697
+ {
3698
+ onClick: () => {
3699
+ if (publicKey) setIsRollModalOpen(true);
3700
+ else handleGenerateKeys();
3701
+ },
3702
+ disabled: isGenerating || isReadOnly,
3703
+ isLoading: isGenerating,
3704
+ className: "w-fit"
3705
+ },
3706
+ publicKey ? "Roll API Keys" : "Generate Keys"
3707
+ ))), /* @__PURE__ */ React42.createElement("form", { className: "flex flex-col gap-6 border-t border-neutral-100 pt-8", onSubmit: handleSaveWebhook, autoComplete: "off" }, /* @__PURE__ */ React42.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ React42.createElement(
3708
+ TextInput,
3709
+ {
3710
+ label: "Webhook URL",
3711
+ value: webhookUrl,
3712
+ onChange: handleWebhookChange,
3713
+ disabled: isReadOnly || isSavingWebhook,
3714
+ placeholder: "https://your-domain.com/webhook",
3715
+ type: "url"
3716
+ }
3717
+ ), /* @__PURE__ */ React42.createElement("p", { className: "text-[10px] text-neutral-400 mt-1 leading-snug" }, "We will send secure POST requests to this endpoint when significant events occur. Must use HTTPS.")), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ React42.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ React42.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React42.createElement("span", { className: "text-[10px] text-neutral-400 tracking-[0.2em] block truncate uppercase" }, "Webhook Status"), /* @__PURE__ */ React42.createElement("span", { className: `text-xs block truncate ${webhookUrl ? "text-emerald-600" : "text-neutral-400"}` }, webhookUrl ? "Active" : "Inactive"))), /* @__PURE__ */ React42.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasWebhookChanges && !isSavingWebhook && !isReadOnly && /* @__PURE__ */ React42.createElement(
3718
+ "button",
3719
+ {
3720
+ type: "button",
3721
+ onClick: () => setWebhookUrl(initialWebhookUrl),
3722
+ className: "text-[11px] tracking-widest text-neutral-500 hover:text-black transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
3723
+ },
3724
+ "Cancel"
3725
+ ), /* @__PURE__ */ React42.createElement(
3726
+ ThreeDActionButton,
3727
+ {
3728
+ type: "submit",
3729
+ disabled: isWebhookSaveDisabled,
3730
+ isLoading: isSavingWebhook,
3731
+ className: "min-w-32 w-full sm:w-auto"
3732
+ },
3733
+ "Save Webhook"
3734
+ ))))), 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: "font-serif 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(
3735
+ "button",
3736
+ {
3737
+ onClick: () => setIsRollModalOpen(false),
3738
+ disabled: isGenerating,
3739
+ className: "flex-1 py-2 text-[13px] text-neutral-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 outline-none"
3740
+ },
3741
+ "Cancel"
3742
+ ), /* @__PURE__ */ React42.createElement(
3743
+ "button",
3744
+ {
3745
+ onClick: handleGenerateKeys,
3746
+ disabled: isGenerating,
3747
+ className: "flex-1 py-2 text-[13px] text-red-600 hover:bg-neutral-50 transition-colors disabled:opacity-50 flex justify-center outline-none"
3748
+ },
3749
+ isGenerating ? /* @__PURE__ */ React42.createElement(ButtonSpinner5, null) : "Roll Keys"
3750
+ )))));
3751
+ };
3604
3752
  export {
3605
3753
  AITranscriptionFeature,
3606
3754
  AiApproveDecline,
@@ -3633,6 +3781,7 @@ export {
3633
3781
  UniversalAgentConsole,
3634
3782
  UniversalBillingPage,
3635
3783
  UniversalDashboardPage,
3784
+ UniversalDeveloperSettings,
3636
3785
  UniversalDirectoryPage,
3637
3786
  UniversalErrorView,
3638
3787
  UniversalIdentityPage,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "0.6.7",
3
+ "version": "0.6.9",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",