@burdenoff/microfe-auth 2026.1103.1 → 2026.1107.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/components/AuthLayout.js +4 -3
- package/dist/auth/components/AuthLayout.js.map +1 -1
- package/dist/auth/hooks/useAuthOperations.d.ts +1 -4
- package/dist/auth/hooks/useDelegationOperations.d.ts +2 -8
- package/dist/auth/hooks/useMyWorkspaces.d.ts +1 -4
- package/dist/auth/hooks/useSessionOperations.d.ts +7 -14
- package/dist/auth/hooks/useSsoOperations.d.ts +1 -4
- package/dist/auth/pages/LoginPage.js +4 -0
- package/dist/auth/pages/LoginPage.js.map +1 -1
- package/dist/auth/pages/MagicLinkPage.js +1 -1
- package/dist/auth/pages/MagicLinkPage.js.map +1 -1
- package/dist/auth/pages/MfaVerifyPage.js +2 -1
- package/dist/auth/pages/MfaVerifyPage.js.map +1 -1
- package/dist/auth/pages/PasswordResetPage.js +2 -0
- package/dist/auth/pages/PasswordResetPage.js.map +1 -1
- package/dist/auth/pages/ReactivatePage.js +3 -1
- package/dist/auth/pages/ReactivatePage.js.map +1 -1
- package/dist/auth/pages/RegisterPage.js +3 -1
- package/dist/auth/pages/RegisterPage.js.map +1 -1
- package/dist/auth/pages/SSORelayPage.js.map +1 -1
- package/dist/auth/pages/SsoLoginPage.js +2 -1
- package/dist/auth/pages/SsoLoginPage.js.map +1 -1
- package/dist/auth/utils/validation.js.map +1 -1
- package/dist/generated/global-operations.d.ts +602 -553
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +2 -21
- package/dist/generated/wspace-operations.d.ts +89 -14
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +4 -23
- package/dist/microfe-auth.css +2 -2
- package/dist/test/happydom.d.ts +1 -0
- package/package.json +73 -57
|
@@ -62,7 +62,8 @@ function l({ children: t, title: l, subtitle: u, productName: d, tagline: f }) {
|
|
|
62
62
|
let p = e(), m = n(), h = d || m.productName || "Burdenoff", g = m.brandInitial || "B", _ = f || m.tagline || "Enterprise platform", { locale: v, setLocale: y } = r();
|
|
63
63
|
return /* @__PURE__ */ a("div", {
|
|
64
64
|
className: "min-h-screen flex relative",
|
|
65
|
-
children: [/* @__PURE__ */ a("
|
|
65
|
+
children: [/* @__PURE__ */ a("aside", {
|
|
66
|
+
"aria-label": h,
|
|
66
67
|
className: "auth-brand-panel hidden overflow-hidden lg:flex lg:w-1/2 relative",
|
|
67
68
|
children: [/* @__PURE__ */ a("div", {
|
|
68
69
|
className: "absolute inset-0 overflow-hidden",
|
|
@@ -88,7 +89,7 @@ function l({ children: t, title: l, subtitle: u, productName: d, tagline: f }) {
|
|
|
88
89
|
/* @__PURE__ */ a("div", {
|
|
89
90
|
className: "max-w-md",
|
|
90
91
|
children: [
|
|
91
|
-
/* @__PURE__ */ i("
|
|
92
|
+
/* @__PURE__ */ i("p", {
|
|
92
93
|
className: "mb-4 text-4xl font-bold leading-tight text-[var(--color-text-primary)]",
|
|
93
94
|
children: _
|
|
94
95
|
}),
|
|
@@ -210,7 +211,7 @@ function l({ children: t, title: l, subtitle: u, productName: d, tagline: f }) {
|
|
|
210
211
|
}),
|
|
211
212
|
/* @__PURE__ */ a("div", {
|
|
212
213
|
className: "text-center lg:text-left mb-8",
|
|
213
|
-
children: [/* @__PURE__ */ i("
|
|
214
|
+
children: [/* @__PURE__ */ i("h1", {
|
|
214
215
|
className: "text-2xl sm:text-3xl font-bold text-[var(--color-text-primary)] mb-2",
|
|
215
216
|
children: l
|
|
216
217
|
}), /* @__PURE__ */ i("p", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLayout.js","names":["AUTH_LANGUAGES","BrandLogo","failed","setFailed","useState","brandInitial","AuthLayout","tr","useTr","shell","useAppShell","displayName","productName","displayTagline","tagline","useI18n","feature","LanguageSwitcher","locale","language","title","subtitle","children"],"sources":["../../../src/auth/components/AuthLayout.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { LanguageSwitcher } from \"@burdenoff/fe-libs/chrome\";\nimport type { Language } from \"@burdenoff/fe-libs/chrome\";\nimport {\n useI18n,\n useAppShell,\n} from \"@burdenoff/fe-libs/shared/providers/shell\";\nimport { useTr } from \"../../shared/hooks/useTr\";\nimport type { Locale } from \"@burdenoff/fe-libs/shared/providers/shell\";\n\ninterface AuthLayoutProps {\n children: ReactNode;\n title: string;\n subtitle: string;\n productName?: string;\n tagline?: string;\n}\n\n/**\n * Supported languages for the auth pages.\n *\n * Must stay in sync with the locales actually seeded in\n * `i18n_translations` for the consumer products that mount microfe-auth.\n * If a locale is listed here but NOT seeded, selecting it sets\n * `setLocale(<code>)` on the I18nProvider, the next `exportTranslations`\n * call returns zero rows, every `tr()` falls back to its English default,\n * and the user gets an English UI under a non-English flag.\n *\n * Audited 2026-05-31 against alpha `i18n_translations`: only `en/ta/hi/\n * zh/es/ar` have actual translations (vibecontrols 40k+ rows each).\n * `fr` was previously listed but no product seeds it — selecting it\n * produced a half-translated UI. Removed for parity with the dashboard\n * `LanguageSwitcherSlot` (which is data-driven from `i18n_languages`).\n *\n * Adding a new locale requires updating BOTH:\n * - this list\n * - each consumer product's seed (e.g. vibecontrols-app/scripts/\n * build-i18n-bundle.ts + the new `<code>.ts` translation source).\n */\nconst AUTH_LANGUAGES: Language[] = [\n { code: \"en\", name: \"English\", nativeName: \"English\", flag: \"🇺🇸\" },\n { code: \"ta\", name: \"Tamil\", nativeName: \"தமிழ்\", flag: \"🇮🇳\" },\n { code: \"hi\", name: \"Hindi\", nativeName: \"हिन्दी\", flag: \"🇮🇳\" },\n { code: \"zh\", name: \"Chinese\", nativeName: \"中文\", flag: \"🇨🇳\" },\n { code: \"es\", name: \"Spanish\", nativeName: \"Español\", flag: \"🇪🇸\" },\n { code: \"ar\", name: \"Arabic\", nativeName: \"العربية\", flag: \"🇸🇦\" },\n];\n\n/**\n * Brand logo for the auth pages.\n *\n * Renders the host app shell's real product logo served at `/icons/icon.svg`\n * (the same asset the marketing landing page uses) so the login screen and the\n * landing page show an identical mark instead of a generic placeholder glyph.\n * Host shells that don't ship that asset (e.g. admin-app) fall back to a\n * branded initial badge rather than a broken image.\n */\nfunction BrandLogo({ brandInitial }: { brandInitial: string }) {\n const [failed, setFailed] = useState(false);\n\n if (failed) {\n return (\n <div className=\"auth-brand-badge flex size-10 items-center justify-center rounded-xl\">\n <span className=\"text-lg font-bold leading-none text-white\">\n {brandInitial}\n </span>\n </div>\n );\n }\n\n return (\n <img\n src=\"/icons/icon.svg\"\n alt=\"\"\n aria-hidden=\"true\"\n className=\"size-10 rounded-xl object-contain\"\n onError={() => setFailed(true)}\n />\n );\n}\n\n/**\n * Professional auth layout with split-screen design\n * Left side: Branding with gradient background\n * Right side: Auth form\n */\nexport function AuthLayout({\n children,\n title,\n subtitle,\n productName,\n tagline,\n}: AuthLayoutProps) {\n const tr = useTr();\n const shell = useAppShell();\n const displayName = productName || shell.productName || \"Burdenoff\";\n const brandInitial = shell.brandInitial || \"B\";\n const displayTagline = tagline || shell.tagline || \"Enterprise platform\";\n const { locale, setLocale } = useI18n();\n\n const handleLanguageChange = (language: Language) => {\n // AUTH_LANGUAGES intentionally lists locales (e.g. \"ar\") that are seeded\n // in consumer products but not yet present in the fe-libs Locale union.\n // The runtime I18nProvider accepts any locale code, so we cast through\n // unknown to Locale to keep the picker in parity until fe-libs widens the\n // union. Keep AUTH_LANGUAGES in sync with consumer product seeds.\n setLocale(language.code as unknown as Locale);\n };\n\n return (\n <div className=\"min-h-screen flex relative\">\n {/* Left Panel - Branding */}\n <div className=\"auth-brand-panel hidden overflow-hidden lg:flex lg:w-1/2 relative\">\n {/* Decorative Elements */}\n <div className=\"absolute inset-0 overflow-hidden\">\n <div className=\"absolute -top-40 -left-40 size-80 rounded-full bg-accent-blue/20 blur-3xl\" />\n <div className=\"absolute top-1/2 -right-20 size-96 rounded-full bg-accent-indigo/20 blur-3xl\" />\n <div className=\"absolute -bottom-40 left-1/4 size-72 rounded-full bg-accent-purple/20 blur-3xl\" />\n\n {/* Grid Pattern */}\n <div\n className=\"absolute inset-0 opacity-5\"\n style={{\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`,\n }}\n />\n </div>\n\n {/* Content */}\n <div className=\"relative z-10 flex flex-col justify-between p-12 w-full\">\n {/* Logo */}\n <div className=\"flex items-center gap-3\">\n <BrandLogo brandInitial={brandInitial} />\n <span className=\"text-xl font-bold text-[var(--color-text-primary)]\">\n {displayName}\n </span>\n </div>\n\n {/* Main Content */}\n <div className=\"max-w-md\">\n <h1 className=\"mb-4 text-4xl font-bold leading-tight text-[var(--color-text-primary)]\">\n {displayTagline}\n </h1>\n <p className=\"auth-brand-copy text-lg leading-relaxed\">\n {tr(\n \"auth.layout.taglineDescription\",\n \"Unify your teams, projects, and workflows in one intelligent workspace. Built for scale with enterprise-grade security, real-time collaboration, and seamless integrations across your entire organization.\",\n )}\n </p>\n\n {/* Features */}\n <div className=\"mt-10 space-y-4\">\n {[\n {\n icon: \"workspace\",\n text: tr(\n \"auth.layout.featureWorkspace\",\n \"Modular workspace architecture\",\n ),\n },\n {\n icon: \"realtime\",\n text: tr(\n \"auth.layout.featureRealtime\",\n \"Real-time collaboration & sync\",\n ),\n },\n {\n icon: \"security\",\n text: tr(\n \"auth.layout.featureSecurity\",\n \"Enterprise-grade security & SSO\",\n ),\n },\n {\n icon: \"scale\",\n text: tr(\n \"auth.layout.featureScale\",\n \"Unlimited scalability & performance\",\n ),\n },\n ].map((feature) => (\n <div key={feature.icon} className=\"flex items-center gap-3\">\n <div className=\"auth-highlight-chip flex size-8 items-center justify-center rounded-lg\">\n {feature.icon === \"workspace\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z\"\n />\n </svg>\n )}\n {feature.icon === \"realtime\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z\"\n />\n </svg>\n )}\n {feature.icon === \"security\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\"\n />\n </svg>\n )}\n {feature.icon === \"scale\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n )}\n </div>\n <span className=\"auth-brand-copy text-sm font-medium\">\n {feature.text}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"auth-brand-copy-muted text-sm\">\n © {new Date().getFullYear()} Burdenoff. All rights reserved.\n </div>\n </div>\n </div>\n\n {/* Right Panel - Form */}\n <main className=\"auth-shell-gradient relative flex flex-1 items-center justify-center bg-[var(--color-bg-canvas)] p-6 sm:p-12\">\n {/* Language Switcher - Top Right */}\n <div className=\"absolute top-4 right-4 sm:top-6 sm:right-6 z-10\">\n <LanguageSwitcher\n languages={AUTH_LANGUAGES}\n currentLanguage={locale}\n onLanguageChange={handleLanguageChange}\n />\n </div>\n <div className=\"w-full max-w-md\">\n {/* Mobile Logo */}\n <div className=\"lg:hidden flex items-center justify-center gap-3 mb-8\">\n <BrandLogo brandInitial={brandInitial} />\n <span className=\"text-xl font-bold text-[var(--color-text-primary)]\">\n {displayName}\n </span>\n </div>\n\n {/* Header */}\n <div className=\"text-center lg:text-left mb-8\">\n <h2 className=\"text-2xl sm:text-3xl font-bold text-[var(--color-text-primary)] mb-2\">\n {title}\n </h2>\n <p className=\"text-[var(--color-text-secondary)]\">{subtitle}</p>\n </div>\n\n {/* Form Content */}\n {children}\n </div>\n </main>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthLayout.js","names":["AUTH_LANGUAGES","BrandLogo","failed","setFailed","useState","brandInitial","AuthLayout","tr","useTr","shell","useAppShell","displayName","productName","displayTagline","tagline","useI18n","feature","LanguageSwitcher","locale","language","title","subtitle","children"],"sources":["../../../src/auth/components/AuthLayout.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { LanguageSwitcher } from \"@burdenoff/fe-libs/chrome\";\nimport type { Language } from \"@burdenoff/fe-libs/chrome\";\nimport {\n useI18n,\n useAppShell,\n} from \"@burdenoff/fe-libs/shared/providers/shell\";\nimport { useTr } from \"../../shared/hooks/useTr\";\nimport type { Locale } from \"@burdenoff/fe-libs/shared/providers/shell\";\n\ninterface AuthLayoutProps {\n children: ReactNode;\n title: string;\n subtitle: string;\n productName?: string;\n tagline?: string;\n}\n\n/**\n * Supported languages for the auth pages.\n *\n * Must stay in sync with the locales actually seeded in\n * `i18n_translations` for the consumer products that mount microfe-auth.\n * If a locale is listed here but NOT seeded, selecting it sets\n * `setLocale(<code>)` on the I18nProvider, the next `exportTranslations`\n * call returns zero rows, every `tr()` falls back to its English default,\n * and the user gets an English UI under a non-English flag.\n *\n * Audited 2026-05-31 against alpha `i18n_translations`: only `en/ta/hi/\n * zh/es/ar` have actual translations (vibecontrols 40k+ rows each).\n * `fr` was previously listed but no product seeds it — selecting it\n * produced a half-translated UI. Removed for parity with the dashboard\n * `LanguageSwitcherSlot` (which is data-driven from `i18n_languages`).\n *\n * Adding a new locale requires updating BOTH:\n * - this list\n * - each consumer product's seed (e.g. vibecontrols-app/scripts/\n * build-i18n-bundle.ts + the new `<code>.ts` translation source).\n */\nconst AUTH_LANGUAGES: Language[] = [\n { code: \"en\", name: \"English\", nativeName: \"English\", flag: \"🇺🇸\" },\n { code: \"ta\", name: \"Tamil\", nativeName: \"தமிழ்\", flag: \"🇮🇳\" },\n { code: \"hi\", name: \"Hindi\", nativeName: \"हिन्दी\", flag: \"🇮🇳\" },\n { code: \"zh\", name: \"Chinese\", nativeName: \"中文\", flag: \"🇨🇳\" },\n { code: \"es\", name: \"Spanish\", nativeName: \"Español\", flag: \"🇪🇸\" },\n { code: \"ar\", name: \"Arabic\", nativeName: \"العربية\", flag: \"🇸🇦\" },\n];\n\n/**\n * Brand logo for the auth pages.\n *\n * Renders the host app shell's real product logo served at `/icons/icon.svg`\n * (the same asset the marketing landing page uses) so the login screen and the\n * landing page show an identical mark instead of a generic placeholder glyph.\n * Host shells that don't ship that asset (e.g. admin-app) fall back to a\n * branded initial badge rather than a broken image.\n */\nfunction BrandLogo({ brandInitial }: { brandInitial: string }) {\n const [failed, setFailed] = useState(false);\n\n if (failed) {\n return (\n <div className=\"auth-brand-badge flex size-10 items-center justify-center rounded-xl\">\n <span className=\"text-lg font-bold leading-none text-white\">\n {brandInitial}\n </span>\n </div>\n );\n }\n\n return (\n <img\n src=\"/icons/icon.svg\"\n alt=\"\"\n aria-hidden=\"true\"\n className=\"size-10 rounded-xl object-contain\"\n onError={() => setFailed(true)}\n />\n );\n}\n\n/**\n * Professional auth layout with split-screen design\n * Left side: Branding with gradient background\n * Right side: Auth form\n */\nexport function AuthLayout({\n children,\n title,\n subtitle,\n productName,\n tagline,\n}: AuthLayoutProps) {\n const tr = useTr();\n const shell = useAppShell();\n const displayName = productName || shell.productName || \"Burdenoff\";\n const brandInitial = shell.brandInitial || \"B\";\n const displayTagline = tagline || shell.tagline || \"Enterprise platform\";\n const { locale, setLocale } = useI18n();\n\n const handleLanguageChange = (language: Language) => {\n // AUTH_LANGUAGES intentionally lists locales (e.g. \"ar\") that are seeded\n // in consumer products but not yet present in the fe-libs Locale union.\n // The runtime I18nProvider accepts any locale code, so we cast through\n // unknown to Locale to keep the picker in parity until fe-libs widens the\n // union. Keep AUTH_LANGUAGES in sync with consumer product seeds.\n setLocale(language.code as unknown as Locale);\n };\n\n return (\n <div className=\"min-h-screen flex relative\">\n {/* Left Panel - Branding. A complementary landmark, so every piece of\n content on the auth pages sits inside a landmark (axe `region`) and\n screen-reader users can skip the marketing copy. */}\n <aside\n aria-label={displayName}\n className=\"auth-brand-panel hidden overflow-hidden lg:flex lg:w-1/2 relative\"\n >\n {/* Decorative Elements */}\n <div className=\"absolute inset-0 overflow-hidden\">\n <div className=\"absolute -top-40 -left-40 size-80 rounded-full bg-accent-blue/20 blur-3xl\" />\n <div className=\"absolute top-1/2 -right-20 size-96 rounded-full bg-accent-indigo/20 blur-3xl\" />\n <div className=\"absolute -bottom-40 left-1/4 size-72 rounded-full bg-accent-purple/20 blur-3xl\" />\n\n {/* Grid Pattern */}\n <div\n className=\"absolute inset-0 opacity-5\"\n style={{\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='1'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`,\n }}\n />\n </div>\n\n {/* Content */}\n <div className=\"relative z-10 flex flex-col justify-between p-12 w-full\">\n {/* Logo */}\n <div className=\"flex items-center gap-3\">\n <BrandLogo brandInitial={brandInitial} />\n <span className=\"text-xl font-bold text-[var(--color-text-primary)]\">\n {displayName}\n </span>\n </div>\n\n {/* Main Content */}\n <div className=\"max-w-md\">\n {/* Marketing tagline, not a heading: the page's single h1 is the\n form title in <main>, which is also the only heading visible on\n phones where this panel is hidden. */}\n <p className=\"mb-4 text-4xl font-bold leading-tight text-[var(--color-text-primary)]\">\n {displayTagline}\n </p>\n <p className=\"auth-brand-copy text-lg leading-relaxed\">\n {tr(\n \"auth.layout.taglineDescription\",\n \"Unify your teams, projects, and workflows in one intelligent workspace. Built for scale with enterprise-grade security, real-time collaboration, and seamless integrations across your entire organization.\",\n )}\n </p>\n\n {/* Features */}\n <div className=\"mt-10 space-y-4\">\n {[\n {\n icon: \"workspace\",\n text: tr(\n \"auth.layout.featureWorkspace\",\n \"Modular workspace architecture\",\n ),\n },\n {\n icon: \"realtime\",\n text: tr(\n \"auth.layout.featureRealtime\",\n \"Real-time collaboration & sync\",\n ),\n },\n {\n icon: \"security\",\n text: tr(\n \"auth.layout.featureSecurity\",\n \"Enterprise-grade security & SSO\",\n ),\n },\n {\n icon: \"scale\",\n text: tr(\n \"auth.layout.featureScale\",\n \"Unlimited scalability & performance\",\n ),\n },\n ].map((feature) => (\n <div key={feature.icon} className=\"flex items-center gap-3\">\n <div className=\"auth-highlight-chip flex size-8 items-center justify-center rounded-lg\">\n {feature.icon === \"workspace\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z\"\n />\n </svg>\n )}\n {feature.icon === \"realtime\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z\"\n />\n </svg>\n )}\n {feature.icon === \"security\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\"\n />\n </svg>\n )}\n {feature.icon === \"scale\" && (\n <svg\n className=\"size-4 text-accent-blue\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n )}\n </div>\n <span className=\"auth-brand-copy text-sm font-medium\">\n {feature.text}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"auth-brand-copy-muted text-sm\">\n © {new Date().getFullYear()} Burdenoff. All rights reserved.\n </div>\n </div>\n </aside>\n\n {/* Right Panel - Form */}\n <main className=\"auth-shell-gradient relative flex flex-1 items-center justify-center bg-[var(--color-bg-canvas)] p-6 sm:p-12\">\n {/* Language Switcher - Top Right */}\n <div className=\"absolute top-4 right-4 sm:top-6 sm:right-6 z-10\">\n <LanguageSwitcher\n languages={AUTH_LANGUAGES}\n currentLanguage={locale}\n onLanguageChange={handleLanguageChange}\n />\n </div>\n <div className=\"w-full max-w-md\">\n {/* Mobile Logo */}\n <div className=\"lg:hidden flex items-center justify-center gap-3 mb-8\">\n <BrandLogo brandInitial={brandInitial} />\n <span className=\"text-xl font-bold text-[var(--color-text-primary)]\">\n {displayName}\n </span>\n </div>\n\n {/* Header */}\n <div className=\"text-center lg:text-left mb-8\">\n <h1 className=\"text-2xl sm:text-3xl font-bold text-[var(--color-text-primary)] mb-2\">\n {title}\n </h1>\n <p className=\"text-[var(--color-text-secondary)]\">{subtitle}</p>\n </div>\n\n {/* Form Content */}\n {children}\n </div>\n </main>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -32,10 +32,7 @@ export declare function useAuthOperations(options?: UseAuthOperationsOptions): {
|
|
|
32
32
|
success: boolean;
|
|
33
33
|
message: string;
|
|
34
34
|
}>;
|
|
35
|
-
refetchCurrentUser: (
|
|
36
|
-
data: CurrentUserResponse | undefined;
|
|
37
|
-
error?: import('@apollo/client').ErrorLike;
|
|
38
|
-
}>;
|
|
35
|
+
refetchCurrentUser: import('@apollo/client/react/internal').RefetchFunction<CurrentUserResponse, import('@apollo/client').OperationVariables, undefined>;
|
|
39
36
|
login: (input: SignInInput) => Promise<AuthResult>;
|
|
40
37
|
register: (input: SignUpInput) => Promise<AuthPayload | {
|
|
41
38
|
requiresEmailVerification: boolean;
|
|
@@ -21,14 +21,8 @@ export declare function useDelegationOperations(): {
|
|
|
21
21
|
revokeDelegation: (id: string, reason?: string) => Promise<boolean>;
|
|
22
22
|
getDelegationsForApp: (appId: string) => AppUserDelegation[];
|
|
23
23
|
hasWorkspaceDelegation: (appId: string, workspaceId: string) => boolean;
|
|
24
|
-
refetchDelegations: (
|
|
25
|
-
|
|
26
|
-
error?: import('@apollo/client').ErrorLike;
|
|
27
|
-
}>;
|
|
28
|
-
refetchGrantedDelegations: (variables?: Partial<import('@apollo/client').OperationVariables> | undefined) => Promise<{
|
|
29
|
-
data: CurrentUserGrantedDelegationsResponse | undefined;
|
|
30
|
-
error?: import('@apollo/client').ErrorLike;
|
|
31
|
-
}>;
|
|
24
|
+
refetchDelegations: import('@apollo/client/react/internal').RefetchFunction<CurrentUserDelegationsResponse, import('@apollo/client').OperationVariables, undefined>;
|
|
25
|
+
refetchGrantedDelegations: import('@apollo/client/react/internal').RefetchFunction<CurrentUserGrantedDelegationsResponse, import('@apollo/client').OperationVariables, undefined>;
|
|
32
26
|
delegations: AppUserDelegation[];
|
|
33
27
|
grantedDelegations: AppUserDelegation[];
|
|
34
28
|
isLoading: boolean;
|
|
@@ -38,9 +38,6 @@ export declare function useMyWorkspaces(): {
|
|
|
38
38
|
workspace?: Workspace;
|
|
39
39
|
error?: string;
|
|
40
40
|
}>;
|
|
41
|
-
refetch: (
|
|
42
|
-
data: MyWorkspacesResponse | undefined;
|
|
43
|
-
error?: import('@apollo/client').ErrorLike;
|
|
44
|
-
}>;
|
|
41
|
+
refetch: import('@apollo/client/react/internal').RefetchFunction<MyWorkspacesResponse, import('@apollo/client').OperationVariables, undefined>;
|
|
45
42
|
};
|
|
46
43
|
export {};
|
|
@@ -22,24 +22,20 @@ export declare function useSessionOperations(options?: UseSessionOperationsOptio
|
|
|
22
22
|
revokedCount: number;
|
|
23
23
|
}>;
|
|
24
24
|
activeSessions: {
|
|
25
|
-
__typename?: "Session";
|
|
26
25
|
id: string;
|
|
27
26
|
status: import('../../generated/global-types').SessionStatus;
|
|
28
|
-
ipAddress
|
|
29
|
-
userAgent
|
|
30
|
-
location
|
|
27
|
+
ipAddress: string | null;
|
|
28
|
+
userAgent: string | null;
|
|
29
|
+
location: string | null;
|
|
31
30
|
lastActivityAt: string;
|
|
32
31
|
expiresAt: string;
|
|
33
32
|
createdAt: string;
|
|
34
33
|
isCurrent: boolean;
|
|
35
34
|
}[];
|
|
36
35
|
sessionsLoading: boolean;
|
|
37
|
-
refetchSessions:
|
|
38
|
-
pagination?: import('../../generated/global-types').
|
|
39
|
-
}
|
|
40
|
-
data: ActiveSessionsQuery | undefined;
|
|
41
|
-
error?: import('@apollo/client').ErrorLike;
|
|
42
|
-
}>;
|
|
36
|
+
refetchSessions: import('@apollo/client/react/internal').RefetchFunction<ActiveSessionsQuery, {
|
|
37
|
+
pagination?: import('../../generated/global-types').PaginationInput | null | undefined;
|
|
38
|
+
}, undefined>;
|
|
43
39
|
page: number;
|
|
44
40
|
pageSize: number;
|
|
45
41
|
totalCount: number;
|
|
@@ -48,9 +44,6 @@ export declare function useSessionOperations(options?: UseSessionOperationsOptio
|
|
|
48
44
|
goToNextPage: () => void;
|
|
49
45
|
goToPrevPage: () => void;
|
|
50
46
|
isLoading: boolean;
|
|
51
|
-
refetch: (
|
|
52
|
-
data: TokenInfoQueryResponse | undefined;
|
|
53
|
-
error?: import('@apollo/client').ErrorLike;
|
|
54
|
-
}>;
|
|
47
|
+
refetch: import('@apollo/client/react/internal').RefetchFunction<TokenInfoQueryResponse, import('@apollo/client').OperationVariables, undefined>;
|
|
55
48
|
};
|
|
56
49
|
export {};
|
|
@@ -58,9 +58,6 @@ export declare function useSsoOperations(tenantId?: string): {
|
|
|
58
58
|
isSaving: boolean;
|
|
59
59
|
isDeleting: boolean;
|
|
60
60
|
isGeneratingOidcUrl: boolean;
|
|
61
|
-
refetchConfig: (
|
|
62
|
-
data: GetSSOConfigResponse | undefined;
|
|
63
|
-
error?: import('@apollo/client').ErrorLike;
|
|
64
|
-
}>;
|
|
61
|
+
refetchConfig: import('@apollo/client/react/internal').RefetchFunction<GetSSOConfigResponse, GetSSOConfigVariables, undefined>;
|
|
65
62
|
};
|
|
66
63
|
export {};
|
|
@@ -324,6 +324,7 @@ function S() {
|
|
|
324
324
|
className: "space-y-5",
|
|
325
325
|
children: [
|
|
326
326
|
tt && /* @__PURE__ */ g("div", {
|
|
327
|
+
role: "status",
|
|
327
328
|
className: "flex items-start gap-3 p-4 rounded-xl border bg-status-info-bg-subtle border-status-info-border",
|
|
328
329
|
children: [/* @__PURE__ */ h("svg", {
|
|
329
330
|
className: "size-5 flex-shrink-0 mt-0.5 text-text-link",
|
|
@@ -342,6 +343,7 @@ function S() {
|
|
|
342
343
|
})]
|
|
343
344
|
}),
|
|
344
345
|
q && /* @__PURE__ */ g("div", {
|
|
346
|
+
role: "alert",
|
|
345
347
|
className: "flex items-start gap-3 p-4 rounded-xl border bg-status-warning-bg-subtle border-status-warning-border",
|
|
346
348
|
children: [/* @__PURE__ */ h(u, { className: "size-5 flex-shrink-0 mt-0.5 text-status-warning-text" }), /* @__PURE__ */ h("p", {
|
|
347
349
|
className: "text-sm text-status-warning-text",
|
|
@@ -349,6 +351,7 @@ function S() {
|
|
|
349
351
|
})]
|
|
350
352
|
}),
|
|
351
353
|
nt && /* @__PURE__ */ g("div", {
|
|
354
|
+
role: "alert",
|
|
352
355
|
className: "flex items-start gap-3 p-4 rounded-xl border bg-status-warning-bg-subtle border-status-warning-border",
|
|
353
356
|
children: [/* @__PURE__ */ h(u, { className: "size-5 flex-shrink-0 mt-0.5 text-status-warning-text" }), /* @__PURE__ */ g("div", {
|
|
354
357
|
className: "flex-1",
|
|
@@ -382,6 +385,7 @@ function S() {
|
|
|
382
385
|
})]
|
|
383
386
|
}),
|
|
384
387
|
E && !q && !nt && /* @__PURE__ */ g("div", {
|
|
388
|
+
role: "alert",
|
|
385
389
|
className: `flex items-start gap-3 p-4 rounded-xl border ${P || R || B ? "bg-status-warning-bg-subtle border-status-warning-border" : "bg-status-error-bg-subtle border-status-error-border"}`,
|
|
386
390
|
children: [/* @__PURE__ */ h(u, { className: `size-5 flex-shrink-0 mt-0.5 ${P || R || B ? "text-status-warning-text" : "text-status-error-text"}` }), /* @__PURE__ */ g("div", {
|
|
387
391
|
className: "flex-1",
|