@civic/auth 0.9.5 → 0.9.6-beta.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/CHANGELOG.md +14 -1
- package/dist/nextjs/actions.d.ts +12 -0
- package/dist/nextjs/actions.d.ts.map +1 -0
- package/dist/nextjs/actions.js +26 -0
- package/dist/nextjs/actions.js.map +1 -0
- package/dist/nextjs/config.d.ts +2 -0
- package/dist/nextjs/config.d.ts.map +1 -1
- package/dist/nextjs/config.js +3 -2
- package/dist/nextjs/config.js.map +1 -1
- package/dist/nextjs/cookies.d.ts.map +1 -1
- package/dist/nextjs/cookies.js +45 -3
- package/dist/nextjs/cookies.js.map +1 -1
- package/dist/nextjs/hooks/useInitialAuthConfig.d.ts +31 -0
- package/dist/nextjs/hooks/useInitialAuthConfig.d.ts.map +1 -0
- package/dist/nextjs/hooks/useInitialAuthConfig.js +109 -0
- package/dist/nextjs/hooks/useInitialAuthConfig.js.map +1 -0
- package/dist/nextjs/index.d.ts +1 -0
- package/dist/nextjs/index.d.ts.map +1 -1
- package/dist/nextjs/index.js +13 -3
- package/dist/nextjs/index.js.map +1 -1
- package/dist/nextjs/providers/NextAuthProvider.d.ts +6 -7
- package/dist/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
- package/dist/nextjs/providers/NextAuthProvider.js +19 -138
- package/dist/nextjs/providers/NextAuthProvider.js.map +1 -1
- package/dist/nextjs/providers/NextAuthProviderClient.d.ts +11 -0
- package/dist/nextjs/providers/NextAuthProviderClient.d.ts.map +1 -0
- package/dist/nextjs/providers/NextAuthProviderClient.js +62 -0
- package/dist/nextjs/providers/NextAuthProviderClient.js.map +1 -0
- package/dist/nextjs/providers/ServerUserContext.d.ts +2 -0
- package/dist/nextjs/providers/ServerUserContext.d.ts.map +1 -0
- package/dist/nextjs/providers/ServerUserContext.js +5 -0
- package/dist/nextjs/providers/ServerUserContext.js.map +1 -0
- package/dist/nextjs/routeHandler.d.ts.map +1 -1
- package/dist/nextjs/routeHandler.js +241 -352
- package/dist/nextjs/routeHandler.js.map +1 -1
- package/dist/react-router-7/components/UserButton.js +1 -1
- package/dist/react-router-7/components/UserButton.js.map +1 -1
- package/dist/react-router-7/routeHandler.d.ts.map +1 -1
- package/dist/react-router-7/routeHandler.js +1 -0
- package/dist/react-router-7/routeHandler.js.map +1 -1
- package/dist/react-router-7/useUser.d.ts.map +1 -1
- package/dist/react-router-7/useUser.js +13 -2
- package/dist/react-router-7/useUser.js.map +1 -1
- package/dist/reactjs/components/ButtonContentOrLoader.d.ts.map +1 -1
- package/dist/reactjs/components/ButtonContentOrLoader.js +2 -4
- package/dist/reactjs/components/ButtonContentOrLoader.js.map +1 -1
- package/dist/reactjs/components/CivicAuthIframeContainer.d.ts +2 -0
- package/dist/reactjs/components/CivicAuthIframeContainer.d.ts.map +1 -0
- package/dist/reactjs/components/CivicAuthIframeContainer.js +26 -0
- package/dist/reactjs/components/CivicAuthIframeContainer.js.map +1 -0
- package/dist/reactjs/components/SignInButton.d.ts.map +1 -1
- package/dist/reactjs/components/SignInButton.js +11 -1
- package/dist/reactjs/components/SignInButton.js.map +1 -1
- package/dist/reactjs/components/UserButton.d.ts +9 -2
- package/dist/reactjs/components/UserButton.d.ts.map +1 -1
- package/dist/reactjs/components/UserButton.js +41 -9
- package/dist/reactjs/components/UserButton.js.map +1 -1
- package/dist/reactjs/components/index.d.ts +1 -0
- package/dist/reactjs/components/index.d.ts.map +1 -1
- package/dist/reactjs/components/index.js +1 -0
- package/dist/reactjs/components/index.js.map +1 -1
- package/dist/reactjs/core/GlobalAuthManager.d.ts +26 -0
- package/dist/reactjs/core/GlobalAuthManager.d.ts.map +1 -1
- package/dist/reactjs/core/GlobalAuthManager.js +76 -5
- package/dist/reactjs/core/GlobalAuthManager.js.map +1 -1
- package/dist/reactjs/hooks/useUser.d.ts +19 -2
- package/dist/reactjs/hooks/useUser.d.ts.map +1 -1
- package/dist/reactjs/hooks/useUser.js +95 -7
- package/dist/reactjs/hooks/useUser.js.map +1 -1
- package/dist/reactjs/index.d.ts +1 -2
- package/dist/reactjs/index.d.ts.map +1 -1
- package/dist/reactjs/index.js +1 -2
- package/dist/reactjs/index.js.map +1 -1
- package/dist/reactjs/providers/CivicAuthProvider.d.ts +2 -1
- package/dist/reactjs/providers/CivicAuthProvider.d.ts.map +1 -1
- package/dist/reactjs/providers/CivicAuthProvider.js +3 -1
- package/dist/reactjs/providers/CivicAuthProvider.js.map +1 -1
- package/dist/server/ServerAuthenticationResolver.d.ts.map +1 -1
- package/dist/server/ServerAuthenticationResolver.js +18 -0
- package/dist/server/ServerAuthenticationResolver.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/session.d.ts +51 -0
- package/dist/server/session.d.ts.map +1 -1
- package/dist/server/session.js +276 -15
- package/dist/server/session.js.map +1 -1
- package/dist/shared/components/SVGLoading.js +1 -1
- package/dist/shared/components/SVGLoading.js.map +1 -1
- package/dist/shared/components/UserButtonPresentation.d.ts.map +1 -0
- package/dist/shared/components/UserButtonPresentation.js.map +1 -0
- package/dist/shared/hooks/index.d.ts +1 -2
- package/dist/shared/hooks/index.d.ts.map +1 -1
- package/dist/shared/hooks/index.js +1 -2
- package/dist/shared/hooks/index.js.map +1 -1
- package/dist/shared/hooks/useBfcacheHandler.d.ts +23 -0
- package/dist/shared/hooks/useBfcacheHandler.d.ts.map +1 -0
- package/dist/shared/hooks/useBfcacheHandler.js +65 -0
- package/dist/shared/hooks/useBfcacheHandler.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/lib/util.d.ts +32 -0
- package/dist/shared/lib/util.d.ts.map +1 -1
- package/dist/shared/lib/util.js +79 -0
- package/dist/shared/lib/util.js.map +1 -1
- package/dist/shared/providers/AuthStatusContext.d.ts.map +1 -1
- package/dist/shared/providers/AuthStatusContext.js +2 -1
- package/dist/shared/providers/AuthStatusContext.js.map +1 -1
- package/dist/shared/providers/CivicAuthConfigContext.d.ts +2 -1
- package/dist/shared/providers/CivicAuthConfigContext.d.ts.map +1 -1
- package/dist/shared/providers/CivicAuthConfigContext.js +5 -2
- package/dist/shared/providers/CivicAuthConfigContext.js.map +1 -1
- package/dist/shared/providers/types.d.ts +1 -0
- package/dist/shared/providers/types.d.ts.map +1 -1
- package/dist/shared/providers/types.js.map +1 -1
- package/dist/shared/utils/locationChange.d.ts +34 -0
- package/dist/shared/utils/locationChange.d.ts.map +1 -0
- package/dist/shared/utils/locationChange.js +28 -0
- package/dist/shared/utils/locationChange.js.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/version.d.ts.map +1 -1
- package/dist/shared/version.js +1 -1
- package/dist/shared/version.js.map +1 -1
- package/dist/vanillajs/auth/AuthenticationEvents.d.ts +10 -1
- package/dist/vanillajs/auth/AuthenticationEvents.d.ts.map +1 -1
- package/dist/vanillajs/auth/AuthenticationEvents.js +29 -0
- package/dist/vanillajs/auth/AuthenticationEvents.js.map +1 -1
- package/dist/vanillajs/auth/BackendAuthenticationRefresher.d.ts.map +1 -1
- package/dist/vanillajs/auth/BackendAuthenticationRefresher.js +2 -2
- package/dist/vanillajs/auth/BackendAuthenticationRefresher.js.map +1 -1
- package/dist/vanillajs/auth/CivicAuth.d.ts +32 -0
- package/dist/vanillajs/auth/CivicAuth.d.ts.map +1 -1
- package/dist/vanillajs/auth/CivicAuth.js +255 -55
- package/dist/vanillajs/auth/CivicAuth.js.map +1 -1
- package/dist/vanillajs/auth/SessionManager.d.ts +3 -2
- package/dist/vanillajs/auth/SessionManager.d.ts.map +1 -1
- package/dist/vanillajs/auth/SessionManager.js +33 -7
- package/dist/vanillajs/auth/SessionManager.js.map +1 -1
- package/dist/vanillajs/auth/config/ConfigProcessor.d.ts.map +1 -1
- package/dist/vanillajs/auth/config/ConfigProcessor.js +2 -14
- package/dist/vanillajs/auth/config/ConfigProcessor.js.map +1 -1
- package/dist/vanillajs/auth/handlers/IframeAuthHandler.d.ts.map +1 -1
- package/dist/vanillajs/auth/handlers/IframeAuthHandler.js +64 -11
- package/dist/vanillajs/auth/handlers/IframeAuthHandler.js.map +1 -1
- package/dist/vanillajs/auth/handlers/MessageHandler.d.ts.map +1 -1
- package/dist/vanillajs/auth/handlers/MessageHandler.js +4 -1
- package/dist/vanillajs/auth/handlers/MessageHandler.js.map +1 -1
- package/dist/vanillajs/auth/handlers/PopupHandler.d.ts.map +1 -1
- package/dist/vanillajs/auth/handlers/PopupHandler.js +3 -1
- package/dist/vanillajs/auth/handlers/PopupHandler.js.map +1 -1
- package/dist/vanillajs/auth/types/AuthTypes.d.ts +11 -1
- package/dist/vanillajs/auth/types/AuthTypes.d.ts.map +1 -1
- package/dist/vanillajs/auth/types/AuthTypes.js.map +1 -1
- package/dist/vanillajs/iframe/IframeManager.d.ts +22 -1
- package/dist/vanillajs/iframe/IframeManager.d.ts.map +1 -1
- package/dist/vanillajs/iframe/IframeManager.js +184 -22
- package/dist/vanillajs/iframe/IframeManager.js.map +1 -1
- package/dist/vanillajs/types/index.d.ts +1 -1
- package/dist/vanillajs/types/index.d.ts.map +1 -1
- package/dist/vanillajs/types/index.js +1 -1
- package/dist/vanillajs/types/index.js.map +1 -1
- package/dist/vanillajs/ui/LoadingComponents.d.ts +4 -0
- package/dist/vanillajs/ui/LoadingComponents.d.ts.map +1 -1
- package/dist/vanillajs/ui/LoadingComponents.js +51 -1
- package/dist/vanillajs/ui/LoadingComponents.js.map +1 -1
- package/package.json +3 -3
- package/dist/nextjs/hooks/index.d.ts +0 -2
- package/dist/nextjs/hooks/index.d.ts.map +0 -1
- package/dist/nextjs/hooks/index.js +0 -2
- package/dist/nextjs/hooks/index.js.map +0 -1
- package/dist/nextjs/hooks/usePrevious.d.ts +0 -2
- package/dist/nextjs/hooks/usePrevious.d.ts.map +0 -1
- package/dist/nextjs/hooks/usePrevious.js +0 -9
- package/dist/nextjs/hooks/usePrevious.js.map +0 -1
- package/dist/nextjs/hooks/useUserCookie.d.ts +0 -9
- package/dist/nextjs/hooks/useUserCookie.d.ts.map +0 -1
- package/dist/nextjs/hooks/useUserCookie.js +0 -109
- package/dist/nextjs/hooks/useUserCookie.js.map +0 -1
- package/dist/react-router-7/components/UserButtonPresentation.d.ts.map +0 -1
- package/dist/react-router-7/components/UserButtonPresentation.js.map +0 -1
- package/dist/shared/components/BlockDisplay.d.ts +0 -6
- package/dist/shared/components/BlockDisplay.d.ts.map +0 -1
- package/dist/shared/components/BlockDisplay.js +0 -30
- package/dist/shared/components/BlockDisplay.js.map +0 -1
- package/dist/shared/components/CivicAuthIframe.d.ts +0 -10
- package/dist/shared/components/CivicAuthIframe.d.ts.map +0 -1
- package/dist/shared/components/CivicAuthIframe.js +0 -49
- package/dist/shared/components/CivicAuthIframe.js.map +0 -1
- package/dist/shared/components/CivicAuthIframeContainer.d.ts +0 -15
- package/dist/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
- package/dist/shared/components/CivicAuthIframeContainer.js +0 -177
- package/dist/shared/components/CivicAuthIframeContainer.js.map +0 -1
- package/dist/shared/components/CivicAuthLogoutIframeContainer.d.ts +0 -6
- package/dist/shared/components/CivicAuthLogoutIframeContainer.d.ts.map +0 -1
- package/dist/shared/components/CivicAuthLogoutIframeContainer.js +0 -51
- package/dist/shared/components/CivicAuthLogoutIframeContainer.js.map +0 -1
- package/dist/shared/components/IFrameAndLoading.d.ts +0 -7
- package/dist/shared/components/IFrameAndLoading.d.ts.map +0 -1
- package/dist/shared/components/IFrameAndLoading.js +0 -66
- package/dist/shared/components/IFrameAndLoading.js.map +0 -1
- package/dist/shared/hooks/useAuth.d.ts +0 -3
- package/dist/shared/hooks/useAuth.d.ts.map +0 -1
- package/dist/shared/hooks/useAuth.js +0 -12
- package/dist/shared/hooks/useAuth.js.map +0 -1
- package/dist/shared/hooks/useIframe.d.ts +0 -3
- package/dist/shared/hooks/useIframe.d.ts.map +0 -1
- package/dist/shared/hooks/useIframe.js +0 -13
- package/dist/shared/hooks/useIframe.js.map +0 -1
- package/dist/shared/hooks/useIsInIframe.d.ts +0 -7
- package/dist/shared/hooks/useIsInIframe.d.ts.map +0 -1
- package/dist/shared/hooks/useIsInIframe.js +0 -23
- package/dist/shared/hooks/useIsInIframe.js.map +0 -1
- package/dist/shared/hooks/useSignIn.d.ts +0 -20
- package/dist/shared/hooks/useSignIn.d.ts.map +0 -1
- package/dist/shared/hooks/useSignIn.js +0 -358
- package/dist/shared/hooks/useSignIn.js.map +0 -1
- package/dist/shared/providers/IframeProvider.d.ts +0 -28
- package/dist/shared/providers/IframeProvider.d.ts.map +0 -1
- package/dist/shared/providers/IframeProvider.js +0 -64
- package/dist/shared/providers/IframeProvider.js.map +0 -1
- /package/dist/{react-router-7 → shared}/components/UserButtonPresentation.d.ts +0 -0
- /package/dist/{react-router-7 → shared}/components/UserButtonPresentation.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthTypes.d.ts","sourceRoot":"","sources":["../../../../src/vanillajs/auth/types/AuthTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,WAAW,EACX,aAAa,
|
|
1
|
+
{"version":3,"file":"AuthTypes.d.ts","sourceRoot":"","sources":["../../../../src/vanillajs/auth/types/AuthTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthTypes.js","sourceRoot":"","sources":["../../../../src/vanillajs/auth/types/AuthTypes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AuthTypes.js","sourceRoot":"","sources":["../../../../src/vanillajs/auth/types/AuthTypes.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,CAAN,IAAY,kBAkBX;AAlBD,WAAY,kBAAkB;IAC5B,yDAAmC,CAAA;IACnC,iDAA2B,CAAA;IAC3B,6EAAuD,CAAA;IACvD,iEAA2C,CAAA;IAC3C,mEAA6C,CAAA;IAC7C,6DAAuC,CAAA;IACvC,qEAA+C,CAAA;IAC/C,yDAAmC,CAAA;IACnC,qDAA+B,CAAA;IAC/B,qDAA+B,CAAA;IAC/B,uDAAiC,CAAA;IACjC,iEAA2C,CAAA;IAC3C,mEAA6C,CAAA;IAC7C,6DAAuC,CAAA;IACvC,qDAA+B,CAAA;IAC/B,2DAAqC,CAAA;IACrC,uDAAiC,CAAA;AACnC,CAAC,EAlBW,kBAAkB,KAAlB,kBAAkB,QAkB7B;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,CAAC,aAAa;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,4BAA4B;IAC5B,iBAAiB,EAAE,2BAA2B;IAC9C,eAAe,EAAE,yBAAyB;CAClC,CAAC;AAgCX,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB;IAFlB,YACE,OAAe,EACC,IAAwB;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAoB;QAGxC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF","sourcesContent":["import type { AuthenticationEvents } from \"../AuthenticationEvents.js\";\nimport type {\n DisplayMode as BaseDisplayMode,\n AuthStorage,\n FrameworkType,\n User,\n} from \"../../../types.js\";\nimport type { BackendEndpoints } from \"../../../server/config.js\";\n\n/**\n * Extended DisplayMode for VanillaJS that includes \"embedded\" option\n * This provides a cleaner API where users can simply use displayMode: \"embedded\"\n * instead of displayMode: \"iframe\" + iframeDisplayMode: \"embedded\"\n */\nexport type VanillaJSDisplayMode = BaseDisplayMode | \"embedded\";\n\n/**\n * Error codes for CivicAuth errors\n */\nexport enum CivicAuthErrorCode {\n CONFIG_REQUIRED = \"CONFIG_REQUIRED\",\n INIT_FAILED = \"INIT_FAILED\",\n ENDPOINTS_NOT_INITIALIZED = \"ENDPOINTS_NOT_INITIALIZED\",\n CONTAINER_NOT_FOUND = \"CONTAINER_NOT_FOUND\",\n AUTH_PROCESS_TIMEOUT = \"AUTH_PROCESS_TIMEOUT\",\n IFRAME_LOAD_ERROR = \"IFRAME_LOAD_ERROR\",\n IFRAME_PRELOAD_FAILED = \"IFRAME_PRELOAD_FAILED\",\n INVALID_MESSAGE = \"INVALID_MESSAGE\",\n LOGOUT_FAILED = \"LOGOUT_FAILED\",\n POPUP_BLOCKED = \"popup_blocked\",\n USER_CANCELLED = \"user_cancelled\",\n CONFIGURATION_ERROR = \"configuration_error\",\n TOKEN_REFRESH_FAILED = \"token_refresh_failed\",\n SESSION_NOT_FOUND = \"session_not_found\",\n STORAGE_ERROR = \"storage_error\",\n IFRAME_NOT_FOUND = \"iframe_not_found\",\n INTERNAL_ERROR = \"internal_error\",\n}\n\n/**\n * Constants for the auth client\n */\nexport const DEFAULT_AUTH_PROCESS_TIMEOUT = 600000; // 10 minutes\n\nexport const CIVIC_AUTH_CONSTANTS = {\n DEFAULT_IFRAME_ID: \"civic-auth-iframe\",\n DEFAULT_AUTH_PROCESS_TIMEOUT,\n SUCCESS_SIGNAL_ID: \"civic-auth-success-signal\",\n ERROR_SIGNAL_ID: \"civic-auth-error-signal\",\n} as const;\n\n/**\n * Message types for postMessage communication\n */\nexport type AuthMessageType = \"auth_success\" | \"auth_error\";\n\nexport interface AuthMessage {\n type: AuthMessageType;\n detail?: string;\n data?: unknown;\n error?: unknown;\n}\n\n/**\n * Login app message types for postMessage communication\n */\nexport interface LoginAppMessage {\n source: \"civicloginApp\";\n type: \"design\" | \"generatePopupFailed\" | \"auth_success\" | string;\n clientId: string;\n data?: unknown;\n}\n\n/**\n * Combined message type for all iframe communications\n */\nexport type IframeMessage =\n | AuthMessage\n | LoginAppMessage\n | Record<string, unknown>;\n\nexport class CivicAuthError extends Error {\n constructor(\n message: string,\n public readonly code: CivicAuthErrorCode,\n ) {\n super(message);\n this.name = \"CivicAuthError\";\n }\n}\n\n/**\n * Configuration options for the CivicAuth client\n * Uses discriminated union to make clientId optional when loginUrl is provided\n */\nexport type CivicAuthClientConfig = {\n /** URL to redirect to after authentication */\n redirectUrl?: string;\n /** URL to redirect to after logout - if not provided, will use redirectUrl */\n logoutRedirectUrl?: string;\n /** Base URL of the OAuth server */\n oauthServerBaseUrl?: string;\n /** Array of OAuth scopes to request */\n scopes?: string[];\n /** HTML element or element ID where the auth iframe will be mounted (required for embedded iframe mode) */\n targetContainerElement?: HTMLElement | string;\n /** Text signals for success and error states */\n textSignals?: {\n /** Text to display on successful authentication */\n success: string;\n /** Optional text to display on authentication error */\n error?: string;\n };\n /** Display mode for the authentication UI - VanillaJS supports \"embedded\" for simplified API */\n displayMode?: VanillaJSDisplayMode;\n /** Display mode for iframe rendering - modal (full-screen overlay) or embedded (within container) */\n iframeDisplayMode?: \"modal\" | \"embedded\";\n /**\n * Timeout duration in milliseconds for the entire authentication process.\n * If the authentication process takes longer than this duration, it will be cancelled\n * and an error will be thrown.\n * Note: This timeout is not applied to embedded iframe mode, where the iframe remains persistent.\n */\n authProcessTimeout?: number;\n /** Event handlers for authentication events */\n events?: AuthenticationEvents;\n /** Custom ID for the auth iframe */\n iframeId?: string;\n /** Custom storage adapter for auth state - uses shared AuthStorage interface */\n storageAdapter?: AuthStorage;\n /** OAuth nonce parameter for security */\n nonce?: string;\n /** Initial state for OAuth flow */\n initialState?: string;\n /** Logging configuration */\n logging?: LoggingConfig;\n /**\n * Custom backend endpoints configuration for backend integration\n * Only used when loginUrl is provided. Allows overriding default endpoints.\n */\n backendEndpoints?: BackendEndpoints;\n /** Framework being used (for analytics) - internal use only */\n framework?: FrameworkType;\n /** Whether to automatically preload the iframe for instant sign-in (defaults to true) */\n preloadIframe?: boolean;\n /** Whether to automatically switch to redirect mode when browser doesn't support iframe-based auth (defaults to true) */\n autoRedirect?: boolean;\n /** URL to redirect to after successful login - defaults to the page that initiated login */\n loginSuccessUrl?: string;\n /** Initial user data to avoid backend calls during authentication state checks.\n * - User object: user is authenticated\n * - null: explicitly no user (skip backend checks)\n * - undefined: unknown state (check backend)\n */\n initialUser?: User | null;\n} & (\n | {\n /** OAuth client ID - required for standard OAuth flow */\n clientId: string;\n /** Custom login URL for backend integration - optional */\n loginUrl?: string;\n }\n | {\n /** OAuth client ID - optional when using backend integration */\n clientId?: string;\n /** Custom login URL for backend integration - required when clientId is not provided */\n loginUrl: string;\n }\n);\n\nexport interface LoggingConfig {\n enabled: boolean;\n namespace?: string;\n level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n}\n\n/**\n * Internal configuration with all optional properties resolved to required ones.\n * Maintains the discriminated union structure for clientId/loginUrl\n */\nexport type ProcessedCivicAuthConfig = {\n redirectUrl: string;\n logoutRedirectUrl: string;\n oauthServerBaseUrl: string;\n scopes: string[];\n textSignals: {\n success: string;\n error?: string;\n };\n storageAdapter: AuthStorage;\n logging: LoggingConfig;\n displayMode: BaseDisplayMode; // Internal config uses base DisplayMode after processing\n authProcessTimeout: number;\n iframeId: string;\n prompt: string;\n nonce?: string;\n backendEndpoints?: BackendEndpoints;\n preloadIframe: boolean;\n autoRedirect: boolean;\n // targetContainerElement remains optional as it's not needed for all display modes\n targetContainerElement?: HTMLElement | string;\n iframeDisplayMode?: \"modal\" | \"embedded\";\n events?: AuthenticationEvents;\n initialState?: string;\n framework?: FrameworkType;\n loginSuccessUrl?: string;\n initialUser?: User | null;\n} & (\n | {\n /** OAuth client ID - required for standard OAuth flow */\n clientId: string;\n /** Custom login URL for backend integration - optional */\n loginUrl?: string;\n }\n | {\n /** OAuth client ID - optional when using backend integration */\n clientId?: string;\n /** Custom login URL for backend integration - required when clientId is not provided */\n loginUrl: string;\n }\n);\n"]}
|
|
@@ -96,6 +96,14 @@ export declare class IframeManager {
|
|
|
96
96
|
*/
|
|
97
97
|
private setupEmbeddedIframe;
|
|
98
98
|
private showShimmerLoader;
|
|
99
|
+
/**
|
|
100
|
+
* Shows a centered loading spinner for embedded mode
|
|
101
|
+
*/
|
|
102
|
+
private showLoadingSpinner;
|
|
103
|
+
/**
|
|
104
|
+
* Gets the background color based on the user's theme preference
|
|
105
|
+
*/
|
|
106
|
+
private getBackgroundColor;
|
|
99
107
|
private hideShimmerLoader;
|
|
100
108
|
private markIframeAsLoaded;
|
|
101
109
|
private updateWrapperForLoadedContent;
|
|
@@ -103,13 +111,26 @@ export declare class IframeManager {
|
|
|
103
111
|
show(): void;
|
|
104
112
|
private cleanupIframeOnly;
|
|
105
113
|
cleanup(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Clean up resources without removing the iframe - useful for embedded mode
|
|
116
|
+
* This preserves the iframe and shows loading state after auth success
|
|
117
|
+
*/
|
|
118
|
+
cleanupResourcesOnly(): void;
|
|
119
|
+
/**
|
|
120
|
+
* Recreate basic embedded structure after cleanup for showing loading state
|
|
121
|
+
*/
|
|
122
|
+
private recreateEmbeddedStructure;
|
|
106
123
|
/**
|
|
107
124
|
* Resets all modal-specific styles by removing CSS properties that were set with !important
|
|
108
125
|
*/
|
|
109
126
|
private resetModalStyles;
|
|
110
127
|
resize(): void;
|
|
111
128
|
/**
|
|
112
|
-
*
|
|
129
|
+
* Get the current display mode
|
|
130
|
+
*/
|
|
131
|
+
getDisplayMode(): "embedded" | "modal";
|
|
132
|
+
/**
|
|
133
|
+
* Force show the appropriate loader and hide iframe content
|
|
113
134
|
* Used when we want to mask non-login content
|
|
114
135
|
*/
|
|
115
136
|
forceShowLoader(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeManager.d.ts","sourceRoot":"","sources":["../../../src/vanillajs/iframe/IframeManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IframeManager.d.ts","sourceRoot":"","sources":["../../../src/vanillajs/iframe/IframeManager.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IAExB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAU;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAW;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAA2B;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAe;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAU;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IAEjD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAiC;IACxD,OAAO,CAAC,YAAY,CAAC,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,0BAA0B,CAAC,CAAgC;IACnE,OAAO,CAAC,MAAM,CAAkC;IAEhD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAc,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAQ;WAElD,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;gBAKnD,MAAM,EAAE,YAAY;IAYhC,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,qBAAqB;IAW7B;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IA2D7C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IAuGnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAehC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA+ChC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2BlC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IA6CrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,6BAA6B;IAkC9B,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,IAAI;IAyBnB,OAAO,CAAC,iBAAiB;IAyClB,OAAO,IAAI,IAAI;IA0DtB;;;OAGG;IACI,oBAAoB,IAAI,IAAI;IA4DnC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAsBjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BjB,MAAM,IAAI,IAAI;IAMrB;;OAEG;IACI,cAAc,IAAI,UAAU,GAAG,OAAO;IAI7C;;;OAGG;IACI,eAAe,IAAI,IAAI;IAgC9B;;;OAGG;IACI,eAAe,IAAI,IAAI;IAU9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAMhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAMjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAMlC;;OAEG;IACI,iBAAiB,IAAI,OAAO;IAInC;;OAEG;IACI,eAAe,IAAI,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;;OAGG;IACI,oBAAoB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAI/C,gCAAgC,IAAI,IAAI;CAgDhD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CivicIframeResizer } from "./IframeResizer.js";
|
|
2
|
-
import { createIframeShimmerLoader, createCloseButton, } from "../ui/LoadingComponents.js";
|
|
2
|
+
import { createIframeShimmerLoader, createCenteredLoadingSpinner, createCloseButton, } from "../ui/LoadingComponents.js";
|
|
3
3
|
import { createLogger } from "../utils/logger.js";
|
|
4
4
|
import { WAIT_FOR_LOGIN_APP_BROWSER_DETECTION_TIMEOUT } from "../../constants.js";
|
|
5
5
|
/**
|
|
@@ -9,10 +9,10 @@ import { WAIT_FOR_LOGIN_APP_BROWSER_DETECTION_TIMEOUT } from "../../constants.js
|
|
|
9
9
|
export class IframeManager {
|
|
10
10
|
// Constants for styling and configuration
|
|
11
11
|
static MODAL_Z_INDEX = "1050";
|
|
12
|
-
static MODAL_WIDTH = "
|
|
12
|
+
static MODAL_WIDTH = "22rem"; // 360px
|
|
13
13
|
static MODAL_BACKDROP_COLOR = "rgba(17, 24, 39, 0.5)";
|
|
14
14
|
static MODAL_BACKDROP_BLUR = "blur(4px)";
|
|
15
|
-
static BORDER_RADIUS = "
|
|
15
|
+
static BORDER_RADIUS = "26px";
|
|
16
16
|
static TRANSITION_DURATION = "250ms";
|
|
17
17
|
static MODAL_MIN_HEIGHT = "26px";
|
|
18
18
|
static EMBEDDED_MIN_HEIGHT = "225px";
|
|
@@ -60,8 +60,8 @@ export class IframeManager {
|
|
|
60
60
|
this.container.style.position = "relative";
|
|
61
61
|
this.container.style.width = config.width || "auto";
|
|
62
62
|
this.container.style.height = config.height || "auto";
|
|
63
|
-
this.container.style.backgroundColor = "
|
|
64
|
-
this.container.style.background = "
|
|
63
|
+
this.container.style.backgroundColor = "transparent";
|
|
64
|
+
this.container.style.background = "transparent";
|
|
65
65
|
this.container.style.borderRadius = IframeManager.BORDER_RADIUS;
|
|
66
66
|
this.container.style.overflow = "hidden";
|
|
67
67
|
this.container.style.transition = "all 0.5s ease-in-out";
|
|
@@ -189,9 +189,13 @@ export class IframeManager {
|
|
|
189
189
|
}
|
|
190
190
|
else {
|
|
191
191
|
if (this.iframeWrapper) {
|
|
192
|
-
this.iframeWrapper.style.display = "
|
|
192
|
+
this.iframeWrapper.style.display = "flex";
|
|
193
193
|
// Apply wrapper styling that was skipped during preload
|
|
194
194
|
this.applyIframeWrapperStyling();
|
|
195
|
+
// Add loading spinner if content isn't loaded yet
|
|
196
|
+
if (!this.isIframeLoaded) {
|
|
197
|
+
this.showLoadingSpinner();
|
|
198
|
+
}
|
|
195
199
|
}
|
|
196
200
|
}
|
|
197
201
|
// Show the container
|
|
@@ -418,9 +422,29 @@ export class IframeManager {
|
|
|
418
422
|
this.iframeWrapper.style.width = "100%";
|
|
419
423
|
this.iframeWrapper.style.height = "auto";
|
|
420
424
|
this.iframeWrapper.style.minHeight = IframeManager.EMBEDDED_MIN_HEIGHT;
|
|
425
|
+
this.iframeWrapper.style.backgroundColor = this.getBackgroundColor();
|
|
421
426
|
this.iframeWrapper.style.display = "none"; // Keep hidden during preload
|
|
422
|
-
|
|
423
|
-
this.iframeWrapper.
|
|
427
|
+
this.iframeWrapper.style.alignItems = "center";
|
|
428
|
+
this.iframeWrapper.style.justifyContent = "center";
|
|
429
|
+
// Apply initial wrapper styling (border radius)
|
|
430
|
+
this.applyIframeWrapperStyling();
|
|
431
|
+
// Create a content wrapper for the iframe
|
|
432
|
+
const iframeContentWrapper = document.createElement("div");
|
|
433
|
+
iframeContentWrapper.style.width = "100%";
|
|
434
|
+
iframeContentWrapper.style.minWidth = "100%";
|
|
435
|
+
iframeContentWrapper.style.alignItems = "center";
|
|
436
|
+
iframeContentWrapper.style.justifyContent = "center";
|
|
437
|
+
iframeContentWrapper.style.borderRadius = IframeManager.BORDER_RADIUS;
|
|
438
|
+
iframeContentWrapper.style.overflow = "hidden";
|
|
439
|
+
iframeContentWrapper.style.opacity = "1"; // Already loaded during preload
|
|
440
|
+
iframeContentWrapper.style.transition = "opacity 0.5s ease-in-out";
|
|
441
|
+
// Add iframe to content wrapper
|
|
442
|
+
iframeContentWrapper.appendChild(this.iframe);
|
|
443
|
+
// Add content wrapper to main wrapper
|
|
444
|
+
this.iframeWrapper.appendChild(iframeContentWrapper);
|
|
445
|
+
// Store reference for later use
|
|
446
|
+
this.contentWrapper = iframeContentWrapper;
|
|
447
|
+
// Add wrapper to container
|
|
424
448
|
this.container.appendChild(this.iframeWrapper);
|
|
425
449
|
}
|
|
426
450
|
/**
|
|
@@ -435,7 +459,7 @@ export class IframeManager {
|
|
|
435
459
|
this.contentWrapper = document.createElement("div");
|
|
436
460
|
this.contentWrapper.style.position = "relative";
|
|
437
461
|
this.contentWrapper.style.overflow = "hidden";
|
|
438
|
-
this.contentWrapper.style.width = IframeManager.MODAL_WIDTH; //
|
|
462
|
+
this.contentWrapper.style.width = IframeManager.MODAL_WIDTH; // 360px like React version
|
|
439
463
|
// Apply initial visual styling
|
|
440
464
|
this.applyModalVisualStyling();
|
|
441
465
|
// Create inner iframe wrapper to match React structure
|
|
@@ -502,12 +526,32 @@ export class IframeManager {
|
|
|
502
526
|
this.iframeWrapper.style.width = "100%";
|
|
503
527
|
this.iframeWrapper.style.height = "auto";
|
|
504
528
|
this.iframeWrapper.style.minHeight = IframeManager.EMBEDDED_MIN_HEIGHT; // Embedded mode minimum
|
|
505
|
-
|
|
529
|
+
this.iframeWrapper.style.backgroundColor = this.getBackgroundColor();
|
|
530
|
+
this.iframeWrapper.style.display = "flex";
|
|
531
|
+
this.iframeWrapper.style.alignItems = "center";
|
|
532
|
+
this.iframeWrapper.style.justifyContent = "center";
|
|
533
|
+
this.iframeWrapper.setAttribute("data-civic-wrapper", "true");
|
|
534
|
+
// Apply initial wrapper styling (border radius)
|
|
506
535
|
this.applyIframeWrapperStyling();
|
|
507
|
-
// Add
|
|
508
|
-
this.
|
|
509
|
-
//
|
|
510
|
-
|
|
536
|
+
// Add centered loading spinner for embedded mode
|
|
537
|
+
this.showLoadingSpinner();
|
|
538
|
+
// Create a content wrapper for the iframe
|
|
539
|
+
const iframeContentWrapper = document.createElement("div");
|
|
540
|
+
iframeContentWrapper.style.width = "100%";
|
|
541
|
+
iframeContentWrapper.style.minWidth = "100%";
|
|
542
|
+
iframeContentWrapper.style.alignItems = "center";
|
|
543
|
+
iframeContentWrapper.style.justifyContent = "center";
|
|
544
|
+
iframeContentWrapper.style.borderRadius = IframeManager.BORDER_RADIUS;
|
|
545
|
+
iframeContentWrapper.style.overflow = "hidden";
|
|
546
|
+
iframeContentWrapper.style.opacity = "0";
|
|
547
|
+
iframeContentWrapper.style.transition = "opacity 0.5s ease-in-out";
|
|
548
|
+
// Add iframe to content wrapper
|
|
549
|
+
iframeContentWrapper.appendChild(this.iframe);
|
|
550
|
+
// Add content wrapper to main wrapper
|
|
551
|
+
this.iframeWrapper.appendChild(iframeContentWrapper);
|
|
552
|
+
// Store reference for later use
|
|
553
|
+
this.contentWrapper = iframeContentWrapper;
|
|
554
|
+
// Add wrapper to container
|
|
511
555
|
this.container.appendChild(this.iframeWrapper);
|
|
512
556
|
}
|
|
513
557
|
showShimmerLoader(parentElement, backgroundColor = "white", maxWidth) {
|
|
@@ -516,6 +560,29 @@ export class IframeManager {
|
|
|
516
560
|
parentElement.appendChild(this.shimmerLoader);
|
|
517
561
|
}
|
|
518
562
|
}
|
|
563
|
+
/**
|
|
564
|
+
* Shows a centered loading spinner for embedded mode
|
|
565
|
+
*/
|
|
566
|
+
showLoadingSpinner() {
|
|
567
|
+
if (!this.isIframeLoaded && !this.shimmerLoader && this.iframeWrapper) {
|
|
568
|
+
this.shimmerLoader = createCenteredLoadingSpinner();
|
|
569
|
+
this.iframeWrapper.appendChild(this.shimmerLoader);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Gets the background color based on the user's theme preference
|
|
574
|
+
*/
|
|
575
|
+
getBackgroundColor() {
|
|
576
|
+
// Check if we're in a browser environment
|
|
577
|
+
if (typeof window === "undefined") {
|
|
578
|
+
return "#8E949D"; // Default gray when SSR
|
|
579
|
+
}
|
|
580
|
+
// Use media query to detect dark mode preference
|
|
581
|
+
const isDarkMode = window.matchMedia &&
|
|
582
|
+
window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
583
|
+
// Return appropriate background color - matching React constants
|
|
584
|
+
return isDarkMode ? "rgb(30, 41, 59)" : "white";
|
|
585
|
+
}
|
|
519
586
|
hideShimmerLoader() {
|
|
520
587
|
if (this.shimmerLoader && this.shimmerLoader.parentNode) {
|
|
521
588
|
// Store reference for cleanup
|
|
@@ -544,8 +611,16 @@ export class IframeManager {
|
|
|
544
611
|
}
|
|
545
612
|
}
|
|
546
613
|
updateWrapperForLoadedContent() {
|
|
547
|
-
//
|
|
548
|
-
if (this.
|
|
614
|
+
// For embedded mode, fade in both the content wrapper and iframe
|
|
615
|
+
if (this.displayMode === "embedded" && this.contentWrapper) {
|
|
616
|
+
this.contentWrapper.style.opacity = "1";
|
|
617
|
+
// Also make sure the iframe itself is visible
|
|
618
|
+
if (this.iframe) {
|
|
619
|
+
this.iframe.style.opacity = "1";
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
else if (this.iframe) {
|
|
623
|
+
// For modal mode, fade in the iframe directly
|
|
549
624
|
this.iframe.style.opacity = "1";
|
|
550
625
|
}
|
|
551
626
|
// Show close button for modal mode when content is loaded
|
|
@@ -676,6 +751,81 @@ export class IframeManager {
|
|
|
676
751
|
this.resetModalStyles();
|
|
677
752
|
}
|
|
678
753
|
}
|
|
754
|
+
/**
|
|
755
|
+
* Clean up resources without removing the iframe - useful for embedded mode
|
|
756
|
+
* This preserves the iframe and shows loading state after auth success
|
|
757
|
+
*/
|
|
758
|
+
cleanupResourcesOnly() {
|
|
759
|
+
if (this.resizer) {
|
|
760
|
+
this.resizer.cleanup();
|
|
761
|
+
this.resizer = null;
|
|
762
|
+
}
|
|
763
|
+
// Clean up shimmer loader
|
|
764
|
+
this.hideShimmerLoader();
|
|
765
|
+
// Clean up close button (only exists in modal mode)
|
|
766
|
+
if (this.closeButton && this.closeButton.parentNode) {
|
|
767
|
+
this.closeButton.parentNode.removeChild(this.closeButton);
|
|
768
|
+
this.closeButton = null;
|
|
769
|
+
}
|
|
770
|
+
// Clean up message listener
|
|
771
|
+
if (this.iframeReadyMessageListener) {
|
|
772
|
+
window.removeEventListener("message", this.iframeReadyMessageListener);
|
|
773
|
+
this.iframeReadyMessageListener = undefined;
|
|
774
|
+
}
|
|
775
|
+
// Remove keyboard event listener
|
|
776
|
+
if (this.keydownHandler) {
|
|
777
|
+
window.removeEventListener("keydown", this.keydownHandler);
|
|
778
|
+
this.keydownHandler = undefined;
|
|
779
|
+
}
|
|
780
|
+
// Remove click event listener
|
|
781
|
+
if (this.clickHandler) {
|
|
782
|
+
this.container.removeEventListener("click", this.clickHandler);
|
|
783
|
+
this.clickHandler = undefined;
|
|
784
|
+
}
|
|
785
|
+
// Reset loading state but keep iframe structure
|
|
786
|
+
this.isIframeLoaded = false;
|
|
787
|
+
// Reset preload state
|
|
788
|
+
this.isPreloaded = false;
|
|
789
|
+
this.preloadUrl = null;
|
|
790
|
+
// Clear wrapper references but don't remove from DOM
|
|
791
|
+
this.contentWrapper = null;
|
|
792
|
+
this.iframeWrapper = null;
|
|
793
|
+
// For embedded mode, show loading state after cleanup
|
|
794
|
+
if (this.displayMode === "embedded") {
|
|
795
|
+
// Find the existing wrapper or create structure for loading state
|
|
796
|
+
const existingWrapper = this.container.querySelector("[data-civic-wrapper]");
|
|
797
|
+
if (existingWrapper) {
|
|
798
|
+
this.iframeWrapper = existingWrapper;
|
|
799
|
+
this.forceShowLoader();
|
|
800
|
+
}
|
|
801
|
+
else {
|
|
802
|
+
// Fallback: recreate basic structure for embedded mode
|
|
803
|
+
this.recreateEmbeddedStructure();
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
/**
|
|
808
|
+
* Recreate basic embedded structure after cleanup for showing loading state
|
|
809
|
+
*/
|
|
810
|
+
recreateEmbeddedStructure() {
|
|
811
|
+
// Create wrapper for embedded mode
|
|
812
|
+
this.iframeWrapper = document.createElement("div");
|
|
813
|
+
this.iframeWrapper.style.position = "relative";
|
|
814
|
+
this.iframeWrapper.style.overflow = "hidden";
|
|
815
|
+
this.iframeWrapper.style.width = "100%";
|
|
816
|
+
this.iframeWrapper.style.height = "auto";
|
|
817
|
+
this.iframeWrapper.style.minHeight = IframeManager.EMBEDDED_MIN_HEIGHT;
|
|
818
|
+
this.iframeWrapper.style.backgroundColor = this.getBackgroundColor();
|
|
819
|
+
this.iframeWrapper.style.display = "flex";
|
|
820
|
+
this.iframeWrapper.style.alignItems = "center";
|
|
821
|
+
this.iframeWrapper.style.justifyContent = "center";
|
|
822
|
+
this.iframeWrapper.style.borderRadius = IframeManager.BORDER_RADIUS;
|
|
823
|
+
this.iframeWrapper.setAttribute("data-civic-wrapper", "true");
|
|
824
|
+
// Add to container
|
|
825
|
+
this.container.appendChild(this.iframeWrapper);
|
|
826
|
+
// Show loading spinner
|
|
827
|
+
this.forceShowLoader();
|
|
828
|
+
}
|
|
679
829
|
/**
|
|
680
830
|
* Resets all modal-specific styles by removing CSS properties that were set with !important
|
|
681
831
|
*/
|
|
@@ -710,11 +860,17 @@ export class IframeManager {
|
|
|
710
860
|
}
|
|
711
861
|
}
|
|
712
862
|
/**
|
|
713
|
-
*
|
|
863
|
+
* Get the current display mode
|
|
864
|
+
*/
|
|
865
|
+
getDisplayMode() {
|
|
866
|
+
return this.displayMode;
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* Force show the appropriate loader and hide iframe content
|
|
714
870
|
* Used when we want to mask non-login content
|
|
715
871
|
*/
|
|
716
872
|
forceShowLoader() {
|
|
717
|
-
// Reset loading state to show
|
|
873
|
+
// Reset loading state to show loader
|
|
718
874
|
this.isIframeLoaded = false;
|
|
719
875
|
// Hide iframe content
|
|
720
876
|
if (this.iframe) {
|
|
@@ -729,9 +885,16 @@ export class IframeManager {
|
|
|
729
885
|
this.removeModalVisualStyling();
|
|
730
886
|
}
|
|
731
887
|
this.removeIframeWrapperStyling();
|
|
732
|
-
// Show
|
|
888
|
+
// Show appropriate loader based on display mode
|
|
733
889
|
if (this.iframeWrapper && !this.shimmerLoader) {
|
|
734
|
-
|
|
890
|
+
if (this.displayMode === "embedded") {
|
|
891
|
+
// For embedded mode, use the centered loading spinner (original loader)
|
|
892
|
+
this.showLoadingSpinner();
|
|
893
|
+
}
|
|
894
|
+
else {
|
|
895
|
+
// For modal mode, use the shimmer loader
|
|
896
|
+
this.showShimmerLoader(this.iframeWrapper, "white");
|
|
897
|
+
}
|
|
735
898
|
}
|
|
736
899
|
}
|
|
737
900
|
/**
|
|
@@ -762,7 +925,6 @@ export class IframeManager {
|
|
|
762
925
|
removeModalVisualStyling() {
|
|
763
926
|
if (!this.contentWrapper)
|
|
764
927
|
return;
|
|
765
|
-
this.contentWrapper.style.borderRadius = "0";
|
|
766
928
|
this.contentWrapper.style.boxShadow = "none";
|
|
767
929
|
}
|
|
768
930
|
/**
|
|
@@ -779,7 +941,7 @@ export class IframeManager {
|
|
|
779
941
|
removeIframeWrapperStyling() {
|
|
780
942
|
if (!this.iframeWrapper)
|
|
781
943
|
return;
|
|
782
|
-
|
|
944
|
+
// Add any styles you want to remove here
|
|
783
945
|
}
|
|
784
946
|
/**
|
|
785
947
|
* Check if an iframe is currently preloaded
|